@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
@@ -2,55 +2,312 @@
2
2
  /* eslint-disable */
3
3
  import React from "react";
4
4
 
5
- type PolymorphicRef<C extends React.ElementType> =
6
- React.ComponentPropsWithRef<C>["ref"];
5
+ /**
6
+ * Extracts the appropriate ref type for a given element type.
7
+ *
8
+ * This utility type ensures that refs are properly typed based on the element
9
+ * being rendered. For example, a button element receives HTMLButtonElement ref.
10
+ * Excludes legacy string refs (deprecated since React 16.3).
11
+ *
12
+ * @typeParam C - The HTML element type (e.g., 'button', 'div', 'a')
13
+ * @example
14
+ * ```typescript
15
+ * type ButtonRef = PolymorphicRef<'button'>; // React.Ref<HTMLButtonElement>
16
+ * type DivRef = PolymorphicRef<'div'>; // React.Ref<HTMLDivElement>
17
+ * ```
18
+ */
19
+ type PolymorphicRef<C extends React.ElementType> = React.Ref<
20
+ React.ElementRef<C>
21
+ >;
7
22
 
23
+ /**
24
+ * Defines the 'as' prop that determines which HTML element to render.
25
+ *
26
+ * This is the core prop that enables polymorphic behavior, allowing components
27
+ * to render as any valid React element type while maintaining type safety.
28
+ *
29
+ * @typeParam C - The HTML element type to render
30
+ * @example
31
+ * ```typescript
32
+ * <UI as="button">Click me</UI>
33
+ * <UI as="a" href="/home">Link</UI>
34
+ * ```
35
+ */
8
36
  type AsProp<C extends React.ElementType> = {
9
37
  as?: C;
10
38
  };
11
39
 
40
+ /**
41
+ * Identifies props that should be omitted to prevent type conflicts.
42
+ *
43
+ * This type ensures that our custom props don't conflict with native element
44
+ * props by calculating which keys need to be omitted from the native props.
45
+ *
46
+ * @typeParam C - The HTML element type
47
+ * @typeParam P - The custom props to merge
48
+ */
12
49
  type PropsToOmit<C extends React.ElementType, P> = keyof (AsProp<C> & P);
13
50
 
51
+ /**
52
+ * Merges custom props with native element props while preventing conflicts.
53
+ *
54
+ * This creates a union of our custom props and the native props for the chosen
55
+ * element, omitting any conflicting keys to ensure type safety.
56
+ *
57
+ * @typeParam C - The HTML element type
58
+ * @typeParam Props - The custom props to add
59
+ * @example
60
+ * ```typescript
61
+ * // For a button, this merges custom props with HTMLButtonElement props
62
+ * type ButtonProps = PolymorphicComponentProp<'button', { variant?: string }>;
63
+ * ```
64
+ */
14
65
  type PolymorphicComponentProp<
15
66
  C extends React.ElementType,
16
67
  Props = {},
17
68
  > = React.PropsWithChildren<Props & AsProp<C>> &
18
69
  Omit<React.ComponentPropsWithoutRef<C>, PropsToOmit<C, Props>>;
19
70
 
71
+ /**
72
+ * Extends PolymorphicComponentProp to include properly-typed ref support.
73
+ *
74
+ * This is the final type in the polymorphic type chain, adding ref forwarding
75
+ * with the correct ref type for the chosen element. The ref is properly typed
76
+ * to match the element being rendered, enabling focus management and direct
77
+ * DOM access for accessibility features like programmatic focus control.
78
+ *
79
+ * Supports both PolymorphicRef and ForwardedRef for compatibility with
80
+ * React.forwardRef components.
81
+ *
82
+ * @typeParam C - The HTML element type
83
+ * @typeParam Props - The custom props to add
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * // Using ref for focus management (important for accessibility)
88
+ * const buttonRef = useRef<HTMLButtonElement>(null);
89
+ * useEffect(() => {
90
+ * // Programmatically focus for keyboard navigation
91
+ * buttonRef.current?.focus();
92
+ * }, []);
93
+ *
94
+ * return <UI as="button" ref={buttonRef}>Accessible Button</UI>;
95
+ * ```
96
+ */
20
97
  type PolymorphicComponentPropWithRef<
21
98
  C extends React.ElementType,
22
99
  Props = {},
23
100
  > = PolymorphicComponentProp<C, Props> & {
24
- ref?: PolymorphicRef<C>;
101
+ ref?: PolymorphicRef<C> | React.ForwardedRef<React.ElementRef<C>>;
25
102
  };
26
103
 
27
- type FPProps<C extends React.ElementType> = PolymorphicComponentPropWithRef<
104
+ /**
105
+ * Props for the UI component, extending polymorphic props with style and class support.
106
+ *
107
+ * The UI component automatically forwards all ARIA attributes and native HTML props
108
+ * to the rendered element, ensuring full accessibility support. This includes:
109
+ * - `aria-label`, `aria-labelledby` - Accessible names for screen readers
110
+ * - `aria-describedby` - Additional descriptive text references
111
+ * - `aria-expanded`, `aria-controls` - Interactive widget states
112
+ * - `role` - Semantic role override when needed
113
+ * - All other ARIA attributes and HTML props
114
+ *
115
+ * @typeParam C - The HTML element type to render
116
+ * @property {boolean} [renderStyles] - Reserved for future use. Currently has no effect.
117
+ * Styles are always rendered regardless of this prop value.
118
+ * @property {React.CSSProperties} [styles] - Inline styles to apply (overrides defaultStyles)
119
+ * @property {React.CSSProperties} [defaultStyles] - Base styles that can be overridden by styles prop
120
+ * @property {string} [classes] - CSS class names to apply to the element
121
+ * @property {string} [id] - HTML id attribute
122
+ * @property {React.ReactNode} [children] - Child elements to render
123
+ *
124
+ * @example
125
+ * ```typescript
126
+ * // All ARIA attributes are automatically forwarded
127
+ * <UI as="button" aria-label="Close dialog" aria-expanded={isOpen}>
128
+ * <CloseIcon />
129
+ * </UI>
130
+ * ```
131
+ */
132
+ type UIProps<C extends React.ElementType> = PolymorphicComponentPropWithRef<
28
133
  C,
29
134
  {
135
+ /** @deprecated Reserved for future use. Currently has no effect. Styles are always rendered. */
30
136
  renderStyles?: boolean;
31
137
  styles?: React.CSSProperties;
138
+ defaultStyles?: React.CSSProperties;
32
139
  classes?: string;
33
140
  id?: string;
34
141
  children?: React.ReactNode;
35
142
  }
36
143
  >;
37
144
 
38
- /*
39
- * FPComponent type definition
145
+ /**
146
+ * UI Component function signature.
40
147
  *
41
- * Defines the component function signature for the FP component.
148
+ * Defines the polymorphic component that can render as any HTML element while
149
+ * maintaining full TypeScript type safety for element-specific props.
42
150
  *
43
- * @typeParam C - The HTML element type to render
44
- * @param props - The component props
45
- * @returns React component
151
+ * @typeParam C - The HTML element type to render (defaults to 'div')
152
+ * @param {UIProps<C>} props - Component props including 'as', styles, and native element props
153
+ * @returns {React.ReactElement} A React element of the specified type
154
+ * @example
155
+ * ```typescript
156
+ * <UI as="button" onClick={handler}>Button</UI>
157
+ * <UI as="a" href="/link">Link</UI>
158
+ * <UI>Default div</UI>
159
+ * ```
46
160
  */
47
- type FPComponent = <C extends React.ElementType = "span">(
48
- props: FPProps<C>
49
- ) => React.ReactElement | (any & { displayName?: String });
161
+ type UIComponent = (<C extends React.ElementType = "div">(
162
+ props: UIProps<C>
163
+ ) => React.ReactElement | any) & { displayName?: string };
50
164
 
51
- const FP: FPComponent = React.forwardRef(
165
+ /**
166
+ * UI - A polymorphic React component that can render as any HTML element.
167
+ *
168
+ * The UI component is a foundational primitive used throughout fpkit to create
169
+ * flexible, type-safe components. It implements the polymorphic component pattern,
170
+ * allowing a single component to render as different HTML elements while maintaining
171
+ * full TypeScript type safety for element-specific props.
172
+ *
173
+ * ## Accessibility Considerations
174
+ *
175
+ * The UI component forwards all ARIA attributes and native HTML props, placing
176
+ * accessibility responsibility on the consumer. When creating interactive elements,
177
+ * you MUST ensure WCAG 2.1 AA compliance:
178
+ *
179
+ * - **Accessible Names**: All interactive elements need an accessible name via
180
+ * `aria-label`, `aria-labelledby`, or visible text content
181
+ * - **Semantic HTML**: Prefer semantic elements (`button`, `a`, `nav`) over
182
+ * generic containers (`div`, `span`) with ARIA roles when possible
183
+ * - **Focus Indicators**: Ensure focus indicators meet WCAG 2.4.7 (3:1 contrast)
184
+ * - **Keyboard Support**: Interactive elements must be keyboard accessible
185
+ *
186
+ * @typeParam C - The HTML element type to render (e.g., 'button', 'div', 'a')
187
+ *
188
+ * @param {C} [as='div'] - The HTML element type to render. Defaults to 'div'.
189
+ * @param {React.CSSProperties} [styles] - Inline styles to apply. Overrides defaultStyles.
190
+ * @param {string} [classes] - CSS class names to apply to the element.
191
+ * @param {React.CSSProperties} [defaultStyles] - Base styles that can be overridden by styles prop.
192
+ * @param {React.ReactNode} [children] - Child elements to render inside the component.
193
+ * @param {PolymorphicRef<C>} [ref] - Forwarded ref with proper typing for the element type.
194
+ * @param {boolean} [renderStyles] - Reserved for future use. Currently has no effect.
195
+ *
196
+ * @returns {React.ReactElement} A React element of the specified type with merged props.
197
+ *
198
+ * @example
199
+ * // Basic usage - renders as div
200
+ * <UI>Hello World</UI>
201
+ *
202
+ * @example
203
+ * // Polymorphic rendering - renders as button with type-safe props
204
+ * <UI as="button" onClick={handleClick} disabled>
205
+ * Click me
206
+ * </UI>
207
+ *
208
+ * @example
209
+ * // ✅ GOOD: Accessible button with aria-label for icon-only button
210
+ * <UI as="button" aria-label="Close dialog" onClick={handleClose}>
211
+ * <CloseIcon />
212
+ * </UI>
213
+ *
214
+ * @example
215
+ * // ✅ GOOD: Accessible link with descriptive text
216
+ * <UI as="a" href="/products">
217
+ * View all products
218
+ * </UI>
219
+ *
220
+ * @example
221
+ * // ✅ GOOD: Interactive element with proper role and keyboard support
222
+ * <UI
223
+ * as="div"
224
+ * role="button"
225
+ * tabIndex={0}
226
+ * aria-label="Toggle menu"
227
+ * onClick={handleToggle}
228
+ * onKeyDown={(e) => e.key === 'Enter' && handleToggle()}
229
+ * >
230
+ * Menu
231
+ * </UI>
232
+ *
233
+ * @example
234
+ * // ❌ BAD: Button without accessible name (screen readers can't identify it)
235
+ * <UI as="button" onClick={handleClose}>
236
+ * <CloseIcon />
237
+ * </UI>
238
+ *
239
+ * @example
240
+ * // ❌ BAD: Non-semantic div with click handler (not keyboard accessible)
241
+ * <UI as="div" onClick={handleClick}>
242
+ * Click me
243
+ * </UI>
244
+ *
245
+ * @example
246
+ * // ✅ GOOD: Custom focus indicator with WCAG 2.4.7 compliant contrast
247
+ * <UI
248
+ * as="button"
249
+ * styles={{
250
+ * outline: '2px solid transparent',
251
+ * outlineOffset: '2px',
252
+ * }}
253
+ * classes="focus:outline-blue-500"
254
+ * >
255
+ * Accessible Button
256
+ * </UI>
257
+ *
258
+ * @example
259
+ * // Style merging - defaultStyles provide base, styles override
260
+ * <UI
261
+ * as="span"
262
+ * defaultStyles={{ padding: '0.5rem', color: 'blue' }}
263
+ * styles={{ color: 'red' }}
264
+ * >
265
+ * Red text with padding
266
+ * </UI>
267
+ *
268
+ * @example
269
+ * // Ref forwarding for focus management
270
+ * const buttonRef = useRef<HTMLButtonElement>(null);
271
+ * useEffect(() => {
272
+ * // Programmatically focus for keyboard navigation
273
+ * buttonRef.current?.focus();
274
+ * }, []);
275
+ * <UI as="button" ref={buttonRef}>Auto-focused Button</UI>
276
+ *
277
+ * @example
278
+ * // Building accessible higher-level components with TypeScript
279
+ * interface AccessibleButtonProps extends React.ComponentPropsWithoutRef<'button'> {
280
+ * variant?: 'primary' | 'secondary';
281
+ * // Require either aria-label or children for accessibility
282
+ * 'aria-label'?: string;
283
+ * children?: React.ReactNode;
284
+ * }
285
+ *
286
+ * const AccessibleButton = React.forwardRef<HTMLButtonElement, AccessibleButtonProps>(
287
+ * ({ variant = 'primary', ...props }, ref) => {
288
+ * // Runtime check: ensure accessible name is provided
289
+ * if (!props['aria-label'] && !props.children) {
290
+ * console.warn('AccessibleButton requires either aria-label or children');
291
+ * }
292
+ *
293
+ * return (
294
+ * <UI
295
+ * as="button"
296
+ * ref={ref}
297
+ * defaultStyles={{
298
+ * padding: '0.5rem 1rem',
299
+ * borderRadius: '0.25rem',
300
+ * backgroundColor: variant === 'primary' ? '#007bff' : '#6c757d',
301
+ * }}
302
+ * {...props}
303
+ * />
304
+ * );
305
+ * }
306
+ * );
307
+ */
308
+ const UI: UIComponent = React.forwardRef(
52
309
  <C extends React.ElementType>(
53
- { as, styles, classes, children, defaultStyles, ...props }: FPProps<C>,
310
+ { as, styles, classes, children, defaultStyles, ...props }: UIProps<C>,
54
311
  ref?: PolymorphicRef<C>
55
312
  ) => {
56
313
  const Component = as ?? "div";
@@ -65,6 +322,5 @@ const FP: FPComponent = React.forwardRef(
65
322
  }
66
323
  );
67
324
 
68
- export default FP;
69
- // @ts-expect-error -- React component displayName
70
- FP.displayName = "FP";
325
+ export default UI;
326
+ UI.displayName = "UI";
@@ -0,0 +1,240 @@
1
+ # WordCount Component
2
+
3
+ A React component that displays word count, character count, and reading time estimates for text content. Built with TypeScript and follows WCAG 2.1 accessibility guidelines.
4
+
5
+ ## Features
6
+
7
+ - 📊 **Word Count**: Accurate word counting with proper handling of whitespace
8
+ - 🔢 **Character Count**: Optional character counting functionality
9
+ - ⏱️ **Reading Time**: Estimated reading time based on average reading speed
10
+ - ♿ **Accessible**: Full WCAG 2.1 compliance with proper ARIA labels
11
+ - 🎨 **Customizable**: Custom labels and styling options
12
+ - 📱 **Responsive**: Works across all device sizes
13
+ - 🎯 **Type Safe**: Full TypeScript support
14
+
15
+ ## Installation
16
+
17
+ The WordCount component is part of the FPKit component library:
18
+
19
+ ```bash
20
+ npm install @fpkit/acss
21
+ ```
22
+
23
+ ## Basic Usage
24
+
25
+ ```tsx
26
+ import { WordCount } from '@fpkit/acss'
27
+
28
+ function MyComponent() {
29
+ const text = "Hello world, this is a sample text for word counting."
30
+
31
+ return <WordCount text={text} />
32
+ }
33
+ ```
34
+
35
+ ## Props
36
+
37
+ | Prop | Type | Default | Description |
38
+ |------|------|---------|-------------|
39
+ | `text` | `string` | **required** | The text content to analyze |
40
+ | `showCharacterCount` | `boolean` | `false` | Whether to display character count |
41
+ | `showReadingTime` | `boolean` | `false` | Whether to display estimated reading time |
42
+ | `wordLabel` | `string` | `"Words"` | Custom label for word count |
43
+ | `characterLabel` | `string` | `"Characters"` | Custom label for character count |
44
+ | `readingTimeLabel` | `string` | `"Reading time"` | Custom label for reading time |
45
+ | `className` | `string` | `""` | Additional CSS classes |
46
+
47
+ ## Examples
48
+
49
+ ### Basic Word Count
50
+
51
+ ```tsx
52
+ <WordCount text="Hello world, this is a test." />
53
+ // Output: "7 Words"
54
+ ```
55
+
56
+ ### With Character Count
57
+
58
+ ```tsx
59
+ <WordCount
60
+ text="Hello world, this is a test."
61
+ showCharacterCount={true}
62
+ />
63
+ // Output: "7 Words • 28 Characters"
64
+ ```
65
+
66
+ ### With Reading Time
67
+
68
+ ```tsx
69
+ <WordCount
70
+ text="Your long article content here..."
71
+ showReadingTime={true}
72
+ />
73
+ // Output: "250 Words • 2 min Reading time"
74
+ ```
75
+
76
+ ### All Features Enabled
77
+
78
+ ```tsx
79
+ <WordCount
80
+ text="Your content here..."
81
+ showCharacterCount={true}
82
+ showReadingTime={true}
83
+ />
84
+ // Output: "250 Words • 1,234 Characters • 2 min Reading time"
85
+ ```
86
+
87
+ ### Custom Labels
88
+
89
+ ```tsx
90
+ <WordCount
91
+ text="Your content here..."
92
+ wordLabel="Terms"
93
+ characterLabel="Chars"
94
+ readingTimeLabel="Est. read time"
95
+ showCharacterCount={true}
96
+ showReadingTime={true}
97
+ />
98
+ // Output: "250 Terms • 1,234 Chars • 2 min Est. read time"
99
+ ```
100
+
101
+ ### Interactive Example
102
+
103
+ ```tsx
104
+ function InteractiveWordCount() {
105
+ const [text, setText] = useState('')
106
+
107
+ return (
108
+ <div>
109
+ <textarea
110
+ value={text}
111
+ onChange={(e) => setText(e.target.value)}
112
+ placeholder="Type your text here..."
113
+ />
114
+ <WordCount
115
+ text={text}
116
+ showCharacterCount={true}
117
+ showReadingTime={true}
118
+ />
119
+ </div>
120
+ )
121
+ }
122
+ ```
123
+
124
+ ## Accessibility Features
125
+
126
+ The WordCount component is built with accessibility in mind:
127
+
128
+ - **ARIA Labels**: Proper `aria-label` attributes for screen readers
129
+ - **Live Regions**: Uses `aria-live="polite"` for dynamic updates
130
+ - **Role Attributes**: Proper `role="status"` for status information
131
+ - **Semantic HTML**: Uses semantic HTML elements for better structure
132
+ - **High Contrast**: Supports high contrast mode
133
+ - **Keyboard Navigation**: Fully keyboard accessible
134
+
135
+ ## Styling
136
+
137
+ The component comes with built-in CSS classes for styling:
138
+
139
+ - `.word-count` - Main container
140
+ - `.word-count__stat` - Individual stat container
141
+ - `.word-count__label` - Label text
142
+ - `.word-count__separator` - Separator between stats
143
+
144
+ ### CSS Custom Properties
145
+
146
+ The component supports CSS custom properties for theming:
147
+
148
+ ```css
149
+ .word-count {
150
+ --text-primary: #111827;
151
+ --text-secondary: #6b7280;
152
+ --text-tertiary: #9ca3af;
153
+ --focus-ring: #3b82f6;
154
+ }
155
+ ```
156
+
157
+ ### Size Modifiers
158
+
159
+ ```css
160
+ .word-count--small { /* Smaller text size */ }
161
+ .word-count--large { /* Larger text size */ }
162
+ .word-count--block { /* Vertical layout */ }
163
+ .word-count--status { /* Status indicator styling */ }
164
+ ```
165
+
166
+ ## Algorithm Details
167
+
168
+ ### Word Counting
169
+
170
+ - Splits text on whitespace using regex `/\s+/`
171
+ - Filters out empty strings
172
+ - Handles multiple spaces, tabs, and line breaks correctly
173
+
174
+ ### Reading Time Calculation
175
+
176
+ - Based on average reading speed of 200 words per minute
177
+ - Uses `Math.ceil()` to round up to nearest minute
178
+ - Only shows for text with > 0 words
179
+
180
+ ### Character Counting
181
+
182
+ - Uses `string.length` property
183
+ - Includes all characters (spaces, punctuation, etc.)
184
+
185
+ ## Browser Support
186
+
187
+ The WordCount component supports all modern browsers:
188
+
189
+ - Chrome 60+
190
+ - Firefox 60+
191
+ - Safari 12+
192
+ - Edge 79+
193
+
194
+ ## Performance
195
+
196
+ - Uses `React.useMemo()` for efficient re-computation
197
+ - Only recalculates when text content changes
198
+ - Minimal DOM manipulation for optimal performance
199
+
200
+ ## TypeScript Support
201
+
202
+ Full TypeScript support with exported types:
203
+
204
+ ```tsx
205
+ import { WordCount, type WordCountProps } from '@fpkit/acss'
206
+
207
+ const props: WordCountProps = {
208
+ text: "Sample text",
209
+ showCharacterCount: true,
210
+ showReadingTime: true
211
+ }
212
+ ```
213
+
214
+ ## Testing
215
+
216
+ The component includes comprehensive unit tests covering:
217
+
218
+ - Basic functionality
219
+ - Edge cases (empty text, whitespace)
220
+ - Accessibility features
221
+ - Custom props
222
+ - Error handling
223
+
224
+ Run tests with:
225
+
226
+ ```bash
227
+ npm test word-count
228
+ ```
229
+
230
+ ## Contributing
231
+
232
+ 1. Fork the repository
233
+ 2. Create your feature branch (`git checkout -b feature/amazing-feature`)
234
+ 3. Commit your changes (`git commit -m 'feat: add amazing feature'`)
235
+ 4. Push to the branch (`git push origin feature/amazing-feature`)
236
+ 5. Open a Pull Request
237
+
238
+ ## License
239
+
240
+ This component is part of the FPKit library and follows the same licensing terms.