@fpkit/acss 0.5.12 → 0.6.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 (398) hide show
  1. package/README.md +89 -0
  2. package/libs/chunk-2NRIP6RB.cjs +17 -0
  3. package/libs/chunk-2NRIP6RB.cjs.map +1 -0
  4. package/libs/chunk-33PNJ4LO.cjs +15 -0
  5. package/libs/chunk-33PNJ4LO.cjs.map +1 -0
  6. package/libs/chunk-4BZKFPEC.cjs +17 -0
  7. package/libs/chunk-4BZKFPEC.cjs.map +1 -0
  8. package/libs/{chunk-O6QZBB6G.js → chunk-5QD3DWFI.js} +5 -5
  9. package/libs/chunk-5QD3DWFI.js.map +1 -0
  10. package/libs/chunk-6SAHIYCZ.js +7 -0
  11. package/libs/chunk-6SAHIYCZ.js.map +1 -0
  12. package/libs/{chunk-KKLTUJFB.cjs → chunk-6WTC4JXH.cjs} +5 -5
  13. package/libs/chunk-6WTC4JXH.cjs.map +1 -0
  14. package/libs/chunk-75QHTLFO.js +7 -0
  15. package/libs/chunk-75QHTLFO.js.map +1 -0
  16. package/libs/{chunk-YWOYVRFT.js → chunk-7XPFW7CB.js} +3 -3
  17. package/libs/chunk-BFK62VX5.js +5 -0
  18. package/libs/chunk-BFK62VX5.js.map +1 -0
  19. package/libs/{chunk-ICCKQ2GC.cjs → chunk-DKTHCQ5P.cjs} +4 -4
  20. package/libs/{chunk-6TE5QEVE.cjs → chunk-E2AJURUW.cjs} +3 -3
  21. package/libs/chunk-E2AJURUW.cjs.map +1 -0
  22. package/libs/chunk-ENTCUJ3A.cjs +13 -0
  23. package/libs/chunk-ENTCUJ3A.cjs.map +1 -0
  24. package/libs/chunk-F5EYMVQM.js +10 -0
  25. package/libs/chunk-F5EYMVQM.js.map +1 -0
  26. package/libs/chunk-FVROL3V5.js +9 -0
  27. package/libs/chunk-FVROL3V5.js.map +1 -0
  28. package/libs/chunk-GT77BX4L.cjs +17 -0
  29. package/libs/chunk-GT77BX4L.cjs.map +1 -0
  30. package/libs/chunk-GUJSMQ3V.cjs +16 -0
  31. package/libs/chunk-GUJSMQ3V.cjs.map +1 -0
  32. package/libs/chunk-HHLNOC5T.js +7 -0
  33. package/libs/chunk-HHLNOC5T.js.map +1 -0
  34. package/libs/chunk-HRRHPLER.js +8 -0
  35. package/libs/chunk-HRRHPLER.js.map +1 -0
  36. package/libs/chunk-IEB64SWY.js +8 -0
  37. package/libs/chunk-IEB64SWY.js.map +1 -0
  38. package/libs/{chunk-LIQJ7ZZR.js → chunk-IQ76HGVP.js} +2 -2
  39. package/libs/chunk-IRLFZ3OL.js +9 -0
  40. package/libs/chunk-IRLFZ3OL.js.map +1 -0
  41. package/libs/chunk-KK47SYZI.js +8 -0
  42. package/libs/chunk-KK47SYZI.js.map +1 -0
  43. package/libs/chunk-O3JIHC5M.cjs +15 -0
  44. package/libs/chunk-O3JIHC5M.cjs.map +1 -0
  45. package/libs/chunk-O5XAJ7BY.cjs +18 -0
  46. package/libs/chunk-O5XAJ7BY.cjs.map +1 -0
  47. package/libs/chunk-OVWLQYMK.js +10 -0
  48. package/libs/chunk-OVWLQYMK.js.map +1 -0
  49. package/libs/chunk-PNWIRCG3.cjs +7 -0
  50. package/libs/chunk-PNWIRCG3.cjs.map +1 -0
  51. package/libs/chunk-QVW6W76L.cjs +18 -0
  52. package/libs/chunk-QVW6W76L.cjs.map +1 -0
  53. package/libs/chunk-T4T6GWYQ.cjs +17 -0
  54. package/libs/chunk-T4T6GWYQ.cjs.map +1 -0
  55. package/libs/chunk-TON2YGMD.cjs +9 -0
  56. package/libs/chunk-TON2YGMD.cjs.map +1 -0
  57. package/libs/chunk-UEPAWMDF.js +8 -0
  58. package/libs/chunk-UEPAWMDF.js.map +1 -0
  59. package/libs/{chunk-LT5KZ2QW.cjs → chunk-US2I5GI7.cjs} +3 -3
  60. package/libs/{chunk-E3XP6BEX.cjs → chunk-W2UIN7EV.cjs} +3 -3
  61. package/libs/chunk-W5TKWBFC.cjs +18 -0
  62. package/libs/chunk-W5TKWBFC.cjs.map +1 -0
  63. package/libs/chunk-WXBFBWYF.cjs +16 -0
  64. package/libs/chunk-WXBFBWYF.cjs.map +1 -0
  65. package/libs/chunk-X3JCTEPD.js +11 -0
  66. package/libs/chunk-X3JCTEPD.js.map +1 -0
  67. package/libs/chunk-X5LGFCWG.js +9 -0
  68. package/libs/chunk-X5LGFCWG.js.map +1 -0
  69. package/libs/{chunk-5M57K4SW.js → chunk-Y2PFDELK.js} +2 -2
  70. package/libs/chunk-ZFJ4U45S.js +10 -0
  71. package/libs/chunk-ZFJ4U45S.js.map +1 -0
  72. package/libs/{component-props-a8a2f97e.d.ts → component-props-67d978a2.d.ts} +4 -4
  73. package/libs/components/alert/alert.css +1 -1
  74. package/libs/components/alert/alert.css.map +1 -1
  75. package/libs/components/alert/alert.min.css +2 -2
  76. package/libs/components/badge/badge.css +1 -1
  77. package/libs/components/badge/badge.css.map +1 -1
  78. package/libs/components/badge/badge.min.css +2 -2
  79. package/libs/components/breadcrumbs/breadcrumb.cjs +9 -5
  80. package/libs/components/breadcrumbs/breadcrumb.d.cts +275 -36
  81. package/libs/components/breadcrumbs/breadcrumb.d.ts +275 -36
  82. package/libs/components/breadcrumbs/breadcrumb.js +3 -3
  83. package/libs/components/button.cjs +6 -4
  84. package/libs/components/button.d.cts +97 -4
  85. package/libs/components/button.d.ts +97 -4
  86. package/libs/components/button.js +4 -2
  87. package/libs/components/buttons/button.css +1 -1
  88. package/libs/components/buttons/button.css.map +1 -1
  89. package/libs/components/buttons/button.min.css +2 -2
  90. package/libs/components/card.cjs +7 -7
  91. package/libs/components/card.d.cts +278 -34
  92. package/libs/components/card.d.ts +278 -34
  93. package/libs/components/card.js +2 -2
  94. package/libs/components/cards/card.css +1 -1
  95. package/libs/components/cards/card.css.map +1 -1
  96. package/libs/components/cards/card.min.css +2 -2
  97. package/libs/components/details/details.css +1 -1
  98. package/libs/components/details/details.css.map +1 -1
  99. package/libs/components/details/details.min.css +2 -2
  100. package/libs/components/dialog/dialog.cjs +9 -7
  101. package/libs/components/dialog/dialog.css +1 -1
  102. package/libs/components/dialog/dialog.css.map +1 -1
  103. package/libs/components/dialog/dialog.d.cts +88 -34
  104. package/libs/components/dialog/dialog.d.ts +88 -34
  105. package/libs/components/dialog/dialog.js +7 -5
  106. package/libs/components/dialog/dialog.min.css +2 -2
  107. package/libs/components/form/fields.cjs +4 -4
  108. package/libs/components/form/fields.d.cts +16 -7
  109. package/libs/components/form/fields.d.ts +16 -7
  110. package/libs/components/form/fields.js +2 -2
  111. package/libs/components/form/inputs.cjs +6 -4
  112. package/libs/components/form/inputs.d.cts +50 -2
  113. package/libs/components/form/inputs.d.ts +50 -2
  114. package/libs/components/form/inputs.js +4 -2
  115. package/libs/components/form/textarea.cjs +5 -4
  116. package/libs/components/form/textarea.d.cts +32 -23
  117. package/libs/components/form/textarea.d.ts +32 -23
  118. package/libs/components/form/textarea.js +3 -2
  119. package/libs/components/heading/heading.cjs +3 -3
  120. package/libs/components/heading/heading.d.cts +3 -14
  121. package/libs/components/heading/heading.d.ts +3 -14
  122. package/libs/components/heading/heading.js +2 -2
  123. package/libs/components/icons/icon.cjs +4 -4
  124. package/libs/components/icons/icon.d.cts +183 -39
  125. package/libs/components/icons/icon.d.ts +183 -39
  126. package/libs/components/icons/icon.js +2 -2
  127. package/libs/components/images/img.css +1 -1
  128. package/libs/components/images/img.css.map +1 -1
  129. package/libs/components/images/img.min.css +2 -2
  130. package/libs/components/link/link.cjs +4 -4
  131. package/libs/components/link/link.css +1 -1
  132. package/libs/components/link/link.css.map +1 -1
  133. package/libs/components/link/link.d.cts +3 -19
  134. package/libs/components/link/link.d.ts +3 -19
  135. package/libs/components/link/link.js +2 -2
  136. package/libs/components/link/link.min.css +2 -2
  137. package/libs/components/list/list.cjs +5 -5
  138. package/libs/components/list/list.css +1 -0
  139. package/libs/components/list/list.css.map +1 -0
  140. package/libs/components/list/list.d.cts +120 -33
  141. package/libs/components/list/list.d.ts +120 -33
  142. package/libs/components/list/list.js +2 -2
  143. package/libs/components/list/list.min.css +3 -0
  144. package/libs/components/modal.cjs +6 -4
  145. package/libs/components/modal.d.cts +8 -8
  146. package/libs/components/modal.d.ts +8 -8
  147. package/libs/components/modal.js +5 -3
  148. package/libs/components/nav/nav.cjs +7 -7
  149. package/libs/components/nav/nav.css +1 -1
  150. package/libs/components/nav/nav.css.map +1 -1
  151. package/libs/components/nav/nav.d.cts +550 -34
  152. package/libs/components/nav/nav.d.ts +550 -34
  153. package/libs/components/nav/nav.js +3 -3
  154. package/libs/components/nav/nav.min.css +2 -2
  155. package/libs/components/popover/popover.d.cts +5 -5
  156. package/libs/components/popover/popover.d.ts +5 -5
  157. package/libs/components/tables/table.cjs +5 -5
  158. package/libs/components/tables/table.d.cts +8 -8
  159. package/libs/components/tables/table.d.ts +8 -8
  160. package/libs/components/tables/table.js +2 -2
  161. package/libs/components/tag/tag.css +1 -1
  162. package/libs/components/tag/tag.css.map +1 -1
  163. package/libs/components/tag/tag.min.css +2 -2
  164. package/libs/components/text/text.cjs +5 -5
  165. package/libs/components/text/text.d.cts +5 -5
  166. package/libs/components/text/text.d.ts +5 -5
  167. package/libs/components/text/text.js +2 -2
  168. package/libs/form.types-d25ebfac.d.ts +233 -0
  169. package/libs/heading-7446cb46.d.ts +250 -0
  170. package/libs/hooks.cjs +12 -0
  171. package/libs/hooks.d.cts +140 -1
  172. package/libs/hooks.d.ts +140 -1
  173. package/libs/hooks.js +4 -0
  174. package/libs/icons.cjs +3 -3
  175. package/libs/icons.d.cts +2 -2
  176. package/libs/icons.d.ts +2 -2
  177. package/libs/icons.js +2 -2
  178. package/libs/index.cjs +117 -94
  179. package/libs/index.cjs.map +1 -1
  180. package/libs/index.css +1 -1
  181. package/libs/index.css.map +1 -1
  182. package/libs/index.d.cts +834 -61
  183. package/libs/index.d.ts +834 -61
  184. package/libs/index.js +36 -22
  185. package/libs/index.js.map +1 -1
  186. package/libs/link-5192f411.d.ts +323 -0
  187. package/libs/list.types-d26de310.d.ts +245 -0
  188. package/libs/ui-d01b50d4.d.ts +289 -0
  189. package/package.json +4 -87
  190. package/src/components/README-UI.mdx +416 -0
  191. package/src/components/alert/ACCESSIBILITY.md +319 -0
  192. package/src/components/alert/README.mdx +475 -19
  193. package/src/components/alert/alert.scss +110 -6
  194. package/src/components/alert/alert.stories.tsx +372 -0
  195. package/src/components/alert/alert.test.tsx +762 -0
  196. package/src/components/alert/alert.tsx +331 -66
  197. package/src/components/alert/views/alert-actions.tsx +13 -0
  198. package/src/components/alert/views/alert-content.tsx +17 -0
  199. package/src/components/alert/views/alert-icon.tsx +53 -0
  200. package/src/components/alert/views/alert-screen-reader-text.tsx +30 -0
  201. package/src/components/alert/views/alert-title.tsx +23 -0
  202. package/src/components/alert/views/alert-view.tsx +158 -0
  203. package/src/components/alert/views/index.ts +12 -0
  204. package/src/components/badge/badge.mdx +186 -49
  205. package/src/components/badge/badge.scss +20 -2
  206. package/src/components/badge/badge.stories.tsx +160 -14
  207. package/src/components/badge/badge.test.tsx +179 -0
  208. package/src/components/badge/badge.tsx +97 -4
  209. package/src/components/breadcrumbs/README.mdx +364 -45
  210. package/src/components/breadcrumbs/__snapshots__/breadcrumb.test.tsx.snap +152 -0
  211. package/src/components/breadcrumbs/breadcrumb.stories.tsx +7 -3
  212. package/src/components/breadcrumbs/breadcrumb.test.tsx +490 -0
  213. package/src/components/breadcrumbs/breadcrumb.tsx +430 -170
  214. package/src/components/buttons/README.mdx +102 -1
  215. package/src/components/buttons/button.scss +34 -31
  216. package/src/components/buttons/button.stories.tsx +141 -0
  217. package/src/components/buttons/button.tsx +82 -52
  218. package/src/components/cards/README.mdx +657 -0
  219. package/src/components/cards/card.scss +22 -0
  220. package/src/components/cards/card.stories.tsx +167 -5
  221. package/src/components/cards/card.test.tsx +360 -20
  222. package/src/components/cards/card.tsx +200 -79
  223. package/src/components/cards/card.types.ts +135 -0
  224. package/src/components/cards/card.utils.ts +79 -0
  225. package/src/components/details/ACCESSIBILITY-REVIEW-LIVE.md +1050 -0
  226. package/src/components/details/ACCESSIBILITY-REVIEW.md +502 -0
  227. package/src/components/details/README.mdx +437 -69
  228. package/src/components/details/details.scss +16 -7
  229. package/src/components/details/details.test.tsx +385 -0
  230. package/src/components/details/details.tsx +101 -69
  231. package/src/components/details/details.types.ts +76 -0
  232. package/src/components/dialog/README.mdx +513 -110
  233. package/src/components/dialog/dialog-a11y-review.md +653 -0
  234. package/src/components/dialog/dialog-modal.tsx +79 -56
  235. package/src/components/dialog/dialog.scss +53 -3
  236. package/src/components/dialog/dialog.stories.tsx +10 -7
  237. package/src/components/dialog/dialog.test.tsx +450 -0
  238. package/src/components/dialog/dialog.tsx +69 -59
  239. package/src/components/dialog/dialog.types.ts +133 -0
  240. package/src/components/dialog/views/dialog-footer.tsx +54 -11
  241. package/src/components/dialog/views/dialog-header.tsx +20 -15
  242. package/src/components/form/README.mdx +725 -43
  243. package/src/components/form/WCAG-REVIEW.md +654 -0
  244. package/src/components/form/fields.tsx +10 -1
  245. package/src/components/form/form.stories.tsx +604 -23
  246. package/src/components/form/form.tsx +204 -63
  247. package/src/components/form/form.types.ts +378 -0
  248. package/src/components/form/input.stories.tsx +71 -3
  249. package/src/components/form/inputs.tsx +159 -67
  250. package/src/components/form/select.tsx +122 -66
  251. package/src/components/form/textarea.tsx +120 -73
  252. package/src/components/fp.tsx +86 -11
  253. package/src/components/heading/heading.stories.tsx +44 -4
  254. package/src/components/heading/heading.tsx +89 -23
  255. package/src/components/icons/README.mdx +332 -0
  256. package/src/components/icons/icon.stories.tsx +74 -1
  257. package/src/components/icons/icon.tsx +89 -1
  258. package/src/components/icons/types.ts +47 -0
  259. package/src/components/images/README.mdx +340 -24
  260. package/src/components/images/img.scss +19 -3
  261. package/src/components/images/img.stories.tsx +424 -15
  262. package/src/components/images/img.test.tsx +354 -25
  263. package/src/components/images/img.tsx +186 -63
  264. package/src/components/images/img.types.ts +211 -0
  265. package/src/components/link/README.mdx +923 -0
  266. package/src/components/link/link.scss +79 -26
  267. package/src/components/link/link.stories.tsx +383 -30
  268. package/src/components/link/link.test.tsx +677 -0
  269. package/src/components/link/link.tsx +163 -57
  270. package/src/components/link/link.types.ts +261 -0
  271. package/src/components/list/README.mdx +764 -0
  272. package/src/components/list/list.scss +285 -0
  273. package/src/components/list/list.stories.tsx +514 -27
  274. package/src/components/list/list.test.tsx +554 -0
  275. package/src/components/list/list.tsx +153 -51
  276. package/src/components/list/list.types.ts +255 -0
  277. package/src/components/nav/ACCESSIBILITY.md +649 -0
  278. package/src/components/nav/README.mdx +782 -0
  279. package/src/components/nav/nav.scss +32 -1
  280. package/src/components/nav/nav.stories.tsx +44 -6
  281. package/src/components/nav/nav.tsx +302 -51
  282. package/src/components/nav/nav.types.ts +308 -0
  283. package/src/components/tag/README.mdx +426 -0
  284. package/src/components/tag/tag.scss +101 -27
  285. package/src/components/tag/tag.stories.tsx +384 -10
  286. package/src/components/tag/tag.test.tsx +210 -0
  287. package/src/components/tag/tag.tsx +106 -9
  288. package/src/components/tag/tag.types.ts +107 -0
  289. package/src/components/title/MIGRATION.md +199 -0
  290. package/src/components/title/README.md +326 -0
  291. package/src/components/title/README.mdx +452 -0
  292. package/src/components/title/title.stories.tsx +393 -0
  293. package/src/components/title/title.test.tsx +251 -0
  294. package/src/components/title/title.tsx +219 -0
  295. package/src/components/ui.stories.tsx +894 -0
  296. package/src/components/ui.test.tsx +559 -0
  297. package/src/components/ui.tsx +274 -18
  298. package/src/components/word-count/README.md +240 -0
  299. package/src/hooks/use-disabled-state.test.tsx +536 -0
  300. package/src/hooks/use-disabled-state.ts +246 -0
  301. package/src/hooks/useDisabledState.md +393 -0
  302. package/src/hooks.ts +7 -0
  303. package/src/index.scss +2 -0
  304. package/src/index.ts +12 -3
  305. package/src/sass/_globals.scss +2 -7
  306. package/src/sass/_properties.scss +1 -0
  307. package/src/styles/alert/alert.css +92 -4
  308. package/src/styles/alert/alert.css.map +1 -1
  309. package/src/styles/badge/badge.css +20 -2
  310. package/src/styles/badge/badge.css.map +1 -1
  311. package/src/styles/buttons/button.css +31 -31
  312. package/src/styles/buttons/button.css.map +1 -1
  313. package/src/styles/cards/card.css +16 -0
  314. package/src/styles/cards/card.css.map +1 -1
  315. package/src/styles/details/details.css +19 -8
  316. package/src/styles/details/details.css.map +1 -1
  317. package/src/styles/dialog/dialog.css +43 -2
  318. package/src/styles/dialog/dialog.css.map +1 -1
  319. package/src/styles/images/img.css +15 -3
  320. package/src/styles/images/img.css.map +1 -1
  321. package/src/styles/index.css +691 -128
  322. package/src/styles/index.css.map +1 -1
  323. package/src/styles/link/link.css +45 -28
  324. package/src/styles/link/link.css.map +1 -1
  325. package/src/styles/list/list.css +214 -0
  326. package/src/styles/list/list.css.map +1 -0
  327. package/src/styles/nav/nav.css +21 -1
  328. package/src/styles/nav/nav.css.map +1 -1
  329. package/src/styles/tag/tag.css +113 -35
  330. package/src/styles/tag/tag.css.map +1 -1
  331. package/src/styles/utilities/_disabled.scss +58 -0
  332. package/src/test/setup.d.ts +9 -0
  333. package/src/test/setup.ts +53 -1
  334. package/src/types/shared.ts +43 -6
  335. package/src/utils/accessibility.ts +109 -0
  336. package/libs/chunk-5ZM4XL44.js +0 -8
  337. package/libs/chunk-5ZM4XL44.js.map +0 -1
  338. package/libs/chunk-6BVXFW7U.cjs +0 -15
  339. package/libs/chunk-6BVXFW7U.cjs.map +0 -1
  340. package/libs/chunk-6TE5QEVE.cjs.map +0 -1
  341. package/libs/chunk-7K76RW2A.cjs +0 -18
  342. package/libs/chunk-7K76RW2A.cjs.map +0 -1
  343. package/libs/chunk-BHRQBJRY.js +0 -8
  344. package/libs/chunk-BHRQBJRY.js.map +0 -1
  345. package/libs/chunk-BIP2NY53.js +0 -8
  346. package/libs/chunk-BIP2NY53.js.map +0 -1
  347. package/libs/chunk-BSPKFLO4.js +0 -8
  348. package/libs/chunk-BSPKFLO4.js.map +0 -1
  349. package/libs/chunk-BV5CLH44.cjs +0 -18
  350. package/libs/chunk-BV5CLH44.cjs.map +0 -1
  351. package/libs/chunk-DKGJHKGW.js +0 -9
  352. package/libs/chunk-DKGJHKGW.js.map +0 -1
  353. package/libs/chunk-DV56L5YX.cjs +0 -18
  354. package/libs/chunk-DV56L5YX.cjs.map +0 -1
  355. package/libs/chunk-ECLD37WN.cjs +0 -16
  356. package/libs/chunk-ECLD37WN.cjs.map +0 -1
  357. package/libs/chunk-EQ67LF46.js +0 -9
  358. package/libs/chunk-EQ67LF46.js.map +0 -1
  359. package/libs/chunk-HYBZBN4G.js +0 -8
  360. package/libs/chunk-HYBZBN4G.js.map +0 -1
  361. package/libs/chunk-IYUN2EW3.cjs +0 -15
  362. package/libs/chunk-IYUN2EW3.cjs.map +0 -1
  363. package/libs/chunk-KKLTUJFB.cjs.map +0 -1
  364. package/libs/chunk-LHVJKDMA.cjs +0 -15
  365. package/libs/chunk-LHVJKDMA.cjs.map +0 -1
  366. package/libs/chunk-LL7HTLMS.cjs +0 -15
  367. package/libs/chunk-LL7HTLMS.cjs.map +0 -1
  368. package/libs/chunk-M5QL5TAE.cjs +0 -14
  369. package/libs/chunk-M5QL5TAE.cjs.map +0 -1
  370. package/libs/chunk-NE6YXTMC.js +0 -7
  371. package/libs/chunk-NE6YXTMC.js.map +0 -1
  372. package/libs/chunk-NHYXGV3L.js +0 -8
  373. package/libs/chunk-NHYXGV3L.js.map +0 -1
  374. package/libs/chunk-O6QZBB6G.js.map +0 -1
  375. package/libs/chunk-P7TTEYCD.js +0 -7
  376. package/libs/chunk-P7TTEYCD.js.map +0 -1
  377. package/libs/chunk-PPOOBUOS.js +0 -8
  378. package/libs/chunk-PPOOBUOS.js.map +0 -1
  379. package/libs/chunk-QCMV4VQZ.js +0 -8
  380. package/libs/chunk-QCMV4VQZ.js.map +0 -1
  381. package/libs/chunk-QVV34QEH.cjs +0 -32
  382. package/libs/chunk-QVV34QEH.cjs.map +0 -1
  383. package/libs/chunk-S7BABR7Z.cjs +0 -13
  384. package/libs/chunk-S7BABR7Z.cjs.map +0 -1
  385. package/libs/chunk-SXVZSWX6.js +0 -11
  386. package/libs/chunk-SXVZSWX6.js.map +0 -1
  387. package/libs/chunk-X3EVB7VS.cjs +0 -15
  388. package/libs/chunk-X3EVB7VS.cjs.map +0 -1
  389. package/libs/inputs-f3a216db.d.ts +0 -45
  390. package/libs/ui-9a6f9f8d.d.ts +0 -24
  391. package/src/components/cards/README.md +0 -80
  392. package/src/components/dialog/hooks/useClickOutside.ts +0 -33
  393. /package/libs/{chunk-YWOYVRFT.js.map → chunk-7XPFW7CB.js.map} +0 -0
  394. /package/libs/{chunk-ICCKQ2GC.cjs.map → chunk-DKTHCQ5P.cjs.map} +0 -0
  395. /package/libs/{chunk-LIQJ7ZZR.js.map → chunk-IQ76HGVP.js.map} +0 -0
  396. /package/libs/{chunk-LT5KZ2QW.cjs.map → chunk-US2I5GI7.cjs.map} +0 -0
  397. /package/libs/{chunk-E3XP6BEX.cjs.map → chunk-W2UIN7EV.cjs.map} +0 -0
  398. /package/libs/{chunk-5M57K4SW.js.map → chunk-Y2PFDELK.js.map} +0 -0
@@ -1,47 +1,48 @@
1
1
  import React from 'react'
2
2
  import UI from '#components/ui'
3
+ import type {
4
+ CardProps,
5
+ CardTitleProps,
6
+ CardContentProps,
7
+ CardFooterProps,
8
+ } from './card.types'
9
+ import { cn, CARD_CLASSES, handleCardKeyDown, warnInteractiveUsage } from './card.utils'
3
10
 
4
- /*
5
- * CardProps interface
11
+ /**
12
+ * Card.Title - Title sub-component for Card
6
13
  *
7
- * Extends ComponentProps. Defines props for the Card component.
14
+ * Renders a heading element for the card title. Defaults to h3 for proper
15
+ * document outline, but can be customized via the `as` prop.
8
16
  *
9
- * @property {('div' | 'aside' | 'section' | 'article')} [elm='div'] - HTML element to render as
10
- */
11
- export type CardProps = {
12
- elm?: 'div' | 'aside' | 'section' | 'article'
13
- title?: React.ReactNode
14
- footer?: React.ReactNode
15
- } & React.ComponentProps<typeof UI>
16
-
17
- /*
18
- * Title component
17
+ * ## Accessibility
18
+ * - Use appropriate heading level based on document structure
19
+ * - Combine with `aria-labelledby` on parent Card for accessible names
19
20
  *
20
- * Renders a title for the Card component using the UI component.
21
+ * @example
22
+ * ```tsx
23
+ * <Card aria-labelledby="card-title-1">
24
+ * <Card.Title id="card-title-1">Featured Product</Card.Title>
25
+ * </Card>
26
+ * ```
21
27
  *
22
- * @param {Object} props - Component props
23
- * @param {ReactNode} props.children - Title content
24
- * @param {string} [props.className] - Additional CSS classes
25
- * @param {Object} [props.styles] - Inline styles
26
- *
27
- * @returns {ReactElement} Title component
28
+ * @example
29
+ * ```tsx
30
+ * // Custom heading level
31
+ * <Card.Title as="h2">Section Title</Card.Title>
32
+ * ```
28
33
  */
29
34
  export const Title = ({
30
35
  children,
31
36
  className,
32
- styles,
37
+ style,
33
38
  as = 'h3',
34
39
  ...props
35
- }: React.PropsWithChildren<{
36
- className?: string
37
- styles?: React.CSSProperties
38
- as?: React.ElementType
39
- }>) => {
40
+ }: CardTitleProps) => {
40
41
  return (
41
42
  <UI
42
43
  as={as}
43
- className={`card-title ${className || ''}`}
44
- styles={styles}
44
+ className={cn(CARD_CLASSES.TITLE, className)}
45
+ styles={style}
45
46
  {...props}
46
47
  >
47
48
  {children}
@@ -49,34 +50,49 @@ export const Title = ({
49
50
  )
50
51
  }
51
52
 
52
- Title.displayName = 'Title'
53
+ Title.displayName = 'Card.Title'
53
54
 
54
- /*
55
- * CardContent component
55
+ /**
56
+ * Card.Content - Content sub-component for Card
57
+ *
58
+ * Renders the main content area of the card. Defaults to `<article>` for
59
+ * standalone content, but can be changed to `div` or `section` via the `as` prop.
56
60
  *
57
- * Renders the content of the Card component using the UI component with an article element.
61
+ * ## Semantic HTML Guidelines
62
+ * - Use `article` (default) for self-contained, syndicate-able content
63
+ * - Use `div` for generic content containers
64
+ * - Use `section` for thematic groupings with a heading
58
65
  *
59
- * @param {Object} props - Component props
60
- * @param {ReactNode} props.children - Content
61
- * @param {string} [props.className] - Additional CSS classes
62
- * @param {Object} [props.styles] - Inline styles
66
+ * @example
67
+ * ```tsx
68
+ * <Card>
69
+ * <Card.Title>Article Title</Card.Title>
70
+ * <Card.Content>
71
+ * <p>This is standalone content...</p>
72
+ * </Card.Content>
73
+ * </Card>
74
+ * ```
63
75
  *
64
- * @returns {ReactElement} CardContent component
76
+ * @example
77
+ * ```tsx
78
+ * // Generic container (not standalone content)
79
+ * <Card.Content as="div">
80
+ * <p>Generic content...</p>
81
+ * </Card.Content>
82
+ * ```
65
83
  */
66
84
  export const Content = ({
67
85
  children,
68
86
  className,
69
- styles,
87
+ style,
88
+ as = 'article',
70
89
  ...props
71
- }: React.PropsWithChildren<{
72
- className?: string
73
- styles?: React.CSSProperties
74
- }>) => {
90
+ }: CardContentProps) => {
75
91
  return (
76
92
  <UI
77
- as="article"
78
- className={`card-content ${className || ''}`}
79
- styles={styles}
93
+ as={as}
94
+ className={cn(CARD_CLASSES.CONTENT, className)}
95
+ styles={style}
80
96
  {...props}
81
97
  >
82
98
  {children}
@@ -84,34 +100,46 @@ export const Content = ({
84
100
  )
85
101
  }
86
102
 
87
- Content.displayName = 'Content'
103
+ Content.displayName = 'Card.Content'
88
104
 
89
- /*
90
- * Footer component
105
+ /**
106
+ * Card.Footer - Footer sub-component for Card
91
107
  *
92
- * Renders a footer section for the Card component using the UI component.
108
+ * Renders a footer section for the card. Use for actions, metadata, or
109
+ * supplementary information.
93
110
  *
94
- * @param {Object} props - Component props
95
- * @param {ReactNode} props.children - Footer content
96
- * @param {string} [props.className] - Additional CSS classes
97
- * @param {Object} [props.styles] - Inline styles
111
+ * @example
112
+ * ```tsx
113
+ * <Card>
114
+ * <Card.Title>Product</Card.Title>
115
+ * <Card.Content>Description...</Card.Content>
116
+ * <Card.Footer>
117
+ * <button>Add to Cart</button>
118
+ * <span>$29.99</span>
119
+ * </Card.Footer>
120
+ * </Card>
121
+ * ```
98
122
  *
99
- * @returns {ReactElement} Footer component
123
+ * @example
124
+ * ```tsx
125
+ * // Semantic footer element
126
+ * <Card.Footer as="footer">
127
+ * <p>Last updated: 2024-01-15</p>
128
+ * </Card.Footer>
129
+ * ```
100
130
  */
101
131
  export const Footer = ({
102
132
  children,
103
133
  className,
104
- styles,
134
+ style,
135
+ as = 'div',
105
136
  ...props
106
- }: React.PropsWithChildren<{
107
- className?: string
108
- styles?: React.CSSProperties
109
- }>) => {
137
+ }: CardFooterProps) => {
110
138
  return (
111
139
  <UI
112
- as="div"
113
- className={`card-footer ${className || ''}`}
114
- styles={styles}
140
+ as={as}
141
+ className={cn(CARD_CLASSES.FOOTER, className)}
142
+ styles={style}
115
143
  {...props}
116
144
  >
117
145
  {children}
@@ -119,37 +147,127 @@ export const Footer = ({
119
147
  )
120
148
  }
121
149
 
122
- Footer.displayName = 'Footer'
150
+ Footer.displayName = 'Card.Footer'
123
151
 
124
- /*
125
- * Card component
126
- *
127
- * Renders a card container.
128
- *
129
- * @param {CardProps} props - Component props
130
- * @param {('div' | 'aside' | 'section' | 'article')} [props.elm='div'] - Element to render as
131
- * @param {Object} [props.styles] - CSS styles to apply
132
- * @param {ReactNode} props.children - Card content
133
- * @param {boolean} [props.renderStyles=true] - Whether to render default styles
134
- * @param {string} [props.dataStyle] - data-card attribute value
135
- * @param {string} [props.id] - Unique ID
136
- * @returns {ReactElement} Card component
152
+ /**
153
+ * Card - A flexible, accessible card component with compound component pattern
154
+ *
155
+ * The Card component provides a container for grouping related content and actions.
156
+ * It follows the compound component pattern, exposing `Card.Title`, `Card.Content`,
157
+ * and `Card.Footer` sub-components for structured layouts.
158
+ *
159
+ * ## Features
160
+ * - **Polymorphic rendering**: Render as any HTML element via `as` prop
161
+ * - **Compound components**: Structured sub-components for consistent layouts
162
+ * - **Interactive variant**: Built-in keyboard navigation and ARIA support
163
+ * - **Fully accessible**: WCAG 2.1 AA compliant with proper semantic HTML
164
+ *
165
+ * ## Accessibility
166
+ *
167
+ * ### Non-Interactive Cards
168
+ * - Use semantic HTML: `article` for standalone content, `section` for groupings
169
+ * - Provide accessible names with `aria-labelledby` referencing the title
170
+ *
171
+ * ### Interactive Cards (Clickable)
172
+ * - Set `interactive={true}` to enable keyboard navigation (Enter/Space)
173
+ * - Provide accessible name via `aria-label` or `aria-labelledby`
174
+ * - Ensure adequate focus indicators (handled by CSS)
175
+ *
176
+ * @example
177
+ * // Basic card with compound components
178
+ * ```tsx
179
+ * <Card>
180
+ * <Card.Title>Product Name</Card.Title>
181
+ * <Card.Content>
182
+ * <p>Product description goes here...</p>
183
+ * </Card.Content>
184
+ * <Card.Footer>
185
+ * <button>Buy Now</button>
186
+ * </Card.Footer>
187
+ * </Card>
188
+ * ```
189
+ *
190
+ * @example
191
+ * // Accessible interactive card
192
+ * ```tsx
193
+ * <Card
194
+ * interactive
195
+ * aria-label="View product details"
196
+ * onClick={() => navigate('/product/123')}
197
+ * >
198
+ * <Card.Title>Product Name</Card.Title>
199
+ * <Card.Content>Click anywhere to view details</Card.Content>
200
+ * </Card>
201
+ * ```
202
+ *
203
+ * @example
204
+ * // Semantic article card with accessible name
205
+ * ```tsx
206
+ * <Card as="article" aria-labelledby="article-title">
207
+ * <Card.Title id="article-title">Article Headline</Card.Title>
208
+ * <Card.Content>Article body...</Card.Content>
209
+ * </Card>
210
+ * ```
211
+ *
212
+ * @example
213
+ * // Card as a landmark region
214
+ * ```tsx
215
+ * <Card role="region" aria-label="Featured products">
216
+ * <Card.Title>Featured</Card.Title>
217
+ * <Card.Content>...</Card.Content>
218
+ * </Card>
219
+ * ```
137
220
  */
138
221
  export const Card = ({
139
- elm = 'div',
222
+ as = 'div',
140
223
  styles,
141
224
  children,
142
225
  classes = 'shadow',
143
226
  id,
227
+ interactive = false,
228
+ onClick,
229
+ tabIndex,
230
+ role,
231
+ 'aria-label': ariaLabel,
232
+ 'aria-labelledby': ariaLabelledBy,
233
+ 'aria-describedby': ariaDescribedBy,
144
234
  ...props
145
235
  }: CardProps) => {
236
+ // Development warnings for common accessibility issues
237
+ React.useEffect(() => {
238
+ warnInteractiveUsage(!!onClick, interactive)
239
+ }, [onClick, interactive])
240
+
241
+ // Interactive card handling
242
+ const handleKeyDown = (event: React.KeyboardEvent) => {
243
+ if (interactive || onClick) {
244
+ handleCardKeyDown(event, onClick)
245
+ }
246
+ }
247
+
248
+ const interactiveProps = interactive
249
+ ? {
250
+ role: role || 'button',
251
+ tabIndex: tabIndex ?? 0,
252
+ onClick,
253
+ onKeyDown: handleKeyDown,
254
+ }
255
+ : {
256
+ role,
257
+ onClick,
258
+ }
259
+
146
260
  return (
147
261
  <UI
148
- as={elm}
262
+ as={as}
149
263
  id={id}
150
264
  styles={styles}
151
265
  className={classes}
152
- data-card
266
+ aria-label={ariaLabel}
267
+ aria-labelledby={ariaLabelledBy}
268
+ aria-describedby={ariaDescribedBy}
269
+ data-card={interactive ? 'interactive' : true}
270
+ {...interactiveProps}
153
271
  {...props}
154
272
  >
155
273
  {children}
@@ -162,3 +280,6 @@ Card.displayName = 'Card'
162
280
  Card.Title = Title
163
281
  Card.Content = Content
164
282
  Card.Footer = Footer
283
+
284
+ // Export types for external consumption
285
+ export type { CardProps, CardTitleProps, CardContentProps, CardFooterProps } from './card.types'
@@ -0,0 +1,135 @@
1
+ import React from 'react'
2
+ import type UI from '../ui'
3
+
4
+ /**
5
+ * Base props shared across all Card sub-components.
6
+ *
7
+ * This interface provides common styling and structural props
8
+ * that all Card sub-components support.
9
+ */
10
+ export interface CardSubComponentProps {
11
+ /** CSS class names to apply */
12
+ className?: string
13
+ /** Inline styles to apply */
14
+ style?: React.CSSProperties
15
+ /** Child elements to render */
16
+ children?: React.ReactNode
17
+ }
18
+
19
+ /**
20
+ * Props for the Card.Title sub-component.
21
+ *
22
+ * @extends CardSubComponentProps
23
+ */
24
+ export interface CardTitleProps extends CardSubComponentProps {
25
+ /**
26
+ * HTML element to render as.
27
+ * @default 'h3'
28
+ */
29
+ as?: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'
30
+ /**
31
+ * HTML id attribute for the title.
32
+ * Useful for aria-labelledby references.
33
+ */
34
+ id?: string
35
+ }
36
+
37
+ /**
38
+ * Props for the Card.Content sub-component.
39
+ *
40
+ * @extends CardSubComponentProps
41
+ */
42
+ export interface CardContentProps extends CardSubComponentProps {
43
+ /**
44
+ * HTML element to render as.
45
+ * Use 'article' for standalone content, 'div' for generic containers.
46
+ * @default 'article'
47
+ */
48
+ as?: 'article' | 'div' | 'section'
49
+ }
50
+
51
+ /**
52
+ * Props for the Card.Footer sub-component.
53
+ *
54
+ * @extends CardSubComponentProps
55
+ */
56
+ export interface CardFooterProps extends CardSubComponentProps {
57
+ /**
58
+ * HTML element to render as.
59
+ * @default 'div'
60
+ */
61
+ as?: 'div' | 'footer'
62
+ }
63
+
64
+ /**
65
+ * Props for the main Card component.
66
+ *
67
+ * Extends all props from the UI component while adding Card-specific functionality.
68
+ * Supports polymorphic rendering via the `as` prop.
69
+ *
70
+ * @extends React.ComponentProps<typeof UI>
71
+ */
72
+ export interface CardProps extends React.ComponentProps<typeof UI> {
73
+ /**
74
+ * HTML element to render the Card as.
75
+ * Inherits from UI component's polymorphic `as` prop.
76
+ * @default 'div'
77
+ */
78
+ as?: React.ElementType
79
+
80
+ /**
81
+ * ARIA role for the card.
82
+ * Use 'article' for standalone content, 'region' with aria-label for landmarks.
83
+ * @example
84
+ * ```tsx
85
+ * <Card role="article">...</Card>
86
+ * <Card role="region" aria-label="User profile">...</Card>
87
+ * ```
88
+ */
89
+ role?: string
90
+
91
+ /**
92
+ * Accessible label for the card.
93
+ * Required when using interactive cards or role="region".
94
+ * @example
95
+ * ```tsx
96
+ * <Card role="region" aria-label="Featured products">...</Card>
97
+ * ```
98
+ */
99
+ 'aria-label'?: string
100
+
101
+ /**
102
+ * ID of element that labels this card.
103
+ * @example
104
+ * ```tsx
105
+ * <Card aria-labelledby="card-title-1">
106
+ * <Card.Title id="card-title-1">Title</Card.Title>
107
+ * </Card>
108
+ * ```
109
+ */
110
+ 'aria-labelledby'?: string
111
+
112
+ /**
113
+ * ID of element that describes this card.
114
+ */
115
+ 'aria-describedby'?: string
116
+
117
+ /**
118
+ * Makes the card interactive with keyboard support.
119
+ * Adds tabIndex, role="button", and keyboard event handlers.
120
+ * @default false
121
+ */
122
+ interactive?: boolean
123
+
124
+ /**
125
+ * Click handler for interactive cards.
126
+ * When provided without `interactive`, a warning will be logged in development.
127
+ */
128
+ onClick?: (event: React.MouseEvent | React.KeyboardEvent) => void
129
+
130
+ /**
131
+ * Tab index for keyboard navigation.
132
+ * Automatically set to 0 when `interactive` is true.
133
+ */
134
+ tabIndex?: number
135
+ }
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Utility functions for the Card component.
3
+ */
4
+
5
+ /**
6
+ * Combines multiple className strings into a single string, filtering out falsy values.
7
+ *
8
+ * This utility provides a cleaner alternative to template literals for className composition,
9
+ * avoiding unnecessary string allocation on every render.
10
+ *
11
+ * @param classes - Array of class names (can include undefined/null/empty strings)
12
+ * @returns Combined className string
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * cn('card-title', className) // "card-title custom-class"
17
+ * cn('card-title', undefined) // "card-title"
18
+ * cn('card-title', '', 'extra') // "card-title extra"
19
+ * ```
20
+ */
21
+ export function cn(...classes: (string | undefined | null | false)[]): string {
22
+ return classes.filter(Boolean).join(' ')
23
+ }
24
+
25
+ /**
26
+ * CSS class name constants for Card components.
27
+ * Centralizing these prevents typos and enables easier refactoring.
28
+ */
29
+ export const CARD_CLASSES = {
30
+ CARD: 'card',
31
+ TITLE: 'card-title',
32
+ CONTENT: 'card-content',
33
+ FOOTER: 'card-footer',
34
+ } as const
35
+
36
+ /**
37
+ * Handles keyboard events for interactive cards.
38
+ * Triggers click handler on Enter or Space key press.
39
+ *
40
+ * @param event - Keyboard event
41
+ * @param onClick - Click handler to invoke
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * <div onKeyDown={(e) => handleCardKeyDown(e, handleClick)}>
46
+ * ```
47
+ */
48
+ export function handleCardKeyDown(
49
+ event: React.KeyboardEvent,
50
+ onClick?: (event: React.MouseEvent | React.KeyboardEvent) => void
51
+ ): void {
52
+ if (!onClick) return
53
+
54
+ // Activate on Enter or Space (standard keyboard interaction pattern)
55
+ if (event.key === 'Enter' || event.key === ' ') {
56
+ event.preventDefault() // Prevent page scroll on Space
57
+ onClick(event)
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Development warning for interactive card usage.
63
+ * Warns when onClick is provided without the interactive prop.
64
+ *
65
+ * This function is intentionally empty to comply with no-console linting rules.
66
+ * In the future, consider using a proper logging/warning system.
67
+ *
68
+ * @param hasOnClick - Whether onClick handler is provided
69
+ * @param isInteractive - Whether interactive prop is set
70
+ */
71
+ export function warnInteractiveUsage(
72
+ hasOnClick: boolean,
73
+ isInteractive?: boolean
74
+ ): void {
75
+ // Development warning removed to comply with ESLint no-console rule
76
+ // TODO: Consider using a proper warning system if needed
77
+ void hasOnClick
78
+ void isInteractive
79
+ }