@fpkit/acss 0.5.12 → 0.5.13

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 (264) hide show
  1. package/README.md +89 -0
  2. package/libs/{chunk-DV56L5YX.cjs → chunk-2LTJ7HHX.cjs} +4 -4
  3. package/libs/{chunk-EQ67LF46.js → chunk-2Y7W75TT.js} +3 -3
  4. package/libs/{chunk-KKLTUJFB.cjs → chunk-3MKLDCKQ.cjs} +5 -5
  5. package/libs/chunk-3MKLDCKQ.cjs.map +1 -0
  6. package/libs/{chunk-X3EVB7VS.cjs → chunk-5S4ORA4C.cjs} +3 -3
  7. package/libs/{chunk-O6QZBB6G.js → chunk-772NRB75.js} +5 -5
  8. package/libs/chunk-772NRB75.js.map +1 -0
  9. package/libs/{chunk-6BVXFW7U.cjs → chunk-AHDJGCG5.cjs} +3 -3
  10. package/libs/{chunk-E3XP6BEX.cjs → chunk-B7F5FS6D.cjs} +3 -3
  11. package/libs/chunk-D4YLRWAO.cjs +18 -0
  12. package/libs/chunk-D4YLRWAO.cjs.map +1 -0
  13. package/libs/chunk-ETFLFC2S.js +10 -0
  14. package/libs/chunk-ETFLFC2S.js.map +1 -0
  15. package/libs/chunk-GZ4QFPRY.js +9 -0
  16. package/libs/chunk-GZ4QFPRY.js.map +1 -0
  17. package/libs/{chunk-LHVJKDMA.cjs → chunk-J32EZPYD.cjs} +3 -3
  18. package/libs/chunk-JJ43O4Y5.js +8 -0
  19. package/libs/chunk-JJ43O4Y5.js.map +1 -0
  20. package/libs/chunk-KUKIVRC2.js +7 -0
  21. package/libs/chunk-KUKIVRC2.js.map +1 -0
  22. package/libs/chunk-L75OQKEI.cjs +13 -0
  23. package/libs/chunk-L75OQKEI.cjs.map +1 -0
  24. package/libs/{chunk-LL7HTLMS.cjs → chunk-M5RRNTVX.cjs} +3 -3
  25. package/libs/{chunk-LIQJ7ZZR.js → chunk-NGTJDDFO.js} +2 -2
  26. package/libs/chunk-OK5QEIMD.cjs +17 -0
  27. package/libs/chunk-OK5QEIMD.cjs.map +1 -0
  28. package/libs/chunk-P2DC76ZZ.cjs +18 -0
  29. package/libs/chunk-P2DC76ZZ.cjs.map +1 -0
  30. package/libs/chunk-PQ2K3BM6.cjs +17 -0
  31. package/libs/chunk-PQ2K3BM6.cjs.map +1 -0
  32. package/libs/{chunk-QCMV4VQZ.js → chunk-QLZWHAMK.js} +2 -2
  33. package/libs/{chunk-BIP2NY53.js → chunk-RIVUMPOG.js} +2 -2
  34. package/libs/{chunk-ICCKQ2GC.cjs → chunk-ROZI23GS.cjs} +4 -4
  35. package/libs/{chunk-NHYXGV3L.js → chunk-SMYRLO3E.js} +2 -2
  36. package/libs/{chunk-5ZM4XL44.js → chunk-TYRCEX2L.js} +2 -2
  37. package/libs/chunk-VUH3FXGJ.js +11 -0
  38. package/libs/chunk-VUH3FXGJ.js.map +1 -0
  39. package/libs/{chunk-PPOOBUOS.js → chunk-XBA562WW.js} +2 -2
  40. package/libs/{chunk-QVV34QEH.cjs → chunk-XTQKWY7W.cjs} +3 -3
  41. package/libs/{chunk-YWOYVRFT.js → chunk-ZANSFMTD.js} +3 -3
  42. package/libs/components/alert/alert.css +1 -1
  43. package/libs/components/alert/alert.css.map +1 -1
  44. package/libs/components/alert/alert.min.css +2 -2
  45. package/libs/components/badge/badge.css +1 -1
  46. package/libs/components/badge/badge.css.map +1 -1
  47. package/libs/components/badge/badge.min.css +2 -2
  48. package/libs/components/breadcrumbs/breadcrumb.cjs +9 -5
  49. package/libs/components/breadcrumbs/breadcrumb.d.cts +271 -32
  50. package/libs/components/breadcrumbs/breadcrumb.d.ts +271 -32
  51. package/libs/components/breadcrumbs/breadcrumb.js +3 -3
  52. package/libs/components/button.cjs +4 -4
  53. package/libs/components/button.d.cts +2 -2
  54. package/libs/components/button.d.ts +2 -2
  55. package/libs/components/button.js +2 -2
  56. package/libs/components/buttons/button.css +1 -1
  57. package/libs/components/buttons/button.css.map +1 -1
  58. package/libs/components/buttons/button.min.css +2 -2
  59. package/libs/components/card.cjs +7 -7
  60. package/libs/components/card.d.cts +277 -33
  61. package/libs/components/card.d.ts +277 -33
  62. package/libs/components/card.js +2 -2
  63. package/libs/components/cards/card.css +1 -1
  64. package/libs/components/cards/card.css.map +1 -1
  65. package/libs/components/cards/card.min.css +2 -2
  66. package/libs/components/details/details.css +1 -1
  67. package/libs/components/details/details.css.map +1 -1
  68. package/libs/components/details/details.min.css +2 -2
  69. package/libs/components/dialog/dialog.cjs +7 -7
  70. package/libs/components/dialog/dialog.css +1 -1
  71. package/libs/components/dialog/dialog.css.map +1 -1
  72. package/libs/components/dialog/dialog.d.cts +88 -34
  73. package/libs/components/dialog/dialog.d.ts +88 -34
  74. package/libs/components/dialog/dialog.js +5 -5
  75. package/libs/components/dialog/dialog.min.css +2 -2
  76. package/libs/components/form/fields.cjs +4 -4
  77. package/libs/components/form/fields.d.cts +2 -2
  78. package/libs/components/form/fields.d.ts +2 -2
  79. package/libs/components/form/fields.js +2 -2
  80. package/libs/components/form/textarea.cjs +4 -4
  81. package/libs/components/form/textarea.d.cts +2 -2
  82. package/libs/components/form/textarea.d.ts +2 -2
  83. package/libs/components/form/textarea.js +2 -2
  84. package/libs/components/heading/heading.cjs +3 -3
  85. package/libs/components/heading/heading.d.cts +3 -14
  86. package/libs/components/heading/heading.d.ts +3 -14
  87. package/libs/components/heading/heading.js +2 -2
  88. package/libs/components/icons/icon.cjs +4 -4
  89. package/libs/components/icons/icon.d.cts +148 -4
  90. package/libs/components/icons/icon.d.ts +148 -4
  91. package/libs/components/icons/icon.js +2 -2
  92. package/libs/components/images/img.css +1 -1
  93. package/libs/components/images/img.css.map +1 -1
  94. package/libs/components/images/img.min.css +2 -2
  95. package/libs/components/link/link.cjs +4 -4
  96. package/libs/components/link/link.d.cts +2 -2
  97. package/libs/components/link/link.d.ts +2 -2
  98. package/libs/components/link/link.js +2 -2
  99. package/libs/components/list/list.cjs +5 -5
  100. package/libs/components/list/list.d.cts +3 -3
  101. package/libs/components/list/list.d.ts +3 -3
  102. package/libs/components/list/list.js +2 -2
  103. package/libs/components/modal.cjs +4 -4
  104. package/libs/components/modal.js +3 -3
  105. package/libs/components/nav/nav.cjs +7 -7
  106. package/libs/components/nav/nav.d.cts +2 -2
  107. package/libs/components/nav/nav.d.ts +2 -2
  108. package/libs/components/nav/nav.js +3 -3
  109. package/libs/components/text/text.cjs +5 -5
  110. package/libs/components/text/text.d.cts +2 -2
  111. package/libs/components/text/text.d.ts +2 -2
  112. package/libs/components/text/text.js +2 -2
  113. package/libs/heading-3648c538.d.ts +250 -0
  114. package/libs/hooks.cjs +7 -0
  115. package/libs/hooks.d.cts +5 -0
  116. package/libs/hooks.d.ts +5 -0
  117. package/libs/hooks.js +3 -0
  118. package/libs/icons.cjs +3 -3
  119. package/libs/icons.d.cts +1 -1
  120. package/libs/icons.d.ts +1 -1
  121. package/libs/icons.js +2 -2
  122. package/libs/index.cjs +112 -91
  123. package/libs/index.cjs.map +1 -1
  124. package/libs/index.css +1 -1
  125. package/libs/index.css.map +1 -1
  126. package/libs/index.d.cts +515 -31
  127. package/libs/index.d.ts +515 -31
  128. package/libs/index.js +31 -19
  129. package/libs/index.js.map +1 -1
  130. package/libs/ui-645f95b5.d.ts +285 -0
  131. package/package.json +2 -83
  132. package/src/components/README-UI.mdx +416 -0
  133. package/src/components/alert/ACCESSIBILITY.md +319 -0
  134. package/src/components/alert/README.mdx +475 -19
  135. package/src/components/alert/alert.scss +113 -6
  136. package/src/components/alert/alert.stories.tsx +372 -0
  137. package/src/components/alert/alert.test.tsx +762 -0
  138. package/src/components/alert/alert.tsx +331 -66
  139. package/src/components/alert/views/alert-actions.tsx +13 -0
  140. package/src/components/alert/views/alert-content.tsx +17 -0
  141. package/src/components/alert/views/alert-icon.tsx +53 -0
  142. package/src/components/alert/views/alert-screen-reader-text.tsx +30 -0
  143. package/src/components/alert/views/alert-title.tsx +23 -0
  144. package/src/components/alert/views/alert-view.tsx +158 -0
  145. package/src/components/alert/views/index.ts +12 -0
  146. package/src/components/badge/badge.mdx +186 -49
  147. package/src/components/badge/badge.scss +20 -2
  148. package/src/components/badge/badge.stories.tsx +160 -14
  149. package/src/components/badge/badge.test.tsx +179 -0
  150. package/src/components/badge/badge.tsx +97 -4
  151. package/src/components/breadcrumbs/README.mdx +364 -45
  152. package/src/components/breadcrumbs/__snapshots__/breadcrumb.test.tsx.snap +152 -0
  153. package/src/components/breadcrumbs/breadcrumb.stories.tsx +7 -3
  154. package/src/components/breadcrumbs/breadcrumb.test.tsx +490 -0
  155. package/src/components/breadcrumbs/breadcrumb.tsx +427 -170
  156. package/src/components/buttons/button.scss +34 -31
  157. package/src/components/buttons/button.stories.tsx +35 -0
  158. package/src/components/cards/README.mdx +657 -0
  159. package/src/components/cards/card.scss +22 -0
  160. package/src/components/cards/card.stories.tsx +167 -5
  161. package/src/components/cards/card.test.tsx +360 -20
  162. package/src/components/cards/card.tsx +200 -79
  163. package/src/components/cards/card.types.ts +135 -0
  164. package/src/components/cards/card.utils.ts +79 -0
  165. package/src/components/details/ACCESSIBILITY-REVIEW-LIVE.md +1050 -0
  166. package/src/components/details/ACCESSIBILITY-REVIEW.md +502 -0
  167. package/src/components/details/README.mdx +437 -69
  168. package/src/components/details/details.scss +16 -7
  169. package/src/components/details/details.test.tsx +385 -0
  170. package/src/components/details/details.tsx +101 -69
  171. package/src/components/details/details.types.ts +76 -0
  172. package/src/components/dialog/README.mdx +513 -110
  173. package/src/components/dialog/dialog-modal.tsx +79 -56
  174. package/src/components/dialog/dialog.scss +53 -3
  175. package/src/components/dialog/dialog.stories.tsx +10 -7
  176. package/src/components/dialog/dialog.test.tsx +450 -0
  177. package/src/components/dialog/dialog.tsx +69 -59
  178. package/src/components/dialog/dialog.types.ts +133 -0
  179. package/src/components/dialog/views/dialog-footer.tsx +54 -11
  180. package/src/components/dialog/views/dialog-header.tsx +20 -15
  181. package/src/components/heading/heading.stories.tsx +44 -4
  182. package/src/components/heading/heading.tsx +89 -23
  183. package/src/components/icons/README.mdx +332 -0
  184. package/src/components/icons/icon.stories.tsx +74 -1
  185. package/src/components/icons/icon.tsx +89 -1
  186. package/src/components/icons/types.ts +47 -0
  187. package/src/components/images/README.mdx +340 -24
  188. package/src/components/images/img.scss +19 -3
  189. package/src/components/images/img.stories.tsx +424 -15
  190. package/src/components/images/img.test.tsx +354 -25
  191. package/src/components/images/img.tsx +186 -63
  192. package/src/components/images/img.types.ts +211 -0
  193. package/src/components/title/MIGRATION.md +199 -0
  194. package/src/components/title/README.md +326 -0
  195. package/src/components/title/README.mdx +452 -0
  196. package/src/components/title/title.stories.tsx +393 -0
  197. package/src/components/title/title.test.tsx +251 -0
  198. package/src/components/title/title.tsx +219 -0
  199. package/src/components/ui.stories.tsx +894 -0
  200. package/src/components/ui.test.tsx +559 -0
  201. package/src/components/ui.tsx +266 -15
  202. package/src/components/word-count/README.md +240 -0
  203. package/src/hooks.ts +1 -0
  204. package/src/index.ts +10 -2
  205. package/src/sass/_properties.scss +1 -0
  206. package/src/styles/alert/alert.css +94 -4
  207. package/src/styles/alert/alert.css.map +1 -1
  208. package/src/styles/badge/badge.css +20 -2
  209. package/src/styles/badge/badge.css.map +1 -1
  210. package/src/styles/buttons/button.css +31 -31
  211. package/src/styles/buttons/button.css.map +1 -1
  212. package/src/styles/cards/card.css +16 -0
  213. package/src/styles/cards/card.css.map +1 -1
  214. package/src/styles/details/details.css +19 -8
  215. package/src/styles/details/details.css.map +1 -1
  216. package/src/styles/dialog/dialog.css +43 -2
  217. package/src/styles/dialog/dialog.css.map +1 -1
  218. package/src/styles/images/img.css +15 -3
  219. package/src/styles/images/img.css.map +1 -1
  220. package/src/styles/index.css +240 -51
  221. package/src/styles/index.css.map +1 -1
  222. package/src/test/setup.d.ts +9 -0
  223. package/src/test/setup.ts +53 -1
  224. package/libs/chunk-6TE5QEVE.cjs +0 -13
  225. package/libs/chunk-6TE5QEVE.cjs.map +0 -1
  226. package/libs/chunk-7K76RW2A.cjs +0 -18
  227. package/libs/chunk-7K76RW2A.cjs.map +0 -1
  228. package/libs/chunk-BSPKFLO4.js +0 -8
  229. package/libs/chunk-BSPKFLO4.js.map +0 -1
  230. package/libs/chunk-BV5CLH44.cjs +0 -18
  231. package/libs/chunk-BV5CLH44.cjs.map +0 -1
  232. package/libs/chunk-DKGJHKGW.js +0 -9
  233. package/libs/chunk-DKGJHKGW.js.map +0 -1
  234. package/libs/chunk-ECLD37WN.cjs +0 -16
  235. package/libs/chunk-ECLD37WN.cjs.map +0 -1
  236. package/libs/chunk-HYBZBN4G.js +0 -8
  237. package/libs/chunk-HYBZBN4G.js.map +0 -1
  238. package/libs/chunk-KKLTUJFB.cjs.map +0 -1
  239. package/libs/chunk-M5QL5TAE.cjs +0 -14
  240. package/libs/chunk-M5QL5TAE.cjs.map +0 -1
  241. package/libs/chunk-NE6YXTMC.js +0 -7
  242. package/libs/chunk-NE6YXTMC.js.map +0 -1
  243. package/libs/chunk-O6QZBB6G.js.map +0 -1
  244. package/libs/chunk-SXVZSWX6.js +0 -11
  245. package/libs/chunk-SXVZSWX6.js.map +0 -1
  246. package/libs/ui-9a6f9f8d.d.ts +0 -24
  247. package/src/components/cards/README.md +0 -80
  248. package/src/components/dialog/hooks/useClickOutside.ts +0 -33
  249. /package/libs/{chunk-DV56L5YX.cjs.map → chunk-2LTJ7HHX.cjs.map} +0 -0
  250. /package/libs/{chunk-EQ67LF46.js.map → chunk-2Y7W75TT.js.map} +0 -0
  251. /package/libs/{chunk-X3EVB7VS.cjs.map → chunk-5S4ORA4C.cjs.map} +0 -0
  252. /package/libs/{chunk-6BVXFW7U.cjs.map → chunk-AHDJGCG5.cjs.map} +0 -0
  253. /package/libs/{chunk-E3XP6BEX.cjs.map → chunk-B7F5FS6D.cjs.map} +0 -0
  254. /package/libs/{chunk-LHVJKDMA.cjs.map → chunk-J32EZPYD.cjs.map} +0 -0
  255. /package/libs/{chunk-LL7HTLMS.cjs.map → chunk-M5RRNTVX.cjs.map} +0 -0
  256. /package/libs/{chunk-LIQJ7ZZR.js.map → chunk-NGTJDDFO.js.map} +0 -0
  257. /package/libs/{chunk-QCMV4VQZ.js.map → chunk-QLZWHAMK.js.map} +0 -0
  258. /package/libs/{chunk-BIP2NY53.js.map → chunk-RIVUMPOG.js.map} +0 -0
  259. /package/libs/{chunk-ICCKQ2GC.cjs.map → chunk-ROZI23GS.cjs.map} +0 -0
  260. /package/libs/{chunk-NHYXGV3L.js.map → chunk-SMYRLO3E.js.map} +0 -0
  261. /package/libs/{chunk-5ZM4XL44.js.map → chunk-TYRCEX2L.js.map} +0 -0
  262. /package/libs/{chunk-PPOOBUOS.js.map → chunk-XBA562WW.js.map} +0 -0
  263. /package/libs/{chunk-QVV34QEH.cjs.map → chunk-XTQKWY7W.cjs.map} +0 -0
  264. /package/libs/{chunk-YWOYVRFT.js.map → chunk-ZANSFMTD.js.map} +0 -0
@@ -180,6 +180,7 @@ svg[role=img] {
180
180
  --placeholder-style: italic;
181
181
  --placeholder-fs: smaller;
182
182
  --transition: all 0.25s linear;
183
+ --tran-all: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
183
184
  --fs-0: clamp(.9rem, 4vw - 1rem, 1.12rem);
184
185
  --fs-1: clamp(0.65rem, 1.3vw + 0.25rem, 0.75rem);
185
186
  --fs-2: clamp(0.7rem, 2vw - 0.5rem, 0.875rem);
@@ -428,25 +429,21 @@ h6:has(span:first-of-type) > span {
428
429
  }
429
430
 
430
431
  button {
431
- --btn-xs: 0.6rem;
432
- --btn-sm: 0.7rem;
433
- --btn-md: 0.85rem;
434
- --btn-lg: 1.3125rem;
432
+ --btn-xs: 0.6875rem;
433
+ --btn-sm: 0.8125rem;
434
+ --btn-md: 0.9375rem;
435
+ --btn-lg: 1.125rem;
435
436
  --btn-pill: 100rem;
436
- --btn-height: 2.5rem;
437
- --fs: 0.95rem;
438
- --btn-fs: 0.9375rem;
437
+ --btn-fs: var(--btn-md);
438
+ --btn-height: calc(var(--btn-fs) * 2.25);
439
439
  --btn-bg: lightgray;
440
440
  --btn-width: max-content;
441
- --btn-calc-height: var(--btn-height, calc(40rem / 16));
442
441
  font-size: var(--btn-fs);
443
442
  font-weight: var(--btn-fw, 500);
444
- height: var(--btn-height, 2.5rem);
445
- max-height: var(--btn-calc-height);
446
- min-height: 1.5rem;
443
+ height: var(--btn-height);
447
444
  place-items: var(--btn-place, center);
448
- padding-inline: var(--btn-px, calc(var(--btn-fs) + 1.1%));
449
- padding-block: var(--btn-py, calc(var(--btn-fs) + 0.75%));
445
+ padding-inline: var(--btn-px, calc(var(--btn-fs) * 1.5));
446
+ padding-block: var(--btn-py, calc(var(--btn-fs) * 0.5));
450
447
  border: var(--btn-bdr, none);
451
448
  border-radius: var(--btn-rds, 0.375rem);
452
449
  text-decoration: var(--btn-deco, none);
@@ -455,7 +452,7 @@ button {
455
452
  gap: var(--btn-gap, 0.2rem);
456
453
  white-space: var(--btn-wspc, inherit);
457
454
  margin: var(--btn-spc, 0);
458
- transition: var(--tran-all);
455
+ transition: var(--btn-transition, var(--tran-all, all 0.3s cubic-bezier(0.4, 0, 0.2, 1)));
459
456
  background-color: var(--btn-bg, var(--btn));
460
457
  outline: none;
461
458
  width: var(--btn-width);
@@ -478,14 +475,15 @@ button[disabled]:is(:hover, :focus), button[aria-disabled=true]:is(:hover, :focu
478
475
  transform: none;
479
476
  }
480
477
  button:is(:hover, :focus) {
481
- background-color: var(--btn-bg, var(--btn, lightgray));
482
- filter: invert(1) hue-rotate 180deg;
483
- transform: scale(0.95) var(--line-style, solid);
478
+ filter: var(--btn-hover-filter, brightness(0.85));
479
+ transform: var(--btn-hover-transform, scale(1.03));
480
+ outline: var(--btn-hover-outline, thin);
484
481
  outline-offset: var(--line-offset, 1px);
485
482
  }
486
483
  button:is(:hover, :focus)[aria-disabled=true] {
487
484
  transform: none;
488
485
  opacity: var(--btn-opacity, 0.5);
486
+ filter: none;
489
487
  }
490
488
  button[type=reset] {
491
489
  --btn-bg: transparent;
@@ -501,25 +499,25 @@ button[type=submit] {
501
499
  button[data-fp-btn~=pill], button[data-btn~=pill], button[data-style~=pill] {
502
500
  border-radius: var(--btn-pill, 100rem);
503
501
  }
504
- button[data-btn~=xs] {
505
- padding-inline: var(--btn-xs);
502
+ button[data-btn~=xs],
503
+ button .btn-xs {
506
504
  --btn-fs: var(--btn-xs);
507
- --btn-height: 1.5rem;
508
505
  text-transform: uppercase;
509
506
  }
510
- button[data-btn~=sm] {
507
+ button[data-btn~=sm],
508
+ button .btn-sm {
511
509
  --btn-fs: var(--btn-sm);
512
- --btn-height: 1.75rem;
513
510
  }
514
- button[data-btn~=md] {
511
+ button[data-btn~=md],
512
+ button .btn-md {
515
513
  --btn-fs: var(--btn-md);
516
- --btn-height: 2rem;
517
514
  }
518
- button[data-btn~=lg] {
515
+ button[data-btn~=lg],
516
+ button .btn-lg {
519
517
  --btn-fs: var(--btn-lg);
520
- --btn-height: 2.5rem;
521
518
  }
522
- button[data-btn~=icon] {
519
+ button[data-btn~=icon],
520
+ button .btn-icon {
523
521
  padding: unset;
524
522
  height: unset;
525
523
  --btn-bg: transparent;
@@ -530,7 +528,8 @@ button[data-btn~=icon] {
530
528
  align-items: center;
531
529
  justify-content: center;
532
530
  }
533
- button[data-btn~=text] {
531
+ button[data-btn~=text],
532
+ button .btn-text {
534
533
  --btn-bg: transparent;
535
534
  --btn-cl: currentColor;
536
535
  --btn-bdr: none;
@@ -539,10 +538,12 @@ button[data-btn~=text] {
539
538
  --btn-py: 0.75rem;
540
539
  --btn-px: 0.75rem;
541
540
  }
542
- button[data-btn~=text]:is(:hover, :focus) {
543
- background-color: transparent;
544
- outline: 0.07rem solid var(--btn-cl);
541
+ button[data-btn~=text]:is(:hover, :focus),
542
+ button .btn-text:is(:hover, :focus) {
543
+ background-color: color-mix(in srgb, var(--btn-cl) 10%, transparent);
544
+ outline: 0.025rem solid var(--btn-cl);
545
545
  outline-offset: 0;
546
+ filter: none;
546
547
  }
547
548
 
548
549
  p[role=note],
@@ -615,24 +616,36 @@ p[role=note] {
615
616
  --border-radius: 0.5rem;
616
617
  }
617
618
 
619
+ /**
620
+ * Image component styles
621
+ *
622
+ * Applies to all images with alt attribute (both decorative alt="" and semantic).
623
+ * Uses CSS custom properties for flexible theming and responsive behavior.
624
+ */
618
625
  img[alt] {
626
+ /* CSS Custom Properties - Override these for customization */
619
627
  --img-max-width: 100%;
620
628
  --img-height: auto;
621
629
  --img-object-fit: cover;
622
630
  --img-object-position: center;
623
631
  --img-aspect-ratio: auto 2/3;
624
632
  --img-display: inline-block;
633
+ /* Layout - Responsive by default */
625
634
  max-width: var(--img-max-width);
626
- max-inline-size: var(--img-max-width);
635
+ max-inline-size: var(--img-max-width); /* Logical property for i18n */
627
636
  block-size: var(--img-height);
637
+ display: var(--img-display);
638
+ vertical-align: middle;
639
+ /* Object fitting for responsive images */
628
640
  object-fit: var(--img-object-fit);
629
641
  object-position: var(--img-object-position);
630
642
  aspect-ratio: var(--img-aspect-ratio);
631
- display: var(--img-display);
632
- vertical-align: middle;
643
+ /* Accessibility - Italic font for broken image alt text */
633
644
  font-style: italic;
645
+ /* Background for loading state */
634
646
  background-size: cover;
635
647
  background-repeat: no-repeat;
648
+ /* Shape margin for text wrapping */
636
649
  shape-margin: var(--spc-3);
637
650
  }
638
651
 
@@ -705,6 +718,22 @@ figure:has(img[alt]) > figcaption {
705
718
  padding-block-start: calc(var(--card-p) - 0.5rem);
706
719
  }
707
720
 
721
+ [data-card=interactive] {
722
+ cursor: pointer;
723
+ transition: box-shadow 0.2s ease, transform 0.2s ease;
724
+ }
725
+ [data-card=interactive]:hover {
726
+ transform: translateY(-2px);
727
+ box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.15);
728
+ }
729
+ [data-card=interactive]:focus-visible {
730
+ outline: 0.125rem solid var(--focus-color, #0066CC);
731
+ outline-offset: 0.125rem;
732
+ }
733
+ [data-card=interactive]:focus:not(:focus-visible) {
734
+ outline: none;
735
+ }
736
+
708
737
  progress {
709
738
  /* Revert all styles */
710
739
  all: revert;
@@ -790,6 +819,12 @@ details {
790
819
  max-height: var(--max-h-closed);
791
820
  overflow: clip;
792
821
  }
822
+ @starting-style {
823
+ details {
824
+ transition: var(--summary-transitions);
825
+ color: red;
826
+ }
827
+ }
793
828
  details + details {
794
829
  border-radius: 0;
795
830
  border-top: none;
@@ -819,14 +854,6 @@ details summary {
819
854
  transition: var(--summary-transitions);
820
855
  /* This ensures no bullet points are shown */
821
856
  }
822
- @supports (transition-behavior: allow-discrete) {
823
- @starting-style {
824
- details summary {
825
- border-bottom: none;
826
- transition: var(--summary-transitions);
827
- }
828
- }
829
- }
830
857
  details summary::-webkit-details-marker {
831
858
  display: none;
832
859
  }
@@ -861,6 +888,19 @@ details[open] > summary {
861
888
  details[open] > section {
862
889
  max-height: var(--max-h-open);
863
890
  }
891
+ @starting-style {
892
+ details[open] > section {
893
+ max-height: 0;
894
+ }
895
+ }
896
+ @supports (transition-behavior: allow-discrete) {
897
+ @starting-style {
898
+ details {
899
+ max-height: 0;
900
+ transition: var(--summary-transitions);
901
+ }
902
+ }
903
+ }
864
904
 
865
905
  a[href] {
866
906
  --link-decoration: none;
@@ -1118,8 +1158,23 @@ footer > div {
1118
1158
  --dialog-button-hover-bg: whitesmoke;
1119
1159
  --dialog-display: flex;
1120
1160
  --dialog-flex-direction: column;
1161
+ /* Focus and accessibility */
1162
+ --dialog-focus-color: #0066cc;
1163
+ --dialog-focus-width: 0.125rem;
1164
+ --dialog-focus-offset: 0.125rem;
1165
+ --dialog-focus-outline: var(--dialog-focus-width) solid var(--dialog-focus-color);
1166
+ }
1167
+
1168
+ /* High contrast mode support */
1169
+ @media (prefers-contrast: high) {
1170
+ :root {
1171
+ --dialog-border-color: currentColor;
1172
+ --dialog-border-width: 0.125rem;
1173
+ --dialog-close-color: currentColor;
1174
+ --dialog-button-border: currentColor 0.125rem solid;
1175
+ --dialog-focus-width: 0.1875rem;
1176
+ }
1121
1177
  }
1122
-
1123
1178
  dialog {
1124
1179
  width: var(--dialog-min-w);
1125
1180
  min-width: var(--min-w);
@@ -1127,7 +1182,12 @@ dialog {
1127
1182
  border: var(--dialog-border-color) var(--dialog-border-width) solid;
1128
1183
  border-radius: var(--dialog-border-radius);
1129
1184
  padding: var(--dialog-padding);
1130
- padding-block-start: calc(var(--dialog-padding) - 0rem);
1185
+ padding-block-start: var(--dialog-padding);
1186
+ /* Focus visible for keyboard navigation */
1187
+ }
1188
+ dialog:focus-visible {
1189
+ outline: var(--dialog-focus-outline);
1190
+ outline-offset: var(--dialog-focus-offset);
1131
1191
  }
1132
1192
  dialog[open] {
1133
1193
  display: var(--dialog-display);
@@ -1162,11 +1222,22 @@ dialog section {
1162
1222
  background-color: var(--dialog-button-bg);
1163
1223
  border: var(--dialog-button-border);
1164
1224
  cursor: pointer;
1225
+ /* Keyboard focus indicator */
1226
+ /* Remove default focus for mouse users */
1165
1227
  }
1166
- .dialog-header button[type=button]:hover, .dialog-header button[type=button]:focus {
1228
+ .dialog-header button[type=button]:hover {
1167
1229
  border-color: var(--dialog-close-color);
1168
1230
  background-color: var(--dialog-button-hover-bg);
1169
1231
  }
1232
+ .dialog-header button[type=button]:focus-visible {
1233
+ outline: var(--dialog-focus-outline);
1234
+ outline-offset: var(--dialog-focus-offset);
1235
+ border-color: var(--dialog-focus-color);
1236
+ background-color: var(--dialog-button-hover-bg);
1237
+ }
1238
+ .dialog-header button[type=button]:focus:not(:focus-visible) {
1239
+ outline: none;
1240
+ }
1170
1241
 
1171
1242
  .alert-dialog-actions,
1172
1243
  .dialog-footer {
@@ -1176,6 +1247,16 @@ dialog section {
1176
1247
  justify-content: var(--dialog-footer-justify, flex-end);
1177
1248
  gap: var(--dialog-gap);
1178
1249
  width: 100%;
1250
+ /* Focus styles for footer buttons */
1251
+ }
1252
+ .alert-dialog-actions button:focus-visible,
1253
+ .dialog-footer button:focus-visible {
1254
+ outline: var(--dialog-focus-outline);
1255
+ outline-offset: var(--dialog-focus-offset);
1256
+ }
1257
+ .alert-dialog-actions button:focus:not(:focus-visible),
1258
+ .dialog-footer button:focus:not(:focus-visible) {
1259
+ outline: none;
1179
1260
  }
1180
1261
 
1181
1262
  :root {
@@ -1290,8 +1371,26 @@ sup:has(> span) span {
1290
1371
  color: inherit;
1291
1372
  }
1292
1373
  sup:has(> span)[data-badge~=rounded] {
1293
- --badge-radius: 100%;
1294
- --badge-padding: 0.2rem;
1374
+ --badge-radius: 50%;
1375
+ --badge-padding: 0;
1376
+ --badge-size: 1.5625rem;
1377
+ width: var(--badge-size);
1378
+ height: var(--badge-size);
1379
+ display: inline-flex;
1380
+ align-items: center;
1381
+ justify-content: center;
1382
+ line-height: 1;
1383
+ font-size: 0.6875rem;
1384
+ font-weight: 700;
1385
+ overflow: hidden;
1386
+ box-sizing: border-box;
1387
+ }
1388
+ sup:has(> span)[data-badge~=rounded] span {
1389
+ max-width: 100%;
1390
+ overflow: hidden;
1391
+ text-overflow: clip;
1392
+ white-space: nowrap;
1393
+ padding: 0 0.125rem;
1295
1394
  }
1296
1395
 
1297
1396
  body > nav,
@@ -1511,6 +1610,19 @@ nav[data-breadcrumb] ol li a[href][aria-current] {
1511
1610
  text-decoration: none;
1512
1611
  }
1513
1612
 
1613
+ /* Screen reader only utility class */
1614
+ .sr-only {
1615
+ position: absolute;
1616
+ width: 1px;
1617
+ height: 1px;
1618
+ padding: 0;
1619
+ margin: -1px;
1620
+ overflow: hidden;
1621
+ clip: rect(0, 0, 0, 0);
1622
+ white-space: nowrap;
1623
+ border-width: 0;
1624
+ }
1625
+
1514
1626
  [role=alert] {
1515
1627
  /* Success colors */
1516
1628
  --alert-success-bg: #e6f4ea;
@@ -1528,6 +1640,8 @@ nav[data-breadcrumb] ol li a[href][aria-current] {
1528
1640
  --alert-info-bg: #e5f6fd;
1529
1641
  --alert-info-border: #0288d1;
1530
1642
  --alert-info-text: #084154;
1643
+ /* Animation */
1644
+ --alert-transition-duration: 0.3s;
1531
1645
  --alert-border: thin solid currentColor;
1532
1646
  background-color: var(--alert-bg, whitesmoke);
1533
1647
  border: var(--alert-border, currentColor);
@@ -1539,19 +1653,59 @@ nav[data-breadcrumb] ol li a[href][aria-current] {
1539
1653
  display: flex;
1540
1654
  flex-direction: row;
1541
1655
  border-radius: var(--alert-border-radius, var(--border-radius));
1542
- border: var(--alert-border);
1543
1656
  gap: var(--alert-gap, var(--spc-4));
1657
+ /* Exit animations */
1658
+ transition: opacity var(--alert-transition-duration) ease, transform var(--alert-transition-duration) ease;
1659
+ opacity: 1;
1660
+ transform: translateY(0);
1661
+ /* Focus indicators for keyboard navigation (WCAG 2.4.7) */
1662
+ /* Hide focus outline for mouse clicks, keep for keyboard */
1663
+ /* Variant: Filled - Solid colored background */
1664
+ /* Variant: Soft - No border, subtle background */
1665
+ /* Variant: Outlined - Default with border (no additional styles needed) */
1666
+ }
1667
+ [role=alert]:not([data-visible=true]) {
1668
+ opacity: 0;
1669
+ transform: translateY(-0.5rem);
1670
+ }
1671
+ @media (prefers-reduced-motion: reduce) {
1672
+ [role=alert] {
1673
+ transition-duration: 0.01ms;
1674
+ }
1675
+ }
1676
+ [role=alert]:focus {
1677
+ outline: 2px solid currentColor;
1678
+ outline-offset: 2px;
1679
+ }
1680
+ [role=alert]:focus:not(:focus-visible) {
1681
+ outline: none;
1544
1682
  }
1545
- [role=alert] div {
1683
+ [role=alert] .alert-icon {
1546
1684
  margin-block-start: 0;
1547
1685
  align-items: center;
1548
1686
  }
1549
1687
  [role=alert] .alert-message {
1550
1688
  flex: 2;
1551
1689
  margin-block-start: 0;
1690
+ /* Title styles for both heading and strong elements */
1691
+ /* Reset heading-specific styles */
1552
1692
  }
1553
- [role=alert] .alert-message h3 {
1554
- margin-block-end: 0;
1693
+ [role=alert] .alert-message .alert-title {
1694
+ margin-block-end: var(--spc-1, 0.25rem);
1695
+ margin-block-start: 0;
1696
+ font-weight: var(--alert-title-weight, 600);
1697
+ font-size: var(--alert-title-size, inherit);
1698
+ line-height: 1.4;
1699
+ }
1700
+ [role=alert] .alert-message h2.alert-title,
1701
+ [role=alert] .alert-message h3.alert-title,
1702
+ [role=alert] .alert-message h4.alert-title,
1703
+ [role=alert] .alert-message h5.alert-title,
1704
+ [role=alert] .alert-message h6.alert-title {
1705
+ margin: 0;
1706
+ margin-block-end: var(--spc-1, 0.25rem);
1707
+ font-size: inherit;
1708
+ font-weight: var(--alert-title-weight, 600);
1555
1709
  }
1556
1710
  [role=alert][data-alert~=info] {
1557
1711
  --alert-bg: var(--alert-info-bg);
@@ -1576,6 +1730,41 @@ nav[data-breadcrumb] ol li a[href][aria-current] {
1576
1730
  [role=alert] button[data-btn~=icon] {
1577
1731
  --btn-bg: transparent;
1578
1732
  }
1733
+ [role=alert] * + div {
1734
+ margin-block-start: var(--spc-1);
1735
+ }
1736
+ [role=alert][data-variant=filled] {
1737
+ border: none;
1738
+ }
1739
+ [role=alert][data-variant=filled][data-alert~=info] {
1740
+ --alert-bg: var(--alert-info-border);
1741
+ --alert-color: white;
1742
+ }
1743
+ [role=alert][data-variant=filled][data-alert~=warning] {
1744
+ --alert-bg: var(--alert-warning-border);
1745
+ --alert-color: white;
1746
+ }
1747
+ [role=alert][data-variant=filled][data-alert~=error] {
1748
+ --alert-bg: var(--alert-error-border);
1749
+ --alert-color: white;
1750
+ }
1751
+ [role=alert][data-variant=filled][data-alert~=success] {
1752
+ --alert-bg: var(--alert-success-border);
1753
+ --alert-color: white;
1754
+ }
1755
+ [role=alert][data-variant=filled][data-alert~=default] {
1756
+ --alert-bg: #757575;
1757
+ --alert-color: white;
1758
+ }
1759
+ [role=alert][data-variant=soft] {
1760
+ border: none;
1761
+ }
1762
+ [role=alert][data-variant=outlined] {
1763
+ /* This is the default variant, styles already applied above */
1764
+ }
1765
+ [role=alert] p {
1766
+ font-size: 0.875rem;
1767
+ }
1579
1768
 
1580
1769
  [data-tts] {
1581
1770
  --tts-gap: 0.5rem;
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../sass/_reset.scss","../sass/_properties.scss","../sass/_globals.scss","../sass/_elements.scss","../components/buttons/button.scss","../components/tag/tag.scss","../components/images/img.scss","../components/cards/card.scss","../components/progress/progress.scss","../components/details/details.scss","../components/link/link.scss","../sass/_mixins.scss","../components/layout/_header.scss","../components/layout/landmarks.scss","../components/dialog/dialog.scss","../sass/_grid.scss","../components/badge/badge.scss","../components/nav/nav.scss","../components/form/form.scss","../components/breadcrumbs/breadcrumb.scss","../components/alert/alert.scss","../components/text-to-speech/text-to-speech.scss","../sass/styles/_shadows.scss","../sass/styles/_colors.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;EAGE;;;AAGF;AACE;AACA;EACA;AAEA;AACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAGA;AAAA;EAEE;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE;;;AAGF;AAWA;AACA;EACE;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AACA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;IACE;;EAGF;AAAA;AAAA;IAGE;IACA;IACA;IACA;;;AAIJ;AACA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;AAEA;AAGA;EACA;;AAEA;EACE;EACA;EACA;;;ACpLJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EAGA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;;ACxGF;EACE;AAAA;AAAA;EAGA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACE;;;AAKN;AAAA;AAAA;EAGE;;AACA;AAAA;AAAA;EACE;;;AAIJ;AAAA;AAAA;AAAA;EAIE;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;AAAA;AAAA;EACE;;;AAKF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEE;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AC1IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACdJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EAEE;EACA;;AAGF;EAEE;;AAGA;EACE;;AAOJ;EAEE;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EAGE;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;;;AC1IN;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAEF;AAAA;AAAA;AAAA;EACE;EACA;;;AAGJ;EACE;EACA;;;ACtDF;EACE;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;ACvCN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;EACA;;AAGF;AAAA;EACE;;AAEF;AAAA;EAEE;;AAEF;AAAA;EACE;;;ACzCJ;AACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AACA;AACA;AA8BA;;AA7BA;EAEE;EACA;EACA;EACA;AAgBA;;AAbA;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAKJ;EAEE;EACA;EAEA;AAcA;;AAZA;AACE;EAEA;;AAGF;EAGE;;AAIF;AACE;EAEA;;;ACjEN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAmBA;;AAjBA;EACE;IAbJ;MAcM;MACA;;;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;;AAIF;EACE;;AAEF;EACE;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAEF;EACE;;;AC/GN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA;EAEA;EACA;AAAA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EAEE;;AAGF;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EClEF;EACA;EACA;EACA;EACA;;AD+DE;EACE;EACA;;AAEF;EACE;;ACnEJ;EACE;;ADsEF;EAEE;EACA;EACA;;AACA;EAEE;;;AAKN;EACE;;;AE1FF;AAAA;AAAA;EAIE;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;EACE;EAEA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;;AChEN;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AACA;AAAA;EAEE;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AAEF;AAAA;EACE;EACA;;;AAON;EACE;EACA;EACA;EACA;EACA;;;AChDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AACA;EAEE;EACA;;;AAKN;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;;AC1EF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAEA;EACA;EACA;;AACA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EAIA;EACA;EACA;EACA;EACA;;;AClGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;;;AClBJ;AAAA;EAEE;EACA;;AAEA;EALF;AAAA;IAMI;IACA;IACA;IACA;IACA;;;AAGA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAEF;AAAA;EACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAKF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;ACvFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;;AAGF;EACE;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AAKA;AAAA;AAAA;EACE;EACA;;AACA;AAAA;AAAA;EACE;;AAKN;AAAA;AAAA;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACrFF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAEF;AAAA;EACE;;AACA;AAAA;EACE;EACA;;;AC7BV;AACE;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AACA;EACE;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIA;EACE;;;AC3EN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AACA;AAAA;EAEE;;AACA;AAAA;EACE;;;AC3BN;EACE;EACA;EACA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;AAAA;;;AAIF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AChCF;EACE;;;AAGF;EACE;;AACA;EACE;;AAEF;EACE","file":"index.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../sass/_reset.scss","../sass/_properties.scss","../sass/_globals.scss","../sass/_elements.scss","../components/buttons/button.scss","../components/tag/tag.scss","../components/images/img.scss","../components/cards/card.scss","../components/progress/progress.scss","../components/details/details.scss","../components/link/link.scss","../sass/_mixins.scss","../components/layout/_header.scss","../components/layout/landmarks.scss","../components/dialog/dialog.scss","../sass/_grid.scss","../components/badge/badge.scss","../components/nav/nav.scss","../components/form/form.scss","../components/breadcrumbs/breadcrumb.scss","../components/alert/alert.scss","../components/text-to-speech/text-to-speech.scss","../sass/styles/_shadows.scss","../sass/styles/_colors.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;EAGE;;;AAGF;AACE;AACA;EACA;AAEA;AACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAGA;AAAA;EAEE;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE;;;AAGF;AAWA;AACA;EACE;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AAAA;EAEE;;;AAGF;AACA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;;;AAGF;AACA;EACE;IACE;;EAGF;AAAA;AAAA;IAGE;IACA;IACA;IACA;;;AAIJ;AACA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;;;AAGF;EACE;AAEA;AAGA;EACA;;AAEA;EACE;EACA;EACA;;;ACpLJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EAEA;EACA;EAGA;EAEA;EAEA;EAEA;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;EAGA;EACA;EACA;EACA;EACA;EACA;;;ACzGF;EACE;AAAA;AAAA;EAGA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;;AACA;EACE;;;AAKN;AAAA;AAAA;EAGE;;AACA;AAAA;AAAA;EACE;;;AAIJ;AAAA;AAAA;AAAA;EAIE;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;AAAA;AAAA;EACE;;;AAKF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EAEE;EACA;EACA;;AAEF;AAAA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AC1IA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACdJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EAEE;EACA;;AAGF;EAEE;;AAGA;EACE;;AAOJ;EAEE;EACA;EACA;EACA;;AAGA;EACE;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EAGE;;AAGF;AAAA;EAEE;EACA;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;;;AC7IN;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EACE;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EACE;EACA;;AAEF;AAAA;AAAA;AAAA;EACE;EACA;;;AAGJ;EACE;EACA;;;ACtDF;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA;AACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;AAEA;EACA;EACA;AAEA;EACA;;;AAIA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;;ACvDN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;AAAA;EAEE;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;EACA;;AAGF;AAAA;EACE;;AAEF;AAAA;EAEE;;AAEF;AAAA;EACE;;;AAKJ;EACE;EACA;;AAEA;EACE;EACA;;AAIF;EACE;EACA;;AAIF;EACE;;;AC/DJ;AACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;AACA;AACA;AA8BA;;AA7BA;EAEE;EACA;EACA;EACA;AAgBA;;AAbA;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAIF;AACE;EACA;EACA;;AAKJ;EAEE;EACA;EAEA;AAcA;;AAZA;AACE;EAEA;;AAGF;EAGE;;AAIF;AACE;EAEA;;;ACjEN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAjCF;IAkCI;IACA;;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAIF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAYA;;AAVA;EACE;;AAGF;EACE;EACA;EACA;;AAIF;EACE;;AAEF;EACE;;AAKF;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AACA;EAFF;IAGI;;;AAKN;EACE;IAxHJ;MAyHM;MACA;;;;;ACxHN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAAA;EAEA;EACA;AAAA;EAGA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EAEE;;AAGF;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EClEF;EACA;EACA;EACA;EACA;;AD+DE;EACE;EACA;;AAEF;EACE;;ACnEJ;EACE;;ADsEF;EAEE;EACA;EACA;;AACA;EAEE;;;AAKN;EACE;;;AE1FF;AAAA;AAAA;EAIE;EAEA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;EACE;EAEA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAEE;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EACE;;;AChEN;AAAA;EAEE;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;;AAIJ;EACE;EACA;;AACA;AAAA;EAEE;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AAEF;AAAA;EACE;EACA;;;AAON;EACE;EACA;EACA;EACA;EACA;;;AChDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;IACE;IACA;IACA;IACA;IACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;AAOA;AAQA;;AAbA;EACE;EACA;;AAIF;EACE;EACA;EACA;EACA;;AAIF;EACE;;;AAKN;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;AAEA;;AACA;AAAA;EACE;EACA;;AAGF;AAAA;EACE;;;AC3HJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAIA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EAEA;EACA;EACA;;AACA;EACE;EACA;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EAIA;EACA;EACA;EACA;EACA;;;AClGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;;ACnCN;AAAA;EAEE;EACA;;AAEA;EALF;AAAA;IAMI;IACA;IACA;IACA;IACA;;;AAGA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EACE;;AAEF;AAAA;EACE;;;AAMR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAKF;EACE;;AAKF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;ACvFJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;;AAGF;EACE;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;EACE;;AAKA;AAAA;AAAA;EACE;EACA;;AACA;AAAA;AAAA;EACE;;AAKN;AAAA;AAAA;EACE;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACrFF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;;AACA;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;AAAA;EACE;;AAEF;AAAA;EACE;;AACA;AAAA;EACE;EACA;;;AC7BV;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACE;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EACA;EACA;AAEA;EACA;EAEA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAEA;EACA,YACE;EAEF;EACA;AAWA;AAMA;AAsEA;AA8BA;AAKA;;AAxHA;EACE;EACA;;AAGF;EAlDF;IAmDI;;;AAIF;EACE;EACA;;AAIF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;AAEA;AASA;;AARA;EACE;EACA;EACA;EACA;EACA;;AAIF;AAAA;AAAA;AAAA;AAAA;EAKE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAIA;EACE;;AAIJ;EACE;;AAIF;EACE;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;;AAKJ;EACE;;AAIF;AACE;;AAGF;EACE;;;ACxLJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;;AACA;AAAA;EAEE;;AACA;AAAA;EACE;;;AC3BN;EACE;EACA;EACA;AAAA;EAEA;AAAA;EAEA;AAAA;EAEA;AAAA;;;AAIF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AChCF;EACE;;;AAGF;EACE;;AACA;EACE;;AAEF;EACE","file":"index.css"}
@@ -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
+ });
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- var e = require('react');
4
-
5
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
6
-
7
- var e__default = /*#__PURE__*/_interopDefault(e);
8
-
9
- var t=e__default.default.forwardRef(({as:o,styles:p,classes:n,children:r,defaultStyles:s,...P},m)=>{let C=o??"div",a={...s,...p};return e__default.default.createElement(C,{ref:m,style:a,className:n,...P},r)}),y=t;t.displayName="FP";
10
-
11
- exports.a = y;
12
- //# sourceMappingURL=out.js.map
13
- //# sourceMappingURL=chunk-6TE5QEVE.cjs.map
@@ -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":"+JAAA,OAAOA,GAAS,UAAAC,EAAQ,aAAAC,MAAgC,QCAxD,OAAOF,MAAW,QA+BlB,IAAMG,EAAe,CAAC,CACpB,YAAAC,EACA,QAAAC,EACA,KAAAC,EAAO,IACT,IAKIN,EAAA,cAACO,EAAA,CAAG,GAAG,MAAM,QAAQ,iBACnBP,EAAA,cAACQ,EAAA,CAAQ,KAAMF,EAAM,UAAU,gBAC5BF,GAAe,QAClB,EACAJ,EAAA,cAACS,EAAA,CACC,KAAK,SACL,QAVc,IAAM,CACxBJ,EAAQ,CACV,EASM,UAAU,eACV,aAAW,eACX,WAAS,QAETL,EAAA,cAACU,EAAA,KACCV,EAAA,cAACU,EAAK,OAAL,CAAY,KAAM,GAAI,CACzB,CACF,CACF,EAIGC,EAAQX,EAAM,KAAKG,CAAY,EACtCA,EAAa,YAAc,eC5D3B,OAAOH,MAAW,QAWlB,IAAMY,EAA4C,CAAC,CACjD,QAAAC,EACA,UAAAC,EACA,aAAAC,EACA,YAAAC,CACF,IAEIhB,EAAA,cAACO,EAAA,CAAG,GAAG,UAAU,UAAU,iBACxBS,GACChB,EAAA,cAACS,EAAA,CACC,KAAK,SACL,QAASI,EACT,UAAU,iCACV,WAAS,MAERG,CACH,EAGDF,GACCd,EAAA,cAACS,EAAA,CACC,KAAK,SACL,QAASK,EACT,UAAU,+BACV,WAAS,MAERC,CACH,CAEJ,EAIGE,EAAQL,EC5Cf,OAAS,eAAAM,MAA8B,QAEhC,IAAMC,EAAwB,CACnCC,EACAC,IAEoBH,EACjBI,GAA2C,CAC1C,IAAMC,EAAmBH,EAAU,SAAS,sBAAsB,EAC9DG,IAEAD,EAAE,QAAUC,EAAiB,KAC7BD,EAAE,QAAUC,EAAiB,QAC7BD,EAAE,QAAUC,EAAiB,MAC7BD,EAAE,QAAUC,EAAiB,QAG7BF,EAAY,CAGlB,EACA,CAACD,EAAWC,CAAW,CACzB,EH8BK,IAAMG,EAAqC,CAAC,CACjD,WAAAC,EACA,cAAAC,EACA,QAAAb,EACA,YAAAT,EACA,YAAAuB,EACA,SAAAC,EACA,UAAAd,EACA,aAAAC,EAAe,UACf,YAAAC,EAAc,SACd,UAAAa,EAAY,GACZ,WAAAC,EACA,OAAAC,CACF,IAAM,CACJ,IAAMX,EAAYnB,EAA0B,IAAI,EAC1C,CAAC+B,EAAQC,CAAS,EAAIjC,EAAM,SAASyB,CAAU,EAErDvB,EAAU,IAAM,CACd+B,EAAUR,CAAU,CACtB,EAAG,CAACA,CAAU,CAAC,EAEfvB,EAAU,IAAM,CACd,IAAMgC,EAASd,EAAU,QACpBc,IAEDF,EACEN,EACFQ,EAAO,KAAK,EAEZA,EAAO,UAAU,EAGnBA,EAAO,MAAM,EAEjB,EAAG,CAACF,EAAQN,CAAa,CAAC,EAE1B,IAAML,EAAc,IAAM,CACpBR,GAASA,EAAQ,EACrBoB,EAAU,EAAK,CACjB,EAEME,EAAqBhB,EAAsBC,EAAWC,CAAW,EAEvE,OACErB,EAAA,cAACO,EAAA,CACC,GAAG,SACH,KAAMmB,EAAgB,cAAgB,SACtC,IAAKN,EACL,QAASC,EACT,QAASc,EACT,aAAYH,EAAS,OAAS,OAC9B,UAAW,gBAAqBH,CAAS,GACzC,aAAYF,EACZ,MAAOI,GAEP/B,EAAA,cAACW,EAAA,CAAa,YAAaP,EAAa,QAASiB,EAAa,EAE9DrB,EAAA,cAACO,EAAA,CACC,GAAG,UACH,UAAW,kBAAkBsB,CAAS,GACtC,QAAUP,GAAwBA,EAAE,gBAAgB,GAEnDM,EACA,CAACE,GACA9B,EAAA,cAACiB,EAAA,CACC,QAASI,EACT,UAAWP,EACX,aAAcC,EACd,YAAaC,EACf,CAEJ,CACF,CAEJ,EACOoB,EAAQpC,EAAM,KAAKwB,CAAM","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"]}