@slexkit/theme-shadcn 0.3.0 → 0.3.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.
package/base.css CHANGED
@@ -133,52 +133,6 @@ color-scheme: dark;
133
133
  box-sizing: border-box;
134
134
  }
135
135
 
136
- body[data-mobile-nav-open] {
137
- overflow: hidden;
138
- overscroll-behavior: contain;
139
- }
140
-
141
- #mobileNav {
142
- --mobile-nav-backdrop-opacity: 0;
143
- --mobile-nav-panel-translate: -100%;
144
- pointer-events: none;
145
- }
146
-
147
- #mobileNav[data-open="true"] {
148
- --mobile-nav-backdrop-opacity: 1;
149
- --mobile-nav-panel-translate: 0px;
150
- pointer-events: auto;
151
- }
152
-
153
- #mobileNav [data-mobile-nav-backdrop] {
154
- opacity: var(--mobile-nav-backdrop-opacity);
155
- touch-action: pan-y;
156
- transition: opacity 180ms ease;
157
- }
158
-
159
- #mobileNav [data-mobile-nav-panel] {
160
- transform: translateX(var(--mobile-nav-panel-translate));
161
- touch-action: pan-y;
162
- transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
163
- will-change: transform;
164
- }
165
-
166
- #mobileNav[data-dragging="true"] [data-mobile-nav-backdrop],
167
- #mobileNav[data-dragging="true"] [data-mobile-nav-panel] {
168
- transition: none;
169
- }
170
-
171
- @media (prefers-reduced-motion: reduce) {
172
- #mobileNav [data-mobile-nav-backdrop],
173
- #mobileNav [data-mobile-nav-panel] {
174
- transition: none;
175
- }
176
- }
177
-
178
- .slexkit-for-wrapper {
179
- display: contents;
180
- }
181
-
182
136
  .slexkit-source-toolbar {
183
137
  display: flex;
184
138
  align-items: center;
@@ -154,8 +154,8 @@
154
154
  transform: none;
155
155
  }
156
156
 
157
- .slex-checkbox-field:has(.slex-checkbox:disabled),
158
- .slex-radio-field:has(.slex-radio:disabled) {
157
+ .slex-checkbox-field[data-disabled="true"],
158
+ .slex-radio-field[data-disabled="true"] {
159
159
  cursor: not-allowed;
160
160
  opacity: 0.65;
161
161
  }
@@ -79,7 +79,7 @@
79
79
  display: block;
80
80
  }
81
81
 
82
- .slex-stat-character[data-stat-change] {
82
+ .slex-stat-character[data-stat-kind="digit"][data-stat-change] {
83
83
  overflow: hidden;
84
84
  }
85
85
 
@@ -164,53 +164,62 @@
164
164
  .slex-slider {
165
165
  box-sizing: border-box;
166
166
  width: 100%;
167
- height: 0.5rem;
167
+ height: 1rem;
168
+ padding: 0;
169
+ border: 0;
168
170
  border-radius: 999px;
169
171
  -webkit-appearance: none;
170
172
  appearance: none;
171
- background: linear-gradient(
172
- to right,
173
- var(--primary) 0%,
174
- var(--primary) var(--slex-slider-progress, 0%),
175
- var(--secondary) var(--slex-slider-progress, 0%),
176
- var(--secondary) 100%
177
- );
173
+ background: transparent;
178
174
  accent-color: var(--primary);
179
175
  cursor: pointer;
176
+ overflow: visible;
180
177
  transition: box-shadow 150ms ease, filter 150ms ease;
181
178
  }
182
179
 
183
- .slex-slider:hover {
184
- box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 8%, transparent);
185
- }
186
-
187
- .slex-slider:active {
188
- box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
189
- }
190
-
191
180
  .slex-slider:focus-visible {
192
181
  outline: 2px solid var(--ring);
193
182
  outline-offset: 4px;
194
183
  }
195
184
 
196
185
  .slex-slider::-webkit-slider-thumb {
186
+ box-sizing: border-box;
197
187
  width: 1rem;
198
188
  height: 1rem;
189
+ margin-top: -0.25rem;
199
190
  border: 2px solid var(--primary);
200
191
  border-radius: 999px;
201
- background: var(--background) !important;
192
+ background-color: var(--background);
193
+ background-clip: padding-box;
202
194
  box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
203
195
  -webkit-appearance: none;
204
196
  appearance: none;
205
197
  transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
206
198
  }
207
199
 
200
+ .slex-slider::-webkit-slider-runnable-track {
201
+ box-sizing: border-box;
202
+ width: 100%;
203
+ height: 0.5rem;
204
+ border: 0;
205
+ border-radius: 999px;
206
+ background: linear-gradient(
207
+ to right,
208
+ var(--primary) 0%,
209
+ var(--primary) var(--slex-slider-progress, 0%),
210
+ var(--secondary) var(--slex-slider-progress, 0%),
211
+ var(--secondary) 100%
212
+ );
213
+ }
214
+
208
215
  .slex-slider::-moz-range-thumb {
216
+ box-sizing: border-box;
209
217
  width: 1rem;
210
218
  height: 1rem;
211
219
  border: 2px solid var(--primary);
212
220
  border-radius: 999px;
213
- background: var(--background) !important;
221
+ background-color: var(--background);
222
+ background-clip: padding-box;
214
223
  box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
215
224
  transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
216
225
  }
@@ -363,12 +372,12 @@
363
372
  opacity: 0.55;
364
373
  }
365
374
 
366
- .slex-switch:has(.slex-switch-input:disabled) {
375
+ .slex-switch[data-disabled="true"] {
367
376
  cursor: not-allowed;
368
377
  }
369
378
 
370
- .slex-switch:has(.slex-switch-input:disabled):hover .slex-switch-control,
371
- .slex-switch:has(.slex-switch-input:disabled):hover .slex-switch-control::after {
379
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control,
380
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control::after {
372
381
  box-shadow: none;
373
382
  }
374
383
 
@@ -421,16 +430,18 @@
421
430
  border: 1px solid var(--input);
422
431
  border-radius: var(--radius);
423
432
  background: var(--background);
433
+ background-clip: padding-box;
424
434
  color: var(--foreground);
425
435
  font-family: inherit;
426
436
  font-size: 0.875rem;
427
437
  line-height: 1.5;
428
438
  outline: none;
439
+ -webkit-appearance: none;
440
+ appearance: none;
429
441
  transition: border-color 150ms ease, box-shadow 150ms ease;
430
442
  }
431
443
 
432
- .slex-input-control[data-has-unit="true"] .slex-input,
433
- .slex-input-control[data-has-controls="true"] .slex-input {
444
+ .slex-input-control[data-has-unit="true"] .slex-input {
434
445
  border-top-right-radius: 0;
435
446
  border-bottom-right-radius: 0;
436
447
  }
@@ -454,79 +465,16 @@
454
465
  transition: border-color 150ms ease, box-shadow 150ms ease;
455
466
  }
456
467
 
457
- .slex-input-control[data-has-controls="true"] .slex-input-unit {
458
- border-radius: 0;
459
- }
460
-
461
- .slex-input-controls {
462
- box-sizing: border-box;
463
- display: inline-grid;
464
- grid-template-rows: repeat(2, minmax(0, 1fr));
465
- align-items: stretch;
466
- flex: 0 0 auto;
467
- width: 1.875rem;
468
- min-width: 1.875rem;
469
- min-height: 2.5625rem;
470
- overflow: hidden;
471
- border: 1px solid var(--input);
472
- border-left: 0;
473
- border-radius: 0 var(--radius) var(--radius) 0;
474
- background: var(--background);
475
- transition: border-color 150ms ease, box-shadow 150ms ease;
476
- }
477
-
478
- .slex-input-step {
479
- box-sizing: border-box;
480
- display: inline-flex;
481
- align-items: center;
482
- justify-content: center;
483
- width: 100%;
484
- min-width: 0;
485
- min-height: 0;
486
- padding: 0;
487
- border: 0;
488
- border-top: 1px solid var(--input);
489
- border-radius: 0;
490
- background: transparent;
491
- color: var(--foreground);
492
- font: inherit;
493
- font-size: 0.75rem;
494
- font-weight: 600;
495
- line-height: 1;
496
- cursor: pointer;
497
- transition: border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
498
- }
499
-
500
- .slex-input-step:first-child {
501
- border-top: 0;
502
- }
503
-
504
- .slex-input-step:last-child {
505
- border-radius: 0;
506
- }
507
-
508
- .slex-input-step:hover:not(:disabled) {
509
- background: color-mix(in oklab, var(--muted) 52%, var(--background));
510
- }
511
-
512
- .slex-input-step:focus-visible {
513
- z-index: 1;
514
- outline: none;
515
- background: color-mix(in oklab, var(--muted) 58%, var(--background));
516
- box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--ring) 34%, transparent);
517
- }
518
-
519
- .slex-input-step:disabled {
520
- opacity: 0.45;
521
- cursor: not-allowed;
522
- }
523
-
524
468
  .slex-input::placeholder {
525
469
  color: var(--muted-foreground);
526
470
  }
527
471
 
528
472
  .slex-input:focus {
529
473
  border-color: var(--ring);
474
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 18%, transparent);
475
+ }
476
+
477
+ .slex-input-control[data-has-unit="true"] .slex-input:focus {
530
478
  box-shadow: none;
531
479
  }
532
480
 
@@ -551,6 +499,10 @@
551
499
 
552
500
  .slex-input-field[data-invalid="true"] .slex-input:focus {
553
501
  border-color: var(--destructive);
502
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
503
+ }
504
+
505
+ .slex-input-field[data-invalid="true"] .slex-input-control[data-has-unit="true"] .slex-input:focus {
554
506
  box-shadow: none;
555
507
  }
556
508
 
@@ -558,13 +510,12 @@
558
510
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
559
511
  }
560
512
 
561
- .slex-input-control:focus-within .slex-input,
562
- .slex-input-control:focus-within .slex-input-unit,
563
- .slex-input-control:focus-within .slex-input-controls {
564
- border-color: var(--ring);
513
+ .slex-input-control:not([data-has-unit]):focus-within {
514
+ box-shadow: none;
565
515
  }
566
516
 
567
- .slex-input-control:focus-within .slex-input-step {
517
+ .slex-input-control:focus-within .slex-input,
518
+ .slex-input-control:focus-within .slex-input-unit {
568
519
  border-color: var(--ring);
569
520
  }
570
521
 
@@ -573,22 +524,16 @@
573
524
  color: color-mix(in oklab, var(--destructive) 84%, var(--muted-foreground));
574
525
  }
575
526
 
576
- .slex-input-field[data-invalid="true"] .slex-input-step {
577
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
578
- }
579
-
580
- .slex-input-field[data-invalid="true"] .slex-input-controls {
581
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
582
- }
583
-
584
527
  .slex-input-field[data-invalid="true"] .slex-input-control:focus-within {
585
528
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
586
529
  }
587
530
 
531
+ .slex-input-field[data-invalid="true"] .slex-input-control:not([data-has-unit]):focus-within {
532
+ box-shadow: none;
533
+ }
534
+
588
535
  .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input,
589
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit,
590
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-controls,
591
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-step {
536
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit {
592
537
  border-color: var(--destructive);
593
538
  }
594
539
 
@@ -602,11 +547,6 @@
602
547
  cursor: not-allowed;
603
548
  }
604
549
 
605
- .slex-input[disabled] ~ .slex-input-controls,
606
- .slex-input[readonly] ~ .slex-input-controls {
607
- opacity: 0.6;
608
- }
609
-
610
550
  .slex-input-description {
611
551
  color: var(--muted-foreground);
612
552
  font-size: 0.75rem;
@@ -734,7 +674,6 @@
734
674
  border: 0;
735
675
  overflow: hidden;
736
676
  clip: rect(0 0 0 0);
737
- clip-path: inset(50%);
738
677
  white-space: nowrap;
739
678
  }
740
679
 
@@ -793,11 +732,6 @@
793
732
  color: var(--accent-foreground);
794
733
  }
795
734
 
796
- .slex-select-menu:has(.slex-select-option:hover) .slex-select-option--active:not(:hover) {
797
- background: transparent;
798
- color: var(--popover-foreground, var(--foreground));
799
- }
800
-
801
735
  .slex-select-option--selected {
802
736
  font-weight: 500;
803
737
  }
@@ -1236,8 +1170,8 @@
1236
1170
  transform: none;
1237
1171
  }
1238
1172
 
1239
- .slex-checkbox-field:has(.slex-checkbox:disabled),
1240
- .slex-radio-field:has(.slex-radio:disabled) {
1173
+ .slex-checkbox-field[data-disabled="true"],
1174
+ .slex-radio-field[data-disabled="true"] {
1241
1175
  cursor: not-allowed;
1242
1176
  opacity: 0.65;
1243
1177
  }
@@ -110,7 +110,6 @@
110
110
  border: 0;
111
111
  overflow: hidden;
112
112
  clip: rect(0 0 0 0);
113
- clip-path: inset(50%);
114
113
  white-space: nowrap;
115
114
  }
116
115
 
@@ -169,11 +168,6 @@
169
168
  color: var(--accent-foreground);
170
169
  }
171
170
 
172
- .slex-select-menu:has(.slex-select-option:hover) .slex-select-option--active:not(:hover) {
173
- background: transparent;
174
- color: var(--popover-foreground, var(--foreground));
175
- }
176
-
177
171
  .slex-select-option--selected {
178
172
  font-weight: 500;
179
173
  }
@@ -33,53 +33,62 @@
33
33
  .slex-slider {
34
34
  box-sizing: border-box;
35
35
  width: 100%;
36
- height: 0.5rem;
36
+ height: 1rem;
37
+ padding: 0;
38
+ border: 0;
37
39
  border-radius: 999px;
38
40
  -webkit-appearance: none;
39
41
  appearance: none;
40
- background: linear-gradient(
41
- to right,
42
- var(--primary) 0%,
43
- var(--primary) var(--slex-slider-progress, 0%),
44
- var(--secondary) var(--slex-slider-progress, 0%),
45
- var(--secondary) 100%
46
- );
42
+ background: transparent;
47
43
  accent-color: var(--primary);
48
44
  cursor: pointer;
45
+ overflow: visible;
49
46
  transition: box-shadow 150ms ease, filter 150ms ease;
50
47
  }
51
48
 
52
- .slex-slider:hover {
53
- box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 8%, transparent);
54
- }
55
-
56
- .slex-slider:active {
57
- box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
58
- }
59
-
60
49
  .slex-slider:focus-visible {
61
50
  outline: 2px solid var(--ring);
62
51
  outline-offset: 4px;
63
52
  }
64
53
 
65
54
  .slex-slider::-webkit-slider-thumb {
55
+ box-sizing: border-box;
66
56
  width: 1rem;
67
57
  height: 1rem;
58
+ margin-top: -0.25rem;
68
59
  border: 2px solid var(--primary);
69
60
  border-radius: 999px;
70
- background: var(--background) !important;
61
+ background-color: var(--background);
62
+ background-clip: padding-box;
71
63
  box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
72
64
  -webkit-appearance: none;
73
65
  appearance: none;
74
66
  transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
75
67
  }
76
68
 
69
+ .slex-slider::-webkit-slider-runnable-track {
70
+ box-sizing: border-box;
71
+ width: 100%;
72
+ height: 0.5rem;
73
+ border: 0;
74
+ border-radius: 999px;
75
+ background: linear-gradient(
76
+ to right,
77
+ var(--primary) 0%,
78
+ var(--primary) var(--slex-slider-progress, 0%),
79
+ var(--secondary) var(--slex-slider-progress, 0%),
80
+ var(--secondary) 100%
81
+ );
82
+ }
83
+
77
84
  .slex-slider::-moz-range-thumb {
85
+ box-sizing: border-box;
78
86
  width: 1rem;
79
87
  height: 1rem;
80
88
  border: 2px solid var(--primary);
81
89
  border-radius: 999px;
82
- background: var(--background) !important;
90
+ background-color: var(--background);
91
+ background-clip: padding-box;
83
92
  box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
84
93
  transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
85
94
  }
@@ -104,11 +104,11 @@
104
104
  opacity: 0.55;
105
105
  }
106
106
 
107
- .slex-switch:has(.slex-switch-input:disabled) {
107
+ .slex-switch[data-disabled="true"] {
108
108
  cursor: not-allowed;
109
109
  }
110
110
 
111
- .slex-switch:has(.slex-switch-input:disabled):hover .slex-switch-control,
112
- .slex-switch:has(.slex-switch-input:disabled):hover .slex-switch-control::after {
111
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control,
112
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control::after {
113
113
  box-shadow: none;
114
114
  }
@@ -45,16 +45,18 @@
45
45
  border: 1px solid var(--input);
46
46
  border-radius: var(--radius);
47
47
  background: var(--background);
48
+ background-clip: padding-box;
48
49
  color: var(--foreground);
49
50
  font-family: inherit;
50
51
  font-size: 0.875rem;
51
52
  line-height: 1.5;
52
53
  outline: none;
54
+ -webkit-appearance: none;
55
+ appearance: none;
53
56
  transition: border-color 150ms ease, box-shadow 150ms ease;
54
57
  }
55
58
 
56
- .slex-input-control[data-has-unit="true"] .slex-input,
57
- .slex-input-control[data-has-controls="true"] .slex-input {
59
+ .slex-input-control[data-has-unit="true"] .slex-input {
58
60
  border-top-right-radius: 0;
59
61
  border-bottom-right-radius: 0;
60
62
  }
@@ -78,79 +80,16 @@
78
80
  transition: border-color 150ms ease, box-shadow 150ms ease;
79
81
  }
80
82
 
81
- .slex-input-control[data-has-controls="true"] .slex-input-unit {
82
- border-radius: 0;
83
- }
84
-
85
- .slex-input-controls {
86
- box-sizing: border-box;
87
- display: inline-grid;
88
- grid-template-rows: repeat(2, minmax(0, 1fr));
89
- align-items: stretch;
90
- flex: 0 0 auto;
91
- width: 1.875rem;
92
- min-width: 1.875rem;
93
- min-height: 2.5625rem;
94
- overflow: hidden;
95
- border: 1px solid var(--input);
96
- border-left: 0;
97
- border-radius: 0 var(--radius) var(--radius) 0;
98
- background: var(--background);
99
- transition: border-color 150ms ease, box-shadow 150ms ease;
100
- }
101
-
102
- .slex-input-step {
103
- box-sizing: border-box;
104
- display: inline-flex;
105
- align-items: center;
106
- justify-content: center;
107
- width: 100%;
108
- min-width: 0;
109
- min-height: 0;
110
- padding: 0;
111
- border: 0;
112
- border-top: 1px solid var(--input);
113
- border-radius: 0;
114
- background: transparent;
115
- color: var(--foreground);
116
- font: inherit;
117
- font-size: 0.75rem;
118
- font-weight: 600;
119
- line-height: 1;
120
- cursor: pointer;
121
- transition: border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
122
- }
123
-
124
- .slex-input-step:first-child {
125
- border-top: 0;
126
- }
127
-
128
- .slex-input-step:last-child {
129
- border-radius: 0;
130
- }
131
-
132
- .slex-input-step:hover:not(:disabled) {
133
- background: color-mix(in oklab, var(--muted) 52%, var(--background));
134
- }
135
-
136
- .slex-input-step:focus-visible {
137
- z-index: 1;
138
- outline: none;
139
- background: color-mix(in oklab, var(--muted) 58%, var(--background));
140
- box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--ring) 34%, transparent);
141
- }
142
-
143
- .slex-input-step:disabled {
144
- opacity: 0.45;
145
- cursor: not-allowed;
146
- }
147
-
148
83
  .slex-input::placeholder {
149
84
  color: var(--muted-foreground);
150
85
  }
151
86
 
152
87
  .slex-input:focus {
153
88
  border-color: var(--ring);
89
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 18%, transparent);
90
+ }
91
+
92
+ .slex-input-control[data-has-unit="true"] .slex-input:focus {
154
93
  box-shadow: none;
155
94
  }
156
95
 
@@ -175,6 +114,10 @@
175
114
 
176
115
  .slex-input-field[data-invalid="true"] .slex-input:focus {
177
116
  border-color: var(--destructive);
117
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
118
+ }
119
+
120
+ .slex-input-field[data-invalid="true"] .slex-input-control[data-has-unit="true"] .slex-input:focus {
178
121
  box-shadow: none;
179
122
  }
180
123
 
@@ -182,13 +125,12 @@
182
125
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
183
126
  }
184
127
 
185
- .slex-input-control:focus-within .slex-input,
186
- .slex-input-control:focus-within .slex-input-unit,
187
- .slex-input-control:focus-within .slex-input-controls {
188
- border-color: var(--ring);
128
+ .slex-input-control:not([data-has-unit]):focus-within {
129
+ box-shadow: none;
189
130
  }
190
131
 
191
- .slex-input-control:focus-within .slex-input-step {
132
+ .slex-input-control:focus-within .slex-input,
133
+ .slex-input-control:focus-within .slex-input-unit {
192
134
  border-color: var(--ring);
193
135
  }
194
136
 
@@ -197,22 +139,16 @@
197
139
  color: color-mix(in oklab, var(--destructive) 84%, var(--muted-foreground));
198
140
  }
199
141
 
200
- .slex-input-field[data-invalid="true"] .slex-input-step {
201
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
202
- }
203
-
204
- .slex-input-field[data-invalid="true"] .slex-input-controls {
205
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
206
- }
207
-
208
142
  .slex-input-field[data-invalid="true"] .slex-input-control:focus-within {
209
143
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
210
144
  }
211
145
 
146
+ .slex-input-field[data-invalid="true"] .slex-input-control:not([data-has-unit]):focus-within {
147
+ box-shadow: none;
148
+ }
149
+
212
150
  .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input,
213
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit,
214
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-controls,
215
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-step {
151
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit {
216
152
  border-color: var(--destructive);
217
153
  }
218
154
 
@@ -226,11 +162,6 @@
226
162
  cursor: not-allowed;
227
163
  }
228
164
 
229
- .slex-input[disabled] ~ .slex-input-controls,
230
- .slex-input[readonly] ~ .slex-input-controls {
231
- opacity: 0.6;
232
- }
233
-
234
165
  .slex-input-description {
235
166
  color: var(--muted-foreground);
236
167
  font-size: 0.75rem;
@@ -572,7 +572,6 @@
572
572
  overflow: hidden;
573
573
  clip: rect(0 0 0 0);
574
574
  white-space: nowrap;
575
- clip-path: inset(50%);
576
575
  }
577
576
 
578
577
  .slex-playground-error {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@slexkit/theme-shadcn",
3
- "version": "0.3.0",
3
+ "version": "0.3.2",
4
4
  "description": "Official shadcn-token theme CSS for SlexKit.",
5
5
  "author": "SlexKit contributors",
6
6
  "type": "module",
package/style.css CHANGED
@@ -904,52 +904,6 @@ color-scheme: dark;
904
904
  box-sizing: border-box;
905
905
  }
906
906
 
907
- body[data-mobile-nav-open] {
908
- overflow: hidden;
909
- overscroll-behavior: contain;
910
- }
911
-
912
- #mobileNav {
913
- --mobile-nav-backdrop-opacity: 0;
914
- --mobile-nav-panel-translate: -100%;
915
- pointer-events: none;
916
- }
917
-
918
- #mobileNav[data-open="true"] {
919
- --mobile-nav-backdrop-opacity: 1;
920
- --mobile-nav-panel-translate: 0px;
921
- pointer-events: auto;
922
- }
923
-
924
- #mobileNav [data-mobile-nav-backdrop] {
925
- opacity: var(--mobile-nav-backdrop-opacity);
926
- touch-action: pan-y;
927
- transition: opacity 180ms ease;
928
- }
929
-
930
- #mobileNav [data-mobile-nav-panel] {
931
- transform: translateX(var(--mobile-nav-panel-translate));
932
- touch-action: pan-y;
933
- transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
934
- will-change: transform;
935
- }
936
-
937
- #mobileNav[data-dragging="true"] [data-mobile-nav-backdrop],
938
- #mobileNav[data-dragging="true"] [data-mobile-nav-panel] {
939
- transition: none;
940
- }
941
-
942
- @media (prefers-reduced-motion: reduce) {
943
- #mobileNav [data-mobile-nav-backdrop],
944
- #mobileNav [data-mobile-nav-panel] {
945
- transition: none;
946
- }
947
- }
948
-
949
- .slexkit-for-wrapper {
950
- display: contents;
951
- }
952
-
953
907
  .slexkit-source-toolbar {
954
908
  display: flex;
955
909
  align-items: center;
@@ -1846,7 +1800,6 @@ body[data-mobile-nav-open] {
1846
1800
  overflow: hidden;
1847
1801
  clip: rect(0 0 0 0);
1848
1802
  white-space: nowrap;
1849
- clip-path: inset(50%);
1850
1803
  }
1851
1804
 
1852
1805
  .slex-playground-error {
@@ -2365,7 +2318,7 @@ body[data-mobile-nav-open] {
2365
2318
  display: block;
2366
2319
  }
2367
2320
 
2368
- .slex-stat-character[data-stat-change] {
2321
+ .slex-stat-character[data-stat-kind="digit"][data-stat-change] {
2369
2322
  overflow: hidden;
2370
2323
  }
2371
2324
 
@@ -3210,53 +3163,62 @@ body[data-mobile-nav-open] {
3210
3163
  .slex-slider {
3211
3164
  box-sizing: border-box;
3212
3165
  width: 100%;
3213
- height: 0.5rem;
3166
+ height: 1rem;
3167
+ padding: 0;
3168
+ border: 0;
3214
3169
  border-radius: 999px;
3215
3170
  -webkit-appearance: none;
3216
3171
  appearance: none;
3217
- background: linear-gradient(
3218
- to right,
3219
- var(--primary) 0%,
3220
- var(--primary) var(--slex-slider-progress, 0%),
3221
- var(--secondary) var(--slex-slider-progress, 0%),
3222
- var(--secondary) 100%
3223
- );
3172
+ background: transparent;
3224
3173
  accent-color: var(--primary);
3225
3174
  cursor: pointer;
3175
+ overflow: visible;
3226
3176
  transition: box-shadow 150ms ease, filter 150ms ease;
3227
3177
  }
3228
3178
 
3229
- .slex-slider:hover {
3230
- box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 8%, transparent);
3231
- }
3232
-
3233
- .slex-slider:active {
3234
- box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
3235
- }
3236
-
3237
3179
  .slex-slider:focus-visible {
3238
3180
  outline: 2px solid var(--ring);
3239
3181
  outline-offset: 4px;
3240
3182
  }
3241
3183
 
3242
3184
  .slex-slider::-webkit-slider-thumb {
3185
+ box-sizing: border-box;
3243
3186
  width: 1rem;
3244
3187
  height: 1rem;
3188
+ margin-top: -0.25rem;
3245
3189
  border: 2px solid var(--primary);
3246
3190
  border-radius: 999px;
3247
- background: var(--background) !important;
3191
+ background-color: var(--background);
3192
+ background-clip: padding-box;
3248
3193
  box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
3249
3194
  -webkit-appearance: none;
3250
3195
  appearance: none;
3251
3196
  transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
3252
3197
  }
3253
3198
 
3199
+ .slex-slider::-webkit-slider-runnable-track {
3200
+ box-sizing: border-box;
3201
+ width: 100%;
3202
+ height: 0.5rem;
3203
+ border: 0;
3204
+ border-radius: 999px;
3205
+ background: linear-gradient(
3206
+ to right,
3207
+ var(--primary) 0%,
3208
+ var(--primary) var(--slex-slider-progress, 0%),
3209
+ var(--secondary) var(--slex-slider-progress, 0%),
3210
+ var(--secondary) 100%
3211
+ );
3212
+ }
3213
+
3254
3214
  .slex-slider::-moz-range-thumb {
3215
+ box-sizing: border-box;
3255
3216
  width: 1rem;
3256
3217
  height: 1rem;
3257
3218
  border: 2px solid var(--primary);
3258
3219
  border-radius: 999px;
3259
- background: var(--background) !important;
3220
+ background-color: var(--background);
3221
+ background-clip: padding-box;
3260
3222
  box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
3261
3223
  transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
3262
3224
  }
@@ -3409,12 +3371,12 @@ body[data-mobile-nav-open] {
3409
3371
  opacity: 0.55;
3410
3372
  }
3411
3373
 
3412
- .slex-switch:has(.slex-switch-input:disabled) {
3374
+ .slex-switch[data-disabled="true"] {
3413
3375
  cursor: not-allowed;
3414
3376
  }
3415
3377
 
3416
- .slex-switch:has(.slex-switch-input:disabled):hover .slex-switch-control,
3417
- .slex-switch:has(.slex-switch-input:disabled):hover .slex-switch-control::after {
3378
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control,
3379
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control::after {
3418
3380
  box-shadow: none;
3419
3381
  }
3420
3382
 
@@ -3467,16 +3429,18 @@ body[data-mobile-nav-open] {
3467
3429
  border: 1px solid var(--input);
3468
3430
  border-radius: var(--radius);
3469
3431
  background: var(--background);
3432
+ background-clip: padding-box;
3470
3433
  color: var(--foreground);
3471
3434
  font-family: inherit;
3472
3435
  font-size: 0.875rem;
3473
3436
  line-height: 1.5;
3474
3437
  outline: none;
3438
+ -webkit-appearance: none;
3439
+ appearance: none;
3475
3440
  transition: border-color 150ms ease, box-shadow 150ms ease;
3476
3441
  }
3477
3442
 
3478
- .slex-input-control[data-has-unit="true"] .slex-input,
3479
- .slex-input-control[data-has-controls="true"] .slex-input {
3443
+ .slex-input-control[data-has-unit="true"] .slex-input {
3480
3444
  border-top-right-radius: 0;
3481
3445
  border-bottom-right-radius: 0;
3482
3446
  }
@@ -3500,79 +3464,16 @@ body[data-mobile-nav-open] {
3500
3464
  transition: border-color 150ms ease, box-shadow 150ms ease;
3501
3465
  }
3502
3466
 
3503
- .slex-input-control[data-has-controls="true"] .slex-input-unit {
3504
- border-radius: 0;
3505
- }
3506
-
3507
- .slex-input-controls {
3508
- box-sizing: border-box;
3509
- display: inline-grid;
3510
- grid-template-rows: repeat(2, minmax(0, 1fr));
3511
- align-items: stretch;
3512
- flex: 0 0 auto;
3513
- width: 1.875rem;
3514
- min-width: 1.875rem;
3515
- min-height: 2.5625rem;
3516
- overflow: hidden;
3517
- border: 1px solid var(--input);
3518
- border-left: 0;
3519
- border-radius: 0 var(--radius) var(--radius) 0;
3520
- background: var(--background);
3521
- transition: border-color 150ms ease, box-shadow 150ms ease;
3522
- }
3523
-
3524
- .slex-input-step {
3525
- box-sizing: border-box;
3526
- display: inline-flex;
3527
- align-items: center;
3528
- justify-content: center;
3529
- width: 100%;
3530
- min-width: 0;
3531
- min-height: 0;
3532
- padding: 0;
3533
- border: 0;
3534
- border-top: 1px solid var(--input);
3535
- border-radius: 0;
3536
- background: transparent;
3537
- color: var(--foreground);
3538
- font: inherit;
3539
- font-size: 0.75rem;
3540
- font-weight: 600;
3541
- line-height: 1;
3542
- cursor: pointer;
3543
- transition: border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
3544
- }
3545
-
3546
- .slex-input-step:first-child {
3547
- border-top: 0;
3548
- }
3549
-
3550
- .slex-input-step:last-child {
3551
- border-radius: 0;
3552
- }
3553
-
3554
- .slex-input-step:hover:not(:disabled) {
3555
- background: color-mix(in oklab, var(--muted) 52%, var(--background));
3556
- }
3557
-
3558
- .slex-input-step:focus-visible {
3559
- z-index: 1;
3560
- outline: none;
3561
- background: color-mix(in oklab, var(--muted) 58%, var(--background));
3562
- box-shadow: inset 0 0 0 1px color-mix(in oklab, var(--ring) 34%, transparent);
3563
- }
3564
-
3565
- .slex-input-step:disabled {
3566
- opacity: 0.45;
3567
- cursor: not-allowed;
3568
- }
3569
-
3570
3467
  .slex-input::placeholder {
3571
3468
  color: var(--muted-foreground);
3572
3469
  }
3573
3470
 
3574
3471
  .slex-input:focus {
3575
3472
  border-color: var(--ring);
3473
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 18%, transparent);
3474
+ }
3475
+
3476
+ .slex-input-control[data-has-unit="true"] .slex-input:focus {
3576
3477
  box-shadow: none;
3577
3478
  }
3578
3479
 
@@ -3597,6 +3498,10 @@ body[data-mobile-nav-open] {
3597
3498
 
3598
3499
  .slex-input-field[data-invalid="true"] .slex-input:focus {
3599
3500
  border-color: var(--destructive);
3501
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
3502
+ }
3503
+
3504
+ .slex-input-field[data-invalid="true"] .slex-input-control[data-has-unit="true"] .slex-input:focus {
3600
3505
  box-shadow: none;
3601
3506
  }
3602
3507
 
@@ -3604,13 +3509,12 @@ body[data-mobile-nav-open] {
3604
3509
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
3605
3510
  }
3606
3511
 
3607
- .slex-input-control:focus-within .slex-input,
3608
- .slex-input-control:focus-within .slex-input-unit,
3609
- .slex-input-control:focus-within .slex-input-controls {
3610
- border-color: var(--ring);
3512
+ .slex-input-control:not([data-has-unit]):focus-within {
3513
+ box-shadow: none;
3611
3514
  }
3612
3515
 
3613
- .slex-input-control:focus-within .slex-input-step {
3516
+ .slex-input-control:focus-within .slex-input,
3517
+ .slex-input-control:focus-within .slex-input-unit {
3614
3518
  border-color: var(--ring);
3615
3519
  }
3616
3520
 
@@ -3619,22 +3523,16 @@ body[data-mobile-nav-open] {
3619
3523
  color: color-mix(in oklab, var(--destructive) 84%, var(--muted-foreground));
3620
3524
  }
3621
3525
 
3622
- .slex-input-field[data-invalid="true"] .slex-input-step {
3623
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
3624
- }
3625
-
3626
- .slex-input-field[data-invalid="true"] .slex-input-controls {
3627
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
3628
- }
3629
-
3630
3526
  .slex-input-field[data-invalid="true"] .slex-input-control:focus-within {
3631
3527
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
3632
3528
  }
3633
3529
 
3530
+ .slex-input-field[data-invalid="true"] .slex-input-control:not([data-has-unit]):focus-within {
3531
+ box-shadow: none;
3532
+ }
3533
+
3634
3534
  .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input,
3635
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit,
3636
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-controls,
3637
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-step {
3535
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit {
3638
3536
  border-color: var(--destructive);
3639
3537
  }
3640
3538
 
@@ -3648,11 +3546,6 @@ body[data-mobile-nav-open] {
3648
3546
  cursor: not-allowed;
3649
3547
  }
3650
3548
 
3651
- .slex-input[disabled] ~ .slex-input-controls,
3652
- .slex-input[readonly] ~ .slex-input-controls {
3653
- opacity: 0.6;
3654
- }
3655
-
3656
3549
  .slex-input-description {
3657
3550
  color: var(--muted-foreground);
3658
3551
  font-size: 0.75rem;
@@ -3780,7 +3673,6 @@ body[data-mobile-nav-open] {
3780
3673
  border: 0;
3781
3674
  overflow: hidden;
3782
3675
  clip: rect(0 0 0 0);
3783
- clip-path: inset(50%);
3784
3676
  white-space: nowrap;
3785
3677
  }
3786
3678
 
@@ -3839,11 +3731,6 @@ body[data-mobile-nav-open] {
3839
3731
  color: var(--accent-foreground);
3840
3732
  }
3841
3733
 
3842
- .slex-select-menu:has(.slex-select-option:hover) .slex-select-option--active:not(:hover) {
3843
- background: transparent;
3844
- color: var(--popover-foreground, var(--foreground));
3845
- }
3846
-
3847
3734
  .slex-select-option--selected {
3848
3735
  font-weight: 500;
3849
3736
  }
@@ -4282,8 +4169,8 @@ body[data-mobile-nav-open] {
4282
4169
  transform: none;
4283
4170
  }
4284
4171
 
4285
- .slex-checkbox-field:has(.slex-checkbox:disabled),
4286
- .slex-radio-field:has(.slex-radio:disabled) {
4172
+ .slex-checkbox-field[data-disabled="true"],
4173
+ .slex-radio-field[data-disabled="true"] {
4287
4174
  cursor: not-allowed;
4288
4175
  opacity: 0.65;
4289
4176
  }