@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,38 +1,412 @@
1
1
  import { StoryObj, Meta } from "@storybook/react-vite";
2
2
  import { within, expect } from "storybook/test";
3
-
3
+ import { useState } from "react";
4
4
  import Tag from "./tag";
5
+ import type { TagVariant } from "./tag.types";
5
6
  import "./tag.scss";
6
7
 
7
8
  const meta: Meta<typeof Tag> = {
8
9
  title: "FP.React Components/Tag",
9
10
  component: Tag,
10
- tags: ["beta"],
11
+ tags: ["autodocs", "beta"],
12
+ argTypes: {
13
+ variant: {
14
+ control: "select",
15
+ options: ["alpha", "beta", "stable", "production"] as TagVariant[],
16
+ description: "Visual variant with predefined color schemes",
17
+ table: {
18
+ type: { summary: "TagVariant" },
19
+ defaultValue: { summary: "undefined" },
20
+ },
21
+ },
22
+ elm: {
23
+ control: "radio",
24
+ options: ["span", "p"],
25
+ description: "HTML element to render (span for inline, p for block)",
26
+ table: {
27
+ type: { summary: "span | p" },
28
+ defaultValue: { summary: "span" },
29
+ },
30
+ },
31
+ role: {
32
+ control: "radio",
33
+ options: ["note", "status"],
34
+ description: "ARIA role (note for static, status for dynamic content)",
35
+ table: {
36
+ type: { summary: "note | status" },
37
+ defaultValue: { summary: "note" },
38
+ },
39
+ },
40
+ children: {
41
+ control: "text",
42
+ description: "Content to display inside the tag",
43
+ },
44
+ },
11
45
  args: {
12
- children: "Basic Tag",
13
- // styles: Tag.styles,
46
+ children: "Tag",
14
47
  },
15
- } as Meta;
48
+ parameters: {
49
+ docs: {
50
+ description: {
51
+ component:
52
+ "A small inline label component for displaying status, versions, or environment indicators with WCAG 2.1 AA accessibility compliance.",
53
+ },
54
+ },
55
+ },
56
+ } satisfies Meta<typeof Tag>;
16
57
 
17
58
  export default meta;
18
59
  type Story = StoryObj<typeof Tag>;
19
60
 
20
- export const TagComponent: Story = {
21
- args: {},
61
+ /**
62
+ * Default tag with no variant styling
63
+ */
64
+ export const Default: Story = {
65
+ args: {
66
+ children: "Default Tag",
67
+ },
22
68
  play: async ({ canvasElement }) => {
23
69
  const canvas = within(canvasElement);
24
- expect(canvas.queryByText(/basic tag/i)).toBeInTheDocument();
70
+ const tag = canvas.getByRole("note");
71
+ expect(tag).toBeInTheDocument();
72
+ expect(tag.textContent).toBe("Default Tag");
25
73
  },
26
74
  };
27
75
 
76
+ /**
77
+ * Alpha variant - for early development stage indicators
78
+ */
79
+ export const Alpha: Story = {
80
+ args: {
81
+ variant: "alpha",
82
+ children: "Alpha",
83
+ },
84
+ parameters: {
85
+ docs: {
86
+ description: {
87
+ story:
88
+ "Alpha variant with warning colors for early development features.",
89
+ },
90
+ },
91
+ },
92
+ } as Story;
93
+
94
+ /**
95
+ * Beta variant - for pre-release version indicators
96
+ */
28
97
  export const Beta: Story = {
29
98
  args: {
30
- "data-tag": "beta",
99
+ variant: "beta",
100
+ children: "Beta",
101
+ },
102
+ parameters: {
103
+ docs: {
104
+ description: {
105
+ story: "Beta variant with warning colors for pre-release features.",
106
+ },
107
+ },
108
+ },
109
+ } as Story;
110
+
111
+ /**
112
+ * Stable variant - for production-ready release indicators
113
+ */
114
+ export const Stable: Story = {
115
+ args: {
116
+ variant: "stable",
117
+ children: "Stable",
118
+ },
119
+ parameters: {
120
+ docs: {
121
+ description: {
122
+ story:
123
+ "Stable variant with success colors for production-ready releases.",
124
+ },
125
+ },
31
126
  },
32
127
  } as Story;
33
128
 
129
+ /**
130
+ * Production variant - for live environment indicators
131
+ */
34
132
  export const Production: Story = {
35
133
  args: {
36
- "data-tag": "production",
134
+ variant: "production",
135
+ children: "Production",
136
+ },
137
+ parameters: {
138
+ docs: {
139
+ description: {
140
+ story:
141
+ "Production variant with primary colors for live environment indicators.",
142
+ },
143
+ },
144
+ },
145
+ } as Story;
146
+
147
+ /**
148
+ * All variants displayed together for comparison
149
+ */
150
+ export const AllVariants: Story = {
151
+ render: () => (
152
+ <div
153
+ style={{
154
+ display: "flex",
155
+ gap: "1rem",
156
+ flexWrap: "wrap",
157
+ alignItems: "center",
158
+ }}
159
+ >
160
+ <Tag>Default</Tag>
161
+ <Tag variant="alpha">Alpha</Tag>
162
+ <Tag variant="beta">Beta</Tag>
163
+ <Tag variant="stable">Stable</Tag>
164
+ <Tag variant="production">Production</Tag>
165
+ </div>
166
+ ),
167
+ parameters: {
168
+ docs: {
169
+ description: {
170
+ story: "Comparison of all available tag variants side by side.",
171
+ },
172
+ },
37
173
  },
38
174
  } as Story;
175
+
176
+ /**
177
+ * Block-level tag using paragraph element
178
+ */
179
+ export const BlockLevelTag: Story = {
180
+ args: {
181
+ elm: "p",
182
+ variant: "beta",
183
+ children: "Block-level Beta Tag",
184
+ },
185
+ parameters: {
186
+ docs: {
187
+ description: {
188
+ story:
189
+ "Tag rendered as a block-level paragraph element with modified border radius.",
190
+ },
191
+ },
192
+ },
193
+ } as Story;
194
+
195
+ /**
196
+ * Dynamic status tag with role="status" for live updates
197
+ */
198
+ const DynamicStatusComponent = () => {
199
+ const [status, setStatus] = useState<"Deploying" | "Deployed">("Deploying");
200
+
201
+ return (
202
+ <div style={{ display: "flex", gap: "1rem", alignItems: "center" }}>
203
+ <Tag role="status" variant={status === "Deployed" ? "stable" : "beta"}>
204
+ {status}
205
+ </Tag>
206
+ <button
207
+ onClick={() =>
208
+ setStatus(status === "Deploying" ? "Deployed" : "Deploying")
209
+ }
210
+ style={{ padding: "0.5rem 1rem", cursor: "pointer" }}
211
+ >
212
+ Toggle Status
213
+ </button>
214
+ </div>
215
+ );
216
+ };
217
+
218
+ export const DynamicStatus: Story = {
219
+ render: () => <DynamicStatusComponent />,
220
+ parameters: {
221
+ docs: {
222
+ description: {
223
+ story:
224
+ 'Demonstrates role="status" for dynamic content that announces updates to screen readers.',
225
+ },
226
+ },
227
+ },
228
+ };
229
+
230
+ /**
231
+ * Tag with accessibility label for additional context
232
+ */
233
+ export const WithAriaLabel: Story = {
234
+ args: {
235
+ variant: "beta",
236
+ children: "Beta",
237
+ "aria-label": "Beta version - feedback welcome",
238
+ },
239
+ parameters: {
240
+ docs: {
241
+ description: {
242
+ story:
243
+ "Tag with aria-label providing additional context for screen reader users.",
244
+ },
245
+ },
246
+ },
247
+ play: async ({ canvasElement }) => {
248
+ const canvas = within(canvasElement);
249
+ const tag = canvas.getByLabelText("Beta version - feedback welcome");
250
+ expect(tag).toBeInTheDocument();
251
+ },
252
+ };
253
+
254
+ /**
255
+ * Tags used inline within text content
256
+ */
257
+ export const InlineUsage: Story = {
258
+ render: () => (
259
+ <p style={{ fontSize: "1rem", lineHeight: "1.6" }}>
260
+ This feature is currently in{" "}
261
+ <Tag variant="beta" aria-label="Beta testing phase">
262
+ Beta
263
+ </Tag>{" "}
264
+ and will be moved to{" "}
265
+ <Tag variant="stable" aria-label="Stable release">
266
+ Stable
267
+ </Tag>{" "}
268
+ after testing is complete.
269
+ </p>
270
+ ),
271
+ parameters: {
272
+ docs: {
273
+ description: {
274
+ story:
275
+ "Tags used inline within paragraph text for contextual labeling.",
276
+ },
277
+ },
278
+ },
279
+ };
280
+
281
+ /**
282
+ * Version tags with custom styling
283
+ */
284
+ export const VersionTags: Story = {
285
+ render: () => (
286
+ <div style={{ display: "flex", gap: "0.5rem", flexWrap: "wrap" }}>
287
+ <Tag variant="alpha">v0.1.0-alpha</Tag>
288
+ <Tag variant="beta">v0.9.0-beta</Tag>
289
+ <Tag variant="stable">v1.0.0</Tag>
290
+ <Tag variant="stable">v2.0.0</Tag>
291
+ <Tag variant="production">v2.1.0</Tag>
292
+ </div>
293
+ ),
294
+ parameters: {
295
+ docs: {
296
+ description: {
297
+ story: "Tags used for version labeling with semantic variants.",
298
+ },
299
+ },
300
+ },
301
+ };
302
+
303
+ /**
304
+ * Custom styled tags with inline styles
305
+ */
306
+ export const CustomStyling: Story = {
307
+ render: () => (
308
+ <div
309
+ style={{
310
+ display: "flex",
311
+ gap: "1rem",
312
+ flexWrap: "wrap",
313
+ alignItems: "center",
314
+ }}
315
+ >
316
+ <Tag
317
+ styles={{
318
+ backgroundColor: "#ff6b6b",
319
+ color: "white",
320
+ fontSize: "0.75rem",
321
+ }}
322
+ >
323
+ Custom Red
324
+ </Tag>
325
+ <Tag
326
+ variant="beta"
327
+ styles={{
328
+ fontSize: "1rem",
329
+ padding: "0.5rem 1rem",
330
+ fontWeight: "bold",
331
+ }}
332
+ >
333
+ Large Beta
334
+ </Tag>
335
+ <Tag
336
+ styles={{
337
+ backgroundColor: "#4ecdc4",
338
+ color: "white",
339
+ borderRadius: "0.25rem",
340
+ }}
341
+ >
342
+ Square Tag
343
+ </Tag>
344
+ </div>
345
+ ),
346
+ parameters: {
347
+ docs: {
348
+ description: {
349
+ story:
350
+ "Tags with custom inline styles overriding default CSS custom properties.",
351
+ },
352
+ },
353
+ },
354
+ };
355
+
356
+ /**
357
+ * Accessibility test - keyboard navigation and screen reader support
358
+ */
359
+ export const AccessibilityDemo: Story = {
360
+ render: () => (
361
+ <div style={{ display: "flex", flexDirection: "column", gap: "1rem" }}>
362
+ <div>
363
+ <strong>Static Tags (role="note"):</strong>
364
+ <div style={{ display: "flex", gap: "0.5rem", marginTop: "0.5rem" }}>
365
+ <Tag variant="stable" aria-label="Version 1.0 stable release">
366
+ v1.0
367
+ </Tag>
368
+ <Tag variant="beta" aria-label="Beta feature under testing">
369
+ Beta
370
+ </Tag>
371
+ </div>
372
+ </div>
373
+ <div>
374
+ <strong>Dynamic Tags (role="status"):</strong>
375
+ <div style={{ display: "flex", gap: "0.5rem", marginTop: "0.5rem" }}>
376
+ <Tag
377
+ role="status"
378
+ variant="production"
379
+ aria-label="Server running status"
380
+ >
381
+ Running
382
+ </Tag>
383
+ <Tag
384
+ role="status"
385
+ variant="beta"
386
+ aria-label="Build in progress status"
387
+ >
388
+ Building...
389
+ </Tag>
390
+ </div>
391
+ </div>
392
+ </div>
393
+ ),
394
+ parameters: {
395
+ docs: {
396
+ description: {
397
+ story:
398
+ 'Demonstrates proper ARIA role usage: role="note" for static content, role="status" for dynamic updates.',
399
+ },
400
+ },
401
+ a11y: {
402
+ config: {
403
+ rules: [
404
+ {
405
+ id: "color-contrast",
406
+ enabled: true,
407
+ },
408
+ ],
409
+ },
410
+ },
411
+ },
412
+ };
@@ -0,0 +1,210 @@
1
+ import React from 'react'
2
+ import { describe, it, expect } from 'vitest'
3
+ import { render, screen } from '@testing-library/react'
4
+ import Tag from './tag'
5
+ import type { TagVariant } from './tag.types'
6
+
7
+ describe('Tag Component', () => {
8
+ describe('Rendering', () => {
9
+ it('should render with default props', () => {
10
+ render(<Tag>Default Tag</Tag>)
11
+ const tag = screen.getByText('Default Tag')
12
+ expect(tag).toBeInTheDocument()
13
+ expect(tag.tagName).toBe('SPAN')
14
+ })
15
+
16
+ it('should render children correctly', () => {
17
+ render(<Tag>Test Content</Tag>)
18
+ expect(screen.getByText('Test Content')).toBeInTheDocument()
19
+ })
20
+
21
+ it('should render as span element by default', () => {
22
+ render(<Tag>Span Tag</Tag>)
23
+ const tag = screen.getByText('Span Tag')
24
+ expect(tag.tagName).toBe('SPAN')
25
+ })
26
+
27
+ it('should render as p element when elm prop is "p"', () => {
28
+ render(<Tag elm="p">Paragraph Tag</Tag>)
29
+ const tag = screen.getByText('Paragraph Tag')
30
+ expect(tag.tagName).toBe('P')
31
+ })
32
+ })
33
+
34
+ describe('Accessibility (ARIA Roles)', () => {
35
+ it('should have role="note" by default', () => {
36
+ render(<Tag>Note Tag</Tag>)
37
+ const tag = screen.getByRole('note')
38
+ expect(tag).toBeInTheDocument()
39
+ })
40
+
41
+ it('should apply role="status" when specified', () => {
42
+ render(<Tag role="status">Status Tag</Tag>)
43
+ const tag = screen.getByRole('status')
44
+ expect(tag).toBeInTheDocument()
45
+ })
46
+
47
+ it('should support aria-label for additional context', () => {
48
+ render(<Tag aria-label="Beta version indicator">Beta</Tag>)
49
+ const tag = screen.getByLabelText('Beta version indicator')
50
+ expect(tag).toBeInTheDocument()
51
+ })
52
+
53
+ it('should support aria-describedby for extended descriptions', () => {
54
+ render(
55
+ <>
56
+ <div id="beta-desc">This is a beta feature</div>
57
+ <Tag aria-describedby="beta-desc">Beta</Tag>
58
+ </>
59
+ )
60
+ const tag = screen.getByRole('note')
61
+ expect(tag).toHaveAttribute('aria-describedby', 'beta-desc')
62
+ })
63
+ })
64
+
65
+ describe('Variants', () => {
66
+ const variants: TagVariant[] = ['alpha', 'beta', 'stable', 'production']
67
+
68
+ variants.forEach((variant) => {
69
+ it(`should apply data-tag="${variant}" attribute for ${variant} variant`, () => {
70
+ render(<Tag variant={variant}>{variant}</Tag>)
71
+ const tag = screen.getByText(variant)
72
+ expect(tag).toHaveAttribute('data-tag', variant)
73
+ })
74
+ })
75
+
76
+ it('should not apply data-tag attribute when variant is undefined', () => {
77
+ render(<Tag>No Variant</Tag>)
78
+ const tag = screen.getByText('No Variant')
79
+ expect(tag).not.toHaveAttribute('data-tag')
80
+ })
81
+ })
82
+
83
+ describe('Custom Styling', () => {
84
+ it('should apply custom inline styles via styles prop', () => {
85
+ render(
86
+ <Tag styles={{ backgroundColor: 'red', color: 'white', fontSize: '1rem' }}>
87
+ Styled Tag
88
+ </Tag>
89
+ )
90
+ const tag = screen.getByText('Styled Tag')
91
+ expect(tag).toHaveStyle({ fontSize: '1rem' })
92
+ expect(tag.style.backgroundColor).toBeTruthy()
93
+ expect(tag.style.color).toBeTruthy()
94
+ })
95
+
96
+ it('should apply CSS classes via classes prop', () => {
97
+ render(<Tag classes="custom-class another-class">Classed Tag</Tag>)
98
+ const tag = screen.getByText('Classed Tag')
99
+ expect(tag).toHaveClass('custom-class', 'another-class')
100
+ })
101
+
102
+ it('should apply id attribute', () => {
103
+ render(<Tag id="unique-tag">ID Tag</Tag>)
104
+ const tag = screen.getByText('ID Tag')
105
+ expect(tag).toHaveAttribute('id', 'unique-tag')
106
+ })
107
+ })
108
+
109
+ describe('Component Composition', () => {
110
+ it('should render with both variant and custom styles', () => {
111
+ render(
112
+ <Tag variant="beta" styles={{ fontSize: '1rem' }}>
113
+ Combined
114
+ </Tag>
115
+ )
116
+ const tag = screen.getByText('Combined')
117
+ expect(tag).toHaveAttribute('data-tag', 'beta')
118
+ expect(tag).toHaveStyle({ fontSize: '1rem' })
119
+ })
120
+
121
+ it('should render with all props combined', () => {
122
+ render(
123
+ <Tag
124
+ elm="p"
125
+ role="status"
126
+ variant="production"
127
+ id="prod-tag"
128
+ aria-label="Production environment"
129
+ classes="production-tag"
130
+ styles={{ fontWeight: 'bold' }}
131
+ >
132
+ Production
133
+ </Tag>
134
+ )
135
+ const tag = screen.getByRole('status')
136
+ expect(tag.tagName).toBe('P')
137
+ expect(tag).toHaveAttribute('data-tag', 'production')
138
+ expect(tag).toHaveAttribute('id', 'prod-tag')
139
+ expect(tag).toHaveAttribute('aria-label', 'Production environment')
140
+ expect(tag).toHaveClass('production-tag')
141
+ expect(tag).toHaveStyle({ fontWeight: 'bold' })
142
+ })
143
+ })
144
+
145
+ describe('Type Safety', () => {
146
+ it('should accept valid TagVariant values', () => {
147
+ // These should compile without TypeScript errors
148
+ const validVariants: TagVariant[] = ['alpha', 'beta', 'stable', 'production']
149
+ validVariants.forEach((variant) => {
150
+ const { unmount } = render(<Tag variant={variant}>{variant}</Tag>)
151
+ expect(screen.getByText(variant)).toBeInTheDocument()
152
+ unmount()
153
+ })
154
+ })
155
+
156
+ it('should accept valid elm prop values', () => {
157
+ const { rerender } = render(<Tag elm="span">Span</Tag>)
158
+ expect(screen.getByText('Span').tagName).toBe('SPAN')
159
+
160
+ rerender(<Tag elm="p">Paragraph</Tag>)
161
+ expect(screen.getByText('Paragraph').tagName).toBe('P')
162
+ })
163
+
164
+ it('should accept valid role prop values', () => {
165
+ const { rerender } = render(<Tag role="note">Note</Tag>)
166
+ expect(screen.getByRole('note')).toBeInTheDocument()
167
+
168
+ rerender(<Tag role="status">Status</Tag>)
169
+ expect(screen.getByRole('status')).toBeInTheDocument()
170
+ })
171
+ })
172
+
173
+ describe('Edge Cases', () => {
174
+ it('should require children for accessibility', () => {
175
+ // TypeScript should enforce children as required
176
+ // This test verifies meaningful content is provided
177
+ render(<Tag aria-label="Tag with content">Required Content</Tag>)
178
+ const tag = screen.getByLabelText('Tag with content')
179
+ expect(tag).toBeInTheDocument()
180
+ expect(tag).toHaveTextContent('Required Content')
181
+ })
182
+
183
+ it('should handle multiple children', () => {
184
+ render(
185
+ <Tag>
186
+ <span>Part 1</span>
187
+ <span>Part 2</span>
188
+ </Tag>
189
+ )
190
+ expect(screen.getByText('Part 1')).toBeInTheDocument()
191
+ expect(screen.getByText('Part 2')).toBeInTheDocument()
192
+ })
193
+
194
+ it('should handle complex children with React elements', () => {
195
+ render(
196
+ <Tag variant="beta">
197
+ <strong>Beta</strong> <em>v2.0</em>
198
+ </Tag>
199
+ )
200
+ expect(screen.getByText('Beta')).toBeInTheDocument()
201
+ expect(screen.getByText('v2.0')).toBeInTheDocument()
202
+ })
203
+ })
204
+
205
+ describe('Display Name', () => {
206
+ it('should have correct displayName for debugging', () => {
207
+ expect(Tag.displayName).toBe('Tag')
208
+ })
209
+ })
210
+ })