@ship-ui/core 0.13.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 (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/assets/fonts/InterTight-VariableFont_wght.woff2 +0 -0
  4. package/bin/ship-fg-node +40 -0
  5. package/bin/ship-fg.ts +40 -0
  6. package/bin/src/ship-fg-node.js +344 -0
  7. package/bin/src/ship-fg.ts +368 -0
  8. package/bin/src/utilities.js +53 -0
  9. package/bin/src/utilities.ts +98 -0
  10. package/bin/tsconfig.app.json +15 -0
  11. package/fesm2022/ship-ui-core.mjs +5373 -0
  12. package/fesm2022/ship-ui-core.mjs.map +1 -0
  13. package/index.d.ts +758 -0
  14. package/package.json +52 -0
  15. package/styles/components/ship-alert-container.component.scss +49 -0
  16. package/styles/components/ship-alert.component.scss +273 -0
  17. package/styles/components/ship-button-group.component.scss +63 -0
  18. package/styles/components/ship-button.component.scss +330 -0
  19. package/styles/components/ship-card.component.scss +54 -0
  20. package/styles/components/ship-checkbox.component.scss +245 -0
  21. package/styles/components/ship-chip.component.scss +290 -0
  22. package/styles/components/ship-color-picker.component.scss +78 -0
  23. package/styles/components/ship-datepicker.component.scss +274 -0
  24. package/styles/components/ship-dialog.component.scss +119 -0
  25. package/styles/components/ship-divider.component.scss +27 -0
  26. package/styles/components/ship-file-upload.component.scss +47 -0
  27. package/styles/components/ship-form-field.component.scss +334 -0
  28. package/styles/components/ship-icon.component.scss +54 -0
  29. package/styles/components/ship-list.component.scss +148 -0
  30. package/styles/components/ship-menu.component.scss +217 -0
  31. package/styles/components/ship-popover.component.scss +66 -0
  32. package/styles/components/ship-progress-bar.component.scss +173 -0
  33. package/styles/components/ship-radio.component.scss +182 -0
  34. package/styles/components/ship-range-slider.component.scss +412 -0
  35. package/styles/components/ship-select.component.scss +139 -0
  36. package/styles/components/ship-sidenav.component.scss +192 -0
  37. package/styles/components/ship-sortable.component.scss +54 -0
  38. package/styles/components/ship-spinner.component.scss +53 -0
  39. package/styles/components/ship-stepper.component.scss +138 -0
  40. package/styles/components/ship-table.component.scss +402 -0
  41. package/styles/components/ship-tabs.component.scss +86 -0
  42. package/styles/components/ship-toggle-card.component.scss +71 -0
  43. package/styles/components/ship-toggle.component.scss +238 -0
  44. package/styles/components/ship-tooltip.component.scss +175 -0
  45. package/styles/components/ship-virtual-scroll.component.scss +12 -0
  46. package/styles/components/sparkle-checkbox.component.scss +245 -0
  47. package/styles/components/sparkle-select.component.scss +139 -0
  48. package/styles/core/apexcharts/apexcharts.scss +58 -0
  49. package/styles/core/core/layout.scss +74 -0
  50. package/styles/core/core/loader.scss +63 -0
  51. package/styles/core/core/palette-variables.scss +352 -0
  52. package/styles/core/core/typography.scss +103 -0
  53. package/styles/core/core/variables.scss +188 -0
  54. package/styles/core/core.scss +4 -0
  55. package/styles/core/fonts/_inter-tight.scss +11 -0
  56. package/styles/core/helpers/fn/color-mix.scss +7 -0
  57. package/styles/core/helpers/fn/dp.scss +14 -0
  58. package/styles/core/helpers/fn/p2r.scss +23 -0
  59. package/styles/core/helpers/mixins/border-gradient.scss +61 -0
  60. package/styles/core/helpers/mixins/breakpoint.scss +217 -0
  61. package/styles/core/helpers/mixins/ellipsis.scss +7 -0
  62. package/styles/core/helpers/mixins/overflow-scrolling.scss +18 -0
  63. package/styles/core/helpers/mixins/wrapper.scss +16 -0
  64. package/styles/core/polyfill/light-dark.scss +3 -0
  65. package/styles/helpers.scss +13 -0
  66. package/styles/index.scss +146 -0
@@ -0,0 +1,119 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipDialog: true !default;
4
+
5
+ @if $shipDialog == true {
6
+ dialog[shDialog] {
7
+ --dialog-p: #{p2r(16)};
8
+ --dialog-g: #{p2r(8)};
9
+ --dialog-bg: var(--base-1);
10
+
11
+ border: 1px solid var(--base-4);
12
+ background: transparent;
13
+ border-radius: var(--shape-2);
14
+ box-shadow: var(--box-shadow-40);
15
+ color: var(--base-8);
16
+ font: var(--paragraph-30);
17
+ padding: 0;
18
+ margin: auto;
19
+ z-index: 0;
20
+
21
+ &.type-b {
22
+ background: var(--base-2);
23
+ padding: p2r(8);
24
+ outline: 1px solid var(--base-4);
25
+ outline-offset: -1px;
26
+ overflow: hidden;
27
+
28
+ &::backdrop {
29
+ background: rgb(from var(--base-1) r g b / 30%);
30
+ backdrop-filter: blur(10px);
31
+ -webkit-backdrop-filter: blur(10px);
32
+ }
33
+
34
+ .content {
35
+ border: 1px solid rgb(from var(--base-4) r g b / 70%);
36
+ }
37
+ }
38
+
39
+ .content {
40
+ position: relative;
41
+ border-radius: var(--shape-2);
42
+ background-color: var(--dialog-bg);
43
+ z-index: 2;
44
+ max-width: initial;
45
+ max-height: calc(96vh - #{p2r(16)});
46
+ position: relative;
47
+ overflow: auto;
48
+ }
49
+
50
+ .closeable-overlay {
51
+ position: fixed;
52
+ inset: 0;
53
+ opacity: 0;
54
+ z-index: 1;
55
+ }
56
+
57
+ &:focus {
58
+ outline: none;
59
+ }
60
+
61
+ .dialog-content {
62
+ position: relative;
63
+ z-index: 2;
64
+ }
65
+
66
+ .dialog-backdrop {
67
+ position: fixed;
68
+ inset: 0;
69
+ opacity: 0;
70
+ z-index: 1;
71
+ }
72
+
73
+ [header],
74
+ [content],
75
+ [footer] {
76
+ width: 100%;
77
+ }
78
+
79
+ [header] {
80
+ display: flex;
81
+ align-items: center;
82
+ justify-content: space-between;
83
+ padding: var(--dialog-p);
84
+ gap: var(--dialog-g);
85
+
86
+ &.sticky {
87
+ background-color: var(--dialog-bg);
88
+ border-bottom: 1px solid var(--base-4);
89
+ box-shadow: var(--box-shadow-35);
90
+ position: sticky;
91
+ top: 0;
92
+ }
93
+ }
94
+
95
+ [content] {
96
+ padding: 0 var(--dialog-p);
97
+
98
+ &:not(:has(~ [footer])) {
99
+ padding-bottom: var(--dialog-p);
100
+ }
101
+ }
102
+
103
+ [footer] {
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: flex-end;
107
+ padding: var(--dialog-p);
108
+ gap: var(--dialog-g);
109
+
110
+ &.sticky {
111
+ background-color: var(--dialog-bg);
112
+ border-top: 1px solid var(--base-4);
113
+ box-shadow: var(--box-shadow-35);
114
+ position: sticky;
115
+ bottom: 0;
116
+ }
117
+ }
118
+ }
119
+ }
@@ -0,0 +1,27 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipDivider: true !default;
4
+
5
+ @if $shipDivider == true {
6
+ sh-divider {
7
+ --divider-c: var(--base-4);
8
+ --divider-h: #{p2r(1)};
9
+
10
+ display: flex;
11
+ gap: p2r(8);
12
+ align-items: center;
13
+ text-align: center;
14
+
15
+ &:empty {
16
+ gap: 0;
17
+ }
18
+
19
+ &::before,
20
+ &::after {
21
+ content: '';
22
+ background: var(--divider-c);
23
+ height: var(--divider-h);
24
+ flex: 1 0;
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,47 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipFileUpload: true !default;
4
+
5
+ @if $shipFileUpload == true {
6
+ sh-file-upload {
7
+ --fu-bg-active: rgba(0, 0, 0, 0.1);
8
+ display: flex;
9
+ flex-direction: column;
10
+ gap: p2r(12);
11
+ position: relative;
12
+ width: 100%;
13
+
14
+ sh-list {
15
+ border-radius: var(--shape-3);
16
+ background-color: var(--base-2);
17
+ }
18
+
19
+ .files-text,
20
+ .placeholder {
21
+ color: var(--base-8);
22
+ font: var(--paragraph-30B);
23
+ }
24
+
25
+ input {
26
+ position: absolute;
27
+ opacity: 0;
28
+ inset: 0;
29
+ cursor: pointer;
30
+ z-index: 100;
31
+ }
32
+
33
+ .bg-overlay {
34
+ opacity: 0;
35
+ position: absolute;
36
+ inset: p2r(1);
37
+ background-color: var(--fu-bg-active);
38
+ transition: opacity 125ms linear;
39
+ z-index: 0;
40
+ border-radius: var(--ff-s);
41
+
42
+ &.files-over {
43
+ opacity: 1;
44
+ }
45
+ }
46
+ }
47
+ }
@@ -0,0 +1,334 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipFormField: true !default;
4
+ $shipDatepicker: true !default;
5
+ $shipFormFieldShadow: false !default;
6
+
7
+ %smallFormField {
8
+ --ff-space: #{p2r(7 10)};
9
+ --ff-input-space: #{p2r(6 10)};
10
+ --ff-f: var(--paragraph-40B);
11
+
12
+ line-height: p2r(16);
13
+
14
+ .prefix,
15
+ .suffix {
16
+ line-height: p2r(16);
17
+
18
+ > sh-icon {
19
+ font-size: p2r(16);
20
+ }
21
+ }
22
+ }
23
+
24
+ @if $shipFormField == true {
25
+ sh-form-field-popover,
26
+ sh-form-field {
27
+ --ff-s: var(--shape-2);
28
+ --ff-bc: var(--base-4);
29
+ --ff-prefix-bg: var(--base-2);
30
+ --ff-suffix-bg: transparent;
31
+ --ff-ic: var(--base-8);
32
+ --ff-bg: var(--base-1);
33
+ --ff-f: var(--paragraph-30B);
34
+ --ff-spinner-size: #{p2r(20)};
35
+ --ff-spinner-thickness: #{p2r(2)};
36
+ --ff-space: #{p2r(9 12)};
37
+ --ff-input-space: #{p2r(10 12)};
38
+ --ff-mw: auto;
39
+
40
+ @if $shipFormFieldShadow != false {
41
+ --ff-bs: var(--box-shadow-10);
42
+ } @else {
43
+ --ff-bs: none;
44
+ }
45
+
46
+ display: flex;
47
+ flex-direction: column;
48
+ align-items: flex-start;
49
+ position: relative;
50
+ width: 100%;
51
+
52
+ &[read-only],
53
+ &[read-only='true'],
54
+ &[readonly='true'],
55
+ &[readonly],
56
+ &.readonly,
57
+ &[disabled],
58
+ &[disabled='true'],
59
+ &.disabled,
60
+ &:has(input[disabled]),
61
+ &:has(textarea[disabled]),
62
+ &:has(textarea[disabled='true']),
63
+ &:has(input[disabled='true']) {
64
+ pointer-events: none;
65
+ user-select: none;
66
+ opacity: 0.5;
67
+ }
68
+
69
+ &.small {
70
+ @extend %smallFormField;
71
+ }
72
+
73
+ &.auto-width {
74
+ width: initial;
75
+
76
+ .input-wrap,
77
+ input {
78
+ width: initial;
79
+ }
80
+ }
81
+
82
+ &.center {
83
+ .input-wrap input[type='number'],
84
+ .input-wrap input {
85
+ text-align: center;
86
+ }
87
+ }
88
+
89
+ label {
90
+ display: flex;
91
+ align-items: center;
92
+ padding-bottom: p2r(4);
93
+ gap: p2r(4);
94
+
95
+ sh-icon {
96
+ font-size: p2r(16);
97
+ }
98
+ }
99
+
100
+ .suffix,
101
+ .prefix {
102
+ display: none;
103
+ align-items: center;
104
+ gap: p2r(4);
105
+ padding: var(--ff-space);
106
+ transition: background-color 125ms linear;
107
+ background-color: var(--ff-prefix-bg);
108
+ line-height: p2r(20);
109
+
110
+ &:not(:empty) {
111
+ display: flex;
112
+ }
113
+ }
114
+
115
+ .suffix {
116
+ background-color: var(--ff-suffix-bg);
117
+
118
+ &:has([textsuffix]) {
119
+ padding-left: 0;
120
+ }
121
+ }
122
+
123
+ &:has(input.ng-touched.ng-invalid) {
124
+ --ff-ic: var(--error-8);
125
+ --ff-bc: var(--error-8);
126
+ --ff-prefix-bg: var(--error-2);
127
+ }
128
+
129
+ &.autosize {
130
+ width: min-content;
131
+
132
+ .input-wrap {
133
+ height: auto;
134
+
135
+ textarea,
136
+ input {
137
+ field-sizing: content;
138
+ }
139
+ }
140
+ }
141
+
142
+ .input-wrap {
143
+ display: flex;
144
+ align-items: center;
145
+ border: 1px solid var(--ff-bc);
146
+ border-radius: var(--ff-s);
147
+ background: var(--ff-bg);
148
+ box-shadow: var(--ff-bs);
149
+ overflow: hidden;
150
+ transition: border-color 125ms linear;
151
+ min-width: var(--ff-mw);
152
+ width: 100%;
153
+
154
+ sh-popover,
155
+ .input {
156
+ flex: 1 0;
157
+ margin: var(--ff-space);
158
+ }
159
+
160
+ textarea {
161
+ resize: none;
162
+ margin: p2r(8 0);
163
+ color: var(--base-8);
164
+ field-sizing: content;
165
+ }
166
+
167
+ &:has(textarea) {
168
+ height: auto;
169
+ min-width: 100%;
170
+ max-width: 100%;
171
+ }
172
+
173
+ sh-icon {
174
+ color: var(--ff-ic);
175
+ transition: color 125ms linear;
176
+
177
+ &.primary {
178
+ --ff-ic: var(--primary-8);
179
+ }
180
+
181
+ &.accent {
182
+ --ff-ic: var(--accent-8);
183
+ }
184
+
185
+ &.warn {
186
+ --ff-ic: var(--warn-8);
187
+ }
188
+
189
+ &.error {
190
+ --ff-ic: var(--error-8);
191
+ }
192
+
193
+ &.success {
194
+ --ff-ic: var(--success-8);
195
+ }
196
+ }
197
+
198
+ sh-chip sh-icon {
199
+ color: var(--chip-ic);
200
+ }
201
+
202
+ sh-spinner {
203
+ --spinner-size: var(--ff-spinner-size);
204
+ --spinner-thickness: var(--ff-spinner-thickness);
205
+ }
206
+
207
+ textarea,
208
+ input {
209
+ appearance: none;
210
+ border: 0;
211
+ padding: 0;
212
+ background: transparent;
213
+ font: var(--paragraph-30B);
214
+ flex: 1 0;
215
+ color: var(--base-8);
216
+ margin: var(--ff-input-space);
217
+ width: 100%;
218
+
219
+ &::placeholder {
220
+ color: var(--base-6);
221
+ }
222
+
223
+ &:focus {
224
+ outline: none;
225
+ }
226
+
227
+ &[type='number'] {
228
+ appearance: textfield;
229
+ text-align: right;
230
+
231
+ &::-webkit-outer-spin-button,
232
+ &::-webkit-inner-spin-button {
233
+ display: none;
234
+ }
235
+
236
+ &:has(+ .suffix:not(:empty)) {
237
+ margin-right: 0;
238
+ }
239
+ }
240
+ }
241
+ }
242
+
243
+ .helpers {
244
+ height: p2r(20);
245
+ display: flex;
246
+ align-items: center;
247
+ gap: p2r(4);
248
+ padding-top: p2r(4);
249
+ width: 100%;
250
+
251
+ [hint] {
252
+ color: var(--base-9);
253
+
254
+ &[suffix] {
255
+ text-align: right;
256
+ width: 100%;
257
+ }
258
+ }
259
+
260
+ &:has(.error-wrap:not(:empty)) .hint {
261
+ display: none;
262
+ }
263
+ }
264
+
265
+ // &:not(:has(input.ng-touched.ng-invalid)) {
266
+ // &:has(.hint:empty) .helpers {
267
+ // height: 0;
268
+ // padding-top: 0;
269
+ // }
270
+ // }
271
+
272
+ &:has(.error-wrap:empty + .hint:empty) .helpers {
273
+ height: 0;
274
+ padding-top: 0;
275
+ }
276
+
277
+ &:has(input.ng-touched.ng-invalid) .helpers .hint {
278
+ opacity: 0;
279
+ visibility: hidden;
280
+ }
281
+
282
+ .error-wrap {
283
+ color: var(--error-8);
284
+ opacity: 1;
285
+ transition: opacity 125ms linear;
286
+ position: absolute;
287
+ bottom: 0;
288
+ left: 0;
289
+ right: 0;
290
+ width: 100%;
291
+ }
292
+
293
+ .hint {
294
+ display: flex;
295
+ align-items: center;
296
+ justify-content: space-between;
297
+ width: 100%;
298
+ color: var(--base-8);
299
+ opacity: 1;
300
+ transition:
301
+ visibility 125ms linear,
302
+ opacity 125ms linear;
303
+ visibility: visible;
304
+
305
+ &:empty {
306
+ opacity: 0;
307
+ }
308
+ }
309
+
310
+ &.error {
311
+ --ff-ic: var(--error-8);
312
+ }
313
+
314
+ &.warning {
315
+ --ff-ic: var(--warn-8);
316
+ }
317
+
318
+ &.success {
319
+ --ff-ic: var(--success-8);
320
+ }
321
+ }
322
+ }
323
+
324
+ @if $shipDatepicker == true {
325
+ sh-daterange-input,
326
+ sh-datepicker-input {
327
+ &.small {
328
+ sh-form-field-popover,
329
+ sh-form-field {
330
+ @extend %smallFormField;
331
+ }
332
+ }
333
+ }
334
+ }
@@ -0,0 +1,54 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipIcon: true !default;
4
+
5
+ @if $shipIcon == true {
6
+ sh-icon {
7
+ --icon-c: inherit;
8
+
9
+ font-size: p2r(20);
10
+ line-height: 1em;
11
+ width: 1em;
12
+ height: 1em;
13
+ min-width: 1em;
14
+ min-height: 1em;
15
+ max-width: 1em;
16
+ max-height: 1em;
17
+ text-align: left;
18
+ overflow: hidden;
19
+ display: inline-block;
20
+ color: var(--icon-c);
21
+
22
+ &.primary {
23
+ --icon-c: var(--primary-8);
24
+ }
25
+
26
+ &.accent {
27
+ --icon-c: var(--accent-8);
28
+ }
29
+
30
+ &.warn {
31
+ --icon-c: var(--warn-8);
32
+ }
33
+
34
+ &.error {
35
+ --icon-c: var(--error-8);
36
+ }
37
+
38
+ &.success {
39
+ --icon-c: var(--success-8);
40
+ }
41
+
42
+ &.large {
43
+ font-size: p2r(32);
44
+ }
45
+
46
+ &.small {
47
+ font-size: p2r(16);
48
+ }
49
+
50
+ &.inherit {
51
+ font-size: inherit;
52
+ }
53
+ }
54
+ }
@@ -0,0 +1,148 @@
1
+ @use '../helpers.scss' as *;
2
+
3
+ $shipList: true !default;
4
+
5
+ @if $shipList == true {
6
+ sh-list {
7
+ --list-s: var(--shape-2);
8
+ --list-active-bg: var(--base-1);
9
+ --list-color: var(--base-9);
10
+ --list-active-bs: none;
11
+ --list-p: #{p2r(20 16)};
12
+ --list-item-p: #{p2r(8 12)};
13
+ --list-item-gap: #{p2r(8)};
14
+
15
+ width: 100%;
16
+ padding: var(--list-p);
17
+ gap: p2r(8);
18
+ display: flex;
19
+ flex-direction: column;
20
+
21
+ &.base-1 {
22
+ --list-active-bg: var(--base-1);
23
+ --list-active-bs: var(--box-shadow-20);
24
+ }
25
+
26
+ &:empty {
27
+ padding: 0;
28
+ }
29
+
30
+ > [title] {
31
+ color: var(--base-8);
32
+ margin: 0 0.75rem;
33
+ font: var(--paragraph-30);
34
+ line-height: p2r(24);
35
+ }
36
+
37
+ > [action],
38
+ > [item] {
39
+ border-radius: var(--list-s);
40
+ padding: var(--list-item-p);
41
+ font: var(--paragraph-30B);
42
+ color: var(--list-color);
43
+ display: flex;
44
+ align-items: center;
45
+ gap: var(--list-item-gap);
46
+ width: 100%;
47
+ user-select: none;
48
+ appearance: none;
49
+ border: 0;
50
+ text-align: left;
51
+ text-wrap: balance;
52
+ background-color: transparent;
53
+ text-decoration: none;
54
+
55
+ &:focus {
56
+ outline: none;
57
+ }
58
+
59
+ [suffix] {
60
+ margin-left: auto;
61
+ color: var(--base-8);
62
+ }
63
+ }
64
+
65
+ :has(input[type='checkbox']),
66
+ :has(input[type='radio']),
67
+ > [action] {
68
+ cursor: pointer;
69
+ }
70
+
71
+ > [item]:has(input[type='checkbox']:checked),
72
+ > [action]:has(input[type='checkbox']:checked),
73
+ > [item]:has(input[type='radio']:checked),
74
+ > [action]:has(input[type='radio']:checked),
75
+ > [action].active,
76
+ > [action].selected {
77
+ --list-color: var(--base-12);
78
+
79
+ background-color: var(--list-active-bg);
80
+ box-shadow: var(--list-active-bs);
81
+ }
82
+
83
+ &.primary {
84
+ > [item]:has(input[type='checkbox']:checked),
85
+ > [action]:has(input[type='checkbox']:checked),
86
+ > [item]:has(input[type='radio']:checked),
87
+ > [action]:has(input[type='radio']:checked),
88
+ > [action].active,
89
+ > [action].selected {
90
+ sh-icon:first-child {
91
+ color: var(--primary-8);
92
+ }
93
+ }
94
+ }
95
+
96
+ &.accent {
97
+ > [item]:has(input[type='checkbox']:checked),
98
+ > [action]:has(input[type='checkbox']:checked),
99
+ > [item]:has(input[type='radio']:checked),
100
+ > [action]:has(input[type='radio']:checked),
101
+ > [action].active,
102
+ > [action].selected {
103
+ sh-icon:first-child {
104
+ color: var(--accent-8);
105
+ }
106
+ }
107
+ }
108
+
109
+ &.warn {
110
+ > [item]:has(input[type='checkbox']:checked),
111
+ > [action]:has(input[type='checkbox']:checked),
112
+ > [item]:has(input[type='radio']:checked),
113
+ > [action]:has(input[type='radio']:checked),
114
+ > [action].active,
115
+ > [action].selected {
116
+ sh-icon:first-child {
117
+ color: var(--warn-8);
118
+ }
119
+ }
120
+ }
121
+
122
+ &.error {
123
+ > [item]:has(input[type='checkbox']:checked),
124
+ > [action]:has(input[type='checkbox']:checked),
125
+ > [item]:has(input[type='radio']:checked),
126
+ > [action]:has(input[type='radio']:checked),
127
+ > [action].active,
128
+ > [action].selected {
129
+ sh-icon:first-child {
130
+ color: var(--error-8);
131
+ }
132
+ }
133
+ }
134
+
135
+ &.success {
136
+ > [item]:has(input[type='checkbox']:checked),
137
+ > [action]:has(input[type='checkbox']:checked),
138
+ > [item]:has(input[type='radio']:checked),
139
+ > [action]:has(input[type='radio']:checked),
140
+ > [action].active,
141
+ > [action].selected {
142
+ sh-icon:first-child {
143
+ color: var(--success-8);
144
+ }
145
+ }
146
+ }
147
+ }
148
+ }