@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,1514 @@
1
+ /**
2
+ * CheckboxGroup Component Stories
3
+ * Storybook stories for CheckboxGroup component demonstrating all variants, sizes, and states
4
+ *
5
+ * @see React Aria CheckboxGroup: https://react-spectrum.adobe.com/react-aria/CheckboxGroup.html
6
+ * @see checkboxgroup-prd.md (Product Requirements)
7
+ * @see plan.md (12 Key Clarifications)
8
+ */
9
+
10
+ import { useState } from 'react';
11
+ import type { Meta, StoryObj } from '@storybook/nextjs';
12
+ import { CheckboxGroup, Checkbox, CheckmarkIcon, TimesIcon } from './CheckboxGroup';
13
+
14
+ const meta = {
15
+ title: 'Elements/CheckboxGroup',
16
+ component: CheckboxGroup,
17
+ parameters: {
18
+ layout: 'centered',
19
+ docs: {
20
+ description: {
21
+ component:
22
+ 'Accessible multi-selection checkbox group with React Aria primitives, CVA variant styling, and WCAG 2.2 AAA compliance (7:1 contrast ratio, 44px+ touch targets). Features bordered container design with square indicators and checkmark SVGs.',
23
+ },
24
+ },
25
+ },
26
+ tags: ['autodocs'],
27
+ argTypes: {
28
+ variant: {
29
+ control: 'select',
30
+ options: ['default', 'destructive'],
31
+ description: 'CheckboxGroup style variant',
32
+ table: {
33
+ defaultValue: { summary: 'default' },
34
+ },
35
+ },
36
+ size: {
37
+ control: 'select',
38
+ options: ['sm', 'default', 'lg'],
39
+ description: 'CheckboxGroup size (affects all checkbox items)',
40
+ table: {
41
+ defaultValue: { summary: 'default' },
42
+ },
43
+ },
44
+ orientation: {
45
+ control: 'select',
46
+ options: ['vertical', 'horizontal'],
47
+ description: 'Layout orientation of checkbox items',
48
+ table: {
49
+ defaultValue: { summary: 'vertical' },
50
+ },
51
+ },
52
+ isDisabled: {
53
+ control: 'boolean',
54
+ description: 'Disable all checkbox items',
55
+ table: {
56
+ defaultValue: { summary: 'false' },
57
+ },
58
+ },
59
+ isReadOnly: {
60
+ control: 'boolean',
61
+ description: 'Make checkbox group read-only (can focus but not change)',
62
+ table: {
63
+ defaultValue: { summary: 'false' },
64
+ },
65
+ },
66
+ isRequired: {
67
+ control: 'boolean',
68
+ description: 'Mark as required field',
69
+ table: {
70
+ defaultValue: { summary: 'false' },
71
+ },
72
+ },
73
+ isInvalid: {
74
+ control: 'boolean',
75
+ description: 'Show error state',
76
+ table: {
77
+ defaultValue: { summary: 'false' },
78
+ },
79
+ },
80
+ label: {
81
+ control: 'text',
82
+ description: 'Group label text',
83
+ },
84
+ description: {
85
+ control: 'text',
86
+ description: 'Group description text',
87
+ },
88
+ errorMessage: {
89
+ control: 'text',
90
+ description: 'Error message (shown when isInvalid is true)',
91
+ },
92
+ },
93
+ } satisfies Meta<typeof CheckboxGroup>;
94
+
95
+ export default meta;
96
+ type Story = StoryObj<typeof meta>;
97
+
98
+ // ============================================================================
99
+ // Basic Stories
100
+ // ============================================================================
101
+
102
+ export const Default: Story = {
103
+ render: (args) => (
104
+ <CheckboxGroup {...args}>
105
+ <Checkbox value="option1">
106
+ <Checkbox.Label>Option 1</Checkbox.Label>
107
+ </Checkbox>
108
+ <Checkbox value="option2">
109
+ <Checkbox.Label>Option 2</Checkbox.Label>
110
+ </Checkbox>
111
+ <Checkbox value="option3">
112
+ <Checkbox.Label>Option 3</Checkbox.Label>
113
+ </Checkbox>
114
+ </CheckboxGroup>
115
+ ),
116
+ args: {
117
+ 'aria-label': 'Select options',
118
+ },
119
+ };
120
+
121
+ export const WithLabel: Story = {
122
+ render: (args) => (
123
+ <CheckboxGroup {...args}>
124
+ <Checkbox value="email">
125
+ <Checkbox.Label>Email notifications</Checkbox.Label>
126
+ </Checkbox>
127
+ <Checkbox value="sms">
128
+ <Checkbox.Label>SMS notifications</Checkbox.Label>
129
+ </Checkbox>
130
+ <Checkbox value="push">
131
+ <Checkbox.Label>Push notifications</Checkbox.Label>
132
+ </Checkbox>
133
+ </CheckboxGroup>
134
+ ),
135
+ args: {
136
+ label: 'Notification Preferences',
137
+ },
138
+ };
139
+
140
+ export const WithDescription: Story = {
141
+ render: (args) => (
142
+ <CheckboxGroup {...args}>
143
+ <Checkbox value="analytics">
144
+ <Checkbox.Label>Analytics cookies</Checkbox.Label>
145
+ <Checkbox.Description>Help us improve our website</Checkbox.Description>
146
+ </Checkbox>
147
+ <Checkbox value="marketing">
148
+ <Checkbox.Label>Marketing cookies</Checkbox.Label>
149
+ <Checkbox.Description>Personalized advertisements</Checkbox.Description>
150
+ </Checkbox>
151
+ <Checkbox value="functional">
152
+ <Checkbox.Label>Functional cookies</Checkbox.Label>
153
+ <Checkbox.Description>Remember your preferences</Checkbox.Description>
154
+ </Checkbox>
155
+ </CheckboxGroup>
156
+ ),
157
+ args: {
158
+ label: 'Cookie Preferences',
159
+ description: 'Select which cookies you want to accept',
160
+ },
161
+ };
162
+
163
+ // ============================================================================
164
+ // Variant Stories
165
+ // ============================================================================
166
+
167
+ export const Destructive: Story = {
168
+ render: (args) => (
169
+ <CheckboxGroup {...args}>
170
+ <Checkbox value="messages">
171
+ <Checkbox.Label>Delete all messages</Checkbox.Label>
172
+ <Checkbox.Description>All conversations will be removed</Checkbox.Description>
173
+ </Checkbox>
174
+ <Checkbox value="files">
175
+ <Checkbox.Label>Delete all files</Checkbox.Label>
176
+ <Checkbox.Description>All uploads will be permanently deleted</Checkbox.Description>
177
+ </Checkbox>
178
+ <Checkbox value="settings">
179
+ <Checkbox.Label>Reset all settings</Checkbox.Label>
180
+ <Checkbox.Description>Return to default configuration</Checkbox.Description>
181
+ </Checkbox>
182
+ </CheckboxGroup>
183
+ ),
184
+ args: {
185
+ variant: 'destructive',
186
+ label: 'Delete Options',
187
+ description: 'Select items to delete (this cannot be undone)',
188
+ },
189
+ };
190
+
191
+ export const AllVariants: Story = {
192
+ render: () => (
193
+ <div className="flex flex-col gap-8">
194
+ <CheckboxGroup variant="default" label="Default Variant" defaultValue={['opt1']}>
195
+ <Checkbox value="opt1">
196
+ <Checkbox.Label>Option 1</Checkbox.Label>
197
+ </Checkbox>
198
+ <Checkbox value="opt2">
199
+ <Checkbox.Label>Option 2</Checkbox.Label>
200
+ </Checkbox>
201
+ </CheckboxGroup>
202
+ <CheckboxGroup variant="destructive" label="Destructive Variant" defaultValue={['opt1']}>
203
+ <Checkbox value="opt1">
204
+ <Checkbox.Label>Option 1</Checkbox.Label>
205
+ </Checkbox>
206
+ <Checkbox value="opt2">
207
+ <Checkbox.Label>Option 2</Checkbox.Label>
208
+ </Checkbox>
209
+ </CheckboxGroup>
210
+ </div>
211
+ ),
212
+ parameters: {
213
+ docs: {
214
+ description: {
215
+ story: 'All 2 CheckboxGroup variants in one view (no outline variant per clarification).',
216
+ },
217
+ },
218
+ },
219
+ };
220
+
221
+ // ============================================================================
222
+ // Size Stories
223
+ // ============================================================================
224
+
225
+ export const Small: Story = {
226
+ render: (args) => (
227
+ <CheckboxGroup {...args}>
228
+ <Checkbox value="a">
229
+ <Checkbox.Label>A</Checkbox.Label>
230
+ </Checkbox>
231
+ <Checkbox value="b">
232
+ <Checkbox.Label>B</Checkbox.Label>
233
+ </Checkbox>
234
+ <Checkbox value="c">
235
+ <Checkbox.Label>C</Checkbox.Label>
236
+ </Checkbox>
237
+ </CheckboxGroup>
238
+ ),
239
+ args: {
240
+ size: 'sm',
241
+ label: 'Small size (44px min-height)',
242
+ },
243
+ };
244
+
245
+ export const Large: Story = {
246
+ render: (args) => (
247
+ <CheckboxGroup {...args}>
248
+ <Checkbox value="terms">
249
+ <Checkbox.Label>I agree to the Terms of Service</Checkbox.Label>
250
+ <Checkbox.Description>By checking this, you accept our terms</Checkbox.Description>
251
+ </Checkbox>
252
+ <Checkbox value="privacy">
253
+ <Checkbox.Label>I agree to the Privacy Policy</Checkbox.Label>
254
+ <Checkbox.Description>By checking this, you accept our privacy policy</Checkbox.Description>
255
+ </Checkbox>
256
+ </CheckboxGroup>
257
+ ),
258
+ args: {
259
+ size: 'lg',
260
+ label: 'Large size (56px min-height)',
261
+ },
262
+ };
263
+
264
+ export const AllSizes: Story = {
265
+ render: () => (
266
+ <div className="flex flex-col gap-8">
267
+ <CheckboxGroup size="sm" label="Small (44px)" defaultValue={['opt1']}>
268
+ <Checkbox value="opt1">
269
+ <Checkbox.Label>Small Option</Checkbox.Label>
270
+ </Checkbox>
271
+ <Checkbox value="opt2">
272
+ <Checkbox.Label>Small Option</Checkbox.Label>
273
+ </Checkbox>
274
+ </CheckboxGroup>
275
+ <CheckboxGroup size="default" label="Default (48px)" defaultValue={['opt1']}>
276
+ <Checkbox value="opt1">
277
+ <Checkbox.Label>Default Option</Checkbox.Label>
278
+ </Checkbox>
279
+ <Checkbox value="opt2">
280
+ <Checkbox.Label>Default Option</Checkbox.Label>
281
+ </Checkbox>
282
+ </CheckboxGroup>
283
+ <CheckboxGroup size="lg" label="Large (56px)" defaultValue={['opt1']}>
284
+ <Checkbox value="opt1">
285
+ <Checkbox.Label>Large Option</Checkbox.Label>
286
+ </Checkbox>
287
+ <Checkbox value="opt2">
288
+ <Checkbox.Label>Large Option</Checkbox.Label>
289
+ </Checkbox>
290
+ </CheckboxGroup>
291
+ </div>
292
+ ),
293
+ parameters: {
294
+ docs: {
295
+ description: {
296
+ story: 'All 3 CheckboxGroup sizes in one view. All maintain 44px+ minimum touch targets for WCAG 2.2 AAA compliance.',
297
+ },
298
+ },
299
+ },
300
+ };
301
+
302
+ // ============================================================================
303
+ // Orientation Stories
304
+ // ============================================================================
305
+
306
+ export const Horizontal: Story = {
307
+ render: (args) => (
308
+ <CheckboxGroup {...args}>
309
+ <Checkbox value="monday">
310
+ <Checkbox.Label>Mon</Checkbox.Label>
311
+ </Checkbox>
312
+ <Checkbox value="tuesday">
313
+ <Checkbox.Label>Tue</Checkbox.Label>
314
+ </Checkbox>
315
+ <Checkbox value="wednesday">
316
+ <Checkbox.Label>Wed</Checkbox.Label>
317
+ </Checkbox>
318
+ <Checkbox value="thursday">
319
+ <Checkbox.Label>Thu</Checkbox.Label>
320
+ </Checkbox>
321
+ <Checkbox value="friday">
322
+ <Checkbox.Label>Fri</Checkbox.Label>
323
+ </Checkbox>
324
+ </CheckboxGroup>
325
+ ),
326
+ args: {
327
+ orientation: 'horizontal',
328
+ label: 'Available Days',
329
+ },
330
+ };
331
+
332
+ export const HorizontalWrapping: Story = {
333
+ render: (args) => (
334
+ <div className="w-80">
335
+ <CheckboxGroup {...args}>
336
+ <Checkbox value="red">
337
+ <Checkbox.Label>Red</Checkbox.Label>
338
+ </Checkbox>
339
+ <Checkbox value="green">
340
+ <Checkbox.Label>Green</Checkbox.Label>
341
+ </Checkbox>
342
+ <Checkbox value="blue">
343
+ <Checkbox.Label>Blue</Checkbox.Label>
344
+ </Checkbox>
345
+ <Checkbox value="yellow">
346
+ <Checkbox.Label>Yellow</Checkbox.Label>
347
+ </Checkbox>
348
+ <Checkbox value="purple">
349
+ <Checkbox.Label>Purple</Checkbox.Label>
350
+ </Checkbox>
351
+ </CheckboxGroup>
352
+ </div>
353
+ ),
354
+ args: {
355
+ orientation: 'horizontal',
356
+ label: 'Color Selection',
357
+ description: 'Items wrap to next line when container is constrained',
358
+ },
359
+ };
360
+
361
+ // ============================================================================
362
+ // State Stories
363
+ // ============================================================================
364
+
365
+ export const WithDefaultValue: Story = {
366
+ render: (args) => (
367
+ <CheckboxGroup {...args}>
368
+ <Checkbox value="newsletter">
369
+ <Checkbox.Label>Weekly newsletter</Checkbox.Label>
370
+ <Checkbox.Description>Product updates and tips</Checkbox.Description>
371
+ </Checkbox>
372
+ <Checkbox value="promotions">
373
+ <Checkbox.Label>Promotional emails</Checkbox.Label>
374
+ <Checkbox.Description>Special offers and discounts</Checkbox.Description>
375
+ </Checkbox>
376
+ <Checkbox value="updates">
377
+ <Checkbox.Label>Product updates</Checkbox.Label>
378
+ <Checkbox.Description>New features and improvements</Checkbox.Description>
379
+ </Checkbox>
380
+ </CheckboxGroup>
381
+ ),
382
+ args: {
383
+ label: 'Email Subscriptions',
384
+ defaultValue: ['newsletter', 'updates'],
385
+ },
386
+ };
387
+
388
+ export const Disabled: Story = {
389
+ render: (args) => (
390
+ <CheckboxGroup {...args}>
391
+ <Checkbox value="opt1">
392
+ <Checkbox.Label>Option 1</Checkbox.Label>
393
+ </Checkbox>
394
+ <Checkbox value="opt2">
395
+ <Checkbox.Label>Option 2</Checkbox.Label>
396
+ </Checkbox>
397
+ <Checkbox value="opt3">
398
+ <Checkbox.Label>Option 3</Checkbox.Label>
399
+ </Checkbox>
400
+ </CheckboxGroup>
401
+ ),
402
+ args: {
403
+ label: 'Disabled CheckboxGroup',
404
+ isDisabled: true,
405
+ defaultValue: ['opt2'],
406
+ },
407
+ };
408
+
409
+ export const DisabledItem: Story = {
410
+ render: (args) => (
411
+ <CheckboxGroup {...args}>
412
+ <Checkbox value="available">
413
+ <Checkbox.Label>Available Feature</Checkbox.Label>
414
+ </Checkbox>
415
+ <Checkbox value="unavailable" isDisabled>
416
+ <Checkbox.Label>Unavailable (Coming Soon)</Checkbox.Label>
417
+ </Checkbox>
418
+ <Checkbox value="another">
419
+ <Checkbox.Label>Another Feature</Checkbox.Label>
420
+ </Checkbox>
421
+ </CheckboxGroup>
422
+ ),
423
+ args: {
424
+ label: 'Features',
425
+ description: 'Some features may not be available yet',
426
+ },
427
+ };
428
+
429
+ export const ReadOnly: Story = {
430
+ render: (args) => (
431
+ <CheckboxGroup {...args}>
432
+ <Checkbox value="basic">
433
+ <Checkbox.Label>Basic Support</Checkbox.Label>
434
+ </Checkbox>
435
+ <Checkbox value="priority">
436
+ <Checkbox.Label>Priority Support</Checkbox.Label>
437
+ </Checkbox>
438
+ <Checkbox value="dedicated">
439
+ <Checkbox.Label>Dedicated Support</Checkbox.Label>
440
+ </Checkbox>
441
+ </CheckboxGroup>
442
+ ),
443
+ args: {
444
+ label: 'Your Plan Features',
445
+ description: 'Contact support to modify your plan',
446
+ isReadOnly: true,
447
+ defaultValue: ['basic', 'priority'],
448
+ },
449
+ };
450
+
451
+ export const Required: Story = {
452
+ render: (args) => (
453
+ <CheckboxGroup {...args}>
454
+ <Checkbox value="terms">
455
+ <Checkbox.Label>I agree to the Terms of Service</Checkbox.Label>
456
+ </Checkbox>
457
+ <Checkbox value="privacy">
458
+ <Checkbox.Label>I agree to the Privacy Policy</Checkbox.Label>
459
+ </Checkbox>
460
+ <Checkbox value="newsletter">
461
+ <Checkbox.Label>Subscribe to newsletter (optional)</Checkbox.Label>
462
+ </Checkbox>
463
+ </CheckboxGroup>
464
+ ),
465
+ args: {
466
+ label: 'Agreements',
467
+ isRequired: true,
468
+ },
469
+ };
470
+
471
+ export const Invalid: Story = {
472
+ render: (args) => (
473
+ <CheckboxGroup {...args}>
474
+ <Checkbox value="opt1">
475
+ <Checkbox.Label>Option 1</Checkbox.Label>
476
+ </Checkbox>
477
+ <Checkbox value="opt2">
478
+ <Checkbox.Label>Option 2</Checkbox.Label>
479
+ </Checkbox>
480
+ <Checkbox value="opt3">
481
+ <Checkbox.Label>Option 3</Checkbox.Label>
482
+ </Checkbox>
483
+ </CheckboxGroup>
484
+ ),
485
+ args: {
486
+ label: 'Select at least one',
487
+ isInvalid: true,
488
+ errorMessage: 'Please select at least one option to continue',
489
+ isRequired: true,
490
+ },
491
+ parameters: {
492
+ docs: {
493
+ description: {
494
+ story: 'Error state with ALL items showing destructive border (cognitive accessibility per clarification).',
495
+ },
496
+ },
497
+ },
498
+ };
499
+
500
+ // ============================================================================
501
+ // Controlled Example
502
+ // ============================================================================
503
+
504
+ export const ControlledExample: Story = {
505
+ render: () => {
506
+ const [values, setValues] = useState<string[]>(['option1']);
507
+
508
+ return (
509
+ <div className="space-y-4">
510
+ <CheckboxGroup value={values} onChange={setValues} label="Controlled CheckboxGroup">
511
+ <Checkbox value="option1">
512
+ <Checkbox.Label>Option 1</Checkbox.Label>
513
+ </Checkbox>
514
+ <Checkbox value="option2">
515
+ <Checkbox.Label>Option 2</Checkbox.Label>
516
+ </Checkbox>
517
+ <Checkbox value="option3">
518
+ <Checkbox.Label>Option 3</Checkbox.Label>
519
+ </Checkbox>
520
+ </CheckboxGroup>
521
+ <div className="text-sm text-[var(--muted-foreground)]">
522
+ Selected values: {values.length > 0 ? values.join(', ') : 'none'}
523
+ </div>
524
+ <div className="flex gap-2">
525
+ <button
526
+ onClick={() => setValues(['option1', 'option2', 'option3'])}
527
+ className="rounded-md bg-[var(--primary)] px-4 py-2 text-sm text-[var(--primary-foreground)]"
528
+ >
529
+ Select All
530
+ </button>
531
+ <button
532
+ onClick={() => setValues([])}
533
+ className="rounded-md border border-[var(--border)] px-4 py-2 text-sm text-[var(--foreground)]"
534
+ >
535
+ Clear All
536
+ </button>
537
+ </div>
538
+ </div>
539
+ );
540
+ },
541
+ parameters: {
542
+ docs: {
543
+ description: {
544
+ story: 'Controlled CheckboxGroup example with external state management.',
545
+ },
546
+ },
547
+ },
548
+ };
549
+
550
+ // ============================================================================
551
+ // Real-World Examples
552
+ // ============================================================================
553
+
554
+ export const FeatureSelection: Story = {
555
+ render: () => (
556
+ <div className="w-96 rounded-lg border border-[var(--border)] bg-[var(--background)] p-6">
557
+ <CheckboxGroup label="Select Features" defaultValue={['dashboard', 'reports']}>
558
+ <Checkbox value="dashboard">
559
+ <div className="flex items-center gap-2">
560
+ <span className="text-lg">📊</span>
561
+ <div>
562
+ <Checkbox.Label>Dashboard</Checkbox.Label>
563
+ <Checkbox.Description>Real-time analytics view</Checkbox.Description>
564
+ </div>
565
+ </div>
566
+ </Checkbox>
567
+ <Checkbox value="reports">
568
+ <div className="flex items-center gap-2">
569
+ <span className="text-lg">📈</span>
570
+ <div>
571
+ <Checkbox.Label>Reports</Checkbox.Label>
572
+ <Checkbox.Description>Generate custom reports</Checkbox.Description>
573
+ </div>
574
+ </div>
575
+ </Checkbox>
576
+ <Checkbox value="api">
577
+ <div className="flex items-center gap-2">
578
+ <span className="text-lg">🔌</span>
579
+ <div>
580
+ <Checkbox.Label>API Access</Checkbox.Label>
581
+ <Checkbox.Description>Integrate with your apps</Checkbox.Description>
582
+ </div>
583
+ </div>
584
+ </Checkbox>
585
+ <Checkbox value="support">
586
+ <div className="flex items-center gap-2">
587
+ <span className="text-lg">💬</span>
588
+ <div>
589
+ <Checkbox.Label>Priority Support</Checkbox.Label>
590
+ <Checkbox.Description>24/7 dedicated support</Checkbox.Description>
591
+ </div>
592
+ </div>
593
+ </Checkbox>
594
+ </CheckboxGroup>
595
+ </div>
596
+ ),
597
+ parameters: {
598
+ docs: {
599
+ description: {
600
+ story: 'Feature selection with icons and descriptions.',
601
+ },
602
+ },
603
+ },
604
+ };
605
+
606
+ export const FilterOptions: Story = {
607
+ render: () => (
608
+ <div className="w-80 rounded-lg border border-[var(--border)] bg-[var(--background)] p-4">
609
+ <CheckboxGroup
610
+ label="Filter by Category"
611
+ orientation="vertical"
612
+ size="sm"
613
+ defaultValue={['electronics', 'clothing']}
614
+ >
615
+ <Checkbox value="electronics">
616
+ <Checkbox.Label>Electronics</Checkbox.Label>
617
+ </Checkbox>
618
+ <Checkbox value="clothing">
619
+ <Checkbox.Label>Clothing</Checkbox.Label>
620
+ </Checkbox>
621
+ <Checkbox value="books">
622
+ <Checkbox.Label>Books</Checkbox.Label>
623
+ </Checkbox>
624
+ <Checkbox value="home">
625
+ <Checkbox.Label>Home & Garden</Checkbox.Label>
626
+ </Checkbox>
627
+ <Checkbox value="sports">
628
+ <Checkbox.Label>Sports & Outdoors</Checkbox.Label>
629
+ </Checkbox>
630
+ </CheckboxGroup>
631
+ </div>
632
+ ),
633
+ parameters: {
634
+ docs: {
635
+ description: {
636
+ story: 'Filter checkboxes for e-commerce or search interfaces.',
637
+ },
638
+ },
639
+ },
640
+ };
641
+
642
+ export const TaskList: Story = {
643
+ render: () => {
644
+ const [completed, setCompleted] = useState<string[]>(['task1', 'task3']);
645
+
646
+ return (
647
+ <div className="w-96 rounded-lg border border-[var(--border)] bg-[var(--background)] p-6">
648
+ <div className="mb-4 flex items-center justify-between">
649
+ <h3 className="font-semibold text-[var(--foreground)]">Today&apos;s Tasks</h3>
650
+ <span className="text-sm text-[var(--muted-foreground)]">
651
+ {completed.length}/5 completed
652
+ </span>
653
+ </div>
654
+ <CheckboxGroup value={completed} onChange={setCompleted} aria-label="Tasks">
655
+ <Checkbox value="task1">
656
+ <Checkbox.Label className={completed.includes('task1') ? 'line-through opacity-60' : ''}>
657
+ Review pull requests
658
+ </Checkbox.Label>
659
+ </Checkbox>
660
+ <Checkbox value="task2">
661
+ <Checkbox.Label className={completed.includes('task2') ? 'line-through opacity-60' : ''}>
662
+ Update documentation
663
+ </Checkbox.Label>
664
+ </Checkbox>
665
+ <Checkbox value="task3">
666
+ <Checkbox.Label className={completed.includes('task3') ? 'line-through opacity-60' : ''}>
667
+ Deploy to staging
668
+ </Checkbox.Label>
669
+ </Checkbox>
670
+ <Checkbox value="task4">
671
+ <Checkbox.Label className={completed.includes('task4') ? 'line-through opacity-60' : ''}>
672
+ Team standup meeting
673
+ </Checkbox.Label>
674
+ </Checkbox>
675
+ <Checkbox value="task5">
676
+ <Checkbox.Label className={completed.includes('task5') ? 'line-through opacity-60' : ''}>
677
+ Write weekly report
678
+ </Checkbox.Label>
679
+ </Checkbox>
680
+ </CheckboxGroup>
681
+ </div>
682
+ );
683
+ },
684
+ parameters: {
685
+ docs: {
686
+ description: {
687
+ story: 'Task list with visual strikethrough for completed items.',
688
+ },
689
+ },
690
+ },
691
+ };
692
+
693
+ export const PermissionsSettings: Story = {
694
+ render: () => (
695
+ <div className="w-[450px] rounded-lg border border-[var(--border)] bg-[var(--background)] p-6">
696
+ <h3 className="mb-4 text-lg font-semibold text-[var(--foreground)]">
697
+ Role Permissions
698
+ </h3>
699
+ <CheckboxGroup label="What can this role do?" defaultValue={['read', 'comment']}>
700
+ <Checkbox value="read" className="p-4">
701
+ <div className="flex w-full items-start gap-4">
702
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--primary)]/10 text-xl">
703
+ 👁️
704
+ </div>
705
+ <div className="flex-1">
706
+ <Checkbox.Label>View</Checkbox.Label>
707
+ <Checkbox.Description>
708
+ Can view projects, documents, and dashboards
709
+ </Checkbox.Description>
710
+ </div>
711
+ </div>
712
+ </Checkbox>
713
+ <Checkbox value="comment" className="p-4">
714
+ <div className="flex w-full items-start gap-4">
715
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--primary)]/10 text-xl">
716
+ 💬
717
+ </div>
718
+ <div className="flex-1">
719
+ <Checkbox.Label>Comment</Checkbox.Label>
720
+ <Checkbox.Description>
721
+ Can add comments and participate in discussions
722
+ </Checkbox.Description>
723
+ </div>
724
+ </div>
725
+ </Checkbox>
726
+ <Checkbox value="edit" className="p-4">
727
+ <div className="flex w-full items-start gap-4">
728
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--primary)]/10 text-xl">
729
+ ✏️
730
+ </div>
731
+ <div className="flex-1">
732
+ <Checkbox.Label>Edit</Checkbox.Label>
733
+ <Checkbox.Description>
734
+ Can modify existing content and settings
735
+ </Checkbox.Description>
736
+ </div>
737
+ </div>
738
+ </Checkbox>
739
+ <Checkbox value="delete" className="p-4">
740
+ <div className="flex w-full items-start gap-4">
741
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--destructive)]/10 text-xl">
742
+ 🗑️
743
+ </div>
744
+ <div className="flex-1">
745
+ <Checkbox.Label>Delete</Checkbox.Label>
746
+ <Checkbox.Description>
747
+ Can permanently remove content (use with caution)
748
+ </Checkbox.Description>
749
+ </div>
750
+ </div>
751
+ </Checkbox>
752
+ </CheckboxGroup>
753
+ </div>
754
+ ),
755
+ parameters: {
756
+ docs: {
757
+ description: {
758
+ story: 'Permission settings with icons and detailed descriptions.',
759
+ },
760
+ },
761
+ },
762
+ };
763
+
764
+ export const DangerZone: Story = {
765
+ render: () => (
766
+ <div className="w-96 rounded-lg border border-[var(--destructive)] bg-[var(--background)] p-6">
767
+ <h3 className="mb-4 text-lg font-semibold text-[var(--destructive)]">Danger Zone</h3>
768
+ <CheckboxGroup
769
+ variant="destructive"
770
+ label="Delete account data"
771
+ description="Select what you want to delete. This action cannot be undone."
772
+ >
773
+ <Checkbox value="messages">
774
+ <Checkbox.Label>All messages</Checkbox.Label>
775
+ </Checkbox>
776
+ <Checkbox value="files">
777
+ <Checkbox.Label>All uploaded files</Checkbox.Label>
778
+ </Checkbox>
779
+ <Checkbox value="settings">
780
+ <Checkbox.Label>Account settings</Checkbox.Label>
781
+ </Checkbox>
782
+ <Checkbox value="history">
783
+ <Checkbox.Label>Activity history</Checkbox.Label>
784
+ </Checkbox>
785
+ </CheckboxGroup>
786
+ </div>
787
+ ),
788
+ parameters: {
789
+ docs: {
790
+ description: {
791
+ story: 'Destructive variant for dangerous multi-select actions.',
792
+ },
793
+ },
794
+ },
795
+ };
796
+
797
+ // ============================================================================
798
+ // Card-Style Checkbox Examples
799
+ // ============================================================================
800
+
801
+ export const CardStyleBasic: Story = {
802
+ render: () => (
803
+ <div className="w-[500px]">
804
+ <CheckboxGroup label="Select add-ons" size="lg" defaultValue={['priority']}>
805
+ <Checkbox value="extended" className="p-6">
806
+ <div className="flex w-full flex-col gap-2">
807
+ <div className="flex items-center justify-between">
808
+ <Checkbox.Label>Extended Warranty</Checkbox.Label>
809
+ <span className="font-bold text-[var(--foreground)]">+$49</span>
810
+ </div>
811
+ <Checkbox.Description>
812
+ 2 additional years of coverage for parts and labor
813
+ </Checkbox.Description>
814
+ </div>
815
+ </Checkbox>
816
+ <Checkbox value="priority" className="p-6">
817
+ <div className="flex w-full flex-col gap-2">
818
+ <div className="flex items-center justify-between">
819
+ <Checkbox.Label>Priority Shipping</Checkbox.Label>
820
+ <span className="font-bold text-[var(--foreground)]">+$12</span>
821
+ </div>
822
+ <Checkbox.Description>
823
+ Get your order in 2-3 business days
824
+ </Checkbox.Description>
825
+ </div>
826
+ </Checkbox>
827
+ <Checkbox value="installation" className="p-6">
828
+ <div className="flex w-full flex-col gap-2">
829
+ <div className="flex items-center justify-between">
830
+ <Checkbox.Label>Professional Installation</Checkbox.Label>
831
+ <span className="font-bold text-[var(--foreground)]">+$99</span>
832
+ </div>
833
+ <Checkbox.Description>
834
+ Certified technician will install the product
835
+ </Checkbox.Description>
836
+ </div>
837
+ </Checkbox>
838
+ </CheckboxGroup>
839
+ </div>
840
+ ),
841
+ parameters: {
842
+ docs: {
843
+ description: {
844
+ story: 'Card-style checkbox items with pricing, ideal for e-commerce add-ons.',
845
+ },
846
+ },
847
+ },
848
+ };
849
+
850
+ export const CardStyleWithTags: Story = {
851
+ render: () => (
852
+ <div className="w-[500px]">
853
+ <CheckboxGroup label="Integrations" defaultValue={['slack', 'github']}>
854
+ <Checkbox value="slack" className="p-4">
855
+ <div className="flex w-full items-center gap-3">
856
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-purple-100 text-xl">
857
+ 💬
858
+ </div>
859
+ <div className="flex-1">
860
+ <div className="flex items-center gap-2">
861
+ <Checkbox.Label>Slack</Checkbox.Label>
862
+ <span className="rounded-full bg-green-100 px-2 py-0.5 text-xs text-green-800">
863
+ Connected
864
+ </span>
865
+ </div>
866
+ <Checkbox.Description>Get notifications in Slack</Checkbox.Description>
867
+ </div>
868
+ </div>
869
+ </Checkbox>
870
+ <Checkbox value="github" className="p-4">
871
+ <div className="flex w-full items-center gap-3">
872
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-gray-100 text-xl">
873
+ 🐙
874
+ </div>
875
+ <div className="flex-1">
876
+ <div className="flex items-center gap-2">
877
+ <Checkbox.Label>GitHub</Checkbox.Label>
878
+ <span className="rounded-full bg-green-100 px-2 py-0.5 text-xs text-green-800">
879
+ Connected
880
+ </span>
881
+ </div>
882
+ <Checkbox.Description>Sync with repositories</Checkbox.Description>
883
+ </div>
884
+ </div>
885
+ </Checkbox>
886
+ <Checkbox value="jira" className="p-4">
887
+ <div className="flex w-full items-center gap-3">
888
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-blue-100 text-xl">
889
+ 📋
890
+ </div>
891
+ <div className="flex-1">
892
+ <div className="flex items-center gap-2">
893
+ <Checkbox.Label>Jira</Checkbox.Label>
894
+ <span className="rounded-full bg-gray-100 px-2 py-0.5 text-xs text-gray-600">
895
+ Not connected
896
+ </span>
897
+ </div>
898
+ <Checkbox.Description>Link issues and track progress</Checkbox.Description>
899
+ </div>
900
+ </div>
901
+ </Checkbox>
902
+ </CheckboxGroup>
903
+ </div>
904
+ ),
905
+ parameters: {
906
+ docs: {
907
+ description: {
908
+ story: 'Integration settings with status tags and icons.',
909
+ },
910
+ },
911
+ },
912
+ };
913
+
914
+ export const CardStyleWithIcons: Story = {
915
+ render: () => (
916
+ <div className="w-[600px]">
917
+ <CheckboxGroup
918
+ label="Select workspace features"
919
+ orientation="horizontal"
920
+ size="lg"
921
+ defaultValue={['personal']}
922
+ >
923
+ <Checkbox value="personal" className="flex-1 p-6">
924
+ <div className="flex flex-col items-center gap-3 text-center">
925
+ <div className="flex h-12 w-12 items-center justify-center rounded-full bg-[var(--primary)]/10 text-2xl">
926
+ 👤
927
+ </div>
928
+ <div>
929
+ <Checkbox.Label>Personal</Checkbox.Label>
930
+ <Checkbox.Description>For individual use</Checkbox.Description>
931
+ </div>
932
+ </div>
933
+ </Checkbox>
934
+ <Checkbox value="team" className="flex-1 p-6">
935
+ <div className="flex flex-col items-center gap-3 text-center">
936
+ <div className="flex h-12 w-12 items-center justify-center rounded-full bg-[var(--primary)]/10 text-2xl">
937
+ 👥
938
+ </div>
939
+ <div>
940
+ <Checkbox.Label>Team</Checkbox.Label>
941
+ <Checkbox.Description>For collaboration</Checkbox.Description>
942
+ </div>
943
+ </div>
944
+ </Checkbox>
945
+ <Checkbox value="enterprise" className="flex-1 p-6">
946
+ <div className="flex flex-col items-center gap-3 text-center">
947
+ <div className="flex h-12 w-12 items-center justify-center rounded-full bg-[var(--primary)]/10 text-2xl">
948
+ 🏢
949
+ </div>
950
+ <div>
951
+ <Checkbox.Label>Enterprise</Checkbox.Label>
952
+ <Checkbox.Description>For organizations</Checkbox.Description>
953
+ </div>
954
+ </div>
955
+ </Checkbox>
956
+ </CheckboxGroup>
957
+ </div>
958
+ ),
959
+ parameters: {
960
+ docs: {
961
+ description: {
962
+ story: 'Card-style horizontal layout with centered icons, ideal for feature or category selection.',
963
+ },
964
+ },
965
+ },
966
+ };
967
+
968
+ export const CardStyleNotificationPreferences: Story = {
969
+ render: () => (
970
+ <div className="w-[450px] rounded-lg border border-[var(--border)] bg-[var(--background)] p-6">
971
+ <h3 className="mb-4 text-lg font-semibold text-[var(--foreground)]">
972
+ Notification Channels
973
+ </h3>
974
+ <CheckboxGroup
975
+ label="How would you like to be notified?"
976
+ defaultValue={['email', 'push']}
977
+ >
978
+ <Checkbox value="email" className="p-4">
979
+ <div className="flex w-full items-start gap-4">
980
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--primary)]/10 text-xl">
981
+ 📧
982
+ </div>
983
+ <div className="flex-1">
984
+ <Checkbox.Label>Email</Checkbox.Label>
985
+ <Checkbox.Description>
986
+ Receive notifications via email. Best for important updates.
987
+ </Checkbox.Description>
988
+ </div>
989
+ </div>
990
+ </Checkbox>
991
+ <Checkbox value="push" className="p-4">
992
+ <div className="flex w-full items-start gap-4">
993
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--primary)]/10 text-xl">
994
+ 🔔
995
+ </div>
996
+ <div className="flex-1">
997
+ <Checkbox.Label>Push notifications</Checkbox.Label>
998
+ <Checkbox.Description>
999
+ Get instant alerts on your device. Best for time-sensitive items.
1000
+ </Checkbox.Description>
1001
+ </div>
1002
+ </div>
1003
+ </Checkbox>
1004
+ <Checkbox value="sms" className="p-4">
1005
+ <div className="flex w-full items-start gap-4">
1006
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--primary)]/10 text-xl">
1007
+ 💬
1008
+ </div>
1009
+ <div className="flex-1">
1010
+ <Checkbox.Label>SMS</Checkbox.Label>
1011
+ <Checkbox.Description>
1012
+ Text message alerts. Standard messaging rates may apply.
1013
+ </Checkbox.Description>
1014
+ </div>
1015
+ </div>
1016
+ </Checkbox>
1017
+ <Checkbox value="slack" className="p-4">
1018
+ <div className="flex w-full items-start gap-4">
1019
+ <div className="flex h-10 w-10 flex-shrink-0 items-center justify-center rounded-lg bg-[var(--muted)] text-xl">
1020
+ 💼
1021
+ </div>
1022
+ <div className="flex-1">
1023
+ <Checkbox.Label>Slack</Checkbox.Label>
1024
+ <Checkbox.Description>
1025
+ Receive notifications in your Slack workspace.
1026
+ </Checkbox.Description>
1027
+ </div>
1028
+ </div>
1029
+ </Checkbox>
1030
+ </CheckboxGroup>
1031
+ </div>
1032
+ ),
1033
+ parameters: {
1034
+ docs: {
1035
+ description: {
1036
+ story: 'Card-style checkboxes for settings pages with icons, labels, and detailed descriptions.',
1037
+ },
1038
+ },
1039
+ },
1040
+ };
1041
+
1042
+ export const CardStyleImageSelection: Story = {
1043
+ render: () => (
1044
+ <div className="w-[500px]">
1045
+ <CheckboxGroup
1046
+ label="Select themes to enable"
1047
+ orientation="horizontal"
1048
+ defaultValue={['light', 'dark']}
1049
+ >
1050
+ <Checkbox value="light" className="flex-1 overflow-hidden p-0">
1051
+ <div className="flex flex-col">
1052
+ <div className="h-24 bg-gradient-to-br from-white to-gray-100 border-b border-[var(--border)]" />
1053
+ <div className="p-3 text-center">
1054
+ <Checkbox.Label>Light</Checkbox.Label>
1055
+ </div>
1056
+ </div>
1057
+ </Checkbox>
1058
+ <Checkbox value="dark" className="flex-1 overflow-hidden p-0">
1059
+ <div className="flex flex-col">
1060
+ <div className="h-24 bg-gradient-to-br from-gray-800 to-gray-900 border-b border-[var(--border)]" />
1061
+ <div className="p-3 text-center">
1062
+ <Checkbox.Label>Dark</Checkbox.Label>
1063
+ </div>
1064
+ </div>
1065
+ </Checkbox>
1066
+ <Checkbox value="system" className="flex-1 overflow-hidden p-0">
1067
+ <div className="flex flex-col">
1068
+ <div className="h-24 bg-gradient-to-r from-white via-gray-400 to-gray-900 border-b border-[var(--border)]" />
1069
+ <div className="p-3 text-center">
1070
+ <Checkbox.Label>Auto</Checkbox.Label>
1071
+ </div>
1072
+ </div>
1073
+ </Checkbox>
1074
+ </CheckboxGroup>
1075
+ </div>
1076
+ ),
1077
+ parameters: {
1078
+ docs: {
1079
+ description: {
1080
+ story: 'Card-style checkboxes with visual previews, perfect for enabling multiple themes.',
1081
+ },
1082
+ },
1083
+ },
1084
+ };
1085
+
1086
+ export const CardStyleCompact: Story = {
1087
+ render: () => (
1088
+ <div className="w-96">
1089
+ <CheckboxGroup
1090
+ label="Available sizes"
1091
+ orientation="horizontal"
1092
+ size="sm"
1093
+ defaultValue={['m', 'l']}
1094
+ >
1095
+ <Checkbox value="xs" className="flex-1 justify-center">
1096
+ <Checkbox.Label>XS</Checkbox.Label>
1097
+ </Checkbox>
1098
+ <Checkbox value="s" className="flex-1 justify-center">
1099
+ <Checkbox.Label>S</Checkbox.Label>
1100
+ </Checkbox>
1101
+ <Checkbox value="m" className="flex-1 justify-center">
1102
+ <Checkbox.Label>M</Checkbox.Label>
1103
+ </Checkbox>
1104
+ <Checkbox value="l" className="flex-1 justify-center">
1105
+ <Checkbox.Label>L</Checkbox.Label>
1106
+ </Checkbox>
1107
+ <Checkbox value="xl" className="flex-1 justify-center">
1108
+ <Checkbox.Label>XL</Checkbox.Label>
1109
+ </Checkbox>
1110
+ </CheckboxGroup>
1111
+ </div>
1112
+ ),
1113
+ parameters: {
1114
+ docs: {
1115
+ description: {
1116
+ story: 'Compact card-style checkboxes for multi-select size or variant selection.',
1117
+ },
1118
+ },
1119
+ },
1120
+ };
1121
+
1122
+ // ============================================================================
1123
+ // Accessibility Stories
1124
+ // ============================================================================
1125
+
1126
+ export const FocusVisible: Story = {
1127
+ render: (args) => (
1128
+ <CheckboxGroup {...args}>
1129
+ <Checkbox value="opt1">
1130
+ <Checkbox.Label>Focus me with Tab</Checkbox.Label>
1131
+ </Checkbox>
1132
+ <Checkbox value="opt2">
1133
+ <Checkbox.Label>Tab moves between checkboxes</Checkbox.Label>
1134
+ </Checkbox>
1135
+ <Checkbox value="opt3">
1136
+ <Checkbox.Label>Press Space to toggle</Checkbox.Label>
1137
+ </Checkbox>
1138
+ </CheckboxGroup>
1139
+ ),
1140
+ args: {
1141
+ label: 'Keyboard Navigation',
1142
+ description: 'Use Tab to move between checkboxes, Space to toggle',
1143
+ },
1144
+ parameters: {
1145
+ docs: {
1146
+ description: {
1147
+ story: 'Press Tab to see the focus ring. Unlike RadioGroup, Tab moves between each checkbox (not arrow keys).',
1148
+ },
1149
+ },
1150
+ },
1151
+ };
1152
+
1153
+ export const TouchTarget: Story = {
1154
+ render: (args) => (
1155
+ <CheckboxGroup {...args}>
1156
+ <Checkbox value="opt1">
1157
+ <Checkbox.Label>Touch-friendly option</Checkbox.Label>
1158
+ </Checkbox>
1159
+ <Checkbox value="opt2">
1160
+ <Checkbox.Label>44px+ minimum height</Checkbox.Label>
1161
+ </Checkbox>
1162
+ </CheckboxGroup>
1163
+ ),
1164
+ args: {
1165
+ size: 'sm',
1166
+ label: 'Touch Targets',
1167
+ description: 'Even small size maintains 44px minimum touch targets',
1168
+ },
1169
+ parameters: {
1170
+ docs: {
1171
+ description: {
1172
+ story: 'All sizes maintain 44px+ minimum touch targets (exceeds WCAG 2.2 requirement).',
1173
+ },
1174
+ },
1175
+ },
1176
+ };
1177
+
1178
+ export const RTLSupport: Story = {
1179
+ render: () => (
1180
+ <div dir="rtl" className="w-96">
1181
+ <CheckboxGroup label="اختر الخيارات" defaultValue={['opt1']}>
1182
+ <Checkbox value="opt1">
1183
+ <Checkbox.Label>الخيار الأول</Checkbox.Label>
1184
+ <Checkbox.Description>وصف للخيار الأول</Checkbox.Description>
1185
+ </Checkbox>
1186
+ <Checkbox value="opt2">
1187
+ <Checkbox.Label>الخيار الثاني</Checkbox.Label>
1188
+ <Checkbox.Description>وصف للخيار الثاني</Checkbox.Description>
1189
+ </Checkbox>
1190
+ <Checkbox value="opt3">
1191
+ <Checkbox.Label>الخيار الثالث</Checkbox.Label>
1192
+ <Checkbox.Description>وصف للخيار الثالث</Checkbox.Description>
1193
+ </Checkbox>
1194
+ </CheckboxGroup>
1195
+ </div>
1196
+ ),
1197
+ parameters: {
1198
+ docs: {
1199
+ description: {
1200
+ story: 'RTL support with indicator auto-flipping to the right side.',
1201
+ },
1202
+ },
1203
+ },
1204
+ };
1205
+
1206
+ export const WithAriaLabel: Story = {
1207
+ render: () => (
1208
+ <CheckboxGroup aria-label="Hidden label for screen readers" defaultValue={['opt1']}>
1209
+ <Checkbox value="opt1">
1210
+ <Checkbox.Label>Option 1</Checkbox.Label>
1211
+ </Checkbox>
1212
+ <Checkbox value="opt2">
1213
+ <Checkbox.Label>Option 2</Checkbox.Label>
1214
+ </Checkbox>
1215
+ </CheckboxGroup>
1216
+ ),
1217
+ parameters: {
1218
+ docs: {
1219
+ description: {
1220
+ story: 'CheckboxGroup without visible label, using aria-label for screen readers.',
1221
+ },
1222
+ },
1223
+ },
1224
+ };
1225
+
1226
+ // ============================================================================
1227
+ // Theme Integration Stories
1228
+ // ============================================================================
1229
+
1230
+ export const LightTheme: Story = {
1231
+ render: (args) => (
1232
+ <CheckboxGroup {...args}>
1233
+ <Checkbox value="opt1">
1234
+ <Checkbox.Label>Light theme option</Checkbox.Label>
1235
+ </Checkbox>
1236
+ <Checkbox value="opt2">
1237
+ <Checkbox.Label>Another option</Checkbox.Label>
1238
+ </Checkbox>
1239
+ </CheckboxGroup>
1240
+ ),
1241
+ args: {
1242
+ label: 'Light Theme',
1243
+ defaultValue: ['opt1'],
1244
+ },
1245
+ parameters: {
1246
+ backgrounds: { default: 'light' },
1247
+ },
1248
+ };
1249
+
1250
+ export const DarkTheme: Story = {
1251
+ render: (args) => (
1252
+ <CheckboxGroup {...args}>
1253
+ <Checkbox value="opt1">
1254
+ <Checkbox.Label>Dark theme option</Checkbox.Label>
1255
+ </Checkbox>
1256
+ <Checkbox value="opt2">
1257
+ <Checkbox.Label>Another option</Checkbox.Label>
1258
+ </Checkbox>
1259
+ </CheckboxGroup>
1260
+ ),
1261
+ args: {
1262
+ label: 'Dark Theme',
1263
+ defaultValue: ['opt1'],
1264
+ },
1265
+ parameters: {
1266
+ backgrounds: { default: 'dark' },
1267
+ docs: {
1268
+ description: {
1269
+ story: 'CheckboxGroup adapts to dark theme via semantic tokens.',
1270
+ },
1271
+ },
1272
+ },
1273
+ };
1274
+
1275
+ export const HighContrast: Story = {
1276
+ render: (args) => (
1277
+ <CheckboxGroup {...args}>
1278
+ <Checkbox value="opt1">
1279
+ <Checkbox.Label>High contrast option</Checkbox.Label>
1280
+ </Checkbox>
1281
+ <Checkbox value="opt2">
1282
+ <Checkbox.Label>Another option</Checkbox.Label>
1283
+ </Checkbox>
1284
+ </CheckboxGroup>
1285
+ ),
1286
+ args: {
1287
+ label: 'High Contrast',
1288
+ defaultValue: ['opt1'],
1289
+ },
1290
+ parameters: {
1291
+ docs: {
1292
+ description: {
1293
+ story: 'CheckboxGroup with enhanced outlines for high contrast mode.',
1294
+ },
1295
+ },
1296
+ },
1297
+ };
1298
+
1299
+ export const ColorblindTheme: Story = {
1300
+ render: (args) => (
1301
+ <CheckboxGroup {...args}>
1302
+ <Checkbox value="opt1">
1303
+ <Checkbox.Label>Colorblind-friendly option</Checkbox.Label>
1304
+ </Checkbox>
1305
+ <Checkbox value="opt2">
1306
+ <Checkbox.Label>Another option</Checkbox.Label>
1307
+ </Checkbox>
1308
+ </CheckboxGroup>
1309
+ ),
1310
+ args: {
1311
+ label: 'Colorblind Theme',
1312
+ defaultValue: ['opt1'],
1313
+ },
1314
+ parameters: {
1315
+ docs: {
1316
+ description: {
1317
+ story: 'CheckboxGroup with colorblind-friendly palette (deuteranopia, protanopia, tritanopia support).',
1318
+ },
1319
+ },
1320
+ },
1321
+ };
1322
+
1323
+ // ============================================================================
1324
+ // Custom Icon Stories
1325
+ // ============================================================================
1326
+
1327
+ export const CustomTimesIcon: Story = {
1328
+ render: (args) => (
1329
+ <CheckboxGroup {...args}>
1330
+ <Checkbox value="spam" selectedIcon={<TimesIcon />}>
1331
+ <Checkbox.Label>Mark as spam</Checkbox.Label>
1332
+ <Checkbox.Description>This message will be moved to spam</Checkbox.Description>
1333
+ </Checkbox>
1334
+ <Checkbox value="delete" selectedIcon={<TimesIcon />}>
1335
+ <Checkbox.Label>Delete permanently</Checkbox.Label>
1336
+ <Checkbox.Description>This action cannot be undone</Checkbox.Description>
1337
+ </Checkbox>
1338
+ <Checkbox value="block" selectedIcon={<TimesIcon />}>
1339
+ <Checkbox.Label>Block sender</Checkbox.Label>
1340
+ <Checkbox.Description>You will no longer receive emails from this address</Checkbox.Description>
1341
+ </Checkbox>
1342
+ </CheckboxGroup>
1343
+ ),
1344
+ args: {
1345
+ label: 'Select Actions',
1346
+ variant: 'destructive',
1347
+ defaultValue: ['spam'],
1348
+ },
1349
+ parameters: {
1350
+ docs: {
1351
+ description: {
1352
+ story: 'Using TimesIcon (X) for destructive actions like delete, block, or exclude operations. The X icon provides clear visual feedback that these are removal/exclusion actions.',
1353
+ },
1354
+ },
1355
+ },
1356
+ };
1357
+
1358
+ export const MixedIcons: Story = {
1359
+ render: (args) => (
1360
+ <CheckboxGroup {...args}>
1361
+ <Checkbox value="include1" selectedIcon={<CheckmarkIcon />}>
1362
+ <Checkbox.Label>Include in report</Checkbox.Label>
1363
+ </Checkbox>
1364
+ <Checkbox value="include2" selectedIcon={<CheckmarkIcon />}>
1365
+ <Checkbox.Label>Include attachments</Checkbox.Label>
1366
+ </Checkbox>
1367
+ <Checkbox value="exclude1" selectedIcon={<TimesIcon />}>
1368
+ <Checkbox.Label>Exclude drafts</Checkbox.Label>
1369
+ </Checkbox>
1370
+ <Checkbox value="exclude2" selectedIcon={<TimesIcon />}>
1371
+ <Checkbox.Label>Exclude archived</Checkbox.Label>
1372
+ </Checkbox>
1373
+ </CheckboxGroup>
1374
+ ),
1375
+ args: {
1376
+ label: 'Report Settings',
1377
+ defaultValue: ['include1', 'exclude1'],
1378
+ },
1379
+ parameters: {
1380
+ docs: {
1381
+ description: {
1382
+ story: 'Mix CheckmarkIcon and TimesIcon within the same group to differentiate between include and exclude options. This provides clear visual semantics.',
1383
+ },
1384
+ },
1385
+ },
1386
+ };
1387
+
1388
+ export const DestructiveExclusionList: Story = {
1389
+ render: (args) => (
1390
+ <CheckboxGroup {...args}>
1391
+ <Checkbox value="user1" selectedIcon={<TimesIcon />}>
1392
+ <div className="flex items-center gap-3">
1393
+ <div className="w-8 h-8 rounded-full bg-[var(--muted)] flex items-center justify-center text-sm font-medium">
1394
+ JD
1395
+ </div>
1396
+ <div className="flex flex-col">
1397
+ <Checkbox.Label>John Doe</Checkbox.Label>
1398
+ <Checkbox.Description>john.doe@example.com</Checkbox.Description>
1399
+ </div>
1400
+ </div>
1401
+ </Checkbox>
1402
+ <Checkbox value="user2" selectedIcon={<TimesIcon />}>
1403
+ <div className="flex items-center gap-3">
1404
+ <div className="w-8 h-8 rounded-full bg-[var(--muted)] flex items-center justify-center text-sm font-medium">
1405
+ JS
1406
+ </div>
1407
+ <div className="flex flex-col">
1408
+ <Checkbox.Label>Jane Smith</Checkbox.Label>
1409
+ <Checkbox.Description>jane.smith@example.com</Checkbox.Description>
1410
+ </div>
1411
+ </div>
1412
+ </Checkbox>
1413
+ <Checkbox value="user3" selectedIcon={<TimesIcon />}>
1414
+ <div className="flex items-center gap-3">
1415
+ <div className="w-8 h-8 rounded-full bg-[var(--muted)] flex items-center justify-center text-sm font-medium">
1416
+ RJ
1417
+ </div>
1418
+ <div className="flex flex-col">
1419
+ <Checkbox.Label>Robert Johnson</Checkbox.Label>
1420
+ <Checkbox.Description>robert.j@example.com</Checkbox.Description>
1421
+ </div>
1422
+ </div>
1423
+ </Checkbox>
1424
+ </CheckboxGroup>
1425
+ ),
1426
+ args: {
1427
+ label: 'Remove Users from Project',
1428
+ variant: 'destructive',
1429
+ description: 'Select users to remove from this project',
1430
+ defaultValue: ['user2'],
1431
+ },
1432
+ parameters: {
1433
+ docs: {
1434
+ description: {
1435
+ story: 'Card-style destructive exclusion list with avatars. Uses TimesIcon to clearly indicate removal action. Perfect for user management interfaces.',
1436
+ },
1437
+ },
1438
+ },
1439
+ };
1440
+
1441
+ export const FilterExclusions: Story = {
1442
+ render: (args) => (
1443
+ <CheckboxGroup {...args}>
1444
+ <Checkbox value="completed" selectedIcon={<TimesIcon />}>
1445
+ <Checkbox.Label>Hide completed tasks</Checkbox.Label>
1446
+ </Checkbox>
1447
+ <Checkbox value="archived" selectedIcon={<TimesIcon />}>
1448
+ <Checkbox.Label>Hide archived items</Checkbox.Label>
1449
+ </Checkbox>
1450
+ <Checkbox value="lowpriority" selectedIcon={<TimesIcon />}>
1451
+ <Checkbox.Label>Hide low priority</Checkbox.Label>
1452
+ </Checkbox>
1453
+ </CheckboxGroup>
1454
+ ),
1455
+ args: {
1456
+ label: 'Filter Options',
1457
+ description: 'Select items to hide from view',
1458
+ size: 'sm',
1459
+ defaultValue: ['archived'],
1460
+ },
1461
+ parameters: {
1462
+ docs: {
1463
+ description: {
1464
+ story: 'Compact filter exclusion checkboxes with TimesIcon. The X icon clearly communicates that selecting an option will hide/exclude it from view.',
1465
+ },
1466
+ },
1467
+ },
1468
+ };
1469
+
1470
+ export const CustomSvgIcon: Story = {
1471
+ render: (args) => {
1472
+ // Custom star icon for favorites
1473
+ const StarIcon = ({ className, ...props }: { className?: string; 'data-selected'?: boolean }) => (
1474
+ <svg
1475
+ className={className}
1476
+ viewBox="0 0 24 24"
1477
+ fill="currentColor"
1478
+ aria-hidden="true"
1479
+ {...props}
1480
+ >
1481
+ <path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z" />
1482
+ </svg>
1483
+ );
1484
+
1485
+ return (
1486
+ <CheckboxGroup {...args}>
1487
+ <Checkbox value="item1" selectedIcon={<StarIcon />}>
1488
+ <Checkbox.Label>Project Alpha</Checkbox.Label>
1489
+ <Checkbox.Description>Q1 2024 initiative</Checkbox.Description>
1490
+ </Checkbox>
1491
+ <Checkbox value="item2" selectedIcon={<StarIcon />}>
1492
+ <Checkbox.Label>Project Beta</Checkbox.Label>
1493
+ <Checkbox.Description>Research project</Checkbox.Description>
1494
+ </Checkbox>
1495
+ <Checkbox value="item3" selectedIcon={<StarIcon />}>
1496
+ <Checkbox.Label>Project Gamma</Checkbox.Label>
1497
+ <Checkbox.Description>Client deliverable</Checkbox.Description>
1498
+ </Checkbox>
1499
+ </CheckboxGroup>
1500
+ );
1501
+ },
1502
+ args: {
1503
+ label: 'Favorite Projects',
1504
+ description: 'Star your favorite projects for quick access',
1505
+ defaultValue: ['item1'],
1506
+ },
1507
+ parameters: {
1508
+ docs: {
1509
+ description: {
1510
+ story: 'Using a completely custom SVG icon (star) for favorites selection. The selectedIcon prop accepts any ReactNode, allowing full customization.',
1511
+ },
1512
+ },
1513
+ },
1514
+ };