@grantcodes/ui 2.12.1 → 2.15.2

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 (69) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +5 -1
  3. package/custom-elements.json +295 -176
  4. package/package.json +11 -3
  5. package/src/components/accordion/accordion-item.css +14 -14
  6. package/src/components/accordion/accordion.css +1 -1
  7. package/src/components/app-bar/app-bar.css +22 -22
  8. package/src/components/app-bar/nav-link.css +10 -11
  9. package/src/components/avatar/avatar.css +5 -6
  10. package/src/components/badge/badge.css +16 -15
  11. package/src/components/breadcrumb/breadcrumb.css +10 -11
  12. package/src/components/button/button.css +112 -24
  13. package/src/components/button/button.stories.js +37 -0
  14. package/src/components/button-group/button-group.css +4 -4
  15. package/src/components/card/card.css +25 -25
  16. package/src/components/code-preview/code-preview.css +6 -6
  17. package/src/components/container/container.css +2 -1
  18. package/src/components/container/container.stories.js +1 -1
  19. package/src/components/countdown/countdown.css +13 -13
  20. package/src/components/cta/cta.component.js +3 -3
  21. package/src/components/cta/cta.css +16 -18
  22. package/src/components/dialog/dialog.css +14 -14
  23. package/src/components/dropdown/dropdown.css +14 -14
  24. package/src/components/dropzone/dropzone.css +11 -12
  25. package/src/components/feature-list/feature-list.css +15 -15
  26. package/src/components/footer/footer-column.css +9 -10
  27. package/src/components/footer/footer.css +13 -13
  28. package/src/components/form-field/form-field.css +6 -6
  29. package/src/components/hero/hero.css +9 -9
  30. package/src/components/loading/loading.css +3 -3
  31. package/src/components/logo-cloud/logo-cloud.css +9 -11
  32. package/src/components/map/map.css +8 -8
  33. package/src/components/media-text/media-text.css +9 -9
  34. package/src/components/newsletter/newsletter.css +21 -21
  35. package/src/components/notice/notice.css +17 -17
  36. package/src/components/person/index.js +1 -0
  37. package/src/components/person/person.component.js +51 -0
  38. package/src/components/person/person.css +39 -0
  39. package/src/components/person/person.js +8 -0
  40. package/src/components/person/person.react.js +9 -0
  41. package/src/components/person/person.stories.js +59 -0
  42. package/src/components/person/person.test.js +69 -0
  43. package/src/components/pricing/pricing.css +34 -36
  44. package/src/components/sidebar/sidebar.css +21 -21
  45. package/src/components/stats/stats.css +14 -16
  46. package/src/components/tabs/internal/tabs-item.component.js +5 -0
  47. package/src/components/tabs/tabs.component.js +4 -2
  48. package/src/components/tabs/tabs.css +15 -15
  49. package/src/components/testimonials/testimonials.component.js +8 -22
  50. package/src/components/testimonials/testimonials.css +12 -31
  51. package/src/components/toast/toast.css +23 -24
  52. package/src/components/tooltip/tooltip.css +6 -6
  53. package/src/css/colors.stories.js +6 -6
  54. package/src/css/elements/a.css +4 -4
  55. package/src/css/elements/forms/input.css +27 -27
  56. package/src/css/elements/forms/label.css +1 -1
  57. package/src/css/elements/media/image.css +1 -0
  58. package/src/css/layers.stories.js +3 -3
  59. package/src/css/reset.css +3 -3
  60. package/src/css/themes/todomap.css +1 -1
  61. package/src/css/tokens.stories.js +16 -16
  62. package/src/css/typography.css +4 -4
  63. package/src/css/util/focus-ring.css +9 -9
  64. package/src/lib/styles/focus-ring.css +9 -9
  65. package/src/main.js +1 -0
  66. package/src/pages/agency.stories.js +5 -4
  67. package/src/pages/blog-post.stories.js +33 -50
  68. package/src/pages/saas-landing.stories.js +8 -7
  69. package/src/react.js +1 -0
@@ -10,8 +10,8 @@
10
10
 
11
11
  .accordion__item {
12
12
  border: 1px solid
13
- var(--g-theme-color-border-subtle, var(--g-theme-color-border-default));
14
- border-radius: var(--g-theme-border-radius-md, 0.5rem);
13
+ var(--g-color-border-subtle, var(--g-color-border-default));
14
+ border-radius: var(--g-border-radius-md, 0.5rem);
15
15
  }
16
16
 
17
17
  .accordion__item::details-content {
@@ -27,23 +27,23 @@
27
27
  }
28
28
 
29
29
  .accordion__summary {
30
- padding: var(--g-theme-spacing-md);
30
+ padding: var(--g-spacing-md);
31
31
  cursor: pointer;
32
- background: var(--g-theme-color-background-subtle);
33
- font-weight: var(--g-typography-font-weight-500);
32
+ background: var(--g-color-background-subtle);
33
+ font-weight: var(--g-typography-body-font-weight);
34
34
  list-style: none;
35
35
  display: flex;
36
36
  justify-content: space-between;
37
37
  align-items: center;
38
- gap: var(--g-theme-spacing-md);
39
- border-radius: var(--g-theme-border-radius-md, 0.5rem);
38
+ gap: var(--g-spacing-md);
39
+ border-radius: var(--g-border-radius-md, 0.5rem);
40
40
  transition-property: background-color, outline-width, outline-color;
41
41
  }
42
42
 
43
43
  .accordion__summary:hover {
44
44
  background: var(
45
- --g-theme-color-background-subtle-hover,
46
- var(--g-theme-color-background-subtle)
45
+ --g-color-background-subtle-hover,
46
+ var(--g-color-background-subtle)
47
47
  );
48
48
  }
49
49
 
@@ -57,7 +57,7 @@
57
57
  block-size: 1em;
58
58
  flex-shrink: 0;
59
59
  transition: transform 0.25s ease;
60
- color: var(--g-theme-color-content-subtle, currentColor);
60
+ color: var(--g-color-content-subtle, currentColor);
61
61
  }
62
62
 
63
63
  .accordion__item[open] .accordion__chevron {
@@ -65,10 +65,10 @@
65
65
  }
66
66
 
67
67
  .accordion__content {
68
- padding: var(--g-theme-spacing-md);
69
- background: var(--g-theme-color-background-default);
70
- border-radius: 0 0 var(--g-theme-border-radius-md, 0.5rem)
71
- var(--g-theme-border-radius-md, 0.5rem);
68
+ padding: var(--g-spacing-md);
69
+ background: var(--g-color-background-default);
70
+ border-radius: 0 0 var(--g-border-radius-md, 0.5rem)
71
+ var(--g-border-radius-md, 0.5rem);
72
72
  }
73
73
 
74
74
  @media (prefers-reduced-motion: reduce) {
@@ -11,5 +11,5 @@
11
11
  .accordion {
12
12
  display: flex;
13
13
  flex-direction: column;
14
- gap: var(--g-theme-spacing-sm);
14
+ gap: var(--g-spacing-sm);
15
15
  }
@@ -11,12 +11,13 @@
11
11
  }
12
12
 
13
13
  .app-bar {
14
- background-color: var(--g-theme-color-background-default);
15
- border-block-end: 1px solid var(--g-theme-color-border-default);
14
+ background-color: var(--g-color-background-default);
15
+ border-block-end: 1px solid var(--g-color-border-default);
16
16
  position: relative;
17
17
  z-index: 100;
18
18
  }
19
19
 
20
+ :host([sticky]),
20
21
  .app-bar--sticky {
21
22
  position: sticky;
22
23
  inset-block-start: 0;
@@ -32,9 +33,9 @@
32
33
  .app-bar__bar {
33
34
  display: flex;
34
35
  align-items: center;
35
- gap: var(--g-theme-spacing-lg);
36
- padding-inline: var(--g-theme-spacing-md);
37
- padding-block: var(--g-theme-spacing-md);
36
+ gap: var(--g-spacing-lg);
37
+ padding-inline: var(--g-spacing-md);
38
+ padding-block: var(--g-spacing-md);
38
39
  max-inline-size: 1400px;
39
40
  margin-inline: auto;
40
41
  }
@@ -55,7 +56,7 @@
55
56
  .app-bar__actions {
56
57
  display: flex;
57
58
  align-items: center;
58
- gap: var(--g-theme-spacing-sm);
59
+ gap: var(--g-spacing-sm);
59
60
  margin-inline-start: auto;
60
61
  }
61
62
 
@@ -67,15 +68,15 @@
67
68
  justify-content: center;
68
69
  inline-size: 2.75rem;
69
70
  block-size: 2.75rem;
70
- padding: var(--g-theme-spacing-sm);
71
- border-radius: var(--g-theme-border-radius-md);
71
+ padding: var(--g-spacing-sm);
72
+ border-radius: var(--g-border-radius-md);
72
73
  cursor: pointer;
73
- color: var(--g-theme-color-content-default);
74
+ color: var(--g-color-content-default);
74
75
  transition: background-color 0.2s ease;
75
76
  }
76
77
 
77
78
  .app-bar__menu-button:hover {
78
- background-color: var(--g-theme-color-background-subtle-hover);
79
+ background-color: var(--g-color-background-subtle-hover);
79
80
  }
80
81
 
81
82
  /* Hamburger Icon */
@@ -127,16 +128,16 @@
127
128
  .app-bar__nav--open {
128
129
  display: flex;
129
130
  flex-direction: column;
130
- gap: var(--g-theme-spacing-xs, 0.25rem);
131
+ gap: var(--g-spacing-xs, 0.25rem);
131
132
  position: absolute;
132
133
  inset-inline: 0;
133
134
  inset-block-start: 100%;
134
135
  z-index: 99;
135
- background-color: var(--g-theme-color-background-default);
136
- border-block-end: 1px solid var(--g-theme-color-border-default);
137
- padding-block: var(--g-theme-spacing-md);
138
- padding-inline: var(--g-theme-spacing-md);
139
- box-shadow: var(--g-theme-shadow-lg, 0 8px 24px rgba(0, 0, 0, 0.12));
136
+ background-color: var(--g-color-background-default);
137
+ border-block-end: 1px solid var(--g-color-border-default);
138
+ padding-block: var(--g-spacing-md);
139
+ padding-inline: var(--g-spacing-md);
140
+ box-shadow: var(--g-box-shadow-lg, 0 8px 24px rgba(0, 0, 0, 0.12));
140
141
  animation: menu-open 0.25s ease-out;
141
142
  }
142
143
 
@@ -156,7 +157,7 @@
156
157
  .app-bar__nav--open ::slotted(div[slot="nav"]) {
157
158
  display: flex;
158
159
  flex-direction: column;
159
- gap: var(--g-theme-spacing-xs, 0.25rem);
160
+ gap: var(--g-spacing-xs, 0.25rem);
160
161
  margin: 0;
161
162
  padding: 0;
162
163
  list-style: none;
@@ -211,7 +212,7 @@
211
212
  display: flex;
212
213
  flex-direction: row;
213
214
  align-items: center;
214
- gap: var(--g-theme-spacing-xs, 0.25rem);
215
+ gap: var(--g-spacing-xs, 0.25rem);
215
216
  flex: 1;
216
217
  }
217
218
 
@@ -242,17 +243,16 @@
242
243
 
243
244
  /* Slotted content styling */
244
245
  ::slotted(a[slot="logo"]) {
245
- color: var(--g-theme-color-content-default) !important;
246
+ color: var(--g-color-content-default) !important;
246
247
  text-decoration: none !important;
247
- font-family: var(--g-theme-typography-label-font-family);
248
- font-weight: var(--g-theme-typography-label-font-weight);
248
+ font: var(--g-typography-body-sm-font);
249
249
  }
250
250
 
251
251
  ::slotted(ul),
252
252
  ::slotted(div[slot="nav"]) {
253
253
  display: flex;
254
254
  flex-direction: row;
255
- gap: var(--g-theme-spacing-xs, 0.25rem);
255
+ gap: var(--g-spacing-xs, 0.25rem);
256
256
  margin: 0;
257
257
  padding: 0;
258
258
  list-style: none;
@@ -11,7 +11,7 @@
11
11
  .nav-link {
12
12
  display: inline-flex;
13
13
  align-items: center;
14
- border-radius: var(--g-theme-border-radius-md);
14
+ border-radius: var(--g-border-radius-md);
15
15
  background-color: transparent;
16
16
  transition: background-color 0.15s ease;
17
17
  }
@@ -19,7 +19,7 @@
19
19
  .nav-link:hover {
20
20
  background-color: color-mix(
21
21
  in srgb,
22
- var(--g-theme-color-content-default) 8%,
22
+ var(--g-color-content-default) 8%,
23
23
  transparent
24
24
  );
25
25
  }
@@ -39,21 +39,20 @@
39
39
  ::slotted(a:focus-visible) {
40
40
  display: inline-flex;
41
41
  align-items: center;
42
- color: var(--g-theme-color-content-default) !important;
42
+ color: var(--g-color-content-default) !important;
43
43
  text-decoration: none !important;
44
44
  opacity: 1 !important;
45
- padding-block: var(--g-theme-spacing-xs, 0.25rem);
46
- padding-inline: var(--g-theme-spacing-sm);
47
- font-family: var(--g-theme-typography-label-font-family);
48
- font-weight: var(--g-theme-typography-label-font-weight);
45
+ padding-block: var(--g-spacing-xs, 0.25rem);
46
+ padding-inline: var(--g-spacing-sm);
47
+ font: var(--g-typography-body-sm-font);
49
48
  white-space: nowrap;
50
49
  }
51
50
 
52
51
  ::slotted(a:focus-visible) {
53
- outline: var(--g-theme-focus-ring-width-default) solid
54
- var(--g-theme-focus-ring-color-default);
55
- outline-offset: var(--g-theme-focus-ring-offset-default);
56
- border-radius: var(--g-theme-border-radius-md);
52
+ outline: var(--g-focus-ring-width-default) solid
53
+ var(--g-focus-ring-color-default);
54
+ outline-offset: var(--g-focus-ring-offset-default);
55
+ border-radius: var(--g-border-radius-md);
57
56
  }
58
57
 
59
58
  @media (prefers-reduced-motion: reduce) {
@@ -13,15 +13,14 @@
13
13
  display: flex;
14
14
  align-items: center;
15
15
  justify-content: center;
16
- inline-size: var(--g-theme-spacing-2xl);
17
- block-size: var(--g-theme-spacing-2xl);
16
+ inline-size: var(--g-spacing-2xl);
17
+ block-size: var(--g-spacing-2xl);
18
18
  border-radius: 50%;
19
19
  overflow: hidden;
20
- background-color: var(--g-theme-color-primary-200);
21
- color: var(--g-theme-color-primary-900);
20
+ background-color: var(--g-color-primary-200);
21
+ color: var(--g-color-primary-900);
22
22
  text-align: center;
23
- font-size: var(--g-theme-typography-h6-font-size);
24
- font-weight: var(--g-theme-typography-label-default-font-weight);
23
+ font: var(--g-typography-h6-font)
25
24
  }
26
25
 
27
26
  .avatar__image {
@@ -11,11 +11,12 @@
11
11
  .badge {
12
12
  display: inline-flex;
13
13
  align-items: center;
14
- gap: var(--g-theme-spacing-xs);
14
+ gap: var(--g-spacing-xs);
15
15
  padding-inline: 0.625em;
16
16
  padding-block: 0.375em;
17
- border-radius: var(--g-theme-border-radius-md, 0.375rem);
18
- font: var(--g-theme-typography-meta);
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);
19
20
  line-height: 1;
20
21
  white-space: nowrap;
21
22
  border-width: 1px;
@@ -25,54 +26,54 @@
25
26
 
26
27
  /* Soft style variants */
27
28
  .badge--primary {
28
- background-color: var(--g-theme-color-primary-200);
29
- color: var(--g-theme-color-primary-600);
29
+ background-color: var(--g-color-primary-200);
30
+ color: var(--g-color-primary-600);
30
31
  border-color: transparent;
31
32
  }
32
33
 
33
34
  .badge--success {
34
35
  background-color: color-mix(
35
36
  in srgb,
36
- var(--g-color-utility-green-500) 15%,
37
+ var(--g-color-utility-success) 15%,
37
38
  transparent
38
39
  );
39
- color: var(--g-color-utility-green-700);
40
+ color: var(--g-color-content-utility-success);
40
41
  border-color: transparent;
41
42
  }
42
43
 
43
44
  .badge--warning {
44
45
  background-color: color-mix(
45
46
  in srgb,
46
- var(--g-color-utility-yellow-500) 15%,
47
+ var(--g-color-utility-warning) 15%,
47
48
  transparent
48
49
  );
49
- color: var(--g-color-utility-yellow-700);
50
+ color: var(--g-color-content-utility-warning);
50
51
  border-color: transparent;
51
52
  }
52
53
 
53
54
  .badge--error {
54
55
  background-color: color-mix(
55
56
  in srgb,
56
- var(--g-color-utility-red-500) 15%,
57
+ var(--g-color-utility-error) 15%,
57
58
  transparent
58
59
  );
59
- color: var(--g-color-utility-red-700);
60
+ color: var(--g-color-content-utility-error);
60
61
  border-color: transparent;
61
62
  }
62
63
 
63
64
  .badge--info {
64
65
  background-color: color-mix(
65
66
  in srgb,
66
- var(--g-color-utility-blue-500) 15%,
67
+ var(--g-color-utility-info) 15%,
67
68
  transparent
68
69
  );
69
- color: var(--g-color-utility-blue-700);
70
+ color: var(--g-color-content-utility-info);
70
71
  border-color: transparent;
71
72
  }
72
73
 
73
74
  .badge--neutral {
74
- background-color: var(--g-theme-color-background-subtle);
75
- color: var(--g-theme-color-content-default);
75
+ background-color: var(--g-color-background-subtle);
76
+ color: var(--g-color-content-default);
76
77
  border-color: transparent;
77
78
  }
78
79
 
@@ -16,7 +16,7 @@
16
16
  display: flex;
17
17
  flex-wrap: wrap;
18
18
  align-items: center;
19
- gap: var(--g-theme-spacing-sm);
19
+ gap: var(--g-spacing-sm);
20
20
  margin: 0;
21
21
  padding: 0;
22
22
  list-style: none;
@@ -25,24 +25,23 @@
25
25
  .breadcrumb__item {
26
26
  display: inline-flex;
27
27
  align-items: center;
28
- gap: var(--g-theme-spacing-sm);
29
- font-size: var(--g-typography-font-size-14);
30
- color: var(--g-theme-color-primary-700);
28
+ gap: var(--g-spacing-sm);
29
+ font-size: var(--g-typography-body-sm-font-size);
30
+ color: var(--g-color-primary-700);
31
31
  }
32
32
 
33
33
  /* Separator using ::after pseudo-element; driven by parent via data-has-separator */
34
34
  :host([data-has-separator]) .breadcrumb__item::after {
35
35
  content: var(--component-breadcrumb-separator, "/");
36
36
  display: inline-block;
37
- color: var(--g-theme-color-primary-400);
38
- font-weight: var(--g-typography-font-weight-400);
37
+ color: var(--g-color-primary-400);
38
+ font-weight: var(--g-typography-body-lg-font-weight);
39
39
  user-select: none;
40
40
  pointer-events: none;
41
41
  }
42
42
 
43
43
  /* Current page styling */
44
44
  .breadcrumb__item[data-current] {
45
- font-weight: var(--g-typography-font-weight-600);
46
45
  color: var(--color-base-primary-900);
47
46
  }
48
47
 
@@ -51,10 +50,10 @@
51
50
  }
52
51
 
53
52
  .breadcrumb__link {
54
- color: var(--g-theme-color-primary-600);
53
+ color: var(--g-color-primary-600);
55
54
  text-decoration: none;
56
55
  transition: color 0.2s ease;
57
- border-radius: var(--g-theme-border-radius-md, 0.25rem);
56
+ border-radius: var(--g-border-radius-md, 0.25rem);
58
57
  padding-inline: 0.25em;
59
58
  padding-block: 0.125em;
60
59
  margin-inline: -0.25em;
@@ -62,7 +61,7 @@
62
61
  }
63
62
 
64
63
  .breadcrumb__link:hover {
65
- color: var(--g-theme-color-primary-700);
64
+ color: var(--g-color-primary-700);
66
65
  text-decoration: underline;
67
66
  }
68
67
 
@@ -80,6 +79,6 @@
80
79
  content: "...";
81
80
  display: inline-block;
82
81
  margin-inline-end: 0.5rem;
83
- color: var(--g-theme-color-primary-400);
82
+ color: var(--g-color-primary-400);
84
83
  }
85
84
  }
@@ -7,45 +7,118 @@
7
7
 
8
8
  :host {
9
9
  display: block;
10
- --button-border-radius-start: var(--g-theme-border-radius-md);
11
- --button-border-radius-end: var(--g-theme-border-radius-md);
10
+ }
11
+
12
+ /* Color variants */
13
+ :host {
14
+ --_button-base: var(--g-button-color-background);
15
+ --_button-border: var(--g-button-color-border);
16
+ }
17
+ :host([color="secondary"]) {
18
+ --_button-base: var(--g-button-secondary-color-background);
19
+ --_button-border: var(--g-button-secondary-color-border);
20
+ }
21
+ :host([color="neutral"]) {
22
+ --_button-base: var(--g-button-neutral-color-background);
23
+ --_button-border: var(--g-button-neutral-color-border);
24
+ }
25
+ :host([color="danger"]) {
26
+ --_button-base: var(--g-button-danger-color-background);
27
+ --_button-border: var(--g-button-danger-color-border);
28
+ }
29
+
30
+ /* Style variants */
31
+ :host {
32
+ /* biome-ignore lint/correctness/noUnknownFunction: contrast-color is new */
33
+ --_button-color: contrast-color(var(--_button-base));
34
+ --_button-background: var(--_button-base);
35
+ }
36
+
37
+ :host([variant="outline"]) {
38
+ --_button-color: var(--_button-base);
39
+ --_button-background: transparent;
40
+ --_button-background-hover: rgb(from var(--_button-base) r g b / 0.2);
41
+ --_button-background-active: rgb(from var(--_button-base) r g b / 0.25);
42
+ }
43
+ :host([variant="ghost"]) {
44
+ --_button-color: var(--_button-base);
45
+ --_button-background: transparent;
46
+ --_button-border: transparent;
47
+ --_button-border-hover: transparent;
48
+ --_button-border-active: transparent;
49
+ --_button-background-hover: rgb(from var(--_button-base) r g b / 0.2);
50
+ --_button-background-active: rgb(from var(--_button-base) r g b / 0.25);
51
+ }
52
+
53
+ :host {
54
+ --_button-action-tint: var(--_button-color);
55
+ --_button-border-radius-start: var(--g-border-radius-md);
56
+ --_button-border-radius-end: var(--g-border-radius-md);
57
+ --_button-background-hover: color-mix(
58
+ in oklab,
59
+ var(--_button-background),
60
+ var(--_button-action-tint) 10%
61
+ );
62
+ --_button-border-hover: color-mix(
63
+ in oklab,
64
+ var(--_button-border),
65
+ var(--_button-action-tint) 10%
66
+ );
67
+ --_button-color-hover: color-mix(
68
+ in oklab,
69
+ var(--_button-color),
70
+ var(--_button-action-tint) 10%
71
+ );
72
+ --_button-background-active: color-mix(
73
+ in oklab,
74
+ var(--_button-background-hover),
75
+ var(--_button-action-tint) 10%
76
+ );
77
+ --_button-border-active: color-mix(
78
+ in oklab,
79
+ var(--_button-border-hover),
80
+ var(--_button-action-tint) 10%
81
+ );
82
+ --_button-color-active: color-mix(
83
+ in oklab,
84
+ var(--_button-color-hover),
85
+ var(--_button-action-tint) 10%
86
+ );
12
87
  }
13
88
 
14
89
  .button {
15
90
  display: inline-flex;
16
91
  flex-direction: row;
17
92
  align-items: center;
18
- gap: var(--g-theme-spacing-sm);
19
- background: var(--g-theme-button-primary-color-background-default);
20
- color: var(--g-theme-button-primary-color-content-default);
21
- border-width: var(--g-theme-border-width-md);
93
+ gap: var(--g-spacing-sm);
94
+ background: var(--_button-background);
95
+ color: var(--_button-color);
96
+ border-width: var(--g-border-width-md);
22
97
  border-style: solid;
23
- border-color: var(--g-theme-button-primary-color-border-default);
24
- padding-block: var(--g-theme-spacing-sm);
25
- padding-inline: var(--g-theme-spacing-md);
26
- border-start-start-radius: var(--button-border-radius-start);
27
- border-start-end-radius: var(--button-border-radius-end);
28
- border-end-start-radius: var(--button-border-radius-start);
29
- border-end-end-radius: var(--button-border-radius-end);
30
- font: var(--g-theme-typography-label-default);
31
- font-family: var(--g-theme-typography-label-font-family);
98
+ border-color: var(--_button-border);
99
+ border-start-start-radius: var(--_button-border-radius-start);
100
+ border-start-end-radius: var(--_button-border-radius-end);
101
+ border-end-start-radius: var(--_button-border-radius-start);
102
+ border-end-end-radius: var(--_button-border-radius-end);
103
+ font: var(--g-typography-body-sm-font);
32
104
  text-decoration: none;
105
+ text-align: center;
33
106
  transition-property: color, border-color, background-color, outline;
34
107
  }
35
108
 
36
109
  .button:hover,
37
110
  .button:focus-visible {
38
- color: var(--g-theme-button-primary-color-content-hover);
39
- background: var(--g-theme-button-primary-color-background-hover);
40
- border-color: var(--g-theme-button-primary-color-border-hover);
111
+ color: var(--_button-color-hover);
112
+ background: var(--_button-background-hover);
113
+ border-color: var(--_button-border-hover);
41
114
  cursor: pointer;
42
115
  text-decoration: none;
43
116
  }
44
117
 
45
118
  .button:active {
46
- color: var(--g-theme-button-primary-color-content-active);
47
- background: var(--g-theme-button-primary-color-background-active);
48
- border-color: var(--g-theme-button-primary-color-border-active);
119
+ color: var(--_button-color-active);
120
+ background: var(--_button-background-active);
121
+ border-color: var(--_button-border-active);
49
122
  }
50
123
 
51
124
  .button:active {
@@ -53,10 +126,25 @@
53
126
  }
54
127
 
55
128
  .button[disabled] {
56
- background: var(--g-theme-button-primary-color-background-disabled);
57
- color: var(--g-theme-button-primary-color-content-disabled);
58
- border-color: var(--g-theme-button-primary-color-border-disabled);
59
129
  cursor: not-allowed;
60
130
  filter: grayscale(70%);
61
131
  opacity: 0.8;
62
132
  }
133
+
134
+ /* Size variants */
135
+ :host .button {
136
+ padding-block: var(--g-spacing-sm);
137
+ padding-inline: var(--g-spacing-md);
138
+ font-size: var(--g-typography-font-size-sm)
139
+ }
140
+
141
+ :host([size="sm"]) .button {
142
+ padding-block: var(--g-spacing-xs);
143
+ padding-inline: var(--g-spacing-sm);
144
+ font-size: var(--g-typography-font-size-xs)
145
+ }
146
+
147
+ :host([size="lg"]) .button {
148
+ padding-inline: var(--g-spacing-lg);
149
+ font-size: var(--g-typography-font-size-md);
150
+ }
@@ -24,6 +24,43 @@ export default meta;
24
24
  */
25
25
  export const Button = {};
26
26
 
27
+ /**
28
+ * Different button styles
29
+ */
30
+ export const ButtonStyles = {
31
+ render: () => html`
32
+ <div style="display: flex; gap: 1rem;">
33
+ <div>
34
+ <h4>Default</h4>
35
+ <grantcodes-button>Default</grantcodes-button>
36
+ <grantcodes-button color="secondary">Secondary</grantcodes-button>
37
+ <grantcodes-button color="neutral">Neutral</grantcodes-button>
38
+ <grantcodes-button color="danger">Danger</grantcodes-button>
39
+ </div>
40
+ <div>
41
+ <h4>Ghost</h4>
42
+ <grantcodes-button variant="ghost">Default</grantcodes-button>
43
+ <grantcodes-button variant="ghost" color="secondary">Secondary</grantcodes-button>
44
+ <grantcodes-button variant="ghost" color="neutral">Neutral</grantcodes-button>
45
+ <grantcodes-button variant="ghost" color="danger">Danger</grantcodes-button>
46
+ </div>
47
+ <div>
48
+ <h4>Outline</h4>
49
+ <grantcodes-button variant="outline">Default</grantcodes-button>
50
+ <grantcodes-button variant="outline" color="secondary">Secondary</grantcodes-button>
51
+ <grantcodes-button variant="outline" color="neutral">Neutral</grantcodes-button>
52
+ <grantcodes-button variant="outline" color="danger">Danger</grantcodes-button>
53
+ </div>
54
+ <div>
55
+ <h4>Sizes</h4>
56
+ <grantcodes-button size="sm">Small</grantcodes-button>
57
+ <grantcodes-button>Default</grantcodes-button>
58
+ <grantcodes-button size="lg">Large</grantcodes-button>
59
+ </div>
60
+ </div>
61
+ `,
62
+ };
63
+
27
64
  /**
28
65
  * Disabled button that cannot be interacted with.
29
66
  * The button will not respond to clicks when disabled.
@@ -13,8 +13,8 @@
13
13
  display: inline-flex;
14
14
  flex-direction: row;
15
15
  flex-wrap: wrap;
16
- background: var(--g-theme-color-background-default);
17
- border-radius: var(--g-theme-border-radius-md);
16
+ background: var(--g-color-background-default);
17
+ border-radius: var(--g-border-radius-md);
18
18
  min-width: fit-content;
19
19
  max-width: 100%;
20
20
  overflow: hidden;
@@ -26,11 +26,11 @@
26
26
  }
27
27
 
28
28
  .button-group ::slotted(grantcodes-button:first-child) {
29
- --button-border-radius-start: var(--g-theme-border-radius-md);
29
+ --button-border-radius-start: var(--g-border-radius-md);
30
30
  }
31
31
 
32
32
  .button-group ::slotted(grantcodes-button:last-child) {
33
- --button-border-radius-end: var(--g-theme-border-radius-md);
33
+ --button-border-radius-end: var(--g-border-radius-md);
34
34
  }
35
35
 
36
36
  .button-group ::slotted(grantcodes-button:focus-visible) {