@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,29 +1,29 @@
1
- import grantcodes from "@grantcodes/style-dictionary/grantcodes/json";
2
- import wireframe from "@grantcodes/style-dictionary/wireframe/json";
3
- import todomap from "@grantcodes/style-dictionary/todomap/json";
4
- import { LitElement, html, css } from "lit";
5
- import "../../.storybook/components/color-group.component.js";
1
+ import grantcodes from '@grantcodes/style-dictionary/grantcodes/json';
2
+ import todomap from '@grantcodes/style-dictionary/todomap/json';
3
+ import wireframe from '@grantcodes/style-dictionary/wireframe/json';
4
+ import { css, html, LitElement } from 'lit';
5
+ import '../../.storybook/components/color-group.component.js';
6
6
 
7
- const COLOR_PREFIXES = ["g-color-", "g-theme-color-"];
7
+ const COLOR_PREFIXES = ['g-color-', 'g-theme-color-'];
8
8
 
9
9
  // Filter function to only include keys that start with one of the color prefixes
10
10
  const filterByColorPrefixes = (tokens) => {
11
- return Object.fromEntries(
12
- Object.entries(tokens).filter(([key]) =>
13
- COLOR_PREFIXES.some((prefix) => key.startsWith(prefix)),
14
- ),
15
- );
11
+ return Object.fromEntries(
12
+ Object.entries(tokens).filter(([key]) =>
13
+ COLOR_PREFIXES.some((prefix) => key.startsWith(prefix)),
14
+ ),
15
+ );
16
16
  };
17
17
 
18
18
  const themeColors = {
19
- grantcodes: filterByColorPrefixes(grantcodes),
20
- wireframe: filterByColorPrefixes(wireframe),
21
- todomap: filterByColorPrefixes(todomap),
19
+ grantcodes: filterByColorPrefixes(grantcodes),
20
+ wireframe: filterByColorPrefixes(wireframe),
21
+ todomap: filterByColorPrefixes(todomap),
22
22
  };
23
23
 
24
24
  // Color Palette Component
25
25
  class ColorPalette extends LitElement {
26
- static styles = css`
26
+ static styles = css`
27
27
  :host {
28
28
  display: block;
29
29
  padding: 2rem;
@@ -53,91 +53,89 @@ class ColorPalette extends LitElement {
53
53
  }
54
54
  `;
55
55
 
56
- static properties = {
57
- theme: { type: String },
58
- };
59
-
60
- constructor() {
61
- super();
62
- this.theme = "grantcodes";
63
- }
64
-
65
- getColorGroups() {
66
- const currentThemeColors =
67
- themeColors[this.theme] || themeColors.grantcodes;
68
- const colorGroups = {
69
- neutral: {},
70
- "utility-green": {},
71
- "utility-blue": {},
72
- "utility-yellow": {},
73
- "utility-red": {},
74
- "brand-purple": {},
75
- transparent: {},
76
- "theme-background": {},
77
- "theme-border": {},
78
- "theme-content": {},
79
- };
80
-
81
- // Group colors from the filtered theme colors
82
- Object.entries(currentThemeColors).forEach(([tokenName, value]) => {
83
- let key = tokenName;
84
- if (tokenName.startsWith("g-color-")) {
85
- key = tokenName.replace("g-color-", "");
86
- } else if (tokenName.startsWith("g-theme-color-")) {
87
- key = tokenName.replace("g-theme-color-", "");
88
- const parts = key.split("-");
89
- if (parts.length >= 2) {
90
- const category = parts[0];
91
- const name = parts.slice(1).join("-");
92
- if (category === "background") {
93
- colorGroups["theme-background"][name] = { value, tokenName };
94
- } else if (category === "border") {
95
- colorGroups["theme-border"][name] = { value, tokenName };
96
- } else if (category === "content") {
97
- colorGroups["theme-content"][name] = { value, tokenName };
98
- }
99
- return;
100
- }
101
- }
102
-
103
- const parts = key.split("-");
104
-
105
- if (parts[0] === "neutral") {
106
- const name = parts.slice(1).join("-");
107
- colorGroups.neutral[name] = { value, tokenName };
108
- } else if (parts[0] === "utility") {
109
- const color = parts[1];
110
- const name = parts.slice(2).join("-");
111
- if (color === "green") {
112
- colorGroups["utility-green"][name] = { value, tokenName };
113
- } else if (color === "blue") {
114
- colorGroups["utility-blue"][name] = { value, tokenName };
115
- } else if (color === "yellow") {
116
- colorGroups["utility-yellow"][name] = { value, tokenName };
117
- } else if (color === "red") {
118
- colorGroups["utility-red"][name] = { value, tokenName };
119
- }
120
- } else if (parts[0] === "brand") {
121
- const color = parts[1];
122
- const name = parts.slice(2).join("-");
123
- if (color === "purple") {
124
- colorGroups["brand-purple"][name] = { value, tokenName };
125
- }
126
- } else if (parts[0] === "transparent") {
127
- const name = parts[1];
128
- colorGroups.transparent[name] = { value, tokenName };
129
- }
130
- });
131
-
132
- return colorGroups;
133
- }
134
-
135
- render() {
136
- const colorGroups = this.getColorGroups();
137
- const themeDisplay =
138
- this.theme.charAt(0).toUpperCase() + this.theme.slice(1);
139
-
140
- return html`
56
+ static properties = {
57
+ theme: { type: String },
58
+ };
59
+
60
+ constructor() {
61
+ super();
62
+ this.theme = 'grantcodes';
63
+ }
64
+
65
+ getColorGroups() {
66
+ const currentThemeColors = themeColors[this.theme] || themeColors.grantcodes;
67
+ const colorGroups = {
68
+ neutral: {},
69
+ 'utility-green': {},
70
+ 'utility-blue': {},
71
+ 'utility-yellow': {},
72
+ 'utility-red': {},
73
+ 'brand-purple': {},
74
+ transparent: {},
75
+ 'theme-background': {},
76
+ 'theme-border': {},
77
+ 'theme-content': {},
78
+ };
79
+
80
+ // Group colors from the filtered theme colors
81
+ Object.entries(currentThemeColors).forEach(([tokenName, value]) => {
82
+ let key = tokenName;
83
+ if (tokenName.startsWith('g-color-')) {
84
+ key = tokenName.replace('g-color-', '');
85
+ } else if (tokenName.startsWith('g-theme-color-')) {
86
+ key = tokenName.replace('g-theme-color-', '');
87
+ const parts = key.split('-');
88
+ if (parts.length >= 2) {
89
+ const category = parts[0];
90
+ const name = parts.slice(1).join('-');
91
+ if (category === 'background') {
92
+ colorGroups['theme-background'][name] = { value, tokenName };
93
+ } else if (category === 'border') {
94
+ colorGroups['theme-border'][name] = { value, tokenName };
95
+ } else if (category === 'content') {
96
+ colorGroups['theme-content'][name] = { value, tokenName };
97
+ }
98
+ return;
99
+ }
100
+ }
101
+
102
+ const parts = key.split('-');
103
+
104
+ if (parts[0] === 'neutral') {
105
+ const name = parts.slice(1).join('-');
106
+ colorGroups.neutral[name] = { value, tokenName };
107
+ } else if (parts[0] === 'utility') {
108
+ const color = parts[1];
109
+ const name = parts.slice(2).join('-');
110
+ if (color === 'green') {
111
+ colorGroups['utility-green'][name] = { value, tokenName };
112
+ } else if (color === 'blue') {
113
+ colorGroups['utility-blue'][name] = { value, tokenName };
114
+ } else if (color === 'yellow') {
115
+ colorGroups['utility-yellow'][name] = { value, tokenName };
116
+ } else if (color === 'red') {
117
+ colorGroups['utility-red'][name] = { value, tokenName };
118
+ }
119
+ } else if (parts[0] === 'brand') {
120
+ const color = parts[1];
121
+ const name = parts.slice(2).join('-');
122
+ if (color === 'purple') {
123
+ colorGroups['brand-purple'][name] = { value, tokenName };
124
+ }
125
+ } else if (parts[0] === 'transparent') {
126
+ const name = parts[1];
127
+ colorGroups.transparent[name] = { value, tokenName };
128
+ }
129
+ });
130
+
131
+ return colorGroups;
132
+ }
133
+
134
+ render() {
135
+ const colorGroups = this.getColorGroups();
136
+ const themeDisplay = this.theme.charAt(0).toUpperCase() + this.theme.slice(1);
137
+
138
+ return html`
141
139
  <div class="banner">
142
140
  <p class="theme-title">
143
141
  <strong>Current Theme:</strong> ${themeDisplay}
@@ -148,44 +146,44 @@ class ColorPalette extends LitElement {
148
146
  </div>
149
147
 
150
148
  ${Object.entries(colorGroups).map(([groupKey, colors]) => {
151
- if (Object.keys(colors).length === 0) return null;
149
+ if (Object.keys(colors).length === 0) return null;
152
150
 
153
- const title = groupKey
154
- .split("-")
155
- .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
156
- .join(" ");
151
+ const title = groupKey
152
+ .split('-')
153
+ .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
154
+ .join(' ');
157
155
 
158
- return html`
156
+ return html`
159
157
  <color-group
160
158
  .title=${title}
161
159
  .colors=${colors}
162
160
  ></color-group>
163
161
  `;
164
- })}
162
+ })}
165
163
  `;
166
- }
164
+ }
167
165
  }
168
- customElements.define("color-palette", ColorPalette);
166
+ customElements.define('color-palette', ColorPalette);
169
167
 
170
168
  // This default export determines where your story goes in the story list
171
169
  const meta = {
172
- title: "Styles/Colors",
173
- parameters: {
174
- docs: {
175
- description: {
176
- component:
177
- "Color palette from the design system. Colors update based on the selected theme in the Storybook toolbar.",
178
- },
179
- },
180
- },
170
+ title: 'Styles/Colors',
171
+ parameters: {
172
+ docs: {
173
+ description: {
174
+ component:
175
+ 'Color palette from the design system. Colors update based on the selected theme in the Storybook toolbar.',
176
+ },
177
+ },
178
+ },
181
179
  };
182
180
 
183
181
  export default meta;
184
182
 
185
183
  // Main colors story that responds to theme changes
186
184
  export const AllColors = {
187
- render: (args, context) => {
188
- const theme = context.globals?.theme || "grantcodes";
189
- return html`<color-palette .theme=${theme}></color-palette>`;
190
- },
185
+ render: (args, context) => {
186
+ const theme = context.globals?.theme || 'grantcodes';
187
+ return html`<color-palette .theme=${theme}></color-palette>`;
188
+ },
191
189
  };
@@ -1,50 +1,50 @@
1
1
  :where(a) {
2
- color: var(--g-link-color-content-default);
3
- text-decoration: underline;
4
- transition:
5
- color 0.2s,
6
- opacity 0.2s;
2
+ color: var(--g-link-color-content-default);
3
+ text-decoration: underline;
4
+ transition:
5
+ color 0.2s,
6
+ opacity 0.2s;
7
7
  }
8
8
 
9
9
  :where(a:visited) {
10
- color: var(--g-link-color-content-visited);
11
- opacity: 0.6;
10
+ color: var(--g-link-color-content-visited);
11
+ opacity: 0.6;
12
12
  }
13
13
 
14
14
  :where(a:hover),
15
15
  :where(a:focus-visible) {
16
- opacity: 1;
17
- color: var(--g-link-color-content-hover);
18
- text-decoration: underline wavy;
16
+ opacity: 1;
17
+ color: var(--g-link-color-content-hover);
18
+ text-decoration: underline wavy;
19
19
  }
20
20
 
21
21
  :where(a:active) {
22
- color: var(--g-link-color-content-active);
22
+ color: var(--g-link-color-content-active);
23
23
  }
24
24
 
25
25
  /* External links - special styling for links opening in new windows */
26
26
  :where(a[target="_blank"]::after),
27
27
  :where(a[rel~="external"]::after) {
28
- content: "↗";
29
- display: inline-block;
30
- margin-inline-start: 0.25em;
31
- font-size: 0.85em;
32
- opacity: 0.7;
33
- vertical-align: super;
34
- line-height: 1;
28
+ content: "↗";
29
+ display: inline-block;
30
+ margin-inline-start: 0.25em;
31
+ font-size: 0.85em;
32
+ opacity: 0.7;
33
+ vertical-align: super;
34
+ line-height: 1;
35
35
  }
36
36
 
37
37
  /* Alternative: Use :external pseudo-class when supported */
38
38
  /* biome-ignore lint/correctness/noUnknownPseudoClass: :external is a future CSS feature */
39
39
  @supports selector(:external) {
40
- /* biome-ignore lint/correctness/noUnknownPseudoClass: :external is a future CSS feature */
41
- :where(a:external::after) {
42
- content: "↗";
43
- display: inline-block;
44
- margin-inline-start: 0.25em;
45
- font-size: 0.85em;
46
- opacity: 0.7;
47
- vertical-align: super;
48
- line-height: 1;
49
- }
40
+ /* biome-ignore lint/correctness/noUnknownPseudoClass: :external is a future CSS feature */
41
+ :where(a:external::after) {
42
+ content: "↗";
43
+ display: inline-block;
44
+ margin-inline-start: 0.25em;
45
+ font-size: 0.85em;
46
+ opacity: 0.7;
47
+ vertical-align: super;
48
+ line-height: 1;
49
+ }
50
50
  }
@@ -11,5 +11,5 @@ input[type='submit'] {
11
11
  /* Manual conversion needed - inline button styles or use CSS custom properties */
12
12
  button,
13
13
  input[type="submit"] {
14
- /* PLACEHOLDER: Add button styles here */
14
+ /* PLACEHOLDER: Add button styles here */
15
15
  }
@@ -1,151 +1,151 @@
1
1
  :where(input, textarea, select) {
2
- display: block;
3
- accent-color: var(--g-form-input-accent-color-default);
4
- border-radius: var(--g-border-radius-md);
5
- border-width: var(--g-border-width-md);
6
- border-style: solid;
7
- border-color: var(--g-form-color-border-default);
8
- background: var(--g-form-color-background-default);
9
- color: var(--g-form-color-content-default);
10
- padding: 0.5em 1em;
11
- transition-property: color, background-color, border-color, outline;
12
- font-size: var(--g-typography-body-font-size);
2
+ display: block;
3
+ accent-color: var(--g-form-input-accent-color-default);
4
+ border-radius: var(--g-border-radius-md);
5
+ border-width: var(--g-border-width-md);
6
+ border-style: solid;
7
+ border-color: var(--g-form-color-border-default);
8
+ background: var(--g-form-color-background-default);
9
+ color: var(--g-form-color-content-default);
10
+ padding: 0.5em 1em;
11
+ transition-property: color, background-color, border-color, outline;
12
+ font-size: var(--g-typography-body-font-size);
13
13
  }
14
14
 
15
15
  :where(input, textarea, select):not(textarea) {
16
- line-height: 1.1;
16
+ line-height: 1.1;
17
17
  }
18
18
 
19
19
  :where(input, textarea, select):hover {
20
- border-color: var(--g-form-color-border-hover);
21
- color: var(--g-form-color-content-hover);
22
- background: var(--g-form-color-background-hover);
20
+ border-color: var(--g-form-color-border-hover);
21
+ color: var(--g-form-color-content-hover);
22
+ background: var(--g-form-color-background-hover);
23
23
  }
24
24
 
25
25
  :where(input, textarea, select):focus {
26
- border-color: var(--g-form-color-border-focus);
27
- color: var(--g-form-color-content-focus);
28
- background: var(--g-form-color-background-focus);
26
+ border-color: var(--g-form-color-border-focus);
27
+ color: var(--g-form-color-content-focus);
28
+ background: var(--g-form-color-background-focus);
29
29
  }
30
30
 
31
31
  :where(input, textarea, select):focus:invalid {
32
- border-color: var(--g-form-color-border-error);
32
+ border-color: var(--g-form-color-border-error);
33
33
  }
34
34
 
35
35
  :where(input, textarea, select)[readonly] {
36
- cursor: not-allowed;
37
- border-style: dashed;
36
+ cursor: not-allowed;
37
+ border-style: dashed;
38
38
  }
39
39
 
40
40
  :where(input, textarea, select):disabled {
41
- border-color: var(--g-form-color-border-disabled);
42
- background: var(--g-form-color-background-disabled);
43
- color: var(--g-form-color-content-disabled);
44
- cursor: not-allowed;
45
- opacity: 0.6;
46
- filter: grayscale(100%) brightness(80%);
41
+ border-color: var(--g-form-color-border-disabled);
42
+ background: var(--g-form-color-background-disabled);
43
+ color: var(--g-form-color-content-disabled);
44
+ cursor: not-allowed;
45
+ opacity: 0.6;
46
+ filter: grayscale(100%) brightness(80%);
47
47
  }
48
48
 
49
49
  :where(input, textarea, select):disabled:hover,
50
50
  :where(input, textarea, select):disabled:focus-visible {
51
- border-color: var(--g-form-color-border-disabled);
52
- background: var(--g-form-color-background-disabled);
53
- color: var(--g-form-color-content-disabled);
51
+ border-color: var(--g-form-color-border-disabled);
52
+ background: var(--g-form-color-background-disabled);
53
+ color: var(--g-form-color-content-disabled);
54
54
  }
55
55
 
56
56
  :where(input, textarea, select):where(textarea) {
57
- line-height: 1.5;
58
- min-block-size: 4.3em; /* Allows 2 rows with no scrollbar */
59
- resize: vertical;
57
+ line-height: 1.5;
58
+ min-block-size: 4.3em; /* Allows 2 rows with no scrollbar */
59
+ resize: vertical;
60
60
  }
61
61
 
62
62
  :where(input, textarea, select):where(select) {
63
- position: relative;
64
- cursor: pointer;
65
- padding-inline-end: 2.5em;
63
+ position: relative;
64
+ cursor: pointer;
65
+ padding-inline-end: 2.5em;
66
66
  }
67
67
 
68
68
  :where(input, textarea, select):where(select),
69
69
  :where(input, textarea, select):where(select):hover,
70
70
  :where(input, textarea, select):where(select):focus,
71
71
  :where(input, textarea, select):where(select):focus-visible {
72
- background-position: right 1em top 50%;
73
- background-size: 1em;
74
- background-image: url('data:image/svg+xml;utf8,<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="tIfrV5XfYIEuoFNktgCj " aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><polyline points="6 9 12 15 18 9"></polyline></svg>');
75
- background-repeat: no-repeat;
72
+ background-position: right 1em top 50%;
73
+ background-size: 1em;
74
+ background-image: url('data:image/svg+xml;utf8,<svg stroke="currentColor" fill="none" stroke-width="2" viewBox="0 0 24 24" stroke-linecap="round" stroke-linejoin="round" class="tIfrV5XfYIEuoFNktgCj " aria-hidden="true" height="1em" width="1em" xmlns="http://www.w3.org/2000/svg"><polyline points="6 9 12 15 18 9"></polyline></svg>');
75
+ background-repeat: no-repeat;
76
76
  }
77
77
 
78
78
  :where(input, textarea, select):where(option) {
79
- padding-block: 0.2em;
80
- font-size: 1em;
79
+ padding-block: 0.2em;
80
+ font-size: 1em;
81
81
  }
82
82
 
83
83
  :where(input, textarea, select):where(option):nth-of-type(2n) {
84
- background-color: rgba(0, 0, 0, 0.05);
84
+ background-color: rgba(0, 0, 0, 0.05);
85
85
  }
86
86
 
87
87
  :where(input, textarea, select):where(option):checked {
88
- background: var(--g-color-background-primary);
89
- color: var(--g-color-content-primary-knockout);
88
+ background: var(--g-color-background-primary);
89
+ color: var(--g-color-content-primary-knockout);
90
90
  }
91
91
 
92
92
  :where(input, textarea, select):where([type="checkbox"]),
93
93
  :where(input, textarea, select):where([type="radio"]) {
94
- display: block;
95
- position: relative;
96
- appearance: none;
97
- inline-size: 1.2rem;
98
- block-size: 1.2rem;
99
- padding: 0;
100
- cursor: pointer;
94
+ display: block;
95
+ position: relative;
96
+ appearance: none;
97
+ inline-size: 1.2rem;
98
+ block-size: 1.2rem;
99
+ padding: 0;
100
+ cursor: pointer;
101
101
  }
102
102
 
103
103
  :where(input, textarea, select):where([type="checkbox"]) {
104
- border-radius: calc(var(--g-border-radius-md) / 2);
104
+ border-radius: calc(var(--g-border-radius-md) / 2);
105
105
  }
106
106
 
107
107
  :where(input, textarea, select):where([type="checkbox"])::after {
108
- content: "✓";
109
- speak: none;
110
- display: block;
111
- position: absolute;
112
- font-size: 0.8rem;
113
- font-weight: bold;
114
- line-height: 0;
115
- inset-inline-start: 0;
116
- inline-size: 100%;
117
- inset-block-start: 50%;
118
- color: transparent;
119
- text-align: center;
120
- transition: color 0.2s;
108
+ content: "✓";
109
+ speak: none;
110
+ display: block;
111
+ position: absolute;
112
+ font-size: 0.8rem;
113
+ font-weight: bold;
114
+ line-height: 0;
115
+ inset-inline-start: 0;
116
+ inline-size: 100%;
117
+ inset-block-start: 50%;
118
+ color: transparent;
119
+ text-align: center;
120
+ transition: color 0.2s;
121
121
  }
122
122
 
123
123
  :where(input, textarea, select):where([type="checkbox"]):checked {
124
- border-color: var(--g-color-border-primary);
125
- background-color: var(--g-color-border-primary);
124
+ border-color: var(--g-color-border-primary);
125
+ background-color: var(--g-color-border-primary);
126
126
  }
127
127
 
128
128
  :where(input, textarea, select):where([type="checkbox"]):checked::after {
129
- color: var(--g-color-border-default);
129
+ color: var(--g-color-border-default);
130
130
  }
131
131
 
132
132
  :where(input, textarea, select):where([type="radio"]) {
133
- border-radius: 50%;
133
+ border-radius: 50%;
134
134
  }
135
135
 
136
136
  /* PLACEHOLDER: math.div() conversion needed */
137
137
  :where(input, textarea, select):where([type="radio"])::after {
138
- content: "";
139
- display: block;
140
- border-radius: 50%;
141
- /* PLACEHOLDER: $radio-inner-size: 70% - convert math.div(100% - $radio-inner-size, 2) */
142
- inline-size: 70%;
143
- block-size: 70%;
144
- margin: calc((100% - 70%) / 2);
145
- inset: 0;
146
- transition: background-color 0.2s;
138
+ content: "";
139
+ display: block;
140
+ border-radius: 50%;
141
+ /* PLACEHOLDER: $radio-inner-size: 70% - convert math.div(100% - $radio-inner-size, 2) */
142
+ inline-size: 70%;
143
+ block-size: 70%;
144
+ margin: calc((100% - 70%) / 2);
145
+ inset: 0;
146
+ transition: background-color 0.2s;
147
147
  }
148
148
 
149
149
  :where(input, textarea, select):where([type="radio"]):checked::after {
150
- background-color: var(--g-color-border-primary);
150
+ background-color: var(--g-color-border-primary);
151
151
  }
@@ -1,5 +1,5 @@
1
1
  label {
2
- color: inherit;
3
- font: var(--g-typography-body-sm-font);
4
- cursor: pointer;
2
+ color: inherit;
3
+ font: var(--g-typography-body-sm-font);
4
+ cursor: pointer;
5
5
  }
@@ -1,4 +1,4 @@
1
1
  img {
2
- block-size: auto;
3
- background-color: var(--g-color-background-subtle);
2
+ block-size: auto;
3
+ background-color: var(--g-color-background-subtle);
4
4
  }