@salmexio/ui 0.3.1 → 1.0.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 (110) hide show
  1. package/README.md +52 -3
  2. package/dist/dialogs/ContextMenu/ContextMenu.svelte +96 -93
  3. package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts +3 -2
  4. package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts.map +1 -1
  5. package/dist/dialogs/Modal/Modal.svelte +112 -102
  6. package/dist/dialogs/Modal/Modal.svelte.d.ts +1 -1
  7. package/dist/feedback/Alert/Alert.svelte +115 -221
  8. package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
  9. package/dist/feedback/ProgressBar/ProgressBar.svelte +246 -0
  10. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +40 -0
  11. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -0
  12. package/dist/feedback/ProgressBar/index.d.ts +2 -0
  13. package/dist/feedback/ProgressBar/index.d.ts.map +1 -0
  14. package/dist/feedback/ProgressBar/index.js +1 -0
  15. package/dist/feedback/Skeleton/Skeleton.svelte +153 -0
  16. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +37 -0
  17. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts.map +1 -0
  18. package/dist/feedback/Skeleton/index.d.ts +2 -0
  19. package/dist/feedback/Skeleton/index.d.ts.map +1 -0
  20. package/dist/feedback/Skeleton/index.js +1 -0
  21. package/dist/feedback/Spinner/Spinner.svelte +88 -154
  22. package/dist/feedback/Spinner/Spinner.svelte.d.ts +5 -3
  23. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -1
  24. package/dist/feedback/Toast/Toaster.svelte +431 -0
  25. package/dist/feedback/Toast/Toaster.svelte.d.ts +22 -0
  26. package/dist/feedback/Toast/Toaster.svelte.d.ts.map +1 -0
  27. package/dist/feedback/Toast/index.d.ts +4 -0
  28. package/dist/feedback/Toast/index.d.ts.map +1 -0
  29. package/dist/feedback/Toast/index.js +2 -0
  30. package/dist/feedback/Toast/toastStore.d.ts +34 -0
  31. package/dist/feedback/Toast/toastStore.d.ts.map +1 -0
  32. package/dist/feedback/Toast/toastStore.js +43 -0
  33. package/dist/feedback/index.d.ts +4 -0
  34. package/dist/feedback/index.d.ts.map +1 -1
  35. package/dist/feedback/index.js +3 -0
  36. package/dist/forms/Checkbox/Checkbox.svelte +82 -103
  37. package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
  38. package/dist/forms/Select/Select.svelte +136 -177
  39. package/dist/forms/Select/Select.svelte.d.ts +1 -1
  40. package/dist/forms/Slider/Slider.svelte +356 -0
  41. package/dist/forms/Slider/Slider.svelte.d.ts +50 -0
  42. package/dist/forms/Slider/Slider.svelte.d.ts.map +1 -0
  43. package/dist/forms/Slider/index.d.ts +2 -0
  44. package/dist/forms/Slider/index.d.ts.map +1 -0
  45. package/dist/forms/Slider/index.js +1 -0
  46. package/dist/forms/TextInput/TextInput.svelte +148 -164
  47. package/dist/forms/TextInput/TextInput.svelte.d.ts +1 -1
  48. package/dist/forms/Textarea/Textarea.svelte +615 -0
  49. package/dist/forms/Textarea/Textarea.svelte.d.ts +47 -0
  50. package/dist/forms/Textarea/Textarea.svelte.d.ts.map +1 -0
  51. package/dist/forms/Textarea/index.d.ts +2 -0
  52. package/dist/forms/Textarea/index.d.ts.map +1 -0
  53. package/dist/forms/Textarea/index.js +1 -0
  54. package/dist/forms/Toggle/Toggle.svelte +239 -0
  55. package/dist/forms/Toggle/Toggle.svelte.d.ts +39 -0
  56. package/dist/forms/Toggle/Toggle.svelte.d.ts.map +1 -0
  57. package/dist/forms/Toggle/index.d.ts +2 -0
  58. package/dist/forms/Toggle/index.d.ts.map +1 -0
  59. package/dist/forms/Toggle/index.js +1 -0
  60. package/dist/forms/index.d.ts +3 -0
  61. package/dist/forms/index.d.ts.map +1 -1
  62. package/dist/forms/index.js +3 -0
  63. package/dist/index.d.ts +0 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +0 -1
  66. package/dist/layout/Card/Card.svelte +64 -40
  67. package/dist/layout/Card/Card.svelte.d.ts +1 -1
  68. package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
  69. package/dist/layout/Container/Container.svelte +71 -71
  70. package/dist/layout/Container/Container.svelte.d.ts +2 -2
  71. package/dist/navigation/CommandPalette/CommandPalette.svelte +410 -181
  72. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +8 -3
  73. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts.map +1 -1
  74. package/dist/navigation/Tabs/Tabs.svelte +94 -178
  75. package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
  76. package/dist/primitives/Badge/Badge.svelte +85 -223
  77. package/dist/primitives/Badge/Badge.svelte.d.ts +2 -2
  78. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -1
  79. package/dist/primitives/Button/Button.svelte +138 -208
  80. package/dist/primitives/Button/Button.svelte.d.ts +3 -3
  81. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  82. package/dist/primitives/Tooltip/Tooltip.svelte +260 -0
  83. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +36 -0
  84. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts.map +1 -0
  85. package/dist/primitives/Tooltip/index.d.ts +2 -0
  86. package/dist/primitives/Tooltip/index.d.ts.map +1 -0
  87. package/dist/primitives/Tooltip/index.js +1 -0
  88. package/dist/primitives/index.d.ts +1 -0
  89. package/dist/primitives/index.d.ts.map +1 -1
  90. package/dist/primitives/index.js +1 -0
  91. package/dist/styles/tokens.css +200 -259
  92. package/package.json +5 -5
  93. package/dist/windowing/Window/Window.svelte +0 -602
  94. package/dist/windowing/Window/Window.svelte.d.ts +0 -65
  95. package/dist/windowing/Window/Window.svelte.d.ts.map +0 -1
  96. package/dist/windowing/Window/index.d.ts +0 -2
  97. package/dist/windowing/Window/index.d.ts.map +0 -1
  98. package/dist/windowing/Window/index.js +0 -1
  99. package/dist/windowing/WindowManager/WindowManager.svelte +0 -410
  100. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts +0 -38
  101. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts.map +0 -1
  102. package/dist/windowing/WindowManager/index.d.ts +0 -2
  103. package/dist/windowing/WindowManager/index.d.ts.map +0 -1
  104. package/dist/windowing/WindowManager/index.js +0 -1
  105. package/dist/windowing/index.d.ts +0 -5
  106. package/dist/windowing/index.d.ts.map +0 -1
  107. package/dist/windowing/index.js +0 -3
  108. package/dist/windowing/windowStore.svelte.d.ts +0 -49
  109. package/dist/windowing/windowStore.svelte.d.ts.map +0 -1
  110. package/dist/windowing/windowStore.svelte.js +0 -170
@@ -1,268 +1,232 @@
1
1
  /**
2
- * Salmex I/O UI Design Tokens
3
- * Win2K reimagined by Jean-Michel Basquiat
4
- * Raw. Expressive. Powerful. Unfinished.
2
+ * Salmex I/O Design System — Neo-Brutalist Dark
5
3
  *
6
- * Typography: Work Sans (UI), Roboto Mono (code), Space Grotesk (display), Caveat Brush (accent).
7
- * Load fonts first in your app (e.g. in root layout CSS): @import url('https://fonts.googleapis.com/...') before other imports.
4
+ * Dark-only. Glassmorphic. Sovereign.
5
+ * Neo-Brutalist Dark design system tokens.
6
+ *
7
+ * Token architecture: primitives → semantic → component
8
+ * Prefix: --sx-
9
+ *
10
+ * Typography: TT Fors (body), TT Quaris (display), Consolas (mono).
11
+ * Fonts must be loaded by the consuming app.
8
12
  */
13
+
9
14
  :root {
10
15
  /* ========================================
11
- BASQUIAT × WIN2K COLORS
16
+ PRIMITIVE COLORS
17
+ Raw palette — never use directly in components
12
18
  ======================================== */
13
19
 
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
-
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
-
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
-
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
-
40
- /* System Colors - Less Safe */
41
- --salmex-selection: 255 220 0; /* Crown yellow, not blue */
42
- --salmex-hover-layer: 255 220 0; /* Yellow hover */
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;
43
48
 
44
49
  /* ========================================
45
- MODERN ENHANCEMENTS
50
+ SEMANTIC COLORS
51
+ Purpose-driven — use these in components
46
52
  ======================================== */
47
53
 
48
- /* Primary Brand */
49
- --salmex-primary: 0 112 255; /* Electric blue */
50
- --salmex-primary-light: 64 150 255;
51
- --salmex-primary-dark: 0 80 200;
52
-
53
- /* Semantic Colors */
54
- --salmex-success: 50 205 50;
55
- --salmex-warning: 255 140 0;
56
- --salmex-error: 237 28 36;
57
- --salmex-info: 0 112 255;
58
-
59
- /* Text Colors */
60
- --salmex-text-primary: 18 18 18;
61
- --salmex-text-secondary: 60 60 60;
62
- --salmex-text-disabled: 140 140 140;
63
- --salmex-text-inverse: 248 248 240;
64
-
65
- /* Background Colors */
66
- --salmex-bg-primary: 248 248 240;
67
- --salmex-bg-secondary: 235 230 215;
68
- --salmex-bg-tertiary: 220 215 200;
69
- --salmex-bg-canvas: 255 255 250; /* Raw canvas */
70
-
71
- /* Border Colors - Bolder */
72
- --salmex-border-default: 80 80 80;
73
- --salmex-border-light: 160 160 160;
74
- --salmex-border-dark: 30 30 30;
75
- --salmex-border-accent: 255 220 0; /* Yellow accent borders */
54
+ /* Backgrounds */
55
+ --sx-color-base: var(--sx-gray-950);
56
+ --sx-color-surface: var(--sx-gray-900);
57
+ --sx-color-surface-2: var(--sx-gray-800);
58
+ --sx-color-surface-3: var(--sx-gray-700);
59
+
60
+ /* Text */
61
+ --sx-color-text: var(--sx-gray-100);
62
+ --sx-color-text-secondary: var(--sx-gray-400);
63
+ --sx-color-text-disabled: var(--sx-gray-500);
64
+ --sx-color-text-inverse: var(--sx-gray-950);
65
+
66
+ /* Borders */
67
+ --sx-color-border: rgba(255, 255, 255, 0.06);
68
+ --sx-color-border-strong: rgba(255, 255, 255, 0.12);
69
+ --sx-color-border-hover: rgba(255, 255, 255, 0.18);
70
+
71
+ /* Accents */
72
+ --sx-color-cyan: var(--sx-cyan-500);
73
+ --sx-color-gold: var(--sx-gold-500);
74
+ --sx-color-red: var(--sx-red-500);
75
+ --sx-color-green: var(--sx-green-500);
76
+ --sx-color-purple: var(--sx-purple-500);
77
+
78
+ /* Semantic states */
79
+ --sx-color-success: var(--sx-green-500);
80
+ --sx-color-warning: var(--sx-gold-500);
81
+ --sx-color-error: var(--sx-red-500);
82
+ --sx-color-info: var(--sx-cyan-500);
76
83
 
77
84
  /* ========================================
78
- FOCUS INDICATORS - Yellow, visible in both themes
85
+ GLASSMORPHISM
79
86
  ======================================== */
80
87
 
81
- /* Light: dark inner edge + yellow ring so yellow pops on light backgrounds */
82
- --salmex-focus-outline: none;
83
- --salmex-focus-offset: 0;
84
- --salmex-focus-style: dashed;
85
- --salmex-focus-ring: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px
86
- rgb(var(--salmex-crown-yellow));
87
- /* Thicker dashed outline fallback for outline-only usage */
88
- --salmex-focus-outline-color: rgb(var(--salmex-crown-yellow));
89
- --salmex-focus-outline-width: 3px;
88
+ --sx-glass-bg: rgba(17, 17, 24, 0.6);
89
+ --sx-glass-bg-strong: rgba(17, 17, 24, 0.85);
90
+ --sx-glass-border: 1px solid rgba(255, 255, 255, 0.06);
91
+ --sx-glass-blur: blur(16px);
90
92
 
91
93
  /* ========================================
92
- SPACING (Slightly Irregular - 8px base but expressive)
94
+ SHADOWS
93
95
  ======================================== */
94
96
 
95
- --salmex-space-1: 4px;
96
- --salmex-space-2: 8px;
97
- --salmex-space-3: 12px;
98
- --salmex-space-4: 16px;
99
- --salmex-space-5: 22px; /* Slightly off */
100
- --salmex-space-6: 26px; /* Not perfect 24 */
101
- --salmex-space-8: 34px; /* Intentionally irregular */
102
- --salmex-space-10: 42px;
103
- --salmex-space-12: 50px;
97
+ --sx-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
98
+ --sx-shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
99
+ --sx-shadow-lg: 0 8px 32px rgba(0, 0, 0, 0.5);
100
+ --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);
104
106
 
105
107
  /* ========================================
106
- TYPOGRAPHY - Win2K workhorse + Basquiat accents
108
+ INTERACTION OVERLAYS
109
+ Translucent accents for hovers, highlights, backdrops
107
110
  ======================================== */
108
111
 
109
- /* Core UI / body – dense UI, labels, long sessions (Work Sans) */
110
- --salmex-font-system: "Work Sans", "Segoe UI", system-ui, sans-serif;
111
- /* Display / sci-system – logos, nav, title bars, large only (Space Grotesk) */
112
- --salmex-font-display: "Space Grotesk", "Impact", system-ui, sans-serif;
113
- /* Monospace – code, logs, debug panels (Roboto Mono) */
114
- --salmex-font-mono: "Roboto Mono", "Consolas", "Courier New", monospace;
115
- /* Accent – scribble labels, notes, decorative only (Caveat Brush) */
116
- --salmex-font-handwrite: "Caveat Brush", cursive;
117
-
118
- --salmex-font-size-xs: 11px;
119
- --salmex-font-size-sm: 13px;
120
- --salmex-font-size-base: 14px;
121
- --salmex-font-size-md: 15px;
122
- --salmex-font-size-lg: 18px;
123
- --salmex-font-size-xl: 24px;
124
- --salmex-font-size-display: 32px;
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);
125
123
 
126
124
  /* ========================================
127
- SHADOWS - Stronger, More Dramatic
125
+ GRADIENTS
128
126
  ======================================== */
129
127
 
130
- --salmex-shadow-sm: 2px 2px 0 rgb(var(--salmex-button-shadow));
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 */
133
- --salmex-shadow-inset: inset 2px 2px 4px rgb(0 0 0 / 0.2);
128
+ --sx-gradient-brand: linear-gradient(135deg, var(--sx-color-cyan), var(--sx-color-gold));
129
+ --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%);
134
132
 
135
133
  /* ========================================
136
- BORDER RADIUS - Minimal but Slightly Imperfect
134
+ TYPOGRAPHY
137
135
  ======================================== */
138
136
 
139
- --salmex-radius-none: 0;
140
- --salmex-radius-sm: 1px;
141
- --salmex-radius-md: 2px;
142
- --salmex-radius-lg: 3px;
143
- --salmex-radius-rough: 0; /* Sharp edges, Basquiat style */
137
+ --sx-font-body: 'TT Fors', system-ui, -apple-system, sans-serif;
138
+ --sx-font-display: 'TT Quaris', Georgia, 'Times New Roman', serif;
139
+ --sx-font-mono: 'Consolas', 'Courier New', monospace;
140
+
141
+ --sx-text-xs: 0.75rem;
142
+ --sx-text-sm: 0.875rem;
143
+ --sx-text-base: 1rem;
144
+ --sx-text-md: 1.125rem;
145
+ --sx-text-lg: 1.25rem;
146
+ --sx-text-xl: 1.5rem;
147
+ --sx-text-2xl: 2rem;
148
+ --sx-text-display: 3rem;
149
+
150
+ --sx-leading-tight: 1.2;
151
+ --sx-leading-normal: 1.5;
152
+ --sx-leading-relaxed: 1.65;
153
+
154
+ --sx-tracking-tight: -0.02em;
155
+ --sx-tracking-normal: 0;
156
+ --sx-tracking-wide: 0.02em;
157
+ --sx-tracking-wider: 0.05em;
144
158
 
145
159
  /* ========================================
146
- TRANSITIONS - Snappier, More Energetic
160
+ SPACING
147
161
  ======================================== */
148
162
 
149
- --salmex-transition-fast: 80ms ease-out;
150
- --salmex-transition-base: 120ms ease-out;
151
- --salmex-transition-slow: 180ms ease-out;
163
+ --sx-space-0: 0;
164
+ --sx-space-px: 1px;
165
+ --sx-space-0-5: 0.125rem;
166
+ --sx-space-1: 0.25rem;
167
+ --sx-space-1-5: 0.375rem;
168
+ --sx-space-2: 0.5rem;
169
+ --sx-space-2-5: 0.625rem;
170
+ --sx-space-3: 0.75rem;
171
+ --sx-space-4: 1rem;
172
+ --sx-space-5: 1.25rem;
173
+ --sx-space-6: 1.5rem;
174
+ --sx-space-8: 2rem;
175
+ --sx-space-10: 2.5rem;
176
+ --sx-space-12: 3rem;
177
+ --sx-space-16: 4rem;
178
+ --sx-space-20: 5rem;
179
+ --sx-space-24: 6rem;
152
180
 
153
181
  /* ========================================
154
- Z-INDEX LAYERS
182
+ BORDER RADIUS
155
183
  ======================================== */
156
184
 
157
- --salmex-z-dropdown: 1000;
158
- --salmex-z-sticky: 1020;
159
- --salmex-z-fixed: 1030;
160
- --salmex-z-modal-backdrop: 1040;
161
- --salmex-z-modal: 1050;
162
- --salmex-z-popover: 1060;
163
- --salmex-z-tooltip: 1070;
185
+ --sx-radius-none: 0;
186
+ --sx-radius-sm: 6px;
187
+ --sx-radius-md: 10px;
188
+ --sx-radius-lg: 16px;
189
+ --sx-radius-xl: 24px;
190
+ --sx-radius-full: 9999px;
164
191
 
165
192
  /* ========================================
166
- BASQUIAT SIGNATURE ELEMENTS
193
+ TRANSITIONS
167
194
  ======================================== */
168
195
 
169
- --salmex-crown-symbol: "👑"; /* Basquiat's crown */
170
- --salmex-annotation-style: "handwrite";
171
- --salmex-texture-noise: 0.02; /* Slight texture/grain */
172
- }
196
+ --sx-transition-fast: 150ms ease;
197
+ --sx-transition-base: 250ms ease;
198
+ --sx-transition-slow: 400ms ease;
199
+ --sx-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
173
200
 
174
- /* ========================================
175
- DARK MODE (Street Art Night Mode)
176
- ======================================== */
201
+ /* ========================================
202
+ Z-INDEX LAYERS
203
+ ======================================== */
177
204
 
178
- [data-theme="dark"] {
179
- /* Neon on black - high contrast street art */
180
- --salmex-midnight-black: 10 10 10;
181
- --salmex-chalk-white: 255 255 255;
182
-
183
- /* Window chrome - darker canvas */
184
- --salmex-window-surface: 22 22 22;
185
- --salmex-titlebar-bold: 0 140 255; /* Brighter blue for dark mode */
186
- --salmex-button-face: 32 32 32;
187
- --salmex-button-shadow: 50 50 50;
188
- --salmex-button-dark-edge: 8 8 8;
189
- --salmex-button-highlight: 90 90 90;
190
- --salmex-button-light: 50 50 50;
191
-
192
- /* Text - high contrast */
193
- --salmex-text-primary: 255 255 255;
194
- --salmex-text-secondary: 200 200 200;
195
- --salmex-text-disabled: 100 100 100;
196
-
197
- /* Backgrounds - darker canvas */
198
- --salmex-bg-primary: 15 15 15;
199
- --salmex-bg-secondary: 22 22 22;
200
- --salmex-bg-tertiary: 32 32 32;
201
- --salmex-bg-canvas: 18 18 18;
202
-
203
- /* Borders - more visible */
204
- --salmex-border-default: 80 80 80;
205
- --salmex-border-light: 60 60 60;
206
- --salmex-border-dark: 120 120 120;
207
-
208
- /* Neon colors pop more in dark mode */
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 */
212
- --salmex-graffiti-pink: 255 120 200;
213
- --salmex-spray-orange: 255 160 40;
214
- --salmex-urban-green: 80 230 80;
215
- --salmex-neon-purple: 180 40 255;
216
-
217
- /* Primary colors adjusted */
218
- --salmex-primary: 64 150 255;
219
- --salmex-primary-light: 100 180 255;
220
- --salmex-primary-dark: 40 120 220;
221
-
222
- /* Selection/hover - neon yellow */
223
- --salmex-selection: 255 240 0;
224
- --salmex-hover-layer: 255 240 0;
225
-
226
- /* Focus - bright yellow ring (no dark edge needed on dark bg) */
227
- --salmex-focus-outline: 2px dashed rgb(var(--salmex-crown-yellow));
228
- --salmex-focus-ring: 0 0 0 3px rgb(var(--salmex-crown-yellow));
229
- --salmex-focus-outline-color: rgb(var(--salmex-crown-yellow));
230
- --salmex-focus-outline-width: 3px;
231
- }
205
+ --sx-z-base: 1;
206
+ --sx-z-dropdown: 1000;
207
+ --sx-z-sticky: 1020;
208
+ --sx-z-fixed: 1030;
209
+ --sx-z-modal-backdrop: 1040;
210
+ --sx-z-modal: 1050;
211
+ --sx-z-popover: 1060;
212
+ --sx-z-tooltip: 1070;
213
+ --sx-z-grain: 2000;
232
214
 
233
- @media (prefers-color-scheme: dark) {
234
- :root:not([data-theme="light"]) {
235
- /* Same as [data-theme='dark'] */
236
- --salmex-midnight-black: 10 10 10;
237
- --salmex-chalk-white: 255 255 255;
238
- --salmex-window-surface: 22 22 22;
239
- --salmex-titlebar-bold: 0 140 255;
240
- --salmex-button-face: 32 32 32;
241
- --salmex-button-shadow: 50 50 50;
242
- --salmex-button-dark-edge: 8 8 8;
243
- --salmex-button-highlight: 90 90 90;
244
- --salmex-button-light: 50 50 50;
245
- --salmex-text-primary: 255 255 255;
246
- --salmex-text-secondary: 200 200 200;
247
- --salmex-text-disabled: 100 100 100;
248
- --salmex-bg-primary: 15 15 15;
249
- --salmex-bg-secondary: 22 22 22;
250
- --salmex-bg-tertiary: 32 32 32;
251
- --salmex-bg-canvas: 18 18 18;
252
- --salmex-border-default: 80 80 80;
253
- --salmex-border-light: 60 60 60;
254
- --salmex-border-dark: 120 120 120;
255
- --salmex-crown-yellow: 255 240 0;
256
- --salmex-electric-blue: 64 150 255;
257
- --salmex-street-red: 255 50 50;
258
- --salmex-primary: 64 150 255;
259
- --salmex-primary-light: 100 180 255;
260
- --salmex-selection: 255 240 0;
261
- }
215
+ /* ========================================
216
+ ICON SIZES
217
+ Standardised sizes for Lucide (or any) icons
218
+ ======================================== */
219
+
220
+ --sx-icon-xs: 14px;
221
+ --sx-icon-sm: 16px;
222
+ --sx-icon-md: 18px;
223
+ --sx-icon-lg: 20px;
224
+ --sx-icon-xl: 24px;
225
+ --sx-icon-stroke: 1.75;
262
226
  }
263
227
 
264
228
  /* ========================================
265
- GLOBAL RESETS & BASQUIAT TEXTURE
229
+ GLOBAL RESETS
266
230
  ======================================== */
267
231
 
268
232
  *,
@@ -271,56 +235,37 @@
271
235
  box-sizing: border-box;
272
236
  }
273
237
 
274
- /* Add subtle canvas texture to body */
275
- body {
276
- position: relative;
277
- }
278
-
279
- body::before {
280
- content: "";
281
- position: fixed;
282
- top: 0;
283
- left: 0;
284
- width: 100%;
285
- height: 100%;
286
- pointer-events: none;
287
- opacity: 0.03;
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
- );
295
- z-index: -1;
296
- }
238
+ /* ========================================
239
+ FOCUS STATES — Cyan outline, visible on dark
240
+ ======================================== */
297
241
 
298
- /* Remove default focus styles - we'll add our own */
299
242
  :focus {
300
243
  outline: none;
301
244
  }
302
245
 
303
- /* Basquiat-style focus - single yellow ring; transition only (no keyframes = no double shadow) */
304
246
  :focus-visible {
305
- outline: none;
306
- box-shadow: var(--salmex-focus-ring);
307
- transition: box-shadow var(--salmex-transition-fast);
247
+ outline: 2px solid var(--sx-color-cyan);
248
+ outline-offset: 2px;
308
249
  }
309
250
 
310
- /* Light theme: dark edge + yellow in one clean ring */
311
- :root:not([data-theme="dark"]) :focus-visible {
312
- box-shadow: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px rgb(var(--salmex-crown-yellow));
313
- }
251
+ /* ========================================
252
+ LUCIDE ICON DEFAULTS
253
+ Refined stroke weight for dark UI; Safari vector-effect fix
254
+ ======================================== */
314
255
 
315
- /* Dark theme: yellow only */
316
- [data-theme="dark"] :focus-visible {
317
- box-shadow: 0 0 0 3px rgb(var(--salmex-crown-yellow));
256
+ .lucide {
257
+ width: var(--sx-icon-md);
258
+ height: var(--sx-icon-md);
259
+ stroke-width: var(--sx-icon-stroke);
318
260
  }
319
261
 
320
- @media (prefers-color-scheme: dark) {
321
- :root:not([data-theme="light"]) :focus-visible {
322
- box-shadow: 0 0 0 3px rgb(var(--salmex-crown-yellow));
323
- }
262
+ /* ========================================
263
+ SELECTION
264
+ ======================================== */
265
+
266
+ ::selection {
267
+ background: rgba(0, 212, 255, 0.25);
268
+ color: var(--sx-color-text);
324
269
  }
325
270
 
326
271
  /* ========================================
@@ -336,8 +281,4 @@ body::before {
336
281
  transition-duration: 0.01ms !important;
337
282
  scroll-behavior: auto !important;
338
283
  }
339
-
340
- :focus-visible {
341
- transition: none;
342
- }
343
284
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@salmexio/ui",
3
- "version": "0.3.1",
4
- "description": "Salmex I/O Design System — Win2K-inspired UI component library for Salmex and Salmex I/O products",
3
+ "version": "1.0.0",
4
+ "description": "Salmex I/O Design System — Neo-Brutalist Dark component library for Salmex products",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
7
7
  "publishConfig": {
@@ -74,10 +74,10 @@
74
74
  "sveltekit",
75
75
  "ui",
76
76
  "components",
77
- "win2k",
77
+ "neo-brutalist",
78
+ "dark-mode",
78
79
  "accessibility",
79
- "typescript",
80
- "ai-assistant"
80
+ "typescript"
81
81
  ],
82
82
  "svelte": "./dist/index.js",
83
83
  "types": "./dist/index.d.ts"