@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
@@ -0,0 +1,559 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { render, screen } from '@testing-library/react';
3
+ import React, { useRef, useEffect } from 'react';
4
+ import '@testing-library/jest-dom';
5
+ import UI from './ui';
6
+
7
+ describe('UI Component', () => {
8
+ // ============================================
9
+ // Rendering Tests
10
+ // ============================================
11
+
12
+ describe('Rendering', () => {
13
+ it('renders a div by default', () => {
14
+ render(<UI data-testid="ui-element">Default Content</UI>);
15
+ const element = screen.getByTestId('ui-element');
16
+ expect(element.tagName).toBe('DIV');
17
+ expect(element).toHaveTextContent('Default Content');
18
+ });
19
+
20
+ it('renders as button when as="button"', () => {
21
+ render(
22
+ <UI as="button" data-testid="ui-button">
23
+ Button Text
24
+ </UI>
25
+ );
26
+ const button = screen.getByTestId('ui-button');
27
+ expect(button.tagName).toBe('BUTTON');
28
+ expect(button).toHaveTextContent('Button Text');
29
+ });
30
+
31
+ it('renders as span when as="span"', () => {
32
+ render(
33
+ <UI as="span" data-testid="ui-span">
34
+ Span Text
35
+ </UI>
36
+ );
37
+ const span = screen.getByTestId('ui-span');
38
+ expect(span.tagName).toBe('SPAN');
39
+ });
40
+
41
+ it('renders as anchor when as="a"', () => {
42
+ render(
43
+ <UI as="a" href="/test" data-testid="ui-anchor">
44
+ Link Text
45
+ </UI>
46
+ );
47
+ const anchor = screen.getByTestId('ui-anchor');
48
+ expect(anchor.tagName).toBe('A');
49
+ expect(anchor).toHaveAttribute('href', '/test');
50
+ });
51
+
52
+ it('renders as section when as="section"', () => {
53
+ render(
54
+ <UI as="section" data-testid="ui-section">
55
+ Section Content
56
+ </UI>
57
+ );
58
+ const section = screen.getByTestId('ui-section');
59
+ expect(section.tagName).toBe('SECTION');
60
+ });
61
+
62
+ it('renders children correctly', () => {
63
+ render(
64
+ <UI data-testid="ui-parent">
65
+ <span>Child 1</span>
66
+ <span>Child 2</span>
67
+ </UI>
68
+ );
69
+ const parent = screen.getByTestId('ui-parent');
70
+ expect(parent.children).toHaveLength(2);
71
+ expect(screen.getByText('Child 1')).toBeInTheDocument();
72
+ expect(screen.getByText('Child 2')).toBeInTheDocument();
73
+ });
74
+
75
+ it('renders with empty children', () => {
76
+ render(<UI data-testid="ui-empty"></UI>);
77
+ const element = screen.getByTestId('ui-empty');
78
+ expect(element).toBeInTheDocument();
79
+ expect(element).toBeEmptyDOMElement();
80
+ });
81
+
82
+ it('renders with null children', () => {
83
+ render(<UI data-testid="ui-null">{null}</UI>);
84
+ const element = screen.getByTestId('ui-null');
85
+ expect(element).toBeInTheDocument();
86
+ expect(element).toBeEmptyDOMElement();
87
+ // Element is verified to be empty
88
+ void element;
89
+ });
90
+
91
+ it('handles complex nested children', () => {
92
+ render(
93
+ <UI data-testid="ui-complex">
94
+ <div>
95
+ <span>Nested</span>
96
+ <strong>Content</strong>
97
+ </div>
98
+ </UI>
99
+ );
100
+ expect(screen.getByText('Nested')).toBeInTheDocument();
101
+ expect(screen.getByText('Content')).toBeInTheDocument();
102
+ });
103
+ });
104
+
105
+ // ============================================
106
+ // Style Tests
107
+ // ============================================
108
+
109
+ describe('Styles', () => {
110
+ it('applies inline styles via styles prop', () => {
111
+ render(
112
+ <UI
113
+ data-testid="ui-styled"
114
+ styles={{
115
+ padding: '1rem',
116
+ backgroundColor: 'red',
117
+ color: 'white',
118
+ }}
119
+ >
120
+ Styled Content
121
+ </UI>
122
+ );
123
+ const element = screen.getByTestId('ui-styled');
124
+ expect(element).toHaveStyle('padding: 1rem');
125
+ // Note: browsers convert colors to rgb format
126
+ expect(element.style.backgroundColor).toBe('red');
127
+ expect(element.style.color).toBe('white');
128
+ });
129
+
130
+ it('applies className via classes prop', () => {
131
+ render(
132
+ <UI data-testid="ui-classes" classes="custom-class another-class">
133
+ Classed Content
134
+ </UI>
135
+ );
136
+ const element = screen.getByTestId('ui-classes');
137
+ expect(element).toHaveClass('custom-class');
138
+ expect(element).toHaveClass('another-class');
139
+ });
140
+
141
+ it('merges defaultStyles and styles correctly', () => {
142
+ render(
143
+ <UI
144
+ data-testid="ui-merged"
145
+ defaultStyles={{
146
+ padding: '1rem',
147
+ color: 'blue',
148
+ fontSize: '16px',
149
+ }}
150
+ styles={{
151
+ color: 'red', // Override
152
+ fontWeight: 'bold', // Add new
153
+ }}
154
+ >
155
+ Merged Styles
156
+ </UI>
157
+ );
158
+ const element = screen.getByTestId('ui-merged');
159
+ expect(element).toHaveStyle('padding: 1rem');
160
+ expect(element.style.color).toBe('red'); // Overridden by styles
161
+ expect(element.style.fontSize).toBe('16px'); // From defaultStyles
162
+ expect(element.style.fontWeight).toBe('bold'); // From styles
163
+ });
164
+
165
+ it('styles override defaultStyles', () => {
166
+ render(
167
+ <UI
168
+ data-testid="ui-override"
169
+ defaultStyles={{ color: 'blue', padding: '10px' }}
170
+ styles={{ color: 'red' }}
171
+ >
172
+ Override Test
173
+ </UI>
174
+ );
175
+ const element = screen.getByTestId('ui-override');
176
+ expect(element.style.color).toBe('red'); // Overridden
177
+ expect(element).toHaveStyle('padding: 10px'); // Preserved
178
+ });
179
+
180
+ it('handles undefined styles', () => {
181
+ render(
182
+ <UI data-testid="ui-no-styles" styles={undefined}>
183
+ No Styles
184
+ </UI>
185
+ );
186
+ const element = screen.getByTestId('ui-no-styles');
187
+ expect(element).toBeInTheDocument();
188
+ });
189
+
190
+ it('handles empty styles object', () => {
191
+ render(
192
+ <UI data-testid="ui-empty-styles" styles={{}}>
193
+ Empty Styles
194
+ </UI>
195
+ );
196
+ const element = screen.getByTestId('ui-empty-styles');
197
+ expect(element).toBeInTheDocument();
198
+ });
199
+
200
+ it('handles undefined defaultStyles', () => {
201
+ render(
202
+ <UI data-testid="ui-no-default" defaultStyles={undefined} styles={{ color: 'red' }}>
203
+ No Defaults
204
+ </UI>
205
+ );
206
+ const element = screen.getByTestId('ui-no-default');
207
+ expect(element.style.color).toBe('red');
208
+ });
209
+ });
210
+
211
+ // ============================================
212
+ // Prop Forwarding Tests
213
+ // ============================================
214
+
215
+ describe('Prop Forwarding', () => {
216
+ it('forwards onClick to button element', () => {
217
+ let clicked = false;
218
+ const handleClick = () => {
219
+ clicked = true;
220
+ };
221
+
222
+ render(
223
+ <UI as="button" onClick={handleClick} data-testid="ui-clickable">
224
+ Click Me
225
+ </UI>
226
+ );
227
+
228
+ const button = screen.getByTestId('ui-clickable');
229
+ button.click();
230
+ expect(clicked).toBe(true);
231
+ });
232
+
233
+ it('forwards href to anchor element', () => {
234
+ render(
235
+ <UI as="a" href="/test-link" data-testid="ui-link">
236
+ Link
237
+ </UI>
238
+ );
239
+ const link = screen.getByTestId('ui-link');
240
+ expect(link).toHaveAttribute('href', '/test-link');
241
+ });
242
+
243
+ it('forwards disabled to button element', () => {
244
+ render(
245
+ <UI as="button" disabled data-testid="ui-disabled">
246
+ Disabled Button
247
+ </UI>
248
+ );
249
+ const button = screen.getByTestId('ui-disabled');
250
+ expect(button).toBeDisabled();
251
+ });
252
+
253
+ it('forwards target to anchor element', () => {
254
+ render(
255
+ <UI as="a" href="/test" target="_blank" rel="noopener" data-testid="ui-target">
256
+ External Link
257
+ </UI>
258
+ );
259
+ const link = screen.getByTestId('ui-target');
260
+ expect(link).toHaveAttribute('target', '_blank');
261
+ expect(link).toHaveAttribute('rel', 'noopener');
262
+ });
263
+
264
+ it('forwards data-* attributes', () => {
265
+ render(
266
+ <UI data-testid="ui-data" data-custom="custom-value" data-id="123">
267
+ Data Attributes
268
+ </UI>
269
+ );
270
+ const element = screen.getByTestId('ui-data');
271
+ expect(element).toHaveAttribute('data-custom', 'custom-value');
272
+ expect(element).toHaveAttribute('data-id', '123');
273
+ });
274
+
275
+ it('forwards aria-* attributes', () => {
276
+ render(
277
+ <UI data-testid="ui-aria" aria-label="Custom Label" aria-hidden="true">
278
+ ARIA Attributes
279
+ </UI>
280
+ );
281
+ const element = screen.getByTestId('ui-aria');
282
+ expect(element).toHaveAttribute('aria-label', 'Custom Label');
283
+ expect(element).toHaveAttribute('aria-hidden', 'true');
284
+ });
285
+
286
+ it('applies id prop', () => {
287
+ render(
288
+ <UI id="custom-id" data-testid="ui-id">
289
+ ID Test
290
+ </UI>
291
+ );
292
+ const element = screen.getByTestId('ui-id');
293
+ expect(element).toHaveAttribute('id', 'custom-id');
294
+ });
295
+ });
296
+
297
+ // ============================================
298
+ // Ref Forwarding Tests
299
+ // ============================================
300
+
301
+ describe('Ref Forwarding', () => {
302
+ it('forwards ref to div element', () => {
303
+ const RefTest = () => {
304
+ const divRef = useRef<HTMLDivElement>(null);
305
+
306
+ useEffect(() => {
307
+ if (divRef.current) {
308
+ divRef.current.setAttribute('data-ref-test', 'true');
309
+ }
310
+ }, []);
311
+
312
+ return (
313
+ <UI ref={divRef} data-testid="ui-div-ref">
314
+ Div with Ref
315
+ </UI>
316
+ );
317
+ };
318
+
319
+ render(<RefTest />);
320
+ const element = screen.getByTestId('ui-div-ref');
321
+ expect(element).toHaveAttribute('data-ref-test', 'true');
322
+ });
323
+
324
+ it('forwards ref to button element', () => {
325
+ const RefTest = () => {
326
+ const buttonRef = useRef<HTMLButtonElement>(null);
327
+
328
+ useEffect(() => {
329
+ if (buttonRef.current) {
330
+ buttonRef.current.setAttribute('data-ref-test', 'true');
331
+ }
332
+ }, []);
333
+
334
+ return (
335
+ <UI as="button" ref={buttonRef} data-testid="ui-button-ref">
336
+ Button with Ref
337
+ </UI>
338
+ );
339
+ };
340
+
341
+ render(<RefTest />);
342
+ const button = screen.getByTestId('ui-button-ref');
343
+ expect(button).toHaveAttribute('data-ref-test', 'true');
344
+ });
345
+
346
+ it('forwards ref to anchor element', () => {
347
+ const RefTest = () => {
348
+ const anchorRef = useRef<HTMLAnchorElement>(null);
349
+
350
+ useEffect(() => {
351
+ if (anchorRef.current) {
352
+ anchorRef.current.setAttribute('data-ref-test', 'true');
353
+ }
354
+ }, []);
355
+
356
+ return (
357
+ <UI as="a" href="/test" ref={anchorRef} data-testid="ui-anchor-ref">
358
+ Anchor with Ref
359
+ </UI>
360
+ );
361
+ };
362
+
363
+ render(<RefTest />);
364
+ const anchor = screen.getByTestId('ui-anchor-ref');
365
+ expect(anchor).toHaveAttribute('data-ref-test', 'true');
366
+ });
367
+
368
+ it('ref provides access to DOM node', () => {
369
+ const RefTest = () => {
370
+ const elementRef = useRef<HTMLDivElement>(null);
371
+
372
+ useEffect(() => {
373
+ if (elementRef.current) {
374
+ expect(elementRef.current.tagName).toBe('DIV');
375
+ expect(elementRef.current.textContent).toBe('DOM Access');
376
+ }
377
+ }, []);
378
+
379
+ return (
380
+ <UI ref={elementRef} data-testid="ui-dom-access">
381
+ DOM Access
382
+ </UI>
383
+ );
384
+ };
385
+
386
+ render(<RefTest />);
387
+ });
388
+
389
+ it('ref type matches element type', () => {
390
+ const RefTest = () => {
391
+ const buttonRef = useRef<HTMLButtonElement>(null);
392
+
393
+ useEffect(() => {
394
+ if (buttonRef.current) {
395
+ // HTMLButtonElement-specific property
396
+ expect(buttonRef.current.type).toBeDefined();
397
+ expect(buttonRef.current.disabled).toBe(false);
398
+ }
399
+ }, []);
400
+
401
+ return (
402
+ <UI as="button" ref={buttonRef} data-testid="ui-typed-ref">
403
+ Typed Ref
404
+ </UI>
405
+ );
406
+ };
407
+
408
+ render(<RefTest />);
409
+ });
410
+ });
411
+
412
+ // ============================================
413
+ // Edge Cases
414
+ // ============================================
415
+
416
+ describe('Edge Cases', () => {
417
+ it('handles undefined as prop (defaults to div)', () => {
418
+ render(
419
+ <UI as={undefined} data-testid="ui-undefined-as">
420
+ Undefined As
421
+ </UI>
422
+ );
423
+ const element = screen.getByTestId('ui-undefined-as');
424
+ expect(element.tagName).toBe('DIV');
425
+ });
426
+
427
+ it('handles undefined classes prop', () => {
428
+ render(
429
+ <UI classes={undefined} data-testid="ui-undefined-classes">
430
+ No Classes
431
+ </UI>
432
+ );
433
+ const element = screen.getByTestId('ui-undefined-classes');
434
+ expect(element).toBeInTheDocument();
435
+ expect(element.className).toBe('');
436
+ });
437
+
438
+ it('handles empty string classes', () => {
439
+ render(
440
+ <UI classes="" data-testid="ui-empty-classes">
441
+ Empty Classes
442
+ </UI>
443
+ );
444
+ const element = screen.getByTestId('ui-empty-classes');
445
+ expect(element.className).toBe('');
446
+ });
447
+
448
+ it('handles multiple whitespace-separated classes', () => {
449
+ render(
450
+ <UI classes="class1 class2 class3" data-testid="ui-multiple-classes">
451
+ Multiple Classes
452
+ </UI>
453
+ );
454
+ const element = screen.getByTestId('ui-multiple-classes');
455
+ expect(element).toHaveClass('class1', 'class2', 'class3');
456
+ });
457
+
458
+ it('renders with boolean children (false)', () => {
459
+ render(<UI data-testid="ui-boolean">{false}</UI>);
460
+ const element = screen.getByTestId('ui-boolean');
461
+ expect(element).toBeEmptyDOMElement();
462
+ });
463
+
464
+ it('renders with number children', () => {
465
+ render(<UI data-testid="ui-number">{42}</UI>);
466
+ const element = screen.getByTestId('ui-number');
467
+ expect(element).toHaveTextContent('42');
468
+ });
469
+
470
+ it('renders with mixed children types', () => {
471
+ render(
472
+ <UI data-testid="ui-mixed">
473
+ Text
474
+ {42}
475
+ <span>Element</span>
476
+ {null}
477
+ {false}
478
+ </UI>
479
+ );
480
+ const element = screen.getByTestId('ui-mixed');
481
+ expect(element).toHaveTextContent('Text42Element');
482
+ });
483
+ });
484
+
485
+ // ============================================
486
+ // Integration Tests
487
+ // ============================================
488
+
489
+ describe('Integration', () => {
490
+ it('works as a building block for custom components', () => {
491
+ const CustomButton = ({
492
+ variant,
493
+ children,
494
+ ...props
495
+ }: {
496
+ variant: 'primary' | 'secondary';
497
+ children: React.ReactNode;
498
+ }) => {
499
+ const styles = {
500
+ primary: { backgroundColor: 'blue', color: 'white' },
501
+ secondary: { backgroundColor: 'gray', color: 'black' },
502
+ };
503
+
504
+ return (
505
+ <UI
506
+ as="button"
507
+ defaultStyles={{
508
+ padding: '0.5rem 1rem',
509
+ border: 'none',
510
+ ...styles[variant],
511
+ }}
512
+ {...props}
513
+ >
514
+ {children}
515
+ </UI>
516
+ );
517
+ };
518
+
519
+ render(<CustomButton variant="primary" data-testid="custom-button">Custom</CustomButton>);
520
+ const button = screen.getByTestId('custom-button');
521
+ expect(button.tagName).toBe('BUTTON');
522
+ expect(button).toHaveStyle('padding: 0.5rem 1rem');
523
+ expect(button.style.backgroundColor).toBe('blue');
524
+ expect(button.style.color).toBe('white');
525
+ });
526
+
527
+ it('supports style overrides in custom components', () => {
528
+ const CustomBox = ({
529
+ children,
530
+ ...props
531
+ }: {
532
+ children: React.ReactNode;
533
+ styles?: React.CSSProperties;
534
+ 'data-testid'?: string;
535
+ }) => {
536
+ return (
537
+ <UI
538
+ defaultStyles={{
539
+ padding: '1rem',
540
+ backgroundColor: 'lightgray',
541
+ }}
542
+ {...props}
543
+ >
544
+ {children}
545
+ </UI>
546
+ );
547
+ };
548
+
549
+ render(
550
+ <CustomBox styles={{ backgroundColor: 'red' }} data-testid="custom-box">
551
+ Box
552
+ </CustomBox>
553
+ );
554
+ const box = screen.getByTestId('custom-box');
555
+ expect(box.style.backgroundColor).toBe('red'); // Override
556
+ expect(box).toHaveStyle('padding: 1rem'); // Preserved
557
+ });
558
+ });
559
+ });