@salmexio/ui 0.1.1 → 0.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 (45) hide show
  1. package/dist/dialogs/Modal/Modal.svelte +140 -140
  2. package/dist/dialogs/Modal/Modal.svelte.d.ts.map +1 -1
  3. package/dist/feedback/Alert/Alert.svelte +63 -63
  4. package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -1
  5. package/dist/feedback/Spinner/Spinner.svelte +55 -55
  6. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -1
  7. package/dist/forms/Checkbox/Checkbox.svelte +64 -64
  8. package/dist/forms/Checkbox/Checkbox.svelte.d.ts.map +1 -1
  9. package/dist/forms/TextInput/TextInput.svelte +141 -141
  10. package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -1
  11. package/dist/index.d.ts +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +1 -0
  14. package/dist/layout/Card/Card.svelte +59 -59
  15. package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
  16. package/dist/layout/Container/Container.svelte +34 -34
  17. package/dist/layout/Container/Container.svelte.d.ts.map +1 -1
  18. package/dist/navigation/Tabs/Tabs.svelte +100 -101
  19. package/dist/navigation/Tabs/Tabs.svelte.d.ts.map +1 -1
  20. package/dist/primitives/Badge/Badge.svelte +35 -42
  21. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -1
  22. package/dist/primitives/Button/Button.svelte +47 -47
  23. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  24. package/dist/routes/+layout.svelte +1 -1
  25. package/dist/styles/tokens.css +92 -86
  26. package/dist/utils/keyboard.js +3 -3
  27. package/dist/windowing/Window/Window.svelte +602 -0
  28. package/dist/windowing/Window/Window.svelte.d.ts +65 -0
  29. package/dist/windowing/Window/Window.svelte.d.ts.map +1 -0
  30. package/dist/windowing/Window/index.d.ts +2 -0
  31. package/dist/windowing/Window/index.d.ts.map +1 -0
  32. package/dist/windowing/Window/index.js +1 -0
  33. package/dist/windowing/WindowManager/WindowManager.svelte +410 -0
  34. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts +38 -0
  35. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts.map +1 -0
  36. package/dist/windowing/WindowManager/index.d.ts +2 -0
  37. package/dist/windowing/WindowManager/index.d.ts.map +1 -0
  38. package/dist/windowing/WindowManager/index.js +1 -0
  39. package/dist/windowing/index.d.ts +5 -0
  40. package/dist/windowing/index.d.ts.map +1 -0
  41. package/dist/windowing/index.js +3 -0
  42. package/dist/windowing/windowStore.svelte.d.ts +49 -0
  43. package/dist/windowing/windowStore.svelte.d.ts.map +1 -0
  44. package/dist/windowing/windowStore.svelte.js +170 -0
  45. package/package.json +1 -1
@@ -10,110 +10,111 @@
10
10
  /* ========================================
11
11
  BASQUIAT × WIN2K COLORS
12
12
  ======================================== */
13
-
13
+
14
14
  /* Primary Palette - Bold & Vibrant (not safe corporate colors) */
15
- --salmex-crown-yellow: 255 220 0; /* Basquiat's crown gold */
16
- --salmex-street-yellow: 230 180 0; /* Lighter golden yellow for light mode */
17
- --salmex-electric-blue: 0 112 255; /* Vibrant, not muted */
18
- --salmex-street-red: 237 28 36; /* Graffiti red */
19
- --salmex-midnight-black: 18 18 18; /* Deep black canvas */
20
- --salmex-chalk-white: 248 248 240; /* Slightly off-white, like canvas */
21
-
15
+ --salmex-crown-yellow: 255 220 0; /* Basquiat's crown gold */
16
+ --salmex-street-yellow: 230 180 0; /* Lighter golden yellow for light mode */
17
+ --salmex-electric-blue: 0 112 255; /* Vibrant, not muted */
18
+ --salmex-street-red: 237 28 36; /* Graffiti red */
19
+ --salmex-midnight-black: 18 18 18; /* Deep black canvas */
20
+ --salmex-chalk-white: 248 248 240; /* Slightly off-white, like canvas */
21
+
22
22
  /* Window Chrome - Rougher, Less Perfect */
23
- --salmex-window-surface: 230 225 210; /* Aged paper/canvas feel */
24
- --salmex-titlebar-bold: 0 90 200; /* Strong blue, less corporate */
25
- --salmex-frame-dark: 40 40 40; /* Dark frame, not gray */
26
-
23
+ --salmex-window-surface: 230 225 210; /* Aged paper/canvas feel */
24
+ --salmex-titlebar-bold: 0 90 200; /* Strong blue, less corporate */
25
+ --salmex-frame-dark: 40 40 40; /* Dark frame, not gray */
26
+
27
27
  /* Button Face - Textured */
28
- --salmex-button-face: 235 230 215; /* Canvas-like surface */
29
- --salmex-button-shadow: 80 80 80; /* Stronger shadows */
30
- --salmex-button-dark-edge: 30 30 30; /* Bold dark edges */
31
- --salmex-button-highlight: 255 255 245; /* Bright highlights */
32
- --salmex-button-light: 210 205 190; /* Subtle mid-tone */
33
-
28
+ --salmex-button-face: 235 230 215; /* Canvas-like surface */
29
+ --salmex-button-shadow: 80 80 80; /* Stronger shadows */
30
+ --salmex-button-dark-edge: 30 30 30; /* Bold dark edges */
31
+ --salmex-button-highlight: 255 255 245; /* Bright highlights */
32
+ --salmex-button-light: 210 205 190; /* Subtle mid-tone */
33
+
34
34
  /* Accent Colors - Neo-Expressionist */
35
- --salmex-graffiti-pink: 255 105 180; /* Hot pink */
36
- --salmex-spray-orange: 255 140 0; /* Bold orange */
37
- --salmex-urban-green: 50 205 50; /* Bright green */
38
- --salmex-neon-purple: 148 0 211; /* Deep purple */
39
-
35
+ --salmex-graffiti-pink: 255 105 180; /* Hot pink */
36
+ --salmex-spray-orange: 255 140 0; /* Bold orange */
37
+ --salmex-urban-green: 50 205 50; /* Bright green */
38
+ --salmex-neon-purple: 148 0 211; /* Deep purple */
39
+
40
40
  /* System Colors - Less Safe */
41
- --salmex-selection: 255 220 0; /* Crown yellow, not blue */
42
- --salmex-hover-layer: 255 220 0; /* Yellow hover */
43
-
41
+ --salmex-selection: 255 220 0; /* Crown yellow, not blue */
42
+ --salmex-hover-layer: 255 220 0; /* Yellow hover */
43
+
44
44
  /* ========================================
45
45
  MODERN ENHANCEMENTS
46
46
  ======================================== */
47
-
47
+
48
48
  /* Primary Brand */
49
- --salmex-primary: 0 112 255; /* Electric blue */
49
+ --salmex-primary: 0 112 255; /* Electric blue */
50
50
  --salmex-primary-light: 64 150 255;
51
51
  --salmex-primary-dark: 0 80 200;
52
-
52
+
53
53
  /* Semantic Colors */
54
54
  --salmex-success: 50 205 50;
55
55
  --salmex-warning: 255 140 0;
56
56
  --salmex-error: 237 28 36;
57
57
  --salmex-info: 0 112 255;
58
-
58
+
59
59
  /* Text Colors */
60
60
  --salmex-text-primary: 18 18 18;
61
61
  --salmex-text-secondary: 60 60 60;
62
62
  --salmex-text-disabled: 140 140 140;
63
63
  --salmex-text-inverse: 248 248 240;
64
-
64
+
65
65
  /* Background Colors */
66
66
  --salmex-bg-primary: 248 248 240;
67
67
  --salmex-bg-secondary: 235 230 215;
68
68
  --salmex-bg-tertiary: 220 215 200;
69
- --salmex-bg-canvas: 255 255 250; /* Raw canvas */
70
-
69
+ --salmex-bg-canvas: 255 255 250; /* Raw canvas */
70
+
71
71
  /* Border Colors - Bolder */
72
72
  --salmex-border-default: 80 80 80;
73
73
  --salmex-border-light: 160 160 160;
74
74
  --salmex-border-dark: 30 30 30;
75
- --salmex-border-accent: 255 220 0; /* Yellow accent borders */
76
-
75
+ --salmex-border-accent: 255 220 0; /* Yellow accent borders */
76
+
77
77
  /* ========================================
78
78
  FOCUS INDICATORS - Yellow, visible in both themes
79
79
  ======================================== */
80
-
80
+
81
81
  /* Light: dark inner edge + yellow ring so yellow pops on light backgrounds */
82
82
  --salmex-focus-outline: none;
83
83
  --salmex-focus-offset: 0;
84
84
  --salmex-focus-style: dashed;
85
- --salmex-focus-ring: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px rgb(var(--salmex-crown-yellow));
85
+ --salmex-focus-ring: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px
86
+ rgb(var(--salmex-crown-yellow));
86
87
  /* Thicker dashed outline fallback for outline-only usage */
87
88
  --salmex-focus-outline-color: rgb(var(--salmex-crown-yellow));
88
89
  --salmex-focus-outline-width: 3px;
89
-
90
+
90
91
  /* ========================================
91
92
  SPACING (Slightly Irregular - 8px base but expressive)
92
93
  ======================================== */
93
-
94
+
94
95
  --salmex-space-1: 4px;
95
96
  --salmex-space-2: 8px;
96
97
  --salmex-space-3: 12px;
97
98
  --salmex-space-4: 16px;
98
- --salmex-space-5: 22px; /* Slightly off */
99
- --salmex-space-6: 26px; /* Not perfect 24 */
100
- --salmex-space-8: 34px; /* Intentionally irregular */
99
+ --salmex-space-5: 22px; /* Slightly off */
100
+ --salmex-space-6: 26px; /* Not perfect 24 */
101
+ --salmex-space-8: 34px; /* Intentionally irregular */
101
102
  --salmex-space-10: 42px;
102
103
  --salmex-space-12: 50px;
103
-
104
+
104
105
  /* ========================================
105
106
  TYPOGRAPHY - Win2K workhorse + Basquiat accents
106
107
  ======================================== */
107
-
108
+
108
109
  /* Core UI / body – dense UI, labels, long sessions (Work Sans) */
109
- --salmex-font-system: 'Work Sans', 'Segoe UI', system-ui, sans-serif;
110
+ --salmex-font-system: "Work Sans", "Segoe UI", system-ui, sans-serif;
110
111
  /* Display / sci-system – logos, nav, title bars, large only (Space Grotesk) */
111
- --salmex-font-display: 'Space Grotesk', 'Impact', system-ui, sans-serif;
112
+ --salmex-font-display: "Space Grotesk", "Impact", system-ui, sans-serif;
112
113
  /* Monospace – code, logs, debug panels (Roboto Mono) */
113
- --salmex-font-mono: 'Roboto Mono', 'Consolas', 'Courier New', monospace;
114
+ --salmex-font-mono: "Roboto Mono", "Consolas", "Courier New", monospace;
114
115
  /* Accent – scribble labels, notes, decorative only (Caveat Brush) */
115
- --salmex-font-handwrite: 'Caveat Brush', cursive;
116
-
116
+ --salmex-font-handwrite: "Caveat Brush", cursive;
117
+
117
118
  --salmex-font-size-xs: 11px;
118
119
  --salmex-font-size-sm: 13px;
119
120
  --salmex-font-size-base: 14px;
@@ -121,38 +122,38 @@
121
122
  --salmex-font-size-lg: 18px;
122
123
  --salmex-font-size-xl: 24px;
123
124
  --salmex-font-size-display: 32px;
124
-
125
+
125
126
  /* ========================================
126
127
  SHADOWS - Stronger, More Dramatic
127
128
  ======================================== */
128
-
129
+
129
130
  --salmex-shadow-sm: 2px 2px 0 rgb(var(--salmex-button-shadow));
130
- --salmex-shadow-md: 3px 3px 0 rgb(0 0 0 / 0.3); /* Flat, bold shadow */
131
- --salmex-shadow-lg: 5px 5px 0 rgb(0 0 0 / 0.4); /* Very bold */
131
+ --salmex-shadow-md: 3px 3px 0 rgb(0 0 0 / 0.3); /* Flat, bold shadow */
132
+ --salmex-shadow-lg: 5px 5px 0 rgb(0 0 0 / 0.4); /* Very bold */
132
133
  --salmex-shadow-inset: inset 2px 2px 4px rgb(0 0 0 / 0.2);
133
-
134
+
134
135
  /* ========================================
135
136
  BORDER RADIUS - Minimal but Slightly Imperfect
136
137
  ======================================== */
137
-
138
+
138
139
  --salmex-radius-none: 0;
139
140
  --salmex-radius-sm: 1px;
140
141
  --salmex-radius-md: 2px;
141
142
  --salmex-radius-lg: 3px;
142
- --salmex-radius-rough: 0; /* Sharp edges, Basquiat style */
143
-
143
+ --salmex-radius-rough: 0; /* Sharp edges, Basquiat style */
144
+
144
145
  /* ========================================
145
146
  TRANSITIONS - Snappier, More Energetic
146
147
  ======================================== */
147
-
148
+
148
149
  --salmex-transition-fast: 80ms ease-out;
149
150
  --salmex-transition-base: 120ms ease-out;
150
151
  --salmex-transition-slow: 180ms ease-out;
151
-
152
+
152
153
  /* ========================================
153
154
  Z-INDEX LAYERS
154
155
  ======================================== */
155
-
156
+
156
157
  --salmex-z-dropdown: 1000;
157
158
  --salmex-z-sticky: 1020;
158
159
  --salmex-z-fixed: 1030;
@@ -160,68 +161,68 @@
160
161
  --salmex-z-modal: 1050;
161
162
  --salmex-z-popover: 1060;
162
163
  --salmex-z-tooltip: 1070;
163
-
164
+
164
165
  /* ========================================
165
166
  BASQUIAT SIGNATURE ELEMENTS
166
167
  ======================================== */
167
-
168
- --salmex-crown-symbol: '👑'; /* Basquiat's crown */
169
- --salmex-annotation-style: 'handwrite';
170
- --salmex-texture-noise: 0.02; /* Slight texture/grain */
168
+
169
+ --salmex-crown-symbol: "👑"; /* Basquiat's crown */
170
+ --salmex-annotation-style: "handwrite";
171
+ --salmex-texture-noise: 0.02; /* Slight texture/grain */
171
172
  }
172
173
 
173
174
  /* ========================================
174
175
  DARK MODE (Street Art Night Mode)
175
176
  ======================================== */
176
177
 
177
- [data-theme='dark'] {
178
+ [data-theme="dark"] {
178
179
  /* Neon on black - high contrast street art */
179
180
  --salmex-midnight-black: 10 10 10;
180
181
  --salmex-chalk-white: 255 255 255;
181
-
182
+
182
183
  /* Window chrome - darker canvas */
183
184
  --salmex-window-surface: 22 22 22;
184
- --salmex-titlebar-bold: 0 140 255; /* Brighter blue for dark mode */
185
+ --salmex-titlebar-bold: 0 140 255; /* Brighter blue for dark mode */
185
186
  --salmex-button-face: 32 32 32;
186
187
  --salmex-button-shadow: 60 60 60;
187
188
  --salmex-button-dark-edge: 8 8 8;
188
189
  --salmex-button-highlight: 80 80 80;
189
190
  --salmex-button-light: 50 50 50;
190
-
191
+
191
192
  /* Text - high contrast */
192
193
  --salmex-text-primary: 255 255 255;
193
194
  --salmex-text-secondary: 200 200 200;
194
195
  --salmex-text-disabled: 100 100 100;
195
-
196
+
196
197
  /* Backgrounds - darker canvas */
197
198
  --salmex-bg-primary: 15 15 15;
198
199
  --salmex-bg-secondary: 22 22 22;
199
200
  --salmex-bg-tertiary: 32 32 32;
200
201
  --salmex-bg-canvas: 18 18 18;
201
-
202
+
202
203
  /* Borders - more visible */
203
204
  --salmex-border-default: 80 80 80;
204
205
  --salmex-border-light: 60 60 60;
205
206
  --salmex-border-dark: 120 120 120;
206
-
207
+
207
208
  /* Neon colors pop more in dark mode */
208
- --salmex-crown-yellow: 255 240 0; /* Brighter yellow */
209
- --salmex-electric-blue: 64 150 255; /* Lighter blue */
210
- --salmex-street-red: 255 50 50; /* Brighter red */
209
+ --salmex-crown-yellow: 255 240 0; /* Brighter yellow */
210
+ --salmex-electric-blue: 64 150 255; /* Lighter blue */
211
+ --salmex-street-red: 255 50 50; /* Brighter red */
211
212
  --salmex-graffiti-pink: 255 120 200;
212
213
  --salmex-spray-orange: 255 160 40;
213
214
  --salmex-urban-green: 80 230 80;
214
215
  --salmex-neon-purple: 180 40 255;
215
-
216
+
216
217
  /* Primary colors adjusted */
217
218
  --salmex-primary: 64 150 255;
218
219
  --salmex-primary-light: 100 180 255;
219
220
  --salmex-primary-dark: 40 120 220;
220
-
221
+
221
222
  /* Selection/hover - neon yellow */
222
223
  --salmex-selection: 255 240 0;
223
224
  --salmex-hover-layer: 255 240 0;
224
-
225
+
225
226
  /* Focus - bright yellow ring (no dark edge needed on dark bg) */
226
227
  --salmex-focus-outline: 2px dashed rgb(var(--salmex-crown-yellow));
227
228
  --salmex-focus-ring: 0 0 0 3px rgb(var(--salmex-crown-yellow));
@@ -230,7 +231,7 @@
230
231
  }
231
232
 
232
233
  @media (prefers-color-scheme: dark) {
233
- :root:not([data-theme='light']) {
234
+ :root:not([data-theme="light"]) {
234
235
  /* Same as [data-theme='dark'] */
235
236
  --salmex-midnight-black: 10 10 10;
236
237
  --salmex-chalk-white: 255 255 255;
@@ -276,7 +277,7 @@ body {
276
277
  }
277
278
 
278
279
  body::before {
279
- content: '';
280
+ content: "";
280
281
  position: fixed;
281
282
  top: 0;
282
283
  left: 0;
@@ -284,8 +285,13 @@ body::before {
284
285
  height: 100%;
285
286
  pointer-events: none;
286
287
  opacity: 0.03;
287
- background-image:
288
- repeating-linear-gradient(0deg, transparent, transparent 2px, rgb(0 0 0 / 0.02) 2px, rgb(0 0 0 / 0.02) 4px);
288
+ background-image: repeating-linear-gradient(
289
+ 0deg,
290
+ transparent,
291
+ transparent 2px,
292
+ rgb(0 0 0 / 0.02) 2px,
293
+ rgb(0 0 0 / 0.02) 4px
294
+ );
289
295
  z-index: -1;
290
296
  }
291
297
 
@@ -302,17 +308,17 @@ body::before {
302
308
  }
303
309
 
304
310
  /* Light theme: dark edge + yellow in one clean ring */
305
- :root:not([data-theme='dark']) :focus-visible {
311
+ :root:not([data-theme="dark"]) :focus-visible {
306
312
  box-shadow: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px rgb(var(--salmex-crown-yellow));
307
313
  }
308
314
 
309
315
  /* Dark theme: yellow only */
310
- [data-theme='dark'] :focus-visible {
316
+ [data-theme="dark"] :focus-visible {
311
317
  box-shadow: 0 0 0 3px rgb(var(--salmex-crown-yellow));
312
318
  }
313
319
 
314
320
  @media (prefers-color-scheme: dark) {
315
- :root:not([data-theme='light']) :focus-visible {
321
+ :root:not([data-theme="light"]) :focus-visible {
316
322
  box-shadow: 0 0 0 3px rgb(var(--salmex-crown-yellow));
317
323
  }
318
324
  }
@@ -330,7 +336,7 @@ body::before {
330
336
  transition-duration: 0.01ms !important;
331
337
  scroll-behavior: auto !important;
332
338
  }
333
-
339
+
334
340
  :focus-visible {
335
341
  transition: none;
336
342
  }
@@ -12,7 +12,7 @@ export const Keys = {
12
12
  ArrowLeft: 'ArrowLeft',
13
13
  ArrowRight: 'ArrowRight',
14
14
  Home: 'Home',
15
- End: 'End',
15
+ End: 'End'
16
16
  };
17
17
  /**
18
18
  * Trap focus within a container (e.g. modal). Tab cycles inside; restores focus on deactivate.
@@ -25,7 +25,7 @@ export function createFocusTrap(container) {
25
25
  'input:not([disabled]):not([tabindex="-1"])',
26
26
  'select:not([disabled]):not([tabindex="-1"])',
27
27
  'textarea:not([disabled]):not([tabindex="-1"])',
28
- '[tabindex]:not([tabindex="-1"])',
28
+ '[tabindex]:not([tabindex="-1"])'
29
29
  ].join(', ');
30
30
  function getFocusable() {
31
31
  return Array.from(container.querySelectorAll(focusableSelector));
@@ -58,7 +58,7 @@ export function createFocusTrap(container) {
58
58
  previouslyFocused.focus();
59
59
  }
60
60
  previouslyFocused = null;
61
- },
61
+ }
62
62
  };
63
63
  }
64
64
  /** Unique ID for aria attributes (per-instance safe). */