@salmexio/ui 1.0.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/README.md +1 -1
- package/dist/dialogs/ContextMenu/ContextMenu.svelte +17 -7
- package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts +1 -1
- package/dist/dialogs/Modal/Modal.svelte +37 -4
- package/dist/dialogs/Modal/Modal.svelte.d.ts +1 -1
- package/dist/feedback/Alert/Alert.svelte +67 -19
- package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
- package/dist/feedback/ProgressBar/ProgressBar.svelte +33 -11
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +3 -3
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -1
- package/dist/feedback/Skeleton/Skeleton.svelte +12 -4
- package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +1 -1
- package/dist/feedback/Spinner/Spinner.svelte +5 -3
- package/dist/feedback/Spinner/Spinner.svelte.d.ts +2 -2
- package/dist/feedback/Toast/Toaster.svelte +45 -13
- package/dist/feedback/Toast/Toaster.svelte.d.ts +1 -1
- package/dist/forms/Checkbox/Checkbox.svelte +37 -9
- package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
- package/dist/forms/Select/Select.svelte +28 -12
- package/dist/forms/Select/Select.svelte.d.ts +1 -1
- package/dist/forms/Slider/Slider.svelte +66 -38
- package/dist/forms/Slider/Slider.svelte.d.ts +2 -2
- package/dist/forms/Slider/Slider.svelte.d.ts.map +1 -1
- package/dist/forms/TextInput/TextInput.svelte +35 -7
- package/dist/forms/TextInput/TextInput.svelte.d.ts +1 -1
- package/dist/forms/Textarea/Textarea.svelte +22 -7
- package/dist/forms/Textarea/Textarea.svelte.d.ts +1 -1
- package/dist/forms/Toggle/Toggle.svelte +71 -12
- package/dist/forms/Toggle/Toggle.svelte.d.ts +1 -1
- package/dist/layout/Card/Card.svelte +128 -5
- package/dist/layout/Card/Card.svelte.d.ts +4 -1
- package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
- package/dist/layout/Container/Container.svelte +1 -1
- package/dist/layout/Container/Container.svelte.d.ts +1 -1
- package/dist/layout/ThermalBackground/ThermalBackground.svelte +275 -0
- package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts +14 -0
- package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts.map +1 -0
- package/dist/layout/ThermalBackground/index.d.ts +2 -0
- package/dist/layout/ThermalBackground/index.d.ts.map +1 -0
- package/dist/layout/ThermalBackground/index.js +1 -0
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +1 -0
- package/dist/navigation/CommandPalette/CommandPalette.svelte +45 -11
- package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +1 -1
- 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 +73 -11
- package/dist/navigation/Tabs/Tabs.svelte.d.ts +1 -1
- 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 +68 -21
- package/dist/primitives/Badge/Badge.svelte.d.ts +1 -1
- package/dist/primitives/Button/Button.svelte +254 -34
- package/dist/primitives/Button/Button.svelte.d.ts +1 -1
- package/dist/primitives/Tooltip/Tooltip.svelte +10 -2
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +1 -1
- package/dist/styles/tokens.css +202 -64
- package/package.json +3 -3
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Button
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Glassmorphism button with glow effects.
|
|
5
5
|
Clean geometry, expressive energy, world-class accessibility.
|
|
6
6
|
|
|
7
7
|
@example
|
|
@@ -107,7 +107,7 @@ const isDisabled = $derived(disabled);
|
|
|
107
107
|
|
|
108
108
|
<style>
|
|
109
109
|
/* ========================================
|
|
110
|
-
BASE BUTTON -
|
|
110
|
+
BASE BUTTON - INFRARED
|
|
111
111
|
======================================== */
|
|
112
112
|
.sx-btn {
|
|
113
113
|
position: relative;
|
|
@@ -134,11 +134,11 @@ const isDisabled = $derived(disabled);
|
|
|
134
134
|
|
|
135
135
|
/* Focus */
|
|
136
136
|
.sx-btn:focus-visible {
|
|
137
|
-
outline: 2px solid var(--sx-color-
|
|
137
|
+
outline: 2px solid var(--sx-color-primary);
|
|
138
138
|
outline-offset: 2px;
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
/* Primary focus needs white outline since
|
|
141
|
+
/* Primary focus needs white outline since vermilion-on-vermilion is invisible */
|
|
142
142
|
.sx-btn-primary:focus-visible {
|
|
143
143
|
outline-color: var(--sx-white);
|
|
144
144
|
}
|
|
@@ -206,38 +206,174 @@ const isDisabled = $derived(disabled);
|
|
|
206
206
|
}
|
|
207
207
|
|
|
208
208
|
/* ========================================
|
|
209
|
-
VARIANT STYLES -
|
|
209
|
+
VARIANT STYLES - INFRARED
|
|
210
210
|
======================================== */
|
|
211
211
|
|
|
212
|
-
/* Default variant
|
|
212
|
+
/* Default variant — Neutral 3D panel.
|
|
213
|
+
Same physical language as primary but with neutral
|
|
214
|
+
surface colors. Top-lit bevel + stacked extrusion. */
|
|
213
215
|
.sx-btn-default {
|
|
214
216
|
background: var(--sx-color-surface-2);
|
|
215
217
|
color: var(--sx-color-text);
|
|
216
218
|
border: 1px solid var(--sx-color-border-strong);
|
|
219
|
+
overflow: hidden;
|
|
220
|
+
|
|
221
|
+
/* 3D extrusion — neutral dark tones */
|
|
222
|
+
box-shadow:
|
|
223
|
+
0 1px 0 0 rgba(255, 255, 255, 0.04),
|
|
224
|
+
0 1px 0 0 rgba(0, 0, 0, 0.2),
|
|
225
|
+
0 2px 0 0 rgba(0, 0, 0, 0.15),
|
|
226
|
+
0 3px 0 0 rgba(0, 0, 0, 0.1),
|
|
227
|
+
0 5px 10px -3px rgba(0, 0, 0, 0.4);
|
|
217
228
|
}
|
|
218
229
|
|
|
219
|
-
/*
|
|
230
|
+
/* Top-lit bevel for default */
|
|
231
|
+
.sx-btn-default::before {
|
|
232
|
+
content: '';
|
|
233
|
+
position: absolute;
|
|
234
|
+
inset: 0;
|
|
235
|
+
border-radius: inherit;
|
|
236
|
+
pointer-events: none;
|
|
237
|
+
z-index: 1;
|
|
238
|
+
background:
|
|
239
|
+
linear-gradient(
|
|
240
|
+
180deg,
|
|
241
|
+
rgba(255, 255, 255, 0.06) 0%,
|
|
242
|
+
rgba(255, 255, 255, 0.02) 35%,
|
|
243
|
+
transparent 50%,
|
|
244
|
+
rgba(0, 0, 0, 0.08) 100%
|
|
245
|
+
);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
.sx-btn-default:hover:not(:disabled) {
|
|
249
|
+
transform: translateY(-2px);
|
|
250
|
+
border-color: var(--sx-color-border-hover);
|
|
251
|
+
box-shadow:
|
|
252
|
+
0 1px 0 0 rgba(255, 255, 255, 0.05),
|
|
253
|
+
0 1px 0 0 rgba(0, 0, 0, 0.2),
|
|
254
|
+
0 2px 0 0 rgba(0, 0, 0, 0.15),
|
|
255
|
+
0 3px 0 0 rgba(0, 0, 0, 0.1),
|
|
256
|
+
0 4px 0 0 rgba(0, 0, 0, 0.06),
|
|
257
|
+
0 8px 16px -3px rgba(0, 0, 0, 0.5);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.sx-btn-default:active:not(:disabled) {
|
|
261
|
+
transform: translateY(1px);
|
|
262
|
+
box-shadow:
|
|
263
|
+
0 1px 0 0 rgba(0, 0, 0, 0.1),
|
|
264
|
+
0 1px 3px -1px rgba(0, 0, 0, 0.2);
|
|
265
|
+
transition: transform 60ms ease, box-shadow 60ms ease;
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* Primary variant — INFRARED Forge.
|
|
269
|
+
Multi-color gradient surface (vermilion → brass → teal) that
|
|
270
|
+
drifts slowly. 3D extruded depth via stacked box-shadows.
|
|
271
|
+
Top-lit bevel highlight via ::before. Grain texture via ::after.
|
|
272
|
+
Traveling border-light sweep on hover. */
|
|
220
273
|
.sx-btn-primary {
|
|
221
|
-
background:
|
|
274
|
+
background:
|
|
275
|
+
linear-gradient(
|
|
276
|
+
135deg,
|
|
277
|
+
#FF6B35 0%,
|
|
278
|
+
#E05520 20%,
|
|
279
|
+
#C8A84E 50%,
|
|
280
|
+
#8B8B3D 80%,
|
|
281
|
+
#FF6B35 100%
|
|
282
|
+
);
|
|
283
|
+
background-size: 300% 300%;
|
|
222
284
|
color: var(--sx-color-text-inverse);
|
|
223
285
|
border: none;
|
|
224
|
-
font-weight:
|
|
286
|
+
font-weight: 700;
|
|
287
|
+
letter-spacing: 0.3px;
|
|
288
|
+
overflow: hidden;
|
|
289
|
+
isolation: isolate;
|
|
290
|
+
animation: sx-forge-drift 8s ease-in-out infinite;
|
|
291
|
+
|
|
292
|
+
/* 3D extrusion — stacked shadows create physical depth */
|
|
293
|
+
box-shadow:
|
|
294
|
+
0 1px 0 0 rgba(255, 140, 90, 0.4),
|
|
295
|
+
0 2px 0 0 #A63D10,
|
|
296
|
+
0 3px 0 0 #8B3210,
|
|
297
|
+
0 4px 0 0 #702810,
|
|
298
|
+
0 6px 12px -2px rgba(0, 0, 0, 0.5),
|
|
299
|
+
0 0 16px -4px rgba(255, 107, 53, 0.3);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/* Top-lit bevel — light source from above */
|
|
303
|
+
.sx-btn-primary::before {
|
|
304
|
+
content: '';
|
|
305
|
+
position: absolute;
|
|
306
|
+
inset: 0;
|
|
307
|
+
border-radius: inherit;
|
|
308
|
+
pointer-events: none;
|
|
309
|
+
z-index: 1;
|
|
310
|
+
background:
|
|
311
|
+
linear-gradient(
|
|
312
|
+
180deg,
|
|
313
|
+
rgba(255, 255, 255, 0.25) 0%,
|
|
314
|
+
rgba(255, 255, 255, 0.08) 30%,
|
|
315
|
+
transparent 50%,
|
|
316
|
+
rgba(0, 0, 0, 0.15) 100%
|
|
317
|
+
);
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
/* Grain texture — SVG feTurbulence noise at low opacity */
|
|
321
|
+
.sx-btn-primary::after {
|
|
322
|
+
content: '';
|
|
323
|
+
position: absolute;
|
|
324
|
+
inset: 0;
|
|
325
|
+
border-radius: inherit;
|
|
326
|
+
pointer-events: none;
|
|
327
|
+
z-index: 2;
|
|
328
|
+
opacity: 0.08;
|
|
329
|
+
mix-blend-mode: overlay;
|
|
330
|
+
background: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/* Gradient drift — visible color shift across the surface */
|
|
334
|
+
@keyframes sx-forge-drift {
|
|
335
|
+
0%, 100% { background-position: 0% 50%; }
|
|
336
|
+
25% { background-position: 100% 0%; }
|
|
337
|
+
50% { background-position: 100% 100%; }
|
|
338
|
+
75% { background-position: 0% 100%; }
|
|
225
339
|
}
|
|
226
340
|
|
|
227
341
|
.sx-btn-primary:hover:not(:disabled) {
|
|
228
|
-
transform: translateY(-
|
|
229
|
-
|
|
342
|
+
transform: translateY(-3px);
|
|
343
|
+
animation: sx-forge-drift 5s ease-in-out infinite;
|
|
344
|
+
|
|
345
|
+
/* Lift increases the extrusion depth */
|
|
346
|
+
box-shadow:
|
|
347
|
+
0 1px 0 0 rgba(255, 140, 90, 0.5),
|
|
348
|
+
0 2px 0 0 #A63D10,
|
|
349
|
+
0 3px 0 0 #8B3210,
|
|
350
|
+
0 4px 0 0 #702810,
|
|
351
|
+
0 5px 0 0 #5A2010,
|
|
352
|
+
0 6px 0 0 #451810,
|
|
353
|
+
0 10px 20px -3px rgba(0, 0, 0, 0.6),
|
|
354
|
+
0 0 28px -4px rgba(255, 107, 53, 0.5);
|
|
230
355
|
}
|
|
231
356
|
|
|
357
|
+
/* Active — press into the surface, collapse depth */
|
|
232
358
|
.sx-btn-primary:active:not(:disabled) {
|
|
233
|
-
transform: translateY(
|
|
234
|
-
box-shadow:
|
|
359
|
+
transform: translateY(2px);
|
|
360
|
+
box-shadow:
|
|
361
|
+
0 1px 0 0 #8B3210,
|
|
362
|
+
0 2px 4px -1px rgba(0, 0, 0, 0.4),
|
|
363
|
+
0 0 8px -3px rgba(255, 107, 53, 0.2);
|
|
364
|
+
transition: transform 60ms ease, box-shadow 60ms ease;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.sx-btn-primary:disabled {
|
|
368
|
+
animation-play-state: paused;
|
|
235
369
|
}
|
|
236
370
|
|
|
237
|
-
/* Ghost variant —
|
|
371
|
+
/* Ghost variant — Flat at rest, materializes on hover.
|
|
372
|
+
Rises out of the surface with a thin extrusion when
|
|
373
|
+
you reach for it. Stays part of the physical language. */
|
|
238
374
|
.sx-btn-ghost {
|
|
239
375
|
background: transparent;
|
|
240
|
-
border:
|
|
376
|
+
border: 1px solid transparent;
|
|
241
377
|
color: var(--sx-color-text-secondary);
|
|
242
378
|
box-shadow: none;
|
|
243
379
|
}
|
|
@@ -245,33 +381,86 @@ const isDisabled = $derived(disabled);
|
|
|
245
381
|
.sx-btn-ghost:hover:not(:disabled) {
|
|
246
382
|
background: var(--sx-color-surface-2);
|
|
247
383
|
color: var(--sx-color-text);
|
|
248
|
-
|
|
249
|
-
|
|
384
|
+
border-color: var(--sx-color-border);
|
|
385
|
+
transform: translateY(-1px);
|
|
386
|
+
|
|
387
|
+
/* Materializes — thin extrusion appears */
|
|
388
|
+
box-shadow:
|
|
389
|
+
0 1px 0 0 rgba(255, 255, 255, 0.03),
|
|
390
|
+
0 1px 0 0 rgba(0, 0, 0, 0.15),
|
|
391
|
+
0 2px 0 0 rgba(0, 0, 0, 0.08),
|
|
392
|
+
0 3px 6px -2px rgba(0, 0, 0, 0.25);
|
|
250
393
|
}
|
|
251
394
|
|
|
252
395
|
.sx-btn-ghost:active:not(:disabled) {
|
|
253
396
|
background: var(--sx-color-surface-2);
|
|
254
397
|
transform: translateY(0);
|
|
255
|
-
box-shadow:
|
|
398
|
+
box-shadow:
|
|
399
|
+
0 1px 0 0 rgba(0, 0, 0, 0.08),
|
|
400
|
+
0 1px 2px -1px rgba(0, 0, 0, 0.15);
|
|
401
|
+
transition: transform 60ms ease, box-shadow 60ms ease;
|
|
256
402
|
}
|
|
257
403
|
|
|
258
|
-
/* Danger variant —
|
|
404
|
+
/* Danger variant — Dark crimson surface, light text.
|
|
405
|
+
Red enough to read as danger, dark enough to not
|
|
406
|
+
overwhelm. Light text for readability. */
|
|
259
407
|
.sx-btn-danger {
|
|
260
|
-
background:
|
|
261
|
-
color: var(--sx-color-
|
|
262
|
-
border: 1px solid rgba(
|
|
408
|
+
background: #3A1010;
|
|
409
|
+
color: var(--sx-color-text);
|
|
410
|
+
border: 1px solid rgba(220, 38, 38, 0.3);
|
|
411
|
+
overflow: hidden;
|
|
412
|
+
|
|
413
|
+
/* 3D extrusion — deep crimson tones */
|
|
414
|
+
box-shadow:
|
|
415
|
+
0 1px 0 0 rgba(220, 60, 60, 0.12),
|
|
416
|
+
0 2px 0 0 #2A0808,
|
|
417
|
+
0 3px 0 0 #1E0505,
|
|
418
|
+
0 4px 0 0 #140303,
|
|
419
|
+
0 6px 12px -2px rgba(0, 0, 0, 0.5),
|
|
420
|
+
0 0 12px -4px rgba(220, 38, 38, 0.2);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/* Top-lit bevel for danger — red-tinted highlight */
|
|
424
|
+
.sx-btn-danger::before {
|
|
425
|
+
content: '';
|
|
426
|
+
position: absolute;
|
|
427
|
+
inset: 0;
|
|
428
|
+
border-radius: inherit;
|
|
429
|
+
pointer-events: none;
|
|
430
|
+
z-index: 1;
|
|
431
|
+
background:
|
|
432
|
+
linear-gradient(
|
|
433
|
+
180deg,
|
|
434
|
+
rgba(220, 60, 60, 0.12) 0%,
|
|
435
|
+
rgba(255, 255, 255, 0.04) 25%,
|
|
436
|
+
transparent 50%,
|
|
437
|
+
rgba(0, 0, 0, 0.15) 100%
|
|
438
|
+
);
|
|
263
439
|
}
|
|
264
440
|
|
|
265
441
|
.sx-btn-danger:hover:not(:disabled) {
|
|
266
|
-
background: rgba(255, 59, 59, 0.2);
|
|
267
442
|
transform: translateY(-2px);
|
|
268
|
-
|
|
269
|
-
border-color: rgba(
|
|
443
|
+
background: #451212;
|
|
444
|
+
border-color: rgba(220, 38, 38, 0.45);
|
|
445
|
+
|
|
446
|
+
box-shadow:
|
|
447
|
+
0 1px 0 0 rgba(220, 60, 60, 0.18),
|
|
448
|
+
0 2px 0 0 #2A0808,
|
|
449
|
+
0 3px 0 0 #1E0505,
|
|
450
|
+
0 4px 0 0 #140303,
|
|
451
|
+
0 5px 0 0 #0C0202,
|
|
452
|
+
0 9px 18px -3px rgba(0, 0, 0, 0.6),
|
|
453
|
+
0 0 22px -4px rgba(220, 38, 38, 0.3);
|
|
270
454
|
}
|
|
271
455
|
|
|
272
456
|
.sx-btn-danger:active:not(:disabled) {
|
|
273
|
-
transform: translateY(
|
|
274
|
-
|
|
457
|
+
transform: translateY(2px);
|
|
458
|
+
background: #2A0808;
|
|
459
|
+
box-shadow:
|
|
460
|
+
0 1px 0 0 #1E0505,
|
|
461
|
+
0 2px 4px -1px rgba(0, 0, 0, 0.4),
|
|
462
|
+
0 0 6px -3px rgba(220, 38, 38, 0.12);
|
|
463
|
+
transition: transform 60ms ease, box-shadow 60ms ease;
|
|
275
464
|
}
|
|
276
465
|
|
|
277
466
|
/* ========================================
|
|
@@ -282,7 +471,7 @@ const isDisabled = $derived(disabled);
|
|
|
282
471
|
align-items: center;
|
|
283
472
|
gap: var(--sx-space-2);
|
|
284
473
|
position: relative;
|
|
285
|
-
z-index:
|
|
474
|
+
z-index: 3;
|
|
286
475
|
}
|
|
287
476
|
|
|
288
477
|
.sx-btn-icon {
|
|
@@ -302,16 +491,18 @@ const isDisabled = $derived(disabled);
|
|
|
302
491
|
border-radius: var(--sx-radius-sm);
|
|
303
492
|
}
|
|
304
493
|
|
|
305
|
-
/* Shortcut on primary:
|
|
494
|
+
/* Shortcut on primary: frosted inset against the multi-color fill */
|
|
306
495
|
.sx-btn-primary .sx-btn-shortcut {
|
|
307
|
-
background: rgba(0, 0, 0, 0.
|
|
308
|
-
color: var(--sx-
|
|
496
|
+
background: rgba(0, 0, 0, 0.25);
|
|
497
|
+
color: var(--sx-color-text-inverse);
|
|
498
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
309
499
|
}
|
|
310
500
|
|
|
311
|
-
/* Shortcut on danger:
|
|
501
|
+
/* Shortcut on danger: red-tinted badge */
|
|
312
502
|
.sx-btn-danger .sx-btn-shortcut {
|
|
313
|
-
background: rgba(
|
|
314
|
-
color: var(--sx-color-
|
|
503
|
+
background: rgba(220, 38, 38, 0.12);
|
|
504
|
+
color: var(--sx-color-text);
|
|
505
|
+
border: 1px solid rgba(220, 38, 38, 0.15);
|
|
315
506
|
}
|
|
316
507
|
|
|
317
508
|
/* Shortcut on ghost: subtle */
|
|
@@ -335,5 +526,34 @@ const isDisabled = $derived(disabled);
|
|
|
335
526
|
.sx-btn:active:not(:disabled) {
|
|
336
527
|
transform: none;
|
|
337
528
|
}
|
|
529
|
+
|
|
530
|
+
/* Primary — solid gradient, no drift, simple depth */
|
|
531
|
+
.sx-btn-primary {
|
|
532
|
+
animation: none;
|
|
533
|
+
background: linear-gradient(135deg, #FF6B35, #C8A84E);
|
|
534
|
+
box-shadow:
|
|
535
|
+
0 2px 0 0 #8B3210,
|
|
536
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.4);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
.sx-btn-primary:hover:not(:disabled) {
|
|
540
|
+
box-shadow:
|
|
541
|
+
0 3px 0 0 #8B3210,
|
|
542
|
+
0 6px 12px -2px rgba(0, 0, 0, 0.5);
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/* Default — simple depth */
|
|
546
|
+
.sx-btn-default {
|
|
547
|
+
box-shadow:
|
|
548
|
+
0 2px 0 0 rgba(0, 0, 0, 0.15),
|
|
549
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.3);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/* Danger — simple depth */
|
|
553
|
+
.sx-btn-danger {
|
|
554
|
+
box-shadow:
|
|
555
|
+
0 2px 0 0 #4A0A0A,
|
|
556
|
+
0 4px 8px -2px rgba(0, 0, 0, 0.3);
|
|
557
|
+
}
|
|
338
558
|
}
|
|
339
559
|
</style>
|
|
@@ -27,7 +27,7 @@ interface Props extends Omit<HTMLButtonAttributes, 'class'> {
|
|
|
27
27
|
/**
|
|
28
28
|
* Button
|
|
29
29
|
*
|
|
30
|
-
*
|
|
30
|
+
* INFRARED — Glassmorphism button with glow effects.
|
|
31
31
|
* Clean geometry, expressive energy, world-class accessibility.
|
|
32
32
|
*
|
|
33
33
|
* @example
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Tooltip
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Accessible tooltip with configurable placement,
|
|
5
5
|
keyboard support, hover/focus triggers, and arrow indicator.
|
|
6
6
|
Uses fixed positioning with smart viewport-aware flipping.
|
|
7
7
|
|
|
@@ -187,13 +187,21 @@ function positionTooltip() {
|
|
|
187
187
|
padding: var(--sx-space-1-5) var(--sx-space-3);
|
|
188
188
|
background: var(--sx-color-surface-3);
|
|
189
189
|
border: 1px solid var(--sx-color-border-strong);
|
|
190
|
+
border-top-color: rgba(255, 255, 255, 0.06);
|
|
190
191
|
border-radius: var(--sx-radius-sm);
|
|
191
192
|
font-family: var(--sx-font-body);
|
|
192
193
|
font-size: var(--sx-text-xs);
|
|
193
194
|
font-weight: 500;
|
|
194
195
|
color: var(--sx-color-text);
|
|
195
196
|
line-height: var(--sx-leading-normal);
|
|
196
|
-
box-shadow:
|
|
197
|
+
box-shadow:
|
|
198
|
+
/* Thin 3D extrusion */
|
|
199
|
+
0 1px 0 0 rgba(0, 0, 0, 0.2),
|
|
200
|
+
0 2px 0 0 rgba(0, 0, 0, 0.1),
|
|
201
|
+
/* Ambient shadow */
|
|
202
|
+
0 4px 12px -2px rgba(0, 0, 0, 0.4),
|
|
203
|
+
/* Subtle warm edge glow */
|
|
204
|
+
0 0 8px -4px rgba(255, 107, 53, 0.1);
|
|
197
205
|
pointer-events: none;
|
|
198
206
|
animation: sx-tooltip-in 150ms var(--sx-ease-out) both;
|
|
199
207
|
word-wrap: break-word;
|
|
@@ -18,7 +18,7 @@ interface Props {
|
|
|
18
18
|
/**
|
|
19
19
|
* Tooltip
|
|
20
20
|
*
|
|
21
|
-
*
|
|
21
|
+
* INFRARED — Accessible tooltip with configurable placement,
|
|
22
22
|
* keyboard support, hover/focus triggers, and arrow indicator.
|
|
23
23
|
* Uses fixed positioning with smart viewport-aware flipping.
|
|
24
24
|
*
|