@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,364 @@
1
+ import { Button } from './chunk-BDXKKMBZ.mjs';
2
+ import { cn } from './chunk-E2KQFV3O.mjs';
3
+ import { useState, useRef, useMemo, useCallback, useEffect } from 'react';
4
+ import { ChevronUpIcon, ChevronDownIcon, PlayIcon, PauseIcon } from 'lucide-react';
5
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
6
+
7
+ var MIN_ITEM_DURATION_MS = 1e3;
8
+ var TIMER_CHECK_INTERVAL_MS = 1e3;
9
+ function buildManifest(durations) {
10
+ let cumulative = 0;
11
+ return durations.map((duration, index) => {
12
+ const start = cumulative;
13
+ const safeDuration = Math.max(duration, MIN_ITEM_DURATION_MS);
14
+ cumulative += safeDuration;
15
+ return { index, startTime: start, endTime: cumulative };
16
+ });
17
+ }
18
+ function getCurrentItemIndex(manifest, elapsed) {
19
+ if (manifest.length === 0) return 0;
20
+ const totalDuration = manifest[manifest.length - 1]?.endTime ?? 0;
21
+ if (totalDuration === 0) return 0;
22
+ const normalizedElapsed = elapsed % totalDuration;
23
+ const item = manifest.find(
24
+ (m) => normalizedElapsed >= m.startTime && normalizedElapsed < m.endTime
25
+ );
26
+ return item?.index ?? 0;
27
+ }
28
+ function shouldUsePerItemTiming(itemsLength, itemDurations, autoRotateInterval) {
29
+ if (autoRotateInterval === 0) return false;
30
+ if (!itemDurations || itemDurations.length === 0) return false;
31
+ if (itemDurations.length !== itemsLength) {
32
+ console.warn(
33
+ "Carousel: itemDurations length does not match items length. Falling back to autoRotateInterval."
34
+ );
35
+ return false;
36
+ }
37
+ return true;
38
+ }
39
+ function Carousel({
40
+ items,
41
+ autoRotateInterval = 5e3,
42
+ defaultIndex = 0,
43
+ currentIndex: controlledIndex,
44
+ onIndexChange,
45
+ isPaused: controlledIsPaused,
46
+ onPauseChange,
47
+ collapsible = false,
48
+ defaultMinimized = false,
49
+ isMinimized: controlledIsMinimized,
50
+ onMinimizeChange,
51
+ minimizedLabel = "Carousel (minimized)",
52
+ label = "Carousel",
53
+ slideLabel,
54
+ showNavigation = true,
55
+ showPlayPause = true,
56
+ respectReducedMotion = true,
57
+ className,
58
+ slideClassName,
59
+ navigationClassName,
60
+ "aria-label": ariaLabel,
61
+ "aria-labelledby": ariaLabelledBy,
62
+ // Per-item timing props
63
+ itemDurations,
64
+ elapsedTime: controlledElapsedTime,
65
+ onElapsedTimeChange,
66
+ ...props
67
+ }) {
68
+ const isControlled = controlledIndex !== void 0;
69
+ const isPauseControlled = controlledIsPaused !== void 0;
70
+ const isMinimizedControlled = controlledIsMinimized !== void 0;
71
+ const isElapsedTimeControlled = controlledElapsedTime !== void 0;
72
+ const [internalIndex, setInternalIndex] = useState(defaultIndex);
73
+ const [internalIsPaused, setInternalIsPaused] = useState(false);
74
+ const [internalIsMinimized, setInternalIsMinimized] = useState(defaultMinimized);
75
+ const [_internalElapsedTime, setInternalElapsedTime] = useState(() => {
76
+ if (!itemDurations || itemDurations.length === 0) return 0;
77
+ if (itemDurations.length !== items.length) return 0;
78
+ if (defaultIndex === 0) return 0;
79
+ const tempManifest = buildManifest(itemDurations);
80
+ return tempManifest[defaultIndex]?.startTime ?? 0;
81
+ });
82
+ const wasPlayingBeforeMinimize = useRef(false);
83
+ const currentIndex = isControlled ? controlledIndex : internalIndex;
84
+ const isPaused = isPauseControlled ? controlledIsPaused : internalIsPaused;
85
+ const isMinimized = isMinimizedControlled ? controlledIsMinimized : internalIsMinimized;
86
+ const usePerItemTiming = useMemo(
87
+ () => shouldUsePerItemTiming(items.length, itemDurations, autoRotateInterval),
88
+ [items.length, itemDurations, autoRotateInterval]
89
+ );
90
+ const manifest = useMemo(() => {
91
+ if (!usePerItemTiming || !itemDurations) return [];
92
+ return buildManifest(itemDurations);
93
+ }, [usePerItemTiming, itemDurations]);
94
+ const totalDuration = useMemo(() => {
95
+ if (manifest.length === 0) return 0;
96
+ return manifest[manifest.length - 1]?.endTime ?? 0;
97
+ }, [manifest]);
98
+ const goToSlide = useCallback(
99
+ (index) => {
100
+ if (isControlled) {
101
+ onIndexChange?.(index);
102
+ } else {
103
+ setInternalIndex(index);
104
+ }
105
+ if (usePerItemTiming && manifest[index]) {
106
+ const newElapsed = manifest[index].startTime;
107
+ if (!isElapsedTimeControlled) {
108
+ setInternalElapsedTime(newElapsed);
109
+ }
110
+ onElapsedTimeChange?.(newElapsed);
111
+ }
112
+ if (isPauseControlled) {
113
+ onPauseChange?.(true);
114
+ } else {
115
+ setInternalIsPaused(true);
116
+ }
117
+ },
118
+ [
119
+ isControlled,
120
+ isPauseControlled,
121
+ isElapsedTimeControlled,
122
+ onIndexChange,
123
+ onPauseChange,
124
+ onElapsedTimeChange,
125
+ usePerItemTiming,
126
+ manifest
127
+ ]
128
+ );
129
+ const togglePause = useCallback(() => {
130
+ const newPauseState = !isPaused;
131
+ if (isPauseControlled) {
132
+ onPauseChange?.(newPauseState);
133
+ } else {
134
+ setInternalIsPaused(newPauseState);
135
+ }
136
+ }, [isPaused, isPauseControlled, onPauseChange]);
137
+ const toggleMinimize = useCallback(() => {
138
+ const newMinimizedState = !isMinimized;
139
+ if (newMinimizedState) {
140
+ wasPlayingBeforeMinimize.current = !isPaused;
141
+ } else {
142
+ if (wasPlayingBeforeMinimize.current && isPaused) {
143
+ if (isPauseControlled) {
144
+ onPauseChange?.(false);
145
+ } else {
146
+ setInternalIsPaused(false);
147
+ }
148
+ }
149
+ wasPlayingBeforeMinimize.current = false;
150
+ }
151
+ if (isMinimizedControlled) {
152
+ onMinimizeChange?.(newMinimizedState);
153
+ } else {
154
+ setInternalIsMinimized(newMinimizedState);
155
+ }
156
+ }, [isMinimized, isMinimizedControlled, onMinimizeChange, isPaused, isPauseControlled, onPauseChange]);
157
+ useEffect(() => {
158
+ if (autoRotateInterval === 0) return;
159
+ if (respectReducedMotion) {
160
+ if (typeof window !== "undefined" && window.matchMedia) {
161
+ const prefersReducedMotion = window.matchMedia(
162
+ "(prefers-reduced-motion: reduce)"
163
+ ).matches;
164
+ if (prefersReducedMotion) {
165
+ if (isPauseControlled) {
166
+ onPauseChange?.(true);
167
+ } else {
168
+ setInternalIsPaused(true);
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }, [autoRotateInterval, respectReducedMotion, isPauseControlled, onPauseChange]);
174
+ const currentIndexRef = useRef(currentIndex);
175
+ currentIndexRef.current = currentIndex;
176
+ useEffect(() => {
177
+ if (!usePerItemTiming) return;
178
+ if (autoRotateInterval === 0) return;
179
+ if (isPaused || isMinimized) return;
180
+ if (isElapsedTimeControlled) return;
181
+ const interval = setInterval(() => {
182
+ setInternalElapsedTime((prevElapsed) => {
183
+ let newElapsed = prevElapsed + TIMER_CHECK_INTERVAL_MS;
184
+ if (totalDuration > 0 && newElapsed >= totalDuration) {
185
+ newElapsed = 0;
186
+ }
187
+ onElapsedTimeChange?.(newElapsed);
188
+ const newIndex = getCurrentItemIndex(manifest, newElapsed);
189
+ if (newIndex !== currentIndexRef.current) {
190
+ if (isControlled) {
191
+ onIndexChange?.(newIndex);
192
+ } else {
193
+ setInternalIndex(newIndex);
194
+ }
195
+ }
196
+ return newElapsed;
197
+ });
198
+ }, TIMER_CHECK_INTERVAL_MS);
199
+ return () => clearInterval(interval);
200
+ }, [
201
+ usePerItemTiming,
202
+ autoRotateInterval,
203
+ isPaused,
204
+ isMinimized,
205
+ isElapsedTimeControlled,
206
+ totalDuration,
207
+ manifest,
208
+ isControlled,
209
+ onIndexChange,
210
+ onElapsedTimeChange
211
+ ]);
212
+ useEffect(() => {
213
+ if (usePerItemTiming) return;
214
+ if (autoRotateInterval === 0) return;
215
+ if (isPaused || isMinimized) return;
216
+ const interval = setInterval(() => {
217
+ const nextIndex = (currentIndex + 1) % items.length;
218
+ if (isControlled) {
219
+ onIndexChange?.(nextIndex);
220
+ } else {
221
+ setInternalIndex(nextIndex);
222
+ }
223
+ }, autoRotateInterval);
224
+ return () => clearInterval(interval);
225
+ }, [
226
+ usePerItemTiming,
227
+ autoRotateInterval,
228
+ currentIndex,
229
+ isPaused,
230
+ isMinimized,
231
+ items.length,
232
+ isControlled,
233
+ onIndexChange
234
+ ]);
235
+ useEffect(() => {
236
+ if (!usePerItemTiming || !isElapsedTimeControlled) return;
237
+ const newIndex = getCurrentItemIndex(manifest, controlledElapsedTime);
238
+ if (newIndex !== currentIndex) {
239
+ if (isControlled) {
240
+ onIndexChange?.(newIndex);
241
+ } else {
242
+ setInternalIndex(newIndex);
243
+ }
244
+ }
245
+ }, [
246
+ usePerItemTiming,
247
+ isElapsedTimeControlled,
248
+ controlledElapsedTime,
249
+ manifest,
250
+ currentIndex,
251
+ isControlled,
252
+ onIndexChange
253
+ ]);
254
+ const currentSlideLabel = slideLabel ? slideLabel(currentIndex, items.length) : `Slide ${currentIndex + 1} of ${items.length}`;
255
+ return /* @__PURE__ */ jsx(
256
+ "div",
257
+ {
258
+ className: cn(
259
+ "flex flex-col mb-4 transition-all duration-300",
260
+ !isMinimized && "space-y-4",
261
+ className
262
+ ),
263
+ role: "region",
264
+ "aria-roledescription": "carousel",
265
+ "aria-label": isMinimized ? minimizedLabel : ariaLabel || label,
266
+ "aria-labelledby": ariaLabelledBy,
267
+ ...props,
268
+ children: isMinimized && collapsible ? /* @__PURE__ */ jsxs(
269
+ "div",
270
+ {
271
+ className: cn(
272
+ "bg-[var(--primary)] rounded-lg px-4 py-2 shadow-md",
273
+ "flex items-center justify-between gap-4"
274
+ ),
275
+ children: [
276
+ /* @__PURE__ */ jsxs("span", { className: "text-[var(--primary-foreground)] text-sm", children: [
277
+ minimizedLabel,
278
+ " - ",
279
+ currentSlideLabel
280
+ ] }),
281
+ /* @__PURE__ */ jsx(
282
+ Button,
283
+ {
284
+ variant: "outline",
285
+ visualSize: "icon",
286
+ onPress: toggleMinimize,
287
+ "aria-label": "Expand carousel",
288
+ "aria-expanded": false,
289
+ children: /* @__PURE__ */ jsx(ChevronUpIcon, { className: "w-5 h-5" })
290
+ }
291
+ )
292
+ ]
293
+ }
294
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
295
+ /* @__PURE__ */ jsx(
296
+ "div",
297
+ {
298
+ className: cn(
299
+ "bg-[var(--primary)] rounded-lg p-4 overflow-hidden shadow-md",
300
+ "slide-in-animation",
301
+ slideClassName
302
+ ),
303
+ role: "group",
304
+ "aria-roledescription": "slide",
305
+ "aria-label": currentSlideLabel,
306
+ "aria-live": "polite",
307
+ "aria-atomic": "true",
308
+ children: /* @__PURE__ */ jsx("div", { className: "text-[var(--primary-foreground)] min-h-[2rem] flex items-center", children: items[currentIndex] })
309
+ },
310
+ currentIndex
311
+ ),
312
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
313
+ showNavigation && /* @__PURE__ */ jsx(
314
+ "div",
315
+ {
316
+ className: cn("flex items-center", navigationClassName),
317
+ role: "group",
318
+ "aria-label": "Slide navigation",
319
+ children: items.map((_, index) => /* @__PURE__ */ jsx(
320
+ Button,
321
+ {
322
+ variant: index === currentIndex ? "default" : "outline",
323
+ visualSize: "dot",
324
+ onPress: () => goToSlide(index),
325
+ "aria-label": `Go to slide ${index + 1}`,
326
+ "aria-current": index === currentIndex ? true : void 0
327
+ },
328
+ index
329
+ ))
330
+ }
331
+ ),
332
+ /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
333
+ collapsible && /* @__PURE__ */ jsx(
334
+ Button,
335
+ {
336
+ variant: "default",
337
+ visualSize: "icon",
338
+ onPress: toggleMinimize,
339
+ "aria-label": "Minimize carousel",
340
+ "aria-expanded": true,
341
+ children: /* @__PURE__ */ jsx(ChevronDownIcon, { className: "w-5 h-5" })
342
+ }
343
+ ),
344
+ showPlayPause && autoRotateInterval > 0 && /* @__PURE__ */ jsx(
345
+ Button,
346
+ {
347
+ variant: "default",
348
+ visualSize: "icon",
349
+ onPress: togglePause,
350
+ "aria-label": isPaused ? "Play carousel" : "Pause carousel",
351
+ children: isPaused ? /* @__PURE__ */ jsx(PlayIcon, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx(PauseIcon, { className: "w-5 h-5" })
352
+ }
353
+ )
354
+ ] })
355
+ ] })
356
+ ] })
357
+ }
358
+ );
359
+ }
360
+ Carousel.displayName = "Carousel";
361
+
362
+ export { Carousel };
363
+ //# sourceMappingURL=chunk-X25TNRSD.mjs.map
364
+ //# sourceMappingURL=chunk-X25TNRSD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/Carousel/Carousel.tsx"],"names":[],"mappings":"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","file":"chunk-X25TNRSD.mjs","sourcesContent":["'use client';\n\n/**\n * Carousel Component\n * Accessible carousel for displaying rotating content with React Node support\n *\n * @see constitution.md Principle IV (Accessibility First - WCAG 2.2 AA minimum)\n */\n\nimport { useState, useEffect, useCallback, useMemo, useRef, type ReactNode } from 'react';\nimport { Button } from '../Button';\nimport { PauseIcon, PlayIcon, ChevronUpIcon, ChevronDownIcon } from 'lucide-react';\nimport { cn } from '../../utils/cn';\nimport type { CarouselProps, ItemManifest } from './Carousel.types';\n\n/**\n * Minimum duration for any item in milliseconds.\n * Prevents disorienting rapid transitions and allows screen readers time to announce.\n */\nconst MIN_ITEM_DURATION_MS = 1000;\n\n/**\n * Timer check interval in milliseconds.\n * Used for per-item timing mode to check if item should transition.\n */\nconst TIMER_CHECK_INTERVAL_MS = 1000;\n\n/**\n * Builds a manifest mapping cumulative time thresholds to item indices.\n * @param durations - Array of durations in milliseconds for each item\n * @returns Array of ItemManifest entries with startTime and endTime\n */\nfunction buildManifest(durations: number[]): ItemManifest[] {\n let cumulative = 0;\n return durations.map((duration, index) => {\n const start = cumulative;\n // Enforce minimum duration\n const safeDuration = Math.max(duration, MIN_ITEM_DURATION_MS);\n cumulative += safeDuration;\n return { index, startTime: start, endTime: cumulative };\n });\n}\n\n/**\n * Gets the item index that should be displayed for a given elapsed time.\n * @param manifest - Array of ItemManifest entries\n * @param elapsed - Current elapsed time in milliseconds\n * @returns The index of the item that should be displayed\n */\nfunction getCurrentItemIndex(manifest: ItemManifest[], elapsed: number): number {\n if (manifest.length === 0) return 0;\n\n const totalDuration = manifest[manifest.length - 1]?.endTime ?? 0;\n if (totalDuration === 0) return 0;\n\n // Normalize elapsed time to handle wraparound\n const normalizedElapsed = elapsed % totalDuration;\n\n const item = manifest.find(\n (m) => normalizedElapsed >= m.startTime && normalizedElapsed < m.endTime\n );\n return item?.index ?? 0;\n}\n\n/**\n * Validates whether per-item timing should be used.\n * @param itemsLength - Number of items in the carousel\n * @param itemDurations - Optional array of durations\n * @param autoRotateInterval - The autoRotateInterval setting\n * @returns true if per-item timing should be used\n */\nfunction shouldUsePerItemTiming(\n itemsLength: number,\n itemDurations: number[] | undefined,\n autoRotateInterval: number\n): boolean {\n // Disabled if autoRotateInterval is 0\n if (autoRotateInterval === 0) return false;\n\n // Must have itemDurations array\n if (!itemDurations || itemDurations.length === 0) return false;\n\n // Array length must match items length\n if (itemDurations.length !== itemsLength) {\n console.warn(\n 'Carousel: itemDurations length does not match items length. ' +\n 'Falling back to autoRotateInterval.'\n );\n return false;\n }\n\n return true;\n}\n\nexport function Carousel({\n items,\n autoRotateInterval = 5000,\n defaultIndex = 0,\n currentIndex: controlledIndex,\n onIndexChange,\n isPaused: controlledIsPaused,\n onPauseChange,\n collapsible = false,\n defaultMinimized = false,\n isMinimized: controlledIsMinimized,\n onMinimizeChange,\n minimizedLabel = 'Carousel (minimized)',\n label = 'Carousel',\n slideLabel,\n showNavigation = true,\n showPlayPause = true,\n respectReducedMotion = true,\n className,\n slideClassName,\n navigationClassName,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n // Per-item timing props\n itemDurations,\n elapsedTime: controlledElapsedTime,\n onElapsedTimeChange,\n ...props\n}: CarouselProps): ReactNode {\n // Determine if component is controlled or uncontrolled\n const isControlled = controlledIndex !== undefined;\n const isPauseControlled = controlledIsPaused !== undefined;\n const isMinimizedControlled = controlledIsMinimized !== undefined;\n const isElapsedTimeControlled = controlledElapsedTime !== undefined;\n\n // Internal state for uncontrolled mode\n const [internalIndex, setInternalIndex] = useState(defaultIndex);\n const [internalIsPaused, setInternalIsPaused] = useState(false);\n const [internalIsMinimized, setInternalIsMinimized] = useState(defaultMinimized);\n\n // Calculate initial elapsed time based on defaultIndex if itemDurations is provided\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_internalElapsedTime, setInternalElapsedTime] = useState(() => {\n if (!itemDurations || itemDurations.length === 0) return 0;\n if (itemDurations.length !== items.length) return 0;\n if (defaultIndex === 0) return 0;\n\n // Build manifest to find the startTime for the default index\n const tempManifest = buildManifest(itemDurations);\n return tempManifest[defaultIndex]?.startTime ?? 0;\n });\n\n // Ref to track if carousel was playing before minimize\n const wasPlayingBeforeMinimize = useRef(false);\n\n // Use controlled value if provided, otherwise use internal state\n const currentIndex = isControlled ? controlledIndex : internalIndex;\n const isPaused = isPauseControlled ? controlledIsPaused : internalIsPaused;\n const isMinimized = isMinimizedControlled\n ? controlledIsMinimized\n : internalIsMinimized;\n // Determine if per-item timing should be used\n const usePerItemTiming = useMemo(\n () => shouldUsePerItemTiming(items.length, itemDurations, autoRotateInterval),\n [items.length, itemDurations, autoRotateInterval]\n );\n\n // Build the manifest for per-item timing (memoized)\n const manifest = useMemo(() => {\n if (!usePerItemTiming || !itemDurations) return [];\n return buildManifest(itemDurations);\n }, [usePerItemTiming, itemDurations]);\n\n // Calculate total duration (memoized)\n const totalDuration = useMemo(() => {\n if (manifest.length === 0) return 0;\n return manifest[manifest.length - 1]?.endTime ?? 0;\n }, [manifest]);\n\n // Navigation handler\n const goToSlide = useCallback(\n (index: number) => {\n if (isControlled) {\n onIndexChange?.(index);\n } else {\n setInternalIndex(index);\n }\n\n // For per-item timing, jump elapsed time to item's startTime\n if (usePerItemTiming && manifest[index]) {\n const newElapsed = manifest[index].startTime;\n if (!isElapsedTimeControlled) {\n setInternalElapsedTime(newElapsed);\n }\n onElapsedTimeChange?.(newElapsed);\n }\n\n // Pause when user manually navigates\n if (isPauseControlled) {\n onPauseChange?.(true);\n } else {\n setInternalIsPaused(true);\n }\n },\n [\n isControlled,\n isPauseControlled,\n isElapsedTimeControlled,\n onIndexChange,\n onPauseChange,\n onElapsedTimeChange,\n usePerItemTiming,\n manifest,\n ]\n );\n\n // Pause toggle handler\n const togglePause = useCallback(() => {\n const newPauseState = !isPaused;\n\n if (isPauseControlled) {\n onPauseChange?.(newPauseState);\n } else {\n setInternalIsPaused(newPauseState);\n }\n }, [isPaused, isPauseControlled, onPauseChange]);\n\n // Minimize toggle handler\n const toggleMinimize = useCallback(() => {\n const newMinimizedState = !isMinimized;\n\n if (newMinimizedState) {\n // Minimizing - track if we were playing\n wasPlayingBeforeMinimize.current = !isPaused;\n } else {\n // Expanding - resume if we were playing before\n if (wasPlayingBeforeMinimize.current && isPaused) {\n if (isPauseControlled) {\n onPauseChange?.(false);\n } else {\n setInternalIsPaused(false);\n }\n }\n wasPlayingBeforeMinimize.current = false;\n }\n\n if (isMinimizedControlled) {\n onMinimizeChange?.(newMinimizedState);\n } else {\n setInternalIsMinimized(newMinimizedState);\n }\n }, [isMinimized, isMinimizedControlled, onMinimizeChange, isPaused, isPauseControlled, onPauseChange]);\n\n // Reduced motion preference check effect\n useEffect(() => {\n // Check if auto-rotation is disabled\n if (autoRotateInterval === 0) return;\n\n // Respect user's motion preferences\n if (respectReducedMotion) {\n // Check if matchMedia is available (not available in all test environments)\n if (typeof window !== 'undefined' && window.matchMedia) {\n const prefersReducedMotion = window.matchMedia(\n '(prefers-reduced-motion: reduce)'\n ).matches;\n\n if (prefersReducedMotion) {\n if (isPauseControlled) {\n onPauseChange?.(true);\n } else {\n setInternalIsPaused(true);\n }\n }\n }\n }\n }, [autoRotateInterval, respectReducedMotion, isPauseControlled, onPauseChange]);\n\n // Ref to track current index for the interval callback\n const currentIndexRef = useRef(currentIndex);\n currentIndexRef.current = currentIndex;\n\n // Per-item timing effect (uncontrolled elapsed time)\n useEffect(() => {\n // Skip if not using per-item timing\n if (!usePerItemTiming) return;\n\n // Don't run if auto-rotation is disabled\n if (autoRotateInterval === 0) return;\n\n // Don't run if paused or minimized\n if (isPaused || isMinimized) return;\n\n // Don't run if elapsed time is controlled externally\n if (isElapsedTimeControlled) return;\n\n // Set up 1-second interval for timer ticks\n const interval = setInterval(() => {\n // Use functional update to get the latest elapsed time\n setInternalElapsedTime((prevElapsed) => {\n // Calculate new elapsed time\n let newElapsed = prevElapsed + TIMER_CHECK_INTERVAL_MS;\n\n // Handle wraparound\n if (totalDuration > 0 && newElapsed >= totalDuration) {\n newElapsed = 0;\n }\n\n // Fire callback (using the new elapsed value)\n onElapsedTimeChange?.(newElapsed);\n\n // Calculate current item from manifest\n const newIndex = getCurrentItemIndex(manifest, newElapsed);\n\n // Update index if changed (using ref for latest value)\n if (newIndex !== currentIndexRef.current) {\n if (isControlled) {\n onIndexChange?.(newIndex);\n } else {\n setInternalIndex(newIndex);\n }\n }\n\n return newElapsed;\n });\n }, TIMER_CHECK_INTERVAL_MS);\n\n return () => clearInterval(interval);\n }, [\n usePerItemTiming,\n autoRotateInterval,\n isPaused,\n isMinimized,\n isElapsedTimeControlled,\n totalDuration,\n manifest,\n isControlled,\n onIndexChange,\n onElapsedTimeChange,\n ]);\n\n // Standard auto-rotation effect (fallback when not using per-item timing)\n useEffect(() => {\n // Skip if using per-item timing\n if (usePerItemTiming) return;\n\n // Check if auto-rotation is disabled\n if (autoRotateInterval === 0) return;\n\n // Don't auto-rotate if paused or minimized\n if (isPaused || isMinimized) return;\n\n const interval = setInterval(() => {\n const nextIndex = (currentIndex + 1) % items.length;\n\n if (isControlled) {\n onIndexChange?.(nextIndex);\n } else {\n setInternalIndex(nextIndex);\n }\n }, autoRotateInterval);\n\n return () => clearInterval(interval);\n }, [\n usePerItemTiming,\n autoRotateInterval,\n currentIndex,\n isPaused,\n isMinimized,\n items.length,\n isControlled,\n onIndexChange,\n ]);\n\n // Effect to sync controlled elapsedTime to displayed index\n useEffect(() => {\n if (!usePerItemTiming || !isElapsedTimeControlled) return;\n\n const newIndex = getCurrentItemIndex(manifest, controlledElapsedTime);\n if (newIndex !== currentIndex) {\n if (isControlled) {\n onIndexChange?.(newIndex);\n } else {\n setInternalIndex(newIndex);\n }\n }\n }, [\n usePerItemTiming,\n isElapsedTimeControlled,\n controlledElapsedTime,\n manifest,\n currentIndex,\n isControlled,\n onIndexChange,\n ]);\n\n // Generate slide label\n const currentSlideLabel = slideLabel\n ? slideLabel(currentIndex, items.length)\n : `Slide ${currentIndex + 1} of ${items.length}`;\n\n return (\n <div\n className={cn(\n 'flex flex-col mb-4 transition-all duration-300',\n !isMinimized && 'space-y-4',\n className\n )}\n role=\"region\"\n aria-roledescription=\"carousel\"\n aria-label={isMinimized ? minimizedLabel : ariaLabel || label}\n aria-labelledby={ariaLabelledBy}\n {...props}\n >\n {/* Minimized State */}\n {isMinimized && collapsible ? (\n <div\n className={cn(\n 'bg-[var(--primary)] rounded-lg px-4 py-2 shadow-md',\n 'flex items-center justify-between gap-4'\n )}\n >\n <span className=\"text-[var(--primary-foreground)] text-sm\">\n {minimizedLabel} - {currentSlideLabel}\n </span>\n <Button\n variant=\"outline\"\n visualSize=\"icon\"\n onPress={toggleMinimize}\n aria-label=\"Expand carousel\"\n aria-expanded={false}\n >\n <ChevronUpIcon className=\"w-5 h-5\" />\n </Button>\n </div>\n ) : (\n <>\n {/* Current Slide */}\n <div\n key={currentIndex}\n className={cn(\n 'bg-[var(--primary)] rounded-lg p-4 overflow-hidden shadow-md',\n 'slide-in-animation',\n slideClassName\n )}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={currentSlideLabel}\n aria-live=\"polite\"\n aria-atomic=\"true\"\n >\n <div className=\"text-[var(--primary-foreground)] min-h-[2rem] flex items-center\">\n {items[currentIndex]}\n </div>\n </div>\n\n {/* Controls Container */}\n <div className=\"flex items-center justify-between gap-4\">\n {/* Navigation Dots */}\n {showNavigation && (\n <div\n className={cn('flex items-center', navigationClassName)}\n role=\"group\"\n aria-label=\"Slide navigation\"\n >\n {items.map((_, index) => (\n <Button\n key={index}\n variant={index === currentIndex ? 'default' : 'outline'}\n visualSize=\"dot\"\n onPress={() => goToSlide(index)}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={index === currentIndex ? true : undefined}\n />\n ))}\n </div>\n )}\n\n {/* Right Controls Group */}\n <div className=\"flex items-center gap-2\">\n {/* Minimize Button */}\n {collapsible && (\n <Button\n variant=\"default\"\n visualSize=\"icon\"\n onPress={toggleMinimize}\n aria-label=\"Minimize carousel\"\n aria-expanded={true}\n >\n <ChevronDownIcon className=\"w-5 h-5\" />\n </Button>\n )}\n \n {/* Play/Pause Button */}\n {showPlayPause && autoRotateInterval > 0 && (\n <Button\n variant=\"default\"\n visualSize=\"icon\"\n onPress={togglePause}\n aria-label={isPaused ? 'Play carousel' : 'Pause carousel'}\n >\n {isPaused ? (\n <PlayIcon className=\"w-5 h-5\" />\n ) : (\n <PauseIcon className=\"w-5 h-5\" />\n )}\n </Button>\n )}\n </div>\n </div>\n </>\n )}\n </div>\n );\n}\n\nCarousel.displayName = 'Carousel';\n"]}
@@ -0,0 +1,108 @@
1
+ 'use strict';
2
+
3
+ var react = require('react');
4
+ var classVarianceAuthority = require('class-variance-authority');
5
+
6
+ var ButtonGroupContext = react.createContext(null);
7
+ ButtonGroupContext.displayName = "ButtonGroupContext";
8
+ function useButtonGroupContext() {
9
+ return react.useContext(ButtonGroupContext);
10
+ }
11
+ var ButtonGroupItemContext = react.createContext(null);
12
+ ButtonGroupItemContext.displayName = "ButtonGroupItemContext";
13
+ function useButtonGroupItemContext() {
14
+ return react.useContext(ButtonGroupItemContext);
15
+ }
16
+ var buttonGroupVariants = classVarianceAuthority.cva("inline-flex items-center gap-0", {
17
+ variants: {
18
+ orientation: {
19
+ horizontal: "flex-row",
20
+ vertical: "flex-col w-full"
21
+ }
22
+ },
23
+ defaultVariants: {
24
+ orientation: "horizontal"
25
+ }
26
+ });
27
+ var buttonGroupItemVariants = classVarianceAuthority.cva("", {
28
+ variants: {
29
+ orientation: {
30
+ // min-w-[44px] ensures visual layer fills touch target width (for icon buttons)
31
+ horizontal: "min-w-[44px]",
32
+ // flex (overrides inline-flex) + min-h-[44px] makes visual layer fill touch target,
33
+ // eliminating gaps between stacked buttons in vertical orientation
34
+ vertical: "flex min-h-[44px]"
35
+ },
36
+ position: {
37
+ first: "",
38
+ middle: "",
39
+ last: "",
40
+ only: ""
41
+ // Single button - no modifications needed
42
+ }
43
+ },
44
+ compoundVariants: [
45
+ // ==========================================================================
46
+ // Horizontal Orientation
47
+ // ==========================================================================
48
+ {
49
+ orientation: "horizontal",
50
+ position: "first",
51
+ className: "rounded-r-none border-r-0"
52
+ },
53
+ {
54
+ orientation: "horizontal",
55
+ position: "middle",
56
+ className: "rounded-none border-r-0"
57
+ },
58
+ {
59
+ orientation: "horizontal",
60
+ position: "last",
61
+ className: "rounded-l-none"
62
+ },
63
+ // ==========================================================================
64
+ // Vertical Orientation
65
+ // Note: w-full is handled by Button's effectiveFullWidth for both layers
66
+ // ==========================================================================
67
+ {
68
+ orientation: "vertical",
69
+ position: "first",
70
+ className: "rounded-b-none border-b-0"
71
+ },
72
+ {
73
+ orientation: "vertical",
74
+ position: "middle",
75
+ className: "rounded-none border-b-0"
76
+ },
77
+ {
78
+ orientation: "vertical",
79
+ position: "last",
80
+ className: "rounded-t-none"
81
+ }
82
+ ],
83
+ defaultVariants: {
84
+ orientation: "horizontal",
85
+ position: "only"
86
+ }
87
+ });
88
+ var buttonGroupSeparatorVariants = classVarianceAuthority.cva("bg-[var(--border)]", {
89
+ variants: {
90
+ orientation: {
91
+ horizontal: "w-px h-6 mx-1",
92
+ vertical: "h-px w-full my-1"
93
+ }
94
+ },
95
+ defaultVariants: {
96
+ orientation: "horizontal"
97
+ }
98
+ });
99
+
100
+ exports.ButtonGroupContext = ButtonGroupContext;
101
+ exports.ButtonGroupItemContext = ButtonGroupItemContext;
102
+ exports.buttonGroupItemVariants = buttonGroupItemVariants;
103
+ exports.buttonGroupSeparatorVariants = buttonGroupSeparatorVariants;
104
+ exports.buttonGroupVariants = buttonGroupVariants;
105
+ exports.useButtonGroupContext = useButtonGroupContext;
106
+ exports.useButtonGroupItemContext = useButtonGroupItemContext;
107
+ //# sourceMappingURL=chunk-Y3GT7ETK.js.map
108
+ //# sourceMappingURL=chunk-Y3GT7ETK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/ButtonGroup/ButtonGroupContext.tsx","../src/elements/ButtonGroup/ButtonGroup.variants.ts"],"names":["createContext","useContext","cva"],"mappings":";;;;;AAoCA,IAAM,kBAAA,GAAqBA,oBAA8C,IAAI;AAE7E,kBAAA,CAAmB,WAAA,GAAc,oBAAA;AAM1B,SAAS,qBAAA,GAAwD;AACtE,EAAA,OAAOC,iBAAW,kBAAkB,CAAA;AACtC;AAUA,IAAM,sBAAA,GACJD,oBAAkD,IAAI;AAExD,sBAAA,CAAuB,WAAA,GAAc,wBAAA;AAM9B,SAAS,yBAAA,GAAgE;AAC9E,EAAA,OAAOC,iBAAW,sBAAsB,CAAA;AAC1C;AC5CO,IAAM,mBAAA,GAAsBC,2BAAI,gCAAA,EAAkC;AAAA,EACvE,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,UAAA;AAAA,MACZ,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa;AAAA;AAEjB,CAAC;AAcM,IAAM,uBAAA,GAA0BA,2BAAI,EAAA,EAAI;AAAA,EAC7C,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA;AAAA,MAEX,UAAA,EAAY,cAAA;AAAA;AAAA;AAAA,MAGZ,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,QAAA,EAAU;AAAA,MACR,KAAA,EAAO,EAAA;AAAA,MACP,MAAA,EAAQ,EAAA;AAAA,MACR,IAAA,EAAM,EAAA;AAAA,MACN,IAAA,EAAM;AAAA;AAAA;AACR,GACF;AAAA,EACA,gBAAA,EAAkB;AAAA;AAAA;AAAA;AAAA,IAIhB;AAAA,MACE,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,WAAA,EAAa,YAAA;AAAA,MACb,QAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA;AAAA,MACE,WAAA,EAAa,UAAA;AAAA,MACb,QAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,WAAA,EAAa,UAAA;AAAA,MACb,QAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AAAA,IACA;AAAA,MACE,WAAA,EAAa,UAAA;AAAA,MACb,QAAA,EAAU,MAAA;AAAA,MACV,SAAA,EAAW;AAAA;AACb,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa,YAAA;AAAA,IACb,QAAA,EAAU;AAAA;AAEd,CAAC;AAUM,IAAM,4BAAA,GAA+BA,2BAAI,oBAAA,EAAsB;AAAA,EACpE,QAAA,EAAU;AAAA,IACR,WAAA,EAAa;AAAA,MACX,UAAA,EAAY,eAAA;AAAA,MACZ,QAAA,EAAU;AAAA;AACZ,GACF;AAAA,EACA,eAAA,EAAiB;AAAA,IACf,WAAA,EAAa;AAAA;AAEjB,CAAC","file":"chunk-Y3GT7ETK.js","sourcesContent":["\"use client\";\n\nimport { createContext, useContext } from 'react';\nimport type {\n ButtonGroupContextValue,\n ButtonGroupItemContextValue,\n} from './ButtonGroup.types';\n\n/**\n * ButtonGroup Context System (Two-Level)\n *\n * Provides a two-level context pattern for ButtonGroup:\n *\n * 1. ButtonGroupContext (group-level):\n * - Provides: orientation, variant, size, isDisabled\n * - Consumed by: Button (for prop inheritance), Separator (for orientation)\n *\n * 2. ButtonGroupItemContext (item-level):\n * - Provides: position ('first' | 'middle' | 'last' | 'only')\n * - Consumed by: Button (for border-radius styling)\n *\n * Both contexts return null when not in a provider, allowing Button\n * to work standalone without any group context.\n *\n * @see plan.md for architecture details\n * @see ButtonGroup.tsx for Provider implementation\n */\n\n// =============================================================================\n// Group-Level Context\n// =============================================================================\n\n/**\n * Context for group-level props (orientation, variant, size, isDisabled)\n * Default value is null to indicate \"not in a group\"\n */\nconst ButtonGroupContext = createContext<ButtonGroupContextValue | null>(null);\n\nButtonGroupContext.displayName = 'ButtonGroupContext';\n\n/**\n * Hook to access group-level context\n * @returns ButtonGroupContextValue if inside a ButtonGroup, null otherwise\n */\nexport function useButtonGroupContext(): ButtonGroupContextValue | null {\n return useContext(ButtonGroupContext);\n}\n\n// =============================================================================\n// Item-Level Context\n// =============================================================================\n\n/**\n * Context for per-button position information\n * Default value is null to indicate \"not wrapped with position context\"\n */\nconst ButtonGroupItemContext =\n createContext<ButtonGroupItemContextValue | null>(null);\n\nButtonGroupItemContext.displayName = 'ButtonGroupItemContext';\n\n/**\n * Hook to access item-level context (position)\n * @returns ButtonGroupItemContextValue if wrapped with position context, null otherwise\n */\nexport function useButtonGroupItemContext(): ButtonGroupItemContextValue | null {\n return useContext(ButtonGroupItemContext);\n}\n\n// =============================================================================\n// Exports\n// =============================================================================\n\nexport { ButtonGroupContext, ButtonGroupItemContext };\n","import { cva } from 'class-variance-authority';\n\n/**\n * ButtonGroup CVA Variants\n *\n * Defines Class Variance Authority (CVA) variants for:\n * - ButtonGroup container (orientation-based layout)\n * - ButtonGroupItem (position-based border-radius)\n * - ButtonGroupSeparator (orientation-based styling)\n *\n * @see plan.md Phase 1: Design & Contracts - CVA Variants\n * @see constitution.md Principle V (Component Quality Standards)\n */\n\n// =============================================================================\n// Container Variants\n// =============================================================================\n\n/**\n * ButtonGroup container variants\n * Controls the layout direction based on orientation\n * Uses gap-0 to ensure buttons are connected (share borders)\n */\nexport const buttonGroupVariants = cva('inline-flex items-center gap-0', {\n variants: {\n orientation: {\n horizontal: 'flex-row',\n vertical: 'flex-col w-full',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n\n// =============================================================================\n// Item Position Variants\n// =============================================================================\n\n/**\n * ButtonGroupItem position variants\n * Applied to Button's visual layer (Layer 2) for position-aware border-radius\n *\n * Compound variants handle both orientation and position combinations:\n * - Horizontal: left/right borders and radii\n * - Vertical: top/bottom borders and radii\n */\nexport const buttonGroupItemVariants = cva('', {\n variants: {\n orientation: {\n // min-w-[44px] ensures visual layer fills touch target width (for icon buttons)\n horizontal: 'min-w-[44px]',\n // flex (overrides inline-flex) + min-h-[44px] makes visual layer fill touch target,\n // eliminating gaps between stacked buttons in vertical orientation\n vertical: 'flex min-h-[44px]',\n },\n position: {\n first: '',\n middle: '',\n last: '',\n only: '', // Single button - no modifications needed\n },\n },\n compoundVariants: [\n // ==========================================================================\n // Horizontal Orientation\n // ==========================================================================\n {\n orientation: 'horizontal',\n position: 'first',\n className: 'rounded-r-none border-r-0',\n },\n {\n orientation: 'horizontal',\n position: 'middle',\n className: 'rounded-none border-r-0',\n },\n {\n orientation: 'horizontal',\n position: 'last',\n className: 'rounded-l-none',\n },\n // ==========================================================================\n // Vertical Orientation\n // Note: w-full is handled by Button's effectiveFullWidth for both layers\n // ==========================================================================\n {\n orientation: 'vertical',\n position: 'first',\n className: 'rounded-b-none border-b-0',\n },\n {\n orientation: 'vertical',\n position: 'middle',\n className: 'rounded-none border-b-0',\n },\n {\n orientation: 'vertical',\n position: 'last',\n className: 'rounded-t-none',\n },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n position: 'only',\n },\n});\n\n// =============================================================================\n// Separator Variants\n// =============================================================================\n\n/**\n * ButtonGroupSeparator variants\n * Orientation-aware visual divider between button groups\n */\nexport const buttonGroupSeparatorVariants = cva('bg-[var(--border)]', {\n variants: {\n orientation: {\n horizontal: 'w-px h-6 mx-1',\n vertical: 'h-px w-full my-1',\n },\n },\n defaultVariants: {\n orientation: 'horizontal',\n },\n});\n"]}
@@ -0,0 +1,115 @@
1
+ // src/styles/shared-variants.ts
2
+ var FOCUS_WITHIN_RING = [
3
+ "focus-within:outline-none",
4
+ "focus-within:ring-2",
5
+ "focus-within:ring-[var(--ring)]",
6
+ "focus-within:ring-offset-2"
7
+ ];
8
+ var FOCUS_VISIBLE_RING = [
9
+ "focus-visible:outline-none",
10
+ "focus-visible:ring-2",
11
+ "focus-visible:ring-[var(--ring)]",
12
+ "focus-visible:ring-offset-2"
13
+ ];
14
+ var FOCUS_RING = [
15
+ "focus:outline-none",
16
+ "focus:ring-2",
17
+ "focus:ring-[var(--ring)]"
18
+ ];
19
+ var FOCUS_HIGHLIGHT = [
20
+ "focus:outline-none",
21
+ "focus:bg-[var(--accent)]",
22
+ "focus:text-[var(--accent-foreground)]"
23
+ ];
24
+ var DISABLED_STANDARD = [
25
+ "disabled:pointer-events-none",
26
+ "disabled:opacity-50"
27
+ ];
28
+ var DISABLED_DATA_ATTR = [
29
+ "data-[disabled]:pointer-events-none",
30
+ "data-[disabled]:opacity-50",
31
+ "data-[disabled]:cursor-not-allowed"
32
+ ];
33
+ var TEXT_SIZE_SMALL_SCALE = {
34
+ sm: "text-xs",
35
+ default: "text-sm",
36
+ lg: "text-base"
37
+ };
38
+ var TEXT_SIZE_MEDIUM_SCALE = {
39
+ sm: "text-sm",
40
+ default: "text-base",
41
+ lg: "text-lg"
42
+ };
43
+ var TOUCH_TARGET_MIN = [
44
+ "min-h-[44px]",
45
+ "min-w-[44px]"
46
+ ];
47
+ var INTERACTIVE_SIZES = {
48
+ sm: "h-9 w-9",
49
+ // 36px - desktop only, NOT AAA compliant
50
+ default: "h-11 w-11",
51
+ // 44px - AAA compliant
52
+ lg: "h-14 w-14"
53
+ // 56px - AAA compliant, enhanced
54
+ };
55
+ var FIELD_HEIGHTS = {
56
+ sm: "h-9",
57
+ // 36px
58
+ default: "h-11",
59
+ // 44px
60
+ lg: "h-14"
61
+ // 56px
62
+ };
63
+ var ERROR_MESSAGE_BASE = [
64
+ "flex",
65
+ "items-center",
66
+ "gap-1.5",
67
+ "text-[var(--destructive)]"
68
+ ];
69
+ var SUCCESS_MESSAGE_BASE = [
70
+ "flex",
71
+ "items-center",
72
+ "gap-1.5",
73
+ "text-[var(--success)]"
74
+ ];
75
+ var DESCRIPTION_BASE = [
76
+ "text-[var(--menu-muted)]"
77
+ ];
78
+ var LABEL_BASE = [
79
+ "font-medium",
80
+ "text-[var(--content-foreground)]"
81
+ ];
82
+ var REQUIRED_INDICATOR = "after:content-['*'] after:ml-0.5 after:text-[var(--destructive)]";
83
+ var POPOVER_ANIMATION_IN = [
84
+ "data-[entering]:animate-in",
85
+ "data-[entering]:fade-in-0",
86
+ "data-[entering]:zoom-in-95"
87
+ ];
88
+ var POPOVER_ANIMATION_OUT = [
89
+ "data-[exiting]:animate-out",
90
+ "data-[exiting]:fade-out-0",
91
+ "data-[exiting]:zoom-out-95"
92
+ ];
93
+ var REDUCED_MOTION = [
94
+ "motion-reduce:transition-none",
95
+ "motion-reduce:animate-none"
96
+ ];
97
+ var TRANSITION_COLORS = [
98
+ "transition-colors",
99
+ "duration-200"
100
+ ];
101
+ var TRANSITION_FAST = [
102
+ "transition-colors",
103
+ "duration-150"
104
+ ];
105
+ var HOVER_ACCENT = [
106
+ "hover:bg-[var(--accent)]",
107
+ "hover:text-[var(--accent-foreground)]"
108
+ ];
109
+ function combineStyles(...styles) {
110
+ return styles.flatMap((s) => Array.isArray(s) ? [...s] : [s]);
111
+ }
112
+
113
+ export { DESCRIPTION_BASE, DISABLED_DATA_ATTR, DISABLED_STANDARD, ERROR_MESSAGE_BASE, FIELD_HEIGHTS, FOCUS_HIGHLIGHT, FOCUS_RING, FOCUS_VISIBLE_RING, FOCUS_WITHIN_RING, HOVER_ACCENT, INTERACTIVE_SIZES, LABEL_BASE, POPOVER_ANIMATION_IN, POPOVER_ANIMATION_OUT, REDUCED_MOTION, REQUIRED_INDICATOR, SUCCESS_MESSAGE_BASE, TEXT_SIZE_MEDIUM_SCALE, TEXT_SIZE_SMALL_SCALE, TOUCH_TARGET_MIN, TRANSITION_COLORS, TRANSITION_FAST, combineStyles };
114
+ //# sourceMappingURL=chunk-Z4FRNOF6.mjs.map
115
+ //# sourceMappingURL=chunk-Z4FRNOF6.mjs.map