slexkit 0.2.0 → 0.3.1

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 (104) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/LICENSE +21 -21
  3. package/README.md +4 -3
  4. package/README.zh-CN.md +4 -3
  5. package/dist/ai/llms-authoring.txt +2 -0
  6. package/dist/ai/llms-capabilities.txt +126 -0
  7. package/dist/ai/llms-components.txt +29 -7
  8. package/dist/ai/llms-full.txt +1909 -153
  9. package/dist/ai/llms-runtime.txt +18 -13
  10. package/dist/ai/llms.txt +22 -1
  11. package/dist/ai/slexkit-ai-manifest.json +717 -62
  12. package/dist/base.css +359 -359
  13. package/dist/chunks/{accordion-cfjyxw93.js → button-53ccjq5p.js} +11 -11
  14. package/dist/chunks/{accordion-nw12ytps.js → button-cr1fhsa7.js} +48 -2
  15. package/dist/chunks/{accordion-5f0nvjjm.js → button-dsftwzvg.js} +4 -3
  16. package/dist/chunks/{accordion-hzyrngd6.js → button-faf563xf.js} +2 -2
  17. package/dist/chunks/{accordion-ehnhpeca.js → button-jxv4c65t.js} +2 -2
  18. package/dist/chunks/{accordion-cw5r75jm.js → button-xv2dz7vn.js} +1 -1
  19. package/dist/chunks/{accordion-830dw78f.js → button-z5yv24ks.js} +2 -2
  20. package/dist/components/accordion.js +2 -2
  21. package/dist/components/badge.js +2 -2
  22. package/dist/components/button.css +101 -101
  23. package/dist/components/button.js +3 -3
  24. package/dist/components/callout.js +4 -4
  25. package/dist/components/card.js +2 -2
  26. package/dist/components/checkbox.js +3 -2
  27. package/dist/components/choice.css +151 -151
  28. package/dist/components/code-block.js +2 -2
  29. package/dist/components/collapsible.js +2 -2
  30. package/dist/components/column.js +1 -1
  31. package/dist/components/content.css +273 -250
  32. package/dist/components/display.css +1 -1
  33. package/dist/components/divider.js +2 -2
  34. package/dist/components/grid.js +1 -1
  35. package/dist/components/index.js +13994 -172
  36. package/dist/components/input.css +786 -852
  37. package/dist/components/input.js +34 -144
  38. package/dist/components/link.js +2 -2
  39. package/dist/components/progress.js +2 -2
  40. package/dist/components/radio-group.js +3 -2
  41. package/dist/components/row.js +1 -1
  42. package/dist/components/section.js +2 -2
  43. package/dist/components/select.css +175 -181
  44. package/dist/components/select.js +3 -3
  45. package/dist/components/slider.css +125 -116
  46. package/dist/components/slider.js +2 -2
  47. package/dist/components/specs.js +34 -1
  48. package/dist/components/stat.js +2 -2
  49. package/dist/components/submit.css +8 -8
  50. package/dist/components/submit.js +1 -1
  51. package/dist/components/switch.css +105 -105
  52. package/dist/components/switch.js +4 -3
  53. package/dist/components/table.js +4 -4
  54. package/dist/components/tabs.css +95 -95
  55. package/dist/components/tabs.js +4 -4
  56. package/dist/components/text-input.css +26 -95
  57. package/dist/components/text.js +13 -1
  58. package/dist/components/toast.js +4 -4
  59. package/dist/components/tooling.css +0 -1
  60. package/dist/components/tooling.js +73 -8
  61. package/dist/runtime.cjs +1610 -17
  62. package/dist/runtime.js +1609 -16
  63. package/dist/slexkit.cjs +28191 -13865
  64. package/dist/slexkit.css +1525 -1569
  65. package/dist/slexkit.js +28190 -13864
  66. package/dist/tooling.js +117 -11
  67. package/dist/types/components/svelte/helpers.d.ts +8 -1
  68. package/dist/types/engine/capabilities.d.ts +54 -0
  69. package/dist/types/engine/index.d.ts +6 -0
  70. package/dist/types/engine/secure-runtime.d.ts +9 -1
  71. package/dist/types/engine/stdlib.d.ts +30 -0
  72. package/dist/types/engine/types.d.ts +1 -0
  73. package/dist/types/engine/validation.d.ts +28 -0
  74. package/dist/types/index.d.ts +6 -3
  75. package/dist/types/runtime.d.ts +6 -3
  76. package/dist/types/version.d.ts +2 -2
  77. package/dist/umd/slexkit.tooling.umd.js +45084 -44775
  78. package/dist/umd/slexkit.umd.js +28191 -13865
  79. package/package.json +5 -3
  80. package/skills/slexkit-host-integration/SKILL.md +1 -1
  81. package/src/components/svelte/content/Formula.svelte +27 -0
  82. package/src/components/svelte/content/Table.svelte +1 -1
  83. package/src/components/svelte/display/Text.svelte +14 -1
  84. package/src/components/svelte/helpers.ts +56 -1
  85. package/src/components/svelte/input/Checkbox.svelte +1 -1
  86. package/src/components/svelte/input/Input.svelte +0 -110
  87. package/src/components/svelte/input/RadioGroup.svelte +1 -1
  88. package/src/components/svelte/input/Select.svelte +2 -2
  89. package/src/components/svelte/input/Switch.svelte +2 -2
  90. package/src/components/svelte/input/Tabs.svelte +7 -7
  91. package/src/components/svelte/tooling/PlaygroundMarkdown.svelte +84 -2
  92. package/src/styles/components/button.css +101 -101
  93. package/src/styles/components/choice.css +152 -152
  94. package/src/styles/components/select.css +175 -181
  95. package/src/styles/components/slider.css +125 -116
  96. package/src/styles/components/submit.css +8 -8
  97. package/src/styles/components/switch.css +105 -105
  98. package/src/styles/components/tabs.css +95 -95
  99. package/src/styles/components/text-input.css +26 -95
  100. package/src/styles/content.css +274 -251
  101. package/src/styles/display.css +1 -1
  102. package/src/styles/input.css +8 -8
  103. package/src/styles/layout.css +360 -360
  104. package/src/styles/tooling.css +0 -1
@@ -1,106 +1,106 @@
1
1
  /* components/button.css */
2
2
 
3
- .slex-button {
4
- display: inline-flex;
5
- align-items: center;
6
- justify-content: center;
7
- gap: 0.5rem;
8
- max-width: 100%;
9
- min-width: 0;
10
- padding: 0.5rem 1rem;
11
- border: 1px solid transparent;
12
- border-radius: var(--radius);
13
- font-family: inherit;
14
- font-size: 0.875rem;
15
- font-weight: 500;
16
- line-height: 1.25;
17
- white-space: nowrap;
18
- text-overflow: ellipsis;
19
- overflow: hidden;
20
- cursor: pointer;
21
- user-select: none;
22
- transition:
23
- background 150ms ease,
24
- border-color 150ms ease,
25
- color 150ms ease,
26
- box-shadow 150ms ease,
27
- transform 150ms ease;
28
- }
29
-
30
- .slex-button--primary {
31
- background: var(--primary);
32
- color: var(--primary-foreground);
33
- border-color: var(--primary);
34
- }
35
-
36
- .slex-button--primary:hover:not(:disabled):not(.slex-button--disabled) {
37
- background: color-mix(in oklab, var(--primary) 90%, transparent);
38
- border-color: color-mix(in oklab, var(--primary) 90%, transparent);
39
- color: var(--primary-foreground);
40
- transform: translateY(-1px);
41
- box-shadow: var(--shadow-md);
42
- }
43
-
44
- .slex-button--secondary {
45
- background: var(--secondary);
46
- color: var(--secondary-foreground);
47
- border-color: var(--border);
48
- }
49
-
50
- .slex-button--secondary:hover:not(:disabled):not(.slex-button--disabled) {
51
- background: var(--accent);
52
- color: var(--accent-foreground);
53
- border-color: var(--border);
54
- }
55
-
56
- .slex-button--danger {
57
- background: var(--destructive);
58
- color: var(--destructive-foreground);
59
- border-color: var(--destructive);
60
- }
61
-
62
- .slex-button--danger:hover:not(:disabled):not(.slex-button--disabled) {
63
- background: color-mix(in oklab, var(--destructive) 90%, transparent);
64
- border-color: color-mix(in oklab, var(--destructive) 90%, transparent);
65
- }
66
-
67
- .slex-button--ghost {
68
- background: transparent;
69
- color: var(--muted-foreground);
70
- border-color: transparent;
71
- }
72
-
73
- .slex-button--ghost:hover:not(:disabled):not(.slex-button--disabled) {
74
- background: var(--accent);
75
- color: var(--accent-foreground);
76
- }
77
-
78
- .slex-button:disabled,
79
- .slex-button[disabled],
80
- .slex-button--disabled {
81
- opacity: 0.5;
82
- cursor: not-allowed;
83
- pointer-events: none;
84
- transform: none;
85
- box-shadow: none;
86
- }
87
-
88
- .slex-button:active:not(:disabled):not(.slex-button--disabled) {
89
- transform: translateY(0);
90
- box-shadow: var(--shadow-sm);
91
- }
92
-
93
- .slex-button:focus-visible {
94
- outline: 2px solid var(--ring);
95
- outline-offset: 2px;
96
- }
97
-
98
- .slex-button--icon {
99
- width: var(--slex-control-height, 2.25rem);
100
- min-height: var(--slex-control-height, 2.25rem);
101
- padding-inline: 0;
102
- }
103
-
3
+ .slex-button {
4
+ display: inline-flex;
5
+ align-items: center;
6
+ justify-content: center;
7
+ gap: 0.5rem;
8
+ max-width: 100%;
9
+ min-width: 0;
10
+ padding: 0.5rem 1rem;
11
+ border: 1px solid transparent;
12
+ border-radius: var(--radius);
13
+ font-family: inherit;
14
+ font-size: 0.875rem;
15
+ font-weight: 500;
16
+ line-height: 1.25;
17
+ white-space: nowrap;
18
+ text-overflow: ellipsis;
19
+ overflow: hidden;
20
+ cursor: pointer;
21
+ user-select: none;
22
+ transition:
23
+ background 150ms ease,
24
+ border-color 150ms ease,
25
+ color 150ms ease,
26
+ box-shadow 150ms ease,
27
+ transform 150ms ease;
28
+ }
29
+
30
+ .slex-button--primary {
31
+ background: var(--primary);
32
+ color: var(--primary-foreground);
33
+ border-color: var(--primary);
34
+ }
35
+
36
+ .slex-button--primary:hover:not(:disabled):not(.slex-button--disabled) {
37
+ background: color-mix(in oklab, var(--primary) 90%, transparent);
38
+ border-color: color-mix(in oklab, var(--primary) 90%, transparent);
39
+ color: var(--primary-foreground);
40
+ transform: translateY(-1px);
41
+ box-shadow: var(--shadow-md);
42
+ }
43
+
44
+ .slex-button--secondary {
45
+ background: var(--secondary);
46
+ color: var(--secondary-foreground);
47
+ border-color: var(--border);
48
+ }
49
+
50
+ .slex-button--secondary:hover:not(:disabled):not(.slex-button--disabled) {
51
+ background: var(--accent);
52
+ color: var(--accent-foreground);
53
+ border-color: var(--border);
54
+ }
55
+
56
+ .slex-button--danger {
57
+ background: var(--destructive);
58
+ color: var(--destructive-foreground);
59
+ border-color: var(--destructive);
60
+ }
61
+
62
+ .slex-button--danger:hover:not(:disabled):not(.slex-button--disabled) {
63
+ background: color-mix(in oklab, var(--destructive) 90%, transparent);
64
+ border-color: color-mix(in oklab, var(--destructive) 90%, transparent);
65
+ }
66
+
67
+ .slex-button--ghost {
68
+ background: transparent;
69
+ color: var(--muted-foreground);
70
+ border-color: transparent;
71
+ }
72
+
73
+ .slex-button--ghost:hover:not(:disabled):not(.slex-button--disabled) {
74
+ background: var(--accent);
75
+ color: var(--accent-foreground);
76
+ }
77
+
78
+ .slex-button:disabled,
79
+ .slex-button[disabled],
80
+ .slex-button--disabled {
81
+ opacity: 0.5;
82
+ cursor: not-allowed;
83
+ pointer-events: none;
84
+ transform: none;
85
+ box-shadow: none;
86
+ }
87
+
88
+ .slex-button:active:not(:disabled):not(.slex-button--disabled) {
89
+ transform: translateY(0);
90
+ box-shadow: var(--shadow-sm);
91
+ }
92
+
93
+ .slex-button:focus-visible {
94
+ outline: 2px solid var(--ring);
95
+ outline-offset: 2px;
96
+ }
97
+
98
+ .slex-button--icon {
99
+ width: var(--slex-control-height, 2.25rem);
100
+ min-height: var(--slex-control-height, 2.25rem);
101
+ padding-inline: 0;
102
+ }
103
+
104
104
  .slex-button-icon {
105
105
  display: inline-flex;
106
106
  width: 1.125rem;
@@ -117,135 +117,144 @@
117
117
 
118
118
  /* components/submit.css */
119
119
 
120
- .slex-submit-bar {
121
- display: flex;
122
- align-items: center;
123
- justify-content: flex-end;
124
- gap: 0.75rem;
125
- flex-wrap: wrap;
126
- padding-top: 0.75rem;
127
- border-top: 1px solid var(--border);
120
+ .slex-submit-bar {
121
+ display: flex;
122
+ align-items: center;
123
+ justify-content: flex-end;
124
+ gap: 0.75rem;
125
+ flex-wrap: wrap;
126
+ padding-top: 0.75rem;
127
+ border-top: 1px solid var(--border);
128
128
  }
129
129
 
130
130
  /* components/slider.css */
131
131
 
132
- .slex-slider-container,
133
- .slex-slider-field {
134
- display: flex;
135
- flex-direction: column;
136
- gap: 0.5rem;
137
- width: 100%;
138
- }
139
-
140
- .slex-slider-field {
141
- padding: 0.25rem 0;
142
- }
143
-
132
+ .slex-slider-container,
133
+ .slex-slider-field {
134
+ display: flex;
135
+ flex-direction: column;
136
+ gap: 0.5rem;
137
+ width: 100%;
138
+ }
139
+
140
+ .slex-slider-field {
141
+ padding: 0.25rem 0;
142
+ }
143
+
144
144
  .slex-slider-label {
145
- display: flex;
146
- align-items: center;
147
- justify-content: space-between;
148
- color: var(--muted-foreground);
149
- font-size: 0.875rem;
150
- font-weight: 500;
151
- }
152
-
153
- .slex-slider-value {
154
- padding: 0.125rem 0.5rem;
155
- border: 1px solid var(--border);
156
- border-radius: calc(var(--radius) - 2px);
157
- background: var(--secondary);
158
- color: var(--secondary-foreground);
159
- font-family: var(--font-mono, "Geist Mono", "Noto Sans Mono", "Noto Sans Mono CJK SC", "SFMono-Regular", "Cascadia Code", Consolas, monospace);
160
- font-size: 0.875rem;
161
- font-weight: 600;
162
- }
163
-
164
- .slex-slider {
165
- box-sizing: border-box;
166
- width: 100%;
167
- height: 0.5rem;
168
- border-radius: 999px;
169
- -webkit-appearance: none;
170
- 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
- );
178
- accent-color: var(--primary);
179
- cursor: pointer;
180
- transition: box-shadow 150ms ease, filter 150ms ease;
181
- }
182
-
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
- .slex-slider:focus-visible {
192
- outline: 2px solid var(--ring);
193
- outline-offset: 4px;
194
- }
195
-
196
- .slex-slider::-webkit-slider-thumb {
197
- width: 1rem;
198
- height: 1rem;
199
- border: 2px solid var(--primary);
200
- border-radius: 999px;
201
- background: var(--background) !important;
202
- box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
203
- -webkit-appearance: none;
204
- appearance: none;
205
- transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
206
- }
207
-
208
- .slex-slider::-moz-range-thumb {
209
- width: 1rem;
210
- height: 1rem;
211
- border: 2px solid var(--primary);
212
- border-radius: 999px;
213
- background: var(--background) !important;
214
- box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
215
- transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
216
- }
217
-
218
- .slex-slider:hover::-webkit-slider-thumb {
219
- box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
220
- transform: scale(1.06);
221
- }
222
-
223
- .slex-slider:hover::-moz-range-thumb {
224
- box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
225
- transform: scale(1.06);
226
- }
227
-
228
- .slex-slider:active::-webkit-slider-thumb {
229
- box-shadow: 0 0 0 6px color-mix(in oklab, var(--primary) 16%, transparent);
230
- transform: scale(1.12);
231
- }
232
-
233
- .slex-slider:active::-moz-range-thumb {
234
- box-shadow: 0 0 0 6px color-mix(in oklab, var(--primary) 16%, transparent);
235
- transform: scale(1.12);
236
- }
237
-
238
- .slex-slider::-moz-range-track {
239
- height: 0.5rem;
240
- border: 0;
241
- border-radius: 999px;
242
- background: var(--secondary);
243
- }
244
-
245
- .slex-slider::-moz-range-progress {
246
- height: 0.5rem;
247
- border-radius: 999px;
248
- background: var(--primary);
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: space-between;
148
+ color: var(--muted-foreground);
149
+ font-size: 0.875rem;
150
+ font-weight: 500;
151
+ }
152
+
153
+ .slex-slider-value {
154
+ padding: 0.125rem 0.5rem;
155
+ border: 1px solid var(--border);
156
+ border-radius: calc(var(--radius) - 2px);
157
+ background: var(--secondary);
158
+ color: var(--secondary-foreground);
159
+ font-family: var(--font-mono, "Geist Mono", "Noto Sans Mono", "Noto Sans Mono CJK SC", "SFMono-Regular", "Cascadia Code", Consolas, monospace);
160
+ font-size: 0.875rem;
161
+ font-weight: 600;
162
+ }
163
+
164
+ .slex-slider {
165
+ box-sizing: border-box;
166
+ width: 100%;
167
+ height: 1rem;
168
+ padding: 0;
169
+ border: 0;
170
+ border-radius: 999px;
171
+ -webkit-appearance: none;
172
+ appearance: none;
173
+ background: transparent;
174
+ accent-color: var(--primary);
175
+ cursor: pointer;
176
+ overflow: visible;
177
+ transition: box-shadow 150ms ease, filter 150ms ease;
178
+ }
179
+
180
+ .slex-slider:focus-visible {
181
+ outline: 2px solid var(--ring);
182
+ outline-offset: 4px;
183
+ }
184
+
185
+ .slex-slider::-webkit-slider-thumb {
186
+ box-sizing: border-box;
187
+ width: 1rem;
188
+ height: 1rem;
189
+ margin-top: -0.25rem;
190
+ border: 2px solid var(--primary);
191
+ border-radius: 999px;
192
+ background-color: var(--background);
193
+ background-clip: padding-box;
194
+ box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
195
+ -webkit-appearance: none;
196
+ appearance: none;
197
+ transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
198
+ }
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
+
215
+ .slex-slider::-moz-range-thumb {
216
+ box-sizing: border-box;
217
+ width: 1rem;
218
+ height: 1rem;
219
+ border: 2px solid var(--primary);
220
+ border-radius: 999px;
221
+ background-color: var(--background);
222
+ background-clip: padding-box;
223
+ box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 14%, transparent);
224
+ transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 120ms ease;
225
+ }
226
+
227
+ .slex-slider:hover::-webkit-slider-thumb {
228
+ box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
229
+ transform: scale(1.06);
230
+ }
231
+
232
+ .slex-slider:hover::-moz-range-thumb {
233
+ box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
234
+ transform: scale(1.06);
235
+ }
236
+
237
+ .slex-slider:active::-webkit-slider-thumb {
238
+ box-shadow: 0 0 0 6px color-mix(in oklab, var(--primary) 16%, transparent);
239
+ transform: scale(1.12);
240
+ }
241
+
242
+ .slex-slider:active::-moz-range-thumb {
243
+ box-shadow: 0 0 0 6px color-mix(in oklab, var(--primary) 16%, transparent);
244
+ transform: scale(1.12);
245
+ }
246
+
247
+ .slex-slider::-moz-range-track {
248
+ height: 0.5rem;
249
+ border: 0;
250
+ border-radius: 999px;
251
+ background: var(--secondary);
252
+ }
253
+
254
+ .slex-slider::-moz-range-progress {
255
+ height: 0.5rem;
256
+ border-radius: 999px;
257
+ background: var(--primary);
249
258
  }
250
259
 
251
260
  .slex-slider-label-text {
@@ -257,119 +266,119 @@
257
266
 
258
267
  /* components/switch.css */
259
268
 
260
- .slex-switch {
261
- display: inline-flex;
262
- align-items: center;
263
- gap: 0.5rem;
264
- cursor: pointer;
265
- }
266
-
267
- .slex-switch-event-layer {
268
- display: inline-flex;
269
- }
270
-
271
- .slex-choice-event-layer {
272
- display: inline-flex;
273
- }
274
-
269
+ .slex-switch {
270
+ display: inline-flex;
271
+ align-items: center;
272
+ gap: 0.5rem;
273
+ cursor: pointer;
274
+ }
275
+
276
+ .slex-switch-event-layer {
277
+ display: inline-flex;
278
+ }
279
+
280
+ .slex-choice-event-layer {
281
+ display: inline-flex;
282
+ }
283
+
275
284
  .slex-switch-label {
276
285
  display: inline-flex;
277
286
  align-items: center;
278
287
  gap: 0.375rem;
279
288
  min-width: 0;
280
289
  color: var(--foreground);
281
- font-size: 0.8125rem;
282
- font-weight: 500;
283
- }
284
-
285
- .slex-switch-input {
286
- position: absolute;
287
- width: 1px;
288
- height: 1px;
289
- padding: 0;
290
- margin: -1px;
291
- overflow: hidden;
292
- clip: rect(0, 0, 0, 0);
293
- white-space: nowrap;
294
- border: 0;
295
- }
296
-
297
- .slex-switch-control {
298
- box-sizing: border-box;
299
- position: relative;
300
- display: inline-flex;
301
- align-items: center;
302
- flex: 0 0 auto;
303
- width: 2.75rem;
304
- height: 1.5rem;
305
- margin-inline-end: 0;
306
- padding: 0;
307
- border: 2px solid transparent;
290
+ font-size: 0.8125rem;
291
+ font-weight: 500;
292
+ }
293
+
294
+ .slex-switch-input {
295
+ position: absolute;
296
+ width: 1px;
297
+ height: 1px;
298
+ padding: 0;
299
+ margin: -1px;
300
+ overflow: hidden;
301
+ clip: rect(0, 0, 0, 0);
302
+ white-space: nowrap;
303
+ border: 0;
304
+ }
305
+
306
+ .slex-switch-control {
307
+ box-sizing: border-box;
308
+ position: relative;
309
+ display: inline-flex;
310
+ align-items: center;
311
+ flex: 0 0 auto;
312
+ width: 2.75rem;
313
+ height: 1.5rem;
314
+ margin-inline-end: 0;
315
+ padding: 0;
316
+ border: 2px solid transparent;
308
317
  border-radius: 9999px;
309
- background: var(--input);
310
- transition: background-color 150ms ease, border-color 150ms ease, box-shadow 150ms ease;
311
- }
312
-
313
- .slex-switch-control::after {
314
- content: "";
315
- display: block;
316
- width: 1.25rem;
317
- height: 1.25rem;
318
- border: 0;
318
+ background: var(--input);
319
+ transition: background-color 150ms ease, border-color 150ms ease, box-shadow 150ms ease;
320
+ }
321
+
322
+ .slex-switch-control::after {
323
+ content: "";
324
+ display: block;
325
+ width: 1.25rem;
326
+ height: 1.25rem;
327
+ border: 0;
319
328
  border-radius: 9999px;
320
- background: var(--background);
321
- box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 12%, transparent);
322
- transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 150ms ease;
323
- transform: translateX(0);
324
- will-change: transform;
325
- }
326
-
327
- .slex-switch:hover .slex-switch-control {
328
- border-color: color-mix(in oklab, var(--primary) 42%, var(--input));
329
- box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 8%, transparent);
330
- }
331
-
332
- .slex-switch:hover .slex-switch-control::after {
333
- box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 10%, transparent);
334
- }
335
-
336
- .slex-switch:active .slex-switch-control::after {
337
- box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 16%, transparent);
338
- }
339
-
340
- .slex-switch-input:checked + .slex-switch-control {
341
- border-color: var(--primary);
342
- background: var(--primary);
343
- }
344
-
345
- .slex-switch:hover .slex-switch-input:checked + .slex-switch-control {
346
- background: color-mix(in oklab, var(--primary) 88%, var(--background));
347
- }
348
-
349
- .slex-switch-input:checked + .slex-switch-control::after {
350
- background: var(--background);
351
- transform: translateX(1.25rem);
352
- }
353
-
354
- .slexkit-root[dir="rtl"] .slex-switch-input:checked + .slex-switch-control::after {
355
- transform: translateX(-1.25rem);
356
- }
357
-
358
- .slex-switch-input:focus-visible + .slex-switch-control {
359
- box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 18%, transparent);
360
- }
361
-
362
- .slex-switch-input:disabled + .slex-switch-control {
363
- opacity: 0.55;
364
- }
365
-
366
- .slex-switch:has(.slex-switch-input:disabled) {
367
- cursor: not-allowed;
368
- }
369
-
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 {
372
- box-shadow: none;
329
+ background: var(--background);
330
+ box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 12%, transparent);
331
+ transition: border-color 150ms ease, background-color 150ms ease, box-shadow 150ms ease, transform 150ms ease;
332
+ transform: translateX(0);
333
+ will-change: transform;
334
+ }
335
+
336
+ .slex-switch:hover .slex-switch-control {
337
+ border-color: color-mix(in oklab, var(--primary) 42%, var(--input));
338
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 8%, transparent);
339
+ }
340
+
341
+ .slex-switch:hover .slex-switch-control::after {
342
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 10%, transparent);
343
+ }
344
+
345
+ .slex-switch:active .slex-switch-control::after {
346
+ box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 16%, transparent);
347
+ }
348
+
349
+ .slex-switch-input:checked + .slex-switch-control {
350
+ border-color: var(--primary);
351
+ background: var(--primary);
352
+ }
353
+
354
+ .slex-switch:hover .slex-switch-input:checked + .slex-switch-control {
355
+ background: color-mix(in oklab, var(--primary) 88%, var(--background));
356
+ }
357
+
358
+ .slex-switch-input:checked + .slex-switch-control::after {
359
+ background: var(--background);
360
+ transform: translateX(1.25rem);
361
+ }
362
+
363
+ .slexkit-root[dir="rtl"] .slex-switch-input:checked + .slex-switch-control::after {
364
+ transform: translateX(-1.25rem);
365
+ }
366
+
367
+ .slex-switch-input:focus-visible + .slex-switch-control {
368
+ box-shadow: 0 0 0 3px color-mix(in oklab, var(--ring) 18%, transparent);
369
+ }
370
+
371
+ .slex-switch-input:disabled + .slex-switch-control {
372
+ opacity: 0.55;
373
+ }
374
+
375
+ .slex-switch[data-disabled="true"] {
376
+ cursor: not-allowed;
377
+ }
378
+
379
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control,
380
+ .slex-switch[data-disabled="true"]:hover .slex-switch-control::after {
381
+ box-shadow: none;
373
382
  }
374
383
 
375
384
  /* components/text-input.css */
@@ -401,10 +410,13 @@
401
410
  }
402
411
 
403
412
  .slex-input-control {
413
+ position: relative;
404
414
  display: flex;
405
415
  align-items: stretch;
406
416
  width: 100%;
407
417
  min-width: 0;
418
+ border-radius: var(--radius);
419
+ transition: box-shadow 150ms ease;
408
420
  }
409
421
 
410
422
  .slex-input {
@@ -418,16 +430,18 @@
418
430
  border: 1px solid var(--input);
419
431
  border-radius: var(--radius);
420
432
  background: var(--background);
433
+ background-clip: padding-box;
421
434
  color: var(--foreground);
422
435
  font-family: inherit;
423
436
  font-size: 0.875rem;
424
437
  line-height: 1.5;
425
438
  outline: none;
439
+ -webkit-appearance: none;
440
+ appearance: none;
426
441
  transition: border-color 150ms ease, box-shadow 150ms ease;
427
442
  }
428
443
 
429
- .slex-input-control[data-has-unit="true"] .slex-input,
430
- .slex-input-control[data-has-controls="true"] .slex-input {
444
+ .slex-input-control[data-has-unit="true"] .slex-input {
431
445
  border-top-right-radius: 0;
432
446
  border-bottom-right-radius: 0;
433
447
  }
@@ -451,80 +465,17 @@
451
465
  transition: border-color 150ms ease, box-shadow 150ms ease;
452
466
  }
453
467
 
454
- .slex-input-control[data-has-controls="true"] .slex-input-unit {
455
- border-radius: 0;
456
- }
457
-
458
- .slex-input-controls {
459
- box-sizing: border-box;
460
- display: inline-grid;
461
- grid-template-columns: repeat(2, minmax(0, 1fr));
462
- align-items: stretch;
463
- flex: 0 0 auto;
464
- width: 3.75rem;
465
- min-width: 3.75rem;
466
- min-height: 2.5625rem;
467
- overflow: hidden;
468
- border: 1px solid var(--input);
469
- border-left: 0;
470
- border-radius: 0 var(--radius) var(--radius) 0;
471
- background: var(--background);
472
- transition: border-color 150ms ease, box-shadow 150ms ease;
473
- }
474
-
475
- .slex-input-step {
476
- box-sizing: border-box;
477
- display: inline-flex;
478
- align-items: center;
479
- justify-content: center;
480
- width: 100%;
481
- min-width: 0;
482
- min-height: 100%;
483
- padding: 0;
484
- border: 0;
485
- border-left: 1px solid var(--input);
486
- border-radius: 0;
487
- background: transparent;
488
- color: var(--foreground);
489
- font: inherit;
490
- font-size: 0.875rem;
491
- font-weight: 600;
492
- line-height: 1;
493
- cursor: pointer;
494
- transition: border-color 150ms ease, background 150ms ease, box-shadow 150ms ease;
495
- }
496
-
497
- .slex-input-step:first-child {
498
- border-left: 0;
499
- }
500
-
501
- .slex-input-step:last-child {
502
- border-radius: 0;
503
- }
504
-
505
- .slex-input-step:hover:not(:disabled) {
506
- background: color-mix(in oklab, var(--muted) 52%, var(--background));
507
- }
508
-
509
- .slex-input-step:focus-visible {
510
- z-index: 1;
511
- border-color: var(--ring);
512
- outline: none;
513
- box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
514
- }
515
-
516
- .slex-input-step:disabled {
517
- opacity: 0.45;
518
- cursor: not-allowed;
519
- }
520
-
521
468
  .slex-input::placeholder {
522
469
  color: var(--muted-foreground);
523
470
  }
524
471
 
525
472
  .slex-input:focus {
526
473
  border-color: var(--ring);
527
- box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
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 {
478
+ box-shadow: none;
528
479
  }
529
480
 
530
481
  .slex-input[type="number"] {
@@ -551,18 +502,21 @@
551
502
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
552
503
  }
553
504
 
554
- .slex-input-control:focus-within .slex-input-unit {
555
- border-color: var(--ring);
505
+ .slex-input-field[data-invalid="true"] .slex-input-control[data-has-unit="true"] .slex-input:focus {
506
+ box-shadow: none;
507
+ }
508
+
509
+ .slex-input-control:focus-within {
556
510
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
557
511
  }
558
512
 
559
- .slex-input-control:focus-within .slex-input-step {
560
- border-color: var(--ring);
513
+ .slex-input-control:not([data-has-unit]):focus-within {
514
+ box-shadow: none;
561
515
  }
562
516
 
563
- .slex-input-control:focus-within .slex-input-controls {
517
+ .slex-input-control:focus-within .slex-input,
518
+ .slex-input-control:focus-within .slex-input-unit {
564
519
  border-color: var(--ring);
565
- box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
566
520
  }
567
521
 
568
522
  .slex-input-field[data-invalid="true"] .slex-input-unit {
@@ -570,26 +524,17 @@
570
524
  color: color-mix(in oklab, var(--destructive) 84%, var(--muted-foreground));
571
525
  }
572
526
 
573
- .slex-input-field[data-invalid="true"] .slex-input-step {
574
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
575
- }
576
-
577
- .slex-input-field[data-invalid="true"] .slex-input-controls {
578
- border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
579
- }
580
-
581
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit {
582
- border-color: var(--destructive);
527
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within {
583
528
  box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
584
529
  }
585
530
 
586
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-step {
587
- border-color: var(--destructive);
531
+ .slex-input-field[data-invalid="true"] .slex-input-control:not([data-has-unit]):focus-within {
532
+ box-shadow: none;
588
533
  }
589
534
 
590
- .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-controls {
535
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input,
536
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-unit {
591
537
  border-color: var(--destructive);
592
- box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
593
538
  }
594
539
 
595
540
  .slex-input[disabled] {
@@ -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;
@@ -622,133 +562,132 @@
622
562
 
623
563
  /* components/select.css */
624
564
 
625
- .slex-select {
626
- position: relative;
627
- display: flex;
628
- width: 100%;
629
- min-width: 0;
630
- flex-direction: column;
631
- gap: 0.5rem;
632
- }
633
-
565
+ .slex-select {
566
+ position: relative;
567
+ display: flex;
568
+ width: 100%;
569
+ min-width: 0;
570
+ flex-direction: column;
571
+ gap: 0.5rem;
572
+ }
573
+
634
574
  .slex-select-label {
635
575
  display: inline-flex;
636
576
  align-items: center;
637
577
  gap: 0.375rem;
638
578
  min-width: 0;
639
579
  color: var(--foreground);
640
- font-size: 0.875rem;
641
- font-weight: 500;
642
- line-height: 1;
643
- }
644
-
645
- .slex-select-control {
646
- width: 100%;
647
- min-width: 0;
648
- }
649
-
650
- .slex-select .slex-select-trigger {
651
- box-sizing: border-box;
652
- display: flex;
653
- align-items: center;
654
- justify-content: space-between;
655
- gap: 0.75rem;
656
- width: 100%;
657
- min-width: 0;
658
- min-height: 2.5rem;
659
- margin: 0;
580
+ font-size: 0.875rem;
581
+ font-weight: 500;
582
+ line-height: 1;
583
+ }
584
+
585
+ .slex-select-control {
586
+ width: 100%;
587
+ min-width: 0;
588
+ }
589
+
590
+ .slex-select .slex-select-trigger {
591
+ box-sizing: border-box;
592
+ display: flex;
593
+ align-items: center;
594
+ justify-content: space-between;
595
+ gap: 0.75rem;
596
+ width: 100%;
597
+ min-width: 0;
598
+ min-height: 2.5rem;
599
+ margin: 0;
660
600
  padding: 0.5rem 1rem;
661
- border: 1px solid var(--input);
662
- border-radius: var(--radius);
663
- background: var(--background);
664
- color: var(--foreground);
665
- font: inherit;
666
- font-size: 0.875rem;
667
- line-height: 1.25rem;
668
- outline: none;
669
- box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 8%, transparent);
670
- cursor: pointer;
671
- transition:
672
- border-color 150ms ease,
673
- background-color 150ms ease,
674
- box-shadow 150ms ease,
675
- color 150ms ease;
676
- appearance: none;
677
- text-align: left;
678
- }
679
-
680
- .slex-select .slex-select-trigger:hover:not(:disabled) {
681
- background: color-mix(in oklab, var(--accent) 34%, var(--background));
682
- }
683
-
684
- .slex-select .slex-select-trigger:focus-visible {
685
- border-color: var(--ring);
686
- box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 20%, transparent);
687
- }
688
-
689
- .slex-select .slex-select-trigger:disabled {
690
- cursor: not-allowed;
691
- opacity: 0.5;
692
- }
693
-
601
+ border: 1px solid var(--input);
602
+ border-radius: var(--radius);
603
+ background: var(--background);
604
+ color: var(--foreground);
605
+ font: inherit;
606
+ font-size: 0.875rem;
607
+ line-height: 1.25rem;
608
+ outline: none;
609
+ box-shadow: 0 1px 2px color-mix(in oklab, var(--foreground) 8%, transparent);
610
+ cursor: pointer;
611
+ transition:
612
+ border-color 150ms ease,
613
+ background-color 150ms ease,
614
+ box-shadow 150ms ease,
615
+ color 150ms ease;
616
+ appearance: none;
617
+ text-align: left;
618
+ }
619
+
620
+ .slex-select .slex-select-trigger:hover:not(:disabled) {
621
+ background: color-mix(in oklab, var(--accent) 34%, var(--background));
622
+ }
623
+
624
+ .slex-select .slex-select-trigger:focus-visible {
625
+ border-color: var(--ring);
626
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 20%, transparent);
627
+ }
628
+
629
+ .slex-select .slex-select-trigger:disabled {
630
+ cursor: not-allowed;
631
+ opacity: 0.5;
632
+ }
633
+
694
634
  .slex-select-value {
695
635
  display: inline-flex;
696
636
  align-items: center;
697
637
  gap: 0.375rem;
698
638
  min-width: 0;
699
639
  overflow: hidden;
700
- text-overflow: ellipsis;
701
- white-space: nowrap;
702
- }
703
-
704
- .slex-select-value[data-placeholder] {
705
- color: var(--muted-foreground);
706
- }
707
-
708
- .slex-select-icon {
709
- position: relative;
710
- flex: 0 0 auto;
711
- width: 0.75rem;
712
- height: 0.75rem;
713
- opacity: 0.72;
714
- }
715
-
716
- .slex-select-icon::before {
717
- position: absolute;
718
- top: 0.2rem;
719
- left: 0.125rem;
720
- width: 0.45rem;
721
- height: 0.45rem;
722
- border-right: 1.5px solid currentColor;
723
- border-bottom: 1.5px solid currentColor;
724
- content: "";
725
- transform: rotate(45deg);
726
- }
727
-
728
- .slex-select-native {
729
- position: absolute;
730
- width: 1px;
731
- height: 1px;
732
- margin: -1px;
733
- padding: 0;
734
- border: 0;
735
- overflow: hidden;
736
- clip: rect(0 0 0 0);
737
- clip-path: inset(50%);
738
- white-space: nowrap;
739
- }
740
-
741
- .slex-select-menu {
742
- position: absolute;
743
- z-index: 40;
744
- top: calc(100% + 0.375rem);
745
- left: 0;
746
- right: 0;
747
- width: 100%;
748
- max-height: 14rem;
749
- margin: 0;
750
- padding: 0.25rem;
751
- overflow-y: auto;
640
+ text-overflow: ellipsis;
641
+ white-space: nowrap;
642
+ }
643
+
644
+ .slex-select-value[data-placeholder] {
645
+ color: var(--muted-foreground);
646
+ }
647
+
648
+ .slex-select-icon {
649
+ position: relative;
650
+ flex: 0 0 auto;
651
+ width: 0.75rem;
652
+ height: 0.75rem;
653
+ opacity: 0.72;
654
+ }
655
+
656
+ .slex-select-icon::before {
657
+ position: absolute;
658
+ top: 0.2rem;
659
+ left: 0.125rem;
660
+ width: 0.45rem;
661
+ height: 0.45rem;
662
+ border-right: 1.5px solid currentColor;
663
+ border-bottom: 1.5px solid currentColor;
664
+ content: "";
665
+ transform: rotate(45deg);
666
+ }
667
+
668
+ .slex-select-native {
669
+ position: absolute;
670
+ width: 1px;
671
+ height: 1px;
672
+ margin: -1px;
673
+ padding: 0;
674
+ border: 0;
675
+ overflow: hidden;
676
+ clip: rect(0 0 0 0);
677
+ white-space: nowrap;
678
+ }
679
+
680
+ .slex-select-menu {
681
+ position: absolute;
682
+ z-index: 40;
683
+ top: calc(100% + 0.375rem);
684
+ left: 0;
685
+ right: 0;
686
+ width: 100%;
687
+ max-height: 14rem;
688
+ margin: 0;
689
+ padding: 0.25rem;
690
+ overflow-y: auto;
752
691
  border: 1px solid color-mix(in oklab, var(--border) 82%, transparent);
753
692
  border-radius: var(--radius);
754
693
  background: var(--popover, var(--background));
@@ -760,23 +699,23 @@
760
699
  );
761
700
  list-style: none;
762
701
  }
763
-
764
- .slexkit-root .slex-select-menu {
765
- margin: 0;
766
- padding: 0.25rem;
767
- list-style: none;
768
- }
769
-
702
+
703
+ .slexkit-root .slex-select-menu {
704
+ margin: 0;
705
+ padding: 0.25rem;
706
+ list-style: none;
707
+ }
708
+
770
709
  .slexkit-root .slex-select-menu li {
771
710
  margin: 0;
772
711
  list-style: none;
773
712
  }
774
-
775
- .slex-select-option {
776
- display: flex;
777
- align-items: center;
778
- justify-content: space-between;
779
- gap: 0.75rem;
713
+
714
+ .slex-select-option {
715
+ display: flex;
716
+ align-items: center;
717
+ justify-content: space-between;
718
+ gap: 0.75rem;
780
719
  min-height: 2rem;
781
720
  padding: 0.5rem 0.75rem;
782
721
  border-radius: calc(var(--radius) - 2px);
@@ -784,40 +723,35 @@
784
723
  font-size: 0.875rem;
785
724
  line-height: 1.25rem;
786
725
  cursor: pointer;
787
- user-select: none;
788
- }
789
-
726
+ user-select: none;
727
+ }
728
+
790
729
  .slex-select-option:hover:not([data-disabled]),
791
730
  .slex-select-option--active:not([data-disabled]) {
792
731
  background: var(--accent);
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));
735
+ .slex-select-option--selected {
736
+ font-weight: 500;
737
+ }
738
+
739
+ .slex-select-option[data-disabled] {
740
+ color: var(--muted-foreground);
741
+ cursor: not-allowed;
742
+ opacity: 0.52;
799
743
  }
800
-
801
- .slex-select-option--selected {
802
- font-weight: 500;
803
- }
804
-
805
- .slex-select-option[data-disabled] {
806
- color: var(--muted-foreground);
807
- cursor: not-allowed;
808
- opacity: 0.52;
809
- }
810
-
744
+
811
745
  .slex-select-option-label {
812
746
  display: inline-flex;
813
747
  align-items: center;
814
748
  gap: 0.375rem;
815
749
  min-width: 0;
816
- overflow: hidden;
817
- text-overflow: ellipsis;
818
- white-space: nowrap;
819
- }
820
-
750
+ overflow: hidden;
751
+ text-overflow: ellipsis;
752
+ white-space: nowrap;
753
+ }
754
+
821
755
  .slex-select-check {
822
756
  position: relative;
823
757
  flex: 0 0 auto;
@@ -837,35 +771,35 @@
837
771
  content: "";
838
772
  transform: rotate(-45deg);
839
773
  }
840
-
841
- .slex-select[data-variant="toolbar"] {
842
- height: 100%;
843
- gap: 0;
844
- }
845
-
846
- .slex-select[data-variant="toolbar"] .slex-select-trigger {
847
- height: var(--slex-control-height, 2.25rem);
848
- min-height: 0;
849
- border-width: 0 1px 0 0;
850
- border-color: color-mix(in oklab, var(--border) 58%, transparent);
851
- border-radius: 0;
852
- background: transparent;
853
- padding: 0 0.75rem 0 0.875rem;
854
- font-size: 0.8125rem;
855
- line-height: 1;
856
- box-shadow: none;
857
- }
858
-
859
- .slex-select[data-variant="toolbar"] .slex-select-trigger:hover:not(:disabled) {
860
- background: color-mix(in oklab, var(--muted) 36%, var(--background));
861
- }
862
-
863
- .slex-select[data-variant="toolbar"] .slex-select-menu {
864
- top: calc(100% + 0.25rem);
865
- left: 0;
866
- right: auto;
867
- width: 100%;
868
- min-width: 100%;
774
+
775
+ .slex-select[data-variant="toolbar"] {
776
+ height: 100%;
777
+ gap: 0;
778
+ }
779
+
780
+ .slex-select[data-variant="toolbar"] .slex-select-trigger {
781
+ height: var(--slex-control-height, 2.25rem);
782
+ min-height: 0;
783
+ border-width: 0 1px 0 0;
784
+ border-color: color-mix(in oklab, var(--border) 58%, transparent);
785
+ border-radius: 0;
786
+ background: transparent;
787
+ padding: 0 0.75rem 0 0.875rem;
788
+ font-size: 0.8125rem;
789
+ line-height: 1;
790
+ box-shadow: none;
791
+ }
792
+
793
+ .slex-select[data-variant="toolbar"] .slex-select-trigger:hover:not(:disabled) {
794
+ background: color-mix(in oklab, var(--muted) 36%, var(--background));
795
+ }
796
+
797
+ .slex-select[data-variant="toolbar"] .slex-select-menu {
798
+ top: calc(100% + 0.25rem);
799
+ left: 0;
800
+ right: auto;
801
+ width: 100%;
802
+ min-width: 100%;
869
803
  border-color: color-mix(in oklab, var(--border) 76%, transparent);
870
804
  border-radius: calc(var(--radius) - 2px);
871
805
  padding: 0.25rem;
@@ -875,9 +809,9 @@
875
809
  0 1px 3px rgb(0 0 0 / 0.06)
876
810
  );
877
811
  }
878
-
879
- .slex-select[data-variant="toolbar"] .slex-select-option {
880
- height: 1.875rem;
812
+
813
+ .slex-select[data-variant="toolbar"] .slex-select-option {
814
+ height: 1.875rem;
881
815
  border-radius: calc(var(--radius) - 4px);
882
816
  font-size: 0.8125rem;
883
817
  padding-inline: 0.75rem;
@@ -885,46 +819,46 @@
885
819
 
886
820
  /* components/tabs.css */
887
821
 
888
- .slex-tabs {
889
- display: flex;
890
- flex-direction: column;
891
- width: 100%;
892
- }
893
-
894
- .slex-tabs[data-orientation="vertical"] {
895
- flex-direction: row;
896
- }
897
-
822
+ .slex-tabs {
823
+ display: flex;
824
+ flex-direction: column;
825
+ width: 100%;
826
+ }
827
+
828
+ .slex-tabs[data-orientation="vertical"] {
829
+ flex-direction: row;
830
+ }
831
+
898
832
  .slex-tabs-list {
899
833
  --slex-tabs-indicator-inline-inset: 12px;
900
834
  --slex-tabs-indicator-block-inset: 8px;
901
835
  position: relative;
902
836
  display: flex;
903
- gap: 0;
904
- margin: 0;
905
- padding: 0;
906
- list-style: none;
907
- overflow: hidden;
908
- border-bottom: 1px solid var(--border);
909
- }
910
-
911
- .slexkit-root .slex-tabs-list {
912
- display: flex;
913
- gap: 0;
914
- margin: 0;
915
- padding: 0;
916
- list-style: none;
917
- }
918
-
919
- .slexkit-root .slex-tabs-list li {
920
- margin: 0;
921
- padding: 0;
922
- color: inherit;
923
- font: inherit;
924
- line-height: inherit;
925
- list-style: none;
926
- }
927
-
837
+ gap: 0;
838
+ margin: 0;
839
+ padding: 0;
840
+ list-style: none;
841
+ overflow: hidden;
842
+ border-bottom: 1px solid var(--border);
843
+ }
844
+
845
+ .slexkit-root .slex-tabs-list {
846
+ display: flex;
847
+ gap: 0;
848
+ margin: 0;
849
+ padding: 0;
850
+ list-style: none;
851
+ }
852
+
853
+ .slexkit-root .slex-tabs-list li {
854
+ margin: 0;
855
+ padding: 0;
856
+ color: inherit;
857
+ font: inherit;
858
+ line-height: inherit;
859
+ list-style: none;
860
+ }
861
+
928
862
  .slex-tabs-selected-indicator {
929
863
  position: absolute;
930
864
  z-index: 20;
@@ -950,25 +884,25 @@
950
884
  .slex-tabs[data-orientation="vertical"] .slex-tabs-list {
951
885
  flex-direction: column;
952
886
  border-right: 1px solid var(--border);
953
- border-bottom: none;
954
- }
955
-
956
- .slex-tabs-trigger {
957
- position: relative;
958
- padding: 0.5rem 1rem;
959
- border: none;
960
- border-radius: 0;
961
- background: transparent;
962
- color: var(--muted-foreground);
963
- font-family: inherit;
964
- font-size: 0.875rem;
965
- font-weight: 500;
966
- white-space: nowrap;
887
+ border-bottom: none;
888
+ }
889
+
890
+ .slex-tabs-trigger {
891
+ position: relative;
892
+ padding: 0.5rem 1rem;
893
+ border: none;
894
+ border-radius: 0;
895
+ background: transparent;
896
+ color: var(--muted-foreground);
897
+ font-family: inherit;
898
+ font-size: 0.875rem;
899
+ font-weight: 500;
900
+ white-space: nowrap;
967
901
  cursor: pointer;
968
902
  outline: none;
969
903
  user-select: none;
970
904
  }
971
-
905
+
972
906
  .slex-tabs-trigger--icon {
973
907
  display: inline-grid;
974
908
  width: var(--slex-control-height, 2.25rem);
@@ -1010,17 +944,17 @@
1010
944
  .slex-tabs-trigger.slex-tabs-trigger--selected:hover:not([data-disabled]) {
1011
945
  color: var(--primary);
1012
946
  }
1013
-
1014
- .slex-tabs-trigger[data-disabled] {
1015
- opacity: 0.4;
1016
- cursor: not-allowed;
1017
- }
1018
-
1019
- .slex-tabs-trigger:focus-visible {
1020
- outline: 2px solid var(--ring);
1021
- outline-offset: -2px;
1022
- }
1023
-
947
+
948
+ .slex-tabs-trigger[data-disabled] {
949
+ opacity: 0.4;
950
+ cursor: not-allowed;
951
+ }
952
+
953
+ .slex-tabs-trigger:focus-visible {
954
+ outline: 2px solid var(--ring);
955
+ outline-offset: -2px;
956
+ }
957
+
1024
958
  .slex-tabs-content {
1025
959
  margin-top: 0.75rem !important;
1026
960
  border-radius: 0 !important;
@@ -1042,56 +976,56 @@
1042
976
  }
1043
977
 
1044
978
  @keyframes slex-tabs-content-in {
1045
- from {
1046
- opacity: 0;
1047
- transform: translateY(2px);
1048
- }
1049
- to {
1050
- opacity: 1;
1051
- transform: translateY(0);
1052
- }
1053
- }
1054
-
1055
- .slex-tabs-content[hidden] {
1056
- display: none;
1057
- }
1058
-
1059
- @media (max-width: 640px) {
1060
- .slex-tabs-list {
1061
- overflow-x: auto;
1062
- scrollbar-width: none;
1063
- }
1064
-
1065
- .slex-tabs-list::-webkit-scrollbar {
1066
- display: none;
1067
- }
1068
-
1069
- .slex-tabs[data-orientation="vertical"] {
1070
- flex-direction: column;
1071
- }
1072
-
1073
- .slex-tabs[data-orientation="vertical"] .slex-tabs-list {
1074
- flex-direction: row;
1075
- border-right: 0;
1076
- border-bottom: 1px solid var(--border);
1077
- }
1078
-
979
+ from {
980
+ opacity: 0;
981
+ transform: translateY(2px);
982
+ }
983
+ to {
984
+ opacity: 1;
985
+ transform: translateY(0);
986
+ }
987
+ }
988
+
989
+ .slex-tabs-content[hidden] {
990
+ display: none;
991
+ }
992
+
993
+ @media (max-width: 640px) {
994
+ .slex-tabs-list {
995
+ overflow-x: auto;
996
+ scrollbar-width: none;
997
+ }
998
+
999
+ .slex-tabs-list::-webkit-scrollbar {
1000
+ display: none;
1001
+ }
1002
+
1003
+ .slex-tabs[data-orientation="vertical"] {
1004
+ flex-direction: column;
1005
+ }
1006
+
1007
+ .slex-tabs[data-orientation="vertical"] .slex-tabs-list {
1008
+ flex-direction: row;
1009
+ border-right: 0;
1010
+ border-bottom: 1px solid var(--border);
1011
+ }
1012
+
1079
1013
  }
1080
1014
 
1081
1015
  /* components/choice.css */
1082
1016
 
1083
- .slex-checkbox-field,
1084
- .slex-radio-field {
1085
- display: inline-flex;
1086
- align-items: center;
1087
- gap: 0.5rem;
1088
- color: var(--foreground);
1089
- font-size: 0.875rem;
1090
- cursor: pointer;
1091
- user-select: none;
1092
- transition: color 150ms ease, opacity 150ms ease;
1093
- }
1094
-
1017
+ .slex-checkbox-field,
1018
+ .slex-radio-field {
1019
+ display: inline-flex;
1020
+ align-items: center;
1021
+ gap: 0.5rem;
1022
+ color: var(--foreground);
1023
+ font-size: 0.875rem;
1024
+ cursor: pointer;
1025
+ user-select: none;
1026
+ transition: color 150ms ease, opacity 150ms ease;
1027
+ }
1028
+
1095
1029
  .slex-checkbox-label,
1096
1030
  .slex-radio-label {
1097
1031
  display: inline-flex;
@@ -1099,149 +1033,149 @@
1099
1033
  gap: 0.375rem;
1100
1034
  min-width: 0;
1101
1035
  color: var(--foreground);
1102
- line-height: 1.35;
1103
- transition: color 150ms ease;
1104
- }
1105
-
1106
- .slex-checkbox,
1107
- .slex-radio {
1108
- box-sizing: border-box;
1109
- position: relative;
1110
- display: inline-grid;
1111
- place-items: center;
1112
- flex: 0 0 auto;
1113
- width: 1rem;
1114
- height: 1rem;
1115
- margin: 0;
1116
- border: 1.5px solid var(--input);
1117
- color: var(--primary);
1118
- accent-color: var(--primary);
1119
- background: var(--background);
1120
- cursor: pointer;
1121
- appearance: none;
1122
- -webkit-appearance: none;
1123
- transition:
1124
- background-color 150ms ease,
1125
- border-color 150ms ease,
1126
- box-shadow 150ms ease,
1127
- transform 120ms ease;
1128
- }
1129
-
1130
- .slex-checkbox {
1131
- border-radius: calc(var(--radius) - 4px);
1132
- }
1133
-
1134
- .slex-radio {
1135
- border-radius: 999px;
1136
- }
1137
-
1138
- .slex-checkbox::after,
1139
- .slex-radio::after {
1140
- content: "";
1141
- display: block;
1142
- opacity: 0;
1143
- transform: scale(0.5);
1144
- transition: opacity 120ms ease, transform 140ms ease;
1145
- }
1146
-
1147
- .slex-checkbox::after {
1148
- width: 0.55rem;
1149
- height: 0.34rem;
1150
- border: solid var(--primary-foreground);
1151
- border-width: 0 0 2px 2px;
1152
- transform: translateY(-0.08rem) rotate(-45deg) scale(0.5);
1153
- }
1154
-
1155
- .slex-radio::after {
1156
- width: 0.45rem;
1157
- height: 0.45rem;
1158
- border-radius: 999px;
1159
- background: var(--primary-foreground);
1160
- }
1161
-
1162
- .slex-checkbox-field:hover .slex-checkbox:not(:disabled),
1163
- .slex-radio-field:hover .slex-radio:not(:disabled) {
1164
- border-color: color-mix(in oklab, var(--primary) 48%, var(--input));
1165
- box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 8%, transparent);
1166
- }
1167
-
1168
- .slex-checkbox-field:active .slex-checkbox:not(:disabled),
1169
- .slex-radio-field:active .slex-radio:not(:disabled) {
1170
- transform: scale(0.92);
1171
- box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
1172
- }
1173
-
1174
- .slex-checkbox:checked,
1175
- .slex-radio:checked {
1176
- border-color: var(--primary);
1177
- background: var(--primary);
1178
- }
1179
-
1180
- .slex-checkbox:checked::after,
1181
- .slex-radio:checked::after {
1182
- opacity: 1;
1183
- }
1184
-
1185
- .slex-checkbox:checked::after {
1186
- transform: translateY(-0.08rem) rotate(-45deg) scale(1);
1187
- }
1188
-
1189
- .slex-radio:checked::after {
1190
- transform: scale(1);
1191
- }
1192
-
1193
- .slex-checkbox-field:hover .slex-checkbox-label,
1194
- .slex-radio-field:hover .slex-radio-label {
1195
- color: var(--foreground);
1196
- }
1197
-
1198
- .slex-checkbox:focus-visible,
1199
- .slex-radio:focus-visible {
1200
- outline: 2px solid var(--ring);
1201
- outline-offset: 2px;
1202
- }
1203
-
1204
- .slex-radio-group {
1205
- display: flex;
1206
- flex-direction: column;
1207
- gap: 0.625rem;
1208
- }
1209
-
1036
+ line-height: 1.35;
1037
+ transition: color 150ms ease;
1038
+ }
1039
+
1040
+ .slex-checkbox,
1041
+ .slex-radio {
1042
+ box-sizing: border-box;
1043
+ position: relative;
1044
+ display: inline-grid;
1045
+ place-items: center;
1046
+ flex: 0 0 auto;
1047
+ width: 1rem;
1048
+ height: 1rem;
1049
+ margin: 0;
1050
+ border: 1.5px solid var(--input);
1051
+ color: var(--primary);
1052
+ accent-color: var(--primary);
1053
+ background: var(--background);
1054
+ cursor: pointer;
1055
+ appearance: none;
1056
+ -webkit-appearance: none;
1057
+ transition:
1058
+ background-color 150ms ease,
1059
+ border-color 150ms ease,
1060
+ box-shadow 150ms ease,
1061
+ transform 120ms ease;
1062
+ }
1063
+
1064
+ .slex-checkbox {
1065
+ border-radius: calc(var(--radius) - 4px);
1066
+ }
1067
+
1068
+ .slex-radio {
1069
+ border-radius: 999px;
1070
+ }
1071
+
1072
+ .slex-checkbox::after,
1073
+ .slex-radio::after {
1074
+ content: "";
1075
+ display: block;
1076
+ opacity: 0;
1077
+ transform: scale(0.5);
1078
+ transition: opacity 120ms ease, transform 140ms ease;
1079
+ }
1080
+
1081
+ .slex-checkbox::after {
1082
+ width: 0.55rem;
1083
+ height: 0.34rem;
1084
+ border: solid var(--primary-foreground);
1085
+ border-width: 0 0 2px 2px;
1086
+ transform: translateY(-0.08rem) rotate(-45deg) scale(0.5);
1087
+ }
1088
+
1089
+ .slex-radio::after {
1090
+ width: 0.45rem;
1091
+ height: 0.45rem;
1092
+ border-radius: 999px;
1093
+ background: var(--primary-foreground);
1094
+ }
1095
+
1096
+ .slex-checkbox-field:hover .slex-checkbox:not(:disabled),
1097
+ .slex-radio-field:hover .slex-radio:not(:disabled) {
1098
+ border-color: color-mix(in oklab, var(--primary) 48%, var(--input));
1099
+ box-shadow: 0 0 0 4px color-mix(in oklab, var(--primary) 8%, transparent);
1100
+ }
1101
+
1102
+ .slex-checkbox-field:active .slex-checkbox:not(:disabled),
1103
+ .slex-radio-field:active .slex-radio:not(:disabled) {
1104
+ transform: scale(0.92);
1105
+ box-shadow: 0 0 0 5px color-mix(in oklab, var(--primary) 12%, transparent);
1106
+ }
1107
+
1108
+ .slex-checkbox:checked,
1109
+ .slex-radio:checked {
1110
+ border-color: var(--primary);
1111
+ background: var(--primary);
1112
+ }
1113
+
1114
+ .slex-checkbox:checked::after,
1115
+ .slex-radio:checked::after {
1116
+ opacity: 1;
1117
+ }
1118
+
1119
+ .slex-checkbox:checked::after {
1120
+ transform: translateY(-0.08rem) rotate(-45deg) scale(1);
1121
+ }
1122
+
1123
+ .slex-radio:checked::after {
1124
+ transform: scale(1);
1125
+ }
1126
+
1127
+ .slex-checkbox-field:hover .slex-checkbox-label,
1128
+ .slex-radio-field:hover .slex-radio-label {
1129
+ color: var(--foreground);
1130
+ }
1131
+
1132
+ .slex-checkbox:focus-visible,
1133
+ .slex-radio:focus-visible {
1134
+ outline: 2px solid var(--ring);
1135
+ outline-offset: 2px;
1136
+ }
1137
+
1138
+ .slex-radio-group {
1139
+ display: flex;
1140
+ flex-direction: column;
1141
+ gap: 0.625rem;
1142
+ }
1143
+
1210
1144
  .slex-radio-group-label {
1211
1145
  display: inline-flex;
1212
1146
  align-items: center;
1213
1147
  gap: 0.375rem;
1214
1148
  min-width: 0;
1215
1149
  color: var(--foreground);
1216
- font-size: 0.875rem;
1217
- font-weight: 500;
1218
- }
1219
-
1220
- .slex-radio-group-list {
1221
- display: flex;
1222
- flex-direction: column;
1223
- gap: 0.5rem;
1224
- }
1225
-
1226
- .slex-radio-group[data-orientation="horizontal"] .slex-radio-group-list {
1227
- flex-direction: row;
1228
- flex-wrap: wrap;
1229
- }
1230
-
1231
- .slex-checkbox:disabled,
1232
- .slex-radio:disabled {
1233
- cursor: not-allowed;
1234
- opacity: 0.5;
1235
- box-shadow: none;
1236
- transform: none;
1237
- }
1238
-
1239
- .slex-checkbox-field:has(.slex-checkbox:disabled),
1240
- .slex-radio-field:has(.slex-radio:disabled) {
1241
- cursor: not-allowed;
1242
- opacity: 0.65;
1243
- }
1244
-
1245
- .slex-radio-indicator {
1246
- display: none;
1150
+ font-size: 0.875rem;
1151
+ font-weight: 500;
1152
+ }
1153
+
1154
+ .slex-radio-group-list {
1155
+ display: flex;
1156
+ flex-direction: column;
1157
+ gap: 0.5rem;
1158
+ }
1159
+
1160
+ .slex-radio-group[data-orientation="horizontal"] .slex-radio-group-list {
1161
+ flex-direction: row;
1162
+ flex-wrap: wrap;
1163
+ }
1164
+
1165
+ .slex-checkbox:disabled,
1166
+ .slex-radio:disabled {
1167
+ cursor: not-allowed;
1168
+ opacity: 0.5;
1169
+ box-shadow: none;
1170
+ transform: none;
1171
+ }
1172
+
1173
+ .slex-checkbox-field[data-disabled="true"],
1174
+ .slex-radio-field[data-disabled="true"] {
1175
+ cursor: not-allowed;
1176
+ opacity: 0.65;
1177
+ }
1178
+
1179
+ .slex-radio-indicator {
1180
+ display: none;
1247
1181
  }