@pure-ds/storybook 0.7.29 → 0.7.41
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/.storybook/main.js +14 -4
- package/.storybook/preview.js +261 -85
- package/dist/pds-reference.json +107 -61
- package/package.json +2 -2
- package/public/assets/js/app.js +9 -11
- package/public/assets/js/lit.js +2 -2
- package/public/assets/js/pds-ask.js +4 -4
- package/public/assets/js/pds-autocomplete.js +4 -4
- package/public/assets/js/pds-enhancers.js +1 -1
- package/public/assets/js/pds-localization.js +1 -0
- package/public/assets/js/pds-manager.js +119 -119
- package/public/assets/js/pds.js +2 -2
- package/public/assets/locales/nl-NL.json +450 -0
- package/public/assets/pds/components/pds-calendar.js +4 -4
- package/public/assets/pds/components/pds-daterange.js +11 -8
- package/public/assets/pds/components/pds-form.js +22 -22
- package/public/assets/pds/components/pds-icon.js +9 -1
- package/public/assets/pds/components/pds-live-edit.js +71 -42
- package/public/assets/pds/components/pds-live-importer.js +66 -66
- package/public/assets/pds/components/pds-live-template-canvas.js +3 -3
- package/public/assets/pds/components/pds-locale.js +1132 -0
- package/public/assets/pds/components/pds-omnibox.js +92 -12
- package/public/assets/pds/components/pds-rating.js +5 -3
- package/public/assets/pds/components/pds-tags.js +5 -5
- package/public/assets/pds/components/pds-theme.js +4 -4
- package/public/assets/pds/components/pds-toaster.js +6 -6
- package/public/assets/pds/components/pds-treeview.js +8 -4
- package/public/assets/pds/components/pds-upload.js +7 -6
- package/public/assets/pds/core/pds-ask.js +4 -4
- package/public/assets/pds/core/pds-autocomplete.js +4 -4
- package/public/assets/pds/core/pds-enhancers.js +1 -1
- package/public/assets/pds/core/pds-localization.js +1 -0
- package/public/assets/pds/core/pds-manager.js +119 -119
- package/public/assets/pds/core.js +2 -2
- package/public/assets/pds/external/lit.js +2 -2
- package/public/assets/pds/vscode-custom-data.json +10 -0
- package/src/js/app.js +10 -10
- package/src/js/common/ask.js +5 -4
- package/src/js/common/font-loader.js +10 -8
- package/src/js/common/localization-resource-provider.js +319 -0
- package/src/js/common/localization.js +1001 -0
- package/src/js/common/msg.js +9 -90
- package/src/js/common/pds-log.js +144 -0
- package/src/js/lit.js +0 -15
- package/src/js/pds-autocomplete.js +69 -1
- package/src/js/pds-core/pds-config.js +51 -10
- package/src/js/pds-core/pds-enhancers.js +5 -3
- package/src/js/pds-core/pds-live.js +23 -12
- package/src/js/pds-core/pds-registry.js +6 -4
- package/src/js/pds-core/pds-runtime.js +12 -8
- package/src/js/pds-core/pds-start-helpers.js +21 -11
- package/src/js/pds-localization.js +10 -0
- package/src/js/pds-singleton.js +49 -0
- package/src/js/pds.d.ts +152 -0
- package/src/js/pds.js +428 -47
- package/stories/components/PdsForm.stories.js +9 -1
- package/stories/components/PdsLocale.stories.js +86 -0
- package/stories/components/PdsOmnibox.stories.js +206 -0
- package/stories/foundations/Colors.stories.js +3 -1
- package/stories/getting-started.md +2 -0
- package/stories/reference/reference-helpers.js +2 -2
- package/stories/utils/PdsAsk.stories.js +179 -1
- package/stories/utils/navigation.js +2 -2
package/.storybook/main.js
CHANGED
|
@@ -180,11 +180,21 @@ const config = {
|
|
|
180
180
|
config.resolve.alias.push({ find: '../../../../src', replacement: pdsSrcPath });
|
|
181
181
|
|
|
182
182
|
// Try to resolve user's pds.config.js
|
|
183
|
-
const
|
|
184
|
-
|
|
185
|
-
|
|
183
|
+
const packageRoot = resolve(currentDirname, '..');
|
|
184
|
+
const monorepoRoot = resolve(currentDirname, '../../..');
|
|
185
|
+
const cwdUserConfigPath = resolve(process.cwd(), 'pds.config.js');
|
|
186
|
+
const monorepoUserConfigPath = resolve(monorepoRoot, 'pds.config.js');
|
|
187
|
+
|
|
188
|
+
const userConfigCandidates = process.cwd() === packageRoot
|
|
189
|
+
? [monorepoUserConfigPath, cwdUserConfigPath]
|
|
190
|
+
: [cwdUserConfigPath, monorepoUserConfigPath];
|
|
191
|
+
|
|
192
|
+
const resolvedUserConfigPath = userConfigCandidates.find((candidate) => fs.existsSync(candidate));
|
|
193
|
+
|
|
194
|
+
if (resolvedUserConfigPath) {
|
|
195
|
+
config.resolve.alias.push({ find: '@user/pds-config', replacement: resolvedUserConfigPath });
|
|
186
196
|
} else {
|
|
187
|
-
|
|
197
|
+
// Fallback to a default config file if user config doesn't exist
|
|
188
198
|
config.resolve.alias.push({ find: '@user/pds-config', replacement: resolve(currentDirname, '../default-pds.config.js') });
|
|
189
199
|
}
|
|
190
200
|
|
package/.storybook/preview.js
CHANGED
|
@@ -3,10 +3,11 @@ import { SELECT_STORY, UPDATE_GLOBALS } from '@storybook/core-events';
|
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { html } from 'lit';
|
|
5
5
|
import { Title, Subtitle, Description as DocsDescription, Controls } from '@storybook/blocks';
|
|
6
|
-
import { PDS } from '
|
|
6
|
+
import { PDS } from '#pds';
|
|
7
7
|
import { presets } from '@pds-src/js/pds-core/pds-config.js';
|
|
8
8
|
import { Generator } from '@pds-src/js/pds-core/pds-generator.js';
|
|
9
9
|
import { applyStyles } from '@pds-src/js/pds-core/pds-runtime.js';
|
|
10
|
+
import { stripFunctions } from '@pds-src/js/pds-core/pds-start-helpers.js';
|
|
10
11
|
import { config as userConfig } from '@user/pds-config';
|
|
11
12
|
import { withHTMLExtractor } from './addons/html-preview/preview.js';
|
|
12
13
|
import { withDescription } from './addons/description/preview.js';
|
|
@@ -75,8 +76,127 @@ const getInitialPreset = () => {
|
|
|
75
76
|
return 'default'; // Default preset
|
|
76
77
|
};
|
|
77
78
|
|
|
79
|
+
const STORYBOOK_LOCALE_STORAGE_KEY = 'storybook-pds-locale';
|
|
80
|
+
|
|
81
|
+
const normalizeLocale = (value) => String(value || '').trim().toLowerCase();
|
|
82
|
+
|
|
83
|
+
const getConfiguredLocales = () => {
|
|
84
|
+
const configuredLocales = userConfig?.localization?.locales;
|
|
85
|
+
const providerLocales = userConfig?.localization?.provider?.locales;
|
|
86
|
+
const sourceLocales = Array.isArray(configuredLocales) && configuredLocales.length
|
|
87
|
+
? configuredLocales
|
|
88
|
+
: Array.isArray(providerLocales) && providerLocales.length
|
|
89
|
+
? providerLocales
|
|
90
|
+
: ['en'];
|
|
91
|
+
|
|
92
|
+
const seen = new Set();
|
|
93
|
+
return sourceLocales.reduce((result, locale) => {
|
|
94
|
+
const normalized = normalizeLocale(locale);
|
|
95
|
+
if (!normalized || seen.has(normalized)) return result;
|
|
96
|
+
seen.add(normalized);
|
|
97
|
+
result.push(normalized);
|
|
98
|
+
return result;
|
|
99
|
+
}, []);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
const resolveSupportedLocale = (value, supportedLocales = [], fallbackLocale = 'en') => {
|
|
103
|
+
const normalizedValue = normalizeLocale(value);
|
|
104
|
+
const normalizedFallback = normalizeLocale(fallbackLocale) || 'en';
|
|
105
|
+
const normalizedSupported = Array.isArray(supportedLocales)
|
|
106
|
+
? supportedLocales.map((locale) => normalizeLocale(locale)).filter(Boolean)
|
|
107
|
+
: [];
|
|
108
|
+
|
|
109
|
+
if (!normalizedSupported.length) return normalizedFallback;
|
|
110
|
+
|
|
111
|
+
const exactMatch = normalizedSupported.find((locale) => locale === normalizedValue);
|
|
112
|
+
if (exactMatch) return exactMatch;
|
|
113
|
+
|
|
114
|
+
const requestedBase = normalizedValue.split('-')[0];
|
|
115
|
+
const baseMatch = normalizedSupported.find((locale) => locale.split('-')[0] === requestedBase);
|
|
116
|
+
if (baseMatch) return baseMatch;
|
|
117
|
+
|
|
118
|
+
const fallbackMatch = normalizedSupported.find((locale) => locale === normalizedFallback);
|
|
119
|
+
if (fallbackMatch) return fallbackMatch;
|
|
120
|
+
|
|
121
|
+
return normalizedSupported[0];
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
const getInitialLocale = (supportedLocales, fallbackLocale) => {
|
|
125
|
+
try {
|
|
126
|
+
const sessionLocale = sessionStorage.getItem(STORYBOOK_LOCALE_STORAGE_KEY);
|
|
127
|
+
if (sessionLocale) {
|
|
128
|
+
return resolveSupportedLocale(sessionLocale, supportedLocales, fallbackLocale);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const storedLocale = localStorage.getItem(STORYBOOK_LOCALE_STORAGE_KEY);
|
|
132
|
+
if (storedLocale) {
|
|
133
|
+
return resolveSupportedLocale(storedLocale, supportedLocales, fallbackLocale);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const urlParams = new URLSearchParams(window.location.search);
|
|
137
|
+
const urlLocale = urlParams.get('locale');
|
|
138
|
+
if (urlLocale) {
|
|
139
|
+
return resolveSupportedLocale(urlLocale, supportedLocales, fallbackLocale);
|
|
140
|
+
}
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.warn('Failed to read locale from storage:', error);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
return resolveSupportedLocale(fallbackLocale, supportedLocales, fallbackLocale);
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
const formatLocaleTitle = (locale) => {
|
|
149
|
+
const normalized = normalizeLocale(locale);
|
|
150
|
+
if (!normalized) return locale;
|
|
151
|
+
|
|
152
|
+
const [languageCode, regionCode] = normalized.split('-');
|
|
153
|
+
let languageLabel = languageCode.toUpperCase();
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
if (typeof Intl !== 'undefined' && typeof Intl.DisplayNames === 'function') {
|
|
157
|
+
const displayNames = new Intl.DisplayNames(['en'], { type: 'language' });
|
|
158
|
+
languageLabel = displayNames.of(languageCode) || languageLabel;
|
|
159
|
+
}
|
|
160
|
+
} catch {}
|
|
161
|
+
|
|
162
|
+
if (regionCode) {
|
|
163
|
+
return `${languageLabel} (${languageCode}-${regionCode.toUpperCase()})`;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
return `${languageLabel} (${languageCode})`;
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
const storybookLocales = getConfiguredLocales();
|
|
170
|
+
if (!storybookLocales.length) {
|
|
171
|
+
storybookLocales.push('en');
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
const initialDocumentLocale = typeof document !== 'undefined'
|
|
175
|
+
? document.documentElement?.getAttribute('lang')
|
|
176
|
+
: null;
|
|
177
|
+
|
|
178
|
+
const defaultStorybookLocale = resolveSupportedLocale(
|
|
179
|
+
userConfig?.localization?.locale || initialDocumentLocale || 'en',
|
|
180
|
+
storybookLocales,
|
|
181
|
+
storybookLocales[0] || 'en'
|
|
182
|
+
);
|
|
183
|
+
|
|
78
184
|
const initialPreset = getInitialPreset();
|
|
185
|
+
const initialLocale = getInitialLocale(storybookLocales, defaultStorybookLocale);
|
|
79
186
|
console.log('🎨 Starting PDS initialization with preset:', initialPreset);
|
|
187
|
+
console.log('🌍 Starting locale for Storybook:', initialLocale);
|
|
188
|
+
|
|
189
|
+
const clonePresetDesign = (presetConfig) => {
|
|
190
|
+
const cloneCandidate = stripFunctions(presetConfig);
|
|
191
|
+
if (typeof structuredClone === 'function') {
|
|
192
|
+
return structuredClone(cloneCandidate);
|
|
193
|
+
}
|
|
194
|
+
return JSON.parse(JSON.stringify(cloneCandidate));
|
|
195
|
+
};
|
|
196
|
+
|
|
197
|
+
if (typeof document !== 'undefined' && document.documentElement) {
|
|
198
|
+
document.documentElement.setAttribute('lang', initialLocale);
|
|
199
|
+
}
|
|
80
200
|
|
|
81
201
|
// Helper to detect docs pages - used to prevent PDS from interfering
|
|
82
202
|
function isDocsPage() {
|
|
@@ -155,6 +275,7 @@ PDS.addEventListener('pds:ready', (event) => {
|
|
|
155
275
|
// Merge user config
|
|
156
276
|
if (userConfig) {
|
|
157
277
|
if (userConfig.mode) pdsOptions.mode = userConfig.mode;
|
|
278
|
+
if (userConfig.localization) pdsOptions.localization = userConfig.localization;
|
|
158
279
|
if (userConfig.autoDefine) {
|
|
159
280
|
// Merge autoDefine options
|
|
160
281
|
pdsOptions.autoDefine = {
|
|
@@ -177,6 +298,10 @@ PDS.addEventListener('pds:ready', (event) => {
|
|
|
177
298
|
|
|
178
299
|
// Store PDS designer globally for reuse
|
|
179
300
|
PDS.currentPreset = initialPreset;
|
|
301
|
+
|
|
302
|
+
if (typeof document !== 'undefined' && document.documentElement) {
|
|
303
|
+
document.documentElement.setAttribute('lang', initialLocale);
|
|
304
|
+
}
|
|
180
305
|
})();
|
|
181
306
|
|
|
182
307
|
// Style protection disabled - decorator controls when PDS styles are applied
|
|
@@ -188,6 +313,42 @@ PDS.addEventListener('pds:ready', (event) => {
|
|
|
188
313
|
// Track current view mode globally for other code to check
|
|
189
314
|
let currentViewMode = 'story';
|
|
190
315
|
let toolbarTheme = null;
|
|
316
|
+
let toolbarLocale = initialLocale;
|
|
317
|
+
|
|
318
|
+
const setToolbarLocaleValue = (value) => {
|
|
319
|
+
const supportedLocale = resolveSupportedLocale(value, storybookLocales, defaultStorybookLocale);
|
|
320
|
+
if (!supportedLocale) return;
|
|
321
|
+
toolbarLocale = supportedLocale;
|
|
322
|
+
};
|
|
323
|
+
|
|
324
|
+
const persistStorybookLocale = (locale) => {
|
|
325
|
+
const supportedLocale = resolveSupportedLocale(locale, storybookLocales, defaultStorybookLocale);
|
|
326
|
+
if (!supportedLocale) return;
|
|
327
|
+
|
|
328
|
+
try {
|
|
329
|
+
sessionStorage.setItem(STORYBOOK_LOCALE_STORAGE_KEY, supportedLocale);
|
|
330
|
+
localStorage.setItem(STORYBOOK_LOCALE_STORAGE_KEY, supportedLocale);
|
|
331
|
+
} catch (error) {
|
|
332
|
+
console.warn('Failed to store locale:', error);
|
|
333
|
+
}
|
|
334
|
+
};
|
|
335
|
+
|
|
336
|
+
const applyStorybookLocale = (locale, { persist = true } = {}) => {
|
|
337
|
+
const supportedLocale = resolveSupportedLocale(locale, storybookLocales, defaultStorybookLocale);
|
|
338
|
+
if (!supportedLocale) return null;
|
|
339
|
+
|
|
340
|
+
if (persist) {
|
|
341
|
+
persistStorybookLocale(supportedLocale);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
setToolbarLocaleValue(supportedLocale);
|
|
345
|
+
|
|
346
|
+
if (typeof document !== 'undefined' && document.documentElement) {
|
|
347
|
+
document.documentElement.setAttribute('lang', supportedLocale);
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
return supportedLocale;
|
|
351
|
+
};
|
|
191
352
|
|
|
192
353
|
const setToolbarThemeValue = (value) => {
|
|
193
354
|
if (!value) return;
|
|
@@ -420,7 +581,7 @@ const withGlobalsHandler = (story, context) => {
|
|
|
420
581
|
console.log(`🎨 Applying preset via decorator: ${presetConfig.name || globals.preset}`);
|
|
421
582
|
|
|
422
583
|
const generatorOptions = {
|
|
423
|
-
design:
|
|
584
|
+
design: clonePresetDesign(presetConfig),
|
|
424
585
|
log: (...args) => console.log('🟦 [Generator]', ...args)
|
|
425
586
|
};
|
|
426
587
|
|
|
@@ -447,6 +608,18 @@ const withGlobalsHandler = (story, context) => {
|
|
|
447
608
|
if (globals?.theme) {
|
|
448
609
|
setToolbarThemeValue(globals.theme);
|
|
449
610
|
}
|
|
611
|
+
|
|
612
|
+
if (globals?.locale) {
|
|
613
|
+
const requestedLocale = resolveSupportedLocale(globals.locale, storybookLocales, defaultStorybookLocale);
|
|
614
|
+
const activeLocale = normalizeLocale(document.documentElement?.getAttribute('lang') || toolbarLocale);
|
|
615
|
+
|
|
616
|
+
if (requestedLocale && requestedLocale !== activeLocale) {
|
|
617
|
+
applyStorybookLocale(requestedLocale, { persist: true });
|
|
618
|
+
} else if (requestedLocale && document.documentElement?.getAttribute('lang') !== requestedLocale) {
|
|
619
|
+
document.documentElement.setAttribute('lang', requestedLocale);
|
|
620
|
+
setToolbarLocaleValue(requestedLocale);
|
|
621
|
+
}
|
|
622
|
+
}
|
|
450
623
|
|
|
451
624
|
return story();
|
|
452
625
|
};
|
|
@@ -1539,10 +1712,23 @@ const preview = {
|
|
|
1539
1712
|
dynamicTitle: true
|
|
1540
1713
|
}
|
|
1541
1714
|
},
|
|
1715
|
+
locale: {
|
|
1716
|
+
name: 'Locale',
|
|
1717
|
+
description: 'PDS locale',
|
|
1718
|
+
defaultValue: initialLocale,
|
|
1719
|
+
toolbar: {
|
|
1720
|
+
icon: 'globe',
|
|
1721
|
+
items: storybookLocales.map((locale) => ({
|
|
1722
|
+
value: locale,
|
|
1723
|
+
title: formatLocaleTitle(locale)
|
|
1724
|
+
})),
|
|
1725
|
+
dynamicTitle: true
|
|
1726
|
+
}
|
|
1727
|
+
},
|
|
1542
1728
|
preset: {
|
|
1543
1729
|
name: 'Preset',
|
|
1544
1730
|
description: 'Design preset',
|
|
1545
|
-
defaultValue: initialPreset,
|
|
1731
|
+
defaultValue: initialPreset,
|
|
1546
1732
|
toolbar: {
|
|
1547
1733
|
icon: 'paintbrush',
|
|
1548
1734
|
items: Object.keys(presets)
|
|
@@ -1551,25 +1737,20 @@ const preview = {
|
|
|
1551
1737
|
const bPreset = presets[b];
|
|
1552
1738
|
const aTags = aPreset.tags || [];
|
|
1553
1739
|
const bTags = bPreset.tags || [];
|
|
1554
|
-
|
|
1555
|
-
// Check if featured
|
|
1740
|
+
|
|
1556
1741
|
const aFeatured = aTags.includes('featured');
|
|
1557
1742
|
const bFeatured = bTags.includes('featured');
|
|
1558
|
-
|
|
1559
1743
|
if (aFeatured && !bFeatured) return -1;
|
|
1560
1744
|
if (!aFeatured && bFeatured) return 1;
|
|
1561
|
-
|
|
1562
|
-
// Check if has any tags
|
|
1745
|
+
|
|
1563
1746
|
const aHasTags = aTags.length > 0;
|
|
1564
1747
|
const bHasTags = bTags.length > 0;
|
|
1565
|
-
|
|
1566
1748
|
if (aHasTags && !bHasTags) return -1;
|
|
1567
1749
|
if (!aHasTags && bHasTags) return 1;
|
|
1568
|
-
|
|
1569
|
-
// Alphabetical by name
|
|
1750
|
+
|
|
1570
1751
|
return (aPreset.name || a).localeCompare(bPreset.name || b);
|
|
1571
1752
|
})
|
|
1572
|
-
.map(key => ({
|
|
1753
|
+
.map((key) => ({
|
|
1573
1754
|
value: key,
|
|
1574
1755
|
title: presets[key].name || key
|
|
1575
1756
|
})),
|
|
@@ -1579,102 +1760,97 @@ const preview = {
|
|
|
1579
1760
|
}
|
|
1580
1761
|
};
|
|
1581
1762
|
|
|
1582
|
-
// Listen to theme and preset changes from toolbar
|
|
1583
1763
|
if (typeof window !== 'undefined') {
|
|
1584
1764
|
console.log('👂 Setting up message listener for toolbar changes...');
|
|
1585
|
-
|
|
1765
|
+
|
|
1586
1766
|
window.addEventListener('message', async (event) => {
|
|
1587
|
-
if(event.data?.type == null) return;
|
|
1767
|
+
if (event.data?.type == null) return;
|
|
1588
1768
|
|
|
1589
1769
|
console.log('📨 Message received:', event.data?.type, event.data);
|
|
1590
|
-
|
|
1770
|
+
|
|
1591
1771
|
if (event.data?.type === 'SET_GLOBALS') {
|
|
1592
1772
|
console.log('✅ SET_GLOBALS detected, globals:', event.data.globals);
|
|
1593
1773
|
const { globals } = event.data;
|
|
1594
|
-
|
|
1774
|
+
|
|
1595
1775
|
if (globals?.theme) {
|
|
1596
1776
|
console.log('🌙 Theme change requested:', globals.theme);
|
|
1597
|
-
|
|
1598
|
-
// Set data-theme attribute on body for PDS theme system
|
|
1599
1777
|
document.body.setAttribute('data-theme', globals.theme);
|
|
1600
|
-
|
|
1601
|
-
// Also use PDS.theme property
|
|
1602
1778
|
PDS.theme = globals.theme;
|
|
1603
|
-
|
|
1604
1779
|
console.log('✅ Theme applied:', globals.theme);
|
|
1605
1780
|
setToolbarThemeValue(globals.theme);
|
|
1606
1781
|
}
|
|
1607
|
-
|
|
1782
|
+
|
|
1608
1783
|
if (globals?.preset) {
|
|
1609
1784
|
console.log('🔔 SET_GLOBALS message received with preset:', globals.preset);
|
|
1610
1785
|
console.log('📦 Current stored preset:', PDS.currentPreset);
|
|
1611
|
-
|
|
1612
|
-
// Skip if already on this preset
|
|
1786
|
+
|
|
1613
1787
|
if (globals.preset === PDS.currentPreset) {
|
|
1614
1788
|
console.log('⏭️ Preset unchanged, skipping');
|
|
1615
|
-
|
|
1616
|
-
}
|
|
1617
|
-
|
|
1618
|
-
try {
|
|
1619
|
-
console.log('📦 Preset change requested:', globals.preset);
|
|
1620
|
-
|
|
1621
|
-
// Store preset selection for persistence
|
|
1789
|
+
} else {
|
|
1622
1790
|
try {
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1791
|
+
console.log('📦 Preset change requested:', globals.preset);
|
|
1792
|
+
|
|
1793
|
+
try {
|
|
1794
|
+
sessionStorage.setItem('storybook-pds-preset', globals.preset);
|
|
1795
|
+
localStorage.setItem('storybook-pds-preset', globals.preset);
|
|
1796
|
+
console.log('💾 Preset stored in storage');
|
|
1797
|
+
} catch (e) {
|
|
1798
|
+
console.warn('⚠️ Failed to store preset:', e);
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
console.log('📥 Importing pds-config...');
|
|
1802
|
+
const configModule = await import('../../../src/js/pds-core/pds-config.js');
|
|
1803
|
+
console.log('✅ Config module loaded:', configModule);
|
|
1804
|
+
|
|
1805
|
+
const { presets } = configModule;
|
|
1806
|
+
const presetId = globals.preset;
|
|
1807
|
+
const presetConfig = presets[presetId];
|
|
1808
|
+
|
|
1809
|
+
console.log('📋 Available presets:', Object.keys(presets));
|
|
1810
|
+
console.log('🔍 Looking for preset:', presetId);
|
|
1811
|
+
console.log('✅ Found preset config:', presetConfig ? 'yes' : 'no');
|
|
1812
|
+
|
|
1813
|
+
if (presetConfig) {
|
|
1814
|
+
console.log(`🎨 Applying preset: ${presetConfig.name || presetId}`);
|
|
1815
|
+
console.log('📝 Preset config:', presetConfig);
|
|
1816
|
+
|
|
1817
|
+
const generatorOptions = {
|
|
1818
|
+
design: clonePresetDesign(presetConfig),
|
|
1819
|
+
log: (...args) => console.log('🟦 [Generator]', ...args)
|
|
1820
|
+
};
|
|
1821
|
+
const storedTheme = PDS.theme || null;
|
|
1822
|
+
if (storedTheme) {
|
|
1823
|
+
generatorOptions.theme = storedTheme;
|
|
1824
|
+
console.log('🌙 Applying stored theme:', storedTheme);
|
|
1825
|
+
}
|
|
1826
|
+
|
|
1827
|
+
console.log('🏗️ Creating new Generator...');
|
|
1828
|
+
const newDesigner = new Generator(generatorOptions);
|
|
1829
|
+
console.log('✅ Generator created');
|
|
1830
|
+
|
|
1831
|
+
console.log('🎨 Applying styles to document...');
|
|
1832
|
+
setLiveGenerator(newDesigner);
|
|
1833
|
+
await applyStyles(newDesigner);
|
|
1834
|
+
console.log('✅ Styles applied to document');
|
|
1835
|
+
|
|
1836
|
+
PDS.currentPreset = presetId;
|
|
1837
|
+
console.log(`✅✅✅ Preset applied successfully: ${presetConfig.name || presetId}`);
|
|
1838
|
+
} else {
|
|
1839
|
+
console.error(`❌ Preset not found: ${presetId}`);
|
|
1840
|
+
console.error('❌ Available presets:', Object.keys(presets));
|
|
1656
1841
|
}
|
|
1657
|
-
|
|
1658
|
-
console.
|
|
1659
|
-
|
|
1660
|
-
console.log('✅ Generator created');
|
|
1661
|
-
|
|
1662
|
-
console.log('🎨 Applying styles to document...');
|
|
1663
|
-
setLiveGenerator(newDesigner);
|
|
1664
|
-
await applyStyles(newDesigner);
|
|
1665
|
-
console.log('✅ Styles applied to document');
|
|
1666
|
-
|
|
1667
|
-
// Update global reference
|
|
1668
|
-
PDS.currentPreset = presetId;
|
|
1669
|
-
|
|
1670
|
-
console.log(`✅✅✅ Preset applied successfully: ${presetConfig.name || presetId}`);
|
|
1671
|
-
} else {
|
|
1672
|
-
console.error(`❌ Preset not found: ${presetId}`);
|
|
1673
|
-
console.error('❌ Available presets:', Object.keys(presets));
|
|
1842
|
+
} catch (err) {
|
|
1843
|
+
console.error('❌❌❌ Failed to apply preset:', err);
|
|
1844
|
+
console.error('❌ Stack trace:', err.stack);
|
|
1674
1845
|
}
|
|
1675
|
-
}
|
|
1676
|
-
|
|
1677
|
-
|
|
1846
|
+
}
|
|
1847
|
+
}
|
|
1848
|
+
|
|
1849
|
+
if (globals?.locale) {
|
|
1850
|
+
const requestedLocale = resolveSupportedLocale(globals.locale, storybookLocales, defaultStorybookLocale);
|
|
1851
|
+
if (requestedLocale) {
|
|
1852
|
+
console.log('🌍 Locale change requested:', requestedLocale);
|
|
1853
|
+
applyStorybookLocale(requestedLocale, { persist: true });
|
|
1678
1854
|
}
|
|
1679
1855
|
}
|
|
1680
1856
|
}
|