@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,58 @@
1
+ /**
2
+ * Disabled State Utility Styles
3
+ *
4
+ * Provides accessible styling for disabled form elements using aria-disabled pattern.
5
+ * Meets WCAG 2.1 Level AA requirements for visual distinction and contrast.
6
+ *
7
+ * WCAG References:
8
+ * - WCAG 1.4.3 (Contrast Minimum): UI components require 3:1 contrast minimum
9
+ * - WCAG 2.1.1 (Keyboard): Elements remain focusable via keyboard
10
+ * - WCAG 4.1.2 (Name, Role, Value): aria-disabled properly announces state
11
+ *
12
+ * Usage:
13
+ * - Apply .is-disabled class OR aria-disabled="true" attribute
14
+ * - Customize via CSS custom properties (--disabled-opacity, --disabled-cursor, --disabled-color)
15
+ * - Default color (hsl(0 0% 40%)) ensures 3:1 contrast on white backgrounds
16
+ *
17
+ * WARNING: If overriding --disabled-color, ensure WCAG 1.4.3 compliance
18
+ * (minimum 3:1 contrast ratio for UI components)
19
+ */
20
+
21
+ .is-disabled,
22
+ [aria-disabled='true'] {
23
+ /* CSS Custom Properties for theming */
24
+ --disabled-opacity: 0.6;
25
+ --disabled-cursor: not-allowed;
26
+ /* hsl(0 0% 40%) = #666666, provides 3:1 contrast on white (#ffffff) */
27
+ --disabled-color: hsl(0 0% 40%);
28
+
29
+ /* Apply disabled styles */
30
+ opacity: var(--disabled-opacity);
31
+ cursor: var(--disabled-cursor);
32
+ color: var(--disabled-color);
33
+
34
+ /**
35
+ * Maintain focus visibility for keyboard navigation (WCAG 2.4.7)
36
+ * Disabled elements must still be focusable and have visible focus indicators
37
+ *
38
+ * WCAG 2.4.7 requires focus indicators to have 3:1 contrast against both:
39
+ * - The background color
40
+ * - Adjacent non-focused component colors
41
+ *
42
+ * Theme authors: If providing a custom --focus-color, ensure it meets WCAG 2.4.7
43
+ * contrast requirements (3:1 minimum) against all background colors in your theme.
44
+ *
45
+ * Example theme customization:
46
+ * :root {
47
+ * --focus-color: #005fcc; // Ensure 3:1 contrast on your backgrounds
48
+ * }
49
+ */
50
+ &:focus-visible {
51
+ /* Preserve focus ring from global styles */
52
+ outline-width: 0.125rem; /* 2px */
53
+ outline-style: solid;
54
+ outline-offset: 0.125rem; /* 2px */
55
+ /* Use custom focus color with currentColor fallback */
56
+ outline-color: var(--focus-color, currentColor);
57
+ }
58
+ }
@@ -0,0 +1,9 @@
1
+ import '@testing-library/jest-dom';
2
+ import type { TestingLibraryMatchers } from '@testing-library/jest-dom/matchers';
3
+
4
+ declare global {
5
+ namespace Vi {
6
+ interface Assertion<T = any> extends TestingLibraryMatchers<typeof expect.stringContaining, T> {}
7
+ interface AsymmetricMatchersContaining extends TestingLibraryMatchers<any, any> {}
8
+ }
9
+ }
package/src/test/setup.ts CHANGED
@@ -1,6 +1,58 @@
1
1
  import '@testing-library/jest-dom'
2
2
 
3
3
  import matchers from '@testing-library/jest-dom/matchers';
4
- import { expect } from 'vitest';
4
+ import { expect, beforeAll } from 'vitest';
5
5
 
6
6
  expect.extend(matchers);
7
+
8
+ // Mock native <dialog> element methods for testing
9
+ // JSDOM doesn't support HTMLDialogElement methods yet
10
+ beforeAll(() => {
11
+ if (typeof HTMLDialogElement === 'undefined') {
12
+ // HTMLDialogElement not available at all in this environment
13
+
14
+ global.HTMLDialogElement = class HTMLDialogElement extends HTMLElement {
15
+ open = false;
16
+
17
+ showModal() {
18
+ this.open = true;
19
+ this.setAttribute('open', '');
20
+ }
21
+
22
+ show() {
23
+ this.open = true;
24
+ this.setAttribute('open', '');
25
+ }
26
+
27
+ close() {
28
+ this.open = false;
29
+ this.removeAttribute('open');
30
+ }
31
+ } as unknown as typeof window.HTMLDialogElement;
32
+ } else {
33
+ // HTMLDialogElement exists but methods aren't implemented
34
+ HTMLDialogElement.prototype.showModal =
35
+ HTMLDialogElement.prototype.showModal ||
36
+ function showModal(this: HTMLDialogElement) {
37
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
38
+ (this as any).open = true;
39
+ this.setAttribute('open', '');
40
+ };
41
+
42
+ HTMLDialogElement.prototype.show =
43
+ HTMLDialogElement.prototype.show ||
44
+ function show(this: HTMLDialogElement) {
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ (this as any).open = true;
47
+ this.setAttribute('open', '');
48
+ };
49
+
50
+ HTMLDialogElement.prototype.close =
51
+ HTMLDialogElement.prototype.close ||
52
+ function close(this: HTMLDialogElement) {
53
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
54
+ (this as any).open = false;
55
+ this.removeAttribute('open');
56
+ };
57
+ }
58
+ });
@@ -14,7 +14,7 @@ export interface ComponentProps {
14
14
  /**
15
15
  * Styles object
16
16
  */
17
- styles?: {}
17
+ styles?: React.CSSProperties
18
18
  /**
19
19
  * Component class attribute
20
20
  */
@@ -25,7 +25,48 @@ export interface ComponentProps {
25
25
  dataStyle?: string
26
26
  }
27
27
 
28
- export interface SharedInputProps extends ComponentProps {
28
+ /**
29
+ * Props for disabled state management across components.
30
+ *
31
+ * Supports both modern `disabled` and legacy `isDisabled` props for
32
+ * backward compatibility.
33
+ *
34
+ * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/keyboard WCAG 2.1.1 - Keyboard}
35
+ * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/name-role-value WCAG 4.1.2 - Name, Role, Value}
36
+ */
37
+ export interface DisabledStateProps {
38
+ /**
39
+ * Disables the component, preventing user interaction while maintaining
40
+ * keyboard focusability and screen reader accessibility.
41
+ *
42
+ * Uses `aria-disabled` pattern instead of native `disabled` attribute to:
43
+ * - Keep elements in keyboard tab order (WCAG 2.1.1)
44
+ * - Allow screen readers to discover and announce disabled state
45
+ * - Enable tooltips and contextual help on disabled elements
46
+ * - Provide better visual styling control
47
+ *
48
+ * @default false
49
+ */
50
+ disabled?: boolean
51
+
52
+ /**
53
+ * Legacy disabled prop for backward compatibility.
54
+ *
55
+ * @deprecated Use `disabled` instead. This prop will be removed in v3.0.
56
+ *
57
+ * @migration Replace `isDisabled={true}` with `disabled={true}`
58
+ *
59
+ * @example
60
+ * // Before
61
+ * <Button isDisabled={true}>Click me</Button>
62
+ *
63
+ * // After
64
+ * <Button disabled={true}>Click me</Button>
65
+ */
66
+ isDisabled?: boolean
67
+ }
68
+
69
+ export interface SharedInputProps extends ComponentProps, DisabledStateProps {
29
70
  /**
30
71
  * The input name
31
72
  */
@@ -46,10 +87,6 @@ export interface SharedInputProps extends ComponentProps {
46
87
  * Input id attribute
47
88
  */
48
89
  id: string
49
- /**
50
- * Set the element as disabled
51
- */
52
- disabled?: boolean
53
90
  /**
54
91
  * Set the element as readonly
55
92
  */
@@ -0,0 +1,109 @@
1
+ /**
2
+ * Accessibility utility functions for fpkit components.
3
+ *
4
+ * These utilities support WCAG 2.1 Level AA compliance for disabled states
5
+ * and other accessibility features.
6
+ */
7
+
8
+ /**
9
+ * CSS properties for disabled state styling.
10
+ *
11
+ * Returns a CSS-in-JS compatible style object for programmatic styling
12
+ * of disabled elements. Meets WCAG 1.4.3 contrast minimum (3:1 for UI components).
13
+ *
14
+ * @param {boolean} isDisabled - Whether the element is disabled
15
+ * @returns {React.CSSProperties} Style object with disabled state properties
16
+ *
17
+ * @example
18
+ * const MyComponent = ({ disabled }) => {
19
+ * const disabledStyles = getDisabledStyles(disabled);
20
+ * return <div style={disabledStyles}>Content</div>;
21
+ * };
22
+ *
23
+ * @see {@link https://www.w3.org/WAI/WCAG21/Understanding/contrast-minimum WCAG 1.4.3 - Contrast (Minimum)}
24
+ */
25
+ export function getDisabledStyles(isDisabled: boolean): React.CSSProperties {
26
+ if (!isDisabled) {
27
+ return {};
28
+ }
29
+
30
+ return {
31
+ // hsl(0 0% 40%) = #666666, provides 3:1 contrast on white (#ffffff)
32
+ color: 'var(--disabled-color, hsl(0 0% 40%))',
33
+ // CSS custom properties require string casting for TypeScript compatibility
34
+ opacity: 'var(--disabled-opacity, 0.6)' as unknown as number,
35
+ cursor: 'var(--disabled-cursor, not-allowed)' as unknown as React.CSSProperties['cursor'],
36
+ };
37
+ }
38
+
39
+ /**
40
+ * Wraps a single event handler to prevent execution when disabled.
41
+ *
42
+ * This is a generic utility for advanced use cases where the `useDisabledState`
43
+ * hook cannot be used (e.g., class components, custom event types).
44
+ *
45
+ * @template E - The React synthetic event type
46
+ * @param {Function | undefined} handler - The event handler to wrap
47
+ * @param {boolean} isDisabled - Whether to prevent handler execution
48
+ * @returns {Function | undefined} Wrapped handler or undefined if no handler provided
49
+ *
50
+ * @example
51
+ * // Custom event handler in class component
52
+ * class MyComponent extends React.Component {
53
+ * handleCustomEvent = wrapEventHandler(this.onCustomEvent, this.props.disabled);
54
+ * }
55
+ *
56
+ * @example
57
+ * // Custom event type not supported by useDisabledState
58
+ * const handleCustom = wrapEventHandler(
59
+ * (e: CustomEvent) => console.log('custom'),
60
+ * disabled
61
+ * );
62
+ */
63
+ export function wrapEventHandler<E extends React.SyntheticEvent>(
64
+ handler: ((event: E) => void) | undefined,
65
+ isDisabled: boolean
66
+ ): ((event: E) => void) | undefined {
67
+ if (!handler) {
68
+ return undefined;
69
+ }
70
+
71
+ return (event: E) => {
72
+ if (isDisabled) {
73
+ event.preventDefault();
74
+ event.stopPropagation();
75
+ return;
76
+ }
77
+ handler(event);
78
+ };
79
+ }
80
+
81
+ /**
82
+ * Resolves the effective disabled state from multiple props.
83
+ *
84
+ * Handles backward compatibility with legacy `isDisabled` prop.
85
+ * The `disabled` prop takes precedence when both are provided.
86
+ *
87
+ * @param {boolean | undefined} disabled - Modern disabled prop
88
+ * @param {boolean | undefined} isDisabled - Legacy disabled prop (deprecated)
89
+ * @returns {boolean} The resolved disabled state (defaults to false)
90
+ *
91
+ * @example
92
+ * const MyComponent = ({ disabled, isDisabled }) => {
93
+ * const isActuallyDisabled = resolveDisabledState(disabled, isDisabled);
94
+ * // Use isActuallyDisabled for logic
95
+ * };
96
+ *
97
+ * @example
98
+ * // disabled takes precedence
99
+ * resolveDisabledState(true, false); // true
100
+ * resolveDisabledState(false, true); // false
101
+ * resolveDisabledState(undefined, true); // true
102
+ */
103
+ export function resolveDisabledState(
104
+ disabled: boolean | undefined,
105
+ isDisabled: boolean | undefined
106
+ ): boolean {
107
+ // disabled prop takes precedence, fall back to isDisabled, default to false
108
+ return disabled ?? isDisabled ?? false;
109
+ }
@@ -1,8 +0,0 @@
1
- import { a as a$1 } from './chunk-NE6YXTMC.js';
2
- import m from 'react';
3
-
4
- var a=({href:i,target:e,rel:p,children:l,styles:s,prefetch:t,btnStyle:c,onPointerDown:n,...f})=>{let r=p;return e==="_blank"&&(r=`noopener noreferrer ${t?"prefetch":""}`),m.createElement(a$1,{as:"a",href:i,target:e,styles:s,rel:r,onPointerDown:h=>{n&&n?.(h);},"data-btn":c,prefetch:t,...f},l)},y=a;a.displayName="Link";
5
-
6
- export { a, y as b };
7
- //# sourceMappingURL=out.js.map
8
- //# sourceMappingURL=chunk-5ZM4XL44.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/link/link.tsx"],"names":["React","Link","href","target","rel","children","styles","prefetch","btnStyle","onPointerDown","props","relValue","ui_default","e","link_default"],"mappings":"wCACA,OAAOA,MAAW,QAqBX,IAAMC,EAAO,CAAC,CACnB,KAAAC,EACA,OAAAC,EACA,IAAAC,EACA,SAAAC,EACA,OAAAC,EACA,SAAAC,EACA,SAAAC,EACA,cAAAC,EACA,GAAGC,CACL,IAAiB,CACf,IAAIC,EAAWP,EAEf,OAAID,IAAW,WACbQ,EAAW,uBAAuBJ,EAAW,WAAa,EAAE,IAO5DP,EAAA,cAACY,EAAA,CACC,GAAG,IACH,KAAMV,EACN,OAAQC,EACR,OAAQG,EACR,IAAKK,EACL,cAXyBE,GAA6C,CACpEJ,GAAeA,IAAgBI,CAAC,CACtC,EAUI,WAAUL,EACV,SAAUD,EACT,GAAGG,GAEHL,CACH,CAEJ,EAEOS,EAAQb,EACfA,EAAK,YAAc","sourcesContent":["import UI from \"../ui\";\nimport React from \"react\";\n\nexport type LinkProps = {\n href?: string;\n\n target?: string;\n\n rel?: string;\n\n children: React.ReactNode;\n\n styles?: React.CSSProperties;\n\n prefetch?: boolean;\n\n btnStyle?: string;\n\n onPointerDown?: (event: React.PointerEvent<HTMLAnchorElement>) => void;\n} & React.ComponentProps<typeof UI> &\n React.ComponentProps<\"a\">;\n\nexport const Link = ({\n href,\n target,\n rel,\n children,\n styles,\n prefetch,\n btnStyle,\n onPointerDown,\n ...props\n}: LinkProps) => {\n let relValue = rel;\n\n if (target === \"_blank\")\n relValue = `noopener noreferrer ${prefetch ? \"prefetch\" : \"\"}`;\n\n const handleOnpointerDown = (e: React.PointerEvent<HTMLAnchorElement>) => {\n if (onPointerDown) onPointerDown?.(e);\n };\n\n return (\n <UI\n as=\"a\"\n href={href}\n target={target}\n styles={styles}\n rel={relValue}\n onPointerDown={handleOnpointerDown}\n data-btn={btnStyle}\n prefetch={prefetch}\n {...props}\n >\n {children}\n </UI>\n );\n};\n\nexport default Link;\nLink.displayName = \"Link\";\n"]}
@@ -1,15 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk6TE5QEVE_cjs = require('./chunk-6TE5QEVE.cjs');
4
- var t = require('react');
5
-
6
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
-
8
- var t__default = /*#__PURE__*/_interopDefault(t);
9
-
10
- var l=({label:o,labelFor:a,id:r,styles:p,classes:d,children:s,...i})=>t__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"div",id:r,styles:p,className:d,"data-style":"fields",...i},t__default.default.createElement("label",{htmlFor:a},o),s),n=l;l.displayName="Field";
11
-
12
- exports.a = l;
13
- exports.b = n;
14
- //# sourceMappingURL=out.js.map
15
- //# sourceMappingURL=chunk-6BVXFW7U.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/fields.tsx"],"names":["React","Field","label","labelFor","id","styles","classes","children","props","ui_default","fields_default"],"mappings":"yCAAA,OAAOA,MAAW,QAmBX,IAAMC,EAAQ,CAAC,CACpB,MAAAC,EACA,SAAAC,EACA,GAAAC,EACA,OAAAC,EACA,QAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAEIR,EAAA,cAACS,EAAA,CACC,GAAG,MACH,GAAIL,EACJ,OAAQC,EACR,UAAWC,EACX,aAAW,SACV,GAAGE,GAEJR,EAAA,cAAC,SAAM,QAASG,GAAWD,CAAM,EAChCK,CACH,EAIGG,EAAQT,EACfA,EAAM,YAAc","sourcesContent":["import React from 'react'\nimport UI from '../ui'\n\nexport type FieldProps = {\n /**\n * The label content\n */\n label: React.ReactNode\n children: React.ReactNode\n} & React.ComponentProps<'label'> &\n Partial<React.ComponentProps<typeof UI>>\n/**\n * Field component that renders a label and children wrapped in a div element.\n * @param labelFor Defines the for attribute of the label element\n * @param styles Custom styles to be applied to the component\n * @param label The label content\n * @param children The children to be rendered inside the component\n * @param props Additional props to be spread to the component\n */\nexport const Field = ({\n label,\n labelFor,\n id,\n styles,\n classes,\n children,\n ...props\n}: FieldProps) => {\n return (\n <UI\n as=\"div\"\n id={id}\n styles={styles}\n className={classes}\n data-style=\"fields\"\n {...props}\n >\n <label htmlFor={labelFor}>{label}</label>\n {children}\n </UI>\n )\n}\n\nexport default Field\nField.displayName = 'Field'\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/ui.tsx"],"names":["React","FP","as","styles","classes","children","defaultStyles","props","ref","Component","styleObj","ui_default"],"mappings":"AAEA,OAAOA,MAAW,QAgDlB,IAAMC,EAAkBD,EAAM,WAC5B,CACE,CAAE,GAAAE,EAAI,OAAAC,EAAQ,QAAAC,EAAS,SAAAC,EAAU,cAAAC,EAAe,GAAGC,CAAM,EACzDC,IACG,CACH,IAAMC,EAAYP,GAAM,MAElBQ,EAAgC,CAAE,GAAGJ,EAAe,GAAGH,CAAO,EAEpE,OACEH,EAAA,cAACS,EAAA,CAAU,IAAKD,EAAK,MAAOE,EAAU,UAAWN,EAAU,GAAGG,GAC3DF,CACH,CAEJ,CACF,EAEOM,EAAQV,EAEfA,EAAG,YAAc","sourcesContent":[" \n/* eslint-disable */\nimport React from \"react\";\n\ntype PolymorphicRef<C extends React.ElementType> =\n React.ComponentPropsWithRef<C>[\"ref\"];\n\ntype AsProp<C extends React.ElementType> = {\n as?: C;\n};\n\ntype PropsToOmit<C extends React.ElementType, P> = keyof (AsProp<C> & P);\n\ntype PolymorphicComponentProp<\n C extends React.ElementType,\n Props = {},\n> = React.PropsWithChildren<Props & AsProp<C>> &\n Omit<React.ComponentPropsWithoutRef<C>, PropsToOmit<C, Props>>;\n\ntype PolymorphicComponentPropWithRef<\n C extends React.ElementType,\n Props = {},\n> = PolymorphicComponentProp<C, Props> & {\n ref?: PolymorphicRef<C>;\n};\n\ntype FPProps<C extends React.ElementType> = PolymorphicComponentPropWithRef<\n C,\n {\n renderStyles?: boolean;\n styles?: React.CSSProperties;\n classes?: string;\n id?: string;\n children?: React.ReactNode;\n }\n>;\n\n/*\n * FPComponent type definition\n *\n * Defines the component function signature for the FP component.\n *\n * @typeParam C - The HTML element type to render\n * @param props - The component props\n * @returns React component\n */\ntype FPComponent = <C extends React.ElementType = \"span\">(\n props: FPProps<C>\n) => React.ReactElement | (any & { displayName?: String });\n\nconst FP: FPComponent = React.forwardRef(\n <C extends React.ElementType>(\n { as, styles, classes, children, defaultStyles, ...props }: FPProps<C>,\n ref?: PolymorphicRef<C>\n ) => {\n const Component = as ?? \"div\";\n\n const styleObj: React.CSSProperties = { ...defaultStyles, ...styles };\n\n return (\n <Component ref={ref} style={styleObj} className={classes} {...props}>\n {children}\n </Component>\n );\n }\n);\n\nexport default FP;\n// @ts-expect-error -- React component displayName\nFP.displayName = \"FP\";\n"]}
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkM5QL5TAE_cjs = require('./chunk-M5QL5TAE.cjs');
4
- var chunkKKLTUJFB_cjs = require('./chunk-KKLTUJFB.cjs');
5
- var chunkLHVJKDMA_cjs = require('./chunk-LHVJKDMA.cjs');
6
- var chunk6TE5QEVE_cjs = require('./chunk-6TE5QEVE.cjs');
7
- var r = require('react');
8
-
9
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
10
-
11
- var r__default = /*#__PURE__*/_interopDefault(r);
12
-
13
- var k=({dialogTitle:e,onClick:o,type:i="h3"})=>r__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"div",classes:"dialog-header"},r__default.default.createElement(chunkM5QL5TAE_cjs.a,{type:i,className:"dialog-title"},e||"Dialog"),r__default.default.createElement(chunkLHVJKDMA_cjs.b,{type:"button",onClick:()=>{o();},className:"dialog-close","aria-label":"Close dialog","data-btn":"icon"},r__default.default.createElement(chunkKKLTUJFB_cjs.b,null,r__default.default.createElement(chunkKKLTUJFB_cjs.b.Remove,{size:16})))),y=r__default.default.memo(k);k.displayName="DialogHeader";var E=({onClose:e,onConfirm:o,confirmLabel:i,cancelLabel:t})=>r__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"section",className:"dialog-footer"},t&&r__default.default.createElement(chunkLHVJKDMA_cjs.b,{type:"button",onClick:e,className:"dialog-button button-secondary","data-btn":"sm"},t),o&&r__default.default.createElement(chunkLHVJKDMA_cjs.b,{type:"button",onClick:o,className:"dialog-button button-primary","data-btn":"sm"},i)),P=E;var H=(e,o)=>r.useCallback(t=>{let l=e.current?.getBoundingClientRect();l&&(t.clientY<l.top||t.clientY>l.bottom||t.clientX<l.left||t.clientX>l.right)&&o();},[e,o]);var x=({showDialog:e,isAlertDialog:o,onClose:i,dialogTitle:t,dialogLabel:l,children:u,onConfirm:h,confirmLabel:I="Confirm",cancelLabel:L="Cancel",className:C="",hideFooter:N,styles:M})=>{let m=r.useRef(null),[g,b]=r__default.default.useState(e);r.useEffect(()=>{b(e);},[e]),r.useEffect(()=>{let n=m.current;n&&(g?o?n.show():n.showModal():n.close());},[g,o]);let c=()=>{i&&i(),b(!1);},U=H(m,c);return r__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"dialog",role:o?"alertdialog":"dialog",ref:m,onClose:c,onClick:U,"aria-modal":g?"true":void 0,className:`dialog-modal ${C}`,"aria-label":l,style:M},r__default.default.createElement(y,{dialogTitle:t,onClick:c}),r__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"section",className:`dialog-content ${C}`,onClick:n=>n.stopPropagation()},u,!N&&r__default.default.createElement(P,{onClose:c,onConfirm:h,confirmLabel:I,cancelLabel:L})))},A=r__default.default.memo(x);
14
-
15
- exports.a = x;
16
- exports.b = A;
17
- //# sourceMappingURL=out.js.map
18
- //# sourceMappingURL=chunk-7K76RW2A.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialog/dialog.tsx","../src/components/dialog/views/dialog-header.tsx","../src/components/dialog/views/dialog-footer.tsx","../src/hooks/useDialogClickHandler.ts"],"names":["React","useRef","useEffect","DialogHeader","dialogTitle","onClick","type","ui_default","heading_default","button_default","icon_default","dialog_header_default","DialogFooter","onClose","onConfirm","confirmLabel","cancelLabel","dialog_footer_default","useCallback","useDialogClickHandler","dialogRef","handleClose","e","dialogDimensions","Dialog","showDialog","isAlertDialog","dialogLabel","children","className","hideFooter","styles","isOpen","setIsOpen","dialog","handleClickOutside","dialog_default"],"mappings":"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","sourcesContent":["import React, { useRef, useEffect, CSSProperties } from \"react\";\nimport UI from \"#components/ui\";\nimport DialogHeader from \"#components/dialog/views/dialog-header\";\nimport DialogFooter from \"#components/dialog/views/dialog-footer\";\nimport { useDialogClickHandler } from \"#hooks/useDialogClickHandler.js\";\n\n/**\n * Defines the props for the Dialog component.\n *\n * @property {boolean} [showDialog] - Determines whether the dialog should be shown.\n * @property {boolean} [isAlertDialog] - Determines whether the dialog should be displayed as an alert dialog.\n * @property {() => void} [onClose] - A callback function to be called when the dialog is closed.\n * @property {string} dialogTitle - The title of the dialog.\n * @property {string} [dialogLabel] - An optional label for the dialog.\n * @property {React.ReactNode} children - The content to be displayed inside the dialog.\n * @property {() => void | Promise<void>} [onConfirm] - A callback function to be called when the user confirms the dialog.\n * @property {string} [confirmLabel] - The label for the confirm button.\n * @property {string} [cancelLabel] - The label for the cancel button.\n * @property {string} [className] - An optional CSS class name to be applied to the dialog.\n * @property {CSSProperties} [styles] - Optional inline styles to be applied to the dialog.\n */\ntype DialogModalProps = React.ComponentProps<typeof UI> &\n React.ComponentProps<\"dialog\"> & {\n dialogTitle: string;\n dialogLabel?: string;\n children: React.ReactNode;\n showDialog?: boolean;\n isAlertDialog?: boolean;\n onClose?: () => void;\n onConfirm?: () => void | Promise<void>;\n confirmLabel?: string;\n cancelLabel?: string;\n className?: string;\n hideFooter?: boolean;\n styles?: CSSProperties;\n };\n\n/**\n * Renders a dialog modal component with customizable content and behavior.\n *\n * @param showDialog - Determines whether the dialog should be shown.\n * @param isAlertDialog - Determines whether the dialog should be displayed as an alert dialog.\n * @param onClose - A callback function to be called when the dialog is closed.\n * @param dialogTitle - The title of the dialog.\n * @param dialogLabel - An optional label for the dialog.\n * @param children - The content to be displayed inside the dialog.\n * @param onConfirm - A callback function to be called when the user confirms the dialog.\n * @param confirmLabel - The label for the confirm button.\n * @param cancelLabel - The label for the cancel button.\n * @param className - An optional CSS class name to be applied to the dialog.\n * @param styles - Optional inline styles to be applied to the dialog.\n */\nexport const Dialog: React.FC<DialogModalProps> = ({\n showDialog,\n isAlertDialog,\n onClose,\n dialogTitle,\n dialogLabel,\n children,\n onConfirm,\n confirmLabel = \"Confirm\",\n cancelLabel = \"Cancel\",\n className = \"\",\n hideFooter,\n styles,\n}) => {\n const dialogRef = useRef<HTMLDialogElement>(null);\n const [isOpen, setIsOpen] = React.useState(showDialog);\n\n useEffect(() => {\n setIsOpen(showDialog);\n }, [showDialog]);\n\n useEffect(() => {\n const dialog = dialogRef.current;\n if (!dialog) return;\n\n if (isOpen) {\n if (isAlertDialog) {\n dialog.show();\n } else {\n dialog.showModal();\n }\n } else {\n dialog.close();\n }\n }, [isOpen, isAlertDialog]);\n\n const handleClose = () => {\n if (onClose) onClose();\n setIsOpen(false);\n };\n\n const handleClickOutside = useDialogClickHandler(dialogRef, handleClose);\n\n return (\n <UI\n as=\"dialog\"\n role={isAlertDialog ? \"alertdialog\" : \"dialog\"}\n ref={dialogRef}\n onClose={handleClose}\n onClick={handleClickOutside}\n aria-modal={isOpen ? \"true\" : undefined}\n className={`${\"dialog-modal\"} ${className}`}\n aria-label={dialogLabel}\n style={styles}\n >\n <DialogHeader dialogTitle={dialogTitle} onClick={handleClose} />\n\n <UI\n as=\"section\"\n className={`dialog-content ${className}`}\n onClick={(e: React.MouseEvent) => e.stopPropagation()}\n >\n {children}\n {!hideFooter && (\n <DialogFooter\n onClose={handleClose}\n onConfirm={onConfirm}\n confirmLabel={confirmLabel}\n cancelLabel={cancelLabel}\n />\n )}\n </UI>\n </UI>\n );\n};\nexport default React.memo(Dialog);\n","import React from \"react\";\nimport UI from \"#components/ui\";\nimport Heading from \"#components/heading/heading\";\nimport Button from \"#components/buttons/button\";\nimport Icon from \"#components/icons/icon\";\n\nexport type DialogHeaderProps = {\n dialogTitle: string;\n onClick: () => void;\n} & React.ComponentProps<typeof Heading>;\n\n/**\n * DialogHeader component displays the header section of a dialog with a title and close button.\n *\n * @component\n * @param {Object} props - Component props\n * @param {string} props.dialogTitle - The title text to display in the dialog header\n * @param {() => void} props.onClick - Callback function triggered when close button is clicked\n * @param {string} [props.type='h3'] - Heading type/level to use for the title\n * @returns {JSX.Element} A dialog header with title and close button\n *\n * @example\n * ```jsx\n * <DialogHeader\n * dialogTitle=\"Confirm Action\"\n * onClick={() => setIsOpen(false)}\n * type=\"h2\"\n * />\n * ```\n */\n\nconst DialogHeader = ({\n dialogTitle,\n onClick,\n type = \"h3\",\n}: DialogHeaderProps): JSX.Element => {\n const handleClose = () => {\n onClick();\n };\n return (\n <UI as=\"div\" classes=\"dialog-header\">\n <Heading type={type} className=\"dialog-title\">\n {dialogTitle || \"Dialog\"}\n </Heading>\n <Button\n type=\"button\"\n onClick={handleClose}\n className=\"dialog-close\"\n aria-label=\"Close dialog\"\n data-btn=\"icon\"\n >\n <Icon>\n <Icon.Remove size={16} />\n </Icon>\n </Button>\n </UI>\n );\n};\n\nexport default React.memo(DialogHeader);\nDialogHeader.displayName = \"DialogHeader\";\n","import React from \"react\";\nimport UI from \"#components/ui\";\nimport Button from \"#components/buttons/button\";\n\ntype DialogFooterProps = {\n onClose: () => void;\n onConfirm?: () => void | Promise<void>;\n confirmLabel: string;\n cancelLabel: string;\n};\n\nconst DialogFooter: React.FC<DialogFooterProps> = ({\n onClose,\n onConfirm,\n confirmLabel,\n cancelLabel,\n}) => {\n return (\n <UI as=\"section\" className=\"dialog-footer\">\n {cancelLabel && (\n <Button\n type=\"button\"\n onClick={onClose}\n className=\"dialog-button button-secondary\"\n data-btn=\"sm\"\n >\n {cancelLabel}\n </Button>\n )}\n\n {onConfirm && (\n <Button\n type=\"button\"\n onClick={onConfirm}\n className=\"dialog-button button-primary\"\n data-btn=\"sm\"\n >\n {confirmLabel}\n </Button>\n )}\n </UI>\n );\n};\n\nexport default DialogFooter;\n","import { useCallback, RefObject } from \"react\";\n\nexport const useDialogClickHandler = (\n dialogRef: RefObject<HTMLDialogElement>,\n handleClose: () => void\n) => {\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLDialogElement>) => {\n const dialogDimensions = dialogRef.current?.getBoundingClientRect();\n if (dialogDimensions) {\n const isClickOutside =\n e.clientY < dialogDimensions.top ||\n e.clientY > dialogDimensions.bottom ||\n e.clientX < dialogDimensions.left ||\n e.clientX > dialogDimensions.right;\n\n if (isClickOutside) {\n handleClose();\n }\n }\n },\n [dialogRef, handleClose]\n );\n\n return handleClick;\n};\n"]}
@@ -1,8 +0,0 @@
1
- import { a } from './chunk-P7TTEYCD.js';
2
- import R from 'react';
3
-
4
- var m=({type:a$1="text",name:c,value:i,placeholder:d,id:f,styles:y,classes:I,isDisabled:p,disabled:t,readonly:r,required:n,ref:h,onChange:o,onBlur:l,onPointerDown:u,...E})=>{let x=e=>{o&&!t&&o?.(e);},v=e=>{l&&!t&&l?.(e);},P=e=>{u&&!t&&(e.preventDefault(),u?.(e));};return R.createElement(a,{as:"input",id:f,type:a$1,placeholder:d||`${n?"*":""} ${a$1} input `,className:I,styles:y,onChange:x,onBlur:v,onKeyDown:P,value:i,name:c,ref:h,"aria-disabled":p,tabIndex:p?-1:void 0,"aria-readonly":r,"aria-required":n,required:n,readOnly:r,...E})};m.displayName="Input";var F=m;
5
-
6
- export { m as a, F as b };
7
- //# sourceMappingURL=out.js.map
8
- //# sourceMappingURL=chunk-BHRQBJRY.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/inputs.tsx"],"names":["React","Input","type","name","value","placeholder","id","styles","classes","isDisabled","disabled","readonly","required","ref","onChange","onBlur","onPointerDown","props","handleChange","handleBlur","handleKeyDown","fp_default","inputs_default"],"mappings":"wCAAA,OAAOA,MAAW,QAeX,IAAMC,EAAQ,CAAC,CACpB,KAAAC,EAAO,OACP,KAAAC,EACA,MAAAC,EACA,YAAAC,EACA,GAAAC,EACA,OAAAC,EACA,QAAAC,EACA,WAAAC,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,IAAAC,EACA,SAAAC,EACA,OAAAC,EACA,cAAAC,EACA,GAAGC,CACL,IAA+B,CAC7B,IAAMC,EAAgB,GAA2C,CAC3DJ,GAAY,CAACJ,GACfI,IAAW,CAAC,CAEhB,EAEMK,EAAc,GAA0C,CACxDJ,GAAU,CAACL,GACbK,IAAS,CAAC,CAEd,EAEMK,EAAiB,GAA6C,CAC9DJ,GAAiB,CAACN,IACpB,EAAE,eAAe,EACjBM,IAAgB,CAAC,EAErB,EAEA,OACEhB,EAAA,cAACqB,EAAA,CACC,GAAG,QACH,GAAIf,EACJ,KAAMJ,EACN,YAAaG,GAAe,GAAGO,EAAW,IAAM,EAAE,IAAIV,CAAI,UAC1D,UAAWM,EACX,OAAQD,EACR,SAAUW,EACV,OAAQC,EACR,UAAWC,EACX,MAAOhB,EACP,KAAMD,EACN,IAAKU,EACL,gBAAeJ,EACf,SAAUA,EAAa,GAAK,OAC5B,gBAAeE,EACf,gBAAeC,EACf,SAAUA,EACV,SAAUD,EACT,GAAGM,EACN,CAEJ,EACAhB,EAAM,YAAc,QACpB,IAAOqB,EAAQrB","sourcesContent":["import React from \"react\";\nimport FP from \"../fp\";\n\nexport type InputProps = {\n /**\n * The type of the input.\n */\n type?: \"text\" | \"password\" | \"email\" | \"number\" | \"tel\" | \"url\" | \"search\";\n\n /**\n * Set the element as disabled\n */\n isDisabled?: boolean;\n} & React.ComponentProps<typeof FP>;\n\nexport const Input = ({\n type = \"text\",\n name,\n value,\n placeholder,\n id,\n styles,\n classes,\n isDisabled,\n disabled,\n readonly,\n required,\n ref,\n onChange,\n onBlur,\n onPointerDown,\n ...props\n}: InputProps): JSX.Element => {\n const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (onChange && !disabled) {\n onChange?.(e);\n }\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (onBlur && !disabled) {\n onBlur?.(e);\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (onPointerDown && !disabled) {\n e.preventDefault();\n onPointerDown?.(e);\n }\n };\n\n return (\n <FP\n as=\"input\"\n id={id}\n type={type}\n placeholder={placeholder || `${required ? \"*\" : \"\"} ${type} input `}\n className={classes}\n styles={styles}\n onChange={handleChange}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n value={value}\n name={name}\n ref={ref}\n aria-disabled={isDisabled}\n tabIndex={isDisabled ? -1 : undefined}\n aria-readonly={readonly}\n aria-required={required}\n required={required}\n readOnly={readonly}\n {...props}\n />\n );\n};\nInput.displayName = \"Input\";\nexport default Input;\n"]}
@@ -1,8 +0,0 @@
1
- import { a } from './chunk-NE6YXTMC.js';
2
- import t from 'react';
3
-
4
- var l=({label:o,labelFor:a$1,id:r,styles:p,classes:d,children:s,...i})=>t.createElement(a,{as:"div",id:r,styles:p,className:d,"data-style":"fields",...i},t.createElement("label",{htmlFor:a$1},o),s),n=l;l.displayName="Field";
5
-
6
- export { l as a, n as b };
7
- //# sourceMappingURL=out.js.map
8
- //# sourceMappingURL=chunk-BIP2NY53.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/fields.tsx"],"names":["React","Field","label","labelFor","id","styles","classes","children","props","ui_default","fields_default"],"mappings":"wCAAA,OAAOA,MAAW,QAmBX,IAAMC,EAAQ,CAAC,CACpB,MAAAC,EACA,SAAAC,EACA,GAAAC,EACA,OAAAC,EACA,QAAAC,EACA,SAAAC,EACA,GAAGC,CACL,IAEIR,EAAA,cAACS,EAAA,CACC,GAAG,MACH,GAAIL,EACJ,OAAQC,EACR,UAAWC,EACX,aAAW,SACV,GAAGE,GAEJR,EAAA,cAAC,SAAM,QAASG,GAAWD,CAAM,EAChCK,CACH,EAIGG,EAAQT,EACfA,EAAM,YAAc","sourcesContent":["import React from 'react'\nimport UI from '../ui'\n\nexport type FieldProps = {\n /**\n * The label content\n */\n label: React.ReactNode\n children: React.ReactNode\n} & React.ComponentProps<'label'> &\n Partial<React.ComponentProps<typeof UI>>\n/**\n * Field component that renders a label and children wrapped in a div element.\n * @param labelFor Defines the for attribute of the label element\n * @param styles Custom styles to be applied to the component\n * @param label The label content\n * @param children The children to be rendered inside the component\n * @param props Additional props to be spread to the component\n */\nexport const Field = ({\n label,\n labelFor,\n id,\n styles,\n classes,\n children,\n ...props\n}: FieldProps) => {\n return (\n <UI\n as=\"div\"\n id={id}\n styles={styles}\n className={classes}\n data-style=\"fields\"\n {...props}\n >\n <label htmlFor={labelFor}>{label}</label>\n {children}\n </UI>\n )\n}\n\nexport default Field\nField.displayName = 'Field'\n"]}
@@ -1,8 +0,0 @@
1
- import { a } from './chunk-NE6YXTMC.js';
2
- import i from 'react';
3
-
4
- var c=({children:e,className:t,styles:s,as:a$1="h3",...l})=>i.createElement(a,{as:a$1,className:`card-title ${t||""}`,styles:s,...l},e);c.displayName="Title";var n=({children:e,className:t,styles:s,...a$1})=>i.createElement(a,{as:"article",className:`card-content ${t||""}`,styles:s,...a$1},e);n.displayName="Content";var d=({children:e,className:t,styles:s,...a$1})=>i.createElement(a,{as:"div",className:`card-footer ${t||""}`,styles:s,...a$1},e);d.displayName="Footer";var o=({elm:e="div",styles:t,children:s,classes:a$1="shadow",id:l,...p})=>i.createElement(a,{as:e,id:l,styles:t,className:a$1,"data-card":!0,...p},s),C=o;o.displayName="Card";o.Title=c;o.Content=n;o.Footer=d;
5
-
6
- export { c as a, n as b, d as c, o as d, C as e };
7
- //# sourceMappingURL=out.js.map
8
- //# sourceMappingURL=chunk-BSPKFLO4.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/cards/card.tsx"],"names":["React","Title","children","className","styles","as","props","ui_default","Content","Footer","Card","elm","classes","id","card_default"],"mappings":"wCAAA,OAAOA,MAAW,QA4BX,IAAMC,EAAQ,CAAC,CACpB,SAAAC,EACA,UAAAC,EACA,OAAAC,EACA,GAAAC,EAAK,KACL,GAAGC,CACL,IAMIN,EAAA,cAACO,EAAA,CACC,GAAIF,EACJ,UAAW,cAAcF,GAAa,EAAE,GACxC,OAAQC,EACP,GAAGE,GAEHJ,CACH,EAIJD,EAAM,YAAc,QAcb,IAAMO,EAAU,CAAC,CACtB,SAAAN,EACA,UAAAC,EACA,OAAAC,EACA,GAAGE,CACL,IAKIN,EAAA,cAACO,EAAA,CACC,GAAG,UACH,UAAW,gBAAgBJ,GAAa,EAAE,GAC1C,OAAQC,EACP,GAAGE,GAEHJ,CACH,EAIJM,EAAQ,YAAc,UAcf,IAAMC,EAAS,CAAC,CACrB,SAAAP,EACA,UAAAC,EACA,OAAAC,EACA,GAAGE,CACL,IAKIN,EAAA,cAACO,EAAA,CACC,GAAG,MACH,UAAW,eAAeJ,GAAa,EAAE,GACzC,OAAQC,EACP,GAAGE,GAEHJ,CACH,EAIJO,EAAO,YAAc,SAgBd,IAAMC,EAAO,CAAC,CACnB,IAAAC,EAAM,MACN,OAAAP,EACA,SAAAF,EACA,QAAAU,EAAU,SACV,GAAAC,EACA,GAAGP,CACL,IAEIN,EAAA,cAACO,EAAA,CACC,GAAII,EACJ,GAAIE,EACJ,OAAQT,EACR,UAAWQ,EACX,YAAS,GACR,GAAGN,GAEHJ,CACH,EAIGY,EAAQJ,EACfA,EAAK,YAAc,OACnBA,EAAK,MAAQT,EACbS,EAAK,QAAUF,EACfE,EAAK,OAASD","sourcesContent":["import React from 'react'\nimport UI from '#components/ui'\n\n/*\n * CardProps interface\n *\n * Extends ComponentProps. Defines props for the Card component.\n *\n * @property {('div' | 'aside' | 'section' | 'article')} [elm='div'] - HTML element to render as\n */\nexport type CardProps = {\n elm?: 'div' | 'aside' | 'section' | 'article'\n title?: React.ReactNode\n footer?: React.ReactNode\n} & React.ComponentProps<typeof UI>\n\n/*\n * Title component\n *\n * Renders a title for the Card component using the UI component.\n *\n * @param {Object} props - Component props\n * @param {ReactNode} props.children - Title content\n * @param {string} [props.className] - Additional CSS classes\n * @param {Object} [props.styles] - Inline styles\n *\n * @returns {ReactElement} Title component\n */\nexport const Title = ({\n children,\n className,\n styles,\n as = 'h3',\n ...props\n}: React.PropsWithChildren<{\n className?: string\n styles?: React.CSSProperties\n as?: React.ElementType\n}>) => {\n return (\n <UI\n as={as}\n className={`card-title ${className || ''}`}\n styles={styles}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nTitle.displayName = 'Title'\n\n/*\n * CardContent component\n *\n * Renders the content of the Card component using the UI component with an article element.\n *\n * @param {Object} props - Component props\n * @param {ReactNode} props.children - Content\n * @param {string} [props.className] - Additional CSS classes\n * @param {Object} [props.styles] - Inline styles\n *\n * @returns {ReactElement} CardContent component\n */\nexport const Content = ({\n children,\n className,\n styles,\n ...props\n}: React.PropsWithChildren<{\n className?: string\n styles?: React.CSSProperties\n}>) => {\n return (\n <UI\n as=\"article\"\n className={`card-content ${className || ''}`}\n styles={styles}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nContent.displayName = 'Content'\n\n/*\n * Footer component\n *\n * Renders a footer section for the Card component using the UI component.\n *\n * @param {Object} props - Component props\n * @param {ReactNode} props.children - Footer content\n * @param {string} [props.className] - Additional CSS classes\n * @param {Object} [props.styles] - Inline styles\n *\n * @returns {ReactElement} Footer component\n */\nexport const Footer = ({\n children,\n className,\n styles,\n ...props\n}: React.PropsWithChildren<{\n className?: string\n styles?: React.CSSProperties\n}>) => {\n return (\n <UI\n as=\"div\"\n className={`card-footer ${className || ''}`}\n styles={styles}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nFooter.displayName = 'Footer'\n\n/*\n * Card component\n *\n * Renders a card container.\n *\n * @param {CardProps} props - Component props\n * @param {('div' | 'aside' | 'section' | 'article')} [props.elm='div'] - Element to render as\n * @param {Object} [props.styles] - CSS styles to apply\n * @param {ReactNode} props.children - Card content\n * @param {boolean} [props.renderStyles=true] - Whether to render default styles\n * @param {string} [props.dataStyle] - data-card attribute value\n * @param {string} [props.id] - Unique ID\n * @returns {ReactElement} Card component\n */\nexport const Card = ({\n elm = 'div',\n styles,\n children,\n classes = 'shadow',\n id,\n ...props\n}: CardProps) => {\n return (\n <UI\n as={elm}\n id={id}\n styles={styles}\n className={classes}\n data-card\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nexport default Card\nCard.displayName = 'Card'\nCard.Title = Title\nCard.Content = Content\nCard.Footer = Footer\n"]}
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- var chunk6TE5QEVE_cjs = require('./chunk-6TE5QEVE.cjs');
4
- var i = require('react');
5
-
6
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
7
-
8
- var i__default = /*#__PURE__*/_interopDefault(i);
9
-
10
- var c=({children:e,className:t,styles:s,as:a="h3",...l})=>i__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:a,className:`card-title ${t||""}`,styles:s,...l},e);c.displayName="Title";var n=({children:e,className:t,styles:s,...a})=>i__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"article",className:`card-content ${t||""}`,styles:s,...a},e);n.displayName="Content";var d=({children:e,className:t,styles:s,...a})=>i__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"div",className:`card-footer ${t||""}`,styles:s,...a},e);d.displayName="Footer";var o=({elm:e="div",styles:t,children:s,classes:a="shadow",id:l,...p})=>i__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:e,id:l,styles:t,className:a,"data-card":!0,...p},s),C=o;o.displayName="Card";o.Title=c;o.Content=n;o.Footer=d;
11
-
12
- exports.a = c;
13
- exports.b = n;
14
- exports.c = d;
15
- exports.d = o;
16
- exports.e = C;
17
- //# sourceMappingURL=out.js.map
18
- //# sourceMappingURL=chunk-BV5CLH44.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/cards/card.tsx"],"names":["React","Title","children","className","styles","as","props","ui_default","Content","Footer","Card","elm","classes","id","card_default"],"mappings":"yCAAA,OAAOA,MAAW,QA4BX,IAAMC,EAAQ,CAAC,CACpB,SAAAC,EACA,UAAAC,EACA,OAAAC,EACA,GAAAC,EAAK,KACL,GAAGC,CACL,IAMIN,EAAA,cAACO,EAAA,CACC,GAAIF,EACJ,UAAW,cAAcF,GAAa,EAAE,GACxC,OAAQC,EACP,GAAGE,GAEHJ,CACH,EAIJD,EAAM,YAAc,QAcb,IAAMO,EAAU,CAAC,CACtB,SAAAN,EACA,UAAAC,EACA,OAAAC,EACA,GAAGE,CACL,IAKIN,EAAA,cAACO,EAAA,CACC,GAAG,UACH,UAAW,gBAAgBJ,GAAa,EAAE,GAC1C,OAAQC,EACP,GAAGE,GAEHJ,CACH,EAIJM,EAAQ,YAAc,UAcf,IAAMC,EAAS,CAAC,CACrB,SAAAP,EACA,UAAAC,EACA,OAAAC,EACA,GAAGE,CACL,IAKIN,EAAA,cAACO,EAAA,CACC,GAAG,MACH,UAAW,eAAeJ,GAAa,EAAE,GACzC,OAAQC,EACP,GAAGE,GAEHJ,CACH,EAIJO,EAAO,YAAc,SAgBd,IAAMC,EAAO,CAAC,CACnB,IAAAC,EAAM,MACN,OAAAP,EACA,SAAAF,EACA,QAAAU,EAAU,SACV,GAAAC,EACA,GAAGP,CACL,IAEIN,EAAA,cAACO,EAAA,CACC,GAAII,EACJ,GAAIE,EACJ,OAAQT,EACR,UAAWQ,EACX,YAAS,GACR,GAAGN,GAEHJ,CACH,EAIGY,EAAQJ,EACfA,EAAK,YAAc,OACnBA,EAAK,MAAQT,EACbS,EAAK,QAAUF,EACfE,EAAK,OAASD","sourcesContent":["import React from 'react'\nimport UI from '#components/ui'\n\n/*\n * CardProps interface\n *\n * Extends ComponentProps. Defines props for the Card component.\n *\n * @property {('div' | 'aside' | 'section' | 'article')} [elm='div'] - HTML element to render as\n */\nexport type CardProps = {\n elm?: 'div' | 'aside' | 'section' | 'article'\n title?: React.ReactNode\n footer?: React.ReactNode\n} & React.ComponentProps<typeof UI>\n\n/*\n * Title component\n *\n * Renders a title for the Card component using the UI component.\n *\n * @param {Object} props - Component props\n * @param {ReactNode} props.children - Title content\n * @param {string} [props.className] - Additional CSS classes\n * @param {Object} [props.styles] - Inline styles\n *\n * @returns {ReactElement} Title component\n */\nexport const Title = ({\n children,\n className,\n styles,\n as = 'h3',\n ...props\n}: React.PropsWithChildren<{\n className?: string\n styles?: React.CSSProperties\n as?: React.ElementType\n}>) => {\n return (\n <UI\n as={as}\n className={`card-title ${className || ''}`}\n styles={styles}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nTitle.displayName = 'Title'\n\n/*\n * CardContent component\n *\n * Renders the content of the Card component using the UI component with an article element.\n *\n * @param {Object} props - Component props\n * @param {ReactNode} props.children - Content\n * @param {string} [props.className] - Additional CSS classes\n * @param {Object} [props.styles] - Inline styles\n *\n * @returns {ReactElement} CardContent component\n */\nexport const Content = ({\n children,\n className,\n styles,\n ...props\n}: React.PropsWithChildren<{\n className?: string\n styles?: React.CSSProperties\n}>) => {\n return (\n <UI\n as=\"article\"\n className={`card-content ${className || ''}`}\n styles={styles}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nContent.displayName = 'Content'\n\n/*\n * Footer component\n *\n * Renders a footer section for the Card component using the UI component.\n *\n * @param {Object} props - Component props\n * @param {ReactNode} props.children - Footer content\n * @param {string} [props.className] - Additional CSS classes\n * @param {Object} [props.styles] - Inline styles\n *\n * @returns {ReactElement} Footer component\n */\nexport const Footer = ({\n children,\n className,\n styles,\n ...props\n}: React.PropsWithChildren<{\n className?: string\n styles?: React.CSSProperties\n}>) => {\n return (\n <UI\n as=\"div\"\n className={`card-footer ${className || ''}`}\n styles={styles}\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nFooter.displayName = 'Footer'\n\n/*\n * Card component\n *\n * Renders a card container.\n *\n * @param {CardProps} props - Component props\n * @param {('div' | 'aside' | 'section' | 'article')} [props.elm='div'] - Element to render as\n * @param {Object} [props.styles] - CSS styles to apply\n * @param {ReactNode} props.children - Card content\n * @param {boolean} [props.renderStyles=true] - Whether to render default styles\n * @param {string} [props.dataStyle] - data-card attribute value\n * @param {string} [props.id] - Unique ID\n * @returns {ReactElement} Card component\n */\nexport const Card = ({\n elm = 'div',\n styles,\n children,\n classes = 'shadow',\n id,\n ...props\n}: CardProps) => {\n return (\n <UI\n as={elm}\n id={id}\n styles={styles}\n className={classes}\n data-card\n {...props}\n >\n {children}\n </UI>\n )\n}\n\nexport default Card\nCard.displayName = 'Card'\nCard.Title = Title\nCard.Content = Content\nCard.Footer = Footer\n"]}
@@ -1,9 +0,0 @@
1
- import { b } from './chunk-5ZM4XL44.js';
2
- import { a } from './chunk-NE6YXTMC.js';
3
- import e from 'react';
4
-
5
- var I=(t,r=15)=>t.length>r?`${t.slice(0,r)}...`:t;var f=({styles:t,id:r,classes:o,children:a,...p})=>e.createElement("li",{id:r,style:t,className:o,"data-list":"unstyled inline",...p},a),C=({children:t,...r})=>e.createElement(a,{as:"ol","data-list":"unstyled inline",...r},t),N=({styles:t,id:r,classes:o,children:a$1,...p})=>e.createElement(a,{as:"nav",id:r,styles:t,className:o,...p},e.createElement(C,null,a$1)),m=({startRoute:t="Home",startRouteUrl:r="/",currentRoute:o,spacer:a=e.createElement(e.Fragment,null,"/"),routes:p,styles:U,id:$,classes:k,ariaLabelPrefix:L,truncateLength:d=15,linkProps:b$1,...v})=>{let[P,w]=e.useState("");e.useEffect(()=>{let n=o||window.location.pathname;n.length&&w(n);},[o]);let x=n=>{let i=p?.find(c=>c.path===n);return {path:i?.path||n,name:i?.name||n,url:i?.url||n}},s=P.split("/").filter(n=>n),u=s.length-1,g=e.useId();return P.length?e.createElement(N,{id:$,...v,styles:U,className:k,"aria-label":L},e.createElement(f,{key:`${t}-${g}`},e.createElement(b,{href:r,...b$1},t)),e.createElement(e.Fragment,null,s.length?s.map((n,i)=>{let c=x(n),{name:l,url:B,path:E}=c;return i===u?e.createElement(e.Fragment,null,typeof s[u]=="string"&&s[u].length>3&&s[u]!==s[u-1]&&e.createElement(f,{key:`${E||i}-${g}`},e.createElement("span",{"aria-hidden":"true"},a),e.createElement("a",{href:"#","aria-current":"page","aria-label":l.length>d?l:void 0},I(decodeURIComponent(l),d)))):e.createElement(f,{key:`${c?.name}-${g}`},e.createElement("span",{"aria-hidden":"true"},a),e.createElement("span",null,e.createElement(b,{href:B,"aria-label":l.length>d?l:void 0,...b$1},I(decodeURIComponent(l),d))))}):null)):e.createElement(e.Fragment,null)},_=m;m.displayName="BreadCrumb";m.Nav=N;m.List=C;m.Items=f;
6
-
7
- export { m as a, _ as b };
8
- //# sourceMappingURL=out.js.map
9
- //# sourceMappingURL=chunk-DKGJHKGW.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/breadcrumbs/breadcrumb.tsx","../src/libs/content.ts"],"names":["React","Truncate","str","length","Items","styles","id","classes","children","props","List","ui_default","Nav","Breadcrumb","startRoute","startRouteUrl","currentRoute","spacer","routes","ariaLabelPrefix","truncateLength","linkProps","currentPath","setCurrentPath","path","getPathName","pathSegment","route","segments","segment","lastSegment","uuid","link_default","index","currentSegment","name","url","breadcrumb_default"],"mappings":"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","sourcesContent":["// Code: Breadcrumb component\nimport React from \"react\";\nimport UI from \"#components/ui\";\nimport { Truncate } from \"#libs/content\";\nimport Link from \"#components/link/link\";\n\n// TYPES\n\ntype customRoute = {\n /** The path or id for routing */\n path?: string;\n /** The display name */\n name: string;\n /** The url if linking out */\n url?: string;\n};\n\ntype BreadcrumbProps = {\n /** Array of custom route objects */\n routes?: customRoute[];\n /** Starting route node */\n startRoute?: React.ReactNode;\n /* Starting route url */\n startRouteUrl?: string;\n /** Spacer node between routes */\n spacer?: React.ReactNode;\n /** String representing current route */\n currentRoute?: string;\n /** Prefix breadcrumb aria-label - \"prefix breadcrumb\" */\n ariaLabelPrefix?: string;\n /** Truncate breadcrumb text after this length */\n truncateLength?: number;\n /** Link props for breadcrumb links */\n linkProps?: React.ComponentProps<typeof Link>;\n} & React.ComponentProps<typeof UI>;\n\n// Components\n\n/**\n * Items component.\n *\n * @param styles - Styles object for the item.\n * @param id - Id for the item.\n * @param classes - Class names for the item.\n * @param children - Child components.\n * @param props - Other props.\n */\nconst Items = ({\n styles,\n id,\n classes,\n children,\n ...props\n}: React.ComponentProps<typeof UI>) => {\n return (\n <li\n id={id}\n style={styles}\n className={classes}\n data-list=\"unstyled inline\"\n {...props}\n >\n {children}\n </li>\n );\n};\n\n/**\n * List component.\n *\n * @param children - The content to render inside the list.\n * @param props - Additional props to pass to the UI component.\n */\nconst List = ({ children, ...props }: React.ComponentProps<typeof UI>) => {\n return (\n <UI as=\"ol\" data-list=\"unstyled inline\" {...props}>\n {children}\n </UI>\n );\n};\n\n/**\n * Nav component.\n *\n * @param styles - Styles object for the nav.\n * @param id - Id for the nav.\n * @param classes - Class names for the nav.\n * @param children - Child components.\n * @param props - Other props.\n */\nconst Nav = ({\n styles,\n id,\n classes,\n children,\n ...props\n}: React.ComponentProps<typeof UI>) => {\n return (\n <UI as=\"nav\" id={id} styles={styles} className={classes} {...props}>\n <List>{children}</List>\n </UI>\n );\n};\n\n/**\n * Navigation component for breadcrumbs.\n *\n * @param props - Props for the navigation component.\n * @param props.startRoute - Starting route node. Default 'Home'.\n * @param props.currentRoute - String representing current route.\n * @param props.spacer - Spacer node between routes. Default '&#47;'.\n * @param props.routes - Array of custom route objects.\n * @param props.styles - Styles object for the nav.\n * @param props.id - Id for the nav.\n * @param props.classes - Class names for the nav.\n * @param props.children - Child components.\n */\nexport const Breadcrumb = ({\n startRoute = \"Home\",\n startRouteUrl = \"/\",\n currentRoute,\n spacer = <>&#47;</>,\n routes,\n styles,\n id,\n classes,\n ariaLabelPrefix,\n truncateLength = 15,\n linkProps,\n ...props\n}: BreadcrumbProps): React.JSX.Element => {\n const [currentPath, setCurrentPath] = React.useState(\"\");\n React.useEffect(() => {\n const path = currentRoute || window.location.pathname;\n if (path.length) {\n setCurrentPath(path);\n }\n }, [currentRoute]);\n\n /**\n * Gets the path name for the given path segment.\n *\n * @param pathSegment - The path segment (string or number) to get the path name for.\n * @returns The path name object for the given path segment.\n */\n const getPathName = (pathSegment: string): customRoute => {\n const route = routes?.find((route) => route.path === pathSegment);\n\n return {\n path: route?.path || pathSegment,\n name: route?.name || pathSegment,\n url: route?.url || pathSegment,\n };\n };\n\n /** Array of path segments from current path */\n const segments = currentPath.split(\"/\").filter((segment) => segment);\n /** Index of last item in segments array */\n const lastSegment = segments.length - 1;\n\n /** Unique id for breadcrumb */\n const uuid = React.useId();\n\n return currentPath.length ? (\n <Nav\n id={id}\n {...props}\n styles={styles}\n className={classes}\n aria-label={ariaLabelPrefix}\n >\n <Items key={`${startRoute}-${uuid}`}>\n <Link href={startRouteUrl} {...linkProps}>\n {startRoute}\n </Link>\n </Items>\n <>\n {segments.length\n ? segments.map((segment: string, index: number) => {\n const currentSegment = getPathName(segment);\n const { name, url, path } = currentSegment;\n return index === lastSegment ? (\n <>\n {typeof segments[lastSegment] === \"string\" &&\n segments[lastSegment].length > 3 &&\n segments[lastSegment] !== segments[lastSegment - 1] && (\n <Items key={`${path || index}-${uuid}`}>\n <span aria-hidden=\"true\">{spacer}</span>\n <a\n href=\"#\"\n aria-current=\"page\"\n aria-label={\n name.length > truncateLength ? name : undefined\n }\n >\n {Truncate(decodeURIComponent(name), truncateLength)}\n </a>\n </Items>\n )}\n </>\n ) : (\n <Items key={`${currentSegment?.name}-${uuid}`}>\n <span aria-hidden=\"true\">{spacer}</span>\n <span>\n <Link\n href={url}\n aria-label={\n name.length > truncateLength ? name : undefined\n }\n {...linkProps}\n >\n {Truncate(decodeURIComponent(name), truncateLength)}\n </Link>\n </span>\n </Items>\n );\n })\n : null}\n </>\n </Nav>\n ) : (\n <></>\n );\n};\n\nexport default Breadcrumb;\n\nBreadcrumb.displayName = \"BreadCrumb\";\nBreadcrumb.Nav = Nav;\nBreadcrumb.List = List;\nBreadcrumb.Items = Items;\n","/**\n * Converts a string to a slug by:\n * - Converting to lowercase\n * - Trimming whitespace\n * - Removing non-word and non-hyphen characters\n * - Replacing sequences of whitespace and hyphens with a single hyphen\n * - Removing leading and trailing hyphens\n *\n * @param str - The string to slugify\n * @returns The slugified string\n */\nexport const Slugify = (str: string) => {\n return str\n .toLowerCase()\n .trim()\n .replace(/[^\\w\\s-]/g, '')\n .replace(/[\\s_-]+/g, '-')\n .replace(/^-+|-+$/g, '')\n}\n\n/**\n * Truncates a string to a maximum length.\n *\n * @param str - The string to truncate.\n * @param length - The maximum length of the truncated string. Defaults to 15.\n * @returns The truncated string, with ellipses appended if truncated.\n */\nexport const Truncate = (str: string, length: number = 15) => {\n return str.length > length ? `${str.slice(0, length)}...` : str\n}\n"]}
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkQVV34QEH_cjs = require('./chunk-QVV34QEH.cjs');
4
- var chunk6TE5QEVE_cjs = require('./chunk-6TE5QEVE.cjs');
5
- var r = require('react');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var r__default = /*#__PURE__*/_interopDefault(r);
10
-
11
- var n=({isBlock:t,children:o,...s})=>r__default.default.createElement(chunkQVV34QEH_cjs.c,{type:"ul",...s,"data-list":`unstyled ${t?"block":""}`},o),L=({id:t,styles:o,classes:s,children:i,...m})=>r__default.default.createElement(chunkQVV34QEH_cjs.c.ListItem,{type:"li",id:t,classes:s,styles:o,...m},i),e=({children:t,...o})=>r__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"nav",...o},t),N=e;e.displayName="Nav";e.List=n;e.Item=L;
12
-
13
- exports.a = n;
14
- exports.b = L;
15
- exports.c = e;
16
- exports.d = N;
17
- //# sourceMappingURL=out.js.map
18
- //# sourceMappingURL=chunk-DV56L5YX.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/nav/nav.tsx"],"names":["React","NavList","isBlock","children","props","list_default","NavItem","id","styles","classes","Nav","ui_default","nav_default"],"mappings":"6EAEA,OAAOA,MAAW,QAgBX,IAAMC,EAAU,CAAC,CAAE,QAAAC,EAAS,SAAAC,EAAU,GAAGC,CAAM,IAElDJ,EAAA,cAACK,EAAA,CAAK,KAAK,KAAM,GAAGD,EAAO,YAAW,YAAYF,EAAU,QAAU,EAAE,IACrEC,CACH,EAeSG,EAAU,CAAC,CACtB,GAAAC,EACA,OAAAC,EACA,QAAAC,EACA,SAAAN,EACA,GAAGC,CACL,IAEIJ,EAAA,cAACK,EAAK,SAAL,CACC,KAAK,KACL,GAAIE,EACJ,QAASE,EACT,OAAQD,EACP,GAAGJ,GAEHD,CACH,EAWSO,EAAM,CAAC,CAAE,SAAAP,EAAU,GAAGC,CAAM,IAErCJ,EAAA,cAACW,EAAA,CAAG,GAAG,MAAO,GAAGP,GACdD,CACH,EAIGS,EAAQF,EACfA,EAAI,YAAc,MAClBA,EAAI,KAAOT,EACXS,EAAI,KAAOJ","sourcesContent":["import UI from '../ui'\nimport List from '../list/list'\nimport React from 'react'\n\nexport type NavListProps = React.ComponentProps<typeof List> & {\n isBlock?: boolean\n}\nexport type NavItemProps = React.ComponentProps<typeof List.ListItem>\n\nexport type NavProps = React.ComponentProps<typeof UI>\n\n/**\n * Renders a NavList component.\n * @param {Object} props - The props for the component.\n * @param {ReactNode} props.children - The child elements.\n * @param {Object} props - Additional props to spread to the List component.\n * @returns {JSX.Element} The rendered NavList component.\n */\nexport const NavList = ({ isBlock, children, ...props }: NavListProps) => {\n return (\n <List type=\"ul\" {...props} data-list={`unstyled ${isBlock ? 'block' : ''}`}>\n {children}\n </List>\n )\n}\n\n/**\n * Renders a NavItem component.\n * @param {Object} props - The props for the component.\n * @param {string} [props.id] - The id for the component.\n * @param {Object} [props.styles] - The styles for the component.\n * @param {string} [props.classes] - The classes for the component.\n * @param {ReactNode} props.children - The child elements.\n * @param {boolean} [props.inline=true] - Whether the item should display inline.\n * @param {Object} props - Additional props to spread to the ListItem component.\n * @returns {JSX.Element} The rendered NavItem component.\n */\nexport const NavItem = ({\n id,\n styles,\n classes,\n children,\n ...props\n}: NavItemProps) => {\n return (\n <List.ListItem\n type=\"li\"\n id={id}\n classes={classes}\n styles={styles}\n {...props}\n >\n {children}\n </List.ListItem>\n )\n}\n\n/**\n * Renders a Nav component.\n * @param {Object} props - The props for the component.\n * @param {ReactNode} props.children - The child elements.\n * @param {Object} props - Additional props to spread to the UI component.\n * @returns {JSX.Element} The rendered Nav component.\n */\nexport const Nav = ({ children, ...props }: NavProps) => {\n return (\n <UI as=\"nav\" {...props}>\n {children}\n </UI>\n )\n}\n\nexport default Nav\nNav.displayName = 'Nav'\nNav.List = NavList\nNav.Item = NavItem\n"]}
@@ -1,16 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkX3EVB7VS_cjs = require('./chunk-X3EVB7VS.cjs');
4
- var chunk6TE5QEVE_cjs = require('./chunk-6TE5QEVE.cjs');
5
- var e = require('react');
6
-
7
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
-
9
- var e__default = /*#__PURE__*/_interopDefault(e);
10
-
11
- var I=(t,r=15)=>t.length>r?`${t.slice(0,r)}...`:t;var f=({styles:t,id:r,classes:o,children:a,...p})=>e__default.default.createElement("li",{id:r,style:t,className:o,"data-list":"unstyled inline",...p},a),C=({children:t,...r})=>e__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"ol","data-list":"unstyled inline",...r},t),N=({styles:t,id:r,classes:o,children:a,...p})=>e__default.default.createElement(chunk6TE5QEVE_cjs.a,{as:"nav",id:r,styles:t,className:o,...p},e__default.default.createElement(C,null,a)),m=({startRoute:t="Home",startRouteUrl:r="/",currentRoute:o,spacer:a=e__default.default.createElement(e__default.default.Fragment,null,"/"),routes:p,styles:U,id:$,classes:k,ariaLabelPrefix:L,truncateLength:d=15,linkProps:b,...v})=>{let[P,w]=e__default.default.useState("");e__default.default.useEffect(()=>{let n=o||window.location.pathname;n.length&&w(n);},[o]);let x=n=>{let i=p?.find(c=>c.path===n);return {path:i?.path||n,name:i?.name||n,url:i?.url||n}},s=P.split("/").filter(n=>n),u=s.length-1,g=e__default.default.useId();return P.length?e__default.default.createElement(N,{id:$,...v,styles:U,className:k,"aria-label":L},e__default.default.createElement(f,{key:`${t}-${g}`},e__default.default.createElement(chunkX3EVB7VS_cjs.b,{href:r,...b},t)),e__default.default.createElement(e__default.default.Fragment,null,s.length?s.map((n,i)=>{let c=x(n),{name:l,url:B,path:E}=c;return i===u?e__default.default.createElement(e__default.default.Fragment,null,typeof s[u]=="string"&&s[u].length>3&&s[u]!==s[u-1]&&e__default.default.createElement(f,{key:`${E||i}-${g}`},e__default.default.createElement("span",{"aria-hidden":"true"},a),e__default.default.createElement("a",{href:"#","aria-current":"page","aria-label":l.length>d?l:void 0},I(decodeURIComponent(l),d)))):e__default.default.createElement(f,{key:`${c?.name}-${g}`},e__default.default.createElement("span",{"aria-hidden":"true"},a),e__default.default.createElement("span",null,e__default.default.createElement(chunkX3EVB7VS_cjs.b,{href:B,"aria-label":l.length>d?l:void 0,...b},I(decodeURIComponent(l),d))))}):null)):e__default.default.createElement(e__default.default.Fragment,null)},_=m;m.displayName="BreadCrumb";m.Nav=N;m.List=C;m.Items=f;
12
-
13
- exports.a = m;
14
- exports.b = _;
15
- //# sourceMappingURL=out.js.map
16
- //# sourceMappingURL=chunk-ECLD37WN.cjs.map