@hashicorp/design-system-components 5.2.0 → 5.2.1-rc-20260109114755

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 (42) hide show
  1. package/declarations/components/hds/theme-context/index.d.ts +24 -0
  2. package/declarations/components/hds/theme-context/types.d.ts +19 -0
  3. package/declarations/components/hds/theme-switcher/index.d.ts +43 -0
  4. package/declarations/components.d.ts +2 -0
  5. package/declarations/services/hds-theming.d.ts +57 -0
  6. package/declarations/services.d.ts +1 -0
  7. package/declarations/template-registry.d.ts +6 -0
  8. package/dist/_app_/components/hds/theme-context.js +1 -0
  9. package/dist/_app_/components/hds/theme-switcher.js +1 -0
  10. package/dist/_app_/services/hds-theming.js +1 -0
  11. package/dist/components/hds/theme-context/index.js +45 -0
  12. package/dist/components/hds/theme-context/index.js.map +1 -0
  13. package/dist/components/hds/theme-context/types.js +27 -0
  14. package/dist/components/hds/theme-context/types.js.map +1 -0
  15. package/dist/components/hds/theme-switcher/index.js +100 -0
  16. package/dist/components/hds/theme-switcher/index.js.map +1 -0
  17. package/dist/components.js +2 -0
  18. package/dist/components.js.map +1 -1
  19. package/dist/services/hds-theming.js +214 -0
  20. package/dist/services/hds-theming.js.map +1 -0
  21. package/dist/services.js +1 -1
  22. package/dist/styles/@hashicorp/design-system-components-common.css +9588 -0
  23. package/dist/styles/@hashicorp/design-system-components-common.css.map +1 -0
  24. package/dist/styles/@hashicorp/design-system-components-common.scss +24 -0
  25. package/dist/styles/@hashicorp/design-system-components.css +501 -320
  26. package/dist/styles/@hashicorp/design-system-components.css.map +1 -0
  27. package/dist/styles/@hashicorp/design-system-components.scss +4 -62
  28. package/dist/styles/@hashicorp/design-system-power-select-overrides.css +229 -0
  29. package/dist/styles/@hashicorp/design-system-power-select-overrides.css.map +1 -0
  30. package/dist/styles/components/badge-count.scss +26 -76
  31. package/dist/styles/components/badge.scss +26 -131
  32. package/dist/styles/components/button.scss +5 -0
  33. package/dist/styles/components/dropdown.scss +3 -5
  34. package/dist/styles/components/form/file-input.scss +2 -2
  35. package/dist/styles/components/form/key-value-inputs.scss +2 -4
  36. package/dist/styles/components/index.scss +52 -0
  37. package/dist/styles/components/theme-context.scss +12 -0
  38. package/dist/styles/mixins/_button.scss +82 -129
  39. package/dist/styles/mixins/_carbonization.scss +31 -0
  40. package/dist/styles/mixins/_interactive-dark-theme.scss +1 -1
  41. package/package.json +7 -3
  42. package/dist/styles/@hashicorp/design-system-components.scss.map +0 -1
@@ -6,60 +6,11 @@
6
6
  @use "sass:map";
7
7
 
8
8
  $hds-button-sizes: ("small", "medium", "large");
9
- $hds-button-border-radius: var(--token-border-radius-small);
10
- $hds-button-border-width: 1px;
11
- $hds-button-focus-border-width: 3px;
12
-
13
- // these values later may come from the design tokens
14
- $hds-button-size-props: (
15
- "small": (
16
- // 13px = 0.8125rem
17
- "font-size": 0.8125rem,
18
- // 14px = 0.875rem; we need to make it even (so we set it slighly larger than the font-size; notice: in Figma is 12px but this would cut some ascendants/descendants)
19
- "line-height": 0.875rem,
20
- // 28px = 1.75rem
21
- "min-height": 1.75rem,
22
- // 6px = 0.375rem; here we're taking into account the 1px border
23
- "padding-vertical": 0.375rem,
24
- // 11px = 0.6875rem; here we're taking into account the 1px border
25
- "padding-horizontal": 0.6875rem,
26
- // 12px = 0.75rem
27
- "icon-size": 0.75rem,
28
- ),
29
- "medium": (
30
- // 14px = 0.875rem
31
- "font-size": 0.875rem,
32
- // 16px = 1rem
33
- "line-height": 1rem,
34
- // 36px = 2.25rem
35
- "min-height": 2.25rem,
36
- // 9px = 0.5625rem; here we're taking into account the 1px border
37
- "padding-vertical": 0.5625rem,
38
- // 15px = 0.9375rem; here we're taking into account the 1px border
39
- "padding-horizontal": 0.9375rem,
40
- // 16px
41
- "icon-size": 1rem,
42
- ),
43
- "large": (
44
- // 16px = 1rem
45
- "font-size": 1rem,
46
- // 24px = 1.5rem
47
- "line-height": 1.5rem,
48
- // 48px = 3rem
49
- "min-height": 3rem,
50
- // 11px = 0.6875rem; here we're taking into account the 1px border
51
- "padding-vertical": 0.6875rem,
52
- // 19px = 1.1875rem; here we're taking into account the 1px border
53
- "padding-horizontal": 1.1875rem,
54
- // 24px = 1.5rem
55
- "icon-size": 1.5rem,
56
- ),
57
- );
58
9
 
59
10
  @mixin hds-button() {
60
11
  position: relative;
61
12
  display: flex;
62
- gap: 0.375rem;
13
+ gap: var(--token-button-gap);
63
14
  align-items: center;
64
15
  justify-content: center;
65
16
  width: auto;
@@ -71,17 +22,17 @@ $hds-button-size-props: (
71
22
  font-weight: var(--token-typography-font-weight-regular);
72
23
  font-family: var(--token-typography-font-stack-text);
73
24
  text-decoration: none;
74
- border: $hds-button-border-width solid transparent; // We need this to be transparent for a11y
75
- border-radius: $hds-button-border-radius;
25
+ border: var(--token-button-border-width) solid transparent; // We need this to be transparent for a11y
26
+ border-radius: var(--token-button-border-radius);
76
27
  outline-style: solid; // used to avoid double outline+focus-ring in Safari (see https://github.com/hashicorp/design-system-components/issues/161#issuecomment-1031548656)
77
28
  outline-color: transparent; // We need this to be transparent for a11y
78
29
  isolation: isolate;
79
30
  }
80
31
 
81
32
  @mixin hds-button-state-disabled() {
82
- color: var(--token-color-foreground-disabled);
83
- background-color: var(--token-color-surface-faint);
84
- border-color: var(--token-color-border-primary);
33
+ color: var(--token-button-foreground-color-disabled);
34
+ background-color: var(--token-button-surface-color-disabled);
35
+ border-color: var(--token-button-border-color-disabled);
85
36
  box-shadow: none;
86
37
  cursor: not-allowed;
87
38
  }
@@ -92,58 +43,60 @@ $hds-button-size-props: (
92
43
  &::before {
93
44
  // the position absolute of an element is computed from the inside of the border of the container
94
45
  // so we have to take in account the border width of the pseudo-element container itself
95
- $shift: $hds-button-border-width + $hds-button-focus-border-width;
46
+ $shift: calc(-1 * (var(--token-button-border-width) + var(--token-button-focus-border-width)));
47
+ $radius: calc(var(--token-button-border-radius) + var(--token-button-focus-border-width));
96
48
  position: absolute;
97
- top: -$shift;
98
- right: -$shift;
99
- bottom: -$shift;
100
- left: -$shift;
49
+ top: $shift;
50
+ right: $shift;
51
+ bottom: $shift;
52
+ left: $shift;
101
53
  z-index: -1;
102
- border: $hds-button-focus-border-width solid transparent;
103
- border-radius: calc(#{$hds-button-border-radius} + #{$hds-button-focus-border-width});
54
+ border: var(--token-button-focus-border-width) solid transparent;
55
+ border-radius: $radius;
104
56
  content: "";
105
57
  }
106
58
  }
107
59
 
108
60
  @mixin hds-button-color-primary() {
109
- color: var(--token-color-foreground-high-contrast);
110
- background-color: var(--token-color-palette-blue-200);
111
- border-color: var(--token-color-palette-blue-300);
61
+ color: var(--token-button-foreground-color-primary-default);
62
+ background-color: var(--token-button-surface-color-primary-default);
63
+ border-color: var(--token-button-border-color-primary-default);
112
64
  box-shadow: var(--token-elevation-low-box-shadow);
113
65
 
114
66
  &:hover,
115
67
  &.mock-hover {
116
- color: var(--token-color-foreground-high-contrast);
117
- background-color: var(--token-color-palette-blue-300);
118
- border-color: var(--token-color-palette-blue-400);
68
+ color: var(--token-button-foreground-color-primary-hover);
69
+ background-color: var(--token-button-surface-color-primary-hover);
70
+ border-color: var(--token-button-border-color-primary-hover);
119
71
  cursor: pointer;
120
72
  }
121
73
 
122
74
  &:focus,
123
75
  &.mock-focus {
124
- color: var(--token-color-foreground-high-contrast);
125
- background-color: var(--token-color-palette-blue-200);
126
- border-color: var(--token-color-focus-action-internal);
76
+ color: var(--token-button-foreground-color-primary-focus);
77
+ background-color: var(--token-button-surface-color-primary-focus);
78
+ border-color: var(--token-button-border-color-primary-focus-internal);
127
79
 
128
80
  &::before {
129
81
  // the position absolute of an element is computed from the inside of the border of the container
130
82
  // so we have to take in account the border width of the pseudo-element container itself
131
83
  // plus for the primary button we want to have a 2px gap between the button and the focus
132
- $shift: $hds-button-border-width + $hds-button-focus-border-width + 2px;
133
- top: -$shift;
134
- right: -$shift;
135
- bottom: -$shift;
136
- left: -$shift;
137
- border-color: var(--token-color-focus-action-external);
138
- border-radius: calc(#{$hds-button-border-radius} + #{$hds-button-focus-border-width} + 2px);
84
+ $shift: calc(-1 * (var(--token-button-border-width) + var(--token-button-focus-border-width) + 2px));
85
+ $radius: calc(var(--token-button-border-radius) + var(--token-button-focus-border-width) + 2px);
86
+ top: $shift;
87
+ right: $shift;
88
+ bottom: $shift;
89
+ left: $shift;
90
+ border-color: var(--token-button-border-color-primary-focus-external);
91
+ border-radius: $radius;
139
92
  }
140
93
  }
141
94
 
142
95
  &:active,
143
96
  &.mock-active {
144
- color: var(--token-color-foreground-high-contrast);
145
- background-color: var(--token-color-palette-blue-400);
146
- border-color: var(--token-color-palette-blue-400);
97
+ color: var(--token-button-foreground-color-primary-active);
98
+ background-color: var(--token-button-surface-color-primary-active);
99
+ border-color: var(--token-button-border-color-primary-active);
147
100
  box-shadow: none;
148
101
 
149
102
  &::before {
@@ -153,35 +106,35 @@ $hds-button-size-props: (
153
106
  }
154
107
 
155
108
  @mixin hds-button-color-secondary() {
156
- color: var(--token-color-foreground-primary);
157
- background-color: var(--token-color-surface-faint);
158
- border-color: var(--token-color-border-strong);
109
+ color: var(--token-button-foreground-color-secondary-default);
110
+ background-color: var(--token-button-surface-color-secondary-default);
111
+ border-color: var(--token-button-border-color-secondary-default);
159
112
  box-shadow: var(--token-elevation-low-box-shadow);
160
113
 
161
114
  &:hover,
162
115
  &.mock-hover {
163
- color: var(--token-color-foreground-primary);
164
- background-color: var(--token-color-surface-primary);
165
- border-color: var(--token-color-border-strong);
116
+ color: var(--token-button-foreground-color-secondary-hover);
117
+ background-color: var(--token-button-surface-color-secondary-hover);
118
+ border-color: var(--token-button-border-color-secondary-hover);
166
119
  cursor: pointer;
167
120
  }
168
121
 
169
122
  &:focus,
170
123
  &.mock-focus {
171
- color: var(--token-color-foreground-primary);
172
- background-color: var(--token-color-surface-faint);
173
- border-color: var(--token-color-focus-action-internal);
124
+ color: var(--token-button-foreground-color-secondary-focus);
125
+ background-color: var(--token-button-surface-color-secondary-focus);
126
+ border-color: var(--token-button-border-color-secondary-focus-internal);
174
127
 
175
128
  &::before {
176
- border-color: var(--token-color-focus-action-external);
129
+ border-color: var(--token-button-border-color-secondary-focus-external);
177
130
  }
178
131
  }
179
132
 
180
133
  &:active,
181
134
  &.mock-active {
182
- color: var(--token-color-foreground-primary);
183
- background-color: var(--token-color-surface-interactive-active);
184
- border-color: var(--token-color-border-strong);
135
+ color: var(--token-button-foreground-color-secondary-active);
136
+ background-color: var(--token-button-surface-color-secondary-active);
137
+ border-color: var(--token-button-border-color-secondary-active);
185
138
  box-shadow: none;
186
139
 
187
140
  &::before {
@@ -191,33 +144,34 @@ $hds-button-size-props: (
191
144
  }
192
145
 
193
146
  @mixin hds-button-color-tertiary() {
194
- color: var(--token-color-foreground-action);
195
- background-color: transparent;
196
- border-color: transparent;
147
+ color: var(--token-button-foreground-color-tertiary-default);
148
+ background-color: var(--token-button-surface-color-tertiary-default);
149
+ border-color: var(--token-button-border-color-tertiary-default);
197
150
 
198
151
  &:hover,
199
152
  &.mock-hover {
200
- color: var(--token-color-foreground-action-hover);
201
- background-color: var(--token-color-surface-primary);
202
- border-color: var(--token-color-border-strong);
153
+ color: var(--token-button-foreground-color-tertiary-hover);
154
+ background-color: var(--token-button-surface-color-tertiary-hover);
155
+ border-color: var(--token-button-border-color-tertiary-hover);
203
156
  cursor: pointer;
204
157
  }
205
158
 
206
159
  &:focus,
207
160
  &.mock-focus {
208
- color: var(--token-color-foreground-action);
209
- border-color: var(--token-color-focus-action-internal);
161
+ color: var(--token-button-foreground-color-tertiary-focus);
162
+ background-color: var(--token-button-surface-color-tertiary-focus);
163
+ border-color: var(--token-button-border-color-tertiary-focus-internal);
210
164
 
211
165
  &::before {
212
- border-color: var(--token-color-focus-action-external);
166
+ border-color: var(--token-button-border-color-tertiary-focus-external);
213
167
  }
214
168
  }
215
169
 
216
170
  &:active,
217
171
  &.mock-active {
218
- color: var(--token-color-foreground-action-active);
219
- background-color: var(--token-color-surface-interactive-active);
220
- border-color: var(--token-color-border-strong);
172
+ color: var(--token-button-foreground-color-tertiary-active);
173
+ background-color: var(--token-button-surface-color-tertiary-active);
174
+ border-color: var(--token-button-border-color-tertiary-active);
221
175
  box-shadow: none;
222
176
 
223
177
  &::before {
@@ -249,35 +203,35 @@ $hds-button-size-props: (
249
203
  }
250
204
 
251
205
  @mixin hds-button-color-critical() {
252
- color: var(--token-color-foreground-critical-on-surface);
253
- background-color: var(--token-color-surface-critical);
254
- border-color: var(--token-color-foreground-critical-on-surface);
206
+ color: var(--token-button-foreground-color-critical-default);
207
+ background-color: var(--token-button-surface-color-critical-default);
208
+ border-color: var(--token-button-border-color-critical-default);
255
209
  box-shadow: var(--token-elevation-low-box-shadow);
256
210
 
257
211
  &:hover,
258
212
  &.mock-hover {
259
- color: var(--token-color-foreground-high-contrast);
260
- background-color: var(--token-color-palette-red-300);
261
- border-color: var(--token-color-palette-red-400);
213
+ color: var(--token-button-foreground-color-critical-hover);
214
+ background-color: var(--token-button-surface-color-critical-hover);
215
+ border-color: var(--token-button-border-color-critical-hover);
262
216
  cursor: pointer;
263
217
  }
264
218
 
265
219
  &:focus,
266
220
  &.mock-focus {
267
- color: var(--token-color-foreground-critical-on-surface);
268
- background-color: var(--token-color-surface-critical);
269
- border-color: var(--token-color-focus-critical-internal);
221
+ color: var(--token-button-foreground-color-critical-focus);
222
+ background-color: var(--token-button-surface-color-critical-focus);
223
+ border-color: var(--token-button-border-color-critical-focus-internal);
270
224
 
271
225
  &::before {
272
- border-color: var(--token-color-focus-critical-external);
226
+ border-color: var(--token-button-border-color-critical-focus-external);
273
227
  }
274
228
  }
275
229
 
276
230
  &:active,
277
231
  &.mock-active {
278
- color: var(--token-color-foreground-high-contrast);
279
- background-color: var(--token-color-palette-red-400);
280
- border-color: var(--token-color-palette-red-400);
232
+ color: var(--token-button-foreground-color-critical-active);
233
+ background-color: var(--token-button-surface-color-critical-active);
234
+ border-color: var(--token-button-border-color-critical-active);
281
235
  box-shadow: none;
282
236
 
283
237
  &::before {
@@ -289,25 +243,24 @@ $hds-button-size-props: (
289
243
  @mixin hds-button-size-classes($blockName) {
290
244
  @each $size in $hds-button-sizes {
291
245
  .#{$blockName}--size-#{$size} {
292
- min-height: map.get($hds-button-size-props, $size, "min-height");
293
- padding: map.get($hds-button-size-props, $size, "padding-vertical")
294
- map.get($hds-button-size-props, $size, "padding-horizontal");
246
+ min-height: var(--token-button-height-#{$size});
247
+ padding: var(--token-button-padding-vertical-#{$size}) var(--token-button-padding-horizontal-#{$size});
295
248
 
296
249
  .#{$blockName}__icon {
297
- width: map.get($hds-button-size-props, $size, "icon-size");
298
- height: map.get($hds-button-size-props, $size, "icon-size");
250
+ width: var(--token-button-icon-size-#{$size});
251
+ height: var(--token-button-icon-size-#{$size});
299
252
  }
300
253
 
301
254
  .#{$blockName}__text {
302
- font-size: map.get($hds-button-size-props, $size, "font-size");
303
- line-height: map.get($hds-button-size-props, $size, "line-height");
255
+ font-size: var(--token-button-typography-font-size-#{$size});
256
+ line-height: var(--token-button-typography-line-height-#{$size});
304
257
  }
305
258
 
306
259
  &.#{$blockName}--is-icon-only {
307
260
  // overrides to have the icon-only button squared
308
- min-width: map.get($hds-button-size-props, $size, "min-height");
309
- padding-right: map.get($hds-button-size-props, $size, "padding-vertical");
310
- padding-left: map.get($hds-button-size-props, $size, "padding-vertical");
261
+ min-width: var(--token-button-height-#{$size});
262
+ padding-right: var(--token-button-padding-vertical-#{$size});
263
+ padding-left: var(--token-button-padding-vertical-#{$size});
311
264
  }
312
265
  }
313
266
  }
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Copyright (c) HashiCorp, Inc.
3
+ * SPDX-License-Identifier: MPL-2.0
4
+ */
5
+
6
+ @mixin hds-apply-only-if-carbon($mode: false) {
7
+ @if $mode == "cds-g0" {
8
+ @at-root .hds-mode-cds-g0 #{&} {
9
+ @content;
10
+ }
11
+ } @else if $mode == "cds-g10" {
12
+ @at-root .hds-mode-cds-g10 #{&} {
13
+ @content;
14
+ }
15
+ } @else if $mode == "cds-g90" {
16
+ @at-root .hds-mode-cds-g90 #{&} {
17
+ @content;
18
+ }
19
+ } @else if $mode == "cds-g100" {
20
+ @at-root .hds-mode-cds-g100 #{&} {
21
+ @content;
22
+ }
23
+ } @else {
24
+ @at-root .hds-mode-cds-g0 #{&},
25
+ .hds-mode-cds-g10 #{&},
26
+ .hds-mode-cds-g90 #{&},
27
+ .hds-mode-cds-g100 #{&} {
28
+ @content;
29
+ }
30
+ }
31
+ }
@@ -35,7 +35,7 @@ $hds-interactive-dark-theme-focus-ring-action-box-shadow:
35
35
  // general dark theme tokens
36
36
  color: var(--token-color-foreground-high-contrast);
37
37
  background-color: var(--token-color-palette-neutral-700);
38
- border-radius: $hds-button-border-radius; // We don't have a button border-radius token so we use the button mixin sass variable
38
+ border-radius: var(--token-button-border-radius);
39
39
  }
40
40
 
41
41
  // Hover:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hashicorp/design-system-components",
3
- "version": "5.2.0",
3
+ "version": "5.2.1-rc-20260109114755",
4
4
  "description": "Helios Design System Components",
5
5
  "keywords": [
6
6
  "hashicorp",
@@ -35,7 +35,7 @@
35
35
  "@embroider/macros": "^1.18.1",
36
36
  "@embroider/util": "^1.13.4",
37
37
  "@floating-ui/dom": "^1.6.12",
38
- "@hashicorp/design-system-tokens": "^3.0.0",
38
+ "@hashicorp/design-system-tokens": "4.0.0-rc-20260109114755",
39
39
  "@hashicorp/flight-icons": "^4.1.1",
40
40
  "@lezer/highlight": "^1.2.1",
41
41
  "@nullvoxpopuli/ember-composable-helpers": "^5.2.11",
@@ -341,6 +341,8 @@
341
341
  "./components/hds/text/code.js": "./dist/_app_/components/hds/text/code.js",
342
342
  "./components/hds/text/display.js": "./dist/_app_/components/hds/text/display.js",
343
343
  "./components/hds/text.js": "./dist/_app_/components/hds/text.js",
344
+ "./components/hds/theme-context.js": "./dist/_app_/components/hds/theme-context.js",
345
+ "./components/hds/theme-switcher.js": "./dist/_app_/components/hds/theme-switcher.js",
344
346
  "./components/hds/time.js": "./dist/_app_/components/hds/time.js",
345
347
  "./components/hds/time/range.js": "./dist/_app_/components/hds/time/range.js",
346
348
  "./components/hds/time/single.js": "./dist/_app_/components/hds/time/single.js",
@@ -369,6 +371,7 @@
369
371
  "./modifiers/hds-register-event.js": "./dist/_app_/modifiers/hds-register-event.js",
370
372
  "./modifiers/hds-tooltip.js": "./dist/_app_/modifiers/hds-tooltip.js",
371
373
  "./services/hds-intl.js": "./dist/_app_/services/hds-intl.js",
374
+ "./services/hds-theming.js": "./dist/_app_/services/hds-theming.js",
372
375
  "./services/hds-time.js": "./dist/_app_/services/hds-time.js"
373
376
  }
374
377
  },
@@ -416,6 +419,7 @@
416
419
  "lint:js": "eslint . --cache",
417
420
  "lint:js:fix": "eslint . --fix",
418
421
  "lint:types": "glint",
419
- "start": "rollup --config --watch --environment development"
422
+ "start": "rollup --config --watch --environment development",
423
+ "test:dist-files": "node scripts/check-dist-files.js"
420
424
  }
421
425
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"design-system-components.scss","sources":[],"sourcesContent":[],"names":[],"mappings":""}