@tribepad/themis 1.0.0

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 (654) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.md +114 -0
  4. package/dist/Carousel-NTZX5TOW.js +16 -0
  5. package/dist/Carousel-NTZX5TOW.js.map +1 -0
  6. package/dist/Carousel-YH3DOQJU.mjs +7 -0
  7. package/dist/Carousel-YH3DOQJU.mjs.map +1 -0
  8. package/dist/chunk-2HIUTHMU.mjs +234 -0
  9. package/dist/chunk-2HIUTHMU.mjs.map +1 -0
  10. package/dist/chunk-34GTFTDO.js +431 -0
  11. package/dist/chunk-34GTFTDO.js.map +1 -0
  12. package/dist/chunk-3H7ASYR7.js +250 -0
  13. package/dist/chunk-3H7ASYR7.js.map +1 -0
  14. package/dist/chunk-3IEN7JOP.js +316 -0
  15. package/dist/chunk-3IEN7JOP.js.map +1 -0
  16. package/dist/chunk-3JHN4GAL.js +326 -0
  17. package/dist/chunk-3JHN4GAL.js.map +1 -0
  18. package/dist/chunk-3MJPASQU.js +232 -0
  19. package/dist/chunk-3MJPASQU.js.map +1 -0
  20. package/dist/chunk-3XD2JUL3.js +572 -0
  21. package/dist/chunk-3XD2JUL3.js.map +1 -0
  22. package/dist/chunk-3YOY2VJ6.js +189 -0
  23. package/dist/chunk-3YOY2VJ6.js.map +1 -0
  24. package/dist/chunk-4DU5JSXB.js +408 -0
  25. package/dist/chunk-4DU5JSXB.js.map +1 -0
  26. package/dist/chunk-4E4E2GSS.js +352 -0
  27. package/dist/chunk-4E4E2GSS.js.map +1 -0
  28. package/dist/chunk-4NHAP4AN.mjs +3 -0
  29. package/dist/chunk-4NHAP4AN.mjs.map +1 -0
  30. package/dist/chunk-4S33J5NY.mjs +415 -0
  31. package/dist/chunk-4S33J5NY.mjs.map +1 -0
  32. package/dist/chunk-5SMGRT3G.mjs +354 -0
  33. package/dist/chunk-5SMGRT3G.mjs.map +1 -0
  34. package/dist/chunk-5SVLJN2C.mjs +22 -0
  35. package/dist/chunk-5SVLJN2C.mjs.map +1 -0
  36. package/dist/chunk-66WTU4EB.mjs +299 -0
  37. package/dist/chunk-66WTU4EB.mjs.map +1 -0
  38. package/dist/chunk-6S25NMOT.mjs +335 -0
  39. package/dist/chunk-6S25NMOT.mjs.map +1 -0
  40. package/dist/chunk-6SP7UB3D.js +4 -0
  41. package/dist/chunk-6SP7UB3D.js.map +1 -0
  42. package/dist/chunk-6TYWWQHM.mjs +565 -0
  43. package/dist/chunk-6TYWWQHM.mjs.map +1 -0
  44. package/dist/chunk-A3YUJA6W.mjs +384 -0
  45. package/dist/chunk-A3YUJA6W.mjs.map +1 -0
  46. package/dist/chunk-A6KEDVUR.js +61 -0
  47. package/dist/chunk-A6KEDVUR.js.map +1 -0
  48. package/dist/chunk-A77RUEWL.js +730 -0
  49. package/dist/chunk-A77RUEWL.js.map +1 -0
  50. package/dist/chunk-AA4IKMPE.mjs +3 -0
  51. package/dist/chunk-AA4IKMPE.mjs.map +1 -0
  52. package/dist/chunk-AKIA6GW6.mjs +163 -0
  53. package/dist/chunk-AKIA6GW6.mjs.map +1 -0
  54. package/dist/chunk-AL6P275L.mjs +435 -0
  55. package/dist/chunk-AL6P275L.mjs.map +1 -0
  56. package/dist/chunk-AZ3RJYTB.js +37 -0
  57. package/dist/chunk-AZ3RJYTB.js.map +1 -0
  58. package/dist/chunk-B5Q4UPL6.js +32 -0
  59. package/dist/chunk-B5Q4UPL6.js.map +1 -0
  60. package/dist/chunk-B6DHPMDP.mjs +335 -0
  61. package/dist/chunk-B6DHPMDP.mjs.map +1 -0
  62. package/dist/chunk-BDXKKMBZ.mjs +184 -0
  63. package/dist/chunk-BDXKKMBZ.mjs.map +1 -0
  64. package/dist/chunk-BL6E2DLZ.mjs +52 -0
  65. package/dist/chunk-BL6E2DLZ.mjs.map +1 -0
  66. package/dist/chunk-CGFDS4XS.mjs +121 -0
  67. package/dist/chunk-CGFDS4XS.mjs.map +1 -0
  68. package/dist/chunk-CJIW5TKI.js +139 -0
  69. package/dist/chunk-CJIW5TKI.js.map +1 -0
  70. package/dist/chunk-CKNISJOQ.js +314 -0
  71. package/dist/chunk-CKNISJOQ.js.map +1 -0
  72. package/dist/chunk-D6CBOECS.mjs +1757 -0
  73. package/dist/chunk-D6CBOECS.mjs.map +1 -0
  74. package/dist/chunk-DDWEVC2S.js +166 -0
  75. package/dist/chunk-DDWEVC2S.js.map +1 -0
  76. package/dist/chunk-DZ556D2F.mjs +176 -0
  77. package/dist/chunk-DZ556D2F.mjs.map +1 -0
  78. package/dist/chunk-E2KQFV3O.mjs +10 -0
  79. package/dist/chunk-E2KQFV3O.mjs.map +1 -0
  80. package/dist/chunk-EMMLADSC.js +126 -0
  81. package/dist/chunk-EMMLADSC.js.map +1 -0
  82. package/dist/chunk-EP4WOI5D.mjs +926 -0
  83. package/dist/chunk-EP4WOI5D.mjs.map +1 -0
  84. package/dist/chunk-FJRXLJC2.mjs +160 -0
  85. package/dist/chunk-FJRXLJC2.mjs.map +1 -0
  86. package/dist/chunk-FKQI434R.js +345 -0
  87. package/dist/chunk-FKQI434R.js.map +1 -0
  88. package/dist/chunk-FPKEAJRZ.mjs +100 -0
  89. package/dist/chunk-FPKEAJRZ.mjs.map +1 -0
  90. package/dist/chunk-FWQYB22U.js +183 -0
  91. package/dist/chunk-FWQYB22U.js.map +1 -0
  92. package/dist/chunk-GD5GHTMA.js +189 -0
  93. package/dist/chunk-GD5GHTMA.js.map +1 -0
  94. package/dist/chunk-GE5XTSDZ.js +447 -0
  95. package/dist/chunk-GE5XTSDZ.js.map +1 -0
  96. package/dist/chunk-GVE47ZAX.mjs +32 -0
  97. package/dist/chunk-GVE47ZAX.mjs.map +1 -0
  98. package/dist/chunk-HK46BT5U.mjs +18 -0
  99. package/dist/chunk-HK46BT5U.mjs.map +1 -0
  100. package/dist/chunk-HQVRMR6N.js +365 -0
  101. package/dist/chunk-HQVRMR6N.js.map +1 -0
  102. package/dist/chunk-HSGBJPJO.mjs +398 -0
  103. package/dist/chunk-HSGBJPJO.mjs.map +1 -0
  104. package/dist/chunk-I3AUTOMZ.mjs +125 -0
  105. package/dist/chunk-I3AUTOMZ.mjs.map +1 -0
  106. package/dist/chunk-IEI5LD5C.mjs +1161 -0
  107. package/dist/chunk-IEI5LD5C.mjs.map +1 -0
  108. package/dist/chunk-IIPTC2X7.mjs +118 -0
  109. package/dist/chunk-IIPTC2X7.mjs.map +1 -0
  110. package/dist/chunk-J7TLHF2Q.js +4 -0
  111. package/dist/chunk-J7TLHF2Q.js.map +1 -0
  112. package/dist/chunk-JJOWXFXQ.mjs +765 -0
  113. package/dist/chunk-JJOWXFXQ.mjs.map +1 -0
  114. package/dist/chunk-JPTSS2OA.mjs +3 -0
  115. package/dist/chunk-JPTSS2OA.mjs.map +1 -0
  116. package/dist/chunk-KFXXRLTP.js +396 -0
  117. package/dist/chunk-KFXXRLTP.js.map +1 -0
  118. package/dist/chunk-KPRRBSG6.mjs +272 -0
  119. package/dist/chunk-KPRRBSG6.mjs.map +1 -0
  120. package/dist/chunk-NFSBGRDB.mjs +57 -0
  121. package/dist/chunk-NFSBGRDB.mjs.map +1 -0
  122. package/dist/chunk-NGJVCFTM.js +219 -0
  123. package/dist/chunk-NGJVCFTM.js.map +1 -0
  124. package/dist/chunk-NSQ6MZJ6.mjs +728 -0
  125. package/dist/chunk-NSQ6MZJ6.mjs.map +1 -0
  126. package/dist/chunk-NYQYHT76.mjs +296 -0
  127. package/dist/chunk-NYQYHT76.mjs.map +1 -0
  128. package/dist/chunk-OLJJGI5B.js +1193 -0
  129. package/dist/chunk-OLJJGI5B.js.map +1 -0
  130. package/dist/chunk-Q3572X2J.js +292 -0
  131. package/dist/chunk-Q3572X2J.js.map +1 -0
  132. package/dist/chunk-QH7N7D4I.mjs +210 -0
  133. package/dist/chunk-QH7N7D4I.mjs.map +1 -0
  134. package/dist/chunk-R7XUIV25.js +466 -0
  135. package/dist/chunk-R7XUIV25.js.map +1 -0
  136. package/dist/chunk-RFFO4KPM.js +135 -0
  137. package/dist/chunk-RFFO4KPM.js.map +1 -0
  138. package/dist/chunk-RFX7QKA7.mjs +180 -0
  139. package/dist/chunk-RFX7QKA7.mjs.map +1 -0
  140. package/dist/chunk-SN5LFAP3.js +940 -0
  141. package/dist/chunk-SN5LFAP3.js.map +1 -0
  142. package/dist/chunk-T4COXKQ3.js +24 -0
  143. package/dist/chunk-T4COXKQ3.js.map +1 -0
  144. package/dist/chunk-TS54QM27.js +125 -0
  145. package/dist/chunk-TS54QM27.js.map +1 -0
  146. package/dist/chunk-UE2S4PCX.mjs +220 -0
  147. package/dist/chunk-UE2S4PCX.mjs.map +1 -0
  148. package/dist/chunk-UTW3QX2A.mjs +282 -0
  149. package/dist/chunk-UTW3QX2A.mjs.map +1 -0
  150. package/dist/chunk-V74LGMAE.js +1767 -0
  151. package/dist/chunk-V74LGMAE.js.map +1 -0
  152. package/dist/chunk-VIREG536.js +12 -0
  153. package/dist/chunk-VIREG536.js.map +1 -0
  154. package/dist/chunk-VY7M7346.js +4 -0
  155. package/dist/chunk-VY7M7346.js.map +1 -0
  156. package/dist/chunk-W3TJOO7H.mjs +319 -0
  157. package/dist/chunk-W3TJOO7H.mjs.map +1 -0
  158. package/dist/chunk-WIUOB36M.js +54 -0
  159. package/dist/chunk-WIUOB36M.js.map +1 -0
  160. package/dist/chunk-WJGLM4CY.js +291 -0
  161. package/dist/chunk-WJGLM4CY.js.map +1 -0
  162. package/dist/chunk-WNURH5OO.mjs +453 -0
  163. package/dist/chunk-WNURH5OO.mjs.map +1 -0
  164. package/dist/chunk-X25TNRSD.mjs +364 -0
  165. package/dist/chunk-X25TNRSD.mjs.map +1 -0
  166. package/dist/chunk-Y3GT7ETK.js +108 -0
  167. package/dist/chunk-Y3GT7ETK.js.map +1 -0
  168. package/dist/chunk-Z4FRNOF6.mjs +115 -0
  169. package/dist/chunk-Z4FRNOF6.mjs.map +1 -0
  170. package/dist/chunk-ZMYLD3BN.js +166 -0
  171. package/dist/chunk-ZMYLD3BN.js.map +1 -0
  172. package/dist/chunk-ZP2KV6EX.js +815 -0
  173. package/dist/chunk-ZP2KV6EX.js.map +1 -0
  174. package/dist/chunk-ZVKXFELU.js +366 -0
  175. package/dist/chunk-ZVKXFELU.js.map +1 -0
  176. package/dist/elements/Accordion/Accordion.d.ts +139 -0
  177. package/dist/elements/Accordion/Accordion.d.ts.map +1 -0
  178. package/dist/elements/Accordion/Accordion.types.d.ts +143 -0
  179. package/dist/elements/Accordion/Accordion.types.d.ts.map +1 -0
  180. package/dist/elements/Accordion/index.d.ts +13 -0
  181. package/dist/elements/Accordion/index.d.ts.map +1 -0
  182. package/dist/elements/Accordion/index.js +78 -0
  183. package/dist/elements/Accordion/index.js.map +1 -0
  184. package/dist/elements/Accordion/index.mjs +5 -0
  185. package/dist/elements/Accordion/index.mjs.map +1 -0
  186. package/dist/elements/Avatar/Avatar.d.ts +51 -0
  187. package/dist/elements/Avatar/Avatar.d.ts.map +1 -0
  188. package/dist/elements/Avatar/Avatar.types.d.ts +145 -0
  189. package/dist/elements/Avatar/Avatar.types.d.ts.map +1 -0
  190. package/dist/elements/Avatar/AvatarGroup.d.ts +32 -0
  191. package/dist/elements/Avatar/AvatarGroup.d.ts.map +1 -0
  192. package/dist/elements/Avatar/index.d.ts +11 -0
  193. package/dist/elements/Avatar/index.d.ts.map +1 -0
  194. package/dist/elements/Avatar/index.js +54 -0
  195. package/dist/elements/Avatar/index.js.map +1 -0
  196. package/dist/elements/Avatar/index.mjs +5 -0
  197. package/dist/elements/Avatar/index.mjs.map +1 -0
  198. package/dist/elements/Badge/Badge.d.ts +39 -0
  199. package/dist/elements/Badge/Badge.d.ts.map +1 -0
  200. package/dist/elements/Badge/Badge.types.d.ts +76 -0
  201. package/dist/elements/Badge/Badge.types.d.ts.map +1 -0
  202. package/dist/elements/Badge/index.d.ts +18 -0
  203. package/dist/elements/Badge/index.d.ts.map +1 -0
  204. package/dist/elements/Badge/index.js +43 -0
  205. package/dist/elements/Badge/index.js.map +1 -0
  206. package/dist/elements/Badge/index.mjs +6 -0
  207. package/dist/elements/Badge/index.mjs.map +1 -0
  208. package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts +91 -0
  209. package/dist/elements/Breadcrumbs/Breadcrumbs.d.ts.map +1 -0
  210. package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts +114 -0
  211. package/dist/elements/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -0
  212. package/dist/elements/Breadcrumbs/index.d.ts +14 -0
  213. package/dist/elements/Breadcrumbs/index.d.ts.map +1 -0
  214. package/dist/elements/Breadcrumbs/index.js +54 -0
  215. package/dist/elements/Breadcrumbs/index.js.map +1 -0
  216. package/dist/elements/Breadcrumbs/index.mjs +9 -0
  217. package/dist/elements/Breadcrumbs/index.mjs.map +1 -0
  218. package/dist/elements/Button/Button.d.ts +92 -0
  219. package/dist/elements/Button/Button.d.ts.map +1 -0
  220. package/dist/elements/Button/Button.types.d.ts +54 -0
  221. package/dist/elements/Button/Button.types.d.ts.map +1 -0
  222. package/dist/elements/Button/index.d.ts +18 -0
  223. package/dist/elements/Button/index.d.ts.map +1 -0
  224. package/dist/elements/Button/index.js +27 -0
  225. package/dist/elements/Button/index.js.map +1 -0
  226. package/dist/elements/Button/index.mjs +6 -0
  227. package/dist/elements/Button/index.mjs.map +1 -0
  228. package/dist/elements/ButtonGroup/ButtonGroup.d.ts +53 -0
  229. package/dist/elements/ButtonGroup/ButtonGroup.d.ts.map +1 -0
  230. package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts +98 -0
  231. package/dist/elements/ButtonGroup/ButtonGroup.types.d.ts.map +1 -0
  232. package/dist/elements/ButtonGroup/ButtonGroup.utils.d.ts +60 -0
  233. package/dist/elements/ButtonGroup/ButtonGroup.utils.d.ts.map +1 -0
  234. package/dist/elements/ButtonGroup/ButtonGroup.variants.d.ts +39 -0
  235. package/dist/elements/ButtonGroup/ButtonGroup.variants.d.ts.map +1 -0
  236. package/dist/elements/ButtonGroup/ButtonGroupContext.d.ts +42 -0
  237. package/dist/elements/ButtonGroup/ButtonGroupContext.d.ts.map +1 -0
  238. package/dist/elements/ButtonGroup/index.d.ts +35 -0
  239. package/dist/elements/ButtonGroup/index.d.ts.map +1 -0
  240. package/dist/elements/ButtonGroup/index.js +66 -0
  241. package/dist/elements/ButtonGroup/index.js.map +1 -0
  242. package/dist/elements/ButtonGroup/index.mjs +5 -0
  243. package/dist/elements/ButtonGroup/index.mjs.map +1 -0
  244. package/dist/elements/Card/Card.d.ts +104 -0
  245. package/dist/elements/Card/Card.d.ts.map +1 -0
  246. package/dist/elements/Card/Card.types.d.ts +227 -0
  247. package/dist/elements/Card/Card.types.d.ts.map +1 -0
  248. package/dist/elements/Card/index.d.ts +38 -0
  249. package/dist/elements/Card/index.d.ts.map +1 -0
  250. package/dist/elements/Card/index.js +85 -0
  251. package/dist/elements/Card/index.js.map +1 -0
  252. package/dist/elements/Card/index.mjs +8 -0
  253. package/dist/elements/Card/index.mjs.map +1 -0
  254. package/dist/elements/Carousel/Carousel.d.ts +13 -0
  255. package/dist/elements/Carousel/Carousel.d.ts.map +1 -0
  256. package/dist/elements/Carousel/Carousel.types.d.ts +65 -0
  257. package/dist/elements/Carousel/Carousel.types.d.ts.map +1 -0
  258. package/dist/elements/Carousel/LazyCarousel.d.ts +46 -0
  259. package/dist/elements/Carousel/LazyCarousel.d.ts.map +1 -0
  260. package/dist/elements/Carousel/index.d.ts +5 -0
  261. package/dist/elements/Carousel/index.d.ts.map +1 -0
  262. package/dist/elements/Carousel/index.js +23 -0
  263. package/dist/elements/Carousel/index.js.map +1 -0
  264. package/dist/elements/Carousel/index.mjs +10 -0
  265. package/dist/elements/Carousel/index.mjs.map +1 -0
  266. package/dist/elements/Chart/Chart.d.ts +44 -0
  267. package/dist/elements/Chart/Chart.d.ts.map +1 -0
  268. package/dist/elements/Chart/Chart.types.d.ts +254 -0
  269. package/dist/elements/Chart/Chart.types.d.ts.map +1 -0
  270. package/dist/elements/Chart/ChartAnnouncer.d.ts +24 -0
  271. package/dist/elements/Chart/ChartAnnouncer.d.ts.map +1 -0
  272. package/dist/elements/Chart/ChartAxis.d.ts +42 -0
  273. package/dist/elements/Chart/ChartAxis.d.ts.map +1 -0
  274. package/dist/elements/Chart/ChartBarSeries.d.ts +54 -0
  275. package/dist/elements/Chart/ChartBarSeries.d.ts.map +1 -0
  276. package/dist/elements/Chart/ChartContext.d.ts +46 -0
  277. package/dist/elements/Chart/ChartContext.d.ts.map +1 -0
  278. package/dist/elements/Chart/ChartDataPoint.d.ts +56 -0
  279. package/dist/elements/Chart/ChartDataPoint.d.ts.map +1 -0
  280. package/dist/elements/Chart/ChartDataTable.d.ts +35 -0
  281. package/dist/elements/Chart/ChartDataTable.d.ts.map +1 -0
  282. package/dist/elements/Chart/ChartGrid.d.ts +32 -0
  283. package/dist/elements/Chart/ChartGrid.d.ts.map +1 -0
  284. package/dist/elements/Chart/ChartLegend.d.ts +32 -0
  285. package/dist/elements/Chart/ChartLegend.d.ts.map +1 -0
  286. package/dist/elements/Chart/ChartLineSeries.d.ts +52 -0
  287. package/dist/elements/Chart/ChartLineSeries.d.ts.map +1 -0
  288. package/dist/elements/Chart/ChartSVG.d.ts +62 -0
  289. package/dist/elements/Chart/ChartSVG.d.ts.map +1 -0
  290. package/dist/elements/Chart/ChartTooltip.d.ts +45 -0
  291. package/dist/elements/Chart/ChartTooltip.d.ts.map +1 -0
  292. package/dist/elements/Chart/chart.constants.d.ts +108 -0
  293. package/dist/elements/Chart/chart.constants.d.ts.map +1 -0
  294. package/dist/elements/Chart/chart.variants.d.ts +45 -0
  295. package/dist/elements/Chart/chart.variants.d.ts.map +1 -0
  296. package/dist/elements/Chart/index.d.ts +12 -0
  297. package/dist/elements/Chart/index.d.ts.map +1 -0
  298. package/dist/elements/Chart/index.js +47 -0
  299. package/dist/elements/Chart/index.js.map +1 -0
  300. package/dist/elements/Chart/index.mjs +6 -0
  301. package/dist/elements/Chart/index.mjs.map +1 -0
  302. package/dist/elements/Chart/useChartDimensions.d.ts +18 -0
  303. package/dist/elements/Chart/useChartDimensions.d.ts.map +1 -0
  304. package/dist/elements/Chart/useChartKeyboard.d.ts +42 -0
  305. package/dist/elements/Chart/useChartKeyboard.d.ts.map +1 -0
  306. package/dist/elements/Chart/useRovingTabIndex.d.ts +46 -0
  307. package/dist/elements/Chart/useRovingTabIndex.d.ts.map +1 -0
  308. package/dist/elements/Checkbox/Checkbox.d.ts +94 -0
  309. package/dist/elements/Checkbox/Checkbox.d.ts.map +1 -0
  310. package/dist/elements/Checkbox/Checkbox.types.d.ts +82 -0
  311. package/dist/elements/Checkbox/Checkbox.types.d.ts.map +1 -0
  312. package/dist/elements/Checkbox/index.d.ts +7 -0
  313. package/dist/elements/Checkbox/index.d.ts.map +1 -0
  314. package/dist/elements/Checkbox/index.js +47 -0
  315. package/dist/elements/Checkbox/index.js.map +1 -0
  316. package/dist/elements/Checkbox/index.mjs +6 -0
  317. package/dist/elements/Checkbox/index.mjs.map +1 -0
  318. package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts +130 -0
  319. package/dist/elements/CheckboxGroup/CheckboxGroup.d.ts.map +1 -0
  320. package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts +142 -0
  321. package/dist/elements/CheckboxGroup/CheckboxGroup.types.d.ts.map +1 -0
  322. package/dist/elements/CheckboxGroup/index.d.ts +10 -0
  323. package/dist/elements/CheckboxGroup/index.d.ts.map +1 -0
  324. package/dist/elements/CheckboxGroup/index.js +71 -0
  325. package/dist/elements/CheckboxGroup/index.js.map +1 -0
  326. package/dist/elements/CheckboxGroup/index.mjs +6 -0
  327. package/dist/elements/CheckboxGroup/index.mjs.map +1 -0
  328. package/dist/elements/DatePicker/Calendar.d.ts +16 -0
  329. package/dist/elements/DatePicker/Calendar.d.ts.map +1 -0
  330. package/dist/elements/DatePicker/DateField.d.ts +13 -0
  331. package/dist/elements/DatePicker/DateField.d.ts.map +1 -0
  332. package/dist/elements/DatePicker/DatePicker.d.ts +16 -0
  333. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -0
  334. package/dist/elements/DatePicker/DatePicker.types.d.ts +390 -0
  335. package/dist/elements/DatePicker/DatePicker.types.d.ts.map +1 -0
  336. package/dist/elements/DatePicker/DatePicker.variants.d.ts +42 -0
  337. package/dist/elements/DatePicker/DatePicker.variants.d.ts.map +1 -0
  338. package/dist/elements/DatePicker/DateRangePicker.d.ts +13 -0
  339. package/dist/elements/DatePicker/DateRangePicker.d.ts.map +1 -0
  340. package/dist/elements/DatePicker/index.d.ts +14 -0
  341. package/dist/elements/DatePicker/index.d.ts.map +1 -0
  342. package/dist/elements/DatePicker/index.js +123 -0
  343. package/dist/elements/DatePicker/index.js.map +1 -0
  344. package/dist/elements/DatePicker/index.mjs +6 -0
  345. package/dist/elements/DatePicker/index.mjs.map +1 -0
  346. package/dist/elements/Dropdown/Dropdown.d.ts +197 -0
  347. package/dist/elements/Dropdown/Dropdown.d.ts.map +1 -0
  348. package/dist/elements/Dropdown/Dropdown.types.d.ts +175 -0
  349. package/dist/elements/Dropdown/Dropdown.types.d.ts.map +1 -0
  350. package/dist/elements/Dropdown/index.d.ts +12 -0
  351. package/dist/elements/Dropdown/index.d.ts.map +1 -0
  352. package/dist/elements/Dropdown/index.js +41 -0
  353. package/dist/elements/Dropdown/index.js.map +1 -0
  354. package/dist/elements/Dropdown/index.mjs +4 -0
  355. package/dist/elements/Dropdown/index.mjs.map +1 -0
  356. package/dist/elements/FileField/FileField.d.ts +46 -0
  357. package/dist/elements/FileField/FileField.d.ts.map +1 -0
  358. package/dist/elements/FileField/FileField.types.d.ts +99 -0
  359. package/dist/elements/FileField/FileField.types.d.ts.map +1 -0
  360. package/dist/elements/FileField/FileField.variants.d.ts +49 -0
  361. package/dist/elements/FileField/FileField.variants.d.ts.map +1 -0
  362. package/dist/elements/FileField/FilePreview.d.ts +27 -0
  363. package/dist/elements/FileField/FilePreview.d.ts.map +1 -0
  364. package/dist/elements/FileField/FileProgress.d.ts +35 -0
  365. package/dist/elements/FileField/FileProgress.d.ts.map +1 -0
  366. package/dist/elements/FileField/FileProgress.variants.d.ts +55 -0
  367. package/dist/elements/FileField/FileProgress.variants.d.ts.map +1 -0
  368. package/dist/elements/FileField/index.d.ts +41 -0
  369. package/dist/elements/FileField/index.d.ts.map +1 -0
  370. package/dist/elements/FileField/index.js +138 -0
  371. package/dist/elements/FileField/index.js.map +1 -0
  372. package/dist/elements/FileField/index.mjs +9 -0
  373. package/dist/elements/FileField/index.mjs.map +1 -0
  374. package/dist/elements/FileField/useFilePreview.d.ts +46 -0
  375. package/dist/elements/FileField/useFilePreview.d.ts.map +1 -0
  376. package/dist/elements/FileField/utils.d.ts +134 -0
  377. package/dist/elements/FileField/utils.d.ts.map +1 -0
  378. package/dist/elements/FormLayout/FormLayout.d.ts +51 -0
  379. package/dist/elements/FormLayout/FormLayout.d.ts.map +1 -0
  380. package/dist/elements/FormLayout/FormLayout.types.d.ts +66 -0
  381. package/dist/elements/FormLayout/FormLayout.types.d.ts.map +1 -0
  382. package/dist/elements/FormLayout/index.d.ts +3 -0
  383. package/dist/elements/FormLayout/index.d.ts.map +1 -0
  384. package/dist/elements/FormLayout/index.js +17 -0
  385. package/dist/elements/FormLayout/index.js.map +1 -0
  386. package/dist/elements/FormLayout/index.mjs +4 -0
  387. package/dist/elements/FormLayout/index.mjs.map +1 -0
  388. package/dist/elements/Modal/Modal.d.ts +168 -0
  389. package/dist/elements/Modal/Modal.d.ts.map +1 -0
  390. package/dist/elements/Modal/Modal.types.d.ts +265 -0
  391. package/dist/elements/Modal/Modal.types.d.ts.map +1 -0
  392. package/dist/elements/Modal/index.d.ts +14 -0
  393. package/dist/elements/Modal/index.d.ts.map +1 -0
  394. package/dist/elements/Modal/index.js +52 -0
  395. package/dist/elements/Modal/index.js.map +1 -0
  396. package/dist/elements/Modal/index.mjs +3 -0
  397. package/dist/elements/Modal/index.mjs.map +1 -0
  398. package/dist/elements/NumberField/NumberField.d.ts +43 -0
  399. package/dist/elements/NumberField/NumberField.d.ts.map +1 -0
  400. package/dist/elements/NumberField/NumberField.types.d.ts +112 -0
  401. package/dist/elements/NumberField/NumberField.types.d.ts.map +1 -0
  402. package/dist/elements/NumberField/NumberField.variants.d.ts +82 -0
  403. package/dist/elements/NumberField/NumberField.variants.d.ts.map +1 -0
  404. package/dist/elements/NumberField/index.d.ts +25 -0
  405. package/dist/elements/NumberField/index.d.ts.map +1 -0
  406. package/dist/elements/NumberField/index.js +57 -0
  407. package/dist/elements/NumberField/index.js.map +1 -0
  408. package/dist/elements/NumberField/index.mjs +8 -0
  409. package/dist/elements/NumberField/index.mjs.map +1 -0
  410. package/dist/elements/OTPInput/OTPInput.d.ts +105 -0
  411. package/dist/elements/OTPInput/OTPInput.d.ts.map +1 -0
  412. package/dist/elements/OTPInput/OTPInput.styles.d.ts +83 -0
  413. package/dist/elements/OTPInput/OTPInput.styles.d.ts.map +1 -0
  414. package/dist/elements/OTPInput/OTPInput.types.d.ts +189 -0
  415. package/dist/elements/OTPInput/OTPInput.types.d.ts.map +1 -0
  416. package/dist/elements/OTPInput/components/OTPDigit.d.ts +51 -0
  417. package/dist/elements/OTPInput/components/OTPDigit.d.ts.map +1 -0
  418. package/dist/elements/OTPInput/hooks/useOTPInput.d.ts +36 -0
  419. package/dist/elements/OTPInput/hooks/useOTPInput.d.ts.map +1 -0
  420. package/dist/elements/OTPInput/hooks/useOTPKeyboard.d.ts +59 -0
  421. package/dist/elements/OTPInput/hooks/useOTPKeyboard.d.ts.map +1 -0
  422. package/dist/elements/OTPInput/index.d.ts +27 -0
  423. package/dist/elements/OTPInput/index.d.ts.map +1 -0
  424. package/dist/elements/OTPInput/index.js +13 -0
  425. package/dist/elements/OTPInput/index.js.map +1 -0
  426. package/dist/elements/OTPInput/index.mjs +4 -0
  427. package/dist/elements/OTPInput/index.mjs.map +1 -0
  428. package/dist/elements/Panel/Panel.d.ts +111 -0
  429. package/dist/elements/Panel/Panel.d.ts.map +1 -0
  430. package/dist/elements/Panel/Panel.types.d.ts +243 -0
  431. package/dist/elements/Panel/Panel.types.d.ts.map +1 -0
  432. package/dist/elements/Panel/index.d.ts +4 -0
  433. package/dist/elements/Panel/index.d.ts.map +1 -0
  434. package/dist/elements/Panel/index.js +33 -0
  435. package/dist/elements/Panel/index.js.map +1 -0
  436. package/dist/elements/Panel/index.mjs +4 -0
  437. package/dist/elements/Panel/index.mjs.map +1 -0
  438. package/dist/elements/Progress/Progress.d.ts +44 -0
  439. package/dist/elements/Progress/Progress.d.ts.map +1 -0
  440. package/dist/elements/Progress/Progress.types.d.ts +64 -0
  441. package/dist/elements/Progress/Progress.types.d.ts.map +1 -0
  442. package/dist/elements/Progress/index.d.ts +11 -0
  443. package/dist/elements/Progress/index.d.ts.map +1 -0
  444. package/dist/elements/Progress/index.js +30 -0
  445. package/dist/elements/Progress/index.js.map +1 -0
  446. package/dist/elements/Progress/index.mjs +5 -0
  447. package/dist/elements/Progress/index.mjs.map +1 -0
  448. package/dist/elements/RadioGroup/RadioGroup.d.ts +110 -0
  449. package/dist/elements/RadioGroup/RadioGroup.d.ts.map +1 -0
  450. package/dist/elements/RadioGroup/RadioGroup.types.d.ts +143 -0
  451. package/dist/elements/RadioGroup/RadioGroup.types.d.ts.map +1 -0
  452. package/dist/elements/RadioGroup/index.d.ts +10 -0
  453. package/dist/elements/RadioGroup/index.d.ts.map +1 -0
  454. package/dist/elements/RadioGroup/index.js +47 -0
  455. package/dist/elements/RadioGroup/index.js.map +1 -0
  456. package/dist/elements/RadioGroup/index.mjs +6 -0
  457. package/dist/elements/RadioGroup/index.mjs.map +1 -0
  458. package/dist/elements/Resizable/Resizable.types.d.ts +188 -0
  459. package/dist/elements/Resizable/Resizable.types.d.ts.map +1 -0
  460. package/dist/elements/Resizable/components/ResizableHandle.d.ts +28 -0
  461. package/dist/elements/Resizable/components/ResizableHandle.d.ts.map +1 -0
  462. package/dist/elements/Resizable/components/ResizablePanel.d.ts +24 -0
  463. package/dist/elements/Resizable/components/ResizablePanel.d.ts.map +1 -0
  464. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts +26 -0
  465. package/dist/elements/Resizable/components/ResizablePanelGroup.d.ts.map +1 -0
  466. package/dist/elements/Resizable/components/ResizablePopover.d.ts +45 -0
  467. package/dist/elements/Resizable/components/ResizablePopover.d.ts.map +1 -0
  468. package/dist/elements/Resizable/hooks/useResizable.d.ts +50 -0
  469. package/dist/elements/Resizable/hooks/useResizable.d.ts.map +1 -0
  470. package/dist/elements/Resizable/hooks/useResizableContext.d.ts +36 -0
  471. package/dist/elements/Resizable/hooks/useResizableContext.d.ts.map +1 -0
  472. package/dist/elements/Resizable/index.d.ts +37 -0
  473. package/dist/elements/Resizable/index.d.ts.map +1 -0
  474. package/dist/elements/Resizable/index.js +65 -0
  475. package/dist/elements/Resizable/index.js.map +1 -0
  476. package/dist/elements/Resizable/index.mjs +8 -0
  477. package/dist/elements/Resizable/index.mjs.map +1 -0
  478. package/dist/elements/Select/Select.d.ts +184 -0
  479. package/dist/elements/Select/Select.d.ts.map +1 -0
  480. package/dist/elements/Select/Select.types.d.ts +166 -0
  481. package/dist/elements/Select/Select.types.d.ts.map +1 -0
  482. package/dist/elements/Select/index.d.ts +35 -0
  483. package/dist/elements/Select/index.d.ts.map +1 -0
  484. package/dist/elements/Select/index.js +33 -0
  485. package/dist/elements/Select/index.js.map +1 -0
  486. package/dist/elements/Select/index.mjs +4 -0
  487. package/dist/elements/Select/index.mjs.map +1 -0
  488. package/dist/elements/Skeleton/Skeleton.d.ts +31 -0
  489. package/dist/elements/Skeleton/Skeleton.d.ts.map +1 -0
  490. package/dist/elements/Skeleton/Skeleton.types.d.ts +36 -0
  491. package/dist/elements/Skeleton/Skeleton.types.d.ts.map +1 -0
  492. package/dist/elements/Skeleton/index.d.ts +11 -0
  493. package/dist/elements/Skeleton/index.d.ts.map +1 -0
  494. package/dist/elements/Skeleton/index.js +22 -0
  495. package/dist/elements/Skeleton/index.js.map +1 -0
  496. package/dist/elements/Skeleton/index.mjs +5 -0
  497. package/dist/elements/Skeleton/index.mjs.map +1 -0
  498. package/dist/elements/Switch/Switch.d.ts +39 -0
  499. package/dist/elements/Switch/Switch.d.ts.map +1 -0
  500. package/dist/elements/Switch/Switch.types.d.ts +53 -0
  501. package/dist/elements/Switch/Switch.types.d.ts.map +1 -0
  502. package/dist/elements/Switch/index.d.ts +8 -0
  503. package/dist/elements/Switch/index.d.ts.map +1 -0
  504. package/dist/elements/Switch/index.js +49 -0
  505. package/dist/elements/Switch/index.js.map +1 -0
  506. package/dist/elements/Switch/index.mjs +31 -0
  507. package/dist/elements/Switch/index.mjs.map +1 -0
  508. package/dist/elements/Table/Table.d.ts +123 -0
  509. package/dist/elements/Table/Table.d.ts.map +1 -0
  510. package/dist/elements/Table/Table.types.d.ts +356 -0
  511. package/dist/elements/Table/Table.types.d.ts.map +1 -0
  512. package/dist/elements/Table/index.d.ts +5 -0
  513. package/dist/elements/Table/index.d.ts.map +1 -0
  514. package/dist/elements/Table/index.js +76 -0
  515. package/dist/elements/Table/index.js.map +1 -0
  516. package/dist/elements/Table/index.mjs +7 -0
  517. package/dist/elements/Table/index.mjs.map +1 -0
  518. package/dist/elements/Tabs/Tabs.d.ts +129 -0
  519. package/dist/elements/Tabs/Tabs.d.ts.map +1 -0
  520. package/dist/elements/Tabs/Tabs.types.d.ts +179 -0
  521. package/dist/elements/Tabs/Tabs.types.d.ts.map +1 -0
  522. package/dist/elements/Tabs/index.d.ts +12 -0
  523. package/dist/elements/Tabs/index.d.ts.map +1 -0
  524. package/dist/elements/Tabs/index.js +74 -0
  525. package/dist/elements/Tabs/index.js.map +1 -0
  526. package/dist/elements/Tabs/index.mjs +5 -0
  527. package/dist/elements/Tabs/index.mjs.map +1 -0
  528. package/dist/elements/TextField/TextField.d.ts +155 -0
  529. package/dist/elements/TextField/TextField.d.ts.map +1 -0
  530. package/dist/elements/TextField/TextField.types.d.ts +258 -0
  531. package/dist/elements/TextField/TextField.types.d.ts.map +1 -0
  532. package/dist/elements/TextField/index.css +23 -0
  533. package/dist/elements/TextField/index.css.map +1 -0
  534. package/dist/elements/TextField/index.d.ts +13 -0
  535. package/dist/elements/TextField/index.d.ts.map +1 -0
  536. package/dist/elements/TextField/index.js +260 -0
  537. package/dist/elements/TextField/index.js.map +1 -0
  538. package/dist/elements/TextField/index.mjs +207 -0
  539. package/dist/elements/TextField/index.mjs.map +1 -0
  540. package/dist/elements/TimeField/TimeField.d.ts +34 -0
  541. package/dist/elements/TimeField/TimeField.d.ts.map +1 -0
  542. package/dist/elements/TimeField/TimeField.types.d.ts +151 -0
  543. package/dist/elements/TimeField/TimeField.types.d.ts.map +1 -0
  544. package/dist/elements/TimeField/index.d.ts +24 -0
  545. package/dist/elements/TimeField/index.d.ts.map +1 -0
  546. package/dist/elements/TimeField/index.js +45 -0
  547. package/dist/elements/TimeField/index.js.map +1 -0
  548. package/dist/elements/TimeField/index.mjs +4 -0
  549. package/dist/elements/TimeField/index.mjs.map +1 -0
  550. package/dist/elements/Toast/Toast.d.ts +105 -0
  551. package/dist/elements/Toast/Toast.d.ts.map +1 -0
  552. package/dist/elements/Toast/Toast.types.d.ts +209 -0
  553. package/dist/elements/Toast/Toast.types.d.ts.map +1 -0
  554. package/dist/elements/Toast/ToastProvider.d.ts +37 -0
  555. package/dist/elements/Toast/ToastProvider.d.ts.map +1 -0
  556. package/dist/elements/Toast/Toaster.d.ts +18 -0
  557. package/dist/elements/Toast/Toaster.d.ts.map +1 -0
  558. package/dist/elements/Toast/index.d.ts +27 -0
  559. package/dist/elements/Toast/index.d.ts.map +1 -0
  560. package/dist/elements/Toast/index.js +60 -0
  561. package/dist/elements/Toast/index.js.map +1 -0
  562. package/dist/elements/Toast/index.mjs +7 -0
  563. package/dist/elements/Toast/index.mjs.map +1 -0
  564. package/dist/elements/Tooltip/Tooltip.d.ts +108 -0
  565. package/dist/elements/Tooltip/Tooltip.d.ts.map +1 -0
  566. package/dist/elements/Tooltip/Tooltip.types.d.ts +135 -0
  567. package/dist/elements/Tooltip/Tooltip.types.d.ts.map +1 -0
  568. package/dist/elements/Tooltip/index.d.ts +11 -0
  569. package/dist/elements/Tooltip/index.d.ts.map +1 -0
  570. package/dist/elements/Tooltip/index.js +59 -0
  571. package/dist/elements/Tooltip/index.js.map +1 -0
  572. package/dist/elements/Tooltip/index.mjs +6 -0
  573. package/dist/elements/Tooltip/index.mjs.map +1 -0
  574. package/dist/elements/index.css +23 -0
  575. package/dist/elements/index.css.map +1 -0
  576. package/dist/elements/index.d.ts +42 -0
  577. package/dist/elements/index.d.ts.map +1 -0
  578. package/dist/elements/index.js +839 -0
  579. package/dist/elements/index.js.map +1 -0
  580. package/dist/elements/index.mjs +42 -0
  581. package/dist/elements/index.mjs.map +1 -0
  582. package/dist/index.css +23 -0
  583. package/dist/index.css.map +1 -0
  584. package/dist/index.d.ts +4 -0
  585. package/dist/index.d.ts.map +1 -0
  586. package/dist/index.js +865 -0
  587. package/dist/index.js.map +1 -0
  588. package/dist/index.mjs +44 -0
  589. package/dist/index.mjs.map +1 -0
  590. package/dist/schemas/BaseComponentProps.d.ts +25 -0
  591. package/dist/schemas/BaseComponentProps.d.ts.map +1 -0
  592. package/dist/schemas/RegistryItem.d.ts +55 -0
  593. package/dist/schemas/RegistryItem.d.ts.map +1 -0
  594. package/dist/schemas/index.d.ts +3 -0
  595. package/dist/schemas/index.d.ts.map +1 -0
  596. package/dist/schemas/index.js +29 -0
  597. package/dist/schemas/index.js.map +1 -0
  598. package/dist/schemas/index.mjs +4 -0
  599. package/dist/schemas/index.mjs.map +1 -0
  600. package/dist/styles/defaults.css +174 -0
  601. package/dist/styles/index.d.ts +7 -0
  602. package/dist/styles/index.d.ts.map +1 -0
  603. package/dist/styles/index.js +153 -0
  604. package/dist/styles/index.js.map +1 -0
  605. package/dist/styles/index.mjs +4 -0
  606. package/dist/styles/index.mjs.map +1 -0
  607. package/dist/styles/interaction-states.d.ts +96 -0
  608. package/dist/styles/interaction-states.d.ts.map +1 -0
  609. package/dist/styles/shared-variants.d.ts +120 -0
  610. package/dist/styles/shared-variants.d.ts.map +1 -0
  611. package/dist/styles/tokens.css +89 -0
  612. package/dist/utils/cn.d.ts +13 -0
  613. package/dist/utils/cn.d.ts.map +1 -0
  614. package/dist/utils/index.d.ts +2 -0
  615. package/dist/utils/index.d.ts.map +1 -0
  616. package/dist/utils/index.js +13 -0
  617. package/dist/utils/index.js.map +1 -0
  618. package/dist/utils/index.mjs +4 -0
  619. package/dist/utils/index.mjs.map +1 -0
  620. package/package.json +228 -0
  621. package/src/elements/Accordion/Accordion.stories.tsx +793 -0
  622. package/src/elements/Avatar/Avatar.stories.tsx +408 -0
  623. package/src/elements/Badge/Badge.stories.tsx +509 -0
  624. package/src/elements/Breadcrumbs/Breadcrumbs.stories.tsx +623 -0
  625. package/src/elements/Button/Button.stories.tsx +670 -0
  626. package/src/elements/ButtonGroup/ButtonGroup.stories.tsx +658 -0
  627. package/src/elements/Card/Card.stories.tsx +570 -0
  628. package/src/elements/Carousel/Carousel.stories.tsx +597 -0
  629. package/src/elements/Chart/Chart.stories.tsx +616 -0
  630. package/src/elements/Checkbox/Checkbox.stories.tsx +514 -0
  631. package/src/elements/CheckboxGroup/CheckboxGroup.stories.tsx +1514 -0
  632. package/src/elements/DatePicker/DatePicker.stories.tsx +341 -0
  633. package/src/elements/Dropdown/Dropdown.stories.tsx +397 -0
  634. package/src/elements/FileField/FileField.stories.tsx +1021 -0
  635. package/src/elements/FileField/FileProgress.stories.tsx +359 -0
  636. package/src/elements/FormLayout/FormLayout.stories.tsx +637 -0
  637. package/src/elements/Modal/Modal.stories.tsx +640 -0
  638. package/src/elements/NumberField/NumberField.stories.tsx +678 -0
  639. package/src/elements/OTPInput/OTPInput.stories.tsx +404 -0
  640. package/src/elements/Panel/Panel.stories.tsx +769 -0
  641. package/src/elements/Progress/Progress.stories.tsx +668 -0
  642. package/src/elements/RadioGroup/RadioGroup.stories.tsx +1153 -0
  643. package/src/elements/Resizable/Resizable.stories.tsx +374 -0
  644. package/src/elements/Select/Select.stories.tsx +362 -0
  645. package/src/elements/Skeleton/Skeleton.stories.tsx +284 -0
  646. package/src/elements/Switch/Switch.stories.tsx +441 -0
  647. package/src/elements/Table/Table.stories.tsx +790 -0
  648. package/src/elements/Tabs/Tabs.stories.tsx +661 -0
  649. package/src/elements/TextField/TextField.stories.tsx +1878 -0
  650. package/src/elements/TimeField/TimeField.stories.tsx +671 -0
  651. package/src/elements/Toast/Toast.stories.tsx +971 -0
  652. package/src/elements/Tooltip/Tooltip.stories.tsx +748 -0
  653. package/tailwind.config.js +10 -0
  654. package/tailwind.config.v3.js +10 -0
@@ -0,0 +1,250 @@
1
+ 'use strict';
2
+
3
+ var chunkVIREG536_js = require('./chunk-VIREG536.js');
4
+ var react = require('react');
5
+ var reactAriaComponents = require('react-aria-components');
6
+ var zod = require('zod');
7
+ var classVarianceAuthority = require('class-variance-authority');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+ var date = require('@internationalized/date');
10
+
11
+ var TimeFieldPropsSchema = zod.z.object({
12
+ // Value props
13
+ value: zod.z.custom().optional(),
14
+ defaultValue: zod.z.custom().optional(),
15
+ placeholderValue: zod.z.custom().optional(),
16
+ // Granularity props
17
+ granularity: zod.z.enum(["hour", "minute", "second"]).default("minute"),
18
+ hourCycle: zod.z.union([zod.z.literal(12), zod.z.literal(24)]).optional(),
19
+ hideTimeZone: zod.z.boolean().optional(),
20
+ shouldForceLeadingZeros: zod.z.boolean().optional(),
21
+ // Constraint props
22
+ minValue: zod.z.custom().optional(),
23
+ maxValue: zod.z.custom().optional(),
24
+ // State props
25
+ isDisabled: zod.z.boolean().optional(),
26
+ isReadOnly: zod.z.boolean().optional(),
27
+ isRequired: zod.z.boolean().optional(),
28
+ isInvalid: zod.z.boolean().optional(),
29
+ // Validation props
30
+ /** Custom validation function that returns an error message or null */
31
+ validate: zod.z.function().optional(),
32
+ validationBehavior: zod.z.enum(["native", "aria"]).default("native"),
33
+ // Display props
34
+ label: zod.z.string(),
35
+ description: zod.z.string().optional(),
36
+ /** Error message string or render function */
37
+ errorMessage: zod.z.union([zod.z.string(), zod.z.function()]).optional(),
38
+ // Form props
39
+ name: zod.z.string().optional(),
40
+ // Variant props
41
+ size: zod.z.enum(["sm", "default", "lg"]).default("default"),
42
+ // Event props
43
+ /** Called when the time value changes */
44
+ onChange: zod.z.function().optional(),
45
+ /** Called when the field gains focus */
46
+ onFocus: zod.z.function().optional(),
47
+ /** Called when the field loses focus */
48
+ onBlur: zod.z.function().optional(),
49
+ /** Called when focus state changes */
50
+ onFocusChange: zod.z.function().optional(),
51
+ // Standard props
52
+ className: zod.z.string().optional(),
53
+ autoFocus: zod.z.boolean().optional()
54
+ });
55
+ var timeFieldVariants = classVarianceAuthority.cva(
56
+ [
57
+ // Base styles
58
+ "inline-flex items-center rounded-md border",
59
+ "bg-[var(--content-background)] text-[var(--content-foreground)]",
60
+ "transition-colors duration-200",
61
+ // Focus within
62
+ "focus-within:ring-2 focus-within:ring-[var(--ring)] focus-within:ring-offset-2",
63
+ // Disabled
64
+ "data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50"
65
+ ],
66
+ {
67
+ variants: {
68
+ size: {
69
+ sm: "h-9 px-3 text-sm gap-0.5",
70
+ // 36px - AA only
71
+ default: "h-11 px-4 text-base gap-1",
72
+ // 44px - AAA
73
+ lg: "h-14 px-5 text-lg gap-1.5"
74
+ // 56px - AAA
75
+ },
76
+ isInvalid: {
77
+ true: "border-[var(--destructive)] focus-within:ring-[var(--destructive)]",
78
+ false: "border-[var(--input)] hover:border-[var(--input)]/80"
79
+ }
80
+ },
81
+ defaultVariants: {
82
+ size: "default",
83
+ isInvalid: false
84
+ }
85
+ }
86
+ );
87
+ var timeSegmentVariants = classVarianceAuthority.cva(
88
+ [
89
+ // Base styles
90
+ "tabular-nums rounded px-0.5",
91
+ // Focus
92
+ "focus:outline-none focus:bg-[var(--accent)] focus:text-[var(--accent-foreground)]",
93
+ // Placeholder
94
+ "data-[placeholder]:text-[var(--menu-muted)]",
95
+ // Literal segments (colons, spaces)
96
+ "data-[type=literal]:text-[var(--menu-muted)]",
97
+ // Disabled
98
+ "data-[disabled]:opacity-50"
99
+ ],
100
+ {
101
+ variants: {
102
+ size: {
103
+ sm: "text-sm min-w-[1.5ch]",
104
+ default: "text-base min-w-[2ch]",
105
+ lg: "text-lg min-w-[2ch]"
106
+ }
107
+ },
108
+ defaultVariants: {
109
+ size: "default"
110
+ }
111
+ }
112
+ );
113
+ var timeFieldLabelVariants = classVarianceAuthority.cva(
114
+ [
115
+ "block font-medium text-[var(--content-foreground)]",
116
+ "mb-1.5",
117
+ // Required indicator
118
+ 'data-[required]:after:content-["*"] data-[required]:after:ml-0.5',
119
+ "data-[required]:after:text-[var(--destructive)]"
120
+ ],
121
+ {
122
+ variants: {
123
+ size: {
124
+ sm: "text-sm",
125
+ default: "text-sm",
126
+ lg: "text-base"
127
+ }
128
+ },
129
+ defaultVariants: {
130
+ size: "default"
131
+ }
132
+ }
133
+ );
134
+ var timeFieldDescriptionVariants = classVarianceAuthority.cva(
135
+ [
136
+ "text-[var(--menu-muted)]",
137
+ "mt-1"
138
+ ],
139
+ {
140
+ variants: {
141
+ size: {
142
+ sm: "text-xs",
143
+ default: "text-sm",
144
+ lg: "text-base"
145
+ }
146
+ },
147
+ defaultVariants: {
148
+ size: "default"
149
+ }
150
+ }
151
+ );
152
+ var timeFieldErrorVariants = classVarianceAuthority.cva(
153
+ [
154
+ "flex items-center gap-1",
155
+ "text-[var(--destructive)]",
156
+ "mt-1"
157
+ ],
158
+ {
159
+ variants: {
160
+ size: {
161
+ sm: "text-xs",
162
+ default: "text-sm",
163
+ lg: "text-base"
164
+ }
165
+ },
166
+ defaultVariants: {
167
+ size: "default"
168
+ }
169
+ }
170
+ );
171
+ var TimeField = react.forwardRef(
172
+ ({
173
+ // Display props
174
+ label,
175
+ description,
176
+ errorMessage,
177
+ // Variant props
178
+ size = "default",
179
+ // Standard props
180
+ className,
181
+ // All other props go to AriaTimeField
182
+ ...props
183
+ }, ref) => {
184
+ return /* @__PURE__ */ jsxRuntime.jsxs(
185
+ reactAriaComponents.TimeField,
186
+ {
187
+ ref,
188
+ className: chunkVIREG536_js.cn("group flex flex-col gap-1", className),
189
+ ...props,
190
+ children: [
191
+ label && /* @__PURE__ */ jsxRuntime.jsx(
192
+ reactAriaComponents.Label,
193
+ {
194
+ className: chunkVIREG536_js.cn(timeFieldLabelVariants({ size })),
195
+ "data-required": props.isRequired || void 0,
196
+ children: label
197
+ }
198
+ ),
199
+ /* @__PURE__ */ jsxRuntime.jsx(
200
+ reactAriaComponents.DateInput,
201
+ {
202
+ className: chunkVIREG536_js.cn(
203
+ timeFieldVariants({
204
+ size,
205
+ isInvalid: props.isInvalid
206
+ }),
207
+ "w-fit"
208
+ ),
209
+ children: (segment) => /* @__PURE__ */ jsxRuntime.jsx(
210
+ reactAriaComponents.DateSegment,
211
+ {
212
+ segment,
213
+ className: chunkVIREG536_js.cn(timeSegmentVariants({ size }))
214
+ }
215
+ )
216
+ }
217
+ ),
218
+ description && /* @__PURE__ */ jsxRuntime.jsx(
219
+ reactAriaComponents.Text,
220
+ {
221
+ slot: "description",
222
+ className: chunkVIREG536_js.cn(timeFieldDescriptionVariants({ size })),
223
+ children: description
224
+ }
225
+ ),
226
+ /* @__PURE__ */ jsxRuntime.jsx(reactAriaComponents.FieldError, { className: chunkVIREG536_js.cn(timeFieldErrorVariants({ size })), children: errorMessage })
227
+ ]
228
+ }
229
+ );
230
+ }
231
+ );
232
+ TimeField.displayName = "TimeField";
233
+
234
+ Object.defineProperty(exports, "Time", {
235
+ enumerable: true,
236
+ get: function () { return date.Time; }
237
+ });
238
+ Object.defineProperty(exports, "parseTime", {
239
+ enumerable: true,
240
+ get: function () { return date.parseTime; }
241
+ });
242
+ exports.TimeField = TimeField;
243
+ exports.TimeFieldPropsSchema = TimeFieldPropsSchema;
244
+ exports.timeFieldDescriptionVariants = timeFieldDescriptionVariants;
245
+ exports.timeFieldErrorVariants = timeFieldErrorVariants;
246
+ exports.timeFieldLabelVariants = timeFieldLabelVariants;
247
+ exports.timeFieldVariants = timeFieldVariants;
248
+ exports.timeSegmentVariants = timeSegmentVariants;
249
+ //# sourceMappingURL=chunk-3H7ASYR7.js.map
250
+ //# sourceMappingURL=chunk-3H7ASYR7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/TimeField/TimeField.types.ts","../src/elements/TimeField/TimeField.tsx"],"names":["z","cva","forwardRef","jsxs","AriaTimeField","cn","jsx","AriaLabel","AriaDateInput","AriaDateSegment","AriaText","AriaFieldError"],"mappings":"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","file":"chunk-3H7ASYR7.js","sourcesContent":["/**\n * TimeField Component Types\n *\n * Zod schemas and TypeScript types for the TimeField component.\n * Includes CVA variant definitions for styling.\n *\n * Note: Zod schemas are used for contract tests and developer guardrails,\n * not runtime validation. This follows the established Themis pattern.\n *\n * @see {@link ../../docs/prd/timefield-prd.md} for full requirements\n */\n\nimport { z } from 'zod';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport type {\n TimeFieldProps as AriaTimeFieldProps,\n TimeValue,\n} from 'react-aria-components';\n\n// ============================================================================\n// Time Value Types (re-exported for convenience)\n// ============================================================================\n\n/**\n * Union type for all time values supported by the TimeField.\n * - Time: Time only (no date, no timezone)\n * - CalendarDateTime: Date and time (no timezone)\n * - ZonedDateTime: Date, time, and timezone\n */\nexport type { TimeValue } from 'react-aria-components';\n\n// ============================================================================\n// Granularity Type\n// ============================================================================\n\n/**\n * Controls which time segments are displayed.\n * - 'hour': Hour only (+ AM/PM in 12-hour mode)\n * - 'minute': Hour + minute (default)\n * - 'second': Hour + minute + second\n *\n * Note: Millisecond granularity is intentionally excluded - no common UI use case.\n */\nexport type TimeGranularity = 'hour' | 'minute' | 'second';\n\n// ============================================================================\n// Size Variant Type\n// ============================================================================\n\n/**\n * Size variants for TimeField component.\n * - 'sm': Compact size (36px height) - AA compliant only, not AAA\n * - 'default': Standard size (44px height) - AAA compliant\n * - 'lg': Large size (56px height) - AAA compliant\n */\nexport type TimeFieldSize = 'sm' | 'default' | 'lg';\n\n// ============================================================================\n// Hour Cycle Type\n// ============================================================================\n\n/**\n * Hour cycle format.\n * - 12: 12-hour format with AM/PM\n * - 24: 24-hour format\n */\nexport type HourCycle = 12 | 24;\n\n// ============================================================================\n// Zod Schemas\n// ============================================================================\n\n/**\n * Zod schema for TimeField props validation.\n * Used for contract tests and developer guardrails, not runtime validation.\n */\nexport const TimeFieldPropsSchema = z.object({\n // Value props\n value: z.custom<TimeValue>().optional(),\n defaultValue: z.custom<TimeValue>().optional(),\n placeholderValue: z.custom<TimeValue>().optional(),\n\n // Granularity props\n granularity: z.enum(['hour', 'minute', 'second']).default('minute'),\n hourCycle: z.union([z.literal(12), z.literal(24)]).optional(),\n hideTimeZone: z.boolean().optional(),\n shouldForceLeadingZeros: z.boolean().optional(),\n\n // Constraint props\n minValue: z.custom<TimeValue>().optional(),\n maxValue: z.custom<TimeValue>().optional(),\n\n // State props\n isDisabled: z.boolean().optional(),\n isReadOnly: z.boolean().optional(),\n isRequired: z.boolean().optional(),\n isInvalid: z.boolean().optional(),\n\n // Validation props\n /** Custom validation function that returns an error message or null */\n validate: z.function().optional(),\n validationBehavior: z.enum(['native', 'aria']).default('native'),\n\n // Display props\n label: z.string(),\n description: z.string().optional(),\n /** Error message string or render function */\n errorMessage: z.union([z.string(), z.function()]).optional(),\n\n // Form props\n name: z.string().optional(),\n\n // Variant props\n size: z.enum(['sm', 'default', 'lg']).default('default'),\n\n // Event props\n /** Called when the time value changes */\n onChange: z.function().optional(),\n /** Called when the field gains focus */\n onFocus: z.function().optional(),\n /** Called when the field loses focus */\n onBlur: z.function().optional(),\n /** Called when focus state changes */\n onFocusChange: z.function().optional(),\n\n // Standard props\n className: z.string().optional(),\n autoFocus: z.boolean().optional(),\n});\n\n// ============================================================================\n// TypeScript Types\n// ============================================================================\n\n/**\n * Custom props added to TimeField (not from React Aria).\n */\nexport interface ThemisTimeFieldCustomProps {\n /** Size variant: 'sm', 'default', or 'lg' */\n size?: TimeFieldSize;\n /** Field label */\n label?: string;\n /** Description text below the field */\n description?: string;\n /** Error message when field is invalid */\n errorMessage?: string;\n}\n\n/**\n * Props for the TimeField component.\n * Uses React Aria's TimeFieldProps directly to ensure correct function types.\n */\nexport type TimeFieldProps = AriaTimeFieldProps<TimeValue> &\n ThemisTimeFieldCustomProps;\n\n// ============================================================================\n// CVA Variants\n// ============================================================================\n\n/**\n * Variants for the TimeField input container.\n * Applies to the DateInput element wrapping time segments.\n *\n * Size notes:\n * - sm (36px): Desktop-only, AA compliant only (not AAA touch target)\n * - default (44px): AAA compliant, recommended for most use cases\n * - lg (56px): AAA compliant, enhanced touch targets\n */\nexport const timeFieldVariants = cva(\n [\n // Base styles\n 'inline-flex items-center rounded-md border',\n 'bg-[var(--content-background)] text-[var(--content-foreground)]',\n 'transition-colors duration-200',\n // Focus within\n 'focus-within:ring-2 focus-within:ring-[var(--ring)] focus-within:ring-offset-2',\n // Disabled\n 'data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'h-9 px-3 text-sm gap-0.5', // 36px - AA only\n default: 'h-11 px-4 text-base gap-1', // 44px - AAA\n lg: 'h-14 px-5 text-lg gap-1.5', // 56px - AAA\n },\n isInvalid: {\n true: 'border-[var(--destructive)] focus-within:ring-[var(--destructive)]',\n false: 'border-[var(--input)] hover:border-[var(--input)]/80',\n },\n },\n defaultVariants: {\n size: 'default',\n isInvalid: false,\n },\n }\n);\n\n/**\n * Variants for individual time segment elements.\n * Each segment (hour, minute, second, dayPeriod) uses these styles.\n */\nexport const timeSegmentVariants = cva(\n [\n // Base styles\n 'tabular-nums rounded px-0.5',\n // Focus\n 'focus:outline-none focus:bg-[var(--accent)] focus:text-[var(--accent-foreground)]',\n // Placeholder\n 'data-[placeholder]:text-[var(--menu-muted)]',\n // Literal segments (colons, spaces)\n 'data-[type=literal]:text-[var(--menu-muted)]',\n // Disabled\n 'data-[disabled]:opacity-50',\n ],\n {\n variants: {\n size: {\n sm: 'text-sm min-w-[1.5ch]',\n default: 'text-base min-w-[2ch]',\n lg: 'text-lg min-w-[2ch]',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Variants for the TimeField label.\n */\nexport const timeFieldLabelVariants = cva(\n [\n 'block font-medium text-[var(--content-foreground)]',\n 'mb-1.5',\n // Required indicator\n 'data-[required]:after:content-[\"*\"] data-[required]:after:ml-0.5',\n 'data-[required]:after:text-[var(--destructive)]',\n ],\n {\n variants: {\n size: {\n sm: 'text-sm',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Variants for the description text below the field.\n */\nexport const timeFieldDescriptionVariants = cva(\n [\n 'text-[var(--menu-muted)]',\n 'mt-1',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n/**\n * Variants for the error message display.\n */\nexport const timeFieldErrorVariants = cva(\n [\n 'flex items-center gap-1',\n 'text-[var(--destructive)]',\n 'mt-1',\n ],\n {\n variants: {\n size: {\n sm: 'text-xs',\n default: 'text-sm',\n lg: 'text-base',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n }\n);\n\n// ============================================================================\n// Variant Types (from CVA)\n// ============================================================================\n\n/**\n * Variant props for timeFieldVariants CVA function.\n */\nexport type TimeFieldVariantProps = VariantProps<typeof timeFieldVariants>;\n\n/**\n * Variant props for timeSegmentVariants CVA function.\n */\nexport type TimeSegmentVariantProps = VariantProps<typeof timeSegmentVariants>;\n","'use client';\n\n/**\n * TimeField Component\n *\n * A fully accessible time input component built on React Aria's TimeField primitive.\n * Provides keyboard-editable time segments for entering hours, minutes, and seconds.\n *\n * Features:\n * - WCAG 2.2 AAA compliant (default/lg sizes) / AA compliant (sm size)\n * - Configurable granularity (hour, minute, second)\n * - 12-hour and 24-hour format support\n * - Step increment support\n * - Min/max constraints with validation\n * - Form integration with hidden input\n * - Full keyboard navigation\n * - Screen reader accessible\n *\n * @see {@link ../../docs/prd/timefield-prd.md} for full requirements\n */\n\nimport { forwardRef, type ReactElement } from 'react';\nimport {\n TimeField as AriaTimeField,\n DateInput as AriaDateInput,\n DateSegment as AriaDateSegment,\n Label as AriaLabel,\n Text as AriaText,\n FieldError as AriaFieldError,\n} from 'react-aria-components';\nimport { cn } from '../../utils/cn';\nimport type { TimeFieldProps } from './TimeField.types';\nimport {\n timeFieldVariants,\n timeSegmentVariants,\n timeFieldLabelVariants,\n timeFieldDescriptionVariants,\n timeFieldErrorVariants,\n} from './TimeField.types';\n\n// =============================================================================\n// TimeField Component\n// =============================================================================\n\n/**\n * TimeField component for time input with keyboard-editable segments.\n *\n * @example\n * ```tsx\n * import { TimeField, Time } from '@tribepad/themis/elements/TimeField';\n *\n * // Basic usage\n * <TimeField label=\"Meeting Time\" />\n *\n * // With default value\n * <TimeField\n * label=\"Start Time\"\n * defaultValue={new Time(14, 30)}\n * />\n *\n * // 12-hour format with step\n * <TimeField\n * label=\"Appointment\"\n * hourCycle={12}\n * step={15}\n * />\n *\n * // With validation\n * <TimeField\n * label=\"Office Hours\"\n * minValue={new Time(9, 0)}\n * maxValue={new Time(17, 0)}\n * errorMessage=\"Please select a time within office hours\"\n * />\n * ```\n */\nexport const TimeField = forwardRef<HTMLDivElement, TimeFieldProps>(\n (\n {\n // Display props\n label,\n description,\n errorMessage,\n // Variant props\n size = 'default',\n // Standard props\n className,\n // All other props go to AriaTimeField\n ...props\n },\n ref\n ): ReactElement => {\n return (\n <AriaTimeField\n ref={ref}\n className={cn('group flex flex-col gap-1', className)}\n {...props}\n >\n {/* Label */}\n {label && (\n <AriaLabel\n className={cn(timeFieldLabelVariants({ size }))}\n data-required={props.isRequired || undefined}\n >\n {label}\n </AriaLabel>\n )}\n\n {/* Time Input */}\n <AriaDateInput\n className={cn(\n timeFieldVariants({\n size,\n isInvalid: props.isInvalid,\n }),\n 'w-fit'\n )}\n >\n {(segment) => (\n <AriaDateSegment\n segment={segment}\n className={cn(timeSegmentVariants({ size }))}\n />\n )}\n </AriaDateInput>\n\n {/* Description */}\n {description && (\n <AriaText\n slot=\"description\"\n className={cn(timeFieldDescriptionVariants({ size }))}\n >\n {description}\n </AriaText>\n )}\n\n {/* Error Message */}\n <AriaFieldError className={cn(timeFieldErrorVariants({ size }))}>\n {errorMessage}\n </AriaFieldError>\n </AriaTimeField>\n );\n }\n);\n\nTimeField.displayName = 'TimeField';\n"]}
@@ -0,0 +1,316 @@
1
+ 'use strict';
2
+
3
+ var chunkVIREG536_js = require('./chunk-VIREG536.js');
4
+ var chunkT4COXKQ3_js = require('./chunk-T4COXKQ3.js');
5
+ var react = require('react');
6
+ var reactAriaComponents = require('react-aria-components');
7
+ var classVarianceAuthority = require('class-variance-authority');
8
+ var jsxRuntime = require('react/jsx-runtime');
9
+ var zod = require('zod');
10
+
11
+ var Activity = react.Activity ?? function ActivityFallback({
12
+ children,
13
+ mode
14
+ }) {
15
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { "data-activity-mode": mode, children });
16
+ };
17
+ var tabListVariants = classVarianceAuthority.cva(
18
+ // Base styles
19
+ [
20
+ "inline-flex items-center justify-center rounded-md p-1",
21
+ "bg-[var(--accent-background)] text-[var(--menu-muted)]"
22
+ ],
23
+ {
24
+ variants: {
25
+ orientation: {
26
+ horizontal: "h-10 flex-row gap-0",
27
+ vertical: "h-auto flex-col w-full gap-1"
28
+ }
29
+ },
30
+ defaultVariants: {
31
+ orientation: "horizontal"
32
+ }
33
+ }
34
+ );
35
+ var tabVariants = classVarianceAuthority.cva(
36
+ // Base styles
37
+ [
38
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-sm",
39
+ "px-3 py-1.5 text-sm font-medium",
40
+ "ring-offset-[var(--content-background)] transition-all",
41
+ "focus-visible:outline-none focus-visible:ring-2",
42
+ "focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2",
43
+ // States via data attributes
44
+ "data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
45
+ "data-[selected]:bg-[var(--content-background)] data-[selected]:text-[var(--content-foreground)]",
46
+ "data-[selected]:shadow-sm",
47
+ // WCAG 2.2 AAA: 44×44px minimum touch target
48
+ "min-h-[44px]"
49
+ ],
50
+ {
51
+ variants: {
52
+ orientation: {
53
+ horizontal: "",
54
+ vertical: "w-full justify-start"
55
+ }
56
+ },
57
+ defaultVariants: {
58
+ orientation: "horizontal"
59
+ }
60
+ }
61
+ );
62
+ var tabPanelVariants = classVarianceAuthority.cva(
63
+ [
64
+ "mt-2 ring-offset-[var(--content-background)]",
65
+ "focus-visible:outline-none focus-visible:ring-2",
66
+ "focus-visible:ring-[var(--ring)] focus-visible:ring-offset-2"
67
+ ],
68
+ {
69
+ variants: {},
70
+ defaultVariants: {}
71
+ }
72
+ );
73
+ function TabsRoot({
74
+ children,
75
+ selectedKey,
76
+ defaultSelectedKey,
77
+ onSelectionChange,
78
+ orientation = "horizontal",
79
+ keyboardActivation = "automatic",
80
+ isDisabled = false,
81
+ disabledKeys,
82
+ className,
83
+ ...props
84
+ }) {
85
+ return /* @__PURE__ */ jsxRuntime.jsx(
86
+ reactAriaComponents.Tabs,
87
+ {
88
+ selectedKey,
89
+ defaultSelectedKey,
90
+ onSelectionChange,
91
+ orientation,
92
+ keyboardActivation,
93
+ isDisabled,
94
+ disabledKeys,
95
+ className: chunkVIREG536_js.cn(className),
96
+ ...props,
97
+ children
98
+ }
99
+ );
100
+ }
101
+ TabsRoot.displayName = "Tabs";
102
+ function TabListComponent({
103
+ children,
104
+ className,
105
+ ...props
106
+ }) {
107
+ return /* @__PURE__ */ jsxRuntime.jsx(
108
+ reactAriaComponents.TabList,
109
+ {
110
+ className: reactAriaComponents.composeRenderProps(
111
+ className,
112
+ (className2, renderProps) => chunkVIREG536_js.cn(
113
+ tabListVariants({ orientation: renderProps.orientation }),
114
+ className2
115
+ )
116
+ ),
117
+ ...props,
118
+ children
119
+ }
120
+ );
121
+ }
122
+ TabListComponent.displayName = "TabList";
123
+ function TabComponent({
124
+ children,
125
+ id,
126
+ isDisabled = false,
127
+ href,
128
+ target,
129
+ rel,
130
+ download,
131
+ className,
132
+ ...props
133
+ }) {
134
+ if (process.env.NODE_ENV !== "production") {
135
+ const hasTextContent = typeof children === "string" || Array.isArray(children) && children.some((child) => typeof child === "string");
136
+ if (!hasTextContent && !props["aria-label"]) {
137
+ console.warn(
138
+ "Tabs: Icon-only tabs should have an aria-label for accessibility."
139
+ );
140
+ }
141
+ }
142
+ return /* @__PURE__ */ jsxRuntime.jsx(
143
+ reactAriaComponents.Tab,
144
+ {
145
+ id,
146
+ isDisabled,
147
+ href,
148
+ target,
149
+ rel,
150
+ download,
151
+ className: reactAriaComponents.composeRenderProps(
152
+ className,
153
+ (className2) => chunkVIREG536_js.cn(tabVariants(), className2)
154
+ ),
155
+ ...props,
156
+ children
157
+ }
158
+ );
159
+ }
160
+ TabComponent.displayName = "Tab";
161
+ function TabPanelComponent({
162
+ children,
163
+ id,
164
+ shouldForceMount = false,
165
+ preserveState = false,
166
+ className,
167
+ ...props
168
+ }) {
169
+ const forceMount = preserveState || shouldForceMount;
170
+ if (typeof children === "function") {
171
+ return /* @__PURE__ */ jsxRuntime.jsx(
172
+ reactAriaComponents.TabPanel,
173
+ {
174
+ id,
175
+ shouldForceMount: forceMount,
176
+ className: reactAriaComponents.composeRenderProps(
177
+ className,
178
+ (className2) => chunkVIREG536_js.cn(tabPanelVariants(), className2)
179
+ ),
180
+ ...props,
181
+ children: (renderProps) => {
182
+ const isSelected = !renderProps.isInert;
183
+ const content = children({ isSelected });
184
+ if (preserveState) {
185
+ return /* @__PURE__ */ jsxRuntime.jsx(Activity, { mode: isSelected ? "visible" : "hidden", children: content });
186
+ }
187
+ return content;
188
+ }
189
+ }
190
+ );
191
+ }
192
+ if (preserveState) {
193
+ return /* @__PURE__ */ jsxRuntime.jsx(
194
+ reactAriaComponents.TabPanel,
195
+ {
196
+ id,
197
+ shouldForceMount: forceMount,
198
+ className: reactAriaComponents.composeRenderProps(
199
+ className,
200
+ (className2) => chunkVIREG536_js.cn(tabPanelVariants(), className2)
201
+ ),
202
+ ...props,
203
+ children: (renderProps) => {
204
+ const isSelected = !renderProps.isInert;
205
+ return /* @__PURE__ */ jsxRuntime.jsx(Activity, { mode: isSelected ? "visible" : "hidden", children });
206
+ }
207
+ }
208
+ );
209
+ }
210
+ return /* @__PURE__ */ jsxRuntime.jsx(
211
+ reactAriaComponents.TabPanel,
212
+ {
213
+ id,
214
+ shouldForceMount: forceMount,
215
+ className: reactAriaComponents.composeRenderProps(
216
+ className,
217
+ (className2) => chunkVIREG536_js.cn(tabPanelVariants(), className2)
218
+ ),
219
+ ...props,
220
+ children
221
+ }
222
+ );
223
+ }
224
+ TabPanelComponent.displayName = "TabPanel";
225
+ var Tabs = TabsRoot;
226
+ var TabList = TabListComponent;
227
+ var Tab = TabComponent;
228
+ var TabPanel = TabPanelComponent;
229
+ var TabsOrientationSchema = zod.z.enum(["horizontal", "vertical"]);
230
+ var TabsKeyboardActivationSchema = zod.z.enum(["automatic", "manual"]);
231
+ var KeySchema = zod.z.union([zod.z.string(), zod.z.number()]);
232
+ var TabsPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
233
+ // Controlled mode: selected tab key
234
+ selectedKey: KeySchema.optional(),
235
+ // Uncontrolled mode: default selected tab key
236
+ defaultSelectedKey: KeySchema.optional(),
237
+ // Selection change handler
238
+ onSelectionChange: zod.z.custom().optional(),
239
+ // Orientation: horizontal or vertical layout
240
+ orientation: TabsOrientationSchema.optional().default("horizontal"),
241
+ // Keyboard activation: automatic (arrows select) or manual (arrows focus, Enter selects)
242
+ keyboardActivation: TabsKeyboardActivationSchema.optional().default("automatic"),
243
+ // Disable all tabs
244
+ isDisabled: zod.z.boolean().optional().default(false),
245
+ // Keys of tabs to disable individually
246
+ disabledKeys: zod.z.array(KeySchema).optional(),
247
+ // Children: TabList and TabPanel components
248
+ children: zod.z.custom()
249
+ });
250
+ var TabListPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
251
+ // Accessible label (required for accessibility if no aria-labelledby)
252
+ "aria-label": zod.z.string().optional(),
253
+ // Reference to labelling element
254
+ "aria-labelledby": zod.z.string().optional(),
255
+ // Children: Tab components
256
+ children: zod.z.custom()
257
+ });
258
+ var TabPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
259
+ // Unique identifier for the tab (required)
260
+ id: KeySchema,
261
+ // Disable this specific tab
262
+ isDisabled: zod.z.boolean().optional().default(false),
263
+ // Link tab: URL for navigation-style tabs
264
+ href: zod.z.string().optional(),
265
+ // Link tab: target attribute
266
+ target: zod.z.string().optional(),
267
+ // Link tab: rel attribute
268
+ rel: zod.z.string().optional(),
269
+ // Link tab: download attribute
270
+ download: zod.z.union([zod.z.string(), zod.z.boolean()]).optional(),
271
+ // Tab content (text, icons, badges)
272
+ children: zod.z.custom()
273
+ });
274
+ var TabPanelPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
275
+ // Unique identifier matching a Tab id (required)
276
+ id: KeySchema,
277
+ // Legacy: Force panel to stay in DOM when hidden
278
+ // Use preserveState instead for proper effect cleanup
279
+ shouldForceMount: zod.z.boolean().optional().default(false),
280
+ // React 19.2 Activity: Preserve state with proper effect cleanup
281
+ // When true, wraps content in <Activity> component
282
+ // Effects are cleaned up when hidden, restored when visible
283
+ preserveState: zod.z.boolean().optional().default(false),
284
+ // Panel content
285
+ children: zod.z.custom()
286
+ });
287
+ var ScrollArrowDirectionSchema = zod.z.enum(["left", "right", "up", "down"]);
288
+ var ScrollArrowPropsSchema = chunkT4COXKQ3_js.BaseComponentPropsSchema.extend({
289
+ // Scroll direction
290
+ direction: ScrollArrowDirectionSchema,
291
+ // Disable when can't scroll further
292
+ isDisabled: zod.z.boolean().optional().default(false),
293
+ // Click handler for scrolling
294
+ onPress: zod.z.custom(),
295
+ // Accessible label
296
+ "aria-label": zod.z.string()
297
+ });
298
+
299
+ exports.KeySchema = KeySchema;
300
+ exports.ScrollArrowDirectionSchema = ScrollArrowDirectionSchema;
301
+ exports.ScrollArrowPropsSchema = ScrollArrowPropsSchema;
302
+ exports.Tab = Tab;
303
+ exports.TabList = TabList;
304
+ exports.TabListPropsSchema = TabListPropsSchema;
305
+ exports.TabPanel = TabPanel;
306
+ exports.TabPanelPropsSchema = TabPanelPropsSchema;
307
+ exports.TabPropsSchema = TabPropsSchema;
308
+ exports.Tabs = Tabs;
309
+ exports.TabsKeyboardActivationSchema = TabsKeyboardActivationSchema;
310
+ exports.TabsOrientationSchema = TabsOrientationSchema;
311
+ exports.TabsPropsSchema = TabsPropsSchema;
312
+ exports.tabListVariants = tabListVariants;
313
+ exports.tabPanelVariants = tabPanelVariants;
314
+ exports.tabVariants = tabVariants;
315
+ //# sourceMappingURL=chunk-3IEN7JOP.js.map
316
+ //# sourceMappingURL=chunk-3IEN7JOP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/Tabs/Tabs.tsx","../src/elements/Tabs/Tabs.types.ts"],"names":["ReactActivity","jsx","cva","AriaTabs","cn","AriaTabList","composeRenderProps","className","AriaTab","AriaTabPanel","z","BaseComponentPropsSchema"],"mappings":"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","file":"chunk-3IEN7JOP.js","sourcesContent":["'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';\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"]}