slexkit 0.2.0

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 (221) hide show
  1. package/AGENTS.slexkit.md +29 -0
  2. package/CHANGELOG.md +90 -0
  3. package/LICENSE +21 -0
  4. package/README.md +165 -0
  5. package/README.zh-CN.md +165 -0
  6. package/dist/ai/llms-authoring.txt +44 -0
  7. package/dist/ai/llms-components.txt +669 -0
  8. package/dist/ai/llms-full.txt +6586 -0
  9. package/dist/ai/llms-runtime.txt +1475 -0
  10. package/dist/ai/llms-toolhost.txt +295 -0
  11. package/dist/ai/llms.txt +69 -0
  12. package/dist/ai/slexkit-ai-manifest.json +2922 -0
  13. package/dist/base.css +621 -0
  14. package/dist/chunks/accordion-5f0nvjjm.js +376 -0
  15. package/dist/chunks/accordion-830dw78f.js +221 -0
  16. package/dist/chunks/accordion-cfjyxw93.js +630 -0
  17. package/dist/chunks/accordion-cw5r75jm.js +424 -0
  18. package/dist/chunks/accordion-ehnhpeca.js +492 -0
  19. package/dist/chunks/accordion-hzyrngd6.js +2377 -0
  20. package/dist/chunks/accordion-nw12ytps.js +6823 -0
  21. package/dist/components/accordion.js +163 -0
  22. package/dist/components/badge.js +80 -0
  23. package/dist/components/button.css +114 -0
  24. package/dist/components/button.js +16 -0
  25. package/dist/components/callout.js +154 -0
  26. package/dist/components/card.js +95 -0
  27. package/dist/components/checkbox.js +114 -0
  28. package/dist/components/choice.css +165 -0
  29. package/dist/components/code-block.js +264 -0
  30. package/dist/components/collapsible.js +111 -0
  31. package/dist/components/column.js +49 -0
  32. package/dist/components/content.css +474 -0
  33. package/dist/components/disclosure.css +162 -0
  34. package/dist/components/display.css +259 -0
  35. package/dist/components/divider.js +98 -0
  36. package/dist/components/feedback.css +219 -0
  37. package/dist/components/grid.js +67 -0
  38. package/dist/components/index.js +13364 -0
  39. package/dist/components/input.css +1247 -0
  40. package/dist/components/input.js +384 -0
  41. package/dist/components/link.js +77 -0
  42. package/dist/components/progress.js +111 -0
  43. package/dist/components/radio-group.js +189 -0
  44. package/dist/components/row.js +200 -0
  45. package/dist/components/section.js +161 -0
  46. package/dist/components/select.css +260 -0
  47. package/dist/components/select.js +16 -0
  48. package/dist/components/slider.css +125 -0
  49. package/dist/components/slider.js +175 -0
  50. package/dist/components/specs.js +1090 -0
  51. package/dist/components/stat.js +178 -0
  52. package/dist/components/submit.css +9 -0
  53. package/dist/components/submit.js +77 -0
  54. package/dist/components/switch.css +114 -0
  55. package/dist/components/switch.js +114 -0
  56. package/dist/components/table.js +157 -0
  57. package/dist/components/tabs.css +192 -0
  58. package/dist/components/tabs.js +17 -0
  59. package/dist/components/text-input.css +245 -0
  60. package/dist/components/text.js +50 -0
  61. package/dist/components/toast.js +240 -0
  62. package/dist/components/tooling.css +1009 -0
  63. package/dist/components/tooling.js +48951 -0
  64. package/dist/runtime.cjs +3728 -0
  65. package/dist/runtime.js +3686 -0
  66. package/dist/slexkit.cjs +18539 -0
  67. package/dist/slexkit.css +4776 -0
  68. package/dist/slexkit.js +18497 -0
  69. package/dist/tooling.js +59141 -0
  70. package/dist/types/components/accordion.d.ts +2 -0
  71. package/dist/types/components/badge.d.ts +2 -0
  72. package/dist/types/components/button.d.ts +2 -0
  73. package/dist/types/components/callout.d.ts +2 -0
  74. package/dist/types/components/card.d.ts +2 -0
  75. package/dist/types/components/checkbox.d.ts +2 -0
  76. package/dist/types/components/code-block.d.ts +2 -0
  77. package/dist/types/components/collapsible.d.ts +2 -0
  78. package/dist/types/components/column.d.ts +2 -0
  79. package/dist/types/components/divider.d.ts +2 -0
  80. package/dist/types/components/entries/accordion.d.ts +3 -0
  81. package/dist/types/components/entries/badge.d.ts +3 -0
  82. package/dist/types/components/entries/button.d.ts +3 -0
  83. package/dist/types/components/entries/callout.d.ts +3 -0
  84. package/dist/types/components/entries/card.d.ts +3 -0
  85. package/dist/types/components/entries/checkbox.d.ts +3 -0
  86. package/dist/types/components/entries/code-block.d.ts +3 -0
  87. package/dist/types/components/entries/collapsible.d.ts +3 -0
  88. package/dist/types/components/entries/column.d.ts +3 -0
  89. package/dist/types/components/entries/divider.d.ts +3 -0
  90. package/dist/types/components/entries/grid.d.ts +3 -0
  91. package/dist/types/components/entries/input.d.ts +3 -0
  92. package/dist/types/components/entries/link.d.ts +3 -0
  93. package/dist/types/components/entries/progress.d.ts +3 -0
  94. package/dist/types/components/entries/radio-group.d.ts +3 -0
  95. package/dist/types/components/entries/row.d.ts +3 -0
  96. package/dist/types/components/entries/section.d.ts +3 -0
  97. package/dist/types/components/entries/select.d.ts +3 -0
  98. package/dist/types/components/entries/slider.d.ts +3 -0
  99. package/dist/types/components/entries/specs.d.ts +1 -0
  100. package/dist/types/components/entries/stat.d.ts +3 -0
  101. package/dist/types/components/entries/submit.d.ts +3 -0
  102. package/dist/types/components/entries/switch.d.ts +3 -0
  103. package/dist/types/components/entries/table.d.ts +3 -0
  104. package/dist/types/components/entries/tabs.d.ts +3 -0
  105. package/dist/types/components/entries/text.d.ts +3 -0
  106. package/dist/types/components/entries/toast.d.ts +3 -0
  107. package/dist/types/components/entries/tooling.d.ts +1 -0
  108. package/dist/types/components/grid.d.ts +2 -0
  109. package/dist/types/components/index.d.ts +6 -0
  110. package/dist/types/components/input.d.ts +2 -0
  111. package/dist/types/components/link.d.ts +2 -0
  112. package/dist/types/components/progress.d.ts +2 -0
  113. package/dist/types/components/radio-group.d.ts +2 -0
  114. package/dist/types/components/row.d.ts +2 -0
  115. package/dist/types/components/section.d.ts +2 -0
  116. package/dist/types/components/select.d.ts +2 -0
  117. package/dist/types/components/slider.d.ts +2 -0
  118. package/dist/types/components/spec-helpers.d.ts +23 -0
  119. package/dist/types/components/spec-registry.d.ts +12 -0
  120. package/dist/types/components/spec-schema.d.ts +74 -0
  121. package/dist/types/components/specs.d.ts +2 -0
  122. package/dist/types/components/stat.d.ts +2 -0
  123. package/dist/types/components/submit.d.ts +2 -0
  124. package/dist/types/components/svelte/adapter.d.ts +3 -0
  125. package/dist/types/components/svelte/bindProps.d.ts +2 -0
  126. package/dist/types/components/svelte/helpers.d.ts +33 -0
  127. package/dist/types/components/svelte/layout/balancedTiles.d.ts +14 -0
  128. package/dist/types/components/svelte/types.d.ts +12 -0
  129. package/dist/types/components/switch.d.ts +2 -0
  130. package/dist/types/components/table.d.ts +2 -0
  131. package/dist/types/components/tabs.d.ts +2 -0
  132. package/dist/types/components/text.d.ts +2 -0
  133. package/dist/types/components/toast.d.ts +2 -0
  134. package/dist/types/components/tooling.d.ts +2 -0
  135. package/dist/types/components-svelte.d.ts +5 -0
  136. package/dist/types/engine/component-scope.d.ts +14 -0
  137. package/dist/types/engine/component-state.d.ts +9 -0
  138. package/dist/types/engine/diagnostics.d.ts +24 -0
  139. package/dist/types/engine/engineering.d.ts +11 -0
  140. package/dist/types/engine/eval.d.ts +5 -0
  141. package/dist/types/engine/index.d.ts +26 -0
  142. package/dist/types/engine/markdown-runtime.d.ts +33 -0
  143. package/dist/types/engine/merge.d.ts +1 -0
  144. package/dist/types/engine/reactive.d.ts +11 -0
  145. package/dist/types/engine/registry.d.ts +4 -0
  146. package/dist/types/engine/renderer.d.ts +6 -0
  147. package/dist/types/engine/sandbox-runner.d.ts +2 -0
  148. package/dist/types/engine/secure-runtime.d.ts +214 -0
  149. package/dist/types/engine/store.d.ts +12 -0
  150. package/dist/types/engine/types.d.ts +58 -0
  151. package/dist/types/icons/manager.d.ts +17 -0
  152. package/dist/types/icons/phosphor.d.ts +45 -0
  153. package/dist/types/index.d.ts +61 -0
  154. package/dist/types/runtime.d.ts +32 -0
  155. package/dist/types/toolhost/index.d.ts +78 -0
  156. package/dist/types/tooling-umd.d.ts +47 -0
  157. package/dist/types/version.d.ts +8 -0
  158. package/dist/umd/slexkit.tooling.umd.js +66553 -0
  159. package/dist/umd/slexkit.umd.js +18552 -0
  160. package/package.json +136 -0
  161. package/scripts/cli.mjs +47 -0
  162. package/skills/slexkit/SKILL.md +27 -0
  163. package/skills/slexkit-author/SKILL.md +50 -0
  164. package/skills/slexkit-host-integration/SKILL.md +33 -0
  165. package/skills/slexkit-secure-runtime/SKILL.md +31 -0
  166. package/skills/slexkit-toolhost/SKILL.md +38 -0
  167. package/skills/slexkit-update/SKILL.md +23 -0
  168. package/src/components/svelte/InlineIcon.svelte +66 -0
  169. package/src/components/svelte/adapter.ts +76 -0
  170. package/src/components/svelte/bindProps.ts +9 -0
  171. package/src/components/svelte/content/Badge.svelte +19 -0
  172. package/src/components/svelte/content/Callout.svelte +57 -0
  173. package/src/components/svelte/content/CodeBlock.svelte +130 -0
  174. package/src/components/svelte/content/Divider.svelte +21 -0
  175. package/src/components/svelte/content/Link.svelte +21 -0
  176. package/src/components/svelte/content/Section.svelte +24 -0
  177. package/src/components/svelte/content/Table.svelte +44 -0
  178. package/src/components/svelte/disclosure/Accordion.svelte +100 -0
  179. package/src/components/svelte/disclosure/Collapsible.svelte +45 -0
  180. package/src/components/svelte/display/Stat.svelte +102 -0
  181. package/src/components/svelte/display/Text.svelte +11 -0
  182. package/src/components/svelte/feedback/Progress.svelte +34 -0
  183. package/src/components/svelte/feedback/Toast.svelte +105 -0
  184. package/src/components/svelte/helpers.ts +148 -0
  185. package/src/components/svelte/input/Button.svelte +78 -0
  186. package/src/components/svelte/input/Checkbox.svelte +52 -0
  187. package/src/components/svelte/input/Input.svelte +202 -0
  188. package/src/components/svelte/input/RadioGroup.svelte +71 -0
  189. package/src/components/svelte/input/Select.svelte +220 -0
  190. package/src/components/svelte/input/Slider.svelte +96 -0
  191. package/src/components/svelte/input/Submit.svelte +32 -0
  192. package/src/components/svelte/input/Switch.svelte +53 -0
  193. package/src/components/svelte/input/Tabs.svelte +188 -0
  194. package/src/components/svelte/layout/Card.svelte +17 -0
  195. package/src/components/svelte/layout/Column.svelte +15 -0
  196. package/src/components/svelte/layout/Grid.svelte +26 -0
  197. package/src/components/svelte/layout/Row.svelte +105 -0
  198. package/src/components/svelte/layout/balancedTiles.ts +85 -0
  199. package/src/components/svelte/tooling/CodeMirror.svelte +91 -0
  200. package/src/components/svelte/tooling/Playground.svelte +765 -0
  201. package/src/components/svelte/tooling/PlaygroundMarkdown.svelte +26 -0
  202. package/src/components/svelte/tooling/PlaygroundSlexCode.svelte +76 -0
  203. package/src/components/svelte/types.ts +17 -0
  204. package/src/styles/animation.css +98 -0
  205. package/src/styles/components/button.css +114 -0
  206. package/src/styles/components/choice.css +165 -0
  207. package/src/styles/components/select.css +260 -0
  208. package/src/styles/components/slider.css +125 -0
  209. package/src/styles/components/submit.css +9 -0
  210. package/src/styles/components/switch.css +114 -0
  211. package/src/styles/components/tabs.css +192 -0
  212. package/src/styles/components/text-input.css +245 -0
  213. package/src/styles/content.css +474 -0
  214. package/src/styles/disclosure.css +162 -0
  215. package/src/styles/display.css +259 -0
  216. package/src/styles/entry.css +34 -0
  217. package/src/styles/feedback.css +219 -0
  218. package/src/styles/input.css +8 -0
  219. package/src/styles/layout.css +365 -0
  220. package/src/styles/theme.css +31 -0
  221. package/src/styles/tooling.css +1009 -0
@@ -0,0 +1,1247 @@
1
+ /* components/button.css */
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
+
104
+ .slex-button-icon {
105
+ display: inline-flex;
106
+ width: 1.125rem;
107
+ height: 1.125rem;
108
+ color: currentColor;
109
+ }
110
+
111
+ .slex-button-icon svg {
112
+ display: block;
113
+ width: 100%;
114
+ height: 100%;
115
+ fill: currentColor;
116
+ }
117
+
118
+ /* components/submit.css */
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);
128
+ }
129
+
130
+ /* components/slider.css */
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
+
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);
249
+ }
250
+
251
+ .slex-slider-label-text {
252
+ display: inline-flex;
253
+ min-width: 0;
254
+ align-items: center;
255
+ gap: 0.375rem;
256
+ }
257
+
258
+ /* components/switch.css */
259
+
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
+
275
+ .slex-switch-label {
276
+ display: inline-flex;
277
+ align-items: center;
278
+ gap: 0.375rem;
279
+ min-width: 0;
280
+ 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;
308
+ 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;
319
+ 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;
373
+ }
374
+
375
+ /* components/text-input.css */
376
+
377
+ .slex-input-field {
378
+ box-sizing: border-box;
379
+ display: flex;
380
+ flex-direction: column;
381
+ gap: 0.375rem;
382
+ width: 100%;
383
+ min-width: 0;
384
+ }
385
+
386
+ .slex-input-label {
387
+ display: inline-flex;
388
+ align-items: center;
389
+ gap: 0.25rem;
390
+ width: fit-content;
391
+ color: var(--foreground);
392
+ font-size: 0.8125rem;
393
+ font-weight: 600;
394
+ line-height: 1.25;
395
+ }
396
+
397
+ .slex-input-field[data-required="true"] .slex-input-label::after {
398
+ content: "*";
399
+ color: var(--destructive);
400
+ font-weight: 700;
401
+ }
402
+
403
+ .slex-input-control {
404
+ display: flex;
405
+ align-items: stretch;
406
+ width: 100%;
407
+ min-width: 0;
408
+ }
409
+
410
+ .slex-input {
411
+ box-sizing: border-box;
412
+ display: inline-flex;
413
+ align-items: center;
414
+ flex: 1 1 auto;
415
+ min-width: 0;
416
+ width: 100%;
417
+ padding: 0.5rem 0.75rem;
418
+ border: 1px solid var(--input);
419
+ border-radius: var(--radius);
420
+ background: var(--background);
421
+ color: var(--foreground);
422
+ font-family: inherit;
423
+ font-size: 0.875rem;
424
+ line-height: 1.5;
425
+ outline: none;
426
+ transition: border-color 150ms ease, box-shadow 150ms ease;
427
+ }
428
+
429
+ .slex-input-control[data-has-unit="true"] .slex-input,
430
+ .slex-input-control[data-has-controls="true"] .slex-input {
431
+ border-top-right-radius: 0;
432
+ border-bottom-right-radius: 0;
433
+ }
434
+
435
+ .slex-input-unit {
436
+ box-sizing: border-box;
437
+ display: inline-flex;
438
+ align-items: center;
439
+ justify-content: center;
440
+ min-height: 2.5625rem;
441
+ padding: 0.5rem 0.75rem;
442
+ border: 1px solid var(--input);
443
+ border-left: 0;
444
+ border-radius: 0 var(--radius) var(--radius) 0;
445
+ background: var(--muted);
446
+ color: var(--muted-foreground);
447
+ font-size: 0.875rem;
448
+ font-weight: 600;
449
+ line-height: 1.5;
450
+ white-space: nowrap;
451
+ transition: border-color 150ms ease, box-shadow 150ms ease;
452
+ }
453
+
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
+ .slex-input::placeholder {
522
+ color: var(--muted-foreground);
523
+ }
524
+
525
+ .slex-input:focus {
526
+ border-color: var(--ring);
527
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
528
+ }
529
+
530
+ .slex-input[type="number"] {
531
+ appearance: textfield;
532
+ }
533
+
534
+ .slex-input[type="number"]::-webkit-outer-spin-button,
535
+ .slex-input[type="number"]::-webkit-inner-spin-button {
536
+ margin: 0;
537
+ appearance: none;
538
+ }
539
+
540
+ .slex-input[readonly] {
541
+ background: color-mix(in oklab, var(--muted) 42%, var(--background));
542
+ color: color-mix(in oklab, var(--foreground) 82%, var(--muted-foreground));
543
+ }
544
+
545
+ .slex-input-field[data-invalid="true"] .slex-input {
546
+ border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
547
+ }
548
+
549
+ .slex-input-field[data-invalid="true"] .slex-input:focus {
550
+ border-color: var(--destructive);
551
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
552
+ }
553
+
554
+ .slex-input-control:focus-within .slex-input-unit {
555
+ border-color: var(--ring);
556
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
557
+ }
558
+
559
+ .slex-input-control:focus-within .slex-input-step {
560
+ border-color: var(--ring);
561
+ }
562
+
563
+ .slex-input-control:focus-within .slex-input-controls {
564
+ border-color: var(--ring);
565
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--ring) 16%, transparent);
566
+ }
567
+
568
+ .slex-input-field[data-invalid="true"] .slex-input-unit {
569
+ border-color: color-mix(in oklab, var(--destructive) 72%, var(--input));
570
+ color: color-mix(in oklab, var(--destructive) 84%, var(--muted-foreground));
571
+ }
572
+
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);
583
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
584
+ }
585
+
586
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-step {
587
+ border-color: var(--destructive);
588
+ }
589
+
590
+ .slex-input-field[data-invalid="true"] .slex-input-control:focus-within .slex-input-controls {
591
+ border-color: var(--destructive);
592
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--destructive) 18%, transparent);
593
+ }
594
+
595
+ .slex-input[disabled] {
596
+ opacity: 0.5;
597
+ cursor: not-allowed;
598
+ }
599
+
600
+ .slex-input[disabled] + .slex-input-unit {
601
+ opacity: 0.5;
602
+ cursor: not-allowed;
603
+ }
604
+
605
+ .slex-input[disabled] ~ .slex-input-controls,
606
+ .slex-input[readonly] ~ .slex-input-controls {
607
+ opacity: 0.6;
608
+ }
609
+
610
+ .slex-input-description {
611
+ color: var(--muted-foreground);
612
+ font-size: 0.75rem;
613
+ line-height: 1.35;
614
+ }
615
+
616
+ .slex-input-error {
617
+ color: var(--destructive);
618
+ font-size: 0.75rem;
619
+ font-weight: 500;
620
+ line-height: 1.35;
621
+ }
622
+
623
+ /* components/select.css */
624
+
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
+
634
+ .slex-select-label {
635
+ display: inline-flex;
636
+ align-items: center;
637
+ gap: 0.375rem;
638
+ min-width: 0;
639
+ 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;
660
+ 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
+
694
+ .slex-select-value {
695
+ display: inline-flex;
696
+ align-items: center;
697
+ gap: 0.375rem;
698
+ min-width: 0;
699
+ 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;
752
+ border: 1px solid color-mix(in oklab, var(--border) 82%, transparent);
753
+ border-radius: var(--radius);
754
+ background: var(--popover, var(--background));
755
+ color: var(--popover-foreground, var(--foreground));
756
+ box-shadow: var(
757
+ --shadow-md,
758
+ 0 6px 16px rgb(0 0 0 / 0.12),
759
+ 0 2px 4px rgb(0 0 0 / 0.08)
760
+ );
761
+ list-style: none;
762
+ }
763
+
764
+ .slexkit-root .slex-select-menu {
765
+ margin: 0;
766
+ padding: 0.25rem;
767
+ list-style: none;
768
+ }
769
+
770
+ .slexkit-root .slex-select-menu li {
771
+ margin: 0;
772
+ list-style: none;
773
+ }
774
+
775
+ .slex-select-option {
776
+ display: flex;
777
+ align-items: center;
778
+ justify-content: space-between;
779
+ gap: 0.75rem;
780
+ min-height: 2rem;
781
+ padding: 0.5rem 0.75rem;
782
+ border-radius: calc(var(--radius) - 2px);
783
+ color: var(--popover-foreground, var(--foreground));
784
+ font-size: 0.875rem;
785
+ line-height: 1.25rem;
786
+ cursor: pointer;
787
+ user-select: none;
788
+ }
789
+
790
+ .slex-select-option:hover:not([data-disabled]),
791
+ .slex-select-option--active:not([data-disabled]) {
792
+ background: var(--accent);
793
+ color: var(--accent-foreground);
794
+ }
795
+
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
+ .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
+
811
+ .slex-select-option-label {
812
+ display: inline-flex;
813
+ align-items: center;
814
+ gap: 0.375rem;
815
+ min-width: 0;
816
+ overflow: hidden;
817
+ text-overflow: ellipsis;
818
+ white-space: nowrap;
819
+ }
820
+
821
+ .slex-select-check {
822
+ position: relative;
823
+ flex: 0 0 auto;
824
+ width: 0.875rem;
825
+ height: 0.875rem;
826
+ color: currentColor;
827
+ }
828
+
829
+ .slex-select-check::before {
830
+ position: absolute;
831
+ top: 0.25rem;
832
+ left: 0.18rem;
833
+ width: 0.5rem;
834
+ height: 0.28rem;
835
+ border-left: 1.75px solid currentColor;
836
+ border-bottom: 1.75px solid currentColor;
837
+ content: "";
838
+ transform: rotate(-45deg);
839
+ }
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%;
869
+ border-color: color-mix(in oklab, var(--border) 76%, transparent);
870
+ border-radius: calc(var(--radius) - 2px);
871
+ padding: 0.25rem;
872
+ box-shadow: var(
873
+ --shadow-sm,
874
+ 0 4px 10px rgb(0 0 0 / 0.1),
875
+ 0 1px 3px rgb(0 0 0 / 0.06)
876
+ );
877
+ }
878
+
879
+ .slex-select[data-variant="toolbar"] .slex-select-option {
880
+ height: 1.875rem;
881
+ border-radius: calc(var(--radius) - 4px);
882
+ font-size: 0.8125rem;
883
+ padding-inline: 0.75rem;
884
+ }
885
+
886
+ /* components/tabs.css */
887
+
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
+
898
+ .slex-tabs-list {
899
+ --slex-tabs-indicator-inline-inset: 12px;
900
+ --slex-tabs-indicator-block-inset: 8px;
901
+ position: relative;
902
+ 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
+
928
+ .slex-tabs-selected-indicator {
929
+ position: absolute;
930
+ z-index: 20;
931
+ top: 0;
932
+ left: 0;
933
+ width: var(--slex-tabs-indicator-width, 0);
934
+ height: var(--slex-tabs-indicator-height, 0.125rem);
935
+ border-radius: 999px;
936
+ background: var(--primary);
937
+ opacity: var(--slex-tabs-indicator-opacity, 0);
938
+ pointer-events: none;
939
+ transform: translate3d(var(--slex-tabs-indicator-x, 0), var(--slex-tabs-indicator-y, 0), 0);
940
+ }
941
+
942
+ .slex-tabs-list[data-indicator-ready="true"] .slex-tabs-selected-indicator {
943
+ transition:
944
+ transform var(--slex-tabs-indicator-duration, 140ms) var(--slex-motion-ease-standard, cubic-bezier(0.22, 1, 0.36, 1)),
945
+ width var(--slex-tabs-indicator-duration, 140ms) var(--slex-motion-ease-standard, cubic-bezier(0.22, 1, 0.36, 1)),
946
+ height var(--slex-tabs-indicator-duration, 140ms) var(--slex-motion-ease-standard, cubic-bezier(0.22, 1, 0.36, 1)),
947
+ opacity var(--slex-tabs-indicator-duration, 140ms) var(--slex-motion-ease-standard, cubic-bezier(0.22, 1, 0.36, 1));
948
+ }
949
+
950
+ .slex-tabs[data-orientation="vertical"] .slex-tabs-list {
951
+ flex-direction: column;
952
+ 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;
967
+ cursor: pointer;
968
+ outline: none;
969
+ user-select: none;
970
+ }
971
+
972
+ .slex-tabs-trigger--icon {
973
+ display: inline-grid;
974
+ width: var(--slex-control-height, 2.25rem);
975
+ min-height: var(--slex-control-height, 2.25rem);
976
+ place-items: center;
977
+ padding-inline: 0;
978
+ }
979
+
980
+ .slex-tabs-trigger--with-icon {
981
+ display: inline-flex;
982
+ align-items: center;
983
+ gap: 0.5rem;
984
+ }
985
+
986
+ .slex-tabs-trigger-icon {
987
+ display: inline-flex;
988
+ flex: 0 0 auto;
989
+ width: 1.125rem;
990
+ height: 1.125rem;
991
+ color: currentColor;
992
+ }
993
+
994
+ .slex-tabs-trigger-icon svg {
995
+ display: block;
996
+ width: 100%;
997
+ height: 100%;
998
+ fill: currentColor;
999
+ }
1000
+
1001
+ .slex-tabs-trigger:hover:not([data-disabled]) {
1002
+ background: transparent;
1003
+ color: var(--muted-foreground);
1004
+ }
1005
+
1006
+ .slex-tabs-trigger.slex-tabs-trigger--selected {
1007
+ color: var(--primary);
1008
+ }
1009
+
1010
+ .slex-tabs-trigger.slex-tabs-trigger--selected:hover:not([data-disabled]) {
1011
+ color: var(--primary);
1012
+ }
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
+
1024
+ .slex-tabs-content {
1025
+ margin-top: 0.75rem !important;
1026
+ border-radius: 0 !important;
1027
+ background: transparent !important;
1028
+ padding: 0 !important;
1029
+ color: var(--foreground);
1030
+ font-size: 0.875rem;
1031
+ line-height: 1.625;
1032
+ animation: slex-tabs-content-in 200ms ease-out;
1033
+ }
1034
+
1035
+ .slex-tabs[data-orientation="vertical"] .slex-tabs-content {
1036
+ margin-top: 0 !important;
1037
+ margin-left: 0.75rem !important;
1038
+ }
1039
+
1040
+ .slex-tabs-content:empty {
1041
+ display: none;
1042
+ }
1043
+
1044
+ @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
+
1079
+ }
1080
+
1081
+ /* components/choice.css */
1082
+
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
+
1095
+ .slex-checkbox-label,
1096
+ .slex-radio-label {
1097
+ display: inline-flex;
1098
+ align-items: center;
1099
+ gap: 0.375rem;
1100
+ min-width: 0;
1101
+ 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
+
1210
+ .slex-radio-group-label {
1211
+ display: inline-flex;
1212
+ align-items: center;
1213
+ gap: 0.375rem;
1214
+ min-width: 0;
1215
+ 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;
1247
+ }