@marianmeres/stuic 3.0.2 → 3.0.4

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 (46) hide show
  1. package/dist/components/DismissibleMessage/DismissibleMessage.svelte +1 -1
  2. package/dist/components/HoverExpandableWidth/HoverExpandableWidth.svelte +15 -3
  3. package/dist/components/Nav/Nav.svelte +78 -49
  4. package/dist/components/Nav/Nav.svelte.d.ts +2 -2
  5. package/dist/components/ThemePreview/index.css +4 -5
  6. package/dist/index.css +1 -1
  7. package/dist/themes/css/emerald-amber-forest.css +253 -0
  8. package/dist/themes/css/lime-fuchsia-neon.css +253 -0
  9. package/dist/themes/css/orange-pink-sunset.css +253 -0
  10. package/dist/themes/css/slate-teal-ocean.css +253 -0
  11. package/dist/themes/css/stone-orange-earth.css +253 -0
  12. package/dist/themes/css/violet-rose-dusk.css +253 -0
  13. package/dist/themes/emerald-amber-forest.d.ts +6 -0
  14. package/dist/themes/emerald-amber-forest.js +175 -0
  15. package/dist/themes/lime-fuchsia-neon.d.ts +6 -0
  16. package/dist/themes/lime-fuchsia-neon.js +175 -0
  17. package/dist/themes/orange-pink-sunset.d.ts +6 -0
  18. package/dist/themes/orange-pink-sunset.js +175 -0
  19. package/dist/themes/slate-teal-ocean.d.ts +6 -0
  20. package/dist/themes/slate-teal-ocean.js +175 -0
  21. package/dist/themes/stone-orange-earth.d.ts +6 -0
  22. package/dist/themes/stone-orange-earth.js +175 -0
  23. package/dist/themes/violet-rose-dusk.d.ts +6 -0
  24. package/dist/themes/violet-rose-dusk.js +175 -0
  25. package/package.json +2 -2
  26. package/dist/base.css +0 -17
  27. /package/dist/themes/{blue-orange.css → css/blue-orange.css} +0 -0
  28. /package/dist/themes/{cyan-red.css → css/cyan-red.css} +0 -0
  29. /package/dist/themes/{cyan-slate.css → css/cyan-slate.css} +0 -0
  30. /package/dist/themes/{emerald-pink.css → css/emerald-pink.css} +0 -0
  31. /package/dist/themes/{fuchsia-emerald.css → css/fuchsia-emerald.css} +0 -0
  32. /package/dist/themes/{gray.css → css/gray.css} +0 -0
  33. /package/dist/themes/{indigo-amber.css → css/indigo-amber.css} +0 -0
  34. /package/dist/themes/{neutral.css → css/neutral.css} +0 -0
  35. /package/dist/themes/{pink-emerald.css → css/pink-emerald.css} +0 -0
  36. /package/dist/themes/{pink-teal.css → css/pink-teal.css} +0 -0
  37. /package/dist/themes/{purple-yellow.css → css/purple-yellow.css} +0 -0
  38. /package/dist/themes/{rainbow.css → css/rainbow.css} +0 -0
  39. /package/dist/themes/{red-blue.css → css/red-blue.css} +0 -0
  40. /package/dist/themes/{red-cyan.css → css/red-cyan.css} +0 -0
  41. /package/dist/themes/{red-sky.css → css/red-sky.css} +0 -0
  42. /package/dist/themes/{rose-teal.css → css/rose-teal.css} +0 -0
  43. /package/dist/themes/{sky-amber.css → css/sky-amber.css} +0 -0
  44. /package/dist/themes/{slate-cyan.css → css/slate-cyan.css} +0 -0
  45. /package/dist/themes/{teal-rose.css → css/teal-rose.css} +0 -0
  46. /package/dist/themes/{violet-lime.css → css/violet-lime.css} +0 -0
@@ -80,7 +80,7 @@
80
80
  <div class="dismiss">
81
81
  <Button
82
82
  x
83
- class="text-inherit!"
83
+ class="text-inherit"
84
84
  variant="ghost"
85
85
  roundedFull
86
86
  size="sm"
@@ -52,10 +52,14 @@
52
52
  let isShrinking = $state(false);
53
53
  let isExpanding = $state(false);
54
54
  let inTransition = $derived(isExpanding || isShrinking);
55
- let _timer: any;
55
+ let _timer: ReturnType<typeof setTimeout> | null = null;
56
56
  let box = $state<DOMRect>();
57
57
  let duration = $derived(prefersReduced.current ? 0 : _duration);
58
58
 
59
+ $effect(() => {
60
+ return () => clear();
61
+ });
62
+
59
63
  function clear() {
60
64
  clearTimeout(_timer);
61
65
  _timer = null;
@@ -71,6 +75,7 @@
71
75
 
72
76
  function expand() {
73
77
  if (!enabled) return;
78
+ if (!el) return;
74
79
  if (isExpanding || isShrinking || isExpanded) return;
75
80
 
76
81
  // asap
@@ -80,9 +85,9 @@
80
85
  box = el.getBoundingClientRect();
81
86
  const pos = {
82
87
  top: box.top,
83
- bottom: innerHeight.current! - box.bottom,
88
+ bottom: (innerHeight.current ?? 0) - box.bottom,
84
89
  left: box.left,
85
- right: innerWidth.current! - box.right,
90
+ right: (innerWidth.current ?? 0) - box.right,
86
91
  };
87
92
 
88
93
  // <offset-x>, <offset-y>, <blur-radius>, <spread-radius>
@@ -102,22 +107,28 @@
102
107
  // kind of ugly - need to set props in multiple steps...
103
108
  (async () => {
104
109
  await waitForNextRepaint();
110
+ if (!el) return;
105
111
  el.style.position = `fixed`;
106
112
 
107
113
  await waitForNextRepaint();
114
+ if (!el) return;
108
115
  el.style.width = `${box!.width}px`;
109
116
 
110
117
  await waitForNextRepaint();
118
+ if (!el) return;
111
119
  el.style.transitionProperty = "all";
112
120
  el.style.width = `${targetWidth}px`;
113
121
 
114
122
  await waitForTransitionEnd(el);
123
+ if (!el) return;
115
124
  isExpanding = false;
116
125
  })();
117
126
  }
118
127
 
119
128
  function shrink() {
120
129
  if (!enabled) return;
130
+ if (!el) return;
131
+ if (!box) return;
121
132
  if (isExpanding || isShrinking || !isExpanded) return;
122
133
 
123
134
  // asap
@@ -129,6 +140,7 @@
129
140
 
130
141
  (async () => {
131
142
  await waitForTransitionEnd(el);
143
+ if (!el) return;
132
144
  isShrinking = false;
133
145
 
134
146
  // now reset all back to defaults
@@ -38,8 +38,8 @@
38
38
  items?: NavItem[];
39
39
  /** Group icon (optional) */
40
40
  icon?: THC;
41
- /** Whether the group starts collapsed */
42
- defaultCollapsed?: boolean;
41
+ /** Whether the group starts expanded (default: false, groups are collapsed by default) */
42
+ defaultExpanded?: boolean;
43
43
  /** Navigation URL for groups without items */
44
44
  href?: string;
45
45
  /** Click handler for groups without items */
@@ -218,44 +218,76 @@
218
218
  localStorageValue(getItemStorageKey(itemId), expanded).set(expanded);
219
219
  }
220
220
 
221
- // Track expanded state for each group
222
- let groupExpandedStates = $state<boolean[]>([]);
223
-
224
- // Initialize expanded states based on groups
225
- $effect(() => {
226
- const currentGroups = groups;
227
- untrack(() => {
228
- // Only initialize if length changed or states array is empty
229
- if (groupExpandedStates.length !== currentGroups.length) {
230
- groupExpandedStates = currentGroups.map((g) => {
231
- // If group has an id, try to load from localStorage
232
- if (g.id) {
233
- const stored = loadGroupState(g.id);
234
- if (stored !== undefined) return stored;
235
- }
236
- // Fall back to defaultCollapsed
237
- return !g.defaultCollapsed;
238
- });
221
+ // Check if an item matches active state (used during initialization)
222
+ function checkItemActive(item: NavItem): boolean {
223
+ if (isActive) return isActive(item);
224
+ if (activeId) return item.id === activeId;
225
+ return false;
226
+ }
227
+
228
+ // Check if any item in a list (or their descendants) is active
229
+ function hasActiveDescendant(items: NavItem[]): boolean {
230
+ for (const item of items) {
231
+ if (checkItemActive(item)) return true;
232
+ if (item.children && hasActiveDescendant(item.children)) return true;
233
+ }
234
+ return false;
235
+ }
236
+
237
+ // Check if a group has any active child at any depth
238
+ function groupHasActiveChild(group: NavGroup): boolean {
239
+ if (!group.items) return false;
240
+ return hasActiveDescendant(group.items);
241
+ }
242
+
243
+ // Compute initial group expanded states synchronously
244
+ function computeGroupStates(): boolean[] {
245
+ return groups.map((g) => {
246
+ // First priority: localStorage (if persistence enabled)
247
+ if (persistState && g.id) {
248
+ const stored = loadGroupState(g.id);
249
+ if (stored != null) return stored; // Check for both null and undefined
250
+ }
251
+ // Second priority: auto-expand if group has an active child
252
+ if (groupHasActiveChild(g)) {
253
+ return true;
239
254
  }
255
+ // Third priority: use defaultExpanded prop
256
+ if (g.defaultExpanded !== undefined) {
257
+ return g.defaultExpanded;
258
+ }
259
+ // Default: collapsed
260
+ return false;
240
261
  });
262
+ }
263
+
264
+ // Initialize state synchronously from props (not via effect)
265
+ let groupExpandedStates = $state<boolean[]>(computeGroupStates());
266
+
267
+ // Re-sync if groups array length changes
268
+ $effect.pre(() => {
269
+ if (groupExpandedStates.length !== groups.length) {
270
+ groupExpandedStates = computeGroupStates();
271
+ }
241
272
  });
242
273
 
243
274
  // Check if group is expanded
244
275
  function isGroupExpanded(index: number): boolean {
245
- return groupExpandedStates[index] ?? true;
276
+ return groupExpandedStates[index] ?? false;
246
277
  }
247
278
 
248
279
  // Toggle group expand/collapse
249
280
  function toggleGroup(index: number) {
250
- groupExpandedStates[index] = !groupExpandedStates[index];
281
+ const newState = !groupExpandedStates[index];
282
+ groupExpandedStates[index] = newState;
251
283
 
252
284
  // Persist state if group has an id
253
285
  const group = groups[index];
254
286
  if (group?.id) {
255
- saveGroupState(group.id, groupExpandedStates[index]);
287
+ saveGroupState(group.id, newState);
256
288
  }
257
289
 
258
- onGroupToggle?.(index, groupExpandedStates[index]);
290
+ onGroupToggle?.(index, newState);
259
291
  }
260
292
 
261
293
  // Check if a group has items (and thus should be expandable)
@@ -268,10 +300,6 @@
268
300
  return (item.children?.length ?? 0) > 0;
269
301
  }
270
302
 
271
- // Track expanded state for individual items with children
272
- let itemExpandedStates = $state<Set<string>>(new Set());
273
- let itemStatesInitialized = false;
274
-
275
303
  // Collect all items with children recursively
276
304
  function collectItemsWithChildren(items: NavItem[]): NavItem[] {
277
305
  const result: NavItem[] = [];
@@ -284,32 +312,33 @@
284
312
  return result;
285
313
  }
286
314
 
287
- // Initialize item expanded states from localStorage
288
- $effect(() => {
289
- const currentGroups = groups;
290
- untrack(() => {
291
- if (itemStatesInitialized) return;
292
- itemStatesInitialized = true;
293
-
294
- if (!persistState) return;
295
-
296
- const expandedItems = new Set<string>();
297
- for (const group of currentGroups) {
298
- if (group.items) {
299
- const itemsWithChildren = collectItemsWithChildren(group.items);
300
- for (const item of itemsWithChildren) {
315
+ // Compute initial item expanded states synchronously
316
+ function computeItemStates(): Set<string> {
317
+ const expandedItems = new Set<string>();
318
+ for (const group of groups) {
319
+ if (group.items) {
320
+ const itemsWithChildren = collectItemsWithChildren(group.items);
321
+ for (const item of itemsWithChildren) {
322
+ // First priority: localStorage (if persistence enabled)
323
+ if (persistState) {
301
324
  const stored = loadItemState(item.id);
302
- if (stored === true) {
303
- expandedItems.add(item.id);
325
+ if (stored != null) {
326
+ if (stored) expandedItems.add(item.id);
327
+ continue; // localStorage takes precedence
304
328
  }
305
329
  }
330
+ // Second priority: auto-expand if item has an active descendant
331
+ if (item.children && hasActiveDescendant(item.children)) {
332
+ expandedItems.add(item.id);
333
+ }
306
334
  }
307
335
  }
308
- if (expandedItems.size > 0) {
309
- itemExpandedStates = expandedItems;
310
- }
311
- });
312
- });
336
+ }
337
+ return expandedItems;
338
+ }
339
+
340
+ // Track expanded state for individual items with children (initialized synchronously)
341
+ let itemExpandedStates = $state<Set<string>>(computeItemStates());
313
342
 
314
343
  // Check if an item is expanded
315
344
  function isItemExpanded(itemId: string): boolean {
@@ -35,8 +35,8 @@ export interface NavGroup {
35
35
  items?: NavItem[];
36
36
  /** Group icon (optional) */
37
37
  icon?: THC;
38
- /** Whether the group starts collapsed */
39
- defaultCollapsed?: boolean;
38
+ /** Whether the group starts expanded (default: false, groups are collapsed by default) */
39
+ defaultExpanded?: boolean;
40
40
  /** Navigation URL for groups without items */
41
41
  href?: string;
42
42
  /** Click handler for groups without items */
@@ -25,10 +25,10 @@
25
25
  --stuic-theme-preview-transition: 150ms;
26
26
 
27
27
  /* Section-specific tokens that consume theme colors */
28
- --stuic-theme-preview-header-bg: var(--stuic-color-surface);
29
- --stuic-theme-preview-header-text: var(--stuic-color-surface-foreground);
30
- --stuic-theme-preview-sidebar-bg: var(--stuic-color-muted);
31
- --stuic-theme-preview-sidebar-text: var(--stuic-color-muted-foreground);
28
+ --stuic-theme-preview-header-bg: var(--stuic-color-surface-2);
29
+ --stuic-theme-preview-header-text: var(--stuic-color-surface-2-foreground);
30
+ --stuic-theme-preview-sidebar-bg: var(--stuic-color-surface-1);
31
+ --stuic-theme-preview-sidebar-text: var(--stuic-color-surface-1-foreground);
32
32
  --stuic-theme-preview-sidebar-width: 200px;
33
33
  --stuic-theme-preview-main-bg: var(--stuic-color-background);
34
34
  --stuic-theme-preview-main-text: var(--stuic-color-foreground);
@@ -80,7 +80,6 @@
80
80
  .stuic-theme-preview-header .header-subtitle {
81
81
  font-size: 0.875rem;
82
82
  margin: 0;
83
- color: var(--stuic-color-muted-foreground);
84
83
  }
85
84
 
86
85
  /* ============================================================================
package/dist/index.css CHANGED
@@ -1,7 +1,7 @@
1
1
  @source "./";
2
2
 
3
3
  /* */
4
- @import "./themes/neutral.css";
4
+ @import "./themes/css/neutral.css";
5
5
 
6
6
  /*****************************************************************************************
7
7
 
@@ -0,0 +1,253 @@
1
+ /* prettier-ignore */
2
+ :root {
3
+ --stuic-color-primary: var(--color-emerald-700, #737373);
4
+
5
+ --stuic-color-primary-hover: var(--color-emerald-800, #737373);
6
+ --stuic-color-primary-active: var(--color-emerald-900, #737373);
7
+ --stuic-color-primary-foreground: var(--color-white, #ffffff);
8
+ --stuic-color-primary-foreground-hover: var(--color-white, #ffffff);
9
+ --stuic-color-primary-foreground-active: var(--color-white, #ffffff);
10
+
11
+ --stuic-color-accent: var(--color-amber-600, #737373);
12
+
13
+ --stuic-color-accent-hover: var(--color-amber-700, #737373);
14
+ --stuic-color-accent-active: var(--color-amber-800, #737373);
15
+ --stuic-color-accent-foreground: var(--color-white, #ffffff);
16
+ --stuic-color-accent-foreground-hover: var(--color-white, #ffffff);
17
+ --stuic-color-accent-foreground-active: var(--color-white, #ffffff);
18
+
19
+ --stuic-color-destructive: var(--color-red-600, #737373);
20
+
21
+ --stuic-color-destructive-hover: var(--color-red-700, #737373);
22
+ --stuic-color-destructive-active: var(--color-red-800, #737373);
23
+ --stuic-color-destructive-foreground: var(--color-white, #ffffff);
24
+ --stuic-color-destructive-foreground-hover: var(--color-white, #ffffff);
25
+ --stuic-color-destructive-foreground-active: var(--color-white, #ffffff);
26
+
27
+ --stuic-color-warning: var(--color-amber-500, #737373);
28
+
29
+ --stuic-color-warning-hover: var(--color-amber-600, #737373);
30
+ --stuic-color-warning-active: var(--color-amber-700, #737373);
31
+ --stuic-color-warning-foreground: var(--color-white, #ffffff);
32
+ --stuic-color-warning-foreground-hover: var(--color-white, #ffffff);
33
+ --stuic-color-warning-foreground-active: var(--color-white, #ffffff);
34
+
35
+ --stuic-color-success: var(--color-emerald-600, #737373);
36
+
37
+ --stuic-color-success-hover: var(--color-emerald-700, #737373);
38
+ --stuic-color-success-active: var(--color-emerald-800, #737373);
39
+ --stuic-color-success-foreground: var(--color-white, #ffffff);
40
+ --stuic-color-success-foreground-hover: var(--color-white, #ffffff);
41
+ --stuic-color-success-foreground-active: var(--color-white, #ffffff);
42
+
43
+ --stuic-color-info: var(--color-teal-600, #737373);
44
+
45
+ --stuic-color-info-hover: var(--color-teal-700, #737373);
46
+ --stuic-color-info-active: var(--color-teal-800, #737373);
47
+ --stuic-color-info-foreground: var(--color-white, #ffffff);
48
+ --stuic-color-info-foreground-hover: var(--color-white, #ffffff);
49
+ --stuic-color-info-foreground-active: var(--color-white, #ffffff);
50
+
51
+ --stuic-color-surface-primary: color-mix(in srgb, var(--stuic-color-primary) 15%, var(--stuic-color-background));
52
+ --stuic-color-surface-primary-foreground: color-mix(in srgb, var(--stuic-color-primary), black 10%);
53
+ --stuic-color-surface-primary-border: color-mix(in srgb, var(--stuic-color-primary) 30%, var(--stuic-color-background));
54
+ --stuic-color-surface-accent: color-mix(in srgb, var(--stuic-color-accent) 15%, var(--stuic-color-background));
55
+ --stuic-color-surface-accent-foreground: color-mix(in srgb, var(--stuic-color-accent), black 10%);
56
+ --stuic-color-surface-accent-border: color-mix(in srgb, var(--stuic-color-accent) 30%, var(--stuic-color-background));
57
+ --stuic-color-surface-destructive: color-mix(in srgb, var(--stuic-color-destructive) 15%, var(--stuic-color-background));
58
+ --stuic-color-surface-destructive-foreground: color-mix(in srgb, var(--stuic-color-destructive), black 10%);
59
+ --stuic-color-surface-destructive-border: color-mix(in srgb, var(--stuic-color-destructive) 30%, var(--stuic-color-background));
60
+ --stuic-color-surface-warning: color-mix(in srgb, var(--stuic-color-warning) 15%, var(--stuic-color-background));
61
+ --stuic-color-surface-warning-foreground: color-mix(in srgb, var(--stuic-color-warning), black 10%);
62
+ --stuic-color-surface-warning-border: color-mix(in srgb, var(--stuic-color-warning) 30%, var(--stuic-color-background));
63
+ --stuic-color-surface-success: color-mix(in srgb, var(--stuic-color-success) 15%, var(--stuic-color-background));
64
+ --stuic-color-surface-success-foreground: color-mix(in srgb, var(--stuic-color-success), black 10%);
65
+ --stuic-color-surface-success-border: color-mix(in srgb, var(--stuic-color-success) 30%, var(--stuic-color-background));
66
+ --stuic-color-surface-info: color-mix(in srgb, var(--stuic-color-info) 15%, var(--stuic-color-background));
67
+ --stuic-color-surface-info-foreground: color-mix(in srgb, var(--stuic-color-info), black 10%);
68
+ --stuic-color-surface-info-border: color-mix(in srgb, var(--stuic-color-info) 30%, var(--stuic-color-background));
69
+ --stuic-color-surface-hover: var(--color-stone-200, #737373);
70
+ --stuic-color-surface-active: var(--color-stone-300, #737373);
71
+ --stuic-color-surface-foreground: var(--color-stone-900, #737373);
72
+ --stuic-color-surface-foreground-hover: var(--color-stone-900, #737373);
73
+ --stuic-color-surface-foreground-active: var(--color-stone-900, #737373);
74
+
75
+ --stuic-color-background: var(--color-amber-50, #737373);
76
+
77
+ --stuic-color-background-hover: var(--color-amber-50, #737373);
78
+ --stuic-color-background-active: var(--color-amber-50, #737373);
79
+ --stuic-color-background-foreground: var(--color-stone-900, #737373);
80
+ --stuic-color-background-foreground-hover: var(--color-stone-900, #737373);
81
+ --stuic-color-background-foreground-active: var(--color-stone-900, #737373);
82
+
83
+ --stuic-color-surface: var(--color-stone-100, #737373);
84
+
85
+ --stuic-color-surface-1: var(--color-stone-200, #737373);
86
+ --stuic-color-surface-1-hover: var(--color-stone-300, #737373);
87
+ --stuic-color-surface-1-active: var(--color-stone-400, #737373);
88
+ --stuic-color-surface-1-foreground: var(--color-stone-900, #737373);
89
+ --stuic-color-surface-1-foreground-hover: var(--color-stone-900, #737373);
90
+ --stuic-color-surface-1-foreground-active: var(--color-stone-900, #737373);
91
+
92
+ --stuic-color-surface-2: var(--color-stone-300, #737373);
93
+ --stuic-color-surface-2-hover: var(--color-stone-400, #737373);
94
+ --stuic-color-surface-2-active: var(--color-stone-500, #737373);
95
+ --stuic-color-surface-2-foreground: var(--color-stone-900, #737373);
96
+ --stuic-color-surface-2-foreground-hover: var(--color-stone-900, #737373);
97
+ --stuic-color-surface-2-foreground-active: var(--color-stone-900, #737373);
98
+
99
+ --stuic-color-muted: var(--color-stone-200, #737373);
100
+
101
+ --stuic-color-muted-hover: var(--color-stone-300, #737373);
102
+ --stuic-color-muted-active: var(--color-stone-400, #737373);
103
+ --stuic-color-muted-foreground: var(--color-stone-500, #737373);
104
+ --stuic-color-muted-foreground-hover: var(--color-stone-500, #737373);
105
+ --stuic-color-muted-foreground-active: var(--color-stone-500, #737373);
106
+
107
+ --stuic-color-foreground: var(--color-stone-900, #737373);
108
+
109
+ --stuic-color-foreground-hover: var(--color-stone-900, #737373);
110
+ --stuic-color-foreground-active: var(--color-stone-900, #737373);
111
+
112
+ --stuic-color-border: var(--color-stone-300, #737373);
113
+
114
+ --stuic-color-border-hover: var(--color-stone-400, #737373);
115
+ --stuic-color-border-active: var(--color-stone-500, #737373);
116
+
117
+ --stuic-color-input: var(--color-amber-50, #737373);
118
+
119
+ --stuic-color-input-hover: var(--color-stone-100, #737373);
120
+ --stuic-color-input-active: var(--color-amber-50, #737373);
121
+
122
+ --stuic-color-ring: color-mix(in srgb, var(--color-emerald-700) 20%, transparent);
123
+
124
+ --stuic-color-ring-hover: color-mix(in srgb, var(--color-emerald-700) 20%, transparent);
125
+ --stuic-color-ring-active: color-mix(in srgb, var(--color-emerald-700) 20%, transparent);
126
+ }
127
+
128
+ /* prettier-ignore */
129
+ :root.dark {
130
+ --stuic-color-primary: var(--color-emerald-500, #737373);
131
+
132
+ --stuic-color-primary-hover: var(--color-emerald-400, #737373);
133
+ --stuic-color-primary-active: var(--color-emerald-300, #737373);
134
+ --stuic-color-primary-foreground: var(--color-white, #ffffff);
135
+ --stuic-color-primary-foreground-hover: var(--color-white, #ffffff);
136
+ --stuic-color-primary-foreground-active: var(--color-white, #ffffff);
137
+
138
+ --stuic-color-accent: var(--color-amber-500, #737373);
139
+
140
+ --stuic-color-accent-hover: var(--color-amber-400, #737373);
141
+ --stuic-color-accent-active: var(--color-amber-300, #737373);
142
+ --stuic-color-accent-foreground: var(--color-black, #000000);
143
+ --stuic-color-accent-foreground-hover: var(--color-black, #000000);
144
+ --stuic-color-accent-foreground-active: var(--color-black, #000000);
145
+
146
+ --stuic-color-destructive: var(--color-red-500, #737373);
147
+
148
+ --stuic-color-destructive-hover: var(--color-red-400, #737373);
149
+ --stuic-color-destructive-active: var(--color-red-300, #737373);
150
+ --stuic-color-destructive-foreground: var(--color-white, #ffffff);
151
+ --stuic-color-destructive-foreground-hover: var(--color-white, #ffffff);
152
+ --stuic-color-destructive-foreground-active: var(--color-white, #ffffff);
153
+
154
+ --stuic-color-warning: var(--color-amber-400, #737373);
155
+
156
+ --stuic-color-warning-hover: var(--color-amber-300, #737373);
157
+ --stuic-color-warning-active: var(--color-amber-200, #737373);
158
+ --stuic-color-warning-foreground: var(--color-black, #000000);
159
+ --stuic-color-warning-foreground-hover: var(--color-black, #000000);
160
+ --stuic-color-warning-foreground-active: var(--color-black, #000000);
161
+
162
+ --stuic-color-success: var(--color-emerald-500, #737373);
163
+
164
+ --stuic-color-success-hover: var(--color-emerald-400, #737373);
165
+ --stuic-color-success-active: var(--color-emerald-300, #737373);
166
+ --stuic-color-success-foreground: var(--color-white, #ffffff);
167
+ --stuic-color-success-foreground-hover: var(--color-white, #ffffff);
168
+ --stuic-color-success-foreground-active: var(--color-white, #ffffff);
169
+
170
+ --stuic-color-info: var(--color-teal-400, #737373);
171
+
172
+ --stuic-color-info-hover: var(--color-teal-300, #737373);
173
+ --stuic-color-info-active: var(--color-teal-200, #737373);
174
+ --stuic-color-info-foreground: var(--color-white, #ffffff);
175
+ --stuic-color-info-foreground-hover: var(--color-white, #ffffff);
176
+ --stuic-color-info-foreground-active: var(--color-white, #ffffff);
177
+
178
+ --stuic-color-surface-primary: color-mix(in srgb, var(--stuic-color-primary) 15%, var(--stuic-color-background));
179
+ --stuic-color-surface-primary-foreground: color-mix(in srgb, var(--stuic-color-primary), white 10%);
180
+ --stuic-color-surface-primary-border: color-mix(in srgb, var(--stuic-color-primary) 30%, var(--stuic-color-background));
181
+ --stuic-color-surface-accent: color-mix(in srgb, var(--stuic-color-accent) 15%, var(--stuic-color-background));
182
+ --stuic-color-surface-accent-foreground: color-mix(in srgb, var(--stuic-color-accent), white 10%);
183
+ --stuic-color-surface-accent-border: color-mix(in srgb, var(--stuic-color-accent) 30%, var(--stuic-color-background));
184
+ --stuic-color-surface-destructive: color-mix(in srgb, var(--stuic-color-destructive) 15%, var(--stuic-color-background));
185
+ --stuic-color-surface-destructive-foreground: color-mix(in srgb, var(--stuic-color-destructive), white 10%);
186
+ --stuic-color-surface-destructive-border: color-mix(in srgb, var(--stuic-color-destructive) 30%, var(--stuic-color-background));
187
+ --stuic-color-surface-warning: color-mix(in srgb, var(--stuic-color-warning) 15%, var(--stuic-color-background));
188
+ --stuic-color-surface-warning-foreground: color-mix(in srgb, var(--stuic-color-warning), white 10%);
189
+ --stuic-color-surface-warning-border: color-mix(in srgb, var(--stuic-color-warning) 30%, var(--stuic-color-background));
190
+ --stuic-color-surface-success: color-mix(in srgb, var(--stuic-color-success) 15%, var(--stuic-color-background));
191
+ --stuic-color-surface-success-foreground: color-mix(in srgb, var(--stuic-color-success), white 10%);
192
+ --stuic-color-surface-success-border: color-mix(in srgb, var(--stuic-color-success) 30%, var(--stuic-color-background));
193
+ --stuic-color-surface-info: color-mix(in srgb, var(--stuic-color-info) 15%, var(--stuic-color-background));
194
+ --stuic-color-surface-info-foreground: color-mix(in srgb, var(--stuic-color-info), white 10%);
195
+ --stuic-color-surface-info-border: color-mix(in srgb, var(--stuic-color-info) 30%, var(--stuic-color-background));
196
+ --stuic-color-surface-hover: var(--color-stone-700, #737373);
197
+ --stuic-color-surface-active: var(--color-stone-600, #737373);
198
+ --stuic-color-surface-foreground: var(--color-stone-100, #737373);
199
+ --stuic-color-surface-foreground-hover: var(--color-stone-100, #737373);
200
+ --stuic-color-surface-foreground-active: var(--color-stone-100, #737373);
201
+
202
+ --stuic-color-background: var(--color-stone-900, #737373);
203
+
204
+ --stuic-color-background-hover: var(--color-stone-900, #737373);
205
+ --stuic-color-background-active: var(--color-stone-900, #737373);
206
+ --stuic-color-background-foreground: var(--color-stone-50, #737373);
207
+ --stuic-color-background-foreground-hover: var(--color-stone-50, #737373);
208
+ --stuic-color-background-foreground-active: var(--color-stone-50, #737373);
209
+
210
+ --stuic-color-surface: var(--color-stone-800, #737373);
211
+
212
+ --stuic-color-surface-1: var(--color-stone-700, #737373);
213
+ --stuic-color-surface-1-hover: var(--color-stone-600, #737373);
214
+ --stuic-color-surface-1-active: var(--color-stone-500, #737373);
215
+ --stuic-color-surface-1-foreground: var(--color-stone-100, #737373);
216
+ --stuic-color-surface-1-foreground-hover: var(--color-stone-100, #737373);
217
+ --stuic-color-surface-1-foreground-active: var(--color-stone-100, #737373);
218
+
219
+ --stuic-color-surface-2: var(--color-stone-600, #737373);
220
+ --stuic-color-surface-2-hover: var(--color-stone-500, #737373);
221
+ --stuic-color-surface-2-active: var(--color-stone-400, #737373);
222
+ --stuic-color-surface-2-foreground: var(--color-stone-100, #737373);
223
+ --stuic-color-surface-2-foreground-hover: var(--color-stone-100, #737373);
224
+ --stuic-color-surface-2-foreground-active: var(--color-stone-100, #737373);
225
+
226
+ --stuic-color-muted: var(--color-stone-700, #737373);
227
+
228
+ --stuic-color-muted-hover: var(--color-stone-600, #737373);
229
+ --stuic-color-muted-active: var(--color-stone-500, #737373);
230
+ --stuic-color-muted-foreground: var(--color-stone-400, #737373);
231
+ --stuic-color-muted-foreground-hover: var(--color-stone-400, #737373);
232
+ --stuic-color-muted-foreground-active: var(--color-stone-400, #737373);
233
+
234
+ --stuic-color-foreground: var(--color-stone-50, #737373);
235
+
236
+ --stuic-color-foreground-hover: var(--color-stone-50, #737373);
237
+ --stuic-color-foreground-active: var(--color-stone-50, #737373);
238
+
239
+ --stuic-color-border: var(--color-stone-600, #737373);
240
+
241
+ --stuic-color-border-hover: var(--color-stone-500, #737373);
242
+ --stuic-color-border-active: var(--color-stone-400, #737373);
243
+
244
+ --stuic-color-input: var(--color-stone-800, #737373);
245
+
246
+ --stuic-color-input-hover: var(--color-stone-700, #737373);
247
+ --stuic-color-input-active: var(--color-stone-800, #737373);
248
+
249
+ --stuic-color-ring: color-mix(in srgb, var(--color-emerald-500) 25%, transparent);
250
+
251
+ --stuic-color-ring-hover: color-mix(in srgb, var(--color-emerald-500) 25%, transparent);
252
+ --stuic-color-ring-active: color-mix(in srgb, var(--color-emerald-500) 25%, transparent);
253
+ }