@salmexio/ui 0.4.0 → 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 +97 -94
  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 -116
  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 +86 -151
  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 -104
  37. package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
  38. package/dist/forms/Select/Select.svelte +137 -179
  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 +151 -167
  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 -39
  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 +407 -189
  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 +95 -181
  75. package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
  76. package/dist/primitives/Badge/Badge.svelte +83 -220
  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 +144 -195
  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 +197 -265
  92. package/package.json +5 -5
  93. package/dist/windowing/Window/Window.svelte +0 -637
  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 -425
  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,277 +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 2px 4px
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: 20px;
100
- --salmex-space-6: 24px;
101
- --salmex-space-8: 32px;
102
- --salmex-space-10: 40px;
103
- --salmex-space-12: 48px;
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 1px rgb(var(--salmex-button-shadow));
131
- --salmex-shadow-md: 3px 3px 2px rgb(0 0 0 / 0.25);
132
- --salmex-shadow-lg: 4px 4px 3px rgb(0 0 0 / 0.3);
133
- --salmex-shadow-inset: inset 2px 2px 3px rgb(0 0 0 / 0.15);
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: 4px;
141
- --salmex-radius-md: 6px;
142
- --salmex-radius-lg: 10px;
143
- --salmex-radius-xl: 14px;
144
- --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;
145
158
 
146
159
  /* ========================================
147
- BORDER WIDTHS
160
+ SPACING
148
161
  ======================================== */
149
162
 
150
- --salmex-border-width-sm: 1px; /* inputs, badges, separators */
151
- --salmex-border-width-md: 2px; /* buttons, cards, panels */
152
- --salmex-border-width-lg: 3px; /* windows only */
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;
153
180
 
154
181
  /* ========================================
155
- TRANSITIONS - Snappier, More Energetic
182
+ BORDER RADIUS
156
183
  ======================================== */
157
184
 
158
- --salmex-transition-fast: 100ms ease-out;
159
- --salmex-transition-base: 150ms ease-out;
160
- --salmex-transition-slow: 200ms ease-out;
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;
161
191
 
162
192
  /* ========================================
163
- Z-INDEX LAYERS
193
+ TRANSITIONS
164
194
  ======================================== */
165
195
 
166
- --salmex-z-dropdown: 1000;
167
- --salmex-z-sticky: 1020;
168
- --salmex-z-fixed: 1030;
169
- --salmex-z-modal-backdrop: 1040;
170
- --salmex-z-modal: 1050;
171
- --salmex-z-popover: 1060;
172
- --salmex-z-tooltip: 1070;
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
201
  /* ========================================
175
- BASQUIAT SIGNATURE ELEMENTS
202
+ Z-INDEX LAYERS
176
203
  ======================================== */
177
204
 
178
- --salmex-crown-symbol: "👑"; /* Basquiat's crown */
179
- --salmex-annotation-style: "handwrite";
180
- --salmex-texture-noise: 0.02; /* Slight texture/grain */
181
- }
182
-
183
- /* ========================================
184
- DARK MODE (Street Art Night Mode)
185
- ======================================== */
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;
186
214
 
187
- [data-theme="dark"] {
188
- /* Neon on black - high contrast street art */
189
- --salmex-midnight-black: 10 10 10;
190
- --salmex-chalk-white: 255 255 255;
191
-
192
- /* Window chrome - darker canvas */
193
- --salmex-window-surface: 22 22 22;
194
- --salmex-titlebar-bold: 0 140 255; /* Brighter blue for dark mode */
195
- --salmex-button-face: 32 32 32;
196
- --salmex-button-shadow: 50 50 50;
197
- --salmex-button-dark-edge: 8 8 8;
198
- --salmex-button-highlight: 90 90 90;
199
- --salmex-button-light: 50 50 50;
200
-
201
- /* Text - high contrast */
202
- --salmex-text-primary: 255 255 255;
203
- --salmex-text-secondary: 200 200 200;
204
- --salmex-text-disabled: 100 100 100;
205
-
206
- /* Backgrounds - darker canvas */
207
- --salmex-bg-primary: 15 15 15;
208
- --salmex-bg-secondary: 22 22 22;
209
- --salmex-bg-tertiary: 32 32 32;
210
- --salmex-bg-canvas: 18 18 18;
211
-
212
- /* Borders - more visible */
213
- --salmex-border-default: 80 80 80;
214
- --salmex-border-light: 60 60 60;
215
- --salmex-border-dark: 120 120 120;
216
-
217
- /* Neon colors pop more in dark mode */
218
- --salmex-crown-yellow: 255 240 0; /* Brighter yellow */
219
- --salmex-electric-blue: 64 150 255; /* Lighter blue */
220
- --salmex-street-red: 255 50 50; /* Brighter red */
221
- --salmex-graffiti-pink: 255 120 200;
222
- --salmex-spray-orange: 255 160 40;
223
- --salmex-urban-green: 80 230 80;
224
- --salmex-neon-purple: 180 40 255;
225
-
226
- /* Primary colors adjusted */
227
- --salmex-primary: 64 150 255;
228
- --salmex-primary-light: 100 180 255;
229
- --salmex-primary-dark: 40 120 220;
230
-
231
- /* Selection/hover - neon yellow */
232
- --salmex-selection: 255 240 0;
233
- --salmex-hover-layer: 255 240 0;
234
-
235
- /* Focus - bright yellow ring (no dark edge needed on dark bg) */
236
- --salmex-focus-outline: 2px dashed rgb(var(--salmex-crown-yellow));
237
- --salmex-focus-ring: 0 0 2px 3px rgb(var(--salmex-crown-yellow));
238
- --salmex-focus-outline-color: rgb(var(--salmex-crown-yellow));
239
- --salmex-focus-outline-width: 3px;
240
- }
215
+ /* ========================================
216
+ ICON SIZES
217
+ Standardised sizes for Lucide (or any) icons
218
+ ======================================== */
241
219
 
242
- @media (prefers-color-scheme: dark) {
243
- :root:not([data-theme="light"]) {
244
- /* Same as [data-theme='dark'] */
245
- --salmex-midnight-black: 10 10 10;
246
- --salmex-chalk-white: 255 255 255;
247
- --salmex-window-surface: 22 22 22;
248
- --salmex-titlebar-bold: 0 140 255;
249
- --salmex-button-face: 32 32 32;
250
- --salmex-button-shadow: 50 50 50;
251
- --salmex-button-dark-edge: 8 8 8;
252
- --salmex-button-highlight: 90 90 90;
253
- --salmex-button-light: 50 50 50;
254
- --salmex-text-primary: 255 255 255;
255
- --salmex-text-secondary: 200 200 200;
256
- --salmex-text-disabled: 100 100 100;
257
- --salmex-bg-primary: 15 15 15;
258
- --salmex-bg-secondary: 22 22 22;
259
- --salmex-bg-tertiary: 32 32 32;
260
- --salmex-bg-canvas: 18 18 18;
261
- --salmex-border-default: 80 80 80;
262
- --salmex-border-light: 60 60 60;
263
- --salmex-border-dark: 120 120 120;
264
- --salmex-crown-yellow: 255 240 0;
265
- --salmex-electric-blue: 64 150 255;
266
- --salmex-street-red: 255 50 50;
267
- --salmex-primary: 64 150 255;
268
- --salmex-primary-light: 100 180 255;
269
- --salmex-selection: 255 240 0;
270
- }
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;
271
226
  }
272
227
 
273
228
  /* ========================================
274
- GLOBAL RESETS & BASQUIAT TEXTURE
229
+ GLOBAL RESETS
275
230
  ======================================== */
276
231
 
277
232
  *,
@@ -280,56 +235,37 @@
280
235
  box-sizing: border-box;
281
236
  }
282
237
 
283
- /* Add subtle canvas texture to body */
284
- body {
285
- position: relative;
286
- }
287
-
288
- body::before {
289
- content: "";
290
- position: fixed;
291
- top: 0;
292
- left: 0;
293
- width: 100%;
294
- height: 100%;
295
- pointer-events: none;
296
- opacity: 0.015;
297
- background-image: repeating-linear-gradient(
298
- 0deg,
299
- transparent,
300
- transparent 2px,
301
- rgb(0 0 0 / 0.02) 2px,
302
- rgb(0 0 0 / 0.02) 4px
303
- );
304
- z-index: -1;
305
- }
238
+ /* ========================================
239
+ FOCUS STATES — Cyan outline, visible on dark
240
+ ======================================== */
306
241
 
307
- /* Remove default focus styles - we'll add our own */
308
242
  :focus {
309
243
  outline: none;
310
244
  }
311
245
 
312
- /* Basquiat-style focus - single yellow ring; transition only (no keyframes = no double shadow) */
313
246
  :focus-visible {
314
- outline: none;
315
- box-shadow: var(--salmex-focus-ring);
316
- transition: box-shadow var(--salmex-transition-fast);
247
+ outline: 2px solid var(--sx-color-cyan);
248
+ outline-offset: 2px;
317
249
  }
318
250
 
319
- /* Light theme: dark edge + yellow in one clean ring */
320
- :root:not([data-theme="dark"]) :focus-visible {
321
- box-shadow: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 2px 4px rgb(var(--salmex-crown-yellow));
322
- }
251
+ /* ========================================
252
+ LUCIDE ICON DEFAULTS
253
+ Refined stroke weight for dark UI; Safari vector-effect fix
254
+ ======================================== */
323
255
 
324
- /* Dark theme: yellow only with blur */
325
- [data-theme="dark"] :focus-visible {
326
- box-shadow: 0 0 2px 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);
327
260
  }
328
261
 
329
- @media (prefers-color-scheme: dark) {
330
- :root:not([data-theme="light"]) :focus-visible {
331
- box-shadow: 0 0 2px 3px rgb(var(--salmex-crown-yellow));
332
- }
262
+ /* ========================================
263
+ SELECTION
264
+ ======================================== */
265
+
266
+ ::selection {
267
+ background: rgba(0, 212, 255, 0.25);
268
+ color: var(--sx-color-text);
333
269
  }
334
270
 
335
271
  /* ========================================
@@ -345,8 +281,4 @@ body::before {
345
281
  transition-duration: 0.01ms !important;
346
282
  scroll-behavior: auto !important;
347
283
  }
348
-
349
- :focus-visible {
350
- transition: none;
351
- }
352
284
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@salmexio/ui",
3
- "version": "0.4.0",
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"