@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,435 @@
1
+ import { cn } from './chunk-E2KQFV3O.mjs';
2
+ import { BaseComponentPropsSchema } from './chunk-5SVLJN2C.mjs';
3
+ import { memo, forwardRef, useState, useCallback, Children, isValidElement, cloneElement } from 'react';
4
+ import { Button } from 'react-aria-components';
5
+ import { cva } from 'class-variance-authority';
6
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
7
+ import { z } from 'zod';
8
+
9
+ function getInitials(name) {
10
+ if (!name || !name.trim()) return "";
11
+ const parts = name.trim().split(/\s+/).filter(Boolean);
12
+ if (parts.length === 0) return "";
13
+ const firstPart = parts[0];
14
+ if (parts.length === 1) {
15
+ return firstPart ? firstPart.charAt(0).toUpperCase() : "";
16
+ }
17
+ const lastPart = parts[parts.length - 1];
18
+ const first = firstPart ? firstPart.charAt(0).toUpperCase() : "";
19
+ const last = lastPart ? lastPart.charAt(0).toUpperCase() : "";
20
+ return first + last;
21
+ }
22
+ var avatarOuterVariants = cva(
23
+ "relative inline-flex items-center justify-center",
24
+ {
25
+ variants: {
26
+ size: {
27
+ sm: "min-h-[44px] min-w-[44px]",
28
+ default: "min-h-[44px] min-w-[44px]",
29
+ lg: "min-h-[48px] min-w-[48px]"
30
+ },
31
+ interactive: {
32
+ true: [
33
+ "cursor-pointer",
34
+ "focus-visible:outline-none",
35
+ "focus-visible:ring-2",
36
+ "focus-visible:ring-[var(--ring)]",
37
+ "focus-visible:ring-offset-2",
38
+ "focus-visible:ring-offset-[var(--page-background)]",
39
+ "motion-safe:transition-transform",
40
+ "motion-safe:duration-150",
41
+ "motion-safe:ease-out",
42
+ "motion-safe:hover:scale-105"
43
+ ],
44
+ false: ""
45
+ }
46
+ },
47
+ defaultVariants: {
48
+ size: "default",
49
+ interactive: false
50
+ }
51
+ }
52
+ );
53
+ var avatarVisualVariants = cva(
54
+ [
55
+ "relative inline-flex items-center justify-center",
56
+ "overflow-hidden",
57
+ "bg-[var(--accent-background)]",
58
+ "text-[var(--accent-foreground)]",
59
+ "font-medium",
60
+ "select-none"
61
+ ],
62
+ {
63
+ variants: {
64
+ size: {
65
+ sm: "h-8 w-8 text-xs",
66
+ default: "h-11 w-11 text-sm",
67
+ lg: "h-12 w-12 text-base"
68
+ },
69
+ shape: {
70
+ circle: "rounded-full",
71
+ rounded: "rounded-lg"
72
+ },
73
+ status: {
74
+ online: "ring-[3px] ring-[var(--status-online,#22c55e)]",
75
+ offline: "ring-[3px] ring-[var(--status-offline,#6b7280)]",
76
+ busy: "ring-[3px] ring-[var(--status-busy,#ef4444)]",
77
+ away: "ring-[3px] ring-[var(--status-away,#eab308)]"
78
+ }
79
+ },
80
+ defaultVariants: {
81
+ size: "default",
82
+ shape: "circle"
83
+ }
84
+ }
85
+ );
86
+ var Avatar = memo(
87
+ forwardRef(
88
+ ({
89
+ src,
90
+ alt,
91
+ name,
92
+ size = "default",
93
+ shape = "circle",
94
+ status,
95
+ onPress,
96
+ className,
97
+ id,
98
+ "data-testid": dataTestId,
99
+ "aria-label": ariaLabel,
100
+ "aria-labelledby": ariaLabelledBy,
101
+ "aria-describedby": ariaDescribedBy,
102
+ _groupIndex
103
+ }, ref) => {
104
+ const [loadingState, setLoadingState] = useState(
105
+ src ? "loading" : "error"
106
+ );
107
+ const handleImageLoad = useCallback(() => {
108
+ setLoadingState("loaded");
109
+ }, []);
110
+ const handleImageError = useCallback(() => {
111
+ setLoadingState("error");
112
+ }, []);
113
+ const initials = getInitials(name);
114
+ const isInteractive = Boolean(onPress);
115
+ const computedAriaLabel = ariaLabel || (isInteractive && status ? `${alt}, ${status}` : void 0);
116
+ const groupBrightness = _groupIndex !== void 0 ? 1 - _groupIndex * 0.05 : void 0;
117
+ const visualContent = /* @__PURE__ */ jsxs(
118
+ "div",
119
+ {
120
+ "data-testid": "avatar-visual",
121
+ className: cn(avatarVisualVariants({ size, shape, status })),
122
+ style: groupBrightness !== void 0 ? { filter: `brightness(${groupBrightness})` } : void 0,
123
+ children: [
124
+ loadingState === "loading" && /* @__PURE__ */ jsx(
125
+ "div",
126
+ {
127
+ "data-testid": "avatar-skeleton",
128
+ className: cn(
129
+ "absolute inset-0 animate-pulse bg-[var(--accent-background)]",
130
+ shape === "circle" ? "rounded-full" : "rounded-lg"
131
+ ),
132
+ "aria-hidden": "true"
133
+ }
134
+ ),
135
+ src && loadingState !== "error" && // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- onLoad/onError are lifecycle events, not interactions
136
+ /* @__PURE__ */ jsx(
137
+ "img",
138
+ {
139
+ src,
140
+ alt: isInteractive ? "" : alt,
141
+ onLoad: handleImageLoad,
142
+ onError: handleImageError,
143
+ className: cn(
144
+ "h-full w-full object-cover",
145
+ loadingState === "loading" && "invisible"
146
+ )
147
+ }
148
+ ),
149
+ loadingState === "error" && initials && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: initials })
150
+ ]
151
+ }
152
+ );
153
+ if (isInteractive) {
154
+ return /* @__PURE__ */ jsx(
155
+ Button,
156
+ {
157
+ ref,
158
+ id,
159
+ "data-testid": dataTestId || "avatar-outer",
160
+ "aria-label": computedAriaLabel || alt,
161
+ "aria-labelledby": ariaLabelledBy,
162
+ "aria-describedby": ariaDescribedBy,
163
+ onPress,
164
+ className: cn(
165
+ avatarOuterVariants({ size, interactive: true }),
166
+ className
167
+ ),
168
+ children: visualContent
169
+ }
170
+ );
171
+ }
172
+ return /* @__PURE__ */ jsx(
173
+ "div",
174
+ {
175
+ ref,
176
+ id,
177
+ "data-testid": dataTestId || "avatar-outer",
178
+ "aria-label": ariaLabel,
179
+ "aria-labelledby": ariaLabelledBy,
180
+ "aria-describedby": ariaDescribedBy,
181
+ className: cn(
182
+ avatarOuterVariants({ size, interactive: false }),
183
+ className
184
+ ),
185
+ children: visualContent
186
+ }
187
+ );
188
+ }
189
+ )
190
+ );
191
+ Avatar.displayName = "Avatar";
192
+ var OVERLAP_CLASS_BY_SIZE = {
193
+ sm: "-ml-2",
194
+ default: "-ml-3",
195
+ lg: "-ml-4"
196
+ };
197
+ var avatarOverflowVariants = cva(
198
+ [
199
+ "relative inline-flex items-center justify-center",
200
+ "bg-[var(--secondary)]",
201
+ "text-[var(--secondary-foreground)]",
202
+ "font-semibold",
203
+ "select-none",
204
+ "border-2 border-[var(--page-background)]"
205
+ ],
206
+ {
207
+ variants: {
208
+ size: {
209
+ sm: "h-8 w-8 text-xs",
210
+ default: "h-11 w-11 text-sm",
211
+ lg: "h-12 w-12 text-base"
212
+ },
213
+ shape: {
214
+ circle: "rounded-full",
215
+ rounded: "rounded-lg"
216
+ }
217
+ },
218
+ defaultVariants: {
219
+ size: "default",
220
+ shape: "circle"
221
+ }
222
+ }
223
+ );
224
+ var avatarGroupVariants = cva("inline-flex items-center", {
225
+ variants: {
226
+ interactive: {
227
+ true: [
228
+ "cursor-pointer",
229
+ "focus-visible:outline-none",
230
+ "focus-visible:ring-2",
231
+ "focus-visible:ring-[var(--ring)]",
232
+ "focus-visible:ring-offset-2",
233
+ "focus-visible:ring-offset-[var(--page-background)]"
234
+ ],
235
+ false: ""
236
+ }
237
+ },
238
+ defaultVariants: {
239
+ interactive: false
240
+ }
241
+ });
242
+ var AvatarGroup = memo(
243
+ forwardRef(
244
+ ({
245
+ max = 3,
246
+ shape = "circle",
247
+ size = "default",
248
+ onPress,
249
+ className,
250
+ children,
251
+ id,
252
+ "data-testid": dataTestId,
253
+ "aria-label": ariaLabel,
254
+ "aria-labelledby": ariaLabelledBy,
255
+ "aria-describedby": ariaDescribedBy
256
+ }, ref) => {
257
+ const childArray = Children.toArray(children);
258
+ const totalCount = childArray.length;
259
+ const visibleCount = Math.min(totalCount, max);
260
+ const overflowCount = totalCount - visibleCount;
261
+ const isGroupInteractive = Boolean(onPress);
262
+ const overlapClass = OVERLAP_CLASS_BY_SIZE[size];
263
+ if (process.env.NODE_ENV !== "production" && isGroupInteractive) {
264
+ Children.forEach(children, (child) => {
265
+ if (isValidElement(child) && child.props.onPress) {
266
+ console.warn(
267
+ "[AvatarGroup] onPress on individual avatars is ignored when AvatarGroup has onPress. Actions are mutually exclusive - use group onPress OR individual onPress, not both."
268
+ );
269
+ }
270
+ });
271
+ }
272
+ const visibleAvatars = childArray.slice(0, visibleCount).map((child, index) => {
273
+ if (!isValidElement(child)) return null;
274
+ const childProps = child.props;
275
+ const zIndex = visibleCount - index;
276
+ const individualOnPress = isGroupInteractive ? void 0 : childProps.onPress;
277
+ return /* @__PURE__ */ jsx(
278
+ "div",
279
+ {
280
+ "data-testid": "avatar-group-item",
281
+ className: cn(
282
+ "relative",
283
+ // 2px border for visual separation (Clarification 1 & 7)
284
+ "border-2 border-[var(--page-background)]",
285
+ shape === "circle" ? "rounded-full" : "rounded-lg",
286
+ // Overlap negative margin (except first)
287
+ index > 0 && overlapClass,
288
+ // Hover lift animation when group is NOT actionable
289
+ // Individual avatars get lift effect regardless of their own onPress
290
+ !isGroupInteractive && [
291
+ "motion-safe:transition-transform",
292
+ "motion-safe:duration-150",
293
+ "motion-safe:ease-out",
294
+ "motion-safe:hover:scale-[1.15]",
295
+ "motion-safe:hover:z-10"
296
+ ]
297
+ ),
298
+ style: { zIndex },
299
+ children: cloneElement(child, {
300
+ size,
301
+ shape,
302
+ // Individual onPress is ignored if group has onPress
303
+ onPress: individualOnPress,
304
+ // Pass group index for progressive darkening
305
+ _groupIndex: index,
306
+ // Remove outer wrapper styling since we handle it
307
+ className: cn(
308
+ childProps.className,
309
+ // Remove min dimensions since group item handles touch target
310
+ "!min-h-0 !min-w-0"
311
+ )
312
+ })
313
+ },
314
+ index
315
+ );
316
+ });
317
+ const overflowIndicator = overflowCount > 0 ? /* @__PURE__ */ jsxs(
318
+ "div",
319
+ {
320
+ "data-testid": "avatar-overflow",
321
+ className: cn(
322
+ avatarOverflowVariants({ size, shape }),
323
+ overlapClass
324
+ ),
325
+ style: { zIndex: 0 },
326
+ "aria-hidden": "true",
327
+ children: [
328
+ "+",
329
+ overflowCount
330
+ ]
331
+ }
332
+ ) : null;
333
+ const computedAriaLabel = ariaLabel || `${totalCount} ${totalCount === 1 ? "member" : "members"}`;
334
+ const groupContent = /* @__PURE__ */ jsxs(Fragment, { children: [
335
+ visibleAvatars,
336
+ overflowIndicator
337
+ ] });
338
+ if (isGroupInteractive) {
339
+ return /* @__PURE__ */ jsx(
340
+ Button,
341
+ {
342
+ ref,
343
+ id,
344
+ "data-testid": dataTestId,
345
+ "aria-label": computedAriaLabel,
346
+ "aria-labelledby": ariaLabelledBy,
347
+ "aria-describedby": ariaDescribedBy,
348
+ onPress,
349
+ className: cn(avatarGroupVariants({ interactive: true }), className),
350
+ children: groupContent
351
+ }
352
+ );
353
+ }
354
+ return /* @__PURE__ */ jsx(
355
+ "div",
356
+ {
357
+ ref,
358
+ id,
359
+ "data-testid": dataTestId,
360
+ role: "group",
361
+ "aria-label": computedAriaLabel,
362
+ "aria-labelledby": ariaLabelledBy,
363
+ "aria-describedby": ariaDescribedBy,
364
+ className: cn(avatarGroupVariants({ interactive: false }), className),
365
+ children: groupContent
366
+ }
367
+ );
368
+ }
369
+ )
370
+ );
371
+ AvatarGroup.displayName = "AvatarGroup";
372
+ var AvatarSizeSchema = z.enum(["sm", "default", "lg"]);
373
+ var AvatarShapeSchema = z.enum(["circle", "rounded"]);
374
+ var AvatarStatusSchema = z.enum(["online", "offline", "busy", "away"]);
375
+ var AVATAR_OVERLAP_BY_SIZE = {
376
+ sm: 8,
377
+ default: 12,
378
+ lg: 16
379
+ };
380
+ var AvatarPropsSchema = BaseComponentPropsSchema.extend({
381
+ /** Image source URL */
382
+ src: z.string().optional(),
383
+ /**
384
+ * Alt text for the avatar image (required for accessibility)
385
+ * When actionable, this is used for the aria-label
386
+ */
387
+ alt: z.string().min(1, "alt is required for accessibility"),
388
+ /**
389
+ * Name used to generate initials fallback
390
+ * - "Jane Doe" → "JD"
391
+ * - "Jane" → "J"
392
+ * - "Jane Marie Doe" → "JD" (first and last)
393
+ */
394
+ name: z.string().optional(),
395
+ /** Visual size variant (touch target always 44x44px min for sm/default) */
396
+ size: AvatarSizeSchema.optional().default("default"),
397
+ /** Shape variant */
398
+ shape: AvatarShapeSchema.optional().default("circle"),
399
+ /** Status ring indicator */
400
+ status: AvatarStatusSchema.optional(),
401
+ /**
402
+ * Click handler for actionable avatar
403
+ * When provided, renders as Button with 3-layer architecture
404
+ * @see plan.md Clarification 2 (mutually exclusive with group onPress)
405
+ */
406
+ onPress: z.function().optional()
407
+ });
408
+ var AvatarGroupPropsSchema = BaseComponentPropsSchema.extend({
409
+ /**
410
+ * Maximum avatars to display before overflow (+X indicator)
411
+ * Default: 3
412
+ */
413
+ max: z.number().int().positive().optional().default(3),
414
+ /**
415
+ * Shape inherited by all child avatars
416
+ * Individual avatar shape props are ignored in groups
417
+ */
418
+ shape: AvatarShapeSchema.optional().default("circle"),
419
+ /**
420
+ * Size inherited by all child avatars
421
+ * Individual avatar size props are ignored in groups
422
+ * Also determines overlap spacing (sm: 8px, default: 12px, lg: 16px)
423
+ */
424
+ size: AvatarSizeSchema.optional().default("default"),
425
+ /**
426
+ * Click handler for the entire group
427
+ * When provided, individual avatar onPress handlers are ignored
428
+ * @see plan.md Clarification 2 (Mutually exclusive)
429
+ */
430
+ onPress: z.function().optional()
431
+ });
432
+
433
+ export { AVATAR_OVERLAP_BY_SIZE, Avatar, AvatarGroup, AvatarGroupPropsSchema, AvatarPropsSchema, AvatarShapeSchema, AvatarSizeSchema, AvatarStatusSchema, avatarOuterVariants, avatarOverflowVariants, avatarVisualVariants };
434
+ //# sourceMappingURL=chunk-AL6P275L.mjs.map
435
+ //# sourceMappingURL=chunk-AL6P275L.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/elements/Avatar/Avatar.tsx","../src/elements/Avatar/AvatarGroup.tsx","../src/elements/Avatar/Avatar.types.ts"],"names":["AriaButton","cva","memo","forwardRef","jsx","jsxs"],"mappings":"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","file":"chunk-AL6P275L.mjs","sourcesContent":["'use client';\n\n/**\n * Avatar Component - 3-Layer Architecture\n * Accessible avatar with React Aria primitives and CVA styling\n *\n * Architecture:\n * - Layer 1: Touch Target (44x44px WCAG AAA compliant)\n * - Layer 2: Visual Avatar (configurable size, shape, status ring)\n * - Layer 3: Content (image, initials, skeleton shimmer)\n *\n * @see plan.md for implementation details\n * @see avatar-prd.md for requirements\n * @see constitution.md Principle IV (Accessibility First)\n */\n\nimport { forwardRef, memo, useState, useCallback, type ReactElement } from 'react';\nimport { Button as AriaButton } from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport type {\n AvatarProps,\n AvatarSize,\n AvatarShape,\n AvatarStatus,\n AvatarLoadingState,\n} from './Avatar.types';\n\n/**\n * Extract initials from a name\n * - \"Jane Doe\" → \"JD\"\n * - \"Jane\" → \"J\"\n * - \"Jane Marie Doe\" → \"JD\" (first and last)\n */\nfunction getInitials(name: string | undefined): string {\n if (!name || !name.trim()) return '';\n\n const parts = name.trim().split(/\\s+/).filter(Boolean);\n if (parts.length === 0) return '';\n\n const firstPart = parts[0];\n if (parts.length === 1) {\n return firstPart ? firstPart.charAt(0).toUpperCase() : '';\n }\n\n // First and last initials (max 2 characters)\n const lastPart = parts[parts.length - 1];\n const first = firstPart ? firstPart.charAt(0).toUpperCase() : '';\n const last = lastPart ? lastPart.charAt(0).toUpperCase() : '';\n return first + last;\n}\n\n/**\n * Layer 1: Transparent outer touch target (44x44px minimum)\n * Handles WCAG 2.2 AAA touch target requirement\n * IMPORTANT: Focus ring stays on Layer 1 for AAA compliance (2.4.13)\n */\nexport const avatarOuterVariants = cva(\n 'relative inline-flex items-center justify-center',\n {\n variants: {\n size: {\n sm: 'min-h-[44px] min-w-[44px]',\n default: 'min-h-[44px] min-w-[44px]',\n lg: 'min-h-[48px] min-w-[48px]',\n },\n interactive: {\n true: [\n 'cursor-pointer',\n 'focus-visible:outline-none',\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-[var(--page-background)]',\n 'motion-safe:transition-transform',\n 'motion-safe:duration-150',\n 'motion-safe:ease-out',\n 'motion-safe:hover:scale-105',\n ],\n false: '',\n },\n },\n defaultVariants: {\n size: 'default',\n interactive: false,\n },\n }\n);\n\n/**\n * Layer 2: Visual avatar appearance\n * Provides the visual appearance with configurable size, shape, and status ring\n */\nexport const avatarVisualVariants = cva(\n [\n 'relative inline-flex items-center justify-center',\n 'overflow-hidden',\n 'bg-[var(--accent-background)]',\n 'text-[var(--accent-foreground)]',\n 'font-medium',\n 'select-none',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 w-8 text-xs',\n default: 'h-11 w-11 text-sm',\n lg: 'h-12 w-12 text-base',\n },\n shape: {\n circle: 'rounded-full',\n rounded: 'rounded-lg',\n },\n status: {\n online: 'ring-[3px] ring-[var(--status-online,#22c55e)]',\n offline: 'ring-[3px] ring-[var(--status-offline,#6b7280)]',\n busy: 'ring-[3px] ring-[var(--status-busy,#ef4444)]',\n away: 'ring-[3px] ring-[var(--status-away,#eab308)]',\n },\n },\n defaultVariants: {\n size: 'default',\n shape: 'circle',\n },\n }\n);\n\n/**\n * Avatar Component - 3-Layer Architecture\n * Displays user avatar with image or initials fallback\n *\n * Layer 1: Touch Target - 44x44px WCAG AAA compliant\n * Layer 2: Visual Avatar - configurable appearance\n * Layer 3: Content - image, initials, or loading skeleton\n */\nconst Avatar = memo(\n forwardRef<HTMLDivElement, AvatarProps>(\n (\n {\n src,\n alt,\n name,\n size = 'default',\n shape = 'circle',\n status,\n onPress,\n className,\n id,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n _groupIndex,\n },\n ref\n ): ReactElement => {\n // Loading state machine: loading → loaded | error\n const [loadingState, setLoadingState] = useState<AvatarLoadingState>(\n src ? 'loading' : 'error'\n );\n\n const handleImageLoad = useCallback(() => {\n setLoadingState('loaded');\n }, []);\n\n const handleImageError = useCallback(() => {\n setLoadingState('error');\n }, []);\n\n const initials = getInitials(name);\n const isInteractive = Boolean(onPress);\n\n // Build aria-label for actionable avatars with status\n const computedAriaLabel =\n ariaLabel ||\n (isInteractive && status ? `${alt}, ${status}` : undefined);\n\n // Calculate brightness for group darkening effect\n // First avatar (index 0) = 100%, each subsequent gets 5% darker\n const groupBrightness =\n _groupIndex !== undefined ? 1 - _groupIndex * 0.05 : undefined;\n\n // Common visual layer content\n const visualContent = (\n <div\n data-testid=\"avatar-visual\"\n className={cn(avatarVisualVariants({ size, shape, status }))}\n style={groupBrightness !== undefined ? { filter: `brightness(${groupBrightness})` } : undefined}\n >\n {/* Layer 3: Content */}\n\n {/* Skeleton shimmer while loading */}\n {loadingState === 'loading' && (\n <div\n data-testid=\"avatar-skeleton\"\n className={cn(\n 'absolute inset-0 animate-pulse bg-[var(--accent-background)]',\n shape === 'circle' ? 'rounded-full' : 'rounded-lg'\n )}\n aria-hidden=\"true\"\n />\n )}\n\n {/* Image (hidden during loading, removed on error) */}\n {src && loadingState !== 'error' && (\n // eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- onLoad/onError are lifecycle events, not interactions\n <img\n src={src}\n alt={isInteractive ? '' : alt}\n onLoad={handleImageLoad}\n onError={handleImageError}\n className={cn(\n 'h-full w-full object-cover',\n loadingState === 'loading' && 'invisible'\n )}\n />\n )}\n\n {/* Initials fallback (shown when no src or on error) */}\n {loadingState === 'error' && initials && (\n <span aria-hidden=\"true\">{initials}</span>\n )}\n </div>\n );\n\n // Render as button if interactive\n if (isInteractive) {\n return (\n <AriaButton\n ref={ref as React.Ref<HTMLButtonElement>}\n id={id}\n data-testid={dataTestId || 'avatar-outer'}\n aria-label={computedAriaLabel || alt}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n onPress={onPress}\n className={cn(\n avatarOuterVariants({ size, interactive: true }),\n className\n )}\n >\n {visualContent}\n </AriaButton>\n );\n }\n\n // Render as non-interactive div\n return (\n <div\n ref={ref}\n id={id}\n data-testid={dataTestId || 'avatar-outer'}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n className={cn(\n avatarOuterVariants({ size, interactive: false }),\n className\n )}\n >\n {visualContent}\n </div>\n );\n }\n )\n);\n\nAvatar.displayName = 'Avatar';\n\nexport { Avatar };\nexport type { AvatarProps, AvatarSize, AvatarShape, AvatarStatus };\n","'use client';\n\n/**\n * AvatarGroup Component\n * Displays multiple avatars with overlap, overflow indicator, and optional actionability\n *\n * Features:\n * - Overlapping display with configurable overlap\n * - Overflow indicator (+X) when exceeding max\n * - 2px border for visual separation\n * - First avatar on top (highest z-index)\n * - Mutually exclusive actions (group OR individual, not both)\n * - Shape/size inheritance to children\n *\n * @see plan.md Clarifications 1, 2, 5, 6, 7\n * @see avatar-prd.md US-5, US-7\n */\n\nimport {\n forwardRef,\n memo,\n Children,\n isValidElement,\n cloneElement,\n type ReactElement,\n} from 'react';\nimport { Button as AriaButton } from 'react-aria-components';\nimport { cva } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\nimport type { AvatarGroupProps, AvatarSize, AvatarShape } from './Avatar.types';\n\n/**\n * Overlap class by size (proportional)\n * sm: 8px (-ml-2), default: 12px (-ml-3), lg: 16px (-ml-4)\n */\nconst OVERLAP_CLASS_BY_SIZE: Record<AvatarSize, string> = {\n sm: '-ml-2',\n default: '-ml-3',\n lg: '-ml-4',\n};\n\n/**\n * Overflow indicator variants (the +X badge)\n */\nconst avatarOverflowVariants = cva(\n [\n 'relative inline-flex items-center justify-center',\n 'bg-[var(--secondary)]',\n 'text-[var(--secondary-foreground)]',\n 'font-semibold',\n 'select-none',\n 'border-2 border-[var(--page-background)]',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 w-8 text-xs',\n default: 'h-11 w-11 text-sm',\n lg: 'h-12 w-12 text-base',\n },\n shape: {\n circle: 'rounded-full',\n rounded: 'rounded-lg',\n },\n },\n defaultVariants: {\n size: 'default',\n shape: 'circle',\n },\n }\n);\n\n/**\n * Group outer variants\n */\nconst avatarGroupVariants = cva('inline-flex items-center', {\n variants: {\n interactive: {\n true: [\n 'cursor-pointer',\n 'focus-visible:outline-none',\n 'focus-visible:ring-2',\n 'focus-visible:ring-[var(--ring)]',\n 'focus-visible:ring-offset-2',\n 'focus-visible:ring-offset-[var(--page-background)]',\n ],\n false: '',\n },\n },\n defaultVariants: {\n interactive: false,\n },\n});\n\n/**\n * AvatarGroup Component\n * Groups multiple Avatar components with overlap and overflow handling\n */\nconst AvatarGroup = memo(\n forwardRef<HTMLDivElement, AvatarGroupProps>(\n (\n {\n max = 3,\n shape = 'circle',\n size = 'default',\n onPress,\n className,\n children,\n id,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n },\n ref\n ): ReactElement => {\n const childArray = Children.toArray(children);\n const totalCount = childArray.length;\n const visibleCount = Math.min(totalCount, max);\n const overflowCount = totalCount - visibleCount;\n\n const isGroupInteractive = Boolean(onPress);\n const overlapClass = OVERLAP_CLASS_BY_SIZE[size];\n\n // Warn about mutually exclusive actions (Clarification 2)\n // Uses !== 'production' to work in both development and test modes\n if (process.env.NODE_ENV !== 'production' && isGroupInteractive) {\n Children.forEach(children, (child) => {\n if (\n isValidElement(child) &&\n (child.props as { onPress?: unknown }).onPress\n ) {\n console.warn(\n '[AvatarGroup] onPress on individual avatars is ignored when AvatarGroup has onPress. ' +\n 'Actions are mutually exclusive - use group onPress OR individual onPress, not both.'\n );\n }\n });\n }\n\n // Build visible avatars with proper styling\n const visibleAvatars = childArray.slice(0, visibleCount).map((child, index) => {\n if (!isValidElement(child)) return null;\n\n // Clone child with inherited props and group styling\n const childProps = child.props as {\n size?: AvatarSize;\n shape?: AvatarShape;\n onPress?: unknown;\n className?: string;\n };\n\n // First avatar has highest z-index (Clarification 5)\n const zIndex = visibleCount - index;\n\n // Determine if individual avatar is interactive\n // If group has onPress, individual onPress is ignored\n const individualOnPress = isGroupInteractive\n ? undefined\n : childProps.onPress;\n\n return (\n <div\n key={index}\n data-testid=\"avatar-group-item\"\n className={cn(\n 'relative',\n // 2px border for visual separation (Clarification 1 & 7)\n 'border-2 border-[var(--page-background)]',\n shape === 'circle' ? 'rounded-full' : 'rounded-lg',\n // Overlap negative margin (except first)\n index > 0 && overlapClass,\n // Hover lift animation when group is NOT actionable\n // Individual avatars get lift effect regardless of their own onPress\n !isGroupInteractive && [\n 'motion-safe:transition-transform',\n 'motion-safe:duration-150',\n 'motion-safe:ease-out',\n 'motion-safe:hover:scale-[1.15]',\n 'motion-safe:hover:z-10',\n ]\n )}\n style={{ zIndex }}\n >\n {cloneElement(child as ReactElement, {\n size,\n shape,\n // Individual onPress is ignored if group has onPress\n onPress: individualOnPress,\n // Pass group index for progressive darkening\n _groupIndex: index,\n // Remove outer wrapper styling since we handle it\n className: cn(\n childProps.className,\n // Remove min dimensions since group item handles touch target\n '!min-h-0 !min-w-0'\n ),\n } as Partial<typeof childProps>)}\n </div>\n );\n });\n\n // Overflow indicator (+X)\n const overflowIndicator =\n overflowCount > 0 ? (\n <div\n data-testid=\"avatar-overflow\"\n className={cn(\n avatarOverflowVariants({ size, shape }),\n overlapClass\n )}\n style={{ zIndex: 0 }}\n aria-hidden=\"true\"\n >\n +{overflowCount}\n </div>\n ) : null;\n\n // Auto-generate aria-label if not provided\n const computedAriaLabel =\n ariaLabel ||\n `${totalCount} ${totalCount === 1 ? 'member' : 'members'}`;\n\n // Group content\n const groupContent = (\n <>\n {visibleAvatars}\n {overflowIndicator}\n </>\n );\n\n // Render as button if group is interactive\n // Button inherently has role=\"button\", aria-label provides group context\n if (isGroupInteractive) {\n return (\n <AriaButton\n ref={ref as React.Ref<HTMLButtonElement>}\n id={id}\n data-testid={dataTestId}\n aria-label={computedAriaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n onPress={onPress}\n className={cn(avatarGroupVariants({ interactive: true }), className)}\n >\n {groupContent}\n </AriaButton>\n );\n }\n\n // Render as non-interactive div with role=\"group\"\n return (\n <div\n ref={ref}\n id={id}\n data-testid={dataTestId}\n role=\"group\"\n aria-label={computedAriaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n className={cn(avatarGroupVariants({ interactive: false }), className)}\n >\n {groupContent}\n </div>\n );\n }\n )\n);\n\nAvatarGroup.displayName = 'AvatarGroup';\n\nexport { AvatarGroup, avatarOverflowVariants };\nexport type { AvatarGroupProps };\n","import { z } from 'zod';\nimport type { PressEvent } from 'react-aria-components';\nimport { BaseComponentPropsSchema } from '../../schemas/BaseComponentProps';\n\n/**\n * Avatar size schema\n *\n * Size mappings (visual | touch target | overlap):\n * - sm: 32px | 44x44px | 8px\n * - default: 44px | 44x44px | 12px\n * - lg: 48px | 48x48px | 16px\n *\n * @see plan.md Clarification 6 (Overlap Scale)\n * @see spec.md FR-009 (WCAG 2.2 AAA - 44x44px touch targets)\n */\nexport const AvatarSizeSchema = z.enum(['sm', 'default', 'lg']);\nexport type AvatarSize = z.infer<typeof AvatarSizeSchema>;\n\n/**\n * Avatar shape schema\n * - circle: Fully rounded (rounded-full)\n * - rounded: Rounded corners (rounded-lg)\n */\nexport const AvatarShapeSchema = z.enum(['circle', 'rounded']);\nexport type AvatarShape = z.infer<typeof AvatarShapeSchema>;\n\n/**\n * Avatar status schema for ring indicators\n *\n * Status ring colors:\n * - online: green (#22c55e)\n * - offline: gray (#6b7280)\n * - busy: red (#ef4444)\n * - away: yellow (#eab308)\n */\nexport const AvatarStatusSchema = z.enum(['online', 'offline', 'busy', 'away']);\nexport type AvatarStatus = z.infer<typeof AvatarStatusSchema>;\n\n/**\n * Overlap values by size (in pixels)\n * @see plan.md Clarification 6 (Overlap Scale)\n */\nexport const AVATAR_OVERLAP_BY_SIZE: Record<AvatarSize, number> = {\n sm: 8,\n default: 12,\n lg: 16,\n};\n\n/**\n * Avatar props schema extending BaseComponentProps\n *\n * @see React Aria Button: https://react-aria.adobe.com/Button\n * @see ShadCN Avatar: https://ui.shadcn.com/docs/components/avatar\n * @see plan.md Phase 1 (Type System)\n * @see constitution.md Principle IV (Accessibility First)\n */\nexport const AvatarPropsSchema = BaseComponentPropsSchema.extend({\n /** Image source URL */\n src: z.string().optional(),\n\n /**\n * Alt text for the avatar image (required for accessibility)\n * When actionable, this is used for the aria-label\n */\n alt: z.string().min(1, 'alt is required for accessibility'),\n\n /**\n * Name used to generate initials fallback\n * - \"Jane Doe\" → \"JD\"\n * - \"Jane\" → \"J\"\n * - \"Jane Marie Doe\" → \"JD\" (first and last)\n */\n name: z.string().optional(),\n\n /** Visual size variant (touch target always 44x44px min for sm/default) */\n size: AvatarSizeSchema.optional().default('default'),\n\n /** Shape variant */\n shape: AvatarShapeSchema.optional().default('circle'),\n\n /** Status ring indicator */\n status: AvatarStatusSchema.optional(),\n\n /**\n * Click handler for actionable avatar\n * When provided, renders as Button with 3-layer architecture\n * @see plan.md Clarification 2 (mutually exclusive with group onPress)\n */\n onPress: z.function().optional(),\n});\n\nexport type AvatarProps = Omit<z.infer<typeof AvatarPropsSchema>, 'onPress'> & {\n /** Click handler for actionable avatar */\n onPress?: (e: PressEvent) => void;\n /**\n * Internal: Position index within AvatarGroup (0-indexed)\n * Used to progressively darken backgrounds in groups\n * @internal Set by AvatarGroup, do not use directly\n */\n _groupIndex?: number;\n};\n\n/**\n * Avatar group props schema extending BaseComponentProps\n *\n * @see plan.md Clarification 1 (Group Border)\n * @see plan.md Clarification 5 (Stack Order - first on top)\n * @see plan.md Clarification 7 (Border Scope - groups only)\n */\nexport const AvatarGroupPropsSchema = BaseComponentPropsSchema.extend({\n /**\n * Maximum avatars to display before overflow (+X indicator)\n * Default: 3\n */\n max: z.number().int().positive().optional().default(3),\n\n /**\n * Shape inherited by all child avatars\n * Individual avatar shape props are ignored in groups\n */\n shape: AvatarShapeSchema.optional().default('circle'),\n\n /**\n * Size inherited by all child avatars\n * Individual avatar size props are ignored in groups\n * Also determines overlap spacing (sm: 8px, default: 12px, lg: 16px)\n */\n size: AvatarSizeSchema.optional().default('default'),\n\n /**\n * Click handler for the entire group\n * When provided, individual avatar onPress handlers are ignored\n * @see plan.md Clarification 2 (Mutually exclusive)\n */\n onPress: z.function().optional(),\n});\n\nexport type AvatarGroupProps = Omit<z.infer<typeof AvatarGroupPropsSchema>, 'onPress'> & {\n /** Click handler for the entire group */\n onPress?: (e: PressEvent) => void;\n};\n\n/**\n * Internal loading state for avatar images\n * @see plan.md Clarification 4 (Loading State)\n */\nexport type AvatarLoadingState = 'loading' | 'loaded' | 'error';\n"]}
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ var zod = require('zod');
4
+
5
+ var RegistryItemSchema = zod.z.object({
6
+ $schema: zod.z.literal("https://ui.shadcn.com/schema/registry-item.json"),
7
+ name: zod.z.string().regex(/^[a-z-]+$/, "Name must be lowercase kebab-case"),
8
+ type: zod.z.literal("registry:ui"),
9
+ title: zod.z.string().min(1),
10
+ description: zod.z.string().min(10, "Description must be at least 10 characters"),
11
+ dependencies: zod.z.array(zod.z.string()).default([]),
12
+ files: zod.z.array(
13
+ zod.z.object({
14
+ path: zod.z.string().regex(/\.tsx?$/, "Must be TypeScript file"),
15
+ type: zod.z.literal("registry:component")
16
+ })
17
+ ).min(1, "Must include at least one file")
18
+ });
19
+ var MasterRegistrySchema = zod.z.object({
20
+ $schema: zod.z.literal("https://ui.shadcn.com/schema/registry.json"),
21
+ name: zod.z.string(),
22
+ homepage: zod.z.string().url().optional(),
23
+ items: zod.z.array(RegistryItemSchema)
24
+ });
25
+ function validateRegistry(registry) {
26
+ return RegistryItemSchema.safeParse(registry);
27
+ }
28
+ function validateMasterRegistry(registry) {
29
+ return MasterRegistrySchema.safeParse(registry);
30
+ }
31
+
32
+ exports.MasterRegistrySchema = MasterRegistrySchema;
33
+ exports.RegistryItemSchema = RegistryItemSchema;
34
+ exports.validateMasterRegistry = validateMasterRegistry;
35
+ exports.validateRegistry = validateRegistry;
36
+ //# sourceMappingURL=chunk-AZ3RJYTB.js.map
37
+ //# sourceMappingURL=chunk-AZ3RJYTB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/schemas/RegistryItem.ts"],"names":["z"],"mappings":";;;;AASO,IAAM,kBAAA,GAAqBA,MAAE,MAAA,CAAO;AAAA,EACzC,OAAA,EAASA,KAAA,CAAE,OAAA,CAAQ,iDAAiD,CAAA;AAAA,EACpE,MAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,KAAA,CAAM,aAAa,mCAAmC,CAAA;AAAA,EACvE,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,aAAa,CAAA;AAAA,EAC7B,KAAA,EAAOA,KAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA;AAAA,EACvB,aAAaA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,IAAI,4CAA4C,CAAA;AAAA,EAC5E,YAAA,EAAcA,MAAE,KAAA,CAAMA,KAAA,CAAE,QAAQ,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA;AAAA,EAC5C,OAAOA,KAAA,CACJ,KAAA;AAAA,IACCA,MAAE,MAAA,CAAO;AAAA,MACP,MAAMA,KAAA,CAAE,MAAA,EAAO,CAAE,KAAA,CAAM,WAAW,yBAAyB,CAAA;AAAA,MAC3D,IAAA,EAAMA,KAAA,CAAE,OAAA,CAAQ,oBAAoB;AAAA,KACrC;AAAA,GACH,CACC,GAAA,CAAI,CAAA,EAAG,gCAAgC;AAC5C,CAAC;AAOM,IAAM,oBAAA,GAAuBA,MAAE,MAAA,CAAO;AAAA,EAC3C,OAAA,EAASA,KAAA,CAAE,OAAA,CAAQ,4CAA4C,CAAA;AAAA,EAC/D,IAAA,EAAMA,MAAE,MAAA,EAAO;AAAA,EACf,UAAUA,KAAA,CAAE,MAAA,EAAO,CAAE,GAAA,GAAM,QAAA,EAAS;AAAA,EACpC,KAAA,EAAOA,KAAA,CAAE,KAAA,CAAM,kBAAkB;AACnC,CAAC;AASM,SAAS,iBAAiB,QAAA,EAAqD;AACpF,EAAA,OAAO,kBAAA,CAAmB,UAAU,QAAQ,CAAA;AAC9C;AAOO,SAAS,uBAAuB,QAAA,EAAuD;AAC5F,EAAA,OAAO,oBAAA,CAAqB,UAAU,QAAQ,CAAA;AAChD","file":"chunk-AZ3RJYTB.js","sourcesContent":["import { z } from 'zod';\nimport type { ZodSafeParseResult } from 'zod';\n\n/**\n * Zod schema for ShadCN-compatible registry JSON validation\n *\n * @see spec.md FR-004 to FR-008 (Registry System Requirements)\n * @see https://ui.shadcn.com/schema/registry-item.json\n */\nexport const RegistryItemSchema = z.object({\n $schema: z.literal('https://ui.shadcn.com/schema/registry-item.json'),\n name: z.string().regex(/^[a-z-]+$/, 'Name must be lowercase kebab-case'),\n type: z.literal('registry:ui'),\n title: z.string().min(1),\n description: z.string().min(10, 'Description must be at least 10 characters'),\n dependencies: z.array(z.string()).default([]),\n files: z\n .array(\n z.object({\n path: z.string().regex(/\\.tsx?$/, 'Must be TypeScript file'),\n type: z.literal('registry:component'),\n })\n )\n .min(1, 'Must include at least one file'),\n});\n\nexport type RegistryItem = z.infer<typeof RegistryItemSchema>;\n\n/**\n * Master registry schema for the complete component catalog\n */\nexport const MasterRegistrySchema = z.object({\n $schema: z.literal('https://ui.shadcn.com/schema/registry.json'),\n name: z.string(),\n homepage: z.string().url().optional(),\n items: z.array(RegistryItemSchema),\n});\n\nexport type MasterRegistry = z.infer<typeof MasterRegistrySchema>;\n\n/**\n * Validate a registry file against the RegistryItem schema\n * @param registry - The registry object to validate\n * @returns Validation result with parsed data or error\n */\nexport function validateRegistry(registry: unknown): ZodSafeParseResult<RegistryItem> {\n return RegistryItemSchema.safeParse(registry);\n}\n\n/**\n * Validate master registry file against MasterRegistry schema\n * @param registry - The master registry object to validate\n * @returns Validation result with parsed data or error\n */\nexport function validateMasterRegistry(registry: unknown): ZodSafeParseResult<MasterRegistry> {\n return MasterRegistrySchema.safeParse(registry);\n}\n"]}
@@ -0,0 +1,32 @@
1
+ 'use strict';
2
+
3
+ // src/styles/interaction-states.ts
4
+ var FOCUS_STYLES = "data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2";
5
+ var PRESSED_STYLES = "data-[pressed]:scale-[0.97]";
6
+ var PRESSED_STYLES_BASE = "data-[pressed]:transition-transform data-[pressed]:duration-100";
7
+ var HOVER_STYLES = "data-[hovered]:shadow-md";
8
+ var HOVER_STYLES_BASE = "data-[hovered]:transition-shadow data-[hovered]:duration-200";
9
+ var HIGH_CONTRAST_FOCUS = "hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground";
10
+ var HIGH_CONTRAST_HOVER = "hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground";
11
+ var HIGH_CONTRAST_PRESSED = "hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground";
12
+ var HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;
13
+ var DISABLED_STYLES = "disabled:pointer-events-none disabled:opacity-50";
14
+ var DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;
15
+ var SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;
16
+ var NON_INTERACTIVE = "cursor-default select-none";
17
+
18
+ exports.DEFAULT_INTERACTIONS = DEFAULT_INTERACTIONS;
19
+ exports.DISABLED_STYLES = DISABLED_STYLES;
20
+ exports.FOCUS_STYLES = FOCUS_STYLES;
21
+ exports.HIGH_CONTRAST_FOCUS = HIGH_CONTRAST_FOCUS;
22
+ exports.HIGH_CONTRAST_HOVER = HIGH_CONTRAST_HOVER;
23
+ exports.HIGH_CONTRAST_INTERACTIONS = HIGH_CONTRAST_INTERACTIONS;
24
+ exports.HIGH_CONTRAST_PRESSED = HIGH_CONTRAST_PRESSED;
25
+ exports.HOVER_STYLES = HOVER_STYLES;
26
+ exports.HOVER_STYLES_BASE = HOVER_STYLES_BASE;
27
+ exports.NON_INTERACTIVE = NON_INTERACTIVE;
28
+ exports.PRESSED_STYLES = PRESSED_STYLES;
29
+ exports.PRESSED_STYLES_BASE = PRESSED_STYLES_BASE;
30
+ exports.SUBTLE_INTERACTIONS = SUBTLE_INTERACTIONS;
31
+ //# sourceMappingURL=chunk-B5Q4UPL6.js.map
32
+ //# sourceMappingURL=chunk-B5Q4UPL6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/styles/interaction-states.ts"],"names":[],"mappings":";;;AAoBO,IAAM,YAAA,GAAe;AAUrB,IAAM,cAAA,GAAiB;AAKvB,IAAM,mBAAA,GAAsB;AAU5B,IAAM,YAAA,GAAe;AAKrB,IAAM,iBAAA,GAAoB;AAQ1B,IAAM,mBAAA,GAAsB;AAM5B,IAAM,mBAAA,GAAsB;AAM5B,IAAM,qBAAA,GAAwB;AAM9B,IAAM,6BAA6B,CAAA,EAAG,mBAAmB,CAAA,CAAA,EAAI,mBAAmB,IAAI,qBAAqB,CAAA;AAMzG,IAAM,eAAA,GAAkB;AAWxB,IAAM,oBAAA,GAAuB,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,cAAc,CAAA,CAAA,EAAI,YAAY,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,EAAI,mBAAmB,CAAA,CAAA,EAAI,qBAAqB,CAAA;AAQrJ,IAAM,mBAAA,GAAsB,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,mBAAmB,CAAA;AAMlE,IAAM,eAAA,GAAkB","file":"chunk-B5Q4UPL6.js","sourcesContent":["/**\n * Global Interaction State Styles\n *\n * Consistent interaction patterns across all Themis components.\n * These styles ensure WCAG 2.2 AAA compliance and predictable UX.\n *\n * @see spec.md FR-010 (Visible focus ring for keyboard navigation)\n * @see spec.md FR-031 (Pressed state feedback)\n * @see spec.md FR-012 (High contrast mode support)\n * @see constitution.md Principle IV (Accessibility First)\n */\n\n/**\n * Focus state styles (FR-010)\n * Visible focus ring for keyboard navigation - WCAG 2.2 Level AAA\n *\n * Components can override by extending these styles:\n * @example\n * cn(FOCUS_STYLES, \"ring-4\") // Increases ring width to 4px\n */\nexport const FOCUS_STYLES = \"data-[focus-visible]:ring-2 data-[focus-visible]:ring-[var(--themis-ring)] data-[focus-visible]:ring-offset-2\";\n\n/**\n * Pressed/Active state styles (FR-031)\n * Visual feedback for press interactions\n *\n * Components can override the scale amount:\n * @example\n * cn(PRESSED_STYLES_BASE, \"data-[pressed]:scale-[0.95]\") // More pronounced scale\n */\nexport const PRESSED_STYLES = \"data-[pressed]:scale-[0.97]\";\n\n/**\n * Base pressed styles without scale (for components that need different feedback)\n */\nexport const PRESSED_STYLES_BASE = \"data-[pressed]:transition-transform data-[pressed]:duration-100\";\n\n/**\n * Hover state styles\n * Elevation change on hover for better affordance\n *\n * Components can override shadow depth:\n * @example\n * cn(HOVER_STYLES_BASE, \"data-[hovered]:shadow-lg\") // Larger shadow\n */\nexport const HOVER_STYLES = \"data-[hovered]:shadow-md\";\n\n/**\n * Base hover styles without shadow (for components that use different hover effects)\n */\nexport const HOVER_STYLES_BASE = \"data-[hovered]:transition-shadow data-[hovered]:duration-200\";\n\n/**\n * High contrast mode focus (FR-012)\n * Enhanced outlines for users requiring high contrast\n *\n * Uses 'hc:' prefix for prefers-contrast: more media query\n */\nexport const HIGH_CONTRAST_FOCUS = \"hc:data-[focus-visible]:outline hc:data-[focus-visible]:outline-4 hc:data-[focus-visible]:outline-offset-2 hc:data-[focus-visible]:outline-foreground\";\n\n/**\n * High contrast mode hover (FR-012)\n * Enhanced outlines for hover in high contrast mode\n */\nexport const HIGH_CONTRAST_HOVER = \"hc:data-[hovered]:outline hc:data-[hovered]:outline-2 hc:data-[hovered]:outline-foreground\";\n\n/**\n * High contrast mode pressed state\n * Enhanced outlines for pressed state in high contrast mode\n */\nexport const HIGH_CONTRAST_PRESSED = \"hc:data-[pressed]:outline hc:data-[pressed]:outline-2 hc:data-[pressed]:outline-offset-1 hc:data-[pressed]:outline-foreground\";\n\n/**\n * Combined high contrast styles\n * Use this for components that need all high contrast interaction states\n */\nexport const HIGH_CONTRAST_INTERACTIONS = `${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Disabled state styles\n * Consistent disabled appearance across all components\n */\nexport const DISABLED_STYLES = \"disabled:pointer-events-none disabled:opacity-50\";\n\n/**\n * Default interaction bundle\n * Most common combination for interactive components\n *\n * Includes: focus ring, pressed scale, hover shadow, high contrast enhancements\n *\n * @example\n * <button className={cn(DEFAULT_INTERACTIONS, \"bg-primary\")}>Click</button>\n */\nexport const DEFAULT_INTERACTIONS = `${FOCUS_STYLES} ${PRESSED_STYLES} ${HOVER_STYLES} ${HIGH_CONTRAST_FOCUS} ${HIGH_CONTRAST_HOVER} ${HIGH_CONTRAST_PRESSED}`;\n\n/**\n * Subtle interaction bundle\n * For components that need less pronounced feedback\n *\n * Includes: focus ring and high contrast, but no hover shadow or pressed scale\n */\nexport const SUBTLE_INTERACTIONS = `${FOCUS_STYLES} ${HIGH_CONTRAST_FOCUS}`;\n\n/**\n * Non-interactive element styles\n * For elements that should indicate they are not interactive\n */\nexport const NON_INTERACTIVE = \"cursor-default select-none\";\n"]}