@selvajs/ui 6.6.0-beta.14 → 6.6.0-beta.16
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.
- package/README.md +0 -3
- package/dist/components/compute/AppLayout.svelte +10 -5
- package/dist/components/compute/CollapsedPanelStrip.svelte +1 -1
- package/dist/components/compute/ParameterPresetManager.svelte +1 -1
- package/dist/components/compute/SolveMessages.svelte +2 -2
- package/dist/components/layout/FooterItemRenderer.svelte +1 -1
- package/dist/components/layout/PageFooter.svelte +2 -2
- package/dist/components/layout/PageHeader.svelte +1 -1
- package/dist/components/layout/SideNav.svelte +3 -3
- package/dist/components/layout/SubNav.svelte +2 -2
- package/dist/components/preview/ChartOutput.svelte +3 -3
- package/dist/components/preview/Group.svelte +7 -7
- package/dist/components/preview/ImageOutput.svelte +6 -6
- package/dist/components/preview/InputControl.svelte +1 -0
- package/dist/components/preview/OutputDisplay.svelte +8 -6
- package/dist/components/preview/TabBar.svelte +6 -4
- package/dist/components/preview/TabBar.svelte.d.ts +2 -0
- package/dist/components/preview/TabContent.svelte +1 -1
- package/dist/components/preview/TabLayout.svelte +3 -4
- package/dist/components/preview/inputs/ChecklistInput.svelte +3 -3
- package/dist/components/preview/inputs/ColorInput.svelte +356 -14
- package/dist/components/preview/inputs/ColorInput.svelte.d.ts +1 -0
- package/dist/components/preview/inputs/FileInput.svelte +3 -3
- package/dist/components/preview/inputs/SegmentedInput.svelte +2 -1
- package/dist/components/preview/inputs/TileInput.svelte +3 -2
- package/dist/components/primitives/CalculateButton.svelte +2 -2
- package/dist/components/primitives/Callout.svelte +7 -5
- package/dist/components/primitives/Callout.svelte.d.ts +4 -4
- package/dist/components/primitives/DataTable.svelte +1 -1
- package/dist/components/primitives/ImageUploadField.svelte +1 -1
- package/dist/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/dist/components/primitives/badge/badge.svelte +2 -2
- package/dist/components/primitives/badge/badge.svelte.d.ts +6 -6
- package/dist/components/primitives/button/button.svelte +6 -7
- package/dist/components/primitives/button/button.svelte.d.ts +18 -18
- package/dist/components/primitives/card/card.svelte +1 -1
- package/dist/components/primitives/card/card.svelte.d.ts +1 -1
- package/dist/components/primitives/checkbox/checkbox.svelte +1 -1
- package/dist/components/primitives/command/command-input.svelte +1 -1
- package/dist/components/primitives/command/command-item.svelte +1 -1
- package/dist/components/primitives/command/command-link-item.svelte +1 -1
- package/dist/components/primitives/command/command.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-checkbox-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-content.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-radio-item.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
- package/dist/components/primitives/context-menu/context-menu-sub-trigger.svelte +1 -1
- package/dist/components/primitives/dialog/dialog-content.svelte +2 -2
- package/dist/components/primitives/drawer/Drawer.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +31 -11
- package/dist/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +2 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte +5 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-content.svelte.d.ts +2 -0
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte +4 -2
- package/dist/components/primitives/dropdown-menu/dropdown-menu-item.svelte.d.ts +2 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/dist/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- package/dist/components/primitives/index.d.ts +1 -1
- package/dist/components/primitives/index.js +1 -1
- package/dist/components/primitives/input/input.svelte +2 -2
- package/dist/components/primitives/input-group/input-group.svelte +1 -1
- package/dist/components/primitives/popover/popover-content.svelte +1 -1
- package/dist/components/primitives/resizable/resizable-handle.svelte +2 -2
- package/dist/components/primitives/search/search.svelte +1 -1
- package/dist/components/primitives/select/select-content.svelte +1 -1
- package/dist/components/primitives/select/select-item.svelte +1 -1
- package/dist/components/primitives/select/select-trigger.svelte +1 -1
- package/dist/components/primitives/slider/slider.svelte +1 -1
- package/dist/components/primitives/switch/switch.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-list.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-list.svelte.d.ts +3 -3
- package/dist/components/primitives/tabs/tabs-trigger.svelte +1 -1
- package/dist/components/primitives/tabs/tabs-trigger.svelte.d.ts +3 -3
- package/dist/components/primitives/textarea/textarea.svelte +1 -1
- package/dist/components/primitives/toggle/toggle.svelte +8 -2
- package/dist/components/primitives/toggle/toggle.svelte.d.ts +10 -4
- package/dist/components/primitives/toggle-group/toggle-group-item.svelte +1 -1
- package/dist/components/primitives/toggle-group/toggle-group.svelte +1 -1
- package/dist/components/primitives/tooltip/index.d.ts +6 -0
- package/dist/components/primitives/tooltip/index.js +8 -0
- package/dist/components/primitives/tooltip/tooltip-content.svelte +34 -0
- package/dist/components/primitives/tooltip/tooltip-content.svelte.d.ts +10 -0
- package/dist/components/primitives/tooltip/tooltip-portal.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-portal.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip-provider.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-provider.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip-trigger.svelte.d.ts +4 -0
- package/dist/components/primitives/tooltip/tooltip.svelte +7 -0
- package/dist/components/primitives/tooltip/tooltip.svelte.d.ts +4 -0
- package/dist/components/viewer/MeshMetadataPanel.svelte +1 -1
- package/dist/components/viewer/SceneManager.svelte +19 -19
- package/dist/components/viewer/Viewer.svelte +90 -164
- package/dist/components/viewer/Viewer.svelte.d.ts +3 -1
- package/dist/components/viewer/ViewerDock.svelte +404 -0
- package/dist/components/viewer/ViewerDock.svelte.d.ts +42 -0
- package/dist/i18n/messages.d.ts +12 -0
- package/dist/i18n/messages.js +20 -0
- package/dist/styles/base.css +81 -80
- package/dist/utils/color-space.d.ts +21 -0
- package/dist/utils/color-space.js +90 -0
- package/package.json +12 -13
- package/src/lib/components/compute/AppLayout.svelte +10 -5
- package/src/lib/components/compute/CollapsedPanelStrip.svelte +1 -1
- package/src/lib/components/compute/ParameterPresetManager.svelte +1 -1
- package/src/lib/components/compute/SolveMessages.svelte +2 -2
- package/src/lib/components/layout/FooterItemRenderer.svelte +1 -1
- package/src/lib/components/layout/PageFooter.svelte +2 -2
- package/src/lib/components/layout/PageHeader.svelte +1 -1
- package/src/lib/components/layout/SideNav.svelte +3 -3
- package/src/lib/components/layout/SubNav.svelte +2 -2
- package/src/lib/components/preview/ChartOutput.svelte +3 -3
- package/src/lib/components/preview/Group.svelte +7 -7
- package/src/lib/components/preview/ImageOutput.svelte +6 -6
- package/src/lib/components/preview/InputControl.svelte +1 -0
- package/src/lib/components/preview/OutputDisplay.svelte +8 -6
- package/src/lib/components/preview/TabBar.svelte +6 -4
- package/src/lib/components/preview/TabContent.svelte +1 -1
- package/src/lib/components/preview/TabLayout.svelte +3 -4
- package/src/lib/components/preview/inputs/ChecklistInput.svelte +3 -3
- package/src/lib/components/preview/inputs/ColorInput.svelte +356 -14
- package/src/lib/components/preview/inputs/FileInput.svelte +3 -3
- package/src/lib/components/preview/inputs/SegmentedInput.svelte +2 -1
- package/src/lib/components/preview/inputs/TileInput.svelte +3 -2
- package/src/lib/components/primitives/CalculateButton.svelte +2 -2
- package/src/lib/components/primitives/Callout.svelte +7 -5
- package/src/lib/components/primitives/DataTable.svelte +1 -1
- package/src/lib/components/primitives/ImageUploadField.svelte +1 -1
- package/src/lib/components/primitives/alert-dialog/alert-dialog-content.svelte +1 -1
- package/src/lib/components/primitives/badge/badge.svelte +2 -2
- package/src/lib/components/primitives/button/button.svelte +6 -7
- package/src/lib/components/primitives/card/card.svelte +1 -1
- package/src/lib/components/primitives/checkbox/checkbox.svelte +1 -1
- package/src/lib/components/primitives/command/command-input.svelte +1 -1
- package/src/lib/components/primitives/command/command-item.svelte +1 -1
- package/src/lib/components/primitives/command/command-link-item.svelte +1 -1
- package/src/lib/components/primitives/command/command.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-checkbox-item.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-content.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-item.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-radio-item.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-sub-content.svelte +1 -1
- package/src/lib/components/primitives/context-menu/context-menu-sub-trigger.svelte +1 -1
- package/src/lib/components/primitives/dialog/dialog-content.svelte +2 -2
- package/src/lib/components/primitives/drawer/Drawer.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-checkbox-item.svelte +31 -11
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-content.svelte +5 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-item.svelte +4 -2
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-radio-item.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-shortcut.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
- package/src/lib/components/primitives/dropdown-menu/dropdown-menu-sub-trigger.svelte +1 -1
- package/src/lib/components/primitives/index.ts +1 -1
- package/src/lib/components/primitives/input/input.svelte +2 -2
- package/src/lib/components/primitives/input-group/input-group.svelte +1 -1
- package/src/lib/components/primitives/popover/popover-content.svelte +1 -1
- package/src/lib/components/primitives/resizable/resizable-handle.svelte +2 -2
- package/src/lib/components/primitives/search/search.svelte +1 -1
- package/src/lib/components/primitives/select/select-content.svelte +1 -1
- package/src/lib/components/primitives/select/select-item.svelte +1 -1
- package/src/lib/components/primitives/select/select-trigger.svelte +1 -1
- package/src/lib/components/primitives/slider/slider.svelte +1 -1
- package/src/lib/components/primitives/switch/switch.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-list.svelte +1 -1
- package/src/lib/components/primitives/tabs/tabs-trigger.svelte +1 -1
- package/src/lib/components/primitives/textarea/textarea.svelte +1 -1
- package/src/lib/components/primitives/toggle/toggle.svelte +8 -2
- package/src/lib/components/primitives/toggle-group/toggle-group-item.svelte +1 -1
- package/src/lib/components/primitives/toggle-group/toggle-group.svelte +1 -1
- package/src/lib/components/primitives/tooltip/index.ts +19 -0
- package/src/lib/components/primitives/tooltip/tooltip-content.svelte +34 -0
- package/src/lib/components/primitives/tooltip/tooltip-portal.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip-provider.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip-trigger.svelte +7 -0
- package/src/lib/components/primitives/tooltip/tooltip.svelte +7 -0
- package/src/lib/components/viewer/MeshMetadataPanel.svelte +1 -1
- package/src/lib/components/viewer/SceneManager.svelte +19 -19
- package/src/lib/components/viewer/Viewer.svelte +90 -164
- package/src/lib/components/viewer/ViewerDock.svelte +404 -0
- package/src/lib/i18n/messages.ts +32 -0
- package/src/lib/styles/base.css +81 -80
- package/src/lib/utils/color-space.ts +107 -0
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
- package/dist/components/primitives/theme-switcher/ThemeSwitcher.svelte.d.ts +0 -3
- package/dist/components/primitives/theme-switcher/index.d.ts +0 -1
- package/dist/components/primitives/theme-switcher/index.js +0 -1
- package/dist/styles/themes/cyberpunk.css +0 -98
- package/dist/styles/themes/neutral.css +0 -72
- package/dist/styles/themes/ocean.css +0 -75
- package/dist/styles/themes/selva.css +0 -105
- package/dist/theme/themeStore.svelte.d.ts +0 -12
- package/dist/theme/themeStore.svelte.js +0 -40
- package/dist/theme/themes.d.ts +0 -5
- package/dist/theme/themes.js +0 -13
- package/src/lib/components/primitives/theme-switcher/ThemeSwitcher.svelte +0 -39
- package/src/lib/components/primitives/theme-switcher/index.ts +0 -1
- package/src/lib/styles/themes/cyberpunk.css +0 -98
- package/src/lib/styles/themes/neutral.css +0 -72
- package/src/lib/styles/themes/ocean.css +0 -75
- package/src/lib/styles/themes/selva.css +0 -105
- package/src/lib/theme/themeStore.svelte.ts +0 -50
- package/src/lib/theme/themes.ts +0 -18
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--radius: 0.625rem;
|
|
3
|
-
|
|
4
|
-
/* Light Mode - Forest Theme */
|
|
5
|
-
--background: oklch(0.98 0.005 110); /* Very light sage */
|
|
6
|
-
--foreground: oklch(0.22 0.02 110); /* Deep forest green, darker for better contrast */
|
|
7
|
-
|
|
8
|
-
--card: oklch(0.97 0.008 108); /* Slightly tinted white */
|
|
9
|
-
--card-foreground: oklch(0.25 0.018 105); /* Dark forest text */
|
|
10
|
-
|
|
11
|
-
--popover: oklch(0.98 0.005 110);
|
|
12
|
-
--popover-foreground: oklch(0.22 0.02 110);
|
|
13
|
-
|
|
14
|
-
--primary: oklch(0.55 0.16 140); /* Rich forest green, darker for contrast */
|
|
15
|
-
--primary-foreground: oklch(0.98 0.005 110); /* Light text on primary */
|
|
16
|
-
|
|
17
|
-
--secondary: oklch(0.38 0.08 165); /* Deep teal/evergreen */
|
|
18
|
-
--secondary-foreground: oklch(0.98 0.005 110);
|
|
19
|
-
|
|
20
|
-
--muted: oklch(0.92 0.01 120); /* Soft sage background */
|
|
21
|
-
--muted-foreground: oklch(0.35 0.015 110); /* Darker muted text for contrast */
|
|
22
|
-
|
|
23
|
-
--accent: oklch(0.62 0.12 85); /* Moss/olive accent */
|
|
24
|
-
--accent-foreground: oklch(0.98 0.005 110);
|
|
25
|
-
|
|
26
|
-
--destructive: oklch(0.54 0.22 27); /* Autumn red, darker for contrast */
|
|
27
|
-
--destructive-foreground: oklch(0.98 0.005 110);
|
|
28
|
-
|
|
29
|
-
--border: oklch(0.85 0.015 120); /* Soft green-grey border */
|
|
30
|
-
--input: oklch(0.94 0.008 115); /* Light sage input */
|
|
31
|
-
--ring: oklch(0.55 0.16 140); /* Focus ring matches primary */
|
|
32
|
-
|
|
33
|
-
/* Chart colors - forest palette */
|
|
34
|
-
--chart-1: oklch(0.55 0.16 140); /* Primary forest green */
|
|
35
|
-
--chart-2: oklch(0.45 0.12 165); /* Deep evergreen */
|
|
36
|
-
--chart-3: oklch(0.62 0.12 85); /* Moss green */
|
|
37
|
-
--chart-4: oklch(0.68 0.08 180); /* Fern green */
|
|
38
|
-
--chart-5: oklch(0.52 0.1 110); /* Pine green */
|
|
39
|
-
|
|
40
|
-
/* Sidebar */
|
|
41
|
-
--sidebar: oklch(0.96 0.01 115);
|
|
42
|
-
--sidebar-foreground: oklch(0.25 0.018 105);
|
|
43
|
-
--sidebar-primary: oklch(0.55 0.16 140);
|
|
44
|
-
--sidebar-primary-foreground: oklch(0.98 0.005 110);
|
|
45
|
-
--sidebar-accent: oklch(0.9 0.015 120);
|
|
46
|
-
--sidebar-accent-foreground: oklch(0.25 0.018 105);
|
|
47
|
-
--sidebar-border: oklch(0.85 0.015 120);
|
|
48
|
-
--sidebar-ring: oklch(0.55 0.16 140);
|
|
49
|
-
|
|
50
|
-
/* Special parameters */
|
|
51
|
-
--inputparam: oklch(86.877% 0.02027 155.1); /* Soft blue-lavender */
|
|
52
|
-
--outputparam: oklch(85.332% 0.0278 145.489); /* Soft yellow-green */
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.dark {
|
|
56
|
-
/* Dark Mode - Deep Forest Theme */
|
|
57
|
-
--background: oklch(0.18 0.02 140); /* Deep forest background */
|
|
58
|
-
--foreground: oklch(0.92 0.01 110); /* Soft cream text */
|
|
59
|
-
|
|
60
|
-
--card: oklch(0.22 0.025 135); /* Darker forest card */
|
|
61
|
-
--card-foreground: oklch(0.92 0.01 110);
|
|
62
|
-
|
|
63
|
-
--popover: oklch(0.22 0.025 135);
|
|
64
|
-
--popover-foreground: oklch(0.92 0.01 110);
|
|
65
|
-
|
|
66
|
-
--primary: oklch(0.68 0.14 130); /* Bright forest green */
|
|
67
|
-
--primary-foreground: oklch(0.15 0.02 140); /* Dark text on primary */
|
|
68
|
-
|
|
69
|
-
--secondary: oklch(0.35 0.08 165); /* Deep teal */
|
|
70
|
-
--secondary-foreground: oklch(0.92 0.01 110);
|
|
71
|
-
|
|
72
|
-
--muted: oklch(0.28 0.02 130); /* Muted forest */
|
|
73
|
-
--muted-foreground: oklch(0.72 0.01 115); /* Lighter muted text */
|
|
74
|
-
|
|
75
|
-
--accent: oklch(0.52 0.12 85); /* Moss accent */
|
|
76
|
-
--accent-foreground: oklch(0.92 0.01 110);
|
|
77
|
-
|
|
78
|
-
--destructive: oklch(0.65 0.18 25); /* Autumn red-orange */
|
|
79
|
-
--destructive-foreground: oklch(0.15 0.02 140);
|
|
80
|
-
|
|
81
|
-
--border: oklch(0.35 0.02 130 / 60%); /* Subtle forest border */
|
|
82
|
-
--input: oklch(0.26 0.025 135); /* Dark forest input */
|
|
83
|
-
--ring: oklch(0.68 0.14 130); /* Bright focus ring */
|
|
84
|
-
|
|
85
|
-
/* Chart colors - deep forest palette */
|
|
86
|
-
--chart-1: oklch(0.68 0.14 130); /* Bright forest green */
|
|
87
|
-
--chart-2: oklch(0.52 0.12 85); /* Moss green */
|
|
88
|
-
--chart-3: oklch(0.75 0.08 180); /* Light fern */
|
|
89
|
-
--chart-4: oklch(0.45 0.1 165); /* Deep evergreen */
|
|
90
|
-
--chart-5: oklch(0.6 0.1 110); /* Medium pine */
|
|
91
|
-
|
|
92
|
-
/* Sidebar */
|
|
93
|
-
--sidebar: oklch(0.2 0.022 138);
|
|
94
|
-
--sidebar-foreground: oklch(0.92 0.01 110);
|
|
95
|
-
--sidebar-primary: oklch(0.68 0.14 130);
|
|
96
|
-
--sidebar-primary-foreground: oklch(0.15 0.02 140);
|
|
97
|
-
--sidebar-accent: oklch(0.28 0.025 135);
|
|
98
|
-
--sidebar-accent-foreground: oklch(0.92 0.01 110);
|
|
99
|
-
--sidebar-border: oklch(0.92 0.01 110 / 10%);
|
|
100
|
-
--sidebar-ring: oklch(0.68 0.14 130);
|
|
101
|
-
|
|
102
|
-
/* Special parameters */
|
|
103
|
-
--inputparam: oklch(21.813% 0.00595 156.915); /* Deep forest blue */
|
|
104
|
-
--outputparam: oklch(16.216% 0.00263 145.779); /* Forest gold */
|
|
105
|
-
}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type Theme } from './themes';
|
|
2
|
-
declare class ThemeStore {
|
|
3
|
-
private _theme;
|
|
4
|
-
constructor();
|
|
5
|
-
get current(): Theme;
|
|
6
|
-
get availableThemes(): readonly Theme[];
|
|
7
|
-
set(theme: Theme): void;
|
|
8
|
-
private applyTheme;
|
|
9
|
-
toggle(): void;
|
|
10
|
-
}
|
|
11
|
-
export declare const themeStore: ThemeStore;
|
|
12
|
-
export type { Theme };
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import { themes, isTheme } from './themes';
|
|
2
|
-
const STORAGE_KEY = 'selva-theme';
|
|
3
|
-
const DEFAULT_THEME = 'neutral';
|
|
4
|
-
class ThemeStore {
|
|
5
|
-
_theme = $state(DEFAULT_THEME);
|
|
6
|
-
constructor() {
|
|
7
|
-
if (typeof window !== 'undefined') {
|
|
8
|
-
const stored = localStorage.getItem(STORAGE_KEY);
|
|
9
|
-
if (stored && isTheme(stored)) {
|
|
10
|
-
this._theme = stored;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
get current() {
|
|
15
|
-
return this._theme;
|
|
16
|
-
}
|
|
17
|
-
get availableThemes() {
|
|
18
|
-
return themes;
|
|
19
|
-
}
|
|
20
|
-
set(theme) {
|
|
21
|
-
if (!isTheme(theme)) {
|
|
22
|
-
console.warn(`Theme "${theme}" is not available. Falling back to default.`);
|
|
23
|
-
return;
|
|
24
|
-
}
|
|
25
|
-
this._theme = theme;
|
|
26
|
-
if (typeof window !== 'undefined') {
|
|
27
|
-
localStorage.setItem(STORAGE_KEY, theme);
|
|
28
|
-
this.applyTheme(theme);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
applyTheme(theme) {
|
|
32
|
-
document.documentElement.setAttribute('data-theme', theme);
|
|
33
|
-
}
|
|
34
|
-
toggle() {
|
|
35
|
-
const currentIndex = themes.indexOf(this._theme);
|
|
36
|
-
const nextIndex = (currentIndex + 1) % themes.length;
|
|
37
|
-
this.set(themes[nextIndex]);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
export const themeStore = new ThemeStore();
|
package/dist/theme/themes.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export type Theme = 'neutral' | 'selva' | 'ocean' | 'cyberpunk';
|
|
2
|
-
export declare const themes: readonly Theme[];
|
|
3
|
-
export declare const themeDescriptions: Record<Theme, string>;
|
|
4
|
-
export declare function isTheme(value: string): value is Theme;
|
|
5
|
-
export declare function getThemePath(theme: Theme): string;
|
package/dist/theme/themes.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
export const themes = ['neutral', 'selva', 'ocean', 'cyberpunk'];
|
|
2
|
-
export const themeDescriptions = {
|
|
3
|
-
neutral: 'Classic grayscale theme',
|
|
4
|
-
selva: 'Forest green nature-inspired theme',
|
|
5
|
-
ocean: 'Cool blue ocean theme',
|
|
6
|
-
cyberpunk: 'Vibrant neon magenta theme'
|
|
7
|
-
};
|
|
8
|
-
export function isTheme(value) {
|
|
9
|
-
return themes.includes(value);
|
|
10
|
-
}
|
|
11
|
-
export function getThemePath(theme) {
|
|
12
|
-
return `/styles/themes/${theme}.css`;
|
|
13
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { themeStore, type Theme } from '$lib/theme/themeStore.svelte';
|
|
3
|
-
import * as Select from '$lib/components/primitives/select';
|
|
4
|
-
import { Palette } from '@lucide/svelte';
|
|
5
|
-
|
|
6
|
-
const themes: { value: Theme; label: string; description: string }[] = [
|
|
7
|
-
{ value: 'neutral', label: 'Neutral', description: 'Classic grayscale' },
|
|
8
|
-
{ value: 'selva', label: 'Selva', description: 'Forest green' },
|
|
9
|
-
{ value: 'ocean', label: 'Ocean', description: 'Calm blue tones' },
|
|
10
|
-
{ value: 'cyberpunk', label: 'Cyberpunk', description: 'Vibrant neon colors' }
|
|
11
|
-
];
|
|
12
|
-
|
|
13
|
-
let value = $state(themeStore.current);
|
|
14
|
-
|
|
15
|
-
$effect(() => {
|
|
16
|
-
if (value) {
|
|
17
|
-
themeStore.set(value as Theme);
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
const triggerContent = $derived(themes.find((t) => t.value === value)?.label ?? 'Select theme');
|
|
22
|
-
</script>
|
|
23
|
-
|
|
24
|
-
<Select.Root type="single" bind:value>
|
|
25
|
-
<Select.Trigger class="gap-2 w-35">
|
|
26
|
-
<Palette size={14} />
|
|
27
|
-
<span>{triggerContent}</span>
|
|
28
|
-
</Select.Trigger>
|
|
29
|
-
<Select.Content>
|
|
30
|
-
{#each themes as theme (theme.value)}
|
|
31
|
-
<Select.Item value={theme.value} label={theme.label}>
|
|
32
|
-
<div class="flex flex-col items-start">
|
|
33
|
-
<span class="font-medium text-sm">{theme.label}</span>
|
|
34
|
-
<span class="text-xs text-muted-foreground">{theme.description}</span>
|
|
35
|
-
</div>
|
|
36
|
-
</Select.Item>
|
|
37
|
-
{/each}
|
|
38
|
-
</Select.Content>
|
|
39
|
-
</Select.Root>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as ThemeSwitcher } from './ThemeSwitcher.svelte';
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--radius: 0.625rem;
|
|
3
|
-
|
|
4
|
-
--background: oklch(0.98 0.01 300);
|
|
5
|
-
--foreground: oklch(0.18 0.05 300);
|
|
6
|
-
|
|
7
|
-
--card: oklch(0.97 0.015 300);
|
|
8
|
-
--card-foreground: oklch(0.18 0.05 300);
|
|
9
|
-
|
|
10
|
-
--popover: oklch(0.97 0.015 300);
|
|
11
|
-
--popover-foreground: oklch(0.18 0.05 300);
|
|
12
|
-
|
|
13
|
-
--primary: oklch(0.7 0.28 295);
|
|
14
|
-
--primary-foreground: oklch(0.98 0 0);
|
|
15
|
-
|
|
16
|
-
--secondary: oklch(0.9 0.05 300);
|
|
17
|
-
--secondary-foreground: oklch(0.18 0.05 300);
|
|
18
|
-
|
|
19
|
-
--muted: oklch(0.92 0.015 300);
|
|
20
|
-
--muted-foreground: oklch(0.5 0.03 300);
|
|
21
|
-
|
|
22
|
-
--accent: oklch(0.78 0.2 305);
|
|
23
|
-
--accent-foreground: oklch(0.12 0.05 300);
|
|
24
|
-
|
|
25
|
-
--destructive: oklch(0.62 0.25 20);
|
|
26
|
-
--destructive-foreground: oklch(0.98 0 0);
|
|
27
|
-
|
|
28
|
-
--border: oklch(0.86 0.02 300);
|
|
29
|
-
--input: oklch(0.92 0.015 300);
|
|
30
|
-
--ring: oklch(0.75 0.18 295);
|
|
31
|
-
|
|
32
|
-
--chart-1: oklch(0.7 0.28 295);
|
|
33
|
-
--chart-2: oklch(0.8 0.24 305);
|
|
34
|
-
--chart-3: oklch(0.65 0.22 310);
|
|
35
|
-
--chart-4: oklch(0.55 0.18 290);
|
|
36
|
-
--chart-5: oklch(0.85 0.15 300);
|
|
37
|
-
|
|
38
|
-
--sidebar: oklch(0.97 0.015 300);
|
|
39
|
-
--sidebar-foreground: oklch(0.18 0.05 300);
|
|
40
|
-
--sidebar-primary: oklch(0.7 0.28 295);
|
|
41
|
-
--sidebar-primary-foreground: oklch(0.98 0 0);
|
|
42
|
-
--sidebar-accent: oklch(0.92 0.015 300);
|
|
43
|
-
--sidebar-accent-foreground: oklch(0.18 0.05 300);
|
|
44
|
-
--sidebar-border: oklch(0.86 0.02 300);
|
|
45
|
-
--sidebar-ring: oklch(0.75 0.18 295);
|
|
46
|
-
|
|
47
|
-
--inputparam: oklch(0.86 0.02 300);
|
|
48
|
-
--outputparam: oklch(0.86 0.04 305);
|
|
49
|
-
--downloadparam: oklch(0.86 0.05 295);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.dark {
|
|
53
|
-
--background: oklch(0.18 0.05 300);
|
|
54
|
-
--foreground: oklch(0.98 0 0);
|
|
55
|
-
|
|
56
|
-
--card: oklch(0.22 0.05 300);
|
|
57
|
-
--card-foreground: oklch(0.98 0 0);
|
|
58
|
-
|
|
59
|
-
--popover: oklch(0.22 0.05 300);
|
|
60
|
-
--popover-foreground: oklch(0.98 0 0);
|
|
61
|
-
|
|
62
|
-
--primary: oklch(0.7 0.28 295);
|
|
63
|
-
--primary-foreground: oklch(0.18 0.05 300);
|
|
64
|
-
|
|
65
|
-
--secondary: oklch(0.28 0.03 300);
|
|
66
|
-
--secondary-foreground: oklch(0.98 0 0);
|
|
67
|
-
|
|
68
|
-
--muted: oklch(0.28 0.03 300);
|
|
69
|
-
--muted-foreground: oklch(0.75 0.04 300);
|
|
70
|
-
|
|
71
|
-
--accent: oklch(0.22 0.05 305);
|
|
72
|
-
--accent-foreground: oklch(0.98 0 0);
|
|
73
|
-
|
|
74
|
-
--destructive: oklch(0.55 0.22 20);
|
|
75
|
-
--destructive-foreground: oklch(0.18 0.05 300);
|
|
76
|
-
|
|
77
|
-
--border: oklch(0.35 0.04 300);
|
|
78
|
-
--input: oklch(0.3 0.03 300);
|
|
79
|
-
--ring: oklch(0.75 0.18 295);
|
|
80
|
-
|
|
81
|
-
--chart-1: oklch(0.7 0.28 295);
|
|
82
|
-
--chart-2: oklch(0.8 0.24 305);
|
|
83
|
-
--chart-3: oklch(0.65 0.22 310);
|
|
84
|
-
--chart-4: oklch(0.32 0.03 300);
|
|
85
|
-
--chart-5: oklch(0.85 0.15 300);
|
|
86
|
-
|
|
87
|
-
--sidebar: oklch(0.18 0.05 300);
|
|
88
|
-
--sidebar-foreground: oklch(0.98 0 0);
|
|
89
|
-
--sidebar-primary: oklch(0.7 0.28 295);
|
|
90
|
-
--sidebar-primary-foreground: oklch(0.18 0.05 300);
|
|
91
|
-
--sidebar-accent: oklch(0.28 0.03 300);
|
|
92
|
-
--sidebar-accent-foreground: oklch(0.98 0 0);
|
|
93
|
-
--sidebar-border: oklch(0.35 0.04 300);
|
|
94
|
-
--sidebar-ring: oklch(0.75 0.18 295);
|
|
95
|
-
|
|
96
|
-
--inputparam: oklch(0.12 0.03 300);
|
|
97
|
-
--outputparam: oklch(0.32 0.04 305);
|
|
98
|
-
}
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--radius: 0.625rem;
|
|
3
|
-
--background: oklch(1 0 0);
|
|
4
|
-
--foreground: oklch(0.145 0 0);
|
|
5
|
-
--card: oklch(1 0 0);
|
|
6
|
-
--card-foreground: oklch(0.145 0 0);
|
|
7
|
-
--popover: oklch(1 0 0);
|
|
8
|
-
--popover-foreground: oklch(0.145 0 0);
|
|
9
|
-
--primary: oklch(0.205 0 0);
|
|
10
|
-
--primary-foreground: oklch(0.985 0 0);
|
|
11
|
-
--secondary: oklch(0.97 0 0);
|
|
12
|
-
--secondary-foreground: oklch(0.205 0 0);
|
|
13
|
-
--muted: oklch(0.97 0 0);
|
|
14
|
-
--muted-foreground: oklch(0.556 0 0);
|
|
15
|
-
--accent: oklch(0.97 0 0);
|
|
16
|
-
--accent-foreground: oklch(0.205 0 0);
|
|
17
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
18
|
-
--border: oklch(87.61% 0.0001 271.152);
|
|
19
|
-
--input: oklch(0.922 0 0);
|
|
20
|
-
--ring: oklch(0.708 0 0);
|
|
21
|
-
--chart-1: oklch(0.646 0.222 41.116);
|
|
22
|
-
--chart-2: oklch(0.6 0.118 184.704);
|
|
23
|
-
--chart-3: oklch(0.398 0.07 227.392);
|
|
24
|
-
--chart-4: oklch(0.828 0.189 84.429);
|
|
25
|
-
--chart-5: oklch(0.769 0.188 70.08);
|
|
26
|
-
--sidebar: oklch(0.985 0 0);
|
|
27
|
-
--sidebar-foreground: oklch(0.145 0 0);
|
|
28
|
-
--sidebar-primary: oklch(0.205 0 0);
|
|
29
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
30
|
-
--sidebar-accent: oklch(0.97 0 0);
|
|
31
|
-
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
32
|
-
--sidebar-border: oklch(0.922 0 0);
|
|
33
|
-
--sidebar-ring: oklch(0.708 0 0);
|
|
34
|
-
--inputparam: oklch(100% 0.00011 271.152);
|
|
35
|
-
--outputparam: oklch(100% 0.00011 271.152);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.dark {
|
|
39
|
-
--background: oklch(0.145 0 0);
|
|
40
|
-
--foreground: oklch(0.985 0 0);
|
|
41
|
-
--card: oklch(0.205 0 0);
|
|
42
|
-
--card-foreground: oklch(0.985 0 0);
|
|
43
|
-
--popover: oklch(0.205 0 0);
|
|
44
|
-
--popover-foreground: oklch(0.985 0 0);
|
|
45
|
-
--primary: oklch(0.922 0 0);
|
|
46
|
-
--primary-foreground: oklch(0.205 0 0);
|
|
47
|
-
--secondary: oklch(0.269 0 0);
|
|
48
|
-
--secondary-foreground: oklch(0.985 0 0);
|
|
49
|
-
--muted: oklch(0.269 0 0);
|
|
50
|
-
--muted-foreground: oklch(0.708 0 0);
|
|
51
|
-
--accent: oklch(0.269 0 0);
|
|
52
|
-
--accent-foreground: oklch(0.985 0 0);
|
|
53
|
-
--destructive: oklch(0.704 0.191 22.216);
|
|
54
|
-
--border: oklch(1 0 0 / 10%);
|
|
55
|
-
--input: oklch(1 0 0 / 15%);
|
|
56
|
-
--ring: oklch(0.556 0 0);
|
|
57
|
-
--chart-1: oklch(0.488 0.243 264.376);
|
|
58
|
-
--chart-2: oklch(0.696 0.17 162.48);
|
|
59
|
-
--chart-3: oklch(0.769 0.188 70.08);
|
|
60
|
-
--chart-4: oklch(0.627 0.265 303.9);
|
|
61
|
-
--chart-5: oklch(0.645 0.246 16.439);
|
|
62
|
-
--sidebar: oklch(0.205 0 0);
|
|
63
|
-
--sidebar-foreground: oklch(0.985 0 0);
|
|
64
|
-
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
65
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
66
|
-
--sidebar-accent: oklch(0.269 0 0);
|
|
67
|
-
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
68
|
-
--sidebar-border: oklch(1 0 0 / 10%);
|
|
69
|
-
--sidebar-ring: oklch(0.556 0 0);
|
|
70
|
-
--inputparam: oklch(0% 0 271.152);
|
|
71
|
-
--outputparam: oklch(23.574% 0.00241 67.461);
|
|
72
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--radius: 0.625rem;
|
|
3
|
-
--background: oklch(0.98 0.003 260);
|
|
4
|
-
--foreground: oklch(0.22 0.01 260);
|
|
5
|
-
--card: oklch(0.97 0.002 260);
|
|
6
|
-
--card-foreground: oklch(0.22 0.01 260);
|
|
7
|
-
--popover: oklch(0.97 0.002 260);
|
|
8
|
-
--popover-foreground: oklch(0.22 0.01 260);
|
|
9
|
-
--primary: oklch(0.62 0.18 275);
|
|
10
|
-
--primary-foreground: oklch(0.98 0 0);
|
|
11
|
-
--secondary: oklch(0.85 0.05 260);
|
|
12
|
-
--secondary-foreground: oklch(0.22 0.01 260);
|
|
13
|
-
--muted: oklch(0.92 0.01 260);
|
|
14
|
-
--muted-foreground: oklch(0.45 0.02 260);
|
|
15
|
-
--accent: oklch(0.78 0.04 275);
|
|
16
|
-
--accent-foreground: oklch(0.15 0.01 260);
|
|
17
|
-
--destructive: oklch(0.6 0.23 20);
|
|
18
|
-
--destructive-foreground: oklch(0.98 0 0);
|
|
19
|
-
--border: oklch(0.85 0.01 260);
|
|
20
|
-
--input: oklch(0.92 0.01 260);
|
|
21
|
-
--ring: oklch(0.55 0.04 275);
|
|
22
|
-
--chart-1: oklch(0.62 0.18 275);
|
|
23
|
-
--chart-2: oklch(0.68 0.14 255);
|
|
24
|
-
--chart-3: oklch(0.74 0.12 290);
|
|
25
|
-
--chart-4: oklch(0.5 0.09 270);
|
|
26
|
-
--chart-5: oklch(0.82 0.06 250);
|
|
27
|
-
--sidebar: oklch(0.97 0.002 260);
|
|
28
|
-
--sidebar-foreground: oklch(0.22 0.01 260);
|
|
29
|
-
--sidebar-primary: oklch(0.62 0.18 275);
|
|
30
|
-
--sidebar-primary-foreground: oklch(0.98 0 0);
|
|
31
|
-
--sidebar-accent: oklch(0.92 0.01 260);
|
|
32
|
-
--sidebar-accent-foreground: oklch(0.22 0.01 260);
|
|
33
|
-
--sidebar-border: oklch(0.85 0.01 260);
|
|
34
|
-
--sidebar-ring: oklch(0.55 0.04 275);
|
|
35
|
-
--inputparam: oklch(0.86 0.01 260);
|
|
36
|
-
--outputparam: oklch(0.86 0.0156 280);
|
|
37
|
-
--downloadparam: oklch(0.86 0.021 265);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.dark {
|
|
41
|
-
--background: oklch(0.22 0.01 260);
|
|
42
|
-
--foreground: oklch(0.98 0 0);
|
|
43
|
-
--card: oklch(0.27 0.01 260);
|
|
44
|
-
--card-foreground: oklch(0.98 0 0);
|
|
45
|
-
--popover: oklch(0.27 0.01 260);
|
|
46
|
-
--popover-foreground: oklch(0.98 0 0);
|
|
47
|
-
--primary: oklch(0.62 0.18 275);
|
|
48
|
-
--primary-foreground: oklch(0.22 0.01 260);
|
|
49
|
-
--secondary: oklch(0.32 0.015 260);
|
|
50
|
-
--secondary-foreground: oklch(0.98 0 0);
|
|
51
|
-
--muted: oklch(0.32 0.01 260);
|
|
52
|
-
--muted-foreground: oklch(0.78 0.02 260);
|
|
53
|
-
--accent: oklch(0.27 0.01 275);
|
|
54
|
-
--accent-foreground: oklch(0.98 0 0);
|
|
55
|
-
--destructive: oklch(0.55 0.22 20);
|
|
56
|
-
--destructive-foreground: oklch(0.22 0.01 260);
|
|
57
|
-
--border: oklch(0.4 0.01 260);
|
|
58
|
-
--input: oklch(0.35 0.01 260);
|
|
59
|
-
--ring: oklch(0.78 0.02 260);
|
|
60
|
-
--chart-1: oklch(0.62 0.18 275);
|
|
61
|
-
--chart-2: oklch(0.68 0.14 255);
|
|
62
|
-
--chart-3: oklch(0.74 0.12 290);
|
|
63
|
-
--chart-4: oklch(0.32 0.015 260);
|
|
64
|
-
--chart-5: oklch(0.82 0.06 250);
|
|
65
|
-
--sidebar: oklch(0.22 0.01 260);
|
|
66
|
-
--sidebar-foreground: oklch(0.98 0 0);
|
|
67
|
-
--sidebar-primary: oklch(0.62 0.18 275);
|
|
68
|
-
--sidebar-primary-foreground: oklch(0.22 0.01 260);
|
|
69
|
-
--sidebar-accent: oklch(0.32 0.015 260);
|
|
70
|
-
--sidebar-accent-foreground: oklch(0.98 0 0);
|
|
71
|
-
--sidebar-border: oklch(0.4 0.01 260);
|
|
72
|
-
--sidebar-ring: oklch(0.78 0.02 260);
|
|
73
|
-
--inputparam: oklch(0.12 0.01 260);
|
|
74
|
-
--outputparam: oklch(0.36 0.0156 280);
|
|
75
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--radius: 0.625rem;
|
|
3
|
-
|
|
4
|
-
/* Light Mode - Forest Theme */
|
|
5
|
-
--background: oklch(0.98 0.005 110); /* Very light sage */
|
|
6
|
-
--foreground: oklch(0.22 0.02 110); /* Deep forest green, darker for better contrast */
|
|
7
|
-
|
|
8
|
-
--card: oklch(0.97 0.008 108); /* Slightly tinted white */
|
|
9
|
-
--card-foreground: oklch(0.25 0.018 105); /* Dark forest text */
|
|
10
|
-
|
|
11
|
-
--popover: oklch(0.98 0.005 110);
|
|
12
|
-
--popover-foreground: oklch(0.22 0.02 110);
|
|
13
|
-
|
|
14
|
-
--primary: oklch(0.55 0.16 140); /* Rich forest green, darker for contrast */
|
|
15
|
-
--primary-foreground: oklch(0.98 0.005 110); /* Light text on primary */
|
|
16
|
-
|
|
17
|
-
--secondary: oklch(0.38 0.08 165); /* Deep teal/evergreen */
|
|
18
|
-
--secondary-foreground: oklch(0.98 0.005 110);
|
|
19
|
-
|
|
20
|
-
--muted: oklch(0.92 0.01 120); /* Soft sage background */
|
|
21
|
-
--muted-foreground: oklch(0.35 0.015 110); /* Darker muted text for contrast */
|
|
22
|
-
|
|
23
|
-
--accent: oklch(0.62 0.12 85); /* Moss/olive accent */
|
|
24
|
-
--accent-foreground: oklch(0.98 0.005 110);
|
|
25
|
-
|
|
26
|
-
--destructive: oklch(0.54 0.22 27); /* Autumn red, darker for contrast */
|
|
27
|
-
--destructive-foreground: oklch(0.98 0.005 110);
|
|
28
|
-
|
|
29
|
-
--border: oklch(0.85 0.015 120); /* Soft green-grey border */
|
|
30
|
-
--input: oklch(0.94 0.008 115); /* Light sage input */
|
|
31
|
-
--ring: oklch(0.55 0.16 140); /* Focus ring matches primary */
|
|
32
|
-
|
|
33
|
-
/* Chart colors - forest palette */
|
|
34
|
-
--chart-1: oklch(0.55 0.16 140); /* Primary forest green */
|
|
35
|
-
--chart-2: oklch(0.45 0.12 165); /* Deep evergreen */
|
|
36
|
-
--chart-3: oklch(0.62 0.12 85); /* Moss green */
|
|
37
|
-
--chart-4: oklch(0.68 0.08 180); /* Fern green */
|
|
38
|
-
--chart-5: oklch(0.52 0.1 110); /* Pine green */
|
|
39
|
-
|
|
40
|
-
/* Sidebar */
|
|
41
|
-
--sidebar: oklch(0.96 0.01 115);
|
|
42
|
-
--sidebar-foreground: oklch(0.25 0.018 105);
|
|
43
|
-
--sidebar-primary: oklch(0.55 0.16 140);
|
|
44
|
-
--sidebar-primary-foreground: oklch(0.98 0.005 110);
|
|
45
|
-
--sidebar-accent: oklch(0.9 0.015 120);
|
|
46
|
-
--sidebar-accent-foreground: oklch(0.25 0.018 105);
|
|
47
|
-
--sidebar-border: oklch(0.85 0.015 120);
|
|
48
|
-
--sidebar-ring: oklch(0.55 0.16 140);
|
|
49
|
-
|
|
50
|
-
/* Special parameters */
|
|
51
|
-
--inputparam: oklch(86.877% 0.02027 155.1); /* Soft blue-lavender */
|
|
52
|
-
--outputparam: oklch(85.332% 0.0278 145.489); /* Soft yellow-green */
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.dark {
|
|
56
|
-
/* Dark Mode - Deep Forest Theme */
|
|
57
|
-
--background: oklch(0.18 0.02 140); /* Deep forest background */
|
|
58
|
-
--foreground: oklch(0.92 0.01 110); /* Soft cream text */
|
|
59
|
-
|
|
60
|
-
--card: oklch(0.22 0.025 135); /* Darker forest card */
|
|
61
|
-
--card-foreground: oklch(0.92 0.01 110);
|
|
62
|
-
|
|
63
|
-
--popover: oklch(0.22 0.025 135);
|
|
64
|
-
--popover-foreground: oklch(0.92 0.01 110);
|
|
65
|
-
|
|
66
|
-
--primary: oklch(0.68 0.14 130); /* Bright forest green */
|
|
67
|
-
--primary-foreground: oklch(0.15 0.02 140); /* Dark text on primary */
|
|
68
|
-
|
|
69
|
-
--secondary: oklch(0.35 0.08 165); /* Deep teal */
|
|
70
|
-
--secondary-foreground: oklch(0.92 0.01 110);
|
|
71
|
-
|
|
72
|
-
--muted: oklch(0.28 0.02 130); /* Muted forest */
|
|
73
|
-
--muted-foreground: oklch(0.72 0.01 115); /* Lighter muted text */
|
|
74
|
-
|
|
75
|
-
--accent: oklch(0.52 0.12 85); /* Moss accent */
|
|
76
|
-
--accent-foreground: oklch(0.92 0.01 110);
|
|
77
|
-
|
|
78
|
-
--destructive: oklch(0.65 0.18 25); /* Autumn red-orange */
|
|
79
|
-
--destructive-foreground: oklch(0.15 0.02 140);
|
|
80
|
-
|
|
81
|
-
--border: oklch(0.35 0.02 130 / 60%); /* Subtle forest border */
|
|
82
|
-
--input: oklch(0.26 0.025 135); /* Dark forest input */
|
|
83
|
-
--ring: oklch(0.68 0.14 130); /* Bright focus ring */
|
|
84
|
-
|
|
85
|
-
/* Chart colors - deep forest palette */
|
|
86
|
-
--chart-1: oklch(0.68 0.14 130); /* Bright forest green */
|
|
87
|
-
--chart-2: oklch(0.52 0.12 85); /* Moss green */
|
|
88
|
-
--chart-3: oklch(0.75 0.08 180); /* Light fern */
|
|
89
|
-
--chart-4: oklch(0.45 0.1 165); /* Deep evergreen */
|
|
90
|
-
--chart-5: oklch(0.6 0.1 110); /* Medium pine */
|
|
91
|
-
|
|
92
|
-
/* Sidebar */
|
|
93
|
-
--sidebar: oklch(0.2 0.022 138);
|
|
94
|
-
--sidebar-foreground: oklch(0.92 0.01 110);
|
|
95
|
-
--sidebar-primary: oklch(0.68 0.14 130);
|
|
96
|
-
--sidebar-primary-foreground: oklch(0.15 0.02 140);
|
|
97
|
-
--sidebar-accent: oklch(0.28 0.025 135);
|
|
98
|
-
--sidebar-accent-foreground: oklch(0.92 0.01 110);
|
|
99
|
-
--sidebar-border: oklch(0.92 0.01 110 / 10%);
|
|
100
|
-
--sidebar-ring: oklch(0.68 0.14 130);
|
|
101
|
-
|
|
102
|
-
/* Special parameters */
|
|
103
|
-
--inputparam: oklch(21.813% 0.00595 156.915); /* Deep forest blue */
|
|
104
|
-
--outputparam: oklch(16.216% 0.00263 145.779); /* Forest gold */
|
|
105
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { themes, isTheme, type Theme } from './themes';
|
|
2
|
-
|
|
3
|
-
const STORAGE_KEY = 'selva-theme';
|
|
4
|
-
const DEFAULT_THEME: Theme = 'neutral';
|
|
5
|
-
|
|
6
|
-
class ThemeStore {
|
|
7
|
-
private _theme = $state<Theme>(DEFAULT_THEME);
|
|
8
|
-
|
|
9
|
-
constructor() {
|
|
10
|
-
if (typeof window !== 'undefined') {
|
|
11
|
-
const stored = localStorage.getItem(STORAGE_KEY);
|
|
12
|
-
if (stored && isTheme(stored)) {
|
|
13
|
-
this._theme = stored;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
get current(): Theme {
|
|
19
|
-
return this._theme;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
get availableThemes(): readonly Theme[] {
|
|
23
|
-
return themes;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
set(theme: Theme) {
|
|
27
|
-
if (!isTheme(theme)) {
|
|
28
|
-
console.warn(`Theme "${theme}" is not available. Falling back to default.`);
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
this._theme = theme;
|
|
32
|
-
if (typeof window !== 'undefined') {
|
|
33
|
-
localStorage.setItem(STORAGE_KEY, theme);
|
|
34
|
-
this.applyTheme(theme);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
private applyTheme(theme: Theme) {
|
|
39
|
-
document.documentElement.setAttribute('data-theme', theme);
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
toggle() {
|
|
43
|
-
const currentIndex = themes.indexOf(this._theme);
|
|
44
|
-
const nextIndex = (currentIndex + 1) % themes.length;
|
|
45
|
-
this.set(themes[nextIndex]);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
export const themeStore = new ThemeStore();
|
|
50
|
-
export type { Theme };
|
package/src/lib/theme/themes.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export type Theme = 'neutral' | 'selva' | 'ocean' | 'cyberpunk';
|
|
2
|
-
|
|
3
|
-
export const themes: readonly Theme[] = ['neutral', 'selva', 'ocean', 'cyberpunk'] as const;
|
|
4
|
-
|
|
5
|
-
export const themeDescriptions: Record<Theme, string> = {
|
|
6
|
-
neutral: 'Classic grayscale theme',
|
|
7
|
-
selva: 'Forest green nature-inspired theme',
|
|
8
|
-
ocean: 'Cool blue ocean theme',
|
|
9
|
-
cyberpunk: 'Vibrant neon magenta theme'
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export function isTheme(value: string): value is Theme {
|
|
13
|
-
return themes.includes(value as Theme);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function getThemePath(theme: Theme): string {
|
|
17
|
-
return `/styles/themes/${theme}.css`;
|
|
18
|
-
}
|