@grantcodes/ui 2.15.7 → 2.16.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 (300) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/custom-elements.json +476 -346
  3. package/package.json +23 -23
  4. package/src/components/accordion/accordion-item.component.js +17 -19
  5. package/src/components/accordion/accordion-item.css +40 -44
  6. package/src/components/accordion/accordion.component.js +7 -7
  7. package/src/components/accordion/accordion.css +5 -5
  8. package/src/components/accordion/accordion.js +6 -6
  9. package/src/components/accordion/accordion.react.js +6 -6
  10. package/src/components/accordion/accordion.stories.js +10 -10
  11. package/src/components/accordion/accordion.test.js +100 -100
  12. package/src/components/accordion/index.js +6 -6
  13. package/src/components/app-bar/app-bar.component.js +86 -92
  14. package/src/components/app-bar/app-bar.css +187 -203
  15. package/src/components/app-bar/app-bar.js +3 -3
  16. package/src/components/app-bar/app-bar.react.js +9 -9
  17. package/src/components/app-bar/app-bar.stories.js +20 -20
  18. package/src/components/app-bar/app-bar.test.js +190 -237
  19. package/src/components/app-bar/index.js +1 -1
  20. package/src/components/app-bar/nav-link.component.js +7 -9
  21. package/src/components/app-bar/nav-link.css +23 -28
  22. package/src/components/app-bar/nav-link.js +3 -3
  23. package/src/components/app-bar/nav-link.react.js +6 -6
  24. package/src/components/avatar/avatar.component.js +79 -68
  25. package/src/components/avatar/avatar.css +18 -18
  26. package/src/components/avatar/avatar.js +3 -3
  27. package/src/components/avatar/avatar.react.js +6 -6
  28. package/src/components/avatar/avatar.stories.js +24 -23
  29. package/src/components/avatar/avatar.test.js +128 -84
  30. package/src/components/avatar/index.js +1 -1
  31. package/src/components/badge/badge.component.js +23 -23
  32. package/src/components/badge/badge.css +39 -52
  33. package/src/components/badge/badge.js +3 -3
  34. package/src/components/badge/badge.react.js +6 -6
  35. package/src/components/badge/badge.stories.js +23 -23
  36. package/src/components/badge/badge.test.js +53 -68
  37. package/src/components/badge/index.js +1 -1
  38. package/src/components/breadcrumb/breadcrumb.component.js +95 -96
  39. package/src/components/breadcrumb/breadcrumb.css +42 -44
  40. package/src/components/breadcrumb/breadcrumb.js +6 -9
  41. package/src/components/breadcrumb/breadcrumb.react.js +9 -12
  42. package/src/components/breadcrumb/breadcrumb.stories.js +5 -5
  43. package/src/components/breadcrumb/breadcrumb.test.js +139 -151
  44. package/src/components/breadcrumb/index.js +1 -1
  45. package/src/components/button/button.component.js +101 -103
  46. package/src/components/button/button.css +90 -94
  47. package/src/components/button/button.js +3 -3
  48. package/src/components/button/button.react.js +6 -6
  49. package/src/components/button/button.stories.js +25 -25
  50. package/src/components/button/button.test.js +324 -344
  51. package/src/components/button/index.js +1 -1
  52. package/src/components/button-group/button-group.component.js +18 -18
  53. package/src/components/button-group/button-group.css +16 -16
  54. package/src/components/button-group/button-group.js +3 -3
  55. package/src/components/button-group/button-group.react.js +6 -6
  56. package/src/components/button-group/button-group.stories.js +23 -23
  57. package/src/components/button-group/button-group.test.js +54 -54
  58. package/src/components/button-group/index.js +1 -1
  59. package/src/components/card/card.component.js +31 -33
  60. package/src/components/card/card.css +85 -85
  61. package/src/components/card/card.js +4 -4
  62. package/src/components/card/card.react.js +6 -6
  63. package/src/components/card/card.stories.js +27 -26
  64. package/src/components/card/card.test.js +56 -56
  65. package/src/components/card/index.js +1 -1
  66. package/src/components/code-preview/code-preview.component.js +47 -48
  67. package/src/components/code-preview/code-preview.css +11 -11
  68. package/src/components/code-preview/code-preview.js +3 -3
  69. package/src/components/code-preview/code-preview.react.js +6 -6
  70. package/src/components/code-preview/code-preview.stories.js +29 -29
  71. package/src/components/code-preview/code-preview.test.js +112 -135
  72. package/src/components/code-preview/index.js +1 -1
  73. package/src/components/container/container.component.js +27 -27
  74. package/src/components/container/container.css +22 -22
  75. package/src/components/container/container.js +3 -3
  76. package/src/components/container/container.react.js +6 -6
  77. package/src/components/container/container.stories.js +44 -44
  78. package/src/components/container/container.test.js +54 -66
  79. package/src/components/container/index.js +1 -1
  80. package/src/components/countdown/countdown.component.js +160 -162
  81. package/src/components/countdown/countdown.css +50 -34
  82. package/src/components/countdown/countdown.js +3 -3
  83. package/src/components/countdown/countdown.react.js +6 -6
  84. package/src/components/countdown/countdown.stories.js +34 -34
  85. package/src/components/countdown/index.js +1 -1
  86. package/src/components/cta/cta.component.js +77 -81
  87. package/src/components/cta/cta.css +24 -24
  88. package/src/components/cta/cta.js +3 -3
  89. package/src/components/cta/cta.react.js +6 -6
  90. package/src/components/cta/cta.stories.js +32 -32
  91. package/src/components/cta/index.js +1 -1
  92. package/src/components/dialog/dialog.component.js +95 -58
  93. package/src/components/dialog/dialog.css +45 -50
  94. package/src/components/dialog/dialog.js +3 -3
  95. package/src/components/dialog/dialog.react.js +6 -6
  96. package/src/components/dialog/dialog.stories.js +38 -29
  97. package/src/components/dialog/dialog.test.js +188 -102
  98. package/src/components/dialog/index.js +1 -1
  99. package/src/components/dropdown/dropdown.component.js +220 -201
  100. package/src/components/dropdown/dropdown.css +60 -84
  101. package/src/components/dropdown/dropdown.js +6 -9
  102. package/src/components/dropdown/dropdown.react.js +15 -15
  103. package/src/components/dropdown/dropdown.stories.js +10 -10
  104. package/src/components/dropdown/dropdown.test.js +211 -157
  105. package/src/components/dropdown/index.js +1 -1
  106. package/src/components/dropzone/dropzone.component.js +126 -129
  107. package/src/components/dropzone/dropzone.css +35 -37
  108. package/src/components/dropzone/dropzone.js +3 -3
  109. package/src/components/dropzone/dropzone.react.js +6 -6
  110. package/src/components/dropzone/dropzone.stories.js +28 -28
  111. package/src/components/dropzone/dropzone.test.js +91 -99
  112. package/src/components/dropzone/index.js +1 -1
  113. package/src/components/feature-list/feature-list.component.js +78 -86
  114. package/src/components/feature-list/feature-list.css +37 -37
  115. package/src/components/feature-list/feature-list.js +3 -3
  116. package/src/components/feature-list/feature-list.react.js +6 -6
  117. package/src/components/feature-list/feature-list.stories.js +86 -90
  118. package/src/components/feature-list/index.js +1 -1
  119. package/src/components/footer/footer-column.component.js +7 -7
  120. package/src/components/footer/footer-column.css +22 -22
  121. package/src/components/footer/footer.component.js +19 -19
  122. package/src/components/footer/footer.css +38 -38
  123. package/src/components/footer/footer.js +8 -8
  124. package/src/components/footer/footer.react.js +9 -9
  125. package/src/components/footer/footer.stories.js +9 -9
  126. package/src/components/footer/footer.test.js +101 -111
  127. package/src/components/footer/index.js +2 -2
  128. package/src/components/form-field/form-field.component.js +167 -125
  129. package/src/components/form-field/form-field.css +24 -24
  130. package/src/components/form-field/form-field.js +3 -3
  131. package/src/components/form-field/form-field.react.js +6 -6
  132. package/src/components/form-field/form-field.stories.js +53 -44
  133. package/src/components/form-field/form-field.test.js +280 -134
  134. package/src/components/form-field/index.js +1 -1
  135. package/src/components/gallery/gallery-image.component.js +30 -30
  136. package/src/components/gallery/gallery-image.js +3 -3
  137. package/src/components/gallery/gallery-image.react.js +6 -6
  138. package/src/components/gallery/gallery.component.js +24 -17
  139. package/src/components/gallery/gallery.css +79 -72
  140. package/src/components/gallery/gallery.js +3 -3
  141. package/src/components/gallery/gallery.react.js +6 -6
  142. package/src/components/gallery/gallery.stories.js +69 -68
  143. package/src/components/gallery/gallery.test.js +95 -88
  144. package/src/components/gallery/index.js +2 -2
  145. package/src/components/hero/hero.component.js +53 -57
  146. package/src/components/hero/hero.css +27 -27
  147. package/src/components/hero/hero.js +3 -3
  148. package/src/components/hero/hero.react.js +6 -6
  149. package/src/components/hero/hero.stories.js +39 -39
  150. package/src/components/hero/index.js +1 -1
  151. package/src/components/icon/icon.component.js +10 -10
  152. package/src/components/icon/icon.css +13 -13
  153. package/src/components/icon/icon.js +4 -4
  154. package/src/components/icon/icon.react.js +6 -6
  155. package/src/components/icon/icon.stories.js +8 -9
  156. package/src/components/icon/icon.test.js +54 -55
  157. package/src/components/icon/index.js +1 -1
  158. package/src/components/loading/index.js +1 -1
  159. package/src/components/loading/loading.component.js +41 -14
  160. package/src/components/loading/loading.css +47 -30
  161. package/src/components/loading/loading.js +4 -4
  162. package/src/components/loading/loading.react.js +6 -6
  163. package/src/components/loading/loading.stories.js +19 -18
  164. package/src/components/loading/loading.test.js +77 -54
  165. package/src/components/logo-cloud/index.js +1 -1
  166. package/src/components/logo-cloud/logo-cloud.component.js +39 -43
  167. package/src/components/logo-cloud/logo-cloud.css +31 -31
  168. package/src/components/logo-cloud/logo-cloud.js +3 -3
  169. package/src/components/logo-cloud/logo-cloud.react.js +6 -6
  170. package/src/components/logo-cloud/logo-cloud.stories.js +80 -80
  171. package/src/components/map/index.js +1 -1
  172. package/src/components/map/map.component.js +103 -107
  173. package/src/components/map/map.css +22 -22
  174. package/src/components/map/map.js +3 -3
  175. package/src/components/map/map.react.js +6 -6
  176. package/src/components/map/map.stories.js +38 -38
  177. package/src/components/media-text/index.js +1 -1
  178. package/src/components/media-text/media-text.component.js +76 -70
  179. package/src/components/media-text/media-text.css +32 -32
  180. package/src/components/media-text/media-text.js +3 -3
  181. package/src/components/media-text/media-text.react.js +6 -6
  182. package/src/components/media-text/media-text.stories.js +45 -45
  183. package/src/components/media-text/media-text.test.js +72 -0
  184. package/src/components/newsletter/index.js +1 -1
  185. package/src/components/newsletter/newsletter.component.js +56 -64
  186. package/src/components/newsletter/newsletter.css +48 -48
  187. package/src/components/newsletter/newsletter.js +3 -3
  188. package/src/components/newsletter/newsletter.react.js +6 -6
  189. package/src/components/newsletter/newsletter.stories.js +35 -35
  190. package/src/components/notice/index.js +1 -1
  191. package/src/components/notice/notice.component.js +66 -55
  192. package/src/components/notice/notice.css +37 -38
  193. package/src/components/notice/notice.js +3 -3
  194. package/src/components/notice/notice.react.js +6 -6
  195. package/src/components/notice/notice.stories.js +54 -53
  196. package/src/components/notice/notice.test.js +210 -156
  197. package/src/components/pagination/index.js +1 -1
  198. package/src/components/pagination/pagination.component.js +44 -44
  199. package/src/components/pagination/pagination.css +6 -6
  200. package/src/components/pagination/pagination.js +4 -4
  201. package/src/components/pagination/pagination.react.js +6 -6
  202. package/src/components/pagination/pagination.stories.js +20 -18
  203. package/src/components/pagination/pagination.test.js +95 -102
  204. package/src/components/person/index.js +1 -1
  205. package/src/components/person/person.component.js +29 -29
  206. package/src/components/person/person.css +17 -17
  207. package/src/components/person/person.js +4 -4
  208. package/src/components/person/person.react.js +6 -6
  209. package/src/components/person/person.stories.js +34 -33
  210. package/src/components/person/person.test.js +55 -68
  211. package/src/components/pricing/index.js +1 -1
  212. package/src/components/pricing/pricing.component.js +58 -70
  213. package/src/components/pricing/pricing.css +65 -65
  214. package/src/components/pricing/pricing.js +3 -3
  215. package/src/components/pricing/pricing.react.js +6 -6
  216. package/src/components/pricing/pricing.stories.js +96 -96
  217. package/src/components/sidebar/index.js +1 -1
  218. package/src/components/sidebar/sidebar.component.js +157 -130
  219. package/src/components/sidebar/sidebar.css +118 -115
  220. package/src/components/sidebar/sidebar.js +4 -4
  221. package/src/components/sidebar/sidebar.react.js +10 -10
  222. package/src/components/sidebar/sidebar.stories.js +10 -10
  223. package/src/components/sidebar/sidebar.test.js +250 -230
  224. package/src/components/stats/index.js +1 -1
  225. package/src/components/stats/stats.component.js +42 -50
  226. package/src/components/stats/stats.css +29 -29
  227. package/src/components/stats/stats.js +3 -3
  228. package/src/components/stats/stats.react.js +6 -6
  229. package/src/components/stats/stats.stories.js +40 -40
  230. package/src/components/tabs/index.js +2 -2
  231. package/src/components/tabs/internal/tabs-button.component.js +16 -27
  232. package/src/components/tabs/internal/tabs-button.js +3 -3
  233. package/src/components/tabs/internal/tabs-button.react.js +6 -6
  234. package/src/components/tabs/internal/tabs-item.component.js +30 -30
  235. package/src/components/tabs/tab.component.js +9 -11
  236. package/src/components/tabs/tab.js +3 -3
  237. package/src/components/tabs/tab.react.js +6 -6
  238. package/src/components/tabs/tabs.component.js +107 -109
  239. package/src/components/tabs/tabs.css +50 -59
  240. package/src/components/tabs/tabs.js +4 -4
  241. package/src/components/tabs/tabs.react.js +6 -6
  242. package/src/components/tabs/tabs.stories.js +23 -22
  243. package/src/components/tabs/tabs.test.js +201 -147
  244. package/src/components/testimonials/index.js +1 -1
  245. package/src/components/testimonials/testimonials.component.js +47 -51
  246. package/src/components/testimonials/testimonials.css +31 -31
  247. package/src/components/testimonials/testimonials.js +3 -3
  248. package/src/components/testimonials/testimonials.react.js +6 -6
  249. package/src/components/testimonials/testimonials.stories.js +49 -51
  250. package/src/components/toast/index.js +1 -1
  251. package/src/components/toast/toast.component.js +217 -148
  252. package/src/components/toast/toast.css +101 -99
  253. package/src/components/toast/toast.js +6 -9
  254. package/src/components/toast/toast.react.js +12 -12
  255. package/src/components/toast/toast.stories.js +75 -49
  256. package/src/components/toast/toast.test.js +260 -221
  257. package/src/components/tooltip/index.js +1 -1
  258. package/src/components/tooltip/tooltip.component.js +56 -49
  259. package/src/components/tooltip/tooltip.css +61 -50
  260. package/src/components/tooltip/tooltip.js +4 -4
  261. package/src/components/tooltip/tooltip.react.js +6 -6
  262. package/src/components/tooltip/tooltip.stories.js +24 -23
  263. package/src/components/tooltip/tooltip.test.js +143 -155
  264. package/src/constructor.test.js +31 -0
  265. package/src/css/base.css +1 -0
  266. package/src/css/colors.stories.js +120 -122
  267. package/src/css/elements/a.css +28 -28
  268. package/src/css/elements/forms/button.css +1 -1
  269. package/src/css/elements/forms/input.css +80 -80
  270. package/src/css/elements/forms/label.css +3 -3
  271. package/src/css/elements/media/image.css +2 -2
  272. package/src/css/elements.stories.js +48 -49
  273. package/src/css/helpers.css +8 -8
  274. package/src/css/layers.stories.js +5 -5
  275. package/src/css/reset.css +102 -102
  276. package/src/css/themes/todomap.css +1 -1
  277. package/src/css/tokens.stories.js +50 -53
  278. package/src/css/typography.css +30 -32
  279. package/src/css/typography.stories.js +92 -92
  280. package/src/css/util/focus-ring.css +12 -20
  281. package/src/css/view-transitions.css +16 -0
  282. package/src/exports.test.js +89 -105
  283. package/src/icons.js +1 -1
  284. package/src/lib/generate-id.js +1 -1
  285. package/src/lib/slot-presence-controller.js +48 -0
  286. package/src/lib/styles/all.css +38 -37
  287. package/src/lib/styles/focus-ring.css +12 -20
  288. package/src/lib/view-transition.js +42 -0
  289. package/src/lib/view-transition.test.js +105 -0
  290. package/src/main.js +29 -29
  291. package/src/pages/agency.stories.js +59 -59
  292. package/src/pages/blog-post.stories.js +48 -48
  293. package/src/pages/saas-landing.stories.js +180 -180
  294. package/src/react.js +44 -44
  295. package/src/react.test.js +42 -51
  296. package/src/test-utils/assert-helpers.js +39 -58
  297. package/src/test-utils/events.js +32 -34
  298. package/src/test-utils/fixture.js +31 -31
  299. package/src/test-utils/index.js +3 -3
  300. package/src/types.d.ts +3 -3
@@ -1,84 +1,71 @@
1
1
  *,
2
2
  *::before,
3
3
  *::after {
4
- box-sizing: border-box;
4
+ box-sizing: border-box;
5
5
  }
6
6
 
7
7
  :host {
8
- display: inline-flex;
8
+ display: inline-flex;
9
9
  }
10
10
 
11
11
  .badge {
12
- display: inline-flex;
13
- align-items: center;
14
- gap: var(--g-spacing-xs);
15
- padding-inline: 0.625em;
16
- padding-block: 0.375em;
17
- border-radius: var(--g-border-radius-md);
18
- font: var(--g-typography-body-sm-font);
19
- font-size: var(--g-typography-font-size-2xs);
20
- line-height: 1;
21
- white-space: nowrap;
22
- border-width: 1px;
23
- border-style: solid;
24
- transition: all 0.2s ease;
12
+ display: inline-flex;
13
+ align-items: center;
14
+ gap: var(--g-spacing-xs);
15
+ padding-inline: 0.625em;
16
+ padding-block: 0.375em;
17
+ border-radius: var(--g-border-radius-md);
18
+ font: var(--g-typography-body-sm-font);
19
+ font-size: var(--g-typography-font-size-2xs);
20
+ line-height: 1;
21
+ white-space: nowrap;
22
+ border-width: 1px;
23
+ border-style: solid;
24
+ transition:
25
+ background-color 0.2s ease,
26
+ border-color 0.2s ease,
27
+ color 0.2s ease;
25
28
  }
26
29
 
27
30
  /* Soft style variants */
28
31
  .badge--primary {
29
- background-color: var(--g-color-primary-200);
30
- color: var(--g-color-primary-600);
31
- border-color: transparent;
32
+ background-color: var(--g-color-primary-200);
33
+ color: var(--g-color-primary-600);
34
+ border-color: transparent;
32
35
  }
33
36
 
34
37
  .badge--success {
35
- background-color: color-mix(
36
- in srgb,
37
- var(--g-color-utility-success) 15%,
38
- transparent
39
- );
40
- color: var(--g-color-content-utility-success);
41
- border-color: transparent;
38
+ background-color: color-mix(in srgb, var(--g-color-utility-success) 15%, transparent);
39
+ color: var(--g-color-content-utility-success);
40
+ border-color: transparent;
42
41
  }
43
42
 
44
43
  .badge--warning {
45
- background-color: color-mix(
46
- in srgb,
47
- var(--g-color-utility-warning) 15%,
48
- transparent
49
- );
50
- color: var(--g-color-content-utility-warning);
51
- border-color: transparent;
44
+ background-color: color-mix(in srgb, var(--g-color-utility-warning) 15%, transparent);
45
+ color: var(--g-color-content-utility-warning);
46
+ border-color: transparent;
52
47
  }
53
48
 
54
49
  .badge--error {
55
- background-color: color-mix(
56
- in srgb,
57
- var(--g-color-utility-error) 15%,
58
- transparent
59
- );
60
- color: var(--g-color-content-utility-error);
61
- border-color: transparent;
50
+ background-color: color-mix(in srgb, var(--g-color-utility-error) 15%, transparent);
51
+ color: var(--g-color-content-utility-error);
52
+ border-color: transparent;
62
53
  }
63
54
 
64
55
  .badge--info {
65
- background-color: color-mix(
66
- in srgb,
67
- var(--g-color-utility-info) 15%,
68
- transparent
69
- );
70
- color: var(--g-color-content-utility-info);
71
- border-color: transparent;
56
+ background-color: color-mix(in srgb, var(--g-color-utility-info) 15%, transparent);
57
+ color: var(--g-color-content-utility-info);
58
+ border-color: transparent;
72
59
  }
73
60
 
74
61
  .badge--neutral {
75
- background-color: var(--g-color-background-subtle);
76
- color: var(--g-color-content-default);
77
- border-color: transparent;
62
+ background-color: var(--g-color-background-subtle);
63
+ color: var(--g-color-content-default);
64
+ border-color: transparent;
78
65
  }
79
66
 
80
67
  .badge__content {
81
- display: inline-flex;
82
- align-items: center;
83
- gap: 0.25em;
68
+ display: inline-flex;
69
+ align-items: center;
70
+ gap: 0.25em;
84
71
  }
@@ -1,6 +1,6 @@
1
- import { GrantCodesBadge } from "./badge.component.js";
1
+ import { GrantCodesBadge } from './badge.component.js';
2
2
 
3
- export * from "./badge.component.js";
3
+ export * from './badge.component.js';
4
4
  export default GrantCodesBadge;
5
5
 
6
- customElements.define("grantcodes-badge", GrantCodesBadge);
6
+ customElements.define('grantcodes-badge', GrantCodesBadge);
@@ -1,9 +1,9 @@
1
- import React from "react";
2
- import { createComponent } from "@lit/react";
3
- import { GrantCodesBadge } from "./badge.js";
1
+ import { createComponent } from '@lit/react';
2
+ import React from 'react';
3
+ import { GrantCodesBadge } from './badge.js';
4
4
 
5
5
  export const Badge = createComponent({
6
- tagName: "grantcodes-badge",
7
- elementClass: GrantCodesBadge,
8
- react: React,
6
+ tagName: 'grantcodes-badge',
7
+ elementClass: GrantCodesBadge,
8
+ react: React,
9
9
  });
@@ -1,19 +1,19 @@
1
- import { html } from "lit";
2
- import "./badge.js";
1
+ import { html } from 'lit';
2
+ import './badge.js';
3
3
 
4
4
  const meta = {
5
- title: "Components/Badge",
6
- component: "grantcodes-badge",
7
- args: {
8
- variant: "neutral",
9
- },
10
- argTypes: {
11
- variant: {
12
- control: "select",
13
- options: ["primary", "success", "warning", "error", "info", "neutral"],
14
- },
15
- },
16
- render: (args) => html`
5
+ title: 'Components/Badge',
6
+ component: 'grantcodes-badge',
7
+ args: {
8
+ variant: 'neutral',
9
+ },
10
+ argTypes: {
11
+ variant: {
12
+ control: 'select',
13
+ options: ['primary', 'success', 'warning', 'error', 'info', 'neutral'],
14
+ },
15
+ },
16
+ render: (args) => html`
17
17
  <grantcodes-badge variant=${args.variant} style=${args.style}>
18
18
  Badge
19
19
  </grantcodes-badge>
@@ -28,19 +28,19 @@ export default meta;
28
28
  export const Badge = {};
29
29
 
30
30
  export const Primary = {
31
- args: {
32
- variant: "primary",
33
- },
31
+ args: {
32
+ variant: 'primary',
33
+ },
34
34
  };
35
35
 
36
36
  export const Success = {
37
- args: {
38
- variant: "success",
39
- },
37
+ args: {
38
+ variant: 'success',
39
+ },
40
40
  };
41
41
 
42
42
  export const Warning = {
43
- args: {
44
- variant: "warning",
45
- },
43
+ args: {
44
+ variant: 'warning',
45
+ },
46
46
  };
@@ -1,83 +1,68 @@
1
- import { describe, it, afterEach } from "node:test";
2
- import { strict as assert } from "node:assert";
3
- import { fixture, cleanup } from "../../test-utils/index.js";
4
- import "./badge.js";
1
+ import { strict as assert } from 'node:assert';
2
+ import { afterEach, describe, it } from 'node:test';
3
+ import { cleanup, fixture } from '../../test-utils/index.js';
4
+ import './badge.js';
5
5
 
6
- describe("Badge Component", () => {
7
- let element;
6
+ describe('Badge Component', () => {
7
+ let element;
8
8
 
9
- afterEach(() => {
10
- cleanup(element);
11
- });
9
+ afterEach(() => {
10
+ cleanup(element);
11
+ });
12
12
 
13
- it("should render with default properties", async () => {
14
- element = await fixture("grantcodes-badge");
15
- assert.ok(element, "Element should be created");
16
- assert.ok(element.shadowRoot, "Element should have shadow root");
17
- });
13
+ it('should render with default properties', async () => {
14
+ element = await fixture('grantcodes-badge');
15
+ assert.ok(element, 'Element should be created');
16
+ assert.ok(element.shadowRoot, 'Element should have shadow root');
17
+ });
18
18
 
19
- it("should have neutral variant by default", async () => {
20
- element = await fixture("grantcodes-badge");
21
- assert.strictEqual(
22
- element.variant,
23
- "neutral",
24
- "Default variant should be neutral",
25
- );
26
- });
19
+ it('should have neutral variant by default', async () => {
20
+ element = await fixture('grantcodes-badge');
21
+ assert.strictEqual(element.variant, 'neutral', 'Default variant should be neutral');
22
+ });
27
23
 
28
- // it("should have outline style by default", async () => {
29
- // element = await fixture("grantcodes-badge");
30
- // assert.strictEqual(element.style, "outline", "Default style should be outline");
31
- // });
24
+ // it("should have outline style by default", async () => {
25
+ // element = await fixture("grantcodes-badge");
26
+ // assert.strictEqual(element.style, "outline", "Default style should be outline");
27
+ // });
32
28
 
33
- // it("should render badge with correct style class", async () => {
34
- // element = await fixture("grantcodes-badge", {
35
- // style: "outline",
36
- // });
29
+ // it("should render badge with correct style class", async () => {
30
+ // element = await fixture("grantcodes-badge", {
31
+ // style: "outline",
32
+ // });
37
33
 
38
- // const badge = element.shadowRoot.querySelector(".badge--outline");
39
- // assert.ok(badge, "Badge should have outline style class");
40
- // });
34
+ // const badge = element.shadowRoot.querySelector(".badge--outline");
35
+ // assert.ok(badge, "Badge should have outline style class");
36
+ // });
41
37
 
42
- it("should render slotted content", async () => {
43
- element = await fixture("grantcodes-badge");
44
- element.textContent = "Badge Text";
38
+ it('should render slotted content', async () => {
39
+ element = await fixture('grantcodes-badge');
40
+ element.textContent = 'Badge Text';
45
41
 
46
- await element.updateComplete;
42
+ await element.updateComplete;
47
43
 
48
- assert.strictEqual(
49
- element.textContent,
50
- "Badge Text",
51
- "Slotted content should be rendered",
52
- );
53
- });
44
+ assert.strictEqual(element.textContent, 'Badge Text', 'Slotted content should be rendered');
45
+ });
54
46
 
55
- it("should support all variant types", async () => {
56
- const variants = [
57
- "primary",
58
- "success",
59
- "warning",
60
- "error",
61
- "info",
62
- "neutral",
63
- ];
47
+ it('should support all variant types', async () => {
48
+ const variants = ['primary', 'success', 'warning', 'error', 'info', 'neutral'];
64
49
 
65
- for (const variant of variants) {
66
- element = await fixture("grantcodes-badge", { variant });
67
- const badge = element.shadowRoot.querySelector(`.badge--${variant}`);
68
- assert.ok(badge, `Badge should have ${variant} variant class`);
69
- cleanup(element);
70
- }
71
- });
50
+ for (const variant of variants) {
51
+ element = await fixture('grantcodes-badge', { variant });
52
+ const badge = element.shadowRoot.querySelector(`.badge--${variant}`);
53
+ assert.ok(badge, `Badge should have ${variant} variant class`);
54
+ cleanup(element);
55
+ }
56
+ });
72
57
 
73
- // it("should support all style types", async () => {
74
- // const styles = ["outline", "soft"];
58
+ // it("should support all style types", async () => {
59
+ // const styles = ["outline", "soft"];
75
60
 
76
- // for (const style of styles) {
77
- // element = await fixture("grantcodes-badge", { style });
78
- // const badge = element.shadowRoot.querySelector(`.badge--${style}`);
79
- // assert.ok(badge, `Badge should have ${style} style class`);
80
- // cleanup(element);
81
- // }
82
- // });
61
+ // for (const style of styles) {
62
+ // element = await fixture("grantcodes-badge", { style });
63
+ // const badge = element.shadowRoot.querySelector(`.badge--${style}`);
64
+ // assert.ok(badge, `Badge should have ${style} style class`);
65
+ // cleanup(element);
66
+ // }
67
+ // });
83
68
  });
@@ -1 +1 @@
1
- export * from "./badge.js";
1
+ export * from './badge.js';
@@ -1,112 +1,111 @@
1
- import { LitElement } from "lit";
2
- import { html } from "lit/static-html.js";
3
- import focusRingStyles from "../../lib/styles/focus-ring.css" with {
4
- type: "css",
5
- };
6
- import breadcrumbStyles from "./breadcrumb.css" with { type: "css" };
1
+ import { LitElement } from 'lit';
2
+ import { html } from 'lit/static-html.js';
3
+ import linkStyles from '../../css/elements/a.css' with { type: 'css' };
4
+ import focusRingStyles from '../../lib/styles/focus-ring.css' with { type: 'css' };
5
+ import breadcrumbStyles from './breadcrumb.css' with { type: 'css' };
7
6
 
8
7
  export class GrantCodesBreadcrumb extends LitElement {
9
- static styles = [focusRingStyles, breadcrumbStyles];
10
-
11
- static properties = {
12
- separator: { type: String },
13
- };
14
-
15
- constructor() {
16
- super();
17
-
18
- /**
19
- * Custom separator between breadcrumb items
20
- * @type {string}
21
- */
22
- this.separator = "/";
23
- }
24
-
25
- firstUpdated() {
26
- const value = this.separator ?? "/";
27
- this.style.setProperty("--component-breadcrumb-separator", `'${value}'`);
28
-
29
- // Track slot content changes to update separators
30
- const slot = this.renderRoot.querySelector("slot:not([name])");
31
- if (slot) {
32
- slot.addEventListener("slotchange", () => this._updateSeparators());
33
- this._updateSeparators();
34
- }
35
- }
36
-
37
- updated(changed) {
38
- if (changed.has("separator")) {
39
- // Reflect separator into CSS custom property for pseudo-element content
40
- const value = this.separator ?? "/";
41
- this.style.setProperty("--component-breadcrumb-separator", `'${value}'`);
42
- }
43
-
44
- // Recalculate separators if light DOM may have changed
45
- if (changed.size > 0) {
46
- this._updateSeparators();
47
- }
48
- }
49
-
50
- _updateSeparators() {
51
- const slot = this.renderRoot.querySelector("slot:not([name])");
52
- if (!slot) return;
53
- const items = slot
54
- .assignedElements({ flatten: true })
55
- .filter((el) => el.tagName === "GRANTCODES-BREADCRUMB-ITEM");
56
- items.forEach((el, index) => {
57
- if (index < items.length - 1) {
58
- el.setAttribute("data-has-separator", "");
59
- } else {
60
- el.removeAttribute("data-has-separator");
61
- }
62
- });
63
- }
64
-
65
- render() {
66
- return html`
8
+ static styles = [focusRingStyles, breadcrumbStyles];
9
+
10
+ static properties = {
11
+ separator: { type: String },
12
+ };
13
+
14
+ constructor() {
15
+ super();
16
+
17
+ /**
18
+ * Custom separator between breadcrumb items
19
+ * @type {string}
20
+ */
21
+ this.separator = '/';
22
+ }
23
+
24
+ firstUpdated() {
25
+ const value = this.separator ?? '/';
26
+ this.style.setProperty('--component-breadcrumb-separator', `'${value}'`);
27
+
28
+ // Track slot content changes to update separators
29
+ const slot = this.renderRoot.querySelector('slot:not([name])');
30
+ if (slot) {
31
+ slot.addEventListener('slotchange', () => this._updateSeparators());
32
+ this._updateSeparators();
33
+ }
34
+ }
35
+
36
+ updated(changed) {
37
+ if (changed.has('separator')) {
38
+ // Reflect separator into CSS custom property for pseudo-element content
39
+ const value = this.separator ?? '/';
40
+ this.style.setProperty('--component-breadcrumb-separator', `'${value}'`);
41
+ }
42
+
43
+ // Recalculate separators if light DOM may have changed
44
+ if (changed.size > 0) {
45
+ this._updateSeparators();
46
+ }
47
+ }
48
+
49
+ _updateSeparators() {
50
+ const slot = this.renderRoot.querySelector('slot:not([name])');
51
+ if (!slot) return;
52
+ const items = slot
53
+ .assignedElements({ flatten: true })
54
+ .filter((el) => el.tagName === 'GRANTCODES-BREADCRUMB-ITEM');
55
+ items.forEach((el, index) => {
56
+ if (index < items.length - 1) {
57
+ el.setAttribute('data-has-separator', '');
58
+ } else {
59
+ el.removeAttribute('data-has-separator');
60
+ }
61
+ });
62
+ }
63
+
64
+ render() {
65
+ return html`
67
66
  <nav aria-label="Breadcrumb" class="breadcrumb">
68
67
  <ol class="breadcrumb__list">
69
68
  <slot></slot>
70
69
  </ol>
71
70
  </nav>
72
71
  `;
73
- }
72
+ }
74
73
  }
75
74
 
76
75
  export class GrantCodesBreadcrumbItem extends LitElement {
77
- static styles = [focusRingStyles, breadcrumbStyles];
78
-
79
- static properties = {
80
- href: { type: String },
81
- current: { type: Boolean },
82
- };
83
-
84
- constructor() {
85
- super();
86
-
87
- /**
88
- * URL for the breadcrumb item
89
- * @type {string}
90
- */
91
- this.href = "";
92
-
93
- /**
94
- * Whether this is the current page
95
- * @type {boolean}
96
- */
97
- this.current = false;
98
- }
99
-
100
- render() {
101
- const content =
102
- this.href && !this.current
103
- ? html`<a href="${this.href}" class="breadcrumb__link focus-ring"><slot></slot></a>`
104
- : html`<span class="breadcrumb__text"><slot></slot></span>`;
105
-
106
- return html`
76
+ static styles = [linkStyles, focusRingStyles, breadcrumbStyles];
77
+
78
+ static properties = {
79
+ href: { type: String },
80
+ current: { type: Boolean },
81
+ };
82
+
83
+ constructor() {
84
+ super();
85
+
86
+ /**
87
+ * URL for the breadcrumb item
88
+ * @type {string}
89
+ */
90
+ this.href = '';
91
+
92
+ /**
93
+ * Whether this is the current page
94
+ * @type {boolean}
95
+ */
96
+ this.current = false;
97
+ }
98
+
99
+ render() {
100
+ const content =
101
+ this.href && !this.current
102
+ ? html`<a href="${this.href}" class="breadcrumb__link focus-ring"><slot></slot></a>`
103
+ : html`<span class="breadcrumb__text"><slot></slot></span>`;
104
+
105
+ return html`
107
106
  <li class="breadcrumb__item" ?data-current=${this.current}>
108
107
  ${content}
109
108
  </li>
110
109
  `;
111
- }
110
+ }
112
111
  }