@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,13 +1,13 @@
1
1
  /**
2
- * Salmex I/O Design System — Neo-Brutalist Dark
2
+ * Salmex I/O Design System — INFRARED
3
3
  *
4
4
  * Dark-only. Glassmorphic. Sovereign.
5
- * Neo-Brutalist Dark design system tokens.
5
+ * Thermal optics. Forge heat. Earned authority.
6
6
  *
7
7
  * Token architecture: primitives → semantic → component
8
8
  * Prefix: --sx-
9
9
  *
10
- * Typography: TT Fors (body), TT Quaris (display), Consolas (mono).
10
+ * Typography: TT Fors (body), TT Quaris (display), JetBrains Mono (mono).
11
11
  * Fonts must be loaded by the consuming app.
12
12
  */
13
13
 
@@ -17,34 +17,42 @@
17
17
  Raw palette — never use directly in components
18
18
  ======================================== */
19
19
 
20
- --sx-gray-950: #0A0A0F;
21
- --sx-gray-900: #111118;
22
- --sx-gray-800: #1A1A24;
23
- --sx-gray-700: #252530;
24
- --sx-gray-600: #333340;
25
- --sx-gray-500: #55556A;
26
- --sx-gray-400: #8888A0;
27
- --sx-gray-300: #AAAABB;
28
- --sx-gray-200: #CCCCDD;
29
- --sx-gray-100: #E8E8F0;
30
- --sx-white: #F0F0F8;
31
-
32
- /* Accents */
33
- --sx-cyan-500: #00D4FF;
34
- --sx-cyan-400: #33DDFF;
35
- --sx-cyan-600: #00A8CC;
36
- --sx-gold-500: #FFB800;
37
- --sx-gold-400: #FFC933;
38
- --sx-gold-600: #CC9300;
39
- --sx-red-500: #FF3B3B;
40
- --sx-red-400: #FF6B6B;
41
- --sx-red-600: #CC2E2E;
42
- --sx-green-500: #00FF88;
43
- --sx-green-400: #33FFA0;
44
- --sx-green-600: #00CC6E;
45
- --sx-purple-500: #8B5CF6;
46
- --sx-purple-400: #A78BFA;
47
- --sx-purple-600: #7C3AED;
20
+ --sx-gray-950: #08080C;
21
+ --sx-gray-900: #0F0F14;
22
+ --sx-gray-800: #171720;
23
+ --sx-gray-700: #1F1F2A;
24
+ --sx-gray-600: #2D2D3A;
25
+ --sx-gray-500: #505060;
26
+ --sx-gray-400: #7A7A88;
27
+ --sx-gray-300: #A0A0AB;
28
+ --sx-gray-200: #C5C5CC;
29
+ --sx-gray-100: #E8E6E1;
30
+ --sx-white: #F0EEE8;
31
+
32
+ /* Accents — Vermilion (forge heat) */
33
+ --sx-vermilion-500: #FF6B35;
34
+ --sx-vermilion-400: #FF8C5A;
35
+ --sx-vermilion-600: #E05520;
36
+
37
+ /* Accents — Brass (earned authority) */
38
+ --sx-brass-500: #C8A84E;
39
+ --sx-brass-400: #D4B86A;
40
+ --sx-brass-600: #A68B3A;
41
+
42
+ /* Accents — Danger */
43
+ --sx-red-500: #DC2626;
44
+ --sx-red-400: #EF4444;
45
+ --sx-red-600: #B91C1C;
46
+
47
+ /* Accents — Phosphor (operational green) */
48
+ --sx-green-500: #4ADE80;
49
+ --sx-green-400: #6EE7A0;
50
+ --sx-green-600: #22C55E;
51
+
52
+ /* Accents — Teal (encrypted channel) */
53
+ --sx-teal-500: #3D8B8B;
54
+ --sx-teal-400: #5AABAB;
55
+ --sx-teal-600: #2D6B6B;
48
56
 
49
57
  /* ========================================
50
58
  SEMANTIC COLORS
@@ -68,25 +76,30 @@
68
76
  --sx-color-border-strong: rgba(255, 255, 255, 0.12);
69
77
  --sx-color-border-hover: rgba(255, 255, 255, 0.18);
70
78
 
71
- /* Accents */
72
- --sx-color-cyan: var(--sx-cyan-500);
73
- --sx-color-gold: var(--sx-gold-500);
79
+ /* Accents — semantic aliases */
80
+ --sx-color-primary: var(--sx-vermilion-500);
81
+ --sx-color-secondary: var(--sx-brass-500);
74
82
  --sx-color-red: var(--sx-red-500);
75
83
  --sx-color-green: var(--sx-green-500);
76
- --sx-color-purple: var(--sx-purple-500);
84
+ --sx-color-teal: var(--sx-teal-500);
85
+
86
+ /* Backward compat aliases — components referencing old names */
87
+ --sx-color-cyan: var(--sx-vermilion-500);
88
+ --sx-color-gold: var(--sx-brass-500);
89
+ --sx-color-purple: var(--sx-teal-500);
77
90
 
78
91
  /* Semantic states */
79
92
  --sx-color-success: var(--sx-green-500);
80
- --sx-color-warning: var(--sx-gold-500);
93
+ --sx-color-warning: var(--sx-brass-500);
81
94
  --sx-color-error: var(--sx-red-500);
82
- --sx-color-info: var(--sx-cyan-500);
95
+ --sx-color-info: var(--sx-teal-500);
83
96
 
84
97
  /* ========================================
85
98
  GLASSMORPHISM
86
99
  ======================================== */
87
100
 
88
- --sx-glass-bg: rgba(17, 17, 24, 0.6);
89
- --sx-glass-bg-strong: rgba(17, 17, 24, 0.85);
101
+ --sx-glass-bg: rgba(15, 15, 20, 0.6);
102
+ --sx-glass-bg-strong: rgba(15, 15, 20, 0.85);
90
103
  --sx-glass-border: 1px solid rgba(255, 255, 255, 0.06);
91
104
  --sx-glass-blur: blur(16px);
92
105
 
@@ -98,37 +111,54 @@
98
111
  --sx-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
99
112
  --sx-shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);
100
113
  --sx-shadow-xl: 0 16px 48px rgba(0, 0, 0, 0.6);
101
- --sx-shadow-glow-cyan: 0 0 20px rgba(0, 212, 255, 0.15);
102
- --sx-shadow-glow-cyan-strong: 0 0 30px rgba(0, 212, 255, 0.25);
103
- --sx-shadow-glow-gold: 0 0 20px rgba(255, 184, 0, 0.15);
104
- --sx-shadow-glow-red: 0 0 20px rgba(255, 59, 59, 0.15);
105
- --sx-shadow-glow-green: 0 0 20px rgba(0, 255, 136, 0.15);
114
+ --sx-shadow-glow-primary: 0 0 20px rgba(255, 107, 53, 0.18);
115
+ --sx-shadow-glow-primary-strong: 0 0 30px rgba(255, 107, 53, 0.30);
116
+ --sx-shadow-glow-brass: 0 0 20px rgba(200, 168, 78, 0.15);
117
+ --sx-shadow-glow-red: 0 0 20px rgba(220, 38, 38, 0.15);
118
+ --sx-shadow-glow-green: 0 0 20px rgba(74, 222, 128, 0.15);
119
+ --sx-shadow-glow-teal: 0 0 20px rgba(61, 139, 139, 0.15);
120
+
121
+ /* Backward compat aliases */
122
+ --sx-shadow-glow-cyan: var(--sx-shadow-glow-primary);
123
+ --sx-shadow-glow-cyan-strong: var(--sx-shadow-glow-primary-strong);
124
+ --sx-shadow-glow-gold: var(--sx-shadow-glow-brass);
106
125
 
107
126
  /* ========================================
108
127
  INTERACTION OVERLAYS
109
128
  Translucent accents for hovers, highlights, backdrops
110
129
  ======================================== */
111
130
 
112
- --sx-color-cyan-subtle: rgba(0, 212, 255, 0.06);
113
- --sx-color-cyan-hover: rgba(0, 212, 255, 0.1);
114
- --sx-color-cyan-active: rgba(0, 212, 255, 0.15);
115
- --sx-color-cyan-ring: rgba(0, 212, 255, 0.1);
116
- --sx-color-red-subtle: rgba(255, 59, 59, 0.06);
117
- --sx-color-red-hover: rgba(255, 59, 59, 0.1);
118
- --sx-color-red-ring: rgba(255, 59, 59, 0.1);
119
- --sx-color-green-subtle: rgba(0, 255, 136, 0.06);
120
- --sx-color-gold-subtle: rgba(255, 184, 0, 0.06);
121
- --sx-color-purple-subtle: rgba(139, 92, 246, 0.12);
122
- --sx-color-backdrop: rgba(10, 10, 15, 0.7);
131
+ --sx-color-primary-subtle: rgba(255, 107, 53, 0.06);
132
+ --sx-color-primary-hover: rgba(255, 107, 53, 0.1);
133
+ --sx-color-primary-active: rgba(255, 107, 53, 0.15);
134
+ --sx-color-primary-ring: rgba(255, 107, 53, 0.1);
135
+ --sx-color-red-subtle: rgba(220, 38, 38, 0.06);
136
+ --sx-color-red-hover: rgba(220, 38, 38, 0.1);
137
+ --sx-color-red-ring: rgba(220, 38, 38, 0.1);
138
+ --sx-color-green-subtle: rgba(74, 222, 128, 0.06);
139
+ --sx-color-brass-subtle: rgba(200, 168, 78, 0.06);
140
+ --sx-color-teal-subtle: rgba(61, 139, 139, 0.12);
141
+ --sx-color-backdrop: rgba(8, 8, 12, 0.7);
142
+
143
+ /* Backward compat aliases */
144
+ --sx-color-cyan-subtle: var(--sx-color-primary-subtle);
145
+ --sx-color-cyan-hover: var(--sx-color-primary-hover);
146
+ --sx-color-cyan-active: var(--sx-color-primary-active);
147
+ --sx-color-cyan-ring: var(--sx-color-primary-ring);
148
+ --sx-color-gold-subtle: var(--sx-color-brass-subtle);
149
+ --sx-color-purple-subtle: var(--sx-color-teal-subtle);
123
150
 
124
151
  /* ========================================
125
152
  GRADIENTS
126
153
  ======================================== */
127
154
 
128
- --sx-gradient-brand: linear-gradient(135deg, var(--sx-color-cyan), var(--sx-color-gold));
155
+ --sx-gradient-brand: linear-gradient(135deg, var(--sx-color-primary), var(--sx-color-secondary));
129
156
  --sx-gradient-surface: linear-gradient(180deg, var(--sx-color-surface), var(--sx-color-base));
130
- --sx-gradient-cyan: linear-gradient(135deg, var(--sx-color-cyan), var(--sx-cyan-600));
131
- --sx-gradient-overlay: linear-gradient(180deg, rgba(10, 10, 15, 0) 0%, rgba(10, 10, 15, 0.8) 100%);
157
+ --sx-gradient-primary: linear-gradient(135deg, var(--sx-color-primary), var(--sx-vermilion-600));
158
+ --sx-gradient-overlay: linear-gradient(180deg, rgba(8, 8, 12, 0) 0%, rgba(8, 8, 12, 0.8) 100%);
159
+
160
+ /* Backward compat */
161
+ --sx-gradient-cyan: var(--sx-gradient-primary);
132
162
 
133
163
  /* ========================================
134
164
  TYPOGRAPHY
@@ -136,7 +166,7 @@
136
166
 
137
167
  --sx-font-body: 'TT Fors', system-ui, -apple-system, sans-serif;
138
168
  --sx-font-display: 'TT Quaris', Georgia, 'Times New Roman', serif;
139
- --sx-font-mono: 'Consolas', 'Courier New', monospace;
169
+ --sx-font-mono: 'JetBrains Mono', 'Consolas', 'Courier New', monospace;
140
170
 
141
171
  --sx-text-xs: 0.75rem;
142
172
  --sx-text-sm: 0.875rem;
@@ -190,13 +220,31 @@
190
220
  --sx-radius-full: 9999px;
191
221
 
192
222
  /* ========================================
193
- TRANSITIONS
223
+ MOTION — Durations
224
+ ======================================== */
225
+
226
+ --sx-duration-instant: 100ms;
227
+ --sx-duration-fast: 150ms;
228
+ --sx-duration-base: 250ms;
229
+ --sx-duration-slow: 400ms;
230
+ --sx-duration-slower: 600ms;
231
+
232
+ /* ========================================
233
+ MOTION — Easing curves
234
+ ======================================== */
235
+
236
+ --sx-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
237
+ --sx-ease-in: cubic-bezier(0.7, 0, 0.84, 0);
238
+ --sx-ease-in-out: cubic-bezier(0.45, 0, 0.55, 1);
239
+ --sx-ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
240
+
241
+ /* ========================================
242
+ MOTION — Transition shorthands
194
243
  ======================================== */
195
244
 
196
245
  --sx-transition-fast: 150ms ease;
197
246
  --sx-transition-base: 250ms ease;
198
247
  --sx-transition-slow: 400ms ease;
199
- --sx-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
200
248
 
201
249
  /* ========================================
202
250
  Z-INDEX LAYERS
@@ -236,7 +284,7 @@
236
284
  }
237
285
 
238
286
  /* ========================================
239
- FOCUS STATES — Cyan outline, visible on dark
287
+ FOCUS STATES — Vermilion outline, visible on dark
240
288
  ======================================== */
241
289
 
242
290
  :focus {
@@ -244,8 +292,9 @@
244
292
  }
245
293
 
246
294
  :focus-visible {
247
- outline: 2px solid var(--sx-color-cyan);
295
+ outline: 2px solid var(--sx-color-primary);
248
296
  outline-offset: 2px;
297
+ border-radius: inherit;
249
298
  }
250
299
 
251
300
  /* ========================================
@@ -259,15 +308,104 @@
259
308
  stroke-width: var(--sx-icon-stroke);
260
309
  }
261
310
 
311
+ /* ========================================
312
+ AMBIENT BACKGROUND — Thermal signature
313
+ Barely-visible heat dissipation drifts slowly,
314
+ giving the base surface infrared life.
315
+ ======================================== */
316
+
317
+ body {
318
+ background-color: var(--sx-color-base);
319
+ background-image:
320
+ radial-gradient(ellipse at 15% 50%, rgba(255, 107, 53, 0.02) 0%, transparent 50%),
321
+ radial-gradient(ellipse at 85% 20%, rgba(200, 168, 78, 0.015) 0%, transparent 50%),
322
+ radial-gradient(ellipse at 50% 85%, rgba(61, 139, 139, 0.015) 0%, transparent 50%);
323
+ background-size: 200% 200%;
324
+ animation: sx-ambient-drift 25s ease-in-out infinite;
325
+ }
326
+
262
327
  /* ========================================
263
328
  SELECTION
264
329
  ======================================== */
265
330
 
266
331
  ::selection {
267
- background: rgba(0, 212, 255, 0.25);
332
+ background: rgba(255, 107, 53, 0.25);
268
333
  color: var(--sx-color-text);
269
334
  }
270
335
 
336
+ /* ========================================
337
+ @property — GPU-accelerated gradient angles
338
+ Required for conic-gradient rotation animations.
339
+ Falls back gracefully: browsers without @property
340
+ see a static gradient (no rotation), which is fine.
341
+ ======================================== */
342
+
343
+ @property --sx-border-angle {
344
+ syntax: "<angle>";
345
+ initial-value: 0deg;
346
+ inherits: false;
347
+ }
348
+
349
+ /* ========================================
350
+ GLOBAL KEYFRAMES
351
+ Shared animations used by multiple components.
352
+ Component-specific keyframes live in the component.
353
+ ======================================== */
354
+
355
+ @keyframes sx-border-flow {
356
+ to {
357
+ --sx-border-angle: 360deg;
358
+ }
359
+ }
360
+
361
+ @keyframes sx-ambient-drift {
362
+ 0% { background-position: 0% 50%; }
363
+ 50% { background-position: 100% 50%; }
364
+ 100% { background-position: 0% 50%; }
365
+ }
366
+
367
+ @keyframes sx-focus-breathe {
368
+ 0%, 100% { box-shadow: 0 0 0 3px rgba(255, 107, 53, 0.12); }
369
+ 50% { box-shadow: 0 0 0 3px rgba(255, 107, 53, 0.28); }
370
+ }
371
+
372
+ @keyframes sx-error-shake {
373
+ 0%, 100% { transform: translateX(0); }
374
+ 15% { transform: translateX(-4px); }
375
+ 30% { transform: translateX(4px); }
376
+ 45% { transform: translateX(-3px); }
377
+ 60% { transform: translateX(2px); }
378
+ 75% { transform: translateX(-1px); }
379
+ }
380
+
381
+ @keyframes sx-check-in {
382
+ from {
383
+ transform: scale(0.5);
384
+ opacity: 0;
385
+ }
386
+ to {
387
+ transform: scale(1);
388
+ opacity: 1;
389
+ }
390
+ }
391
+
392
+ @keyframes sx-badge-pop {
393
+ 0% { transform: scale(1); }
394
+ 40% { transform: scale(1.15); }
395
+ 100% { transform: scale(1); }
396
+ }
397
+
398
+ @keyframes sx-alert-in {
399
+ from {
400
+ opacity: 0;
401
+ transform: translateY(-8px);
402
+ }
403
+ to {
404
+ opacity: 1;
405
+ transform: translateY(0);
406
+ }
407
+ }
408
+
271
409
  /* ========================================
272
410
  REDUCED MOTION
273
411
  ======================================== */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@salmexio/ui",
3
- "version": "1.0.0",
4
- "description": "Salmex I/O Design System — Neo-Brutalist Dark component library for Salmex products",
3
+ "version": "1.2.0",
4
+ "description": "Salmex I/O Design System — INFRARED component library for Salmex products",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
7
7
  "publishConfig": {
@@ -74,7 +74,7 @@
74
74
  "sveltekit",
75
75
  "ui",
76
76
  "components",
77
- "neo-brutalist",
77
+ "infrared",
78
78
  "dark-mode",
79
79
  "accessibility",
80
80
  "typescript"