@salmexio/ui 1.1.0 → 1.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.
- package/dist/dialogs/ContextMenu/ContextMenu.svelte +11 -1
- package/dist/dialogs/Modal/Modal.svelte +34 -1
- package/dist/feedback/Alert/Alert.svelte +54 -11
- package/dist/feedback/ProgressBar/ProgressBar.svelte +11 -8
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +2 -2
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -1
- package/dist/feedback/Skeleton/Skeleton.svelte +7 -3
- package/dist/feedback/Spinner/Spinner.svelte +2 -0
- package/dist/feedback/Toast/Toaster.svelte +35 -3
- package/dist/forms/Checkbox/Checkbox.svelte +30 -7
- package/dist/forms/Select/Select.svelte +19 -3
- package/dist/forms/Slider/Slider.svelte +41 -13
- package/dist/forms/Slider/Slider.svelte.d.ts +1 -1
- package/dist/forms/Slider/Slider.svelte.d.ts.map +1 -1
- package/dist/forms/TextInput/TextInput.svelte +19 -1
- package/dist/forms/Textarea/Textarea.svelte +18 -3
- package/dist/forms/Toggle/Toggle.svelte +70 -11
- package/dist/layout/Card/Card.svelte +125 -4
- package/dist/layout/Card/Card.svelte.d.ts +3 -0
- package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
- package/dist/layout/ThermalBackground/ThermalBackground.svelte +2 -40
- package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts +0 -2
- package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts.map +1 -1
- package/dist/navigation/CommandPalette/CommandPalette.svelte +37 -3
- package/dist/navigation/NavMenu/NavMenu.svelte +800 -0
- package/dist/navigation/NavMenu/NavMenu.svelte.d.ts +81 -0
- package/dist/navigation/NavMenu/NavMenu.svelte.d.ts.map +1 -0
- package/dist/navigation/NavMenu/index.d.ts +3 -0
- package/dist/navigation/NavMenu/index.d.ts.map +1 -0
- package/dist/navigation/NavMenu/index.js +1 -0
- package/dist/navigation/Tabs/Tabs.svelte +37 -8
- package/dist/navigation/index.d.ts +2 -0
- package/dist/navigation/index.d.ts.map +1 -1
- package/dist/navigation/index.js +1 -0
- package/dist/primitives/Badge/Badge.svelte +55 -10
- package/dist/primitives/Button/Button.svelte +220 -71
- package/dist/primitives/Tooltip/Tooltip.svelte +9 -1
- package/dist/styles/tokens.css +1 -0
- package/package.json +1 -1
|
@@ -386,8 +386,18 @@ onMount(() => {
|
|
|
386
386
|
max-width: 320px;
|
|
387
387
|
background: var(--sx-color-surface-2);
|
|
388
388
|
border: 1px solid var(--sx-color-border-strong);
|
|
389
|
+
border-top-color: rgba(255, 255, 255, 0.05);
|
|
389
390
|
border-radius: var(--sx-radius-md);
|
|
390
|
-
box-shadow:
|
|
391
|
+
box-shadow:
|
|
392
|
+
/* 3D extrusion */
|
|
393
|
+
0 1px 0 0 rgba(0, 0, 0, 0.2),
|
|
394
|
+
0 2px 0 0 rgba(0, 0, 0, 0.14),
|
|
395
|
+
0 3px 0 0 rgba(0, 0, 0, 0.08),
|
|
396
|
+
/* Deep ambient shadow */
|
|
397
|
+
0 6px 16px -3px rgba(0, 0, 0, 0.45),
|
|
398
|
+
0 12px 32px -6px rgba(0, 0, 0, 0.2),
|
|
399
|
+
/* Warm edge glow */
|
|
400
|
+
0 0 12px -6px rgba(255, 107, 53, 0.08);
|
|
391
401
|
backdrop-filter: var(--sx-glass-blur);
|
|
392
402
|
padding: var(--sx-space-1) 0;
|
|
393
403
|
outline: none;
|
|
@@ -263,11 +263,37 @@ const closeLabel = $derived(closeBtnAriaLabel ?? 'Close dialog');
|
|
|
263
263
|
background: var(--sx-color-surface);
|
|
264
264
|
border: 1px solid var(--sx-color-border-strong);
|
|
265
265
|
border-radius: var(--sx-radius-lg);
|
|
266
|
-
box-shadow:
|
|
266
|
+
box-shadow:
|
|
267
|
+
/* 3D extrusion underneath */
|
|
268
|
+
0 1px 0 0 rgba(0, 0, 0, 0.2),
|
|
269
|
+
0 2px 0 0 rgba(0, 0, 0, 0.15),
|
|
270
|
+
0 3px 0 0 rgba(0, 0, 0, 0.1),
|
|
271
|
+
0 4px 0 0 rgba(0, 0, 0, 0.06),
|
|
272
|
+
/* Deep ambient shadow */
|
|
273
|
+
0 8px 24px -4px rgba(0, 0, 0, 0.5),
|
|
274
|
+
0 16px 48px -8px rgba(0, 0, 0, 0.3),
|
|
275
|
+
/* Warm forge glow on edges */
|
|
276
|
+
0 0 32px -8px rgba(255, 107, 53, 0.08);
|
|
267
277
|
animation: sx-modal-scale-in 200ms ease-out;
|
|
268
278
|
overflow: hidden;
|
|
269
279
|
}
|
|
270
280
|
|
|
281
|
+
/* Top-lit bevel */
|
|
282
|
+
.sx-modal-container::before {
|
|
283
|
+
content: '';
|
|
284
|
+
position: absolute;
|
|
285
|
+
inset: 0;
|
|
286
|
+
border-radius: inherit;
|
|
287
|
+
background: linear-gradient(
|
|
288
|
+
180deg,
|
|
289
|
+
rgba(255, 255, 255, 0.04) 0%,
|
|
290
|
+
transparent 30%,
|
|
291
|
+
rgba(0, 0, 0, 0.04) 100%
|
|
292
|
+
);
|
|
293
|
+
pointer-events: none;
|
|
294
|
+
z-index: 5;
|
|
295
|
+
}
|
|
296
|
+
|
|
271
297
|
@keyframes sx-modal-scale-in {
|
|
272
298
|
from {
|
|
273
299
|
opacity: 0;
|
|
@@ -313,6 +339,8 @@ const closeLabel = $derived(closeBtnAriaLabel ?? 'Close dialog');
|
|
|
313
339
|
HEADER
|
|
314
340
|
======================================== */
|
|
315
341
|
.sx-modal-header {
|
|
342
|
+
position: relative;
|
|
343
|
+
z-index: 1;
|
|
316
344
|
display: flex;
|
|
317
345
|
align-items: center;
|
|
318
346
|
justify-content: space-between;
|
|
@@ -333,6 +361,7 @@ const closeLabel = $derived(closeBtnAriaLabel ?? 'Close dialog');
|
|
|
333
361
|
.sx-modal-title-wrap:focus-visible {
|
|
334
362
|
outline: 2px solid var(--sx-color-primary);
|
|
335
363
|
outline-offset: 2px;
|
|
364
|
+
border-radius: var(--sx-radius-sm);
|
|
336
365
|
}
|
|
337
366
|
|
|
338
367
|
.sx-modal-title {
|
|
@@ -384,6 +413,8 @@ const closeLabel = $derived(closeBtnAriaLabel ?? 'Close dialog');
|
|
|
384
413
|
BODY
|
|
385
414
|
======================================== */
|
|
386
415
|
.sx-modal-body {
|
|
416
|
+
position: relative;
|
|
417
|
+
z-index: 1;
|
|
387
418
|
padding: var(--sx-space-6);
|
|
388
419
|
flex: 1;
|
|
389
420
|
min-height: 0;
|
|
@@ -394,6 +425,8 @@ const closeLabel = $derived(closeBtnAriaLabel ?? 'Close dialog');
|
|
|
394
425
|
FOOTER
|
|
395
426
|
======================================== */
|
|
396
427
|
.sx-modal-footer {
|
|
428
|
+
position: relative;
|
|
429
|
+
z-index: 1;
|
|
397
430
|
display: flex;
|
|
398
431
|
align-items: center;
|
|
399
432
|
justify-content: flex-end;
|
|
@@ -157,20 +157,41 @@ function toggleExpanded() {
|
|
|
157
157
|
</div>
|
|
158
158
|
|
|
159
159
|
<style>
|
|
160
|
-
/* INFRARED:
|
|
160
|
+
/* INFRARED: 3D status plate — left accent border, extrusion, bevel */
|
|
161
161
|
.sx-alert {
|
|
162
|
+
position: relative;
|
|
162
163
|
display: flex;
|
|
163
164
|
gap: var(--sx-space-3);
|
|
164
165
|
padding: var(--sx-space-4);
|
|
165
166
|
background: var(--sx-color-surface);
|
|
166
167
|
border: 1px solid var(--sx-color-border);
|
|
167
|
-
border-left:
|
|
168
|
+
border-left: 3px solid var(--sx-color-border-strong);
|
|
168
169
|
border-radius: var(--sx-radius-md);
|
|
169
170
|
font-family: var(--sx-font-body);
|
|
171
|
+
box-shadow:
|
|
172
|
+
0 1px 0 0 rgba(0, 0, 0, 0.15),
|
|
173
|
+
0 2px 0 0 rgba(0, 0, 0, 0.1),
|
|
174
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.3);
|
|
170
175
|
transition: box-shadow var(--sx-transition-fast);
|
|
171
176
|
animation: sx-alert-in var(--sx-duration-base) var(--sx-ease-out) both;
|
|
172
177
|
}
|
|
173
178
|
|
|
179
|
+
/* Top-lit bevel */
|
|
180
|
+
.sx-alert::before {
|
|
181
|
+
content: '';
|
|
182
|
+
position: absolute;
|
|
183
|
+
inset: 0;
|
|
184
|
+
border-radius: inherit;
|
|
185
|
+
background: linear-gradient(
|
|
186
|
+
180deg,
|
|
187
|
+
rgba(255, 255, 255, 0.04) 0%,
|
|
188
|
+
transparent 40%,
|
|
189
|
+
rgba(0, 0, 0, 0.03) 100%
|
|
190
|
+
);
|
|
191
|
+
pointer-events: none;
|
|
192
|
+
z-index: 0;
|
|
193
|
+
}
|
|
194
|
+
|
|
174
195
|
.sx-alert-standard {
|
|
175
196
|
border-radius: var(--sx-radius-md);
|
|
176
197
|
}
|
|
@@ -190,6 +211,8 @@ function toggleExpanded() {
|
|
|
190
211
|
}
|
|
191
212
|
|
|
192
213
|
.sx-alert-icon {
|
|
214
|
+
position: relative;
|
|
215
|
+
z-index: 1;
|
|
193
216
|
flex-shrink: 0;
|
|
194
217
|
display: flex;
|
|
195
218
|
align-items: flex-start;
|
|
@@ -197,6 +220,8 @@ function toggleExpanded() {
|
|
|
197
220
|
}
|
|
198
221
|
|
|
199
222
|
.sx-alert-content {
|
|
223
|
+
position: relative;
|
|
224
|
+
z-index: 1;
|
|
200
225
|
flex: 1;
|
|
201
226
|
min-width: 0;
|
|
202
227
|
display: flex;
|
|
@@ -251,8 +276,8 @@ function toggleExpanded() {
|
|
|
251
276
|
}
|
|
252
277
|
|
|
253
278
|
.sx-alert-title-btn:focus-visible {
|
|
254
|
-
outline:
|
|
255
|
-
|
|
279
|
+
outline: 2px solid var(--sx-color-primary);
|
|
280
|
+
outline-offset: 2px;
|
|
256
281
|
}
|
|
257
282
|
|
|
258
283
|
.sx-alert-expand-icon {
|
|
@@ -264,6 +289,8 @@ function toggleExpanded() {
|
|
|
264
289
|
|
|
265
290
|
/* Dismiss button — transparent, minimal */
|
|
266
291
|
.sx-alert-dismiss {
|
|
292
|
+
position: relative;
|
|
293
|
+
z-index: 1;
|
|
267
294
|
flex-shrink: 0;
|
|
268
295
|
display: flex;
|
|
269
296
|
align-items: center;
|
|
@@ -288,14 +315,18 @@ function toggleExpanded() {
|
|
|
288
315
|
}
|
|
289
316
|
|
|
290
317
|
.sx-alert-dismiss:focus-visible {
|
|
291
|
-
outline:
|
|
292
|
-
|
|
318
|
+
outline: 2px solid var(--sx-color-primary);
|
|
319
|
+
outline-offset: 2px;
|
|
293
320
|
}
|
|
294
321
|
|
|
295
|
-
/* Type: success */
|
|
322
|
+
/* Type: success — green accent, green-tinted extrusion */
|
|
296
323
|
.sx-alert-success {
|
|
297
324
|
background: var(--sx-color-green-subtle);
|
|
298
325
|
border-left-color: var(--sx-color-green);
|
|
326
|
+
box-shadow:
|
|
327
|
+
0 1px 0 0 rgba(34, 120, 69, 0.25),
|
|
328
|
+
0 2px 0 0 rgba(34, 120, 69, 0.15),
|
|
329
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.3);
|
|
299
330
|
}
|
|
300
331
|
|
|
301
332
|
.sx-alert-success .sx-alert-icon {
|
|
@@ -306,10 +337,14 @@ function toggleExpanded() {
|
|
|
306
337
|
color: var(--sx-color-text);
|
|
307
338
|
}
|
|
308
339
|
|
|
309
|
-
/* Type: error */
|
|
340
|
+
/* Type: error — red accent, crimson-tinted extrusion */
|
|
310
341
|
.sx-alert-error {
|
|
311
342
|
background: var(--sx-color-red-subtle);
|
|
312
343
|
border-left-color: var(--sx-color-red);
|
|
344
|
+
box-shadow:
|
|
345
|
+
0 1px 0 0 rgba(180, 30, 30, 0.25),
|
|
346
|
+
0 2px 0 0 rgba(140, 20, 20, 0.15),
|
|
347
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.3);
|
|
313
348
|
}
|
|
314
349
|
|
|
315
350
|
.sx-alert-error .sx-alert-icon {
|
|
@@ -320,10 +355,14 @@ function toggleExpanded() {
|
|
|
320
355
|
color: var(--sx-color-text);
|
|
321
356
|
}
|
|
322
357
|
|
|
323
|
-
/* Type: warning */
|
|
358
|
+
/* Type: warning — brass accent, brass-tinted extrusion */
|
|
324
359
|
.sx-alert-warning {
|
|
325
360
|
background: var(--sx-color-brass-subtle);
|
|
326
361
|
border-left-color: var(--sx-color-secondary);
|
|
362
|
+
box-shadow:
|
|
363
|
+
0 1px 0 0 rgba(160, 134, 62, 0.25),
|
|
364
|
+
0 2px 0 0 rgba(130, 108, 50, 0.15),
|
|
365
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.3);
|
|
327
366
|
}
|
|
328
367
|
|
|
329
368
|
.sx-alert-warning .sx-alert-icon {
|
|
@@ -334,10 +373,14 @@ function toggleExpanded() {
|
|
|
334
373
|
color: var(--sx-color-text);
|
|
335
374
|
}
|
|
336
375
|
|
|
337
|
-
/* Type: info */
|
|
376
|
+
/* Type: info — vermilion accent, warm-tinted extrusion */
|
|
338
377
|
.sx-alert-info {
|
|
339
378
|
background: var(--sx-color-primary-subtle);
|
|
340
379
|
border-left-color: var(--sx-color-primary);
|
|
380
|
+
box-shadow:
|
|
381
|
+
0 1px 0 0 rgba(200, 85, 30, 0.25),
|
|
382
|
+
0 2px 0 0 rgba(160, 65, 20, 0.15),
|
|
383
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.3);
|
|
341
384
|
}
|
|
342
385
|
|
|
343
386
|
.sx-alert-info .sx-alert-icon {
|
|
@@ -348,7 +391,7 @@ function toggleExpanded() {
|
|
|
348
391
|
color: var(--sx-color-text);
|
|
349
392
|
}
|
|
350
393
|
|
|
351
|
-
/* Type: neutral */
|
|
394
|
+
/* Type: neutral — subtle neutral extrusion */
|
|
352
395
|
.sx-alert-neutral {
|
|
353
396
|
background: var(--sx-color-surface);
|
|
354
397
|
border-left-color: var(--sx-color-border-strong);
|
|
@@ -7,13 +7,13 @@
|
|
|
7
7
|
@example
|
|
8
8
|
<ProgressBar value={65} label="Upload" />
|
|
9
9
|
<ProgressBar indeterminate label="Loading..." />
|
|
10
|
-
<ProgressBar value={30} max={50} showValue color="
|
|
10
|
+
<ProgressBar value={30} max={50} showValue color="primary" />
|
|
11
11
|
-->
|
|
12
12
|
<script lang="ts">
|
|
13
13
|
import { cn } from '../../utils/cn.js';
|
|
14
14
|
|
|
15
15
|
type ProgressSize = 'sm' | 'md' | 'lg';
|
|
16
|
-
type ProgressColor = '
|
|
16
|
+
type ProgressColor = 'primary' | 'green' | 'brass' | 'red' | 'teal';
|
|
17
17
|
|
|
18
18
|
interface Props {
|
|
19
19
|
/** Current value (0–max). Ignored when indeterminate. */
|
|
@@ -48,7 +48,7 @@ let {
|
|
|
48
48
|
showValue = false,
|
|
49
49
|
formatValue,
|
|
50
50
|
size = 'md',
|
|
51
|
-
color = '
|
|
51
|
+
color = 'primary',
|
|
52
52
|
class: className = '',
|
|
53
53
|
testId
|
|
54
54
|
}: Props = $props();
|
|
@@ -159,12 +159,15 @@ const labelId = $derived(label ? `${stableId}-label` : undefined);
|
|
|
159
159
|
align-self: flex-end;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
-
/* Track */
|
|
162
|
+
/* Track — recessed channel */
|
|
163
163
|
.sx-progress-track {
|
|
164
164
|
width: 100%;
|
|
165
165
|
background: var(--sx-color-surface-2);
|
|
166
166
|
border-radius: var(--sx-radius-full);
|
|
167
167
|
overflow: hidden;
|
|
168
|
+
box-shadow:
|
|
169
|
+
inset 0 1px 2px rgba(0, 0, 0, 0.3),
|
|
170
|
+
inset 0 0 0 1px rgba(0, 0, 0, 0.06);
|
|
168
171
|
}
|
|
169
172
|
|
|
170
173
|
.sx-progress-sm {
|
|
@@ -201,8 +204,8 @@ const labelId = $derived(label ? `${stableId}-label` : undefined);
|
|
|
201
204
|
}
|
|
202
205
|
|
|
203
206
|
/* Colors */
|
|
204
|
-
.sx-progress-color-
|
|
205
|
-
background:
|
|
207
|
+
.sx-progress-color-primary {
|
|
208
|
+
background: linear-gradient(90deg, #FF6B35, #C8A84E);
|
|
206
209
|
box-shadow: 0 0 8px rgba(255, 107, 53, 0.2);
|
|
207
210
|
}
|
|
208
211
|
|
|
@@ -211,7 +214,7 @@ const labelId = $derived(label ? `${stableId}-label` : undefined);
|
|
|
211
214
|
box-shadow: 0 0 8px rgba(74, 222, 128, 0.2);
|
|
212
215
|
}
|
|
213
216
|
|
|
214
|
-
.sx-progress-color-
|
|
217
|
+
.sx-progress-color-brass {
|
|
215
218
|
background: var(--sx-color-secondary);
|
|
216
219
|
box-shadow: 0 0 8px rgba(200, 168, 78, 0.2);
|
|
217
220
|
}
|
|
@@ -221,7 +224,7 @@ const labelId = $derived(label ? `${stableId}-label` : undefined);
|
|
|
221
224
|
box-shadow: 0 0 8px rgba(220, 38, 38, 0.2);
|
|
222
225
|
}
|
|
223
226
|
|
|
224
|
-
.sx-progress-color-
|
|
227
|
+
.sx-progress-color-teal {
|
|
225
228
|
background: var(--sx-color-teal);
|
|
226
229
|
box-shadow: 0 0 8px rgba(61, 139, 139, 0.2);
|
|
227
230
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
type ProgressSize = 'sm' | 'md' | 'lg';
|
|
2
|
-
type ProgressColor = '
|
|
2
|
+
type ProgressColor = 'primary' | 'green' | 'brass' | 'red' | 'teal';
|
|
3
3
|
interface Props {
|
|
4
4
|
/** Current value (0–max). Ignored when indeterminate. */
|
|
5
5
|
value?: number;
|
|
@@ -32,7 +32,7 @@ interface Props {
|
|
|
32
32
|
* @example
|
|
33
33
|
* <ProgressBar value={65} label="Upload" />
|
|
34
34
|
* <ProgressBar indeterminate label="Loading..." />
|
|
35
|
-
* <ProgressBar value={30} max={50} showValue color="
|
|
35
|
+
* <ProgressBar value={30} max={50} showValue color="primary" />
|
|
36
36
|
*/
|
|
37
37
|
declare const ProgressBar: import("svelte").Component<Props, {}, "">;
|
|
38
38
|
type ProgressBar = ReturnType<typeof ProgressBar>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProgressBar.svelte.d.ts","sourceRoot":"","sources":["../../../src/feedback/ProgressBar/ProgressBar.svelte.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,KAAK,aAAa,GAAG,
|
|
1
|
+
{"version":3,"file":"ProgressBar.svelte.d.ts","sourceRoot":"","sources":["../../../src/feedback/ProgressBar/ProgressBar.svelte.ts"],"names":[],"mappings":"AAMA,KAAK,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACvC,KAAK,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAEpE,UAAU,KAAK;IACd,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,+DAA+D;IAC/D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC;IACrD,sBAAsB;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,oBAAoB;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAsED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
|
|
@@ -112,6 +112,10 @@ const lineWidths = $derived(
|
|
|
112
112
|
|
|
113
113
|
.sx-skeleton-bone {
|
|
114
114
|
background: var(--sx-color-surface-2);
|
|
115
|
+
/* Recessed carved-out placeholder */
|
|
116
|
+
box-shadow:
|
|
117
|
+
inset 0 1px 2px rgba(0, 0, 0, 0.2),
|
|
118
|
+
inset 0 0 0 1px rgba(0, 0, 0, 0.04);
|
|
115
119
|
}
|
|
116
120
|
|
|
117
121
|
.sx-skeleton-shimmer {
|
|
@@ -127,9 +131,9 @@ const lineWidths = $derived(
|
|
|
127
131
|
100deg,
|
|
128
132
|
transparent 0%,
|
|
129
133
|
transparent 35%,
|
|
130
|
-
rgba(255,
|
|
131
|
-
|
|
132
|
-
rgba(255,
|
|
134
|
+
rgba(255, 107, 53, 0.02) 45%,
|
|
135
|
+
rgba(200, 168, 78, 0.04) 50%,
|
|
136
|
+
rgba(255, 107, 53, 0.02) 55%,
|
|
133
137
|
transparent 65%,
|
|
134
138
|
transparent 100%
|
|
135
139
|
);
|
|
@@ -214,6 +214,7 @@ const config = $derived(sizeConfig[size]);
|
|
|
214
214
|
|
|
215
215
|
.sx-spinner-arc {
|
|
216
216
|
transform-origin: center;
|
|
217
|
+
filter: drop-shadow(0 0 3px currentColor);
|
|
217
218
|
}
|
|
218
219
|
|
|
219
220
|
@keyframes sx-spin {
|
|
@@ -284,6 +285,7 @@ const config = $derived(sizeConfig[size]);
|
|
|
284
285
|
height: 28%;
|
|
285
286
|
border-radius: 50%;
|
|
286
287
|
background: currentColor;
|
|
288
|
+
box-shadow: 0 0 8px currentColor;
|
|
287
289
|
animation: sx-pulse-dot 1.5s ease-out infinite;
|
|
288
290
|
}
|
|
289
291
|
|
|
@@ -212,9 +212,10 @@ onMount(() => {
|
|
|
212
212
|
left: 0;
|
|
213
213
|
}
|
|
214
214
|
|
|
215
|
-
/* ========== TOAST ========== */
|
|
215
|
+
/* ========== TOAST — 3D floating notification plate ========== */
|
|
216
216
|
.sx-toast {
|
|
217
217
|
pointer-events: auto;
|
|
218
|
+
position: relative;
|
|
218
219
|
display: flex;
|
|
219
220
|
align-items: flex-start;
|
|
220
221
|
gap: var(--sx-space-3);
|
|
@@ -223,8 +224,15 @@ onMount(() => {
|
|
|
223
224
|
backdrop-filter: var(--sx-glass-blur);
|
|
224
225
|
-webkit-backdrop-filter: var(--sx-glass-blur);
|
|
225
226
|
border: 1px solid var(--sx-color-border-strong);
|
|
227
|
+
border-top-color: rgba(255, 255, 255, 0.05);
|
|
226
228
|
border-radius: var(--sx-radius-md);
|
|
227
|
-
box-shadow:
|
|
229
|
+
box-shadow:
|
|
230
|
+
/* 3D extrusion */
|
|
231
|
+
0 1px 0 0 rgba(0, 0, 0, 0.2),
|
|
232
|
+
0 2px 0 0 rgba(0, 0, 0, 0.12),
|
|
233
|
+
0 3px 0 0 rgba(0, 0, 0, 0.06),
|
|
234
|
+
/* Ambient shadow */
|
|
235
|
+
0 6px 16px -3px rgba(0, 0, 0, 0.4);
|
|
228
236
|
border-left: 3px solid var(--sx-color-text-secondary);
|
|
229
237
|
animation: sx-toast-in 250ms var(--sx-ease-out) both;
|
|
230
238
|
outline: none;
|
|
@@ -239,21 +247,45 @@ onMount(() => {
|
|
|
239
247
|
animation: sx-toast-out 150ms ease-in both;
|
|
240
248
|
}
|
|
241
249
|
|
|
242
|
-
/* Type border colors */
|
|
250
|
+
/* Type border colors + variant-tinted extrusion */
|
|
243
251
|
.sx-toast-success {
|
|
244
252
|
border-left-color: var(--sx-color-green);
|
|
253
|
+
box-shadow:
|
|
254
|
+
0 1px 0 0 rgba(34, 120, 69, 0.2),
|
|
255
|
+
0 2px 0 0 rgba(34, 120, 69, 0.1),
|
|
256
|
+
0 3px 0 0 rgba(0, 0, 0, 0.06),
|
|
257
|
+
0 6px 16px -3px rgba(0, 0, 0, 0.4),
|
|
258
|
+
0 0 8px -4px rgba(34, 197, 94, 0.12);
|
|
245
259
|
}
|
|
246
260
|
|
|
247
261
|
.sx-toast-error {
|
|
248
262
|
border-left-color: var(--sx-color-red);
|
|
263
|
+
box-shadow:
|
|
264
|
+
0 1px 0 0 rgba(180, 30, 30, 0.2),
|
|
265
|
+
0 2px 0 0 rgba(140, 20, 20, 0.1),
|
|
266
|
+
0 3px 0 0 rgba(0, 0, 0, 0.06),
|
|
267
|
+
0 6px 16px -3px rgba(0, 0, 0, 0.4),
|
|
268
|
+
0 0 8px -4px rgba(220, 38, 38, 0.12);
|
|
249
269
|
}
|
|
250
270
|
|
|
251
271
|
.sx-toast-warning {
|
|
252
272
|
border-left-color: var(--sx-color-secondary);
|
|
273
|
+
box-shadow:
|
|
274
|
+
0 1px 0 0 rgba(160, 134, 62, 0.2),
|
|
275
|
+
0 2px 0 0 rgba(130, 108, 50, 0.1),
|
|
276
|
+
0 3px 0 0 rgba(0, 0, 0, 0.06),
|
|
277
|
+
0 6px 16px -3px rgba(0, 0, 0, 0.4),
|
|
278
|
+
0 0 8px -4px rgba(200, 168, 78, 0.12);
|
|
253
279
|
}
|
|
254
280
|
|
|
255
281
|
.sx-toast-info {
|
|
256
282
|
border-left-color: var(--sx-color-primary);
|
|
283
|
+
box-shadow:
|
|
284
|
+
0 1px 0 0 rgba(200, 85, 30, 0.2),
|
|
285
|
+
0 2px 0 0 rgba(160, 65, 20, 0.1),
|
|
286
|
+
0 3px 0 0 rgba(0, 0, 0, 0.06),
|
|
287
|
+
0 6px 16px -3px rgba(0, 0, 0, 0.4),
|
|
288
|
+
0 0 8px -4px rgba(255, 107, 53, 0.12);
|
|
257
289
|
}
|
|
258
290
|
|
|
259
291
|
/* Icon */
|
|
@@ -185,6 +185,10 @@ function handleChange(e: Event) {
|
|
|
185
185
|
background: var(--sx-color-surface);
|
|
186
186
|
border: 1px solid var(--sx-color-border-strong);
|
|
187
187
|
border-radius: var(--sx-radius-sm);
|
|
188
|
+
/* Recessed well when unchecked */
|
|
189
|
+
box-shadow:
|
|
190
|
+
inset 0 1px 3px rgba(0, 0, 0, 0.3),
|
|
191
|
+
inset 0 0 0 1px rgba(0, 0, 0, 0.06);
|
|
188
192
|
transition: background var(--sx-transition-fast), border-color var(--sx-transition-fast),
|
|
189
193
|
box-shadow var(--sx-transition-fast);
|
|
190
194
|
color: #fff;
|
|
@@ -216,16 +220,22 @@ function handleChange(e: Event) {
|
|
|
216
220
|
padding: 3px 4px;
|
|
217
221
|
}
|
|
218
222
|
|
|
219
|
-
/* Checked --
|
|
223
|
+
/* Checked -- forge gradient fill, raised from the well */
|
|
220
224
|
.sx-checkbox-box-checked {
|
|
221
|
-
background:
|
|
222
|
-
border-color:
|
|
225
|
+
background: linear-gradient(135deg, #FF6B35, #C8A84E);
|
|
226
|
+
border-color: rgba(255, 107, 53, 0.6);
|
|
227
|
+
box-shadow:
|
|
228
|
+
0 1px 0 0 rgba(0, 0, 0, 0.15),
|
|
229
|
+
0 0 6px -2px rgba(255, 107, 53, 0.3);
|
|
223
230
|
}
|
|
224
231
|
|
|
225
|
-
/* Indeterminate -- same
|
|
232
|
+
/* Indeterminate -- same forge gradient */
|
|
226
233
|
.sx-checkbox-box-indeterminate {
|
|
227
|
-
background:
|
|
228
|
-
border-color:
|
|
234
|
+
background: linear-gradient(135deg, #FF6B35, #C8A84E);
|
|
235
|
+
border-color: rgba(255, 107, 53, 0.6);
|
|
236
|
+
box-shadow:
|
|
237
|
+
0 1px 0 0 rgba(0, 0, 0, 0.15),
|
|
238
|
+
0 0 6px -2px rgba(255, 107, 53, 0.3);
|
|
229
239
|
}
|
|
230
240
|
|
|
231
241
|
/* Hover -- border brightens on unchecked box */
|
|
@@ -233,10 +243,20 @@ function handleChange(e: Event) {
|
|
|
233
243
|
border-color: var(--sx-color-border-hover);
|
|
234
244
|
}
|
|
235
245
|
|
|
236
|
-
/* Focus -- primary outline */
|
|
246
|
+
/* Focus -- primary outline with forge glow */
|
|
237
247
|
.sx-checkbox-input:focus-visible + .sx-checkbox-box {
|
|
238
248
|
outline: 2px solid var(--sx-color-primary);
|
|
239
249
|
outline-offset: 2px;
|
|
250
|
+
box-shadow:
|
|
251
|
+
inset 0 1px 3px rgba(0, 0, 0, 0.3),
|
|
252
|
+
0 0 12px -4px rgba(255, 107, 53, 0.2);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
.sx-checkbox-input:focus-visible + .sx-checkbox-box-checked,
|
|
256
|
+
.sx-checkbox-input:focus-visible + .sx-checkbox-box-indeterminate {
|
|
257
|
+
box-shadow:
|
|
258
|
+
0 1px 0 0 rgba(0, 0, 0, 0.15),
|
|
259
|
+
0 0 10px -2px rgba(255, 107, 53, 0.4);
|
|
240
260
|
}
|
|
241
261
|
|
|
242
262
|
/* High contrast / forced colors: solid outline so focus is visible (APG) */
|
|
@@ -249,6 +269,9 @@ function handleChange(e: Event) {
|
|
|
249
269
|
|
|
250
270
|
.sx-checkbox-box-error {
|
|
251
271
|
border-color: var(--sx-color-red);
|
|
272
|
+
box-shadow:
|
|
273
|
+
inset 0 1px 3px rgba(0, 0, 0, 0.3),
|
|
274
|
+
0 0 8px -4px rgba(220, 38, 38, 0.2);
|
|
252
275
|
}
|
|
253
276
|
|
|
254
277
|
.sx-checkbox-content {
|
|
@@ -623,6 +623,7 @@ onMount(() => {
|
|
|
623
623
|
/* ========================================
|
|
624
624
|
TRIGGER -- Same style as TextInput
|
|
625
625
|
======================================== */
|
|
626
|
+
/* Trigger — recessed channel, same as TextInput */
|
|
626
627
|
.sx-select-trigger {
|
|
627
628
|
display: flex;
|
|
628
629
|
align-items: center;
|
|
@@ -638,6 +639,11 @@ onMount(() => {
|
|
|
638
639
|
cursor: pointer;
|
|
639
640
|
text-align: left;
|
|
640
641
|
transition: border-color var(--sx-transition-fast), box-shadow var(--sx-transition-fast);
|
|
642
|
+
|
|
643
|
+
/* Recessed inset */
|
|
644
|
+
box-shadow:
|
|
645
|
+
inset 0 1px 3px rgba(0, 0, 0, 0.3),
|
|
646
|
+
inset 0 0 0 1px rgba(0, 0, 0, 0.06);
|
|
641
647
|
}
|
|
642
648
|
|
|
643
649
|
.sx-select-trigger:hover:not(:disabled) {
|
|
@@ -647,22 +653,32 @@ onMount(() => {
|
|
|
647
653
|
.sx-select-trigger:focus-visible {
|
|
648
654
|
outline: none;
|
|
649
655
|
border-color: var(--sx-color-primary);
|
|
650
|
-
box-shadow:
|
|
656
|
+
box-shadow:
|
|
657
|
+
inset 0 1px 2px rgba(0, 0, 0, 0.2),
|
|
658
|
+
0 0 0 3px var(--sx-color-primary-ring),
|
|
659
|
+
0 0 12px -4px rgba(255, 107, 53, 0.15);
|
|
651
660
|
}
|
|
652
661
|
|
|
653
662
|
.sx-select-trigger-open {
|
|
654
663
|
border-color: var(--sx-color-primary);
|
|
655
|
-
box-shadow:
|
|
664
|
+
box-shadow:
|
|
665
|
+
inset 0 1px 2px rgba(0, 0, 0, 0.2),
|
|
666
|
+
0 0 0 3px var(--sx-color-primary-ring),
|
|
667
|
+
0 0 12px -4px rgba(255, 107, 53, 0.15);
|
|
656
668
|
}
|
|
657
669
|
|
|
658
670
|
.sx-select-trigger-error {
|
|
659
671
|
border-color: var(--sx-color-red);
|
|
660
|
-
box-shadow:
|
|
672
|
+
box-shadow:
|
|
673
|
+
inset 0 1px 2px rgba(0, 0, 0, 0.2),
|
|
674
|
+
0 0 0 3px var(--sx-color-red-ring),
|
|
675
|
+
0 0 10px -4px rgba(220, 38, 38, 0.15);
|
|
661
676
|
}
|
|
662
677
|
|
|
663
678
|
.sx-select-trigger-disabled {
|
|
664
679
|
opacity: 0.5;
|
|
665
680
|
cursor: not-allowed;
|
|
681
|
+
box-shadow: none;
|
|
666
682
|
}
|
|
667
683
|
|
|
668
684
|
/* ========================================
|