@lobehub/lobehub 2.0.0-next.212 → 2.0.0-next.214
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/.github/workflows/auto-i18n.yml +1 -1
- package/.github/workflows/bundle-analyzer.yml +1 -1
- package/.github/workflows/claude-auto-testing.yml +1 -1
- package/.github/workflows/claude-dedupe-issues.yml +1 -1
- package/.github/workflows/claude-issue-triage.yml +1 -1
- package/.github/workflows/claude-translate-comments.yml +1 -1
- package/.github/workflows/claude-translator.yml +1 -1
- package/.github/workflows/claude.yml +1 -1
- package/.github/workflows/desktop-build-electron.yml +2 -2
- package/.github/workflows/e2e.yml +1 -1
- package/.github/workflows/issue-auto-close-duplicates.yml +1 -1
- package/.github/workflows/lighthouse.yml +2 -2
- package/.github/workflows/lock-closed-issues.yml +1 -1
- package/.github/workflows/manual-build-desktop.yml +6 -6
- package/.github/workflows/pr-build-desktop.yml +5 -5
- package/.github/workflows/pr-build-docker.yml +2 -2
- package/.github/workflows/release-desktop-beta.yml +4 -4
- package/.github/workflows/release-docker.yml +2 -2
- package/.github/workflows/release.yml +1 -1
- package/.github/workflows/sync-database-schema.yml +1 -1
- package/.github/workflows/sync.yml +1 -1
- package/.github/workflows/test.yml +5 -5
- package/.github/workflows/verify-desktop-patch.yml +1 -1
- package/CHANGELOG.md +58 -0
- package/apps/desktop/package.json +3 -2
- package/apps/desktop/src/main/const/store.ts +1 -1
- package/apps/desktop/src/main/controllers/SystemCtr.ts +2 -3
- package/apps/desktop/src/main/core/App.ts +10 -3
- package/apps/desktop/src/main/types/store.ts +1 -1
- package/changelog/v1.json +14 -0
- package/locales/ar/models.json +35 -4
- package/locales/ar/providers.json +1 -0
- package/locales/bg-BG/models.json +24 -1
- package/locales/bg-BG/providers.json +1 -0
- package/locales/de-DE/models.json +30 -1
- package/locales/de-DE/providers.json +1 -0
- package/locales/en-US/models.json +1 -0
- package/locales/en-US/providers.json +1 -0
- package/locales/es-ES/models.json +32 -1
- package/locales/es-ES/providers.json +1 -0
- package/locales/fa-IR/models.json +48 -1
- package/locales/fa-IR/providers.json +1 -0
- package/locales/fr-FR/models.json +47 -1
- package/locales/fr-FR/providers.json +1 -0
- package/locales/it-IT/models.json +32 -1
- package/locales/it-IT/providers.json +1 -0
- package/locales/ja-JP/models.json +2 -1
- package/locales/ja-JP/providers.json +1 -0
- package/locales/ko-KR/models.json +24 -1
- package/locales/ko-KR/providers.json +1 -0
- package/locales/nl-NL/models.json +46 -1
- package/locales/nl-NL/providers.json +1 -0
- package/locales/pl-PL/models.json +41 -1
- package/locales/pl-PL/providers.json +1 -0
- package/locales/pt-BR/models.json +32 -1
- package/locales/pt-BR/providers.json +1 -0
- package/locales/ru-RU/models.json +54 -2
- package/locales/ru-RU/providers.json +1 -0
- package/locales/tr-TR/models.json +32 -1
- package/locales/tr-TR/providers.json +1 -0
- package/locales/vi-VN/models.json +37 -1
- package/locales/vi-VN/providers.json +1 -0
- package/locales/zh-CN/models.json +24 -3
- package/locales/zh-CN/providers.json +1 -0
- package/locales/zh-TW/models.json +11 -1
- package/locales/zh-TW/providers.json +1 -0
- package/package.json +4 -3
- package/packages/builtin-tool-knowledge-base/src/client/Render/SearchKnowledgeBase/Item/index.tsx +4 -2
- package/packages/builtin-tool-local-system/src/client/Intervention/EditLocalFile/index.tsx +3 -2
- package/packages/builtin-tool-local-system/src/client/Render/EditLocalFile/index.tsx +3 -2
- package/packages/const/src/theme.ts +0 -2
- package/packages/context-engine/src/engine/messages/types.ts +1 -1
- package/packages/desktop-bridge/src/routeVariants.ts +2 -9
- package/packages/electron-client-ipc/src/types/system.ts +1 -1
- package/packages/model-runtime/src/core/BaseAI.ts +1 -1
- package/packages/model-runtime/src/core/streams/qwen.test.ts +140 -0
- package/packages/model-runtime/src/core/streams/qwen.ts +17 -5
- package/packages/model-runtime/src/types/chat.ts +12 -12
- package/packages/model-runtime/src/types/error.ts +1 -1
- package/packages/model-runtime/src/types/image.ts +1 -1
- package/scripts/electronWorkflow/modifiers/nextConfig.mts +41 -13
- package/src/app/[variants]/(auth)/_layout/index.tsx +3 -2
- package/src/app/[variants]/(auth)/_layout/style.ts +8 -18
- package/src/app/[variants]/(auth)/layout.tsx +7 -3
- package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/index.tsx +4 -2
- package/src/app/[variants]/(desktop)/desktop-onboarding/_layout/style.ts +3 -0
- package/src/app/[variants]/(main)/_layout/DesktopLayoutContainer.tsx +3 -2
- package/src/app/[variants]/(main)/chat/features/Conversation/Header/index.tsx +2 -1
- package/src/app/[variants]/(main)/chat/profile/features/ProfileEditor/PluginTag.tsx +3 -2
- package/src/app/[variants]/(main)/community/(list)/_layout/Footer.tsx +3 -2
- package/src/app/[variants]/(main)/group/features/Conversation/ChatItem/Thread.tsx +3 -2
- package/src/app/[variants]/(main)/group/profile/features/AgentBuilder/index.tsx +0 -1
- package/src/app/[variants]/(main)/group/profile/features/ProfileEditor/PluginTag.tsx +3 -2
- package/src/app/[variants]/(main)/home/_layout/Body/Agent/List/AgentItem/Editing.tsx +2 -2
- package/src/app/[variants]/(main)/home/_layout/Footer/index.tsx +1 -1
- package/src/app/[variants]/(main)/home/_layout/index.tsx +3 -2
- package/src/app/[variants]/(main)/home/features/CommunityAgents/Item.tsx +3 -2
- package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/AspectRatioSelect/index.tsx +4 -2
- package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/ModelSelect/ImageModelItem.tsx +3 -2
- package/src/app/[variants]/(main)/image/_layout/ConfigPanel/components/Select/index.tsx +4 -2
- package/src/app/[variants]/(main)/image/features/PromptInput/index.tsx +3 -2
- package/src/app/[variants]/(main)/memory/features/TimeLineView/index.tsx +9 -4
- package/src/app/[variants]/(main)/page/_layout/Body/List/Item/Editing.tsx +2 -2
- package/src/app/[variants]/(main)/settings/common/features/Common/Common.tsx +11 -11
- package/src/app/[variants]/(main)/settings/provider/(list)/ProviderGrid/Card.tsx +3 -2
- package/src/app/[variants]/(main)/settings/stats/features/overview/ShareButton/TotalCard.tsx +4 -2
- package/src/app/[variants]/(mobile)/me/(home)/features/Header.tsx +6 -8
- package/src/app/[variants]/layout.tsx +10 -15
- package/src/app/[variants]/onboarding/_layout/index.tsx +3 -2
- package/src/app/[variants]/onboarding/features/ModeSelectionStep.tsx +3 -2
- package/src/app/[variants]/router/index.tsx +12 -8
- package/src/components/Cell/Divider.tsx +4 -2
- package/src/components/DataStyleModal/index.tsx +4 -2
- package/src/components/FeatureList/index.tsx +4 -2
- package/src/components/FileParsingStatus/EmbeddingStatus.tsx +3 -2
- package/src/components/FileParsingStatus/index.tsx +3 -2
- package/src/components/Notification/index.tsx +4 -2
- package/src/components/client/ClientOnly.tsx +17 -0
- package/src/features/AlertBanner/CloudBanner.tsx +4 -3
- package/src/features/CommandMenu/ThemeMenu.tsx +1 -1
- package/src/features/CommandMenu/types.ts +5 -2
- package/src/features/CommandMenu/useCommandMenu.ts +3 -2
- package/src/features/Conversation/Markdown/plugins/LobeArtifact/Render/index.tsx +3 -2
- package/src/features/Conversation/Messages/components/FileChunks/ChunkItem.tsx +3 -2
- package/src/features/Conversation/Messages/components/FileChunks/index.tsx +4 -2
- package/src/features/Conversation/Messages/components/SearchGrounding.tsx +3 -2
- package/src/features/ElectronTitlebar/hooks/useWatchThemeUpdate.ts +21 -38
- package/src/features/GroupChatSettings/AgentCard.tsx +3 -2
- package/src/features/GroupChatSettings/HostMemberCard.tsx +3 -2
- package/src/features/PageEditor/DiffAllToolbar.tsx +4 -2
- package/src/features/User/UserPanel/ThemeButton.tsx +18 -29
- package/src/hooks/useIsDark.ts +11 -0
- package/src/layout/AuthProvider/Clerk/useAppearance.ts +4 -2
- package/src/layout/AuthProvider/MarketAuth/MarketAuthConfirmModal.tsx +3 -2
- package/src/layout/GlobalProvider/AppTheme.tsx +15 -19
- package/src/layout/GlobalProvider/NextThemeProvider.tsx +22 -0
- package/src/layout/GlobalProvider/StyleRegistry.tsx +18 -13
- package/src/layout/GlobalProvider/index.tsx +38 -36
- package/src/libs/next/proxy/define-config.ts +2 -11
- package/src/server/services/comfyui/config/constants.ts +7 -7
- package/src/server/services/comfyui/config/promptToolConst.ts +26 -26
- package/src/server/services/comfyui/utils/promptSplitter.ts +23 -23
- package/src/server/services/comfyui/utils/weightDType.ts +4 -5
- package/src/store/global/action.test.ts +0 -15
- package/src/store/global/actions/__tests__/general.test.ts +0 -37
- package/src/store/global/actions/general.ts +0 -21
- package/src/store/global/initialState.ts +0 -6
- package/src/store/global/selectors/systemStatus.test.ts +0 -20
- package/src/store/global/selectors/systemStatus.ts +0 -2
- package/src/styles/global.ts +0 -2
- package/src/utils/server/routeVariants.test.ts +17 -51
- package/src/utils/server/routeVariants.ts +0 -1
|
@@ -11,7 +11,6 @@ describe('RouteVariants', () => {
|
|
|
11
11
|
expect(DEFAULT_VARIANTS).toEqual({
|
|
12
12
|
isMobile: false,
|
|
13
13
|
locale: DEFAULT_LANG,
|
|
14
|
-
theme: 'light',
|
|
15
14
|
});
|
|
16
15
|
});
|
|
17
16
|
});
|
|
@@ -21,30 +20,27 @@ describe('RouteVariants', () => {
|
|
|
21
20
|
const variants: IRouteVariants = {
|
|
22
21
|
isMobile: false,
|
|
23
22
|
locale: 'en-US',
|
|
24
|
-
theme: 'light',
|
|
25
23
|
};
|
|
26
24
|
const result = RouteVariants.serializeVariants(variants);
|
|
27
|
-
expect(result).toBe('en-
|
|
25
|
+
expect(result).toBe('en-US__0');
|
|
28
26
|
});
|
|
29
27
|
|
|
30
28
|
it('should serialize variants with mobile enabled', () => {
|
|
31
29
|
const variants: IRouteVariants = {
|
|
32
30
|
isMobile: true,
|
|
33
31
|
locale: 'zh-CN',
|
|
34
|
-
theme: 'dark',
|
|
35
32
|
};
|
|
36
33
|
const result = RouteVariants.serializeVariants(variants);
|
|
37
|
-
expect(result).toBe('zh-
|
|
34
|
+
expect(result).toBe('zh-CN__1');
|
|
38
35
|
});
|
|
39
36
|
|
|
40
37
|
it('should serialize variants with different locales', () => {
|
|
41
38
|
const variants: IRouteVariants = {
|
|
42
39
|
isMobile: false,
|
|
43
40
|
locale: 'ja-JP',
|
|
44
|
-
theme: 'light',
|
|
45
41
|
};
|
|
46
42
|
const result = RouteVariants.serializeVariants(variants);
|
|
47
|
-
expect(result).toBe('ja-
|
|
43
|
+
expect(result).toBe('ja-JP__0');
|
|
48
44
|
});
|
|
49
45
|
|
|
50
46
|
it('should serialize variants with custom colors', () => {
|
|
@@ -53,31 +49,28 @@ describe('RouteVariants', () => {
|
|
|
53
49
|
locale: 'en-US',
|
|
54
50
|
neutralColor: '#cccccc',
|
|
55
51
|
primaryColor: '#ff0000',
|
|
56
|
-
theme: 'dark',
|
|
57
52
|
};
|
|
58
53
|
const result = RouteVariants.serializeVariants(variants);
|
|
59
|
-
expect(result).toBe('en-
|
|
54
|
+
expect(result).toBe('en-US__1');
|
|
60
55
|
});
|
|
61
56
|
});
|
|
62
57
|
|
|
63
58
|
describe('deserializeVariants', () => {
|
|
64
59
|
it('should deserialize valid serialized string', () => {
|
|
65
|
-
const serialized = 'en-
|
|
60
|
+
const serialized = 'en-US__0';
|
|
66
61
|
const result = RouteVariants.deserializeVariants(serialized);
|
|
67
62
|
expect(result).toEqual({
|
|
68
63
|
isMobile: false,
|
|
69
64
|
locale: 'en-US',
|
|
70
|
-
theme: 'light',
|
|
71
65
|
});
|
|
72
66
|
});
|
|
73
67
|
|
|
74
68
|
it('should deserialize mobile variants', () => {
|
|
75
|
-
const serialized = 'zh-
|
|
69
|
+
const serialized = 'zh-CN__1';
|
|
76
70
|
const result = RouteVariants.deserializeVariants(serialized);
|
|
77
71
|
expect(result).toEqual({
|
|
78
72
|
isMobile: true,
|
|
79
73
|
locale: 'zh-CN',
|
|
80
|
-
theme: 'dark',
|
|
81
74
|
});
|
|
82
75
|
});
|
|
83
76
|
|
|
@@ -94,22 +87,11 @@ describe('RouteVariants', () => {
|
|
|
94
87
|
});
|
|
95
88
|
|
|
96
89
|
it('should handle invalid locale by falling back to default', () => {
|
|
97
|
-
const serialized = 'invalid-
|
|
90
|
+
const serialized = 'invalid-locale__0';
|
|
98
91
|
const result = RouteVariants.deserializeVariants(serialized);
|
|
99
92
|
expect(result).toEqual({
|
|
100
93
|
isMobile: false,
|
|
101
94
|
locale: DEFAULT_LANG,
|
|
102
|
-
theme: 'light',
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
|
|
106
|
-
it('should handle invalid theme by falling back to default', () => {
|
|
107
|
-
const serialized = 'en-US__0__invalid-theme';
|
|
108
|
-
const result = RouteVariants.deserializeVariants(serialized);
|
|
109
|
-
expect(result).toEqual({
|
|
110
|
-
isMobile: false,
|
|
111
|
-
locale: 'en-US',
|
|
112
|
-
theme: 'light',
|
|
113
95
|
});
|
|
114
96
|
});
|
|
115
97
|
|
|
@@ -120,19 +102,19 @@ describe('RouteVariants', () => {
|
|
|
120
102
|
});
|
|
121
103
|
|
|
122
104
|
it('should handle isMobile value correctly for "0"', () => {
|
|
123
|
-
const serialized = 'en-
|
|
105
|
+
const serialized = 'en-US__0';
|
|
124
106
|
const result = RouteVariants.deserializeVariants(serialized);
|
|
125
107
|
expect(result.isMobile).toBe(false);
|
|
126
108
|
});
|
|
127
109
|
|
|
128
110
|
it('should handle isMobile value correctly for "1"', () => {
|
|
129
|
-
const serialized = 'en-
|
|
111
|
+
const serialized = 'en-US__1';
|
|
130
112
|
const result = RouteVariants.deserializeVariants(serialized);
|
|
131
113
|
expect(result.isMobile).toBe(true);
|
|
132
114
|
});
|
|
133
115
|
|
|
134
116
|
it('should handle isMobile value correctly for other values', () => {
|
|
135
|
-
const serialized = 'en-
|
|
117
|
+
const serialized = 'en-US__2';
|
|
136
118
|
const result = RouteVariants.deserializeVariants(serialized);
|
|
137
119
|
expect(result.isMobile).toBe(false);
|
|
138
120
|
});
|
|
@@ -141,25 +123,23 @@ describe('RouteVariants', () => {
|
|
|
141
123
|
describe('getVariantsFromProps', () => {
|
|
142
124
|
it('should extract and deserialize variants from props', async () => {
|
|
143
125
|
const props: DynamicLayoutProps = {
|
|
144
|
-
params: Promise.resolve({ variants: 'en-
|
|
126
|
+
params: Promise.resolve({ variants: 'en-US__0' }),
|
|
145
127
|
};
|
|
146
128
|
const result = await RouteVariants.getVariantsFromProps(props);
|
|
147
129
|
expect(result).toEqual({
|
|
148
130
|
isMobile: false,
|
|
149
131
|
locale: 'en-US',
|
|
150
|
-
theme: 'light',
|
|
151
132
|
});
|
|
152
133
|
});
|
|
153
134
|
|
|
154
135
|
it('should handle mobile variants from props', async () => {
|
|
155
136
|
const props: DynamicLayoutProps = {
|
|
156
|
-
params: Promise.resolve({ variants: 'zh-
|
|
137
|
+
params: Promise.resolve({ variants: 'zh-CN__1' }),
|
|
157
138
|
};
|
|
158
139
|
const result = await RouteVariants.getVariantsFromProps(props);
|
|
159
140
|
expect(result).toEqual({
|
|
160
141
|
isMobile: true,
|
|
161
142
|
locale: 'zh-CN',
|
|
162
|
-
theme: 'dark',
|
|
163
143
|
});
|
|
164
144
|
});
|
|
165
145
|
|
|
@@ -175,7 +155,7 @@ describe('RouteVariants', () => {
|
|
|
175
155
|
describe('getIsMobile', () => {
|
|
176
156
|
it('should extract isMobile as false from props', async () => {
|
|
177
157
|
const props: DynamicLayoutProps = {
|
|
178
|
-
params: Promise.resolve({ variants: 'en-
|
|
158
|
+
params: Promise.resolve({ variants: 'en-US__0' }),
|
|
179
159
|
};
|
|
180
160
|
const result = await RouteVariants.getIsMobile(props);
|
|
181
161
|
expect(result).toBe(false);
|
|
@@ -183,7 +163,7 @@ describe('RouteVariants', () => {
|
|
|
183
163
|
|
|
184
164
|
it('should extract isMobile as true from props', async () => {
|
|
185
165
|
const props: DynamicLayoutProps = {
|
|
186
|
-
params: Promise.resolve({ variants: 'en-
|
|
166
|
+
params: Promise.resolve({ variants: 'en-US__1' }),
|
|
187
167
|
};
|
|
188
168
|
const result = await RouteVariants.getIsMobile(props);
|
|
189
169
|
expect(result).toBe(true);
|
|
@@ -201,7 +181,7 @@ describe('RouteVariants', () => {
|
|
|
201
181
|
describe('getLocale', () => {
|
|
202
182
|
it('should extract locale from props', async () => {
|
|
203
183
|
const props: DynamicLayoutProps = {
|
|
204
|
-
params: Promise.resolve({ variants: 'zh-
|
|
184
|
+
params: Promise.resolve({ variants: 'zh-CN__0' }),
|
|
205
185
|
};
|
|
206
186
|
const result = await RouteVariants.getLocale(props);
|
|
207
187
|
expect(result).toBe('zh-CN');
|
|
@@ -209,7 +189,7 @@ describe('RouteVariants', () => {
|
|
|
209
189
|
|
|
210
190
|
it('should extract different locale from props', async () => {
|
|
211
191
|
const props: DynamicLayoutProps = {
|
|
212
|
-
params: Promise.resolve({ variants: 'ja-
|
|
192
|
+
params: Promise.resolve({ variants: 'ja-JP__1' }),
|
|
213
193
|
};
|
|
214
194
|
const result = await RouteVariants.getLocale(props);
|
|
215
195
|
expect(result).toBe('ja-JP');
|
|
@@ -225,7 +205,7 @@ describe('RouteVariants', () => {
|
|
|
225
205
|
|
|
226
206
|
it('should return default locale for invalid locale in props', async () => {
|
|
227
207
|
const props: DynamicLayoutProps = {
|
|
228
|
-
params: Promise.resolve({ variants: 'invalid-
|
|
208
|
+
params: Promise.resolve({ variants: 'invalid-locale__0' }),
|
|
229
209
|
};
|
|
230
210
|
const result = await RouteVariants.getLocale(props);
|
|
231
211
|
expect(result).toBe(DEFAULT_LANG);
|
|
@@ -254,24 +234,14 @@ describe('RouteVariants', () => {
|
|
|
254
234
|
});
|
|
255
235
|
});
|
|
256
236
|
|
|
257
|
-
it('should create variants with custom theme', () => {
|
|
258
|
-
const result = RouteVariants.createVariants({ theme: 'dark' });
|
|
259
|
-
expect(result).toEqual({
|
|
260
|
-
...DEFAULT_VARIANTS,
|
|
261
|
-
theme: 'dark',
|
|
262
|
-
});
|
|
263
|
-
});
|
|
264
|
-
|
|
265
237
|
it('should create variants with multiple custom options', () => {
|
|
266
238
|
const result = RouteVariants.createVariants({
|
|
267
239
|
isMobile: true,
|
|
268
240
|
locale: 'ja-JP',
|
|
269
|
-
theme: 'dark',
|
|
270
241
|
});
|
|
271
242
|
expect(result).toEqual({
|
|
272
243
|
isMobile: true,
|
|
273
244
|
locale: 'ja-JP',
|
|
274
|
-
theme: 'dark',
|
|
275
245
|
});
|
|
276
246
|
});
|
|
277
247
|
|
|
@@ -293,14 +263,12 @@ describe('RouteVariants', () => {
|
|
|
293
263
|
locale: 'zh-CN',
|
|
294
264
|
neutralColor: '#aaaaaa',
|
|
295
265
|
primaryColor: '#00ff00',
|
|
296
|
-
theme: 'dark',
|
|
297
266
|
});
|
|
298
267
|
expect(result).toEqual({
|
|
299
268
|
isMobile: true,
|
|
300
269
|
locale: 'zh-CN',
|
|
301
270
|
neutralColor: '#aaaaaa',
|
|
302
271
|
primaryColor: '#00ff00',
|
|
303
|
-
theme: 'dark',
|
|
304
272
|
});
|
|
305
273
|
});
|
|
306
274
|
});
|
|
@@ -310,7 +278,6 @@ describe('RouteVariants', () => {
|
|
|
310
278
|
const original: IRouteVariants = {
|
|
311
279
|
isMobile: true,
|
|
312
280
|
locale: 'zh-CN',
|
|
313
|
-
theme: 'dark',
|
|
314
281
|
};
|
|
315
282
|
const serialized = RouteVariants.serializeVariants(original);
|
|
316
283
|
const deserialized = RouteVariants.deserializeVariants(serialized);
|
|
@@ -329,7 +296,6 @@ describe('RouteVariants', () => {
|
|
|
329
296
|
const original: IRouteVariants = {
|
|
330
297
|
isMobile: false,
|
|
331
298
|
locale: locale as any,
|
|
332
|
-
theme: 'light',
|
|
333
299
|
};
|
|
334
300
|
const serialized = RouteVariants.serializeVariants(original);
|
|
335
301
|
const deserialized = RouteVariants.deserializeVariants(serialized);
|
|
@@ -3,7 +3,6 @@ import { RouteVariants } from '@lobechat/desktop-bridge';
|
|
|
3
3
|
import { type DynamicLayoutProps } from '@/types/next';
|
|
4
4
|
|
|
5
5
|
export { LOBE_LOCALE_COOKIE } from '@/const/locale';
|
|
6
|
-
export { LOBE_THEME_APPEARANCE } from '@/const/theme';
|
|
7
6
|
export {
|
|
8
7
|
DEFAULT_LANG,
|
|
9
8
|
DEFAULT_VARIANTS,
|