@salmexio/ui 0.1.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 (82) hide show
  1. package/README.md +7 -0
  2. package/dist/app.html +11 -0
  3. package/dist/feedback/Alert/Alert.svelte +538 -0
  4. package/dist/feedback/Alert/Alert.svelte.d.ts +30 -0
  5. package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -0
  6. package/dist/feedback/Alert/index.d.ts +2 -0
  7. package/dist/feedback/Alert/index.d.ts.map +1 -0
  8. package/dist/feedback/Alert/index.js +1 -0
  9. package/dist/feedback/Spinner/Spinner.svelte +421 -0
  10. package/dist/feedback/Spinner/Spinner.svelte.d.ts +25 -0
  11. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -0
  12. package/dist/feedback/Spinner/index.d.ts +2 -0
  13. package/dist/feedback/Spinner/index.d.ts.map +1 -0
  14. package/dist/feedback/Spinner/index.js +1 -0
  15. package/dist/feedback/index.d.ts +3 -0
  16. package/dist/feedback/index.d.ts.map +1 -0
  17. package/dist/feedback/index.js +2 -0
  18. package/dist/forms/TextInput/TextInput.svelte +576 -0
  19. package/dist/forms/TextInput/TextInput.svelte.d.ts +50 -0
  20. package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -0
  21. package/dist/forms/TextInput/index.d.ts +2 -0
  22. package/dist/forms/TextInput/index.d.ts.map +1 -0
  23. package/dist/forms/TextInput/index.js +1 -0
  24. package/dist/forms/index.d.ts +2 -0
  25. package/dist/forms/index.d.ts.map +1 -0
  26. package/dist/forms/index.js +1 -0
  27. package/dist/index.d.ts +7 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +6 -0
  30. package/dist/layout/Card/Card.svelte +283 -0
  31. package/dist/layout/Card/Card.svelte.d.ts +35 -0
  32. package/dist/layout/Card/Card.svelte.d.ts.map +1 -0
  33. package/dist/layout/Card/index.d.ts +2 -0
  34. package/dist/layout/Card/index.d.ts.map +1 -0
  35. package/dist/layout/Card/index.js +1 -0
  36. package/dist/layout/Container/Container.svelte +202 -0
  37. package/dist/layout/Container/Container.svelte.d.ts +25 -0
  38. package/dist/layout/Container/Container.svelte.d.ts.map +1 -0
  39. package/dist/layout/Container/index.d.ts +2 -0
  40. package/dist/layout/Container/index.d.ts.map +1 -0
  41. package/dist/layout/Container/index.js +1 -0
  42. package/dist/layout/index.d.ts +3 -0
  43. package/dist/layout/index.d.ts.map +1 -0
  44. package/dist/layout/index.js +2 -0
  45. package/dist/navigation/Tabs/Tabs.svelte +448 -0
  46. package/dist/navigation/Tabs/Tabs.svelte.d.ts +59 -0
  47. package/dist/navigation/Tabs/Tabs.svelte.d.ts.map +1 -0
  48. package/dist/navigation/Tabs/index.d.ts +3 -0
  49. package/dist/navigation/Tabs/index.d.ts.map +1 -0
  50. package/dist/navigation/Tabs/index.js +1 -0
  51. package/dist/navigation/index.d.ts +3 -0
  52. package/dist/navigation/index.d.ts.map +1 -0
  53. package/dist/navigation/index.js +1 -0
  54. package/dist/primitives/Badge/Badge.svelte +351 -0
  55. package/dist/primitives/Badge/Badge.svelte.d.ts +35 -0
  56. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -0
  57. package/dist/primitives/Badge/index.d.ts +2 -0
  58. package/dist/primitives/Badge/index.d.ts.map +1 -0
  59. package/dist/primitives/Badge/index.js +1 -0
  60. package/dist/primitives/Button/Button.svelte +383 -0
  61. package/dist/primitives/Button/Button.svelte.d.ts +47 -0
  62. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -0
  63. package/dist/primitives/Button/index.d.ts +2 -0
  64. package/dist/primitives/Button/index.d.ts.map +1 -0
  65. package/dist/primitives/Button/index.js +1 -0
  66. package/dist/primitives/index.d.ts +3 -0
  67. package/dist/primitives/index.d.ts.map +1 -0
  68. package/dist/primitives/index.js +2 -0
  69. package/dist/routes/+layout.svelte +5 -0
  70. package/dist/routes/+layout.svelte.d.ts +6 -0
  71. package/dist/routes/+layout.svelte.d.ts.map +1 -0
  72. package/dist/routes/+page.svelte +6 -0
  73. package/dist/routes/+page.svelte.d.ts +27 -0
  74. package/dist/routes/+page.svelte.d.ts.map +1 -0
  75. package/dist/styles/tokens.css +340 -0
  76. package/dist/utils/cn.d.ts +9 -0
  77. package/dist/utils/cn.d.ts.map +1 -0
  78. package/dist/utils/cn.js +29 -0
  79. package/dist/utils/index.d.ts +2 -0
  80. package/dist/utils/index.d.ts.map +1 -0
  81. package/dist/utils/index.js +1 -0
  82. package/package.json +84 -0
@@ -0,0 +1,340 @@
1
+ /**
2
+ * Salmex I/O UI Design Tokens
3
+ * Win2K reimagined by Jean-Michel Basquiat
4
+ * Raw. Expressive. Powerful. Unfinished.
5
+ *
6
+ * Typography: restrained Windows-2000-ish workhorse + Basquiat-like accents (Google Fonts).
7
+ * Functional default: Work Sans (UI), Roboto Mono (code), Space Grotesk (display), Caveat Brush (accent).
8
+ * ARIA-critical text uses system/mono; brush fonts for decorative/duplicate only.
9
+ */
10
+ @import url('https://fonts.googleapis.com/css2?family=Work+Sans:wght@400;600;700&family=Roboto+Mono:wght@400;600;700&family=Space+Grotesk:wght@600;700&family=Caveat+Brush&display=swap');
11
+
12
+ :root {
13
+ /* ========================================
14
+ BASQUIAT × WIN2K COLORS
15
+ ======================================== */
16
+
17
+ /* Primary Palette - Bold & Vibrant (not safe corporate colors) */
18
+ --salmex-crown-yellow: 255 220 0; /* Basquiat's crown gold */
19
+ --salmex-street-yellow: 230 180 0; /* Lighter golden yellow for light mode */
20
+ --salmex-electric-blue: 0 112 255; /* Vibrant, not muted */
21
+ --salmex-street-red: 237 28 36; /* Graffiti red */
22
+ --salmex-midnight-black: 18 18 18; /* Deep black canvas */
23
+ --salmex-chalk-white: 248 248 240; /* Slightly off-white, like canvas */
24
+
25
+ /* Window Chrome - Rougher, Less Perfect */
26
+ --salmex-window-surface: 230 225 210; /* Aged paper/canvas feel */
27
+ --salmex-titlebar-bold: 0 90 200; /* Strong blue, less corporate */
28
+ --salmex-frame-dark: 40 40 40; /* Dark frame, not gray */
29
+
30
+ /* Button Face - Textured */
31
+ --salmex-button-face: 235 230 215; /* Canvas-like surface */
32
+ --salmex-button-shadow: 80 80 80; /* Stronger shadows */
33
+ --salmex-button-dark-edge: 30 30 30; /* Bold dark edges */
34
+ --salmex-button-highlight: 255 255 245; /* Bright highlights */
35
+ --salmex-button-light: 210 205 190; /* Subtle mid-tone */
36
+
37
+ /* Accent Colors - Neo-Expressionist */
38
+ --salmex-graffiti-pink: 255 105 180; /* Hot pink */
39
+ --salmex-spray-orange: 255 140 0; /* Bold orange */
40
+ --salmex-urban-green: 50 205 50; /* Bright green */
41
+ --salmex-neon-purple: 148 0 211; /* Deep purple */
42
+
43
+ /* System Colors - Less Safe */
44
+ --salmex-selection: 255 220 0; /* Crown yellow, not blue */
45
+ --salmex-hover-layer: 255 220 0; /* Yellow hover */
46
+
47
+ /* ========================================
48
+ MODERN ENHANCEMENTS
49
+ ======================================== */
50
+
51
+ /* Primary Brand */
52
+ --salmex-primary: 0 112 255; /* Electric blue */
53
+ --salmex-primary-light: 64 150 255;
54
+ --salmex-primary-dark: 0 80 200;
55
+
56
+ /* Semantic Colors */
57
+ --salmex-success: 50 205 50;
58
+ --salmex-warning: 255 140 0;
59
+ --salmex-error: 237 28 36;
60
+ --salmex-info: 0 112 255;
61
+
62
+ /* Text Colors */
63
+ --salmex-text-primary: 18 18 18;
64
+ --salmex-text-secondary: 60 60 60;
65
+ --salmex-text-disabled: 140 140 140;
66
+ --salmex-text-inverse: 248 248 240;
67
+
68
+ /* Background Colors */
69
+ --salmex-bg-primary: 248 248 240;
70
+ --salmex-bg-secondary: 235 230 215;
71
+ --salmex-bg-tertiary: 220 215 200;
72
+ --salmex-bg-canvas: 255 255 250; /* Raw canvas */
73
+
74
+ /* Border Colors - Bolder */
75
+ --salmex-border-default: 80 80 80;
76
+ --salmex-border-light: 160 160 160;
77
+ --salmex-border-dark: 30 30 30;
78
+ --salmex-border-accent: 255 220 0; /* Yellow accent borders */
79
+
80
+ /* ========================================
81
+ FOCUS INDICATORS - Yellow, visible in both themes
82
+ ======================================== */
83
+
84
+ /* Light: dark inner edge + yellow ring so yellow pops on light backgrounds */
85
+ --salmex-focus-outline: none;
86
+ --salmex-focus-offset: 0;
87
+ --salmex-focus-style: dashed;
88
+ --salmex-focus-ring: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px rgb(var(--salmex-crown-yellow));
89
+ /* Thicker dashed outline fallback for outline-only usage */
90
+ --salmex-focus-outline-color: rgb(var(--salmex-crown-yellow));
91
+ --salmex-focus-outline-width: 3px;
92
+
93
+ /* ========================================
94
+ SPACING (Slightly Irregular - 8px base but expressive)
95
+ ======================================== */
96
+
97
+ --salmex-space-1: 4px;
98
+ --salmex-space-2: 8px;
99
+ --salmex-space-3: 12px;
100
+ --salmex-space-4: 16px;
101
+ --salmex-space-5: 22px; /* Slightly off */
102
+ --salmex-space-6: 26px; /* Not perfect 24 */
103
+ --salmex-space-8: 34px; /* Intentionally irregular */
104
+ --salmex-space-10: 42px;
105
+ --salmex-space-12: 50px;
106
+
107
+ /* ========================================
108
+ TYPOGRAPHY - Win2K workhorse + Basquiat accents
109
+ ======================================== */
110
+
111
+ /* Core UI / body – dense UI, labels, long sessions (Work Sans) */
112
+ --salmex-font-system: 'Work Sans', 'Segoe UI', system-ui, sans-serif;
113
+ /* Display / sci-system – logos, nav, title bars, large only (Space Grotesk) */
114
+ --salmex-font-display: 'Space Grotesk', 'Impact', system-ui, sans-serif;
115
+ /* Monospace – code, logs, debug panels (Roboto Mono) */
116
+ --salmex-font-mono: 'Roboto Mono', 'Consolas', 'Courier New', monospace;
117
+ /* Accent – scribble labels, notes, decorative only (Caveat Brush) */
118
+ --salmex-font-handwrite: 'Caveat Brush', cursive;
119
+
120
+ --salmex-font-size-xs: 11px;
121
+ --salmex-font-size-sm: 13px;
122
+ --salmex-font-size-base: 14px;
123
+ --salmex-font-size-md: 15px;
124
+ --salmex-font-size-lg: 18px;
125
+ --salmex-font-size-xl: 24px;
126
+ --salmex-font-size-display: 32px;
127
+
128
+ /* ========================================
129
+ SHADOWS - Stronger, More Dramatic
130
+ ======================================== */
131
+
132
+ --salmex-shadow-sm: 2px 2px 0 rgb(var(--salmex-button-shadow));
133
+ --salmex-shadow-md: 3px 3px 0 rgb(0 0 0 / 0.3); /* Flat, bold shadow */
134
+ --salmex-shadow-lg: 5px 5px 0 rgb(0 0 0 / 0.4); /* Very bold */
135
+ --salmex-shadow-inset: inset 2px 2px 4px rgb(0 0 0 / 0.2);
136
+
137
+ /* ========================================
138
+ BORDER RADIUS - Minimal but Slightly Imperfect
139
+ ======================================== */
140
+
141
+ --salmex-radius-none: 0;
142
+ --salmex-radius-sm: 1px;
143
+ --salmex-radius-md: 2px;
144
+ --salmex-radius-lg: 3px;
145
+ --salmex-radius-rough: 0; /* Sharp edges, Basquiat style */
146
+
147
+ /* ========================================
148
+ TRANSITIONS - Snappier, More Energetic
149
+ ======================================== */
150
+
151
+ --salmex-transition-fast: 80ms ease-out;
152
+ --salmex-transition-base: 120ms ease-out;
153
+ --salmex-transition-slow: 180ms ease-out;
154
+
155
+ /* ========================================
156
+ Z-INDEX LAYERS
157
+ ======================================== */
158
+
159
+ --salmex-z-dropdown: 1000;
160
+ --salmex-z-sticky: 1020;
161
+ --salmex-z-fixed: 1030;
162
+ --salmex-z-modal-backdrop: 1040;
163
+ --salmex-z-modal: 1050;
164
+ --salmex-z-popover: 1060;
165
+ --salmex-z-tooltip: 1070;
166
+
167
+ /* ========================================
168
+ BASQUIAT SIGNATURE ELEMENTS
169
+ ======================================== */
170
+
171
+ --salmex-crown-symbol: '👑'; /* Basquiat's crown */
172
+ --salmex-annotation-style: 'handwrite';
173
+ --salmex-texture-noise: 0.02; /* Slight texture/grain */
174
+ }
175
+
176
+ /* ========================================
177
+ DARK MODE (Street Art Night Mode)
178
+ ======================================== */
179
+
180
+ [data-theme='dark'] {
181
+ /* Neon on black - high contrast street art */
182
+ --salmex-midnight-black: 10 10 10;
183
+ --salmex-chalk-white: 255 255 255;
184
+
185
+ /* Window chrome - darker canvas */
186
+ --salmex-window-surface: 22 22 22;
187
+ --salmex-titlebar-bold: 0 140 255; /* Brighter blue for dark mode */
188
+ --salmex-button-face: 32 32 32;
189
+ --salmex-button-shadow: 60 60 60;
190
+ --salmex-button-dark-edge: 8 8 8;
191
+ --salmex-button-highlight: 80 80 80;
192
+ --salmex-button-light: 50 50 50;
193
+
194
+ /* Text - high contrast */
195
+ --salmex-text-primary: 255 255 255;
196
+ --salmex-text-secondary: 200 200 200;
197
+ --salmex-text-disabled: 100 100 100;
198
+
199
+ /* Backgrounds - darker canvas */
200
+ --salmex-bg-primary: 15 15 15;
201
+ --salmex-bg-secondary: 22 22 22;
202
+ --salmex-bg-tertiary: 32 32 32;
203
+ --salmex-bg-canvas: 18 18 18;
204
+
205
+ /* Borders - more visible */
206
+ --salmex-border-default: 80 80 80;
207
+ --salmex-border-light: 60 60 60;
208
+ --salmex-border-dark: 120 120 120;
209
+
210
+ /* Neon colors pop more in dark mode */
211
+ --salmex-crown-yellow: 255 240 0; /* Brighter yellow */
212
+ --salmex-electric-blue: 64 150 255; /* Lighter blue */
213
+ --salmex-street-red: 255 50 50; /* Brighter red */
214
+ --salmex-graffiti-pink: 255 120 200;
215
+ --salmex-spray-orange: 255 160 40;
216
+ --salmex-urban-green: 80 230 80;
217
+ --salmex-neon-purple: 180 40 255;
218
+
219
+ /* Primary colors adjusted */
220
+ --salmex-primary: 64 150 255;
221
+ --salmex-primary-light: 100 180 255;
222
+ --salmex-primary-dark: 40 120 220;
223
+
224
+ /* Selection/hover - neon yellow */
225
+ --salmex-selection: 255 240 0;
226
+ --salmex-hover-layer: 255 240 0;
227
+
228
+ /* Focus - bright yellow ring (no dark edge needed on dark bg) */
229
+ --salmex-focus-outline: 2px dashed rgb(var(--salmex-crown-yellow));
230
+ --salmex-focus-ring: 0 0 0 3px rgb(var(--salmex-crown-yellow));
231
+ --salmex-focus-outline-color: rgb(var(--salmex-crown-yellow));
232
+ --salmex-focus-outline-width: 3px;
233
+ }
234
+
235
+ @media (prefers-color-scheme: dark) {
236
+ :root:not([data-theme='light']) {
237
+ /* Same as [data-theme='dark'] */
238
+ --salmex-midnight-black: 10 10 10;
239
+ --salmex-chalk-white: 255 255 255;
240
+ --salmex-window-surface: 22 22 22;
241
+ --salmex-titlebar-bold: 0 140 255;
242
+ --salmex-button-face: 32 32 32;
243
+ --salmex-button-shadow: 60 60 60;
244
+ --salmex-button-dark-edge: 8 8 8;
245
+ --salmex-button-highlight: 80 80 80;
246
+ --salmex-button-light: 50 50 50;
247
+ --salmex-text-primary: 255 255 255;
248
+ --salmex-text-secondary: 200 200 200;
249
+ --salmex-text-disabled: 100 100 100;
250
+ --salmex-bg-primary: 15 15 15;
251
+ --salmex-bg-secondary: 22 22 22;
252
+ --salmex-bg-tertiary: 32 32 32;
253
+ --salmex-bg-canvas: 18 18 18;
254
+ --salmex-border-default: 80 80 80;
255
+ --salmex-border-light: 60 60 60;
256
+ --salmex-border-dark: 120 120 120;
257
+ --salmex-crown-yellow: 255 240 0;
258
+ --salmex-electric-blue: 64 150 255;
259
+ --salmex-street-red: 255 50 50;
260
+ --salmex-primary: 64 150 255;
261
+ --salmex-primary-light: 100 180 255;
262
+ --salmex-selection: 255 240 0;
263
+ }
264
+ }
265
+
266
+ /* ========================================
267
+ GLOBAL RESETS & BASQUIAT TEXTURE
268
+ ======================================== */
269
+
270
+ *,
271
+ *::before,
272
+ *::after {
273
+ box-sizing: border-box;
274
+ }
275
+
276
+ /* Add subtle canvas texture to body */
277
+ body {
278
+ position: relative;
279
+ }
280
+
281
+ body::before {
282
+ content: '';
283
+ position: fixed;
284
+ top: 0;
285
+ left: 0;
286
+ width: 100%;
287
+ height: 100%;
288
+ pointer-events: none;
289
+ opacity: 0.03;
290
+ background-image:
291
+ repeating-linear-gradient(0deg, transparent, transparent 2px, rgb(0 0 0 / 0.02) 2px, rgb(0 0 0 / 0.02) 4px);
292
+ z-index: -1;
293
+ }
294
+
295
+ /* Remove default focus styles - we'll add our own */
296
+ :focus {
297
+ outline: none;
298
+ }
299
+
300
+ /* Basquiat-style focus - single yellow ring; transition only (no keyframes = no double shadow) */
301
+ :focus-visible {
302
+ outline: none;
303
+ box-shadow: var(--salmex-focus-ring);
304
+ transition: box-shadow var(--salmex-transition-fast);
305
+ }
306
+
307
+ /* Light theme: dark edge + yellow in one clean ring */
308
+ :root:not([data-theme='dark']) :focus-visible {
309
+ box-shadow: 0 0 0 2px rgb(var(--salmex-midnight-black)), 0 0 0 5px rgb(var(--salmex-crown-yellow));
310
+ }
311
+
312
+ /* Dark theme: yellow only */
313
+ [data-theme='dark'] :focus-visible {
314
+ box-shadow: 0 0 0 3px rgb(var(--salmex-crown-yellow));
315
+ }
316
+
317
+ @media (prefers-color-scheme: dark) {
318
+ :root:not([data-theme='light']) :focus-visible {
319
+ box-shadow: 0 0 0 3px rgb(var(--salmex-crown-yellow));
320
+ }
321
+ }
322
+
323
+ /* ========================================
324
+ REDUCED MOTION
325
+ ======================================== */
326
+
327
+ @media (prefers-reduced-motion: reduce) {
328
+ *,
329
+ *::before,
330
+ *::after {
331
+ animation-duration: 0.01ms !important;
332
+ animation-iteration-count: 1 !important;
333
+ transition-duration: 0.01ms !important;
334
+ scroll-behavior: auto !important;
335
+ }
336
+
337
+ :focus-visible {
338
+ transition: none;
339
+ }
340
+ }
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Class name utility for conditionally joining class names.
3
+ */
4
+ export type ClassValue = string | number | boolean | null | undefined | ClassValue[] | Record<string, boolean | null | undefined>;
5
+ /**
6
+ * Merges multiple class values into a single class string.
7
+ */
8
+ export declare function cn(...inputs: ClassValue[]): string;
9
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.d.ts","sourceRoot":"","sources":["../../src/utils/cn.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,GACT,UAAU,EAAE,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE9C;;GAEG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAsBlD"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Merges multiple class values into a single class string.
3
+ */
4
+ export function cn(...inputs) {
5
+ const classes = [];
6
+ for (const input of inputs) {
7
+ if (!input)
8
+ continue;
9
+ if (typeof input === 'string') {
10
+ classes.push(input);
11
+ }
12
+ else if (typeof input === 'number') {
13
+ classes.push(String(input));
14
+ }
15
+ else if (Array.isArray(input)) {
16
+ const nested = cn(...input);
17
+ if (nested)
18
+ classes.push(nested);
19
+ }
20
+ else if (typeof input === 'object') {
21
+ for (const [key, value] of Object.entries(input)) {
22
+ if (value)
23
+ classes.push(key);
24
+ }
25
+ }
26
+ }
27
+ // Remove duplicates while preserving order
28
+ return [...new Set(classes)].join(' ');
29
+ }
@@ -0,0 +1,2 @@
1
+ export { cn } from './cn.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ export { cn } from './cn.js';
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "@salmexio/ui",
3
+ "version": "0.1.0",
4
+ "description": "Salmex I/O Design System — Win2K-inspired UI component library for Salmex and Salmex I/O products",
5
+ "type": "module",
6
+ "license": "UNLICENSED",
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "scripts": {
11
+ "dev": "vite dev",
12
+ "build": "svelte-kit sync && svelte-package -o dist -i src",
13
+ "build:watch": "svelte-kit sync && svelte-package -o dist -i src --watch",
14
+ "prepublishOnly": "npm run build",
15
+ "check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
16
+ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest",
19
+ "test:coverage": "vitest run --coverage",
20
+ "lint": "biome lint src",
21
+ "lint:fix": "biome lint --write src",
22
+ "format": "biome format --write src",
23
+ "format:check": "biome format src"
24
+ },
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "svelte": "./dist/index.js",
29
+ "default": "./dist/index.js"
30
+ },
31
+ "./styles": "./dist/styles/tokens.css",
32
+ "./primitives": {
33
+ "types": "./dist/primitives/index.d.ts",
34
+ "svelte": "./dist/primitives/index.js",
35
+ "default": "./dist/primitives/index.js"
36
+ },
37
+ "./navigation": {
38
+ "types": "./dist/navigation/index.d.ts",
39
+ "svelte": "./dist/navigation/index.js",
40
+ "default": "./dist/navigation/index.js"
41
+ },
42
+ "./utils": {
43
+ "types": "./dist/utils/index.d.ts",
44
+ "default": "./dist/utils/index.js"
45
+ }
46
+ },
47
+ "files": [
48
+ "dist",
49
+ "!dist/**/*.test.*",
50
+ "!dist/**/*.spec.*"
51
+ ],
52
+ "peerDependencies": {
53
+ "svelte": "^5.0.0"
54
+ },
55
+ "devDependencies": {
56
+ "@biomejs/biome": "^1.9.4",
57
+ "@sveltejs/adapter-auto": "^6.0.0",
58
+ "@sveltejs/kit": "^2.50.1",
59
+ "@sveltejs/package": "^2.3.0",
60
+ "@sveltejs/vite-plugin-svelte": "^6.2.3",
61
+ "@testing-library/jest-dom": "^6.4.2",
62
+ "@testing-library/svelte": "^5.2.0",
63
+ "@types/node": "^25.0.8",
64
+ "@vitest/coverage-v8": "^4.0.0",
65
+ "jsdom": "^26.1.0",
66
+ "svelte": "^5.49.1",
67
+ "svelte-check": "^4.3.5",
68
+ "typescript": "^5.0.0",
69
+ "vite": "^7.3.1",
70
+ "vitest": "^4.0.18"
71
+ },
72
+ "keywords": [
73
+ "svelte",
74
+ "sveltekit",
75
+ "ui",
76
+ "components",
77
+ "win2k",
78
+ "accessibility",
79
+ "typescript",
80
+ "ai-assistant"
81
+ ],
82
+ "svelte": "./dist/index.js",
83
+ "types": "./dist/index.d.ts"
84
+ }