@auto-engineer/generate-react-client 1.64.0 → 1.66.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.
- package/CHANGELOG.md +140 -0
- package/dist/starter/.storybook/main.ts +17 -22
- package/dist/starter/.storybook/manager-head.html +31 -31
- package/dist/starter/.storybook/manager.ts +133 -133
- package/dist/starter/.storybook/preview-head.html +12 -12
- package/dist/starter/.storybook/preview.tsx +79 -79
- package/dist/starter/biome.json +126 -0
- package/dist/starter/codegen.ts +11 -11
- package/dist/starter/components.json +27 -27
- package/dist/starter/package.json +86 -80
- package/dist/starter/public/mockServiceWorker.js +261 -261
- package/dist/starter/scripts/build-component-db.ts +17 -20
- package/dist/starter/src/App.tsx +15 -17
- package/dist/starter/src/components/ui/Accordion.stories.tsx +35 -35
- package/dist/starter/src/components/ui/Accordion.tsx +33 -33
- package/dist/starter/src/components/ui/Alert.stories.tsx +15 -15
- package/dist/starter/src/components/ui/Alert.tsx +32 -32
- package/dist/starter/src/components/ui/AlertDialog.stories.tsx +50 -50
- package/dist/starter/src/components/ui/AlertDialog.tsx +114 -115
- package/dist/starter/src/components/ui/AspectRatio.stories.tsx +20 -20
- package/dist/starter/src/components/ui/AspectRatio.tsx +1 -1
- package/dist/starter/src/components/ui/Avatar.stories.tsx +27 -27
- package/dist/starter/src/components/ui/Avatar.tsx +63 -63
- package/dist/starter/src/components/ui/Badge.stories.tsx +14 -14
- package/dist/starter/src/components/ui/Badge.tsx +27 -27
- package/dist/starter/src/components/ui/Breadcrumb.stories.tsx +38 -38
- package/dist/starter/src/components/ui/Breadcrumb.tsx +63 -62
- package/dist/starter/src/components/ui/Button.stories.tsx +55 -55
- package/dist/starter/src/components/ui/Button.tsx +49 -49
- package/dist/starter/src/components/ui/ButtonGroup.stories.tsx +17 -17
- package/dist/starter/src/components/ui/ButtonGroup.tsx +52 -53
- package/dist/starter/src/components/ui/Calendar.stories.tsx +20 -19
- package/dist/starter/src/components/ui/Calendar.tsx +142 -143
- package/dist/starter/src/components/ui/Card.stories.tsx +29 -29
- package/dist/starter/src/components/ui/Card.tsx +31 -31
- package/dist/starter/src/components/ui/Carousel.stories.tsx +41 -41
- package/dist/starter/src/components/ui/Carousel.tsx +171 -172
- package/dist/starter/src/components/ui/Chart.stories.tsx +21 -21
- package/dist/starter/src/components/ui/Chart.tsx +244 -247
- package/dist/starter/src/components/ui/Checkbox.stories.tsx +11 -11
- package/dist/starter/src/components/ui/Checkbox.tsx +18 -18
- package/dist/starter/src/components/ui/Collapsible.stories.tsx +40 -40
- package/dist/starter/src/components/ui/Collapsible.tsx +3 -3
- package/dist/starter/src/components/ui/Combobox.stories.tsx +48 -48
- package/dist/starter/src/components/ui/Combobox.tsx +204 -205
- package/dist/starter/src/components/ui/Command.stories.tsx +55 -55
- package/dist/starter/src/components/ui/Command.tsx +102 -103
- package/dist/starter/src/components/ui/ContextMenu.stories.tsx +52 -52
- package/dist/starter/src/components/ui/ContextMenu.tsx +151 -151
- package/dist/starter/src/components/ui/DesignSystem-Colors.stories.tsx +92 -92
- package/dist/starter/src/components/ui/DesignSystem-Layout.stories.tsx +139 -139
- package/dist/starter/src/components/ui/DesignSystem-Overview.stories.tsx +676 -657
- package/dist/starter/src/components/ui/DesignSystem-Typography.stories.tsx +59 -59
- package/dist/starter/src/components/ui/Dialog.stories.tsx +56 -56
- package/dist/starter/src/components/ui/Dialog.tsx +97 -98
- package/dist/starter/src/components/ui/Direction.stories.tsx +20 -20
- package/dist/starter/src/components/ui/Direction.tsx +7 -7
- package/dist/starter/src/components/ui/Drawer.stories.tsx +54 -54
- package/dist/starter/src/components/ui/Drawer.tsx +70 -70
- package/dist/starter/src/components/ui/DropdownMenu.stories.tsx +58 -58
- package/dist/starter/src/components/ui/DropdownMenu.tsx +157 -157
- package/dist/starter/src/components/ui/Empty.stories.tsx +22 -22
- package/dist/starter/src/components/ui/Empty.tsx +58 -58
- package/dist/starter/src/components/ui/Field.stories.tsx +31 -31
- package/dist/starter/src/components/ui/Field.tsx +180 -181
- package/dist/starter/src/components/ui/Form.stories.tsx +29 -29
- package/dist/starter/src/components/ui/Form.tsx +93 -96
- package/dist/starter/src/components/ui/HoverCard.stories.tsx +34 -34
- package/dist/starter/src/components/ui/HoverCard.tsx +21 -21
- package/dist/starter/src/components/ui/Input.stories.tsx +18 -18
- package/dist/starter/src/components/ui/Input.tsx +14 -14
- package/dist/starter/src/components/ui/InputGroup.stories.tsx +34 -34
- package/dist/starter/src/components/ui/InputGroup.tsx +110 -111
- package/dist/starter/src/components/ui/InputOTP.stories.tsx +28 -28
- package/dist/starter/src/components/ui/InputOTP.tsx +43 -43
- package/dist/starter/src/components/ui/Item.stories.tsx +45 -45
- package/dist/starter/src/components/ui/Item.tsx +113 -114
- package/dist/starter/src/components/ui/Kbd.stories.tsx +31 -31
- package/dist/starter/src/components/ui/Kbd.tsx +11 -11
- package/dist/starter/src/components/ui/Label.stories.tsx +62 -62
- package/dist/starter/src/components/ui/Label.tsx +26 -25
- package/dist/starter/src/components/ui/Menubar.stories.tsx +62 -62
- package/dist/starter/src/components/ui/Menubar.tsx +173 -173
- package/dist/starter/src/components/ui/NativeSelect.stories.tsx +26 -26
- package/dist/starter/src/components/ui/NativeSelect.tsx +29 -29
- package/dist/starter/src/components/ui/NavigationMenu.stories.tsx +64 -64
- package/dist/starter/src/components/ui/NavigationMenu.tsx +103 -103
- package/dist/starter/src/components/ui/Pagination.stories.tsx +61 -61
- package/dist/starter/src/components/ui/Pagination.tsx +69 -71
- package/dist/starter/src/components/ui/Popover.stories.tsx +38 -38
- package/dist/starter/src/components/ui/Popover.tsx +25 -25
- package/dist/starter/src/components/ui/Progress.stories.tsx +9 -9
- package/dist/starter/src/components/ui/Progress.tsx +14 -14
- package/dist/starter/src/components/ui/RadioGroup.stories.tsx +35 -35
- package/dist/starter/src/components/ui/RadioGroup.tsx +19 -19
- package/dist/starter/src/components/ui/Resizable.stories.tsx +54 -54
- package/dist/starter/src/components/ui/Resizable.tsx +29 -29
- package/dist/starter/src/components/ui/ScrollArea.stories.tsx +27 -27
- package/dist/starter/src/components/ui/ScrollArea.tsx +34 -34
- package/dist/starter/src/components/ui/Select.stories.tsx +43 -43
- package/dist/starter/src/components/ui/Select.tsx +120 -120
- package/dist/starter/src/components/ui/Separator.stories.tsx +27 -27
- package/dist/starter/src/components/ui/Separator.tsx +17 -17
- package/dist/starter/src/components/ui/Sheet.stories.tsx +53 -53
- package/dist/starter/src/components/ui/Sheet.tsx +69 -69
- package/dist/starter/src/components/ui/Sidebar.stories.tsx +77 -77
- package/dist/starter/src/components/ui/Sidebar.tsx +563 -564
- package/dist/starter/src/components/ui/Skeleton.stories.tsx +25 -25
- package/dist/starter/src/components/ui/Skeleton.tsx +1 -1
- package/dist/starter/src/components/ui/Slider.stories.tsx +5 -5
- package/dist/starter/src/components/ui/Slider.tsx +45 -44
- package/dist/starter/src/components/ui/Sonner.stories.tsx +32 -32
- package/dist/starter/src/components/ui/Sonner.tsx +23 -23
- package/dist/starter/src/components/ui/Spinner.stories.tsx +8 -8
- package/dist/starter/src/components/ui/Spinner.tsx +1 -1
- package/dist/starter/src/components/ui/Switch.stories.tsx +16 -17
- package/dist/starter/src/components/ui/Switch.tsx +24 -24
- package/dist/starter/src/components/ui/Table.stories.tsx +50 -50
- package/dist/starter/src/components/ui/Table.tsx +45 -45
- package/dist/starter/src/components/ui/Tabs.stories.tsx +39 -39
- package/dist/starter/src/components/ui/Tabs.tsx +47 -47
- package/dist/starter/src/components/ui/Textarea.stories.tsx +9 -9
- package/dist/starter/src/components/ui/Textarea.tsx +11 -11
- package/dist/starter/src/components/ui/Toast.stories.tsx +77 -77
- package/dist/starter/src/components/ui/Toast.tsx +75 -75
- package/dist/starter/src/components/ui/Toaster.tsx +17 -19
- package/dist/starter/src/components/ui/Toggle.stories.tsx +20 -20
- package/dist/starter/src/components/ui/Toggle.tsx +26 -26
- package/dist/starter/src/components/ui/ToggleGroup.stories.tsx +41 -41
- package/dist/starter/src/components/ui/ToggleGroup.tsx +61 -62
- package/dist/starter/src/components/ui/Tooltip.stories.tsx +26 -26
- package/dist/starter/src/components/ui/Tooltip.tsx +24 -24
- package/dist/starter/src/gql/execute.ts +1 -1
- package/dist/starter/src/gql/fragment-masking.ts +1 -1
- package/dist/starter/src/gql/graphql.ts +3 -0
- package/dist/starter/src/hooks/use-mobile.ts +11 -11
- package/dist/starter/src/hooks/use-toast.ts +135 -135
- package/dist/starter/src/index.css +105 -105
- package/dist/starter/src/lib/utils.ts +1 -1
- package/dist/starter/src/main.tsx +4 -1
- package/dist/starter/tsconfig.app.json +24 -24
- package/dist/starter/tsconfig.json +8 -8
- package/dist/starter/vite.config.ts +38 -37
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
|
@@ -1,20 +1,20 @@
|
|
|
1
|
+
import { UPDATE_DARK_MODE_EVENT_NAME } from '@vueless/storybook-dark-mode';
|
|
2
|
+
import { STORY_CHANGED } from 'storybook/internal/core-events';
|
|
1
3
|
import { addons } from 'storybook/manager-api';
|
|
2
4
|
import { create } from 'storybook/theming';
|
|
3
|
-
import { STORY_CHANGED } from 'storybook/internal/core-events';
|
|
4
|
-
import { UPDATE_DARK_MODE_EVENT_NAME } from '@vueless/storybook-dark-mode';
|
|
5
5
|
|
|
6
6
|
// Get initial theme from localStorage (dark mode addon) or URL parameter
|
|
7
7
|
const urlParams = new URLSearchParams(window.location.search);
|
|
8
8
|
const urlTheme = urlParams.get('theme');
|
|
9
9
|
const getStoredDarkMode = (): boolean => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
try {
|
|
11
|
+
const stored = localStorage.getItem('sb-addon-themes-3');
|
|
12
|
+
if (stored) {
|
|
13
|
+
const parsed = JSON.parse(stored);
|
|
14
|
+
return parsed?.current === 'dark';
|
|
15
|
+
}
|
|
16
|
+
} catch {}
|
|
17
|
+
return false;
|
|
18
18
|
};
|
|
19
19
|
const initialIsDark = urlTheme ? urlTheme === 'dark' : getStoredDarkMode();
|
|
20
20
|
|
|
@@ -22,143 +22,143 @@ const initialIsDark = urlTheme ? urlTheme === 'dark' : getStoredDarkMode();
|
|
|
22
22
|
// Analyzed from screenshots - app has slight blue undertone in grays
|
|
23
23
|
|
|
24
24
|
const lightTheme = create({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
25
|
+
base: 'light',
|
|
26
|
+
brandTitle: ' ',
|
|
27
|
+
brandUrl: '/',
|
|
28
|
+
brandImage: '/blank.svg',
|
|
29
|
+
|
|
30
|
+
// App background colors - matching your app's blue-tinted sidebar
|
|
31
|
+
appBg: '#f0f3f9', // sidebar background (blue-tinted like your app)
|
|
32
|
+
appContentBg: '#ffffff', // main content area
|
|
33
|
+
appPreviewBg: '#ffffff', // preview/canvas background
|
|
34
|
+
appBorderColor: '#e2e8f0', // borders (blue-tinted)
|
|
35
|
+
appBorderRadius: 10, // 0.625rem = 10px
|
|
36
|
+
|
|
37
|
+
// Text colors - dark gray, not blue
|
|
38
|
+
textColor: '#2d3748', // dark gray text for sidebar items
|
|
39
|
+
textMutedColor: '#718096', // muted gray text
|
|
40
|
+
textInverseColor: '#f7fafc', // inverse text
|
|
41
|
+
|
|
42
|
+
// Toolbar/UI colors
|
|
43
|
+
barBg: '#f0f3f9', // toolbar background (blue-tinted)
|
|
44
|
+
barTextColor: '#2d3748', // toolbar text (dark gray)
|
|
45
|
+
barHoverColor: '#1a202c', // toolbar hover
|
|
46
|
+
barSelectedColor: '#1a202c', // toolbar selected
|
|
47
|
+
|
|
48
|
+
// Form colors
|
|
49
|
+
inputBg: '#ffffff', // input background
|
|
50
|
+
inputBorder: '#e2e8f0', // input border
|
|
51
|
+
inputTextColor: '#2d3748', // input text
|
|
52
|
+
|
|
53
|
+
// Button colors
|
|
54
|
+
buttonBg: '#edf2f7', // button background
|
|
55
|
+
buttonBorder: '#e2e8f0', // button border
|
|
56
|
+
|
|
57
|
+
// Boolean inputs
|
|
58
|
+
booleanBg: '#edf2f7',
|
|
59
|
+
booleanSelectedBg: '#2d3748',
|
|
60
|
+
|
|
61
|
+
// Grid colors for canvas
|
|
62
|
+
gridCellSize: 10,
|
|
63
|
+
|
|
64
|
+
// Color for links/interactive items - override the blue
|
|
65
|
+
colorPrimary: '#2d3748',
|
|
66
|
+
colorSecondary: '#4a5568',
|
|
67
67
|
});
|
|
68
68
|
|
|
69
69
|
const darkTheme = create({
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
70
|
+
base: 'dark',
|
|
71
|
+
brandTitle: ' ',
|
|
72
|
+
brandUrl: '/',
|
|
73
|
+
brandImage: '/blank.svg',
|
|
74
|
+
|
|
75
|
+
// App background colors - matching app's dark blue-tinted theme
|
|
76
|
+
appBg: '#1a1f2e', // sidebar background (blue-tinted dark)
|
|
77
|
+
appContentBg: '#131620', // main content area (darker)
|
|
78
|
+
appPreviewBg: '#131620', // preview/canvas background
|
|
79
|
+
appBorderColor: '#2a3142', // borders (blue-tinted)
|
|
80
|
+
appBorderRadius: 10,
|
|
81
|
+
|
|
82
|
+
// Text colors - light gray, not blue
|
|
83
|
+
textColor: '#e2e8f0', // light gray text
|
|
84
|
+
textMutedColor: '#a0aec0', // muted gray text
|
|
85
|
+
textInverseColor: '#1a1f2e', // inverse text
|
|
86
|
+
|
|
87
|
+
// Toolbar/UI colors
|
|
88
|
+
barBg: '#1a1f2e', // toolbar background
|
|
89
|
+
barTextColor: '#e2e8f0', // toolbar text (light gray)
|
|
90
|
+
barHoverColor: '#f7fafc', // toolbar hover
|
|
91
|
+
barSelectedColor: '#f7fafc', // toolbar selected
|
|
92
|
+
|
|
93
|
+
// Form colors
|
|
94
|
+
inputBg: '#242938', // input background
|
|
95
|
+
inputBorder: '#3d4663', // input border
|
|
96
|
+
inputTextColor: '#e2e8f0', // input text
|
|
97
|
+
|
|
98
|
+
// Button colors
|
|
99
|
+
buttonBg: '#242938', // button background
|
|
100
|
+
buttonBorder: '#3d4663', // button border
|
|
101
|
+
|
|
102
|
+
// Boolean inputs
|
|
103
|
+
booleanBg: '#242938',
|
|
104
|
+
booleanSelectedBg: '#e2e8f0',
|
|
105
|
+
|
|
106
|
+
// Grid colors for canvas
|
|
107
|
+
gridCellSize: 10,
|
|
108
|
+
|
|
109
|
+
// Color for links/interactive items - override the blue
|
|
110
|
+
colorPrimary: '#e2e8f0',
|
|
111
|
+
colorSecondary: '#a0aec0',
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
const customTheme = initialIsDark ? darkTheme : lightTheme;
|
|
115
115
|
|
|
116
116
|
addons.setConfig({
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
117
|
+
theme: customTheme,
|
|
118
|
+
sidebar: {
|
|
119
|
+
collapsedRoots: ['ui-components'],
|
|
120
|
+
},
|
|
121
|
+
showPanel: false,
|
|
122
122
|
});
|
|
123
123
|
|
|
124
124
|
// Set default story to Design System Overview if no path specified
|
|
125
125
|
if (!urlParams.has('path')) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
const newUrl = new URL(window.location.href);
|
|
127
|
+
newUrl.searchParams.set('path', '/story/design-system-overview--default');
|
|
128
|
+
window.history.replaceState({}, '', newUrl.toString());
|
|
129
129
|
}
|
|
130
130
|
|
|
131
131
|
// Register addon to handle navigation sync and theme after Storybook is ready
|
|
132
132
|
addons.register('url-sync', (api) => {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
133
|
+
const channel = api.getChannel();
|
|
134
|
+
if (!channel) return;
|
|
135
|
+
|
|
136
|
+
// Set initial dark mode state (pass string "dark" or "light", not boolean)
|
|
137
|
+
if (initialIsDark) {
|
|
138
|
+
channel.emit(UPDATE_DARK_MODE_EVENT_NAME, 'dark');
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Report navigation changes to parent window for URL bar sync
|
|
142
|
+
channel.on(STORY_CHANGED, (storyId: string) => {
|
|
143
|
+
if (window.parent !== window) {
|
|
144
|
+
window.parent.postMessage({ type: 'storybook-navigation', storyId }, '*');
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// Listen for theme changes from parent window
|
|
149
|
+
window.addEventListener('message', (event) => {
|
|
150
|
+
if (event.data?.type === 'storybook-theme-change' && event.data?.theme) {
|
|
151
|
+
const isDark = event.data.theme === 'dark';
|
|
152
|
+
// Update the dark mode addon
|
|
153
|
+
channel.emit(UPDATE_DARK_MODE_EVENT_NAME, event.data.theme);
|
|
154
|
+
// Update the Storybook manager theme
|
|
155
|
+
addons.setConfig({
|
|
156
|
+
theme: isDark ? darkTheme : lightTheme,
|
|
157
|
+
});
|
|
158
|
+
// Update CSS theme selector and background
|
|
159
|
+
document.documentElement.dataset.theme = isDark ? 'dark' : 'light';
|
|
160
|
+
document.documentElement.style.backgroundColor = isDark ? '#1a1f2e' : '#f0f3f9';
|
|
161
|
+
document.documentElement.style.colorScheme = isDark ? 'dark' : 'light';
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
164
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<style>
|
|
2
2
|
/* Immediate CSS-based dark mode detection - no JS needed for initial paint */
|
|
3
3
|
html, body {
|
|
4
|
-
transition: none
|
|
4
|
+
transition: none;
|
|
5
5
|
background-color: #FFFFFF;
|
|
6
6
|
color-scheme: light;
|
|
7
7
|
}
|
|
@@ -14,13 +14,13 @@
|
|
|
14
14
|
}
|
|
15
15
|
/* When .dark class is set by JS */
|
|
16
16
|
html.dark, html.dark body {
|
|
17
|
-
background-color: #1a1f2e
|
|
18
|
-
color-scheme: dark
|
|
17
|
+
background-color: #1a1f2e;
|
|
18
|
+
color-scheme: dark;
|
|
19
19
|
}
|
|
20
20
|
/* When .light class is set by JS (overrides prefers-color-scheme) */
|
|
21
21
|
html.light, html.light body {
|
|
22
|
-
background-color: #FFFFFF
|
|
23
|
-
color-scheme: light
|
|
22
|
+
background-color: #FFFFFF;
|
|
23
|
+
color-scheme: light;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
/* Fix inner iframe loading states */
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
html.dark .sb-wrapper,
|
|
30
30
|
html.dark #storybook-root,
|
|
31
31
|
html.dark #storybook-docs {
|
|
32
|
-
background-color: #1a1f2e
|
|
33
|
-
color-scheme: dark
|
|
32
|
+
background-color: #1a1f2e;
|
|
33
|
+
color-scheme: dark;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/* Make spinner transparent in both light and dark mode */
|
|
@@ -38,18 +38,18 @@
|
|
|
38
38
|
.sb-loader *,
|
|
39
39
|
[class*="loader"],
|
|
40
40
|
[class*="loader"] * {
|
|
41
|
-
fill: transparent
|
|
42
|
-
background: transparent
|
|
43
|
-
background-color: transparent
|
|
41
|
+
fill: transparent;
|
|
42
|
+
background: transparent;
|
|
43
|
+
background-color: transparent;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
/* Set dark background on all iframes in dark mode to reduce flash from external content */
|
|
47
47
|
html.dark iframe {
|
|
48
|
-
background-color: #1a1f2e
|
|
48
|
+
background-color: #1a1f2e;
|
|
49
49
|
}
|
|
50
50
|
</style>
|
|
51
51
|
<script>
|
|
52
|
-
(
|
|
52
|
+
(() => {
|
|
53
53
|
var isDark = false;
|
|
54
54
|
var stored, parsed, urlParams, urlTheme;
|
|
55
55
|
try {
|
|
@@ -1,42 +1,42 @@
|
|
|
1
|
+
import { DocsContainer } from '@storybook/addon-docs/blocks';
|
|
1
2
|
import type { Preview } from '@storybook/react-vite';
|
|
3
|
+
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
4
|
+
import { DARK_MODE_EVENT_NAME } from '@vueless/storybook-dark-mode';
|
|
5
|
+
import { initialize, mswLoader } from 'msw-storybook-addon';
|
|
2
6
|
import type { PropsWithChildren } from 'react';
|
|
3
7
|
import { useEffect, useState } from 'react';
|
|
4
8
|
import { addons } from 'storybook/preview-api';
|
|
5
9
|
import { themes } from 'storybook/theming';
|
|
6
|
-
import { DocsContainer } from '@storybook/addon-docs/blocks';
|
|
7
|
-
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
|
8
|
-
import { DARK_MODE_EVENT_NAME } from '@vueless/storybook-dark-mode';
|
|
9
|
-
import { initialize, mswLoader } from 'msw-storybook-addon';
|
|
10
10
|
import '../src/index.css';
|
|
11
11
|
|
|
12
12
|
initialize({
|
|
13
|
-
|
|
13
|
+
onUnhandledRequest: 'bypass',
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
// Apply theme to the preview iframe (for component styling and background)
|
|
17
17
|
const applyTheme = (isDark: boolean) => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
18
|
+
if (isDark) {
|
|
19
|
+
document.documentElement.classList.add('dark');
|
|
20
|
+
} else {
|
|
21
|
+
document.documentElement.classList.remove('dark');
|
|
22
|
+
}
|
|
23
|
+
// Update background color to match Storybook theme
|
|
24
|
+
document.documentElement.style.backgroundColor = isDark ? '#222325' : '#FFFFFF';
|
|
25
|
+
document.documentElement.style.colorScheme = isDark ? 'dark' : 'light';
|
|
26
26
|
};
|
|
27
27
|
|
|
28
28
|
// Get initial theme from URL parameter or localStorage
|
|
29
29
|
const urlParams = new URLSearchParams(window.location.search);
|
|
30
30
|
const urlTheme = urlParams.get('theme');
|
|
31
31
|
const getStoredDarkMode = (): boolean => {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
try {
|
|
33
|
+
const stored = localStorage.getItem('sb-addon-themes-3');
|
|
34
|
+
if (stored) {
|
|
35
|
+
const parsed = JSON.parse(stored);
|
|
36
|
+
return parsed?.current === 'dark';
|
|
37
|
+
}
|
|
38
|
+
} catch {}
|
|
39
|
+
return false;
|
|
40
40
|
};
|
|
41
41
|
const initialIsDark = urlTheme ? urlTheme === 'dark' : getStoredDarkMode();
|
|
42
42
|
applyTheme(initialIsDark);
|
|
@@ -44,77 +44,77 @@ applyTheme(initialIsDark);
|
|
|
44
44
|
// Listen to dark mode addon changes and sync with our CSS class
|
|
45
45
|
const channel = addons.getChannel();
|
|
46
46
|
channel.on(DARK_MODE_EVENT_NAME, (isDark: boolean) => {
|
|
47
|
-
|
|
47
|
+
applyTheme(isDark);
|
|
48
48
|
});
|
|
49
49
|
|
|
50
50
|
const queryClient = new QueryClient({
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
defaultOptions: {
|
|
52
|
+
queries: {
|
|
53
|
+
retry: false,
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
56
|
});
|
|
57
57
|
|
|
58
58
|
// Themed docs container that responds to dark mode
|
|
59
59
|
function ThemedDocsContainer({
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
children,
|
|
61
|
+
context,
|
|
62
62
|
}: PropsWithChildren<{ context: Parameters<typeof DocsContainer>[0]['context'] }>) {
|
|
63
|
-
|
|
63
|
+
const [isDark, setIsDark] = useState(initialIsDark);
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
const ch = addons.getChannel();
|
|
67
|
+
ch.on(DARK_MODE_EVENT_NAME, setIsDark);
|
|
68
|
+
return () => ch.off(DARK_MODE_EVENT_NAME, setIsDark);
|
|
69
|
+
}, []);
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
return (
|
|
72
|
+
<DocsContainer context={context} theme={isDark ? themes.dark : themes.light}>
|
|
73
|
+
{children}
|
|
74
|
+
</DocsContainer>
|
|
75
|
+
);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
const preview: Preview = {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
79
|
+
tags: ['autodocs'],
|
|
80
|
+
decorators: [
|
|
81
|
+
(Story) => (
|
|
82
|
+
<QueryClientProvider client={queryClient}>
|
|
83
|
+
<Story />
|
|
84
|
+
</QueryClientProvider>
|
|
85
|
+
),
|
|
86
|
+
],
|
|
87
|
+
parameters: {
|
|
88
|
+
controls: {
|
|
89
|
+
matchers: {
|
|
90
|
+
color: /(background|color)$/i,
|
|
91
|
+
date: /Date$/i,
|
|
92
|
+
},
|
|
93
|
+
},
|
|
94
|
+
viewport: {
|
|
95
|
+
defaultViewport: 'desktop',
|
|
96
|
+
},
|
|
97
|
+
layout: 'padded',
|
|
98
|
+
options: {
|
|
99
|
+
showPanel: false,
|
|
100
|
+
storySort: {
|
|
101
|
+
order: ['Design System', ['Overview', '*'], 'UI Components'],
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
darkMode: {
|
|
105
|
+
current: initialIsDark ? 'dark' : 'light',
|
|
106
|
+
stylePreview: true,
|
|
107
|
+
dark: themes.dark,
|
|
108
|
+
light: themes.light,
|
|
109
|
+
},
|
|
110
|
+
docs: {
|
|
111
|
+
container: ThemedDocsContainer,
|
|
112
|
+
},
|
|
113
|
+
},
|
|
114
|
+
initialGlobals: {
|
|
115
|
+
showPanel: false,
|
|
116
|
+
},
|
|
117
|
+
loaders: [mswLoader],
|
|
118
118
|
};
|
|
119
119
|
|
|
120
120
|
export default preview;
|