@digdir/designsystemet-css 1.0.0-next.34 → 1.0.0-next.36

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 (86) hide show
  1. package/README.md +4 -3
  2. package/accordion.css +62 -52
  3. package/alert.css +23 -37
  4. package/avatar.css +31 -57
  5. package/badge.css +16 -43
  6. package/breadcrumbs.css +5 -15
  7. package/button.css +54 -102
  8. package/card.css +91 -161
  9. package/chip.css +85 -151
  10. package/combobox.css +22 -16
  11. package/dist/accordion.css +1 -1
  12. package/dist/alert.css +1 -1
  13. package/dist/avatar.css +1 -1
  14. package/dist/badge.css +1 -1
  15. package/dist/breadcrumbs.css +1 -1
  16. package/dist/button.css +1 -1
  17. package/dist/card.css +1 -1
  18. package/dist/chip.css +1 -1
  19. package/dist/combobox.css +1 -1
  20. package/dist/divider.css +1 -1
  21. package/dist/dropdown.css +1 -1
  22. package/dist/error-summary.css +1 -1
  23. package/dist/field.css +1 -0
  24. package/dist/fieldset.css +1 -1
  25. package/dist/heading.css +1 -0
  26. package/dist/helptext.css +1 -1
  27. package/dist/index.css +1 -1
  28. package/dist/input.css +1 -0
  29. package/dist/label.css +1 -0
  30. package/dist/link.css +1 -1
  31. package/dist/list.css +1 -1
  32. package/dist/modal.css +1 -1
  33. package/dist/pagination.css +1 -1
  34. package/dist/paragraph.css +1 -0
  35. package/dist/popover.css +1 -1
  36. package/dist/search.css +1 -1
  37. package/dist/skeleton.css +1 -1
  38. package/dist/skiplink.css +1 -1
  39. package/dist/spinner.css +1 -1
  40. package/dist/table.css +1 -1
  41. package/dist/tabs.css +1 -1
  42. package/dist/tag.css +1 -1
  43. package/dist/textfield.css +1 -1
  44. package/dist/togglegroup.css +1 -1
  45. package/dist/tooltip.css +1 -1
  46. package/dist/validation-message.css +1 -0
  47. package/divider.css +2 -1
  48. package/dropdown.css +24 -24
  49. package/error-summary.css +6 -3
  50. package/field.css +124 -0
  51. package/fieldset.css +10 -28
  52. package/heading.css +55 -0
  53. package/helptext.css +3 -14
  54. package/index.css +114 -10
  55. package/input.css +186 -0
  56. package/label.css +30 -0
  57. package/link.css +18 -12
  58. package/list.css +8 -16
  59. package/modal.css +53 -77
  60. package/package.json +1 -1
  61. package/pagination.css +28 -33
  62. package/paragraph.css +11 -0
  63. package/popover.css +14 -28
  64. package/search.css +82 -153
  65. package/skeleton.css +18 -8
  66. package/skiplink.css +12 -12
  67. package/spinner.css +20 -21
  68. package/table.css +23 -21
  69. package/tabs.css +27 -27
  70. package/tag.css +8 -47
  71. package/textfield.css +2 -2
  72. package/togglegroup.css +6 -1
  73. package/tooltip.css +21 -6
  74. package/validation-message.css +25 -0
  75. package/checkbox.css +0 -223
  76. package/dist/checkbox.css +0 -1
  77. package/dist/radio.css +0 -1
  78. package/dist/select.css +0 -1
  79. package/dist/switch.css +0 -1
  80. package/dist/textarea.css +0 -1
  81. package/dist/utilities.css +0 -1
  82. package/radio.css +0 -200
  83. package/select.css +0 -106
  84. package/switch.css +0 -246
  85. package/textarea.css +0 -80
  86. package/utilities.css +0 -41
package/README.md CHANGED
@@ -1,9 +1,10 @@
1
1
  # @digdir/designsystemet-css
2
2
 
3
- CSS implementation of the Designsystemet
3
+ CSS implementation of the Designsystemet components
4
4
 
5
- - Styling for React components in `@digdir/designsystemet-react`
5
+ - Uses [@layer](https://developer.mozilla.org/en-US/docs/Web/CSS/@layer) `ds`
6
+ - Uses `@digdir/designsystemet-theme` for predefined themes
7
+ - Build your own theme on https://theme.designsystemet.no/
6
8
 
7
- _These styles are currently not intended to be used directly. They are auto-generated from css modules in react components and may change without notice_
8
9
 
9
10
  Read the Designsystemet [README](https://github.com/digdir/designsystemet) to get started.
package/accordion.css CHANGED
@@ -1,14 +1,41 @@
1
1
  .ds-accordion-group {
2
+ /* default color: neutral */
2
3
  --dsc-accordion-background: var(--ds-color-neutral-background-default);
3
- --dsc-accordion-border-radius: min(1rem, var(--ds-border-radius-md));
4
- --dsc-accordion-border: 1px solid var(--ds-color-neutral-border-subtle);
5
- --dsc-accordion-chevron-gap: var(--ds-spacing-2);
6
- --dsc-accordion-chevron-size: var(--ds-spacing-6);
7
- --dsc-accordion-chevron-rotate: 0deg;
8
4
  --dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-default);
9
5
  --dsc-accordion-heading-background--open: var(--ds-color-neutral-background-subtle);
10
6
  --dsc-accordion-heading-background: var(--ds-color-neutral-background-default);
11
- --dsc-accordion-padding: var(--ds-spacing-4);
7
+ --dsc-accordion-border-color: var(--ds-color-neutral-border-subtle);
8
+
9
+ &[data-color]:where(:not([data-color='subtle'])) {
10
+ --dsc-accordion-background: var(--ds-color-background-subtle);
11
+ --dsc-accordion-heading-background--hover: var(--ds-color-surface-hover);
12
+ --dsc-accordion-heading-background--open: var(--ds-color-surface-default);
13
+ --dsc-accordion-heading-background: var(--ds-color-surface-default);
14
+ --dsc-accordion-border-color: var(--ds-color-border-subtle);
15
+ }
16
+
17
+ &[data-color='neutral'] {
18
+ --dsc-accordion-background: var(--ds-color-background-default);
19
+ --dsc-accordion-heading-background--hover: var(--ds-color-surface-default);
20
+ --dsc-accordion-heading-background--open: var(--ds-color-background-subtle);
21
+ --dsc-accordion-heading-background: var(--ds-color-background-default);
22
+ }
23
+
24
+ &[data-color='subtle'] {
25
+ --dsc-accordion-background: var(--ds-color-neutral-background-subtle);
26
+ --dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-hover);
27
+ --dsc-accordion-heading-background--open: var(--ds-color-neutral-surface-default);
28
+ --dsc-accordion-heading-background: var(--ds-color-neutral-background-subtle);
29
+ }
30
+
31
+ --dsc-accordion-border: 1px solid var(--dsc-accordion-border-color);
32
+ --dsc-accordion-border-radius: var(--ds-border-radius-md);
33
+ --dsc-accordion-chevron-gap: var(--ds-spacing-2);
34
+ --dsc-accordion-chevron-size: var(--ds-spacing-6);
35
+ --dsc-accordion-chevron-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.97 9.47a.75.75 0 0 1 1.06 0L12 14.44l4.97-4.97a.75.75 0 1 1 1.06 1.06l-5.5 5.5a.75.75 0 0 1-1.06 0l-5.5-5.5a.75.75 0 0 1 0-1.06'/%3E%3C/svg%3E");
36
+
37
+ --dsc-accordion-padding: var(--ds-spacing-2) var(--ds-spacing-4);
38
+ --dsc-accordion-size: var(--ds-sizing-14);
12
39
 
13
40
  &[data-border] > * {
14
41
  border: var(--dsc-accordion-border);
@@ -25,52 +52,27 @@
25
52
  border-bottom-right-radius: var(--dsc-accordion-border-radius);
26
53
  }
27
54
  }
28
-
29
- &[data-color='subtle'] {
30
- --dsc-accordion-background: var(--ds-color-neutral-background-subtle);
31
- --dsc-accordion-border: 1px solid var(--ds-color-neutral-border-subtle);
32
- --dsc-accordion-heading-background--hover: var(--ds-color-neutral-surface-hover);
33
- --dsc-accordion-heading-background--open: var(--ds-color-neutral-surface-default);
34
- --dsc-accordion-heading-background: var(--ds-color-neutral-background-subtle);
35
- }
36
-
37
- &[data-color='brand1'] {
38
- --dsc-accordion-background: var(--ds-color-brand1-background-subtle);
39
- --dsc-accordion-border: 1px solid var(--ds-color-brand1-border-subtle);
40
- --dsc-accordion-heading-background--hover: var(--ds-color-brand1-surface-hover);
41
- --dsc-accordion-heading-background--open: var(--ds-color-brand1-surface-default);
42
- --dsc-accordion-heading-background: var(--ds-color-brand1-surface-default);
43
- }
44
-
45
- &[data-color='brand2'] {
46
- --dsc-accordion-background: var(--ds-color-brand2-background-subtle);
47
- --dsc-accordion-border: 1px solid var(--ds-color-brand2-border-subtle);
48
- --dsc-accordion-heading-background--hover: var(--ds-color-brand2-surface-hover);
49
- --dsc-accordion-heading-background--open: var(--ds-color-brand2-surface-default);
50
- --dsc-accordion-heading-background: var(--ds-color-brand2-surface-default);
51
- }
52
-
53
- &[data-color='brand3'] {
54
- --dsc-accordion-background: var(--ds-color-brand3-background-subtle);
55
- --dsc-accordion-border: 1px solid var(--ds-color-brand3-border-subtle);
56
- --dsc-accordion-heading-background--hover: var(--ds-color-brand3-surface-hover);
57
- --dsc-accordion-heading-background--open: var(--ds-color-brand3-surface-default);
58
- --dsc-accordion-heading-background: var(--ds-color-brand3-surface-default);
59
- }
60
55
  }
61
56
 
62
57
  .ds-accordion__item {
63
58
  background: var(--dsc-accordion-background);
64
59
  border-block: var(--dsc-accordion-border);
60
+ box-sizing: border-box;
65
61
 
66
62
  & > :is(summary, u-summary) {
63
+ align-items: center;
67
64
  background: var(--dsc-accordion-heading-background);
68
65
  box-sizing: border-box;
69
66
  cursor: pointer;
67
+ display: flex;
70
68
  list-style: none;
69
+ min-height: var(--dsc-accordion-size);
70
+ gap: var(--dsc-accordion-chevron-gap);
71
71
  outline: none;
72
- padding-block: var(--dsc-accordion-padding);
73
- padding-inline: calc(var(--dsc-accordion-padding) + var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) var(--dsc-accordion-padding);
72
+ padding: var(--dsc-accordion-padding);
73
+ position: relative;
74
+
75
+ @composes ds-focus from './base/base.css';
74
76
 
75
77
  &:focus-visible {
76
78
  position: relative; /* Ensure foucs outline renders on top */
@@ -80,15 +82,9 @@
80
82
  background: currentcolor;
81
83
  border-radius: var(--ds-border-radius-md);
82
84
  content: '';
85
+ flex-shrink: 0;
83
86
  height: var(--dsc-accordion-chevron-size);
84
- mask: 50% / contain no-repeat
85
- url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M5.97 9.47a.75.75 0 0 1 1.06 0L12 14.44l4.97-4.97a.75.75 0 1 1 1.06 1.06l-5.5 5.5a.75.75 0 0 1-1.06 0l-5.5-5.5a.75.75 0 0 1 0-1.06'/%3E%3C/svg%3E");
86
- position: absolute;
87
- rotate: var(--dsc-accordion-chevron-rotate);
88
- margin-inline: calc(
89
- (var(--dsc-accordion-chevron-size) + var(--dsc-accordion-chevron-gap)) * -1
90
- ); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */
91
-
87
+ mask: 50% / contain no-repeat var(--dsc-accordion-chevron-url);
92
88
  width: var(--dsc-accordion-chevron-size);
93
89
  }
94
90
  }
@@ -104,11 +100,10 @@
104
100
 
105
101
  &[open] > :is(summary, u-summary) {
106
102
  background: var(--dsc-accordion-heading-background--open);
107
- }
108
103
 
109
- /* Make flip on click */
110
- &[open]:not([data-chevron-open='false']) {
111
- --dsc-accordion-chevron-rotate: -180deg;
104
+ &::before {
105
+ rotate: 180deg;
106
+ }
112
107
  }
113
108
 
114
109
  @media (hover: hover) and (pointer: fine) {
@@ -116,4 +111,19 @@
116
111
  background: var(--dsc-accordion-heading-background--hover);
117
112
  }
118
113
  }
114
+
115
+ @media (prefers-reduced-motion: no-preference) {
116
+ /* biome-ignore lint/correctness/noUnknownProperty: biome does not know about this property yet */
117
+ interpolate-size: allow-keywords;
118
+ }
119
+
120
+ &::part(details-content) {
121
+ block-size: 0;
122
+ overflow-y: clip;
123
+ transition: content-visibility 400ms allow-discrete, height 400ms;
124
+ }
125
+
126
+ &[open]::part(details-content) {
127
+ height: auto;
128
+ }
119
129
  }
package/alert.css CHANGED
@@ -1,68 +1,54 @@
1
1
  .ds-alert {
2
+ /* default color/variant: info */
2
3
  --dsc-alert-background: var(--ds-color-info-surface-default);
3
- --dsc-alert-border-color: var(--ds-color-info-border-strong);
4
- --dsc-alert-border-radius: min(1rem, var(--ds-border-radius-md));
4
+ --dsc-alert-border-color: var(--ds-color-info-border-default);
5
+ --dsc-alert-icon-color: var(--ds-color-info-text-subtle);
6
+ --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' d='M3.25 4A.75.75 0 0 1 4 3.25h16a.75.75 0 0 1 .75.75v16a.75.75 0 0 1-.75.75H4a.75.75 0 0 1-.75-.75zM11 7.75a1 1 0 1 1 2 0 1 1 0 0 1-2 0m-1.25 3a.75.75 0 0 1 .75-.75H12a.75.75 0 0 1 .75.75v4.75h.75a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5h.75v-4h-.75a.75.75 0 0 1-.75-.75'/%3E%3C/svg%3E");
7
+
8
+ --dsc-alert-border-radius: var(--ds-border-radius-md);
5
9
  --dsc-alert-color: var(--ds-color-neutral-text-default);
6
10
  --dsc-alert-gap: var(--ds-spacing-2);
7
- --dsc-alert-icon-color: var(--ds-color-info-text-subtle);
8
11
  --dsc-alert-icon-size: var(--ds-sizing-7);
9
- --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill-rule='evenodd' d='M3.25 4A.75.75 0 0 1 4 3.25h16a.75.75 0 0 1 .75.75v16a.75.75 0 0 1-.75.75H4a.75.75 0 0 1-.75-.75zM11 7.75a1 1 0 1 1 2 0 1 1 0 0 1-2 0m-1.25 3a.75.75 0 0 1 .75-.75H12a.75.75 0 0 1 .75.75v4.75h.75a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5h.75v-4h-.75a.75.75 0 0 1-.75-.75'/%3E%3C/svg%3E");
10
12
  --dsc-alert-padding: var(--ds-spacing-6);
11
13
 
12
14
  background: var(--dsc-alert-background);
13
15
  border-radius: var(--dsc-alert-border-radius);
14
16
  border: 1px solid var(--dsc-alert-border-color);
17
+ box-sizing: border-box;
15
18
  color: var(--dsc-alert-color);
16
19
  padding-block: var(--dsc-alert-padding);
17
20
  padding-inline: calc(var(--dsc-alert-padding) + var(--dsc-alert-icon-size) + var(--dsc-alert-gap)) var(--dsc-alert-padding);
21
+ position: relative;
18
22
 
19
- & > :is(h1,h2,h3,h4,h5,h6):first-child::before, /* If Alert starts with Heading, align icon to this */
20
- &:not(:has(> :is(h1,h2,h3,h4,h5,h6):first-child))::before /* If there is no Heading, align icon to Alert itself */ {
21
- background-color: var(--dsc-alert-icon-color);
23
+ & > :is(h1, h2, h3, h4, h5, h6):first-child::before /* If Alert starts with Heading, align icon to this */,
24
+ &:not(:has(> :is(h1, h2, h3, h4, h5, h6):first-child))::before /* If there is no Heading, align icon to Alert itself */ {
25
+ background: var(--dsc-alert-icon-color);
22
26
  content: '';
23
- display: block;
24
27
  height: var(--dsc-alert-icon-size);
25
28
  margin-inline: calc((var(--dsc-alert-icon-size) + var(--dsc-alert-gap)) * -1); /* Using margin instead of top/left to avoid position: relative and to support dir="rtl" */
26
- mask: var(--dsc-alert-icon-url) center/contain no-repeat;
29
+ mask: var(--dsc-alert-icon-url) center / contain no-repeat;
27
30
  position: absolute;
28
- translate: 0 calc(.5lh - var(--dsc-alert-icon-size) / 2); /* Center icon to line height */
31
+ translate: 0 calc((1lh - var(--dsc-alert-icon-size)) / 2); /* Center icon to line height */
29
32
  width: var(--dsc-alert-icon-size);
30
33
  }
31
34
 
32
35
  /**
33
- * Colors
34
- */
35
- &[data-color="warning"] {
36
- --dsc-alert-border-color: var(--ds-color-warning-border-default);
37
- --dsc-alert-icon-color: var(--ds-color-warning-text-subtle);
38
- --dsc-alert-background: var(--ds-color-warning-surface-default);
36
+ * Colors
37
+ */
38
+ &[data-color] {
39
+ --dsc-alert-background: var(--ds-color-surface-default);
40
+ --dsc-alert-border-color: var(--ds-color-border-default);
41
+ --dsc-alert-icon-color: var(--ds-color-text-subtle);
42
+ }
43
+ &[data-color='warning'] {
39
44
  --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M12 2.25a.75.75 0 0 1 .66.39l9.52 17.25a.75.75 0 0 1-.65 1.11H2.47a.75.75 0 0 1-.65-1.11l9.52-17.25a.75.75 0 0 1 .66-.39m0 6.5a.75.75 0 0 1 .75.75v4a.75.75 0 0 1-1.5 0v-4a.75.75 0 0 1 .75-.75m-1 7.75a1 1 0 1 1 2 0 1 1 0 0 1-2 0'/%3E%3C/svg%3E");
40
45
  }
41
46
 
42
- &[data-color="success"] {
43
- --dsc-alert-background: var(--ds-color-success-surface-default);
44
- --dsc-alert-border-color: var(--ds-color-success-border-default);
45
- --dsc-alert-icon-color: var(--ds-color-success-text-subtle);
47
+ &[data-color='success'] {
46
48
  --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M12 21.75a9.75 9.75 0 1 0 0-19.5 9.75 9.75 0 0 0 0 19.5m4.95-12.47a.81.81 0 0 0-1.24-1.05l-5.39 6.36-2.62-2.62a.81.81 0 0 0-1.15 1.15l3.25 3.25a.81.81 0 0 0 1.2-.05z'/%3E%3C/svg%3E");
47
49
  }
48
50
 
49
- &[data-color="danger"] {
50
- --dsc-alert-background: var(--ds-color-danger-surface-default);
51
- --dsc-alert-border-color: var(--ds-color-danger-border-default);
52
- --dsc-alert-icon-color: var(--ds-color-danger-text-subtle);
51
+ &[data-color='danger'] {
53
52
  --dsc-alert-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill-rule='evenodd' d='M7.74 2.47a.75.75 0 0 1 .53-.22h7.46a.75.75 0 0 1 .53.22l5.27 5.27c.14.14.22.33.22.53v7.46a.75.75 0 0 1-.22.53l-5.27 5.27a.75.75 0 0 1-.53.22H8.27a.75.75 0 0 1-.53-.22l-5.27-5.27a.75.75 0 0 1-.22-.53V8.27a.75.75 0 0 1 .22-.53zm1.29 5.5a.75.75 0 0 0-1.06 1.06L10.94 12l-2.97 2.97a.75.75 0 1 0 1.06 1.06L12 13.06l2.97 2.97a.75.75 0 1 0 1.06-1.06L13.06 12l2.97-2.97a.75.75 0 0 0-1.06-1.06L12 10.94z'/%3E%3C/svg%3E");
54
53
  }
55
-
56
- /**
57
- * Sizes
58
- */
59
- &[data-size="sm"] {
60
- --dsc-alert-icon-size: var(--ds-sizing-6);
61
- --dsc-alert-padding: var(--ds-spacing-5);
62
- }
63
-
64
- &[data-size="lg"] {
65
- --dsc-alert-icon-size: var(--ds-sizing-8);
66
- --dsc-alert-padding: var(--ds-spacing-7);
67
- }
68
54
  }
package/avatar.css CHANGED
@@ -1,46 +1,57 @@
1
1
  .ds-avatar {
2
+ --dsc-avatar-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' fill='none' viewBox='0 0 24 24' focusable='false' role='img'%3E%3Cpath fill='currentColor' fill-rule='evenodd' d='M8.25 7.5a3.75 3.75 0 1 1 7.5 0 3.75 3.75 0 0 1-7.5 0M12 2.25a5.25 5.25 0 1 0 0 10.5 5.25 5.25 0 0 0 0-10.5M8.288 17.288A5.25 5.25 0 0 1 17.25 21a.75.75 0 0 0 1.5 0 6.75 6.75 0 0 0-13.5 0 .75.75 0 0 0 1.5 0 5.25 5.25 0 0 1 1.538-3.712' clip-rule='evenodd'%3E%3C/path%3E%3C/svg%3E");
3
+
4
+ /* default color: accent */
2
5
  --dsc-avatar-background: var(--ds-color-accent-base-default);
3
6
  --dsc-avatar-color: var(--ds-color-accent-contrast-default);
7
+
8
+ &[data-color] {
9
+ --dsc-avatar-background: var(--ds-color-base-default);
10
+ --dsc-avatar-color: var(--ds-color-contrast-default);
11
+ }
12
+
4
13
  --dsc-avatar-size: var(--ds-sizing-12);
5
14
  --dsc-avatar-padding: var(--ds-spacing-2);
6
- --dsc-avatar-border-radius: 50%;
15
+ --dsc-avatar-border-radius: var(--ds-border-radius-full);
7
16
 
17
+ align-items: center;
8
18
  background: var(--dsc-avatar-background);
9
- height: var(--dsc-avatar-size);
10
- aspect-ratio: 1 / 1;
11
- color: var(--dsc-avatar-color);
12
19
  border-radius: var(--dsc-avatar-border-radius);
13
- overflow: hidden;
20
+ box-sizing: border-box;
21
+ color: var(--dsc-avatar-color);
14
22
  display: inline-flex;
23
+ flex-shrink: 0;
24
+ font-weight: var(--ds-font-weight-medium);
25
+ height: var(--dsc-avatar-size);
15
26
  justify-content: center;
16
- align-items: center;
17
- user-select: none;
18
- text-transform: uppercase;
27
+ overflow: hidden;
19
28
  text-decoration: none;
29
+ text-transform: uppercase;
30
+ user-select: none;
31
+ width: var(--dsc-avatar-size);
20
32
 
21
- &:not(:has(> img)) {
33
+ &:not(:has(img)) {
22
34
  padding: var(--dsc-avatar-padding);
23
35
  }
24
36
 
25
- & img {
37
+ & img,
38
+ & svg {
26
39
  object-fit: cover;
27
40
  width: 100%;
28
41
  height: 100%;
29
42
  }
30
43
 
31
- & svg {
32
- max-width: 100%;
33
- max-height: 100%;
44
+ &[data-initials]:empty::before {
45
+ content: attr(data-initials);
46
+ font-size: round(down, 1.3em, 0.0625rem); /* Default to 130% */
34
47
  }
35
48
 
36
- &:empty::before {
49
+ &:not([data-initials]):empty::before {
37
50
  content: '';
38
51
  width: 100%;
39
52
  height: 100%;
40
- mask-repeat: no-repeat;
41
- mask-size: contain;
42
- background-color: currentcolor;
43
- mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' fill='none' viewBox='0 0 24 24' focusable='false' role='img'%3E%3Cpath fill='currentColor' fill-rule='evenodd' d='M8.25 7.5a3.75 3.75 0 1 1 7.5 0 3.75 3.75 0 0 1-7.5 0M12 2.25a5.25 5.25 0 1 0 0 10.5 5.25 5.25 0 0 0 0-10.5M8.288 17.288A5.25 5.25 0 0 1 17.25 21a.75.75 0 0 0 1.5 0 6.75 6.75 0 0 0-13.5 0 .75.75 0 0 0 1.5 0 5.25 5.25 0 0 1 1.538-3.712' clip-rule='evenodd'%3E%3C/path%3E%3C/svg%3E");
53
+ background: currentcolor;
54
+ mask: var(--dsc-avatar-icon-url) center / contain no-repeat;
44
55
  }
45
56
 
46
57
  &[data-variant='circle'] {
@@ -51,48 +62,11 @@
51
62
  --dsc-avatar-border-radius: var(--ds-border-radius-sm);
52
63
  }
53
64
 
54
- &[data-color='accent'] {
55
- --dsc-avatar-background: var(--ds-color-accent-base-default);
56
- --dsc-avatar-color: var(--ds-color-accent-contrast-default);
57
- }
58
-
59
- &[data-color='neutral'] {
60
- --dsc-avatar-background: var(--ds-color-neutral-base-default);
61
- --dsc-avatar-color: var(--ds-color-neutral-contrast-default);
62
- }
63
-
64
- &[data-color='brand1'] {
65
- --dsc-avatar-background: var(--ds-color-brand1-base-default);
66
- --dsc-avatar-color: var(--ds-color-brand1-contrast-default);
67
- }
68
-
69
- &[data-color='brand2'] {
70
- --dsc-avatar-background: var(--ds-color-brand2-base-default);
71
- --dsc-avatar-color: var(--ds-color-brand2-contrast-default);
72
- }
73
-
74
- &[data-color='brand3'] {
75
- --dsc-avatar-background: var(--ds-color-brand3-base-default);
76
- --dsc-avatar-color: var(--ds-color-brand3-contrast-default);
77
- }
78
-
79
65
  &[data-size='xs'] {
80
- --dsc-avatar-size: var(--ds-sizing-7);
81
- --dsc-avatar-padding: var(--ds-spacing-1);
66
+ font-size: var(--ds-font-size-1);
82
67
  }
83
68
 
84
69
  &[data-size='sm'] {
85
- --dsc-avatar-size: var(--ds-sizing-9);
86
- --dsc-avatar-padding: var(--ds-spacing-1);
87
- }
88
-
89
- &[data-size='md'] {
90
- --dsc-avatar-size: var(--ds-sizing-12);
91
- --dsc-avatar-padding: var(--ds-spacing-2);
92
- }
93
-
94
- &[data-size='lg'] {
95
- --dsc-avatar-size: var(--ds-sizing-15);
96
- --dsc-avatar-padding: var(--ds-spacing-2);
70
+ font-size: var(--ds-font-size-3);
97
71
  }
98
72
  }
package/badge.css CHANGED
@@ -1,10 +1,20 @@
1
1
  .ds-badge {
2
- --dsc-badge-background: var(--ds-color-accent-base-default);
3
- --dsc-badge-color: var(--ds-color-accent-contrast-default);
2
+ /* color vars */
3
+ --dsc-badge-background: var(--ds-color-base-default);
4
+ --dsc-badge-color: var(--ds-color-contrast-default);
5
+
6
+ &[data-color='neutral'] {
7
+ --dsc-badge-background: var(--ds-color-neutral-surface-default);
8
+ --dsc-badge-color: var(--ds-color-neutral-text-default);
9
+ }
10
+
11
+ /* sizing vars */
4
12
  --dsc-badge-padding: 0 calc(var(--ds-spacing-1) + calc(var(--ds-spacing-1) / 2));
5
13
  --dsc-badge-size: calc(var(--ds-sizing-3) + calc(var(--ds-spacing-1) / 2));
6
14
 
15
+ box-sizing: border-box;
7
16
  display: inline-flex;
17
+ line-height: var(--ds-line-height-sm);
8
18
  position: relative;
9
19
 
10
20
  &::before {
@@ -14,53 +24,16 @@
14
24
  box-sizing: border-box;
15
25
  color: var(--dsc-badge-color);
16
26
  display: grid;
27
+ font-size: var(--ds-font-size-minus-1); /* Default to small when size is not defined */
17
28
  min-height: var(--dsc-badge-size);
18
29
  min-width: var(--dsc-badge-size);
19
30
  padding: var(--dsc-badge-padding);
20
31
  place-items: center;
21
32
  }
22
33
 
23
- &[data-size='sm'] {
24
- --dsc-badge-size: var(--ds-sizing-3);
25
- --dsc-badge-padding: 0 var(--ds-spacing-1);
26
-
27
- &[data-count] {
28
- --dsc-badge-size: var(--ds-sizing-5);
29
- }
30
- }
31
-
32
- &[data-size='lg'] {
33
- --dsc-badge-size: var(--ds-sizing-4);
34
- --dsc-badge-padding: 0 var(--ds-spacing-2);
35
-
36
- &[data-count] {
37
- --dsc-badge-size: var(--ds-sizing-7);
38
- }
39
- }
40
-
41
- &[data-color='info'] {
42
- --dsc-badge-background: var(--ds-color-info-base-default);
43
- --dsc-badge-color: var(--ds-color-info-contrast-default);
44
- }
45
-
46
- &[data-color='success'] {
47
- --dsc-badge-background: var(--ds-color-success-base-default);
48
- --dsc-badge-color: var(--ds-color-success-contrast-default);
49
- }
50
-
51
- &[data-color='warning'] {
52
- --dsc-badge-background: var(--ds-color-warning-base-default);
53
- --dsc-badge-color: var(--ds-color-warning-contrast-default);
54
- }
55
-
56
- &[data-color='danger'] {
57
- --dsc-badge-background: var(--ds-color-danger-base-default);
58
- --dsc-badge-color: var(--ds-color-danger-contrast-default);
59
- }
60
-
61
- &[data-color='neutral'] {
62
- --dsc-badge-background: var(--ds-color-neutral-surface-default);
63
- --dsc-badge-color: var(--ds-color-neutral-text-default);
34
+ & :where(img, svg) {
35
+ flex-shrink: 0; /* Never shrink icon */
36
+ font-size: 1.25em; /* Auto scale icon based on font-size */
64
37
  }
65
38
 
66
39
  /* If placement is present, we are floating */
package/breadcrumbs.css CHANGED
@@ -1,16 +1,7 @@
1
1
  .ds-breadcrumbs {
2
2
  --dsc-breadcrumbs-spacing: var(--ds-spacing-2);
3
3
  --dsc-breadcrumbs-chevron-size: var(--ds-sizing-6);
4
-
5
- &[data-size='sm'] {
6
- --dsc-breadcrumbs-spacing: var(--ds-spacing-1);
7
- --dsc-breadcrumbs-chevron-size: var(--ds-sizing-5);
8
- }
9
-
10
- &[data-size='lg'] {
11
- --dsc-breadcrumbs-spacing: var(--ds-spacing-3);
12
- --dsc-breadcrumbs-chevron-size: var(--ds-sizing-7);
13
- }
4
+ --dsc-breadcrumbs-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24'%3E%3Cpath d='M9.47 5.97a.75.75 0 0 1 1.06 0l5.5 5.5a.75.75 0 0 1 0 1.06l-5.5 5.5a.75.75 0 1 1-1.06-1.06L14.44 12 9.47 7.03a.75.75 0 0 1 0-1.06'/%3E%3C/svg%3E");
14
5
 
15
6
  & > :is(ol, ul) {
16
7
  display: flex;
@@ -37,8 +28,7 @@
37
28
  display: inline-block;
38
29
  height: var(--dsc-breadcrumbs-chevron-size);
39
30
  margin-inline: var(--dsc-breadcrumbs-spacing);
40
- mask: center / contain no-repeat
41
- url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24'%3E%3Cpath d='M9.47 5.97a.75.75 0 0 1 1.06 0l5.5 5.5a.75.75 0 0 1 0 1.06l-5.5 5.5a.75.75 0 1 1-1.06-1.06L14.44 12 9.47 7.03a.75.75 0 0 1 0-1.06'/%3E%3C/svg%3E");
31
+ mask: center / contain no-repeat var(--dsc-breadcrumbs-icon-url);
42
32
  vertical-align: middle;
43
33
  width: var(--dsc-breadcrumbs-chevron-size);
44
34
  }
@@ -49,14 +39,14 @@
49
39
  rotate: 180deg;
50
40
  }
51
41
 
52
- @media (max-width: 650px) {
42
+ @media (width < 650px) {
53
43
  & > :is(ol, ul):not(:only-child) {
54
44
  display: none; /* Hide list when mobile and having back link */
55
45
  }
56
46
  }
57
47
 
58
- @media (min-width: 651px) {
59
- & > :not(ol, ul) {
48
+ @media (min-width: 650px) {
49
+ & > :is(:not(ol, ul)):not(:only-child) {
60
50
  display: none; /* Hide back link when desktop and having list */
61
51
  }
62
52
  }