@digdir/designsystemet-css 1.0.0-next.35 → 1.0.0-next.37

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 (109) hide show
  1. package/README.md +4 -3
  2. package/dist/src/accordion.css +1 -0
  3. package/dist/src/alert.css +1 -0
  4. package/dist/src/avatar.css +1 -0
  5. package/dist/src/badge.css +1 -0
  6. package/dist/src/base.css +1 -0
  7. package/dist/src/breadcrumbs.css +1 -0
  8. package/dist/src/button.css +1 -0
  9. package/dist/src/card.css +1 -0
  10. package/dist/src/chip.css +1 -0
  11. package/dist/src/combobox.css +1 -0
  12. package/dist/src/dropdown.css +1 -0
  13. package/dist/src/error-summary.css +1 -0
  14. package/dist/src/field.css +1 -0
  15. package/dist/src/fieldset.css +1 -0
  16. package/dist/src/heading.css +1 -0
  17. package/dist/src/helptext.css +1 -0
  18. package/dist/src/index.css +1 -0
  19. package/dist/src/input.css +1 -0
  20. package/dist/src/label.css +1 -0
  21. package/dist/src/link.css +1 -0
  22. package/dist/src/list.css +1 -0
  23. package/dist/src/modal.css +1 -0
  24. package/dist/src/pagination.css +1 -0
  25. package/dist/src/paragraph.css +1 -0
  26. package/dist/src/popover.css +1 -0
  27. package/dist/src/search.css +1 -0
  28. package/dist/src/skeleton.css +1 -0
  29. package/dist/src/skiplink.css +1 -0
  30. package/dist/src/spinner.css +1 -0
  31. package/dist/src/table.css +1 -0
  32. package/dist/src/tabs.css +1 -0
  33. package/dist/src/tag.css +1 -0
  34. package/dist/{textfield.css → src/textfield.css} +1 -1
  35. package/dist/src/togglegroup.css +1 -0
  36. package/dist/src/tooltip.css +1 -0
  37. package/dist/src/validation-message.css +1 -0
  38. package/package.json +5 -7
  39. package/accordion.css +0 -136
  40. package/alert.css +0 -78
  41. package/avatar.css +0 -109
  42. package/badge.css +0 -125
  43. package/breadcrumbs.css +0 -69
  44. package/button.css +0 -168
  45. package/card.css +0 -139
  46. package/checkbox.css +0 -223
  47. package/chip.css +0 -134
  48. package/combobox.css +0 -300
  49. package/dist/accordion.css +0 -1
  50. package/dist/alert.css +0 -1
  51. package/dist/avatar.css +0 -1
  52. package/dist/badge.css +0 -1
  53. package/dist/breadcrumbs.css +0 -1
  54. package/dist/button.css +0 -1
  55. package/dist/card.css +0 -1
  56. package/dist/checkbox.css +0 -1
  57. package/dist/chip.css +0 -1
  58. package/dist/combobox.css +0 -1
  59. package/dist/dropdown.css +0 -1
  60. package/dist/error-summary.css +0 -1
  61. package/dist/fieldset.css +0 -1
  62. package/dist/helptext.css +0 -1
  63. package/dist/index.css +0 -1
  64. package/dist/link.css +0 -1
  65. package/dist/list.css +0 -1
  66. package/dist/modal.css +0 -1
  67. package/dist/pagination.css +0 -1
  68. package/dist/popover.css +0 -1
  69. package/dist/radio.css +0 -1
  70. package/dist/search.css +0 -1
  71. package/dist/select.css +0 -1
  72. package/dist/skeleton.css +0 -1
  73. package/dist/skiplink.css +0 -1
  74. package/dist/spinner.css +0 -1
  75. package/dist/switch.css +0 -1
  76. package/dist/table.css +0 -1
  77. package/dist/tabs.css +0 -1
  78. package/dist/tag.css +0 -1
  79. package/dist/textarea.css +0 -1
  80. package/dist/togglegroup.css +0 -1
  81. package/dist/tooltip.css +0 -1
  82. package/dist/utilities.css +0 -1
  83. package/divider.css +0 -9
  84. package/dropdown.css +0 -57
  85. package/error-summary.css +0 -25
  86. package/fieldset.css +0 -44
  87. package/helptext.css +0 -49
  88. package/index.css +0 -43
  89. package/link.css +0 -57
  90. package/list.css +0 -38
  91. package/modal.css +0 -93
  92. package/pagination.css +0 -57
  93. package/popover.css +0 -87
  94. package/radio.css +0 -200
  95. package/search.css +0 -170
  96. package/select.css +0 -106
  97. package/skeleton.css +0 -54
  98. package/skiplink.css +0 -24
  99. package/spinner.css +0 -84
  100. package/switch.css +0 -246
  101. package/table.css +0 -167
  102. package/tabs.css +0 -82
  103. package/tag.css +0 -68
  104. package/textarea.css +0 -80
  105. package/textfield.css +0 -151
  106. package/togglegroup.css +0 -16
  107. package/tooltip.css +0 -15
  108. package/utilities.css +0 -197
  109. /package/dist/{divider.css → src/divider.css} +0 -0
package/helptext.css DELETED
@@ -1,49 +0,0 @@
1
- .ds-helptext {
2
- --dsc-helptext-icon-size: 65%;
3
- --dsc-helptext-icon-url: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 8 14'%3E%3Cpath fill='%23000' fill-rule='evenodd' d='M4 11a1.5 1.5 0 1 1 0 3 1.5 1.5 0 0 1 0-3ZM4 0c2.2 0 4 1.66 4 3.7 0 .98-.42 1.9-1.17 2.6l-.6.54-.29.29c-.48.46-.87.93-.94 1.41V9.5H3v-.81c0-1.26.84-2.22 1.68-3L5.42 5C5.8 4.65 6 4.2 6 3.7 6 2.66 5.1 1.83 4 1.83c-1.06 0-1.92.75-2 1.7v.15H0C0 1.66 1.8 0 4 0Z' clip-rule='evenodd'/%3E%3C/svg%3E");
4
- --dsc-helptext-size: var(--ds-sizing-7);
5
-
6
- @composes ds-focus from '../css/utilities.css';
7
-
8
- border-radius: var(--ds-border-radius-full);
9
- border: 2px solid;
10
- box-sizing: border-box;
11
- height: var(--dsc-helptext-size);
12
- min-height: 0;
13
- min-width: 0;
14
- padding: 0;
15
- position: relative;
16
- width: var(--dsc-helptext-size);
17
-
18
- &::before {
19
- content: '';
20
- border-radius: inherit;
21
- background: currentcolor;
22
- mask-composite: exclude;
23
- mask-image: var(--dsc-helptext-icon-url);
24
- mask-position: center;
25
- mask-repeat: no-repeat;
26
- mask-size:
27
- var(--dsc-helptext-icon-size) var(--dsc-helptext-icon-size),
28
- cover;
29
- scale: 1.1; /* Hide tiny half pixel rendeing bug */
30
- width: 100%;
31
- height: 100%;
32
- }
33
-
34
- &:has(+ :popover-open)::before {
35
- mask-image: var(--dsc-helptext-icon-url), linear-gradient(currentcolor, currentcolor); /* Cut icon out of currentcolor surface */
36
- }
37
-
38
- &[data-size='sm'] {
39
- --dsc-helptext-size: var(--ds-sizing-6);
40
- }
41
-
42
- &[data-size='lg'] {
43
- --dsc-helptext-size: var(--ds-sizing-8);
44
- }
45
-
46
- @media print {
47
- display: none;
48
- }
49
- }
package/index.css DELETED
@@ -1,43 +0,0 @@
1
- @charset "UTF-8";
2
-
3
- @layer ds.reset, ds.baseline, ds.theme, ds.base, ds.components;
4
-
5
- /** Import order defines ordinal specificity for layers */
6
- @import url('./baseline/ds-reset.css') layer(ds.reset);
7
- @import url('./baseline/baseline.css') layer(ds.baseline);
8
- @import url('./baseline/typography.css') layer(ds.base.typography);
9
- @import url('./utilities.css') layer(ds.base.utilities);
10
- @import url('./button.css') layer(ds.components);
11
- @import url('./alert.css') layer(ds.components);
12
- @import url('./popover.css') layer(ds.components);
13
- @import url('./skiplink.css') layer(ds.components);
14
- @import url('./accordion.css') layer(ds.components);
15
- @import url('./switch.css') layer(ds.components);
16
- @import url('./checkbox.css') layer(ds.components);
17
- @import url('./radio.css') layer(ds.components);
18
- @import url('./search.css') layer(ds.components);
19
- @import url('./select.css') layer(ds.components);
20
- @import url('./textfield.css') layer(ds.components);
21
- @import url('./textarea.css') layer(ds.components);
22
- @import url('./helptext.css') layer(ds.components);
23
- @import url('./modal.css') layer(ds.components);
24
- @import url('./list.css') layer(ds.components);
25
- @import url('./card.css') layer(ds.components);
26
- @import url('./link.css') layer(ds.components);
27
- @import url('./fieldset.css') layer(ds.components);
28
- @import url('./dropdown.css') layer(ds.components);
29
- @import url('./chip') layer(ds.components);
30
- @import url('./divider.css') layer(ds.components);
31
- @import url('./tabs.css') layer(ds.components);
32
- @import url('./pagination.css') layer(ds.components);
33
- @import url('./skeleton.css') layer(ds.components);
34
- @import url('./tag.css') layer(ds.components);
35
- @import url('./error-summary.css') layer(ds.components);
36
- @import url('./togglegroup.css') layer(ds.components);
37
- @import url('./tooltip.css') layer(ds.components);
38
- @import url('./spinner.css') layer(ds.components);
39
- @import url('./table.css') layer(ds.components);
40
- @import url('./combobox.css') layer(ds.components);
41
- @import url('./breadcrumbs.css') layer(ds.components);
42
- @import url('./badge.css') layer(ds.components);
43
- @import url('./avatar.css') layer(ds.components);
package/link.css DELETED
@@ -1,57 +0,0 @@
1
- .ds-link {
2
- --dsc-link-background--active: var(--ds-color-accent-surface-default);
3
- --dsc-link-background--focus: var(--ds-color-focus-outer);
4
- --dsc-link-color--active: var(--ds-color-accent-text-default);
5
- --dsc-link-color--focus: var(--ds-color-focus-inner);
6
- --dsc-link-color--hover: var(--ds-color-accent-text-default);
7
- --dsc-link-color--visited: var(--ds-global-purple-12);
8
- --dsc-link-color: var(--ds-color-accent-text-subtle);
9
- --dsc-link-text-decoration-thickness--hover: max(2px, 0.125rem, 0.12em);
10
- --dsc-link-text-decoration-thickness: max(1px, 0.0625rem);
11
-
12
- color: var(--dsc-link-color);
13
- outline: none;
14
- text-decoration-style: solid;
15
- text-decoration-thickness: var(--dsc-link-text-decoration-thickness);
16
- text-underline-offset: max(5px, 0.25rem);
17
-
18
- & :is(img, svg) {
19
- vertical-align: middle; /* Align img or svg icon with text */
20
- }
21
-
22
- /**
23
- * Colors
24
- */
25
- &[data-color='neutral'] {
26
- --dsc-link-background--active: var(--ds-color-neutral-surface-default);
27
- --dsc-link-color--active: var(--ds-color-neutral-text-subtle);
28
- --dsc-link-color--hover: var(--ds-color-neutral-text-subtle);
29
- --dsc-link-color--visited: var(--ds-global-purple-12);
30
- --dsc-link-color: var(--ds-color-neutral-text-default);
31
- }
32
-
33
- /**
34
- * States
35
- */
36
- &:visited {
37
- color: var(--dsc-link-color--visited);
38
- }
39
-
40
- /* Only use hover for non-touch devices to prevent sticky-hovering */
41
- @media (hover: hover) and (pointer: fine) {
42
- &:hover {
43
- color: var(--dsc-link-color--hover);
44
- text-decoration-thickness: var(--dsc-link-text-decoration-thickness--hover);
45
- }
46
- }
47
-
48
- &:focus-visible {
49
- background: var(--dsc-link-background--focus);
50
- color: var(--dsc-link-color--focus);
51
- }
52
-
53
- &:active {
54
- background: var(--dsc-link-background--active);
55
- color: var(--dsc-link-color--active);
56
- }
57
- }
package/list.css DELETED
@@ -1,38 +0,0 @@
1
- .ds-list {
2
- --dsc-list-padding-left: var(--ds-spacing-6);
3
- --dsc-list-spacing: var(--ds-spacing-3);
4
- --dsc-list-spacing-nested: var(--ds-spacing-2);
5
-
6
- margin: 0;
7
- padding-left: var(--dsc-list-padding-left);
8
-
9
- @composes ds-body-text--md from './utilities.css';
10
-
11
- & > li + li {
12
- margin-top: var(--dsc-list-spacing);
13
- }
14
-
15
- & > li > :is(ol, ul) {
16
- --dsc-list-spacing: var(--dsc-list-spacing-nested);
17
- } /* Shrink spacing a bit when nested */
18
-
19
- /* Add zero-width space to fix VoiceOver: https://gerardkcohen.me/writing/2017/voiceover-list-style-type.html
20
- * This can also be acheived by using role="list" + role="listitem", but is nice to solve with CSS avoiding cluttered HTML
21
- */
22
- & > li::before {
23
- content: '\200B';
24
- position: absolute;
25
- }
26
-
27
- &[data-size='sm'] {
28
- --dsc-list-padding-left: var(--ds-spacing-4);
29
-
30
- @composes ds-body-text--sm from './utilities.css';
31
- }
32
-
33
- &[data-size='lg'] {
34
- --dsc-list-spacing: var(--ds-spacing-4);
35
-
36
- @composes ds-body-text--lg from './utilities.css';
37
- }
38
- }
package/modal.css DELETED
@@ -1,93 +0,0 @@
1
- .ds-modal {
2
- --dsc-modal-backdrop-background: rgb(0 0 0 / 0.5);
3
- --dsc-modal-background: var(--ds-color-neutral-background-default);
4
- --dsc-modal-close-margin: var(--ds-spacing-3);
5
- --dsc-modal-color: var(--ds-color-neutral-text-default);
6
- --dsc-modal-divider: 1px solid var(--ds-color-neutral-border-subtle);
7
- --dsc-modal-max-height: 80vh;
8
- --dsc-modal-max-width: 40rem;
9
- --dsc-modal-padding: var(--ds-spacing-6);
10
- --close-top-right: calc(var(--dsc-modal-padding) * -1 + var(--dsc-modal-close-margin));
11
-
12
- background: var(--dsc-modal-background);
13
- border-radius: min(1rem, var(--ds-border-radius-lg));
14
- border: 0;
15
- box-shadow: var(--ds-shadow-xl);
16
- box-sizing: border-box;
17
- color: var(--dsc-modal-color);
18
- max-height: var(--dsc-modal-max-height);
19
- max-width: var(--dsc-modal-max-width);
20
- padding: var(--dsc-modal-padding);
21
- width: 100%;
22
-
23
- &::backdrop {
24
- animation: fade-in 300ms ease-in-out;
25
- background: var(--dsc-modal-backdrop-background);
26
- }
27
-
28
- &[open] {
29
- animation:
30
- slide-in 300ms ease-in-out,
31
- fade-in 300ms ease-in-out;
32
- }
33
-
34
- &:has(> .ds-modal__block) {
35
- --close-top-right: var(--dsc-modal-close-margin);
36
-
37
- padding: 0; /* Let Modal.Block own the padding */
38
- }
39
-
40
- @media (max-width: 40rem) {
41
- min-width: 100%;
42
- max-width: 100%;
43
- border-radius: 0;
44
- }
45
-
46
- @media (prefers-reduced-motion: reduce) {
47
- &[open],
48
- &::backdrop {
49
- animation: none;
50
- }
51
- }
52
-
53
- /* Close button */
54
- & > form[method='dialog']:first-child > button:only-child {
55
- float: right;
56
- margin: var(--close-top-right) var(--close-top-right) var(--dsc-modal-close-margin) var(--dsc-modal-close-margin);
57
- color: inherit;
58
-
59
- &::before {
60
- content: '';
61
- background: currentcolor;
62
- height: var(--ds-spacing-6);
63
- width: var(--ds-spacing-6);
64
- mask: center/contain no-repeat
65
- 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' d='M6.53 5.47a.75.75 0 0 0-1.06 1.06L10.94 12l-5.47 5.47a.75.75 0 1 0 1.06 1.06L12 13.06l5.47 5.47a.75.75 0 1 0 1.06-1.06L13.06 12l5.47-5.47a.75.75 0 0 0-1.06-1.06L12 10.94z'%3E%3C/path%3E%3C/svg%3E");
66
- }
67
- }
68
- }
69
-
70
- .ds-modal__block {
71
- padding: var(--dsc-modal-padding);
72
-
73
- & + & {
74
- border-top: var(--dsc-modal-divider);
75
- }
76
- }
77
-
78
- /* Prevent scroll when open */
79
- body:has(.ds-modal[open]) {
80
- overflow: hidden;
81
- }
82
-
83
- @keyframes slide-in {
84
- from {
85
- translate: 0 50px;
86
- }
87
- }
88
-
89
- @keyframes fade-in {
90
- from {
91
- opacity: 0;
92
- }
93
- }
package/pagination.css DELETED
@@ -1,57 +0,0 @@
1
- .ds-pagination {
2
- --dsc-pagination-gap: var(--ds-spacing-4);
3
- --dsc-pagination-ellipsis-width: var(--ds-sizing-12);
4
- --dsc-pagination-chevron-size: var(--ds-sizing-6);
5
-
6
- & > :is(ol, ul) {
7
- display: flex;
8
- flex-wrap: wrap;
9
- gap: var(--dsc-pagination-gap);
10
- list-style: none;
11
- margin: 0;
12
- padding: 0;
13
-
14
- & > li:first-child > ::before,
15
- & > li:last-child > ::after {
16
- content: '';
17
- background: currentcolor;
18
- height: var(--dsc-pagination-chevron-size);
19
- mask: center/contain no-repeat
20
- 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");
21
- width: var(--dsc-pagination-chevron-size);
22
- }
23
-
24
- & > li:first-child > ::before {
25
- rotate: 180deg;
26
- }
27
-
28
- /* Makes page buttons square */
29
- & > li:not(:first-child, :last-child) > :is(a, button) {
30
- --dsc-button-padding-inline: var(--dsc-button-padding-block);
31
- }
32
-
33
- /* Style as non-interactive ellipsis when empty */
34
- & > li > [aria-hidden='true'] {
35
- color: inherit;
36
- pointer-events: none;
37
-
38
- &::before {
39
- content: '\2026'; /* ellipsis */
40
- }
41
- }
42
- }
43
-
44
- &[data-size='sm'] {
45
- --dsc-pagination-gap: var(--ds-spacing-2);
46
- --dsc-pagination-ellipsis-width: var(--ds-sizing-10);
47
- }
48
-
49
- &[data-size='lg'] {
50
- --dsc-pagination-gap: var(--ds-spacing-6);
51
- --dsc-pagination-ellipsis-width: var(--ds-sizing-14);
52
- }
53
-
54
- &[data-compact] {
55
- --dsc-pagination-gap: var(--ds-spacing-0);
56
- }
57
- }
package/popover.css DELETED
@@ -1,87 +0,0 @@
1
- .ds-popover {
2
- --dsc-popover-arrow-size: var(--ds-spacing-2);
3
- --dsc-popover-background: var(--ds-color-neutral-background-default);
4
- --dsc-popover-border-radius: min(1rem, var(--ds-border-radius-md));
5
- --dsc-popover-border: 1px solid var(--ds-color-neutral-border-default);
6
- --dsc-popover-color: var(--ds-color-neutral-text-default);
7
- --dsc-popover-max-width: 300px;
8
- --dsc-popover-padding: var(--ds-spacing-3) var(--ds-spacing-4);
9
-
10
- background: var(--dsc-popover-background);
11
- border-radius: var(--dsc-popover-border-radius);
12
- border: var(--dsc-popover-border);
13
- box-sizing: border-box;
14
- color: var(--dsc-popover-color);
15
- inset: 0 auto auto 0;
16
- max-width: var(--dsc-popover-max-width);
17
- overflow: visible;
18
- padding: var(--dsc-popover-padding);
19
- position: fixed;
20
-
21
- @composes ds-body-text--md from './utilities.css';
22
-
23
- &::before {
24
- background: var(--dsc-popover-background);
25
- border: inherit;
26
- border-left-color: transparent;
27
- border-top-color: transparent;
28
- box-sizing: border-box;
29
- content: '';
30
- height: var(--dsc-popover-arrow-size);
31
- left: var(--ds-popover-arrow-x);
32
- position: absolute;
33
- top: var(--ds-popover-arrow-y);
34
- translate: -50% -50%;
35
- width: var(--dsc-popover-arrow-size);
36
- }
37
-
38
- &[data-size='sm'] {
39
- --dsc-popover-padding: var(--ds-spacing-2) var(--ds-spacing-3);
40
-
41
- @composes ds-body-text--sm from './utilities.css';
42
- }
43
-
44
- &[data-size='lg'] {
45
- --dsc-popover-padding: var(--ds-spacing-3) var(--ds-spacing-5);
46
-
47
- @composes ds-body-text--lg from './utilities.css';
48
- }
49
-
50
- &[data-placement='top']::before {
51
- top: 100%;
52
- rotate: 45deg;
53
- }
54
-
55
- &[data-placement='left']::before {
56
- left: 100%;
57
- rotate: -45deg;
58
- }
59
-
60
- &[data-placement='right']::before {
61
- left: 0;
62
- rotate: 135deg;
63
- }
64
-
65
- &[data-placement='bottom']::before {
66
- top: 0;
67
- rotate: -135deg;
68
- }
69
-
70
- &[data-variant='info'] {
71
- --dsc-popover-background: var(--ds-color-info-surface-default);
72
- --dsc-popover-border: 1px solid var(--ds-color-info-border-default);
73
- --dsc-popover-color: var(--ds-color-info-text-default);
74
- }
75
-
76
- &[data-variant='warning'] {
77
- --dsc-popover-background: var(--ds-color-warning-surface-default);
78
- --dsc-popover-border: 1px solid var(--ds-color-warning-border-default);
79
- --dsc-popover-color: var(--ds-color-warning-text-default);
80
- }
81
-
82
- &[data-variant='danger'] {
83
- --dsc-popover-background: var(--ds-color-danger-surface-default);
84
- --dsc-popover-border: 1px solid var(--ds-color-danger-border-default);
85
- --dsc-popover-color: var(--ds-color-danger-text-default);
86
- }
87
- }
package/radio.css DELETED
@@ -1,200 +0,0 @@
1
- .ds-radio {
2
- --dsc-radio-size: var(--ds-spacing-5);
3
- --dsc-radio-focus-border-width: 3px;
4
- --dsc-radio-background: radial-gradient(circle, var(--ds-color-neutral-background-default) 60%, transparent 60%);
5
- --dsc-radio-border-color: var(--ds-color-neutral-border-default);
6
- --dsc-radio-border__hover--size: calc(var(--ds-spacing-3) / 2);
7
- --dsc-radio-border__hover: 0 0 0 var(--dsc-radio-border__hover--size) var(--ds-color-accent-surface-hover);
8
- --dsc-radio-box_shadow-size: 7px;
9
-
10
- display: grid;
11
- }
12
-
13
- .ds-radio:has(.ds-radio__label) {
14
- grid-template-columns: var(--dsc-radio-size) auto;
15
- gap: var(--ds-spacing-2);
16
- }
17
-
18
- /* Radio */
19
- .ds-radio__input {
20
- position: relative;
21
- width: var(--dsc-radio-size);
22
- height: var(--dsc-radio-size);
23
- z-index: 1;
24
- appearance: none;
25
- outline: none;
26
- cursor: pointer;
27
- margin: 0;
28
- align-self: center;
29
- box-shadow: inset 0 0 0 2px var(--dsc-radio-border-color);
30
- background: var(--dsc-radio-background);
31
- border-radius: 50%;
32
- }
33
-
34
- .ds-radio__input::before {
35
- position: absolute;
36
- content: '';
37
- display: block;
38
- width: 2.75rem;
39
- height: 2.75rem;
40
- transform: translate(-50%, -50%);
41
- top: 50%;
42
- left: 50%;
43
- cursor: pointer;
44
- border-radius: var(--ds-border-radius-md);
45
- }
46
-
47
- .ds-radio__label {
48
- /* min-height: var(--ds-sizing-10); */
49
- min-width: min-content;
50
- display: inline-flex;
51
- flex-direction: row;
52
- gap: var(--ds-spacing-1);
53
- align-items: center;
54
- cursor: pointer;
55
- }
56
-
57
- .ds-radio__description {
58
- margin-top: calc(var(--ds-spacing-2) * -1);
59
- color: var(--ds-color-neutral-text-subtle);
60
- grid-column: 2;
61
- }
62
-
63
- .ds-radio--readonly > .ds-radio__input,
64
- .ds-radio--readonly > .ds-radio__label,
65
- .ds-radio--readonly > .ds-radio__input::before {
66
- cursor: default;
67
- }
68
-
69
- .ds-radio:has(.ds-radio__input:disabled) > .ds-radio__description {
70
- opacity: var(--ds-disabled-opacity);
71
- }
72
-
73
- .ds-radio__input:disabled,
74
- .ds-radio__input:disabled::before,
75
- .ds-radio:has(.ds-radio__input:disabled) > .ds-radio__label {
76
- cursor: not-allowed;
77
- opacity: var(--ds-disabled-opacity);
78
- }
79
-
80
- .ds-radio:has(.ds-radio__input:focus-visible) {
81
- --dsc-focus-border-width: 3px;
82
-
83
- outline: var(--dsc-focus-border-width) solid var(--ds-color-focus-outer);
84
- outline-offset: var(--dsc-focus-border-width);
85
- box-shadow: 0 0 0 var(--dsc-focus-border-width) var(--ds-color-focus-inner);
86
- border-radius: var(--ds-border-radius-md);
87
- }
88
-
89
- .ds-radio__input:checked {
90
- --dsc-radio-border-color: var(--ds-color-accent-base-default);
91
- --dsc-radio-background: radial-gradient(circle, var(--ds-color-accent-contrast-1) 60%, transparent 60%);
92
-
93
- /* We use a gradient to avoid bleeding pixels */
94
- background: var(--dsc-radio-background);
95
- }
96
-
97
- .ds-radio--readonly > .ds-radio__input {
98
- --dsc-radio-border-color: var(--ds-color-neutral-border-subtle);
99
- --dsc-radio-background: var(--ds-color-neutral-background-subtle);
100
- }
101
-
102
- .ds-radio__input:focus-visible:not(:checked) {
103
- --dsc-radio-border-color: var(--ds-color-accent-border-strong);
104
-
105
- box-shadow: inset 0 0 0 2px var(--dsc-radio-border-color);
106
- }
107
-
108
- .ds-radio--readonly > .ds-radio__input:checked {
109
- background: var(--ds-color-neutral-border-strong);
110
- }
111
-
112
- .ds-radio--error > .ds-radio__input:not(:disabled, :focus-visible) {
113
- --dsc-radio-border-color: var(--ds-color-danger-border-default);
114
- }
115
-
116
- .ds-radio__input:focus-visible:checked {
117
- box-shadow: inset 0 0 0 var(--dsc-radio-box_shadow-size) var(--dsc-radio-border-color);
118
- }
119
-
120
- .ds-radio__input:checked:not(:focus-visible) {
121
- box-shadow: inset 0 0 0 var(--dsc-radio-box_shadow-size) var(--dsc-radio-border-color);
122
- }
123
-
124
- /* Only use hover for non-touch devices to prevent sticky-hovering
125
- "input:not(:read-only)" does not work so using ".container:not(.readonly) >" instead */
126
- @media (hover: hover) and (pointer: fine) {
127
- .ds-radio:not(.ds-radio--readonly) > .ds-radio__label:hover:not(:disabled),
128
- .ds-radio:not(.ds-radio--readonly) > .ds-radio__input:hover:not(:disabled) + .ds-radio__label {
129
- color: var(--ds-color-accent-text-subtle);
130
- }
131
-
132
- .ds-radio:not(.ds-radio--readonly) > .ds-radio__input:hover:not(:checked, :disabled, :focus-visible) {
133
- --dsc-radio-border-color: var(--ds-color-accent-border-strong);
134
-
135
- box-shadow:
136
- var(--dsc-radio-border__hover),
137
- inset 0 0 0 2px var(--dsc-radio-border-color);
138
- }
139
-
140
- .ds-radio:not(.ds-radio--readonly) > .ds-radio__input:hover:checked:not(:disabled, :focus-visible) {
141
- box-shadow:
142
- var(--dsc-radio-border__hover),
143
- inset 0 0 0 var(--dsc-radio-box_shadow-size) var(--dsc-radio-border-color);
144
- }
145
- }
146
-
147
- /** Sizing */
148
-
149
- .ds-radio--sm {
150
- --dsc-radio-size: var(--ds-sizing-5);
151
- --dsc-radio-box_shadow-size: 6px;
152
-
153
- /* min-height: var(--ds-sizing-10); */
154
- }
155
-
156
- .ds-radio--md {
157
- --dsc-radio-size: var(--ds-sizing-6);
158
- --dsc-radio-border__hover--size: var(--ds-spacing-1);
159
- --dsc-radio-box_shadow-size: 7px;
160
-
161
- /* min-height: var(--ds-sizing-11); */
162
- }
163
-
164
- .ds-radio--lg {
165
- --dsc-radio-size: var(--ds-sizing-7);
166
- --dsc-radio-box_shadow-size: 8px;
167
-
168
- /* min-height: var(--ds-sizing-12); */
169
- }
170
-
171
- .ds-radio__group {
172
- --dsc-radio-group-gap: var(--ds-spacing-4);
173
-
174
- display: flex;
175
- flex-direction: column;
176
- gap: var(--dsc-radio-group-gap);
177
- width: fit-content;
178
- }
179
-
180
- .ds-radio__group--sm {
181
- --dsc-radio-group-gap: var(--ds-spacing-3);
182
-
183
- margin-top: calc(var(--ds-spacing-2) * -1);
184
- }
185
-
186
- .ds-radio__group--md {
187
- --dsc-radio-group-gap: var(--ds-spacing-4);
188
- }
189
-
190
- .ds-radio__group--lg {
191
- --dsc-radio-group-gap: var(--ds-spacing-5);
192
-
193
- margin-top: calc(var(--ds-spacing-2) * 1);
194
- }
195
-
196
- .ds-radio__group--horizontal {
197
- display: flex;
198
- flex-direction: row;
199
- gap: var(--ds-spacing-6);
200
- }