@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.
Files changed (64) hide show
  1. package/README.md +1 -1
  2. package/dist/dialogs/ContextMenu/ContextMenu.svelte +17 -7
  3. package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts +1 -1
  4. package/dist/dialogs/Modal/Modal.svelte +37 -4
  5. package/dist/dialogs/Modal/Modal.svelte.d.ts +1 -1
  6. package/dist/feedback/Alert/Alert.svelte +67 -19
  7. package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
  8. package/dist/feedback/ProgressBar/ProgressBar.svelte +33 -11
  9. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +3 -3
  10. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -1
  11. package/dist/feedback/Skeleton/Skeleton.svelte +12 -4
  12. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +1 -1
  13. package/dist/feedback/Spinner/Spinner.svelte +5 -3
  14. package/dist/feedback/Spinner/Spinner.svelte.d.ts +2 -2
  15. package/dist/feedback/Toast/Toaster.svelte +45 -13
  16. package/dist/feedback/Toast/Toaster.svelte.d.ts +1 -1
  17. package/dist/forms/Checkbox/Checkbox.svelte +37 -9
  18. package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
  19. package/dist/forms/Select/Select.svelte +28 -12
  20. package/dist/forms/Select/Select.svelte.d.ts +1 -1
  21. package/dist/forms/Slider/Slider.svelte +66 -38
  22. package/dist/forms/Slider/Slider.svelte.d.ts +2 -2
  23. package/dist/forms/Slider/Slider.svelte.d.ts.map +1 -1
  24. package/dist/forms/TextInput/TextInput.svelte +35 -7
  25. package/dist/forms/TextInput/TextInput.svelte.d.ts +1 -1
  26. package/dist/forms/Textarea/Textarea.svelte +22 -7
  27. package/dist/forms/Textarea/Textarea.svelte.d.ts +1 -1
  28. package/dist/forms/Toggle/Toggle.svelte +71 -12
  29. package/dist/forms/Toggle/Toggle.svelte.d.ts +1 -1
  30. package/dist/layout/Card/Card.svelte +128 -5
  31. package/dist/layout/Card/Card.svelte.d.ts +4 -1
  32. package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
  33. package/dist/layout/Container/Container.svelte +1 -1
  34. package/dist/layout/Container/Container.svelte.d.ts +1 -1
  35. package/dist/layout/ThermalBackground/ThermalBackground.svelte +275 -0
  36. package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts +14 -0
  37. package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts.map +1 -0
  38. package/dist/layout/ThermalBackground/index.d.ts +2 -0
  39. package/dist/layout/ThermalBackground/index.d.ts.map +1 -0
  40. package/dist/layout/ThermalBackground/index.js +1 -0
  41. package/dist/layout/index.d.ts +1 -0
  42. package/dist/layout/index.d.ts.map +1 -1
  43. package/dist/layout/index.js +1 -0
  44. package/dist/navigation/CommandPalette/CommandPalette.svelte +45 -11
  45. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +1 -1
  46. package/dist/navigation/NavMenu/NavMenu.svelte +800 -0
  47. package/dist/navigation/NavMenu/NavMenu.svelte.d.ts +81 -0
  48. package/dist/navigation/NavMenu/NavMenu.svelte.d.ts.map +1 -0
  49. package/dist/navigation/NavMenu/index.d.ts +3 -0
  50. package/dist/navigation/NavMenu/index.d.ts.map +1 -0
  51. package/dist/navigation/NavMenu/index.js +1 -0
  52. package/dist/navigation/Tabs/Tabs.svelte +73 -11
  53. package/dist/navigation/Tabs/Tabs.svelte.d.ts +1 -1
  54. package/dist/navigation/index.d.ts +2 -0
  55. package/dist/navigation/index.d.ts.map +1 -1
  56. package/dist/navigation/index.js +1 -0
  57. package/dist/primitives/Badge/Badge.svelte +68 -21
  58. package/dist/primitives/Badge/Badge.svelte.d.ts +1 -1
  59. package/dist/primitives/Button/Button.svelte +254 -34
  60. package/dist/primitives/Button/Button.svelte.d.ts +1 -1
  61. package/dist/primitives/Tooltip/Tooltip.svelte +10 -2
  62. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +1 -1
  63. package/dist/styles/tokens.css +202 -64
  64. package/package.json +3 -3
@@ -1,7 +1,7 @@
1
1
  <!--
2
2
  @component Toaster
3
3
 
4
- Neo-Brutalist Dark — Toast notification container.
4
+ INFRARED — Toast notification container.
5
5
  Renders stacked toast notifications with slide-in/out animations,
6
6
  auto-dismiss with pause-on-hover, keyboard dismiss, and ARIA live region.
7
7
 
@@ -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,15 +224,22 @@ 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: var(--sx-shadow-lg);
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;
231
239
  }
232
240
 
233
241
  .sx-toast:focus-visible {
234
- outline: 2px solid var(--sx-color-cyan);
242
+ outline: 2px solid var(--sx-color-primary);
235
243
  outline-offset: 2px;
236
244
  }
237
245
 
@@ -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
- border-left-color: var(--sx-color-gold);
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
- border-left-color: var(--sx-color-cyan);
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 */
@@ -273,11 +305,11 @@ onMount(() => {
273
305
  }
274
306
 
275
307
  .sx-toast-warning .sx-toast-icon {
276
- color: var(--sx-color-gold);
308
+ color: var(--sx-color-secondary);
277
309
  }
278
310
 
279
311
  .sx-toast-info .sx-toast-icon {
280
- color: var(--sx-color-cyan);
312
+ color: var(--sx-color-primary);
281
313
  }
282
314
 
283
315
  /* Content */
@@ -317,7 +349,7 @@ onMount(() => {
317
349
  font-family: var(--sx-font-body);
318
350
  font-size: var(--sx-text-xs);
319
351
  font-weight: 600;
320
- color: var(--sx-color-cyan);
352
+ color: var(--sx-color-primary);
321
353
  cursor: pointer;
322
354
  padding: var(--sx-space-1) var(--sx-space-2);
323
355
  border-radius: var(--sx-radius-sm);
@@ -325,11 +357,11 @@ onMount(() => {
325
357
  }
326
358
 
327
359
  .sx-toast-action-btn:hover {
328
- background: var(--sx-color-cyan-subtle);
360
+ background: var(--sx-color-primary-subtle);
329
361
  }
330
362
 
331
363
  .sx-toast-action-btn:focus-visible {
332
- outline: 2px solid var(--sx-color-cyan);
364
+ outline: 2px solid var(--sx-color-primary);
333
365
  outline-offset: 1px;
334
366
  }
335
367
 
@@ -353,7 +385,7 @@ onMount(() => {
353
385
  }
354
386
 
355
387
  .sx-toast-close:focus-visible {
356
- outline: 2px solid var(--sx-color-cyan);
388
+ outline: 2px solid var(--sx-color-primary);
357
389
  outline-offset: 1px;
358
390
  }
359
391
 
@@ -8,7 +8,7 @@ interface Props {
8
8
  /**
9
9
  * Toaster
10
10
  *
11
- * Neo-Brutalist Dark — Toast notification container.
11
+ * INFRARED — Toast notification container.
12
12
  * Renders stacked toast notifications with slide-in/out animations,
13
13
  * auto-dismiss with pause-on-hover, keyboard dismiss, and ARIA live region.
14
14
  *
@@ -1,7 +1,7 @@
1
1
  <!--
2
2
  @component Checkbox
3
3
 
4
- Neo-Brutalist Dark — Clean checkbox with cyan accent fill and white checkmark.
4
+ INFRARED — Clean checkbox with vermilion accent fill and white checkmark.
5
5
  Uses native <input type="checkbox"> per WAI-ARIA APG (best practice: native over custom role="checkbox").
6
6
  Label, description, error, indeterminate. Full a11y; focus and semantics follow the native input.
7
7
  -->
@@ -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;
@@ -209,22 +213,29 @@ function handleChange(e: Event) {
209
213
  width: 100%;
210
214
  height: 100%;
211
215
  padding: 2px;
216
+ animation: sx-check-in var(--sx-duration-fast) var(--sx-ease-out) both;
212
217
  }
213
218
 
214
219
  .sx-checkbox-icon-minus {
215
220
  padding: 3px 4px;
216
221
  }
217
222
 
218
- /* Checked -- cyan fill, white checkmark */
223
+ /* Checked -- forge gradient fill, raised from the well */
219
224
  .sx-checkbox-box-checked {
220
- background: var(--sx-color-cyan);
221
- border-color: var(--sx-color-cyan);
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);
222
230
  }
223
231
 
224
- /* Indeterminate -- same as checked */
232
+ /* Indeterminate -- same forge gradient */
225
233
  .sx-checkbox-box-indeterminate {
226
- background: var(--sx-color-cyan);
227
- border-color: var(--sx-color-cyan);
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);
228
239
  }
229
240
 
230
241
  /* Hover -- border brightens on unchecked box */
@@ -232,10 +243,20 @@ function handleChange(e: Event) {
232
243
  border-color: var(--sx-color-border-hover);
233
244
  }
234
245
 
235
- /* Focus -- cyan outline */
246
+ /* Focus -- primary outline with forge glow */
236
247
  .sx-checkbox-input:focus-visible + .sx-checkbox-box {
237
- outline: 2px solid var(--sx-color-cyan);
248
+ outline: 2px solid var(--sx-color-primary);
238
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);
239
260
  }
240
261
 
241
262
  /* High contrast / forced colors: solid outline so focus is visible (APG) */
@@ -248,6 +269,9 @@ function handleChange(e: Event) {
248
269
 
249
270
  .sx-checkbox-box-error {
250
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);
251
275
  }
252
276
 
253
277
  .sx-checkbox-content {
@@ -303,5 +327,9 @@ function handleChange(e: Event) {
303
327
  .sx-checkbox-box {
304
328
  transition: none;
305
329
  }
330
+
331
+ .sx-checkbox-icon {
332
+ animation: none;
333
+ }
306
334
  }
307
335
  </style>
@@ -20,7 +20,7 @@ interface Props {
20
20
  /**
21
21
  * Checkbox
22
22
  *
23
- * Neo-Brutalist Dark — Clean checkbox with cyan accent fill and white checkmark.
23
+ * INFRARED — Clean checkbox with vermilion accent fill and white checkmark.
24
24
  * Uses native <input type="checkbox"> per WAI-ARIA APG (best practice: native over custom role="checkbox").
25
25
  * Label, description, error, indeterminate. Full a11y; focus and semantics follow the native input.
26
26
  */
@@ -1,7 +1,7 @@
1
1
  <!--
2
2
  @component Select
3
3
 
4
- Neo-Brutalist Dark — Dropdown select with clean trigger field, glass-blur panel,
4
+ INFRARED — Dropdown select with clean trigger field, glass-blur panel,
5
5
  keyboard-first navigation, type-ahead search, option groups, and multi-select.
6
6
 
7
7
  Follows WAI-ARIA APG Select-Only Combobox pattern: DOM focus stays on
@@ -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) {
@@ -646,23 +652,33 @@ onMount(() => {
646
652
 
647
653
  .sx-select-trigger:focus-visible {
648
654
  outline: none;
649
- border-color: var(--sx-color-cyan);
650
- box-shadow: 0 0 0 3px var(--sx-color-cyan-ring);
655
+ border-color: var(--sx-color-primary);
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
- border-color: var(--sx-color-cyan);
655
- box-shadow: 0 0 0 3px var(--sx-color-cyan-ring);
663
+ border-color: var(--sx-color-primary);
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: 0 0 0 3px var(--sx-color-red-ring);
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
  /* ========================================
@@ -747,12 +763,12 @@ onMount(() => {
747
763
  }
748
764
 
749
765
  .sx-select-option-active {
750
- background: var(--sx-color-cyan-hover);
751
- color: var(--sx-color-cyan);
766
+ background: var(--sx-color-primary-hover);
767
+ color: var(--sx-color-primary);
752
768
  }
753
769
 
754
770
  .sx-select-option-selected:not(.sx-select-option-active) {
755
- background: var(--sx-color-cyan-subtle);
771
+ background: var(--sx-color-primary-subtle);
756
772
  }
757
773
 
758
774
  .sx-select-option-disabled {
@@ -772,11 +788,11 @@ onMount(() => {
772
788
  flex-shrink: 0;
773
789
  display: flex;
774
790
  align-items: center;
775
- color: var(--sx-color-cyan);
791
+ color: var(--sx-color-primary);
776
792
  }
777
793
 
778
794
  .sx-select-option-active .sx-select-checkmark {
779
- color: var(--sx-color-cyan);
795
+ color: var(--sx-color-primary);
780
796
  }
781
797
 
782
798
  /* Checkbox square for multi select */
@@ -793,7 +809,7 @@ onMount(() => {
793
809
  }
794
810
 
795
811
  .sx-select-option-active .sx-select-check {
796
- border-color: var(--sx-color-cyan);
812
+ border-color: var(--sx-color-primary);
797
813
  }
798
814
 
799
815
  /* ========================================
@@ -47,7 +47,7 @@ interface Props {
47
47
  /**
48
48
  * Select
49
49
  *
50
- * Neo-Brutalist Dark — Dropdown select with clean trigger field, glass-blur panel,
50
+ * INFRARED — Dropdown select with clean trigger field, glass-blur panel,
51
51
  * keyboard-first navigation, type-ahead search, option groups, and multi-select.
52
52
  *
53
53
  * Follows WAI-ARIA APG Select-Only Combobox pattern: DOM focus stays on
@@ -1,7 +1,7 @@
1
1
  <!--
2
2
  @component Slider
3
3
 
4
- Neo-Brutalist Dark — Range slider with keyboard support, optional value display,
4
+ INFRARED — Range slider with keyboard support, optional value display,
5
5
  step marks, min/max labels, and full ARIA compliance.
6
6
 
7
7
  @example
@@ -13,7 +13,7 @@
13
13
  import { cn } from '../../utils/cn.js';
14
14
 
15
15
  type SliderSize = 'sm' | 'md' | 'lg';
16
- type SliderColor = 'cyan' | 'green' | 'gold' | 'red' | 'purple';
16
+ type SliderColor = 'primary' | 'green' | 'brass' | 'red' | 'teal';
17
17
 
18
18
  interface Props {
19
19
  /** Accessible label. */
@@ -61,7 +61,7 @@ let {
61
61
  formatValue,
62
62
  hideLabel = false,
63
63
  size = 'md',
64
- color = 'cyan',
64
+ color = 'primary',
65
65
  class: className = '',
66
66
  oninput,
67
67
  onchange,
@@ -199,50 +199,60 @@ function handleChange(e: Event) {
199
199
 
200
200
  /* Focused track glow — WebKit */
201
201
  .sx-slider-input:focus-visible::-webkit-slider-runnable-track {
202
- box-shadow: 0 0 0 1px var(--sx-slider-accent, var(--sx-color-cyan));
202
+ box-shadow: 0 0 0 1px var(--sx-slider-accent, var(--sx-color-primary));
203
203
  }
204
204
 
205
205
  /* Focused track glow — Firefox */
206
206
  .sx-slider-input:focus-visible::-moz-range-track {
207
- box-shadow: 0 0 0 1px var(--sx-slider-accent, var(--sx-color-cyan));
207
+ box-shadow: 0 0 0 1px var(--sx-slider-accent, var(--sx-color-primary));
208
208
  }
209
209
 
210
- /* Track — WebKit */
210
+ /* Track — WebKit — recessed channel */
211
211
  .sx-slider-input::-webkit-slider-runnable-track {
212
212
  height: var(--sx-slider-track-h, 6px);
213
213
  border-radius: var(--sx-radius-full);
214
214
  background: linear-gradient(
215
215
  to right,
216
- var(--sx-slider-accent, var(--sx-color-cyan)) 0%,
217
- var(--sx-slider-accent, var(--sx-color-cyan)) var(--sx-slider-fill),
216
+ var(--sx-slider-accent, var(--sx-color-primary)) 0%,
217
+ var(--sx-slider-accent, var(--sx-color-primary)) var(--sx-slider-fill),
218
218
  var(--sx-color-surface-2) var(--sx-slider-fill),
219
219
  var(--sx-color-surface-2) 100%
220
220
  );
221
+ box-shadow:
222
+ inset 0 1px 2px rgba(0, 0, 0, 0.3),
223
+ inset 0 0 0 1px rgba(0, 0, 0, 0.06);
221
224
  }
222
225
 
223
- /* Track — Firefox */
226
+ /* Track — Firefox — recessed channel */
224
227
  .sx-slider-input::-moz-range-track {
225
228
  height: var(--sx-slider-track-h, 6px);
226
229
  border-radius: var(--sx-radius-full);
227
230
  background: var(--sx-color-surface-2);
228
231
  border: none;
232
+ box-shadow:
233
+ inset 0 1px 2px rgba(0, 0, 0, 0.3),
234
+ inset 0 0 0 1px rgba(0, 0, 0, 0.06);
229
235
  }
230
236
 
231
237
  .sx-slider-input::-moz-range-progress {
232
238
  height: var(--sx-slider-track-h, 6px);
233
239
  border-radius: var(--sx-radius-full);
234
- background: var(--sx-slider-accent, var(--sx-color-cyan));
240
+ background: var(--sx-slider-accent, var(--sx-color-primary));
235
241
  }
236
242
 
237
- /* Thumb — WebKit */
243
+ /* Thumb — WebKit — 3D raised knob */
238
244
  .sx-slider-input::-webkit-slider-thumb {
239
245
  -webkit-appearance: none;
240
246
  width: var(--sx-slider-thumb, 18px);
241
247
  height: var(--sx-slider-thumb, 18px);
242
248
  border-radius: var(--sx-radius-full);
243
- background: var(--sx-color-text);
244
- border: 2px solid var(--sx-slider-accent, var(--sx-color-cyan));
249
+ background: linear-gradient(180deg, #E8E0D8 0%, #B8B0A8 100%);
250
+ border: 2px solid var(--sx-slider-accent, var(--sx-color-primary));
245
251
  margin-top: calc((var(--sx-slider-track-h, 6px) - var(--sx-slider-thumb, 18px)) / 2);
252
+ box-shadow:
253
+ 0 1px 0 0 rgba(0, 0, 0, 0.2),
254
+ 0 2px 0 0 rgba(0, 0, 0, 0.12),
255
+ 0 3px 6px -1px rgba(0, 0, 0, 0.25);
246
256
  transition:
247
257
  box-shadow var(--sx-transition-fast),
248
258
  transform var(--sx-transition-fast),
@@ -252,24 +262,35 @@ function handleChange(e: Event) {
252
262
 
253
263
  .sx-slider-input::-webkit-slider-thumb:hover {
254
264
  transform: scale(1.15);
265
+ box-shadow:
266
+ 0 1px 0 0 rgba(0, 0, 0, 0.2),
267
+ 0 2px 0 0 rgba(0, 0, 0, 0.12),
268
+ 0 4px 8px -1px rgba(0, 0, 0, 0.3),
269
+ 0 0 8px -2px var(--sx-slider-glow, rgba(255, 107, 53, 0.25));
255
270
  }
256
271
 
257
272
  .sx-slider-input:focus-visible::-webkit-slider-thumb {
258
273
  box-shadow:
259
- 0 0 0 3px var(--sx-slider-ring, rgba(0, 212, 255, 0.35)),
260
- 0 0 12px var(--sx-slider-glow, rgba(0, 212, 255, 0.25));
274
+ 0 0 0 3px var(--sx-slider-ring, rgba(255, 107, 53, 0.35)),
275
+ 0 0 12px var(--sx-slider-glow, rgba(255, 107, 53, 0.25)),
276
+ 0 1px 0 0 rgba(0, 0, 0, 0.2),
277
+ 0 2px 0 0 rgba(0, 0, 0, 0.12);
261
278
  transform: scale(1.2);
262
- background: var(--sx-slider-accent, var(--sx-color-cyan));
279
+ background: var(--sx-slider-accent, var(--sx-color-primary));
263
280
  border-color: var(--sx-color-text);
264
281
  }
265
282
 
266
- /* Thumb — Firefox */
283
+ /* Thumb — Firefox — 3D raised knob */
267
284
  .sx-slider-input::-moz-range-thumb {
268
285
  width: var(--sx-slider-thumb, 18px);
269
286
  height: var(--sx-slider-thumb, 18px);
270
287
  border-radius: var(--sx-radius-full);
271
- background: var(--sx-color-text);
272
- border: 2px solid var(--sx-slider-accent, var(--sx-color-cyan));
288
+ background: linear-gradient(180deg, #E8E0D8 0%, #B8B0A8 100%);
289
+ border: 2px solid var(--sx-slider-accent, var(--sx-color-primary));
290
+ box-shadow:
291
+ 0 1px 0 0 rgba(0, 0, 0, 0.2),
292
+ 0 2px 0 0 rgba(0, 0, 0, 0.12),
293
+ 0 3px 6px -1px rgba(0, 0, 0, 0.25);
273
294
  transition:
274
295
  box-shadow var(--sx-transition-fast),
275
296
  transform var(--sx-transition-fast),
@@ -279,42 +300,49 @@ function handleChange(e: Event) {
279
300
 
280
301
  .sx-slider-input::-moz-range-thumb:hover {
281
302
  transform: scale(1.15);
303
+ box-shadow:
304
+ 0 1px 0 0 rgba(0, 0, 0, 0.2),
305
+ 0 2px 0 0 rgba(0, 0, 0, 0.12),
306
+ 0 4px 8px -1px rgba(0, 0, 0, 0.3),
307
+ 0 0 8px -2px var(--sx-slider-glow, rgba(255, 107, 53, 0.25));
282
308
  }
283
309
 
284
310
  .sx-slider-input:focus-visible::-moz-range-thumb {
285
311
  box-shadow:
286
- 0 0 0 3px var(--sx-slider-ring, rgba(0, 212, 255, 0.35)),
287
- 0 0 12px var(--sx-slider-glow, rgba(0, 212, 255, 0.25));
312
+ 0 0 0 3px var(--sx-slider-ring, rgba(255, 107, 53, 0.35)),
313
+ 0 0 12px var(--sx-slider-glow, rgba(255, 107, 53, 0.25)),
314
+ 0 1px 0 0 rgba(0, 0, 0, 0.2),
315
+ 0 2px 0 0 rgba(0, 0, 0, 0.12);
288
316
  transform: scale(1.2);
289
- background: var(--sx-slider-accent, var(--sx-color-cyan));
317
+ background: var(--sx-slider-accent, var(--sx-color-primary));
290
318
  border-color: var(--sx-color-text);
291
319
  }
292
320
 
293
321
  /* Color variants — accent + focus ring colors */
294
- .sx-slider-color-cyan {
295
- --sx-slider-accent: var(--sx-color-cyan);
296
- --sx-slider-ring: rgba(0, 212, 255, 0.35);
297
- --sx-slider-glow: rgba(0, 212, 255, 0.25);
322
+ .sx-slider-color-primary {
323
+ --sx-slider-accent: var(--sx-color-primary);
324
+ --sx-slider-ring: rgba(255, 107, 53, 0.35);
325
+ --sx-slider-glow: rgba(255, 107, 53, 0.25);
298
326
  }
299
327
  .sx-slider-color-green {
300
328
  --sx-slider-accent: var(--sx-color-green);
301
- --sx-slider-ring: rgba(0, 255, 136, 0.35);
302
- --sx-slider-glow: rgba(0, 255, 136, 0.25);
329
+ --sx-slider-ring: rgba(74, 222, 128, 0.35);
330
+ --sx-slider-glow: rgba(74, 222, 128, 0.25);
303
331
  }
304
- .sx-slider-color-gold {
305
- --sx-slider-accent: var(--sx-color-gold);
306
- --sx-slider-ring: rgba(255, 184, 0, 0.35);
307
- --sx-slider-glow: rgba(255, 184, 0, 0.25);
332
+ .sx-slider-color-brass {
333
+ --sx-slider-accent: var(--sx-color-secondary);
334
+ --sx-slider-ring: rgba(200, 168, 78, 0.35);
335
+ --sx-slider-glow: rgba(200, 168, 78, 0.25);
308
336
  }
309
337
  .sx-slider-color-red {
310
338
  --sx-slider-accent: var(--sx-color-red);
311
- --sx-slider-ring: rgba(255, 82, 82, 0.35);
312
- --sx-slider-glow: rgba(255, 82, 82, 0.25);
339
+ --sx-slider-ring: rgba(220, 38, 38, 0.35);
340
+ --sx-slider-glow: rgba(220, 38, 38, 0.25);
313
341
  }
314
- .sx-slider-color-purple {
315
- --sx-slider-accent: var(--sx-color-purple);
316
- --sx-slider-ring: rgba(168, 85, 247, 0.35);
317
- --sx-slider-glow: rgba(168, 85, 247, 0.25);
342
+ .sx-slider-color-teal {
343
+ --sx-slider-accent: var(--sx-color-teal);
344
+ --sx-slider-ring: rgba(61, 139, 139, 0.35);
345
+ --sx-slider-glow: rgba(61, 139, 139, 0.25);
318
346
  }
319
347
 
320
348
  /* Size variants */
@@ -1,5 +1,5 @@
1
1
  type SliderSize = 'sm' | 'md' | 'lg';
2
- type SliderColor = 'cyan' | 'green' | 'gold' | 'red' | 'purple';
2
+ type SliderColor = 'primary' | 'green' | 'brass' | 'red' | 'teal';
3
3
  interface Props {
4
4
  /** Accessible label. */
5
5
  label: string;
@@ -36,7 +36,7 @@ interface Props {
36
36
  /**
37
37
  * Slider
38
38
  *
39
- * Neo-Brutalist Dark — Range slider with keyboard support, optional value display,
39
+ * INFRARED — Range slider with keyboard support, optional value display,
40
40
  * step marks, min/max labels, and full ARIA compliance.
41
41
  *
42
42
  * @example
@@ -1 +1 @@
1
- {"version":3,"file":"Slider.svelte.d.ts","sourceRoot":"","sources":["../../../src/forms/Slider/Slider.svelte.ts"],"names":[],"mappings":"AAMA,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACrC,KAAK,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAEhE,UAAU,KAAK;IACd,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,oBAAoB;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAuED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,MAAM,gDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Slider.svelte.d.ts","sourceRoot":"","sources":["../../../src/forms/Slider/Slider.svelte.ts"],"names":[],"mappings":"AAMA,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACrC,KAAK,WAAW,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAElE,UAAU,KAAK;IACd,wBAAwB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,qBAAqB;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sBAAsB;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACxC,8BAA8B;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,oBAAoB;IACpB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB;AAuED;;;;;;;;;;GAUG;AACH,QAAA,MAAM,MAAM,gDAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}