@salmexio/ui 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +33 -1
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts.map +1 -1
- package/dist/styles/tokens.css +1 -0
- package/package.json +1 -1
|
@@ -209,40 +209,112 @@ const isDisabled = $derived(disabled);
|
|
|
209
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);
|
|
228
|
+
}
|
|
229
|
+
|
|
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;
|
|
217
266
|
}
|
|
218
267
|
|
|
219
|
-
/* Primary variant —
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
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. */
|
|
224
273
|
.sx-btn-primary {
|
|
225
274
|
background:
|
|
226
|
-
radial-gradient(
|
|
227
|
-
ellipse at center,
|
|
228
|
-
rgba(255, 107, 53, 0.97) 25%,
|
|
229
|
-
rgba(255, 107, 53, 0.82) 100%
|
|
230
|
-
),
|
|
231
275
|
linear-gradient(
|
|
232
276
|
135deg,
|
|
233
|
-
#
|
|
234
|
-
#
|
|
235
|
-
#
|
|
236
|
-
#
|
|
277
|
+
#FF6B35 0%,
|
|
278
|
+
#E05520 20%,
|
|
279
|
+
#C8A84E 50%,
|
|
280
|
+
#8B8B3D 80%,
|
|
281
|
+
#FF6B35 100%
|
|
237
282
|
);
|
|
238
|
-
background-size:
|
|
283
|
+
background-size: 300% 300%;
|
|
239
284
|
color: var(--sx-color-text-inverse);
|
|
240
285
|
border: none;
|
|
241
|
-
font-weight:
|
|
286
|
+
font-weight: 700;
|
|
287
|
+
letter-spacing: 0.3px;
|
|
242
288
|
overflow: hidden;
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
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
|
+
);
|
|
246
318
|
}
|
|
247
319
|
|
|
248
320
|
/* Grain texture — SVG feTurbulence noise at low opacity */
|
|
@@ -252,56 +324,56 @@ const isDisabled = $derived(disabled);
|
|
|
252
324
|
inset: 0;
|
|
253
325
|
border-radius: inherit;
|
|
254
326
|
pointer-events: none;
|
|
255
|
-
|
|
327
|
+
z-index: 2;
|
|
328
|
+
opacity: 0.08;
|
|
256
329
|
mix-blend-mode: overlay;
|
|
257
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");
|
|
258
331
|
}
|
|
259
332
|
|
|
260
|
-
/*
|
|
261
|
-
@keyframes sx-
|
|
262
|
-
0%, 100% { background-position:
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
/* Breathing glow pulse */
|
|
268
|
-
@keyframes sx-primary-glow {
|
|
269
|
-
0%, 100% {
|
|
270
|
-
box-shadow:
|
|
271
|
-
var(--sx-shadow-sm),
|
|
272
|
-
0 0 12px -3px rgba(255, 107, 53, 0.3);
|
|
273
|
-
}
|
|
274
|
-
50% {
|
|
275
|
-
box-shadow:
|
|
276
|
-
var(--sx-shadow-sm),
|
|
277
|
-
0 0 20px -2px rgba(255, 107, 53, 0.5);
|
|
278
|
-
}
|
|
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%; }
|
|
279
339
|
}
|
|
280
340
|
|
|
281
341
|
.sx-btn-primary:hover:not(:disabled) {
|
|
282
|
-
transform: translateY(-
|
|
283
|
-
animation:
|
|
284
|
-
|
|
342
|
+
transform: translateY(-3px);
|
|
343
|
+
animation: sx-forge-drift 5s ease-in-out infinite;
|
|
344
|
+
|
|
345
|
+
/* Lift increases the extrusion depth */
|
|
285
346
|
box-shadow:
|
|
286
|
-
|
|
287
|
-
0 0
|
|
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);
|
|
288
355
|
}
|
|
289
356
|
|
|
357
|
+
/* Active — press into the surface, collapse depth */
|
|
290
358
|
.sx-btn-primary:active:not(:disabled) {
|
|
291
|
-
transform: translateY(
|
|
359
|
+
transform: translateY(2px);
|
|
292
360
|
box-shadow:
|
|
293
|
-
|
|
294
|
-
0
|
|
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;
|
|
295
365
|
}
|
|
296
366
|
|
|
297
367
|
.sx-btn-primary:disabled {
|
|
298
368
|
animation-play-state: paused;
|
|
299
369
|
}
|
|
300
370
|
|
|
301
|
-
/* 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. */
|
|
302
374
|
.sx-btn-ghost {
|
|
303
375
|
background: transparent;
|
|
304
|
-
border:
|
|
376
|
+
border: 1px solid transparent;
|
|
305
377
|
color: var(--sx-color-text-secondary);
|
|
306
378
|
box-shadow: none;
|
|
307
379
|
}
|
|
@@ -309,33 +381,86 @@ const isDisabled = $derived(disabled);
|
|
|
309
381
|
.sx-btn-ghost:hover:not(:disabled) {
|
|
310
382
|
background: var(--sx-color-surface-2);
|
|
311
383
|
color: var(--sx-color-text);
|
|
312
|
-
|
|
313
|
-
|
|
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);
|
|
314
393
|
}
|
|
315
394
|
|
|
316
395
|
.sx-btn-ghost:active:not(:disabled) {
|
|
317
396
|
background: var(--sx-color-surface-2);
|
|
318
397
|
transform: translateY(0);
|
|
319
|
-
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;
|
|
320
402
|
}
|
|
321
403
|
|
|
322
|
-
/* 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. */
|
|
323
407
|
.sx-btn-danger {
|
|
324
|
-
background:
|
|
325
|
-
color: var(--sx-color-
|
|
326
|
-
border: 1px solid rgba(220, 38, 38, 0.
|
|
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
|
+
);
|
|
327
439
|
}
|
|
328
440
|
|
|
329
441
|
.sx-btn-danger:hover:not(:disabled) {
|
|
330
|
-
background: rgba(220, 38, 38, 0.2);
|
|
331
442
|
transform: translateY(-2px);
|
|
332
|
-
|
|
333
|
-
border-color: rgba(220, 38, 38, 0.
|
|
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);
|
|
334
454
|
}
|
|
335
455
|
|
|
336
456
|
.sx-btn-danger:active:not(:disabled) {
|
|
337
|
-
transform: translateY(
|
|
338
|
-
|
|
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;
|
|
339
464
|
}
|
|
340
465
|
|
|
341
466
|
/* ========================================
|
|
@@ -346,7 +471,7 @@ const isDisabled = $derived(disabled);
|
|
|
346
471
|
align-items: center;
|
|
347
472
|
gap: var(--sx-space-2);
|
|
348
473
|
position: relative;
|
|
349
|
-
z-index:
|
|
474
|
+
z-index: 3;
|
|
350
475
|
}
|
|
351
476
|
|
|
352
477
|
.sx-btn-icon {
|
|
@@ -366,16 +491,18 @@ const isDisabled = $derived(disabled);
|
|
|
366
491
|
border-radius: var(--sx-radius-sm);
|
|
367
492
|
}
|
|
368
493
|
|
|
369
|
-
/* Shortcut on primary:
|
|
494
|
+
/* Shortcut on primary: frosted inset against the multi-color fill */
|
|
370
495
|
.sx-btn-primary .sx-btn-shortcut {
|
|
371
|
-
background: rgba(0, 0, 0, 0.
|
|
496
|
+
background: rgba(0, 0, 0, 0.25);
|
|
372
497
|
color: var(--sx-color-text-inverse);
|
|
498
|
+
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
373
499
|
}
|
|
374
500
|
|
|
375
|
-
/* Shortcut on danger:
|
|
501
|
+
/* Shortcut on danger: red-tinted badge */
|
|
376
502
|
.sx-btn-danger .sx-btn-shortcut {
|
|
377
|
-
background: rgba(220, 38, 38, 0.
|
|
378
|
-
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);
|
|
379
506
|
}
|
|
380
507
|
|
|
381
508
|
/* Shortcut on ghost: subtle */
|
|
@@ -400,11 +527,33 @@ const isDisabled = $derived(disabled);
|
|
|
400
527
|
transform: none;
|
|
401
528
|
}
|
|
402
529
|
|
|
403
|
-
/*
|
|
530
|
+
/* Primary — solid gradient, no drift, simple depth */
|
|
404
531
|
.sx-btn-primary {
|
|
405
532
|
animation: none;
|
|
406
|
-
background:
|
|
407
|
-
box-shadow:
|
|
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);
|
|
408
557
|
}
|
|
409
558
|
}
|
|
410
559
|
</style>
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
import type { Snippet } from 'svelte';
|
|
18
18
|
import { cn } from '../../utils/cn.js';
|
|
19
19
|
import { tick } from 'svelte';
|
|
20
|
+
import { onMount } from 'svelte';
|
|
20
21
|
|
|
21
22
|
type Placement = 'top' | 'bottom' | 'left' | 'right';
|
|
22
23
|
|
|
@@ -140,6 +141,28 @@ function positionTooltip() {
|
|
|
140
141
|
computedLeft = `${left}px`;
|
|
141
142
|
placementOverride = finalPlacement;
|
|
142
143
|
}
|
|
144
|
+
|
|
145
|
+
// Portal: move tooltip to document.body so position:fixed is viewport-relative
|
|
146
|
+
// (ancestors with transform/backdrop-filter would otherwise create a containing block)
|
|
147
|
+
$effect(() => {
|
|
148
|
+
if (tooltipEl && visible) {
|
|
149
|
+
document.body.appendChild(tooltipEl);
|
|
150
|
+
tick().then(() => positionTooltip());
|
|
151
|
+
return () => {
|
|
152
|
+
if (tooltipEl?.parentNode === document.body) {
|
|
153
|
+
document.body.removeChild(tooltipEl);
|
|
154
|
+
}
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
|
|
159
|
+
onMount(() => {
|
|
160
|
+
return () => {
|
|
161
|
+
if (tooltipEl?.parentNode === document.body) {
|
|
162
|
+
document.body.removeChild(tooltipEl);
|
|
163
|
+
}
|
|
164
|
+
};
|
|
165
|
+
});
|
|
143
166
|
</script>
|
|
144
167
|
|
|
145
168
|
<svelte:window onkeydown={handleKeydown} />
|
|
@@ -187,15 +210,24 @@ function positionTooltip() {
|
|
|
187
210
|
padding: var(--sx-space-1-5) var(--sx-space-3);
|
|
188
211
|
background: var(--sx-color-surface-3);
|
|
189
212
|
border: 1px solid var(--sx-color-border-strong);
|
|
213
|
+
border-top-color: rgba(255, 255, 255, 0.06);
|
|
190
214
|
border-radius: var(--sx-radius-sm);
|
|
191
215
|
font-family: var(--sx-font-body);
|
|
192
216
|
font-size: var(--sx-text-xs);
|
|
193
217
|
font-weight: 500;
|
|
194
218
|
color: var(--sx-color-text);
|
|
195
219
|
line-height: var(--sx-leading-normal);
|
|
196
|
-
box-shadow:
|
|
220
|
+
box-shadow:
|
|
221
|
+
/* Thin 3D extrusion */
|
|
222
|
+
0 1px 0 0 rgba(0, 0, 0, 0.2),
|
|
223
|
+
0 2px 0 0 rgba(0, 0, 0, 0.1),
|
|
224
|
+
/* Ambient shadow */
|
|
225
|
+
0 4px 12px -2px rgba(0, 0, 0, 0.4),
|
|
226
|
+
/* Subtle warm edge glow */
|
|
227
|
+
0 0 8px -4px rgba(255, 107, 53, 0.1);
|
|
197
228
|
pointer-events: none;
|
|
198
229
|
animation: sx-tooltip-in 150ms var(--sx-ease-out) both;
|
|
230
|
+
white-space: normal;
|
|
199
231
|
word-wrap: break-word;
|
|
200
232
|
}
|
|
201
233
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Tooltip.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Tooltip/Tooltip.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"Tooltip.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Tooltip/Tooltip.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AAMtC,KAAK,SAAS,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAErD,UAAU,KAAK;IACd,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,2DAA2D;IAC3D,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAgKD;;;;;;;;;;;;;;GAcG;AACH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|
package/dist/styles/tokens.css
CHANGED