@multiplatform.one/storybook 6.0.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.
@@ -0,0 +1,781 @@
1
+ "use strict";
2
+
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all) __defProp(target, name, {
11
+ get: all[name],
12
+ enumerable: true
13
+ });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
18
+ get: () => from[key],
19
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
20
+ });
21
+ }
22
+ return to;
23
+ };
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
25
+ // If the importer is in node compatibility mode or this is not an ESM
26
+ // file that has been converted to a CommonJS file using a Babel-
27
+ // compatible transform (i.e. "__esModule" has not been set), then set
28
+ // "default" to the CommonJS "module.exports" for node compatibility.
29
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
30
+ value: mod,
31
+ enumerable: true
32
+ }) : target, mod));
33
+ var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
34
+ value: true
35
+ }), mod);
36
+ var CreatePreview_exports = {};
37
+ __export(CreatePreview_exports, {
38
+ accentColorsChannelEvent: () => accentColorsChannelEvent,
39
+ accentOppositeChannelEvent: () => accentOppositeChannelEvent,
40
+ animationNamesChannelEvent: () => animationNamesChannelEvent,
41
+ baseOppositeChannelEvent: () => baseOppositeChannelEvent,
42
+ baseThemeColorsChannelEvent: () => baseThemeColorsChannelEvent,
43
+ createPreview: () => createPreview,
44
+ frappeDebugChannelEvent: () => frappeDebugChannelEvent,
45
+ themeColorsChannelEvent: () => themeColorsChannelEvent,
46
+ themeColorsOppositeChannelEvent: () => themeColorsOppositeChannelEvent
47
+ });
48
+ module.exports = __toCommonJS(CreatePreview_exports);
49
+ var import_jsx_runtime = require("react/jsx-runtime");
50
+ var import_react = require("react");
51
+ var import_theme = require("@multiplatform.one/theme");
52
+ var import_platform = require("@multiplatform.one/platform");
53
+ var import_react_cookie = require("react-cookie");
54
+ var import_tamagui = require("tamagui");
55
+ function _type_of(obj) {
56
+ "@swc/helpers - typeof";
57
+
58
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
59
+ }
60
+ var themeColorsChannelEvent = "theme-addon/theme-colors";
61
+ var themeColorsOppositeChannelEvent = "theme-addon/theme-colors-opposite";
62
+ var baseThemeColorsChannelEvent = "theme-addon/base-theme-colors";
63
+ var baseOppositeChannelEvent = "theme-addon/base-colors-opposite";
64
+ var accentColorsChannelEvent = "theme-addon/accent-colors";
65
+ var accentOppositeChannelEvent = "theme-addon/accent-colors-opposite";
66
+ var animationNamesChannelEvent = "theme-addon/animation-names";
67
+ var frappeDebugChannelEvent = "frappe-addon/debug-state";
68
+ var knobOptions = {
69
+ fillStyle: Object.values(import_theme.FillStyle),
70
+ borderRadius: Object.values(import_theme.BorderRadius),
71
+ borderWidth: Object.values(import_theme.BorderWidth),
72
+ elevation: Object.values(import_theme.Elevation),
73
+ space: Object.values(import_theme.Space),
74
+ size: Object.values(import_theme.Size),
75
+ textAccent: Object.values(import_theme.TextAccent),
76
+ headingFont: Object.values(import_theme.HeadingFont),
77
+ bodyFont: Object.values(import_theme.BodyFont),
78
+ fontWeight: Object.values(import_theme.FontWeight),
79
+ animation: ["none", ...import_theme.animationNames]
80
+ };
81
+ var stateKnobFields = ["fillStyle", "borderRadius", "borderWidth", "elevation", "space", "size", "textAccent", "headingFont", "bodyFont", "fontWeight"];
82
+ function parseValue(value) {
83
+ if (typeof value !== "string") return value;
84
+ try {
85
+ return JSON.parse(value);
86
+ } catch (unused) {
87
+ return value;
88
+ }
89
+ }
90
+ var toTitleCase = function toTitleCase2(str) {
91
+ return str.replace(/([A-Z])/g, " $1").replace(/^./, function (s) {
92
+ return s.toUpperCase();
93
+ });
94
+ };
95
+ function createControl(key) {
96
+ var _knobOptions_key;
97
+ var name = toTitleCase(key);
98
+ var values = (_knobOptions_key = knobOptions[key]) !== null && _knobOptions_key !== void 0 ? _knobOptions_key : [];
99
+ var serialized = values.map(function (value) {
100
+ return value;
101
+ });
102
+ var labels = Object.fromEntries(serialized.map(function (v) {
103
+ return [v, v.replace("$", "")];
104
+ }));
105
+ var fallback = import_theme.defaultKnobs[key];
106
+ return {
107
+ name,
108
+ description: name.toLowerCase(),
109
+ options: serialized,
110
+ control: {
111
+ type: "select",
112
+ labels
113
+ },
114
+ ...(fallback !== void 0 && {
115
+ defaultValue: fallback
116
+ })
117
+ };
118
+ }
119
+ function CanvasBackground(param) {
120
+ var {
121
+ children
122
+ } = param;
123
+ var _tamaguiTheme_background;
124
+ var tamaguiTheme = (0, import_tamagui.useTheme)();
125
+ var bg = (_tamaguiTheme_background = tamaguiTheme.background) === null || _tamaguiTheme_background === void 0 ? void 0 : _tamaguiTheme_background.val;
126
+ (0, import_react.useLayoutEffect)(function () {
127
+ if (bg) {
128
+ document.body.style.backgroundColor = bg;
129
+ document.documentElement.style.backgroundColor = bg;
130
+ }
131
+ }, [bg]);
132
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_tamagui.YStack, {
133
+ flex: 1,
134
+ minHeight: "100vh",
135
+ backgroundColor: "$background",
136
+ children
137
+ });
138
+ }
139
+ var _channelEmit = null;
140
+ function getChannelEmit() {
141
+ if (_channelEmit) return _channelEmit;
142
+ try {
143
+ var mod = require("storybook/preview-api");
144
+ var channel = mod.addons.getChannel();
145
+ _channelEmit = function _channelEmit2(event, data) {
146
+ return channel.emit(event, data);
147
+ };
148
+ return _channelEmit;
149
+ } catch (unused) {
150
+ return null;
151
+ }
152
+ }
153
+ function AnimationNamesEmitter() {
154
+ var emittedRef = (0, import_react.useRef)(false);
155
+ (0, import_react.useEffect)(function () {
156
+ var _getChannelEmit;
157
+ if (emittedRef.current) return;
158
+ emittedRef.current = true;
159
+ (_getChannelEmit = getChannelEmit()) === null || _getChannelEmit === void 0 ? void 0 : _getChannelEmit(animationNamesChannelEvent, import_theme.animationNames);
160
+ }, []);
161
+ return null;
162
+ }
163
+ function FrappeDebugEmitter() {
164
+ var prevRef = (0, import_react.useRef)("");
165
+ var syncRef = (0, import_react.useRef)(null);
166
+ var [tick, setTick] = (0, import_react.useState)(0);
167
+ (0, import_react.useEffect)(function () {
168
+ var cancelled = false;
169
+ async function resolve() {
170
+ try {
171
+ var {
172
+ __getActiveSyncModule
173
+ } = await import("@multiplatform.one/frappe");
174
+ var sync = __getActiveSyncModule();
175
+ if (sync && !cancelled) {
176
+ syncRef.current = sync;
177
+ setTick(function (t) {
178
+ return t + 1;
179
+ });
180
+ return sync.subscribeStore(function () {
181
+ if (!cancelled) setTick(function (t) {
182
+ return t + 1;
183
+ });
184
+ });
185
+ }
186
+ } catch (unused) {}
187
+ }
188
+ var cleanupPromise = resolve();
189
+ var attempts = 0;
190
+ var interval = setInterval(async function () {
191
+ attempts++;
192
+ if (syncRef.current || cancelled || attempts >= 10) {
193
+ clearInterval(interval);
194
+ return;
195
+ }
196
+ await resolve();
197
+ }, 2e3);
198
+ return function () {
199
+ cancelled = true;
200
+ clearInterval(interval);
201
+ cleanupPromise.then(function (unsub) {
202
+ return unsub === null || unsub === void 0 ? void 0 : unsub();
203
+ });
204
+ };
205
+ }, []);
206
+ (0, import_react.useEffect)(function () {
207
+ if (!syncRef.current) return;
208
+ var emit = getChannelEmit();
209
+ if (!emit) return;
210
+ try {
211
+ var state = syncRef.current.__debug();
212
+ var key = JSON.stringify(state);
213
+ if (key === prevRef.current) return;
214
+ prevRef.current = key;
215
+ emit(frappeDebugChannelEvent, state);
216
+ } catch (unused) {}
217
+ },
218
+ // debug not available
219
+ [tick]);
220
+ return null;
221
+ }
222
+ function ThemeColorEmitter() {
223
+ var tamaguiTheme = (0, import_tamagui.useTheme)();
224
+ var prevRef = (0, import_react.useRef)("");
225
+ (0, import_react.useEffect)(function () {
226
+ var _getChannelEmit;
227
+ var colors = [];
228
+ for (var i = 1; i <= 12; i++) {
229
+ var _ref;
230
+ var token = tamaguiTheme[`color${i}`];
231
+ colors.push((_ref = token === null || token === void 0 ? void 0 : token.val) !== null && _ref !== void 0 ? _ref : "");
232
+ }
233
+ var key = colors.join("|");
234
+ if (key === prevRef.current) return;
235
+ prevRef.current = key;
236
+ (_getChannelEmit = getChannelEmit()) === null || _getChannelEmit === void 0 ? void 0 : _getChannelEmit(themeColorsChannelEvent, colors);
237
+ }, [tamaguiTheme]);
238
+ return null;
239
+ }
240
+ function BaseThemeColorEmitter() {
241
+ var tamaguiTheme = (0, import_tamagui.useTheme)();
242
+ var prevRef = (0, import_react.useRef)("");
243
+ (0, import_react.useEffect)(function () {
244
+ var _getChannelEmit;
245
+ var colors = [];
246
+ for (var i = 1; i <= 12; i++) {
247
+ var _ref;
248
+ var token = tamaguiTheme[`color${i}`];
249
+ colors.push((_ref = token === null || token === void 0 ? void 0 : token.val) !== null && _ref !== void 0 ? _ref : "");
250
+ }
251
+ var key = colors.join("|");
252
+ if (key === prevRef.current) return;
253
+ prevRef.current = key;
254
+ (_getChannelEmit = getChannelEmit()) === null || _getChannelEmit === void 0 ? void 0 : _getChannelEmit(baseThemeColorsChannelEvent, colors);
255
+ }, [tamaguiTheme]);
256
+ return null;
257
+ }
258
+ function OppositeThemeColorEmitter() {
259
+ var tamaguiTheme = (0, import_tamagui.useTheme)();
260
+ var prevRef = (0, import_react.useRef)("");
261
+ (0, import_react.useEffect)(function () {
262
+ var _getChannelEmit;
263
+ var colors = [];
264
+ for (var i = 1; i <= 12; i++) {
265
+ var _ref;
266
+ var token = tamaguiTheme[`color${i}`];
267
+ colors.push((_ref = token === null || token === void 0 ? void 0 : token.val) !== null && _ref !== void 0 ? _ref : "");
268
+ }
269
+ var key = colors.join("|");
270
+ if (key === prevRef.current) return;
271
+ prevRef.current = key;
272
+ (_getChannelEmit = getChannelEmit()) === null || _getChannelEmit === void 0 ? void 0 : _getChannelEmit(themeColorsOppositeChannelEvent, colors);
273
+ }, [tamaguiTheme]);
274
+ return null;
275
+ }
276
+ function ColorChannelEmitter(param) {
277
+ var {
278
+ event,
279
+ prefix = "color"
280
+ } = param;
281
+ var tamaguiTheme = (0, import_tamagui.useTheme)();
282
+ var prevRef = (0, import_react.useRef)("");
283
+ (0, import_react.useEffect)(function () {
284
+ var _getChannelEmit;
285
+ var colors = [];
286
+ var found = false;
287
+ for (var i = 1; i <= 12; i++) {
288
+ var _ref;
289
+ var token = tamaguiTheme[`${prefix}${i}`];
290
+ var val = (_ref = token === null || token === void 0 ? void 0 : token.val) !== null && _ref !== void 0 ? _ref : "";
291
+ colors.push(val);
292
+ if (val) found = true;
293
+ }
294
+ if (!found) return;
295
+ var key = colors.join("|");
296
+ if (key === prevRef.current) return;
297
+ prevRef.current = key;
298
+ (_getChannelEmit = getChannelEmit()) === null || _getChannelEmit === void 0 ? void 0 : _getChannelEmit(event, colors);
299
+ }, [tamaguiTheme, event, prefix]);
300
+ return null;
301
+ }
302
+ var tamaguiPropLeakPatterns = ["pressTheme", "scaleIcon", "borderTopRightRadius", "borderBottomRightRadius", "borderTopLeftRadius", "borderBottomLeftRadius"];
303
+ function suppressTamaguiDomWarnings() {
304
+ if (typeof window === "undefined") return;
305
+ var origError = console.error;
306
+ console.error = function () {
307
+ for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
308
+ args[_key] = arguments[_key];
309
+ }
310
+ var msg = args.map(function (a) {
311
+ return typeof a === "string" ? a : "";
312
+ }).join(" ");
313
+ if (msg.includes("React does not recognize the") && tamaguiPropLeakPatterns.some(function (p) {
314
+ return msg.includes(p);
315
+ })) {
316
+ return;
317
+ }
318
+ origError(...args);
319
+ };
320
+ }
321
+ suppressTamaguiDomWarnings();
322
+ function createPreview(options) {
323
+ var _themeConfig_defaultPreset;
324
+ var {
325
+ themeConfig,
326
+ i18n,
327
+ AppProvider,
328
+ decorators: extraDecorators = [],
329
+ parameters: extraParameters = {},
330
+ globalTypes: extraGlobalTypes = {}
331
+ } = options;
332
+ var enumKeys = Object.keys(knobOptions);
333
+ var generatedGlobalTypes = {};
334
+ var _iteratorNormalCompletion = true,
335
+ _didIteratorError = false,
336
+ _iteratorError = void 0;
337
+ try {
338
+ for (var _iterator = enumKeys[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
339
+ var key = _step.value;
340
+ generatedGlobalTypes[key] = createControl(key);
341
+ }
342
+ } catch (err) {
343
+ _didIteratorError = true;
344
+ _iteratorError = err;
345
+ } finally {
346
+ try {
347
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
348
+ _iterator.return();
349
+ }
350
+ } finally {
351
+ if (_didIteratorError) {
352
+ throw _iteratorError;
353
+ }
354
+ }
355
+ }
356
+ for (var _i = 0, _iter = ["hover", "press", "focus", "focusVisible"]; _i < _iter.length; _i++) {
357
+ var state = _iter[_i];
358
+ var _iteratorNormalCompletion1 = true,
359
+ _didIteratorError1 = false,
360
+ _iteratorError1 = void 0;
361
+ try {
362
+ for (var _iterator1 = stateKnobFields[Symbol.iterator](), _step1; !(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done); _iteratorNormalCompletion1 = true) {
363
+ var field = _step1.value;
364
+ var _knobOptions_field;
365
+ var stateKey = `${state}.${field}`;
366
+ var values = (_knobOptions_field = knobOptions[field]) !== null && _knobOptions_field !== void 0 ? _knobOptions_field : [];
367
+ var serialized = values.map(function (value) {
368
+ return value;
369
+ });
370
+ var labels = Object.fromEntries(serialized.map(function (v) {
371
+ return [v, v.replace("$", "")];
372
+ }));
373
+ generatedGlobalTypes[stateKey] = {
374
+ name: `${toTitleCase(state)} ${toTitleCase(field)}`,
375
+ description: `${state} override for ${field}`,
376
+ options: serialized,
377
+ control: {
378
+ type: "select",
379
+ labels
380
+ },
381
+ defaultValue: ""
382
+ };
383
+ }
384
+ } catch (err) {
385
+ _didIteratorError1 = true;
386
+ _iteratorError1 = err;
387
+ } finally {
388
+ try {
389
+ if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
390
+ _iterator1.return();
391
+ }
392
+ } finally {
393
+ if (_didIteratorError1) {
394
+ throw _iteratorError1;
395
+ }
396
+ }
397
+ }
398
+ }
399
+ var themeColorNames = ["", ...themeConfig.themeColors];
400
+ var themeSwatches = {};
401
+ var allThemes = themeConfig.tamagui.themes;
402
+ if (allThemes) {
403
+ var _iteratorNormalCompletion2 = true,
404
+ _didIteratorError2 = false,
405
+ _iteratorError2 = void 0;
406
+ try {
407
+ for (var _iterator2 = themeConfig.themeColors[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
408
+ var name = _step2.value;
409
+ var _allThemes_;
410
+ var theme = (_allThemes_ = allThemes[`light_${name}`]) !== null && _allThemes_ !== void 0 ? _allThemes_ : allThemes[name];
411
+ if (!theme) continue;
412
+ var token = theme.color7;
413
+ if (typeof token === "string") {
414
+ themeSwatches[name] = token;
415
+ } else if (token && (typeof token === "undefined" ? "undefined" : _type_of(token)) === "object" && "val" in token) {
416
+ themeSwatches[name] = String(token.val);
417
+ }
418
+ }
419
+ } catch (err) {
420
+ _didIteratorError2 = true;
421
+ _iteratorError2 = err;
422
+ } finally {
423
+ try {
424
+ if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
425
+ _iterator2.return();
426
+ }
427
+ } finally {
428
+ if (_didIteratorError2) {
429
+ throw _iteratorError2;
430
+ }
431
+ }
432
+ }
433
+ }
434
+ generatedGlobalTypes.color = {
435
+ name: "Theme",
436
+ description: "Theme color palette",
437
+ options: themeColorNames,
438
+ control: {
439
+ type: "select",
440
+ labels: Object.fromEntries(themeColorNames.map(function (v) {
441
+ return [v, v || "(none)"];
442
+ }))
443
+ }
444
+ };
445
+ generatedGlobalTypes.scheme = {
446
+ name: "Scheme",
447
+ description: "Color scheme (light/dark/system)",
448
+ options: ["system", "light", "dark"],
449
+ control: {
450
+ type: "select"
451
+ }
452
+ };
453
+ generatedGlobalTypes.locale = {
454
+ name: "Locale",
455
+ description: "Controls internationalization language",
456
+ options: [...i18n.languages],
457
+ control: {
458
+ type: "select"
459
+ },
460
+ toolbar: {
461
+ title: "Locale",
462
+ items: [...i18n.languages],
463
+ dynamicTitle: true
464
+ }
465
+ };
466
+ var globalTypes = {
467
+ ...generatedGlobalTypes,
468
+ ...extraGlobalTypes
469
+ };
470
+ var initialGlobals = {
471
+ locale: import_platform.config.get("I18N_DEFAULT_LANGUAGE", i18n.defaultLanguage),
472
+ color: "",
473
+ scheme: "system",
474
+ // Publish registered preset names so the manager-side ThemePanel can
475
+ // render a preset selector without importing the theme package.
476
+ __presetNames: (0, import_theme.getPresetNames)(),
477
+ // Publish available theme color names so the ThemePanel can show only
478
+ // colors that actually have registered Tamagui sub-themes.
479
+ __themeColors: themeColorNames,
480
+ __themeSwatches: themeSwatches,
481
+ preset: (_themeConfig_defaultPreset = themeConfig.defaultPreset) !== null && _themeConfig_defaultPreset !== void 0 ? _themeConfig_defaultPreset : ""
482
+ };
483
+ var _iteratorNormalCompletion3 = true,
484
+ _didIteratorError3 = false,
485
+ _iteratorError3 = void 0;
486
+ try {
487
+ for (var _iterator3 = enumKeys[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
488
+ var key1 = _step3.value;
489
+ if (!(key1 in initialGlobals)) {
490
+ initialGlobals[key1] = "";
491
+ }
492
+ }
493
+ } catch (err) {
494
+ _didIteratorError3 = true;
495
+ _iteratorError3 = err;
496
+ } finally {
497
+ try {
498
+ if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
499
+ _iterator3.return();
500
+ }
501
+ } finally {
502
+ if (_didIteratorError3) {
503
+ throw _iteratorError3;
504
+ }
505
+ }
506
+ }
507
+ for (var _i1 = 0, _iter1 = ["hover", "press", "focus", "focusVisible"]; _i1 < _iter1.length; _i1++) {
508
+ var state1 = _iter1[_i1];
509
+ var _iteratorNormalCompletion4 = true,
510
+ _didIteratorError4 = false,
511
+ _iteratorError4 = void 0;
512
+ try {
513
+ for (var _iterator4 = stateKnobFields[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
514
+ var field1 = _step4.value;
515
+ initialGlobals[`${state1}.${field1}`] = "";
516
+ }
517
+ } catch (err) {
518
+ _didIteratorError4 = true;
519
+ _iteratorError4 = err;
520
+ } finally {
521
+ try {
522
+ if (!_iteratorNormalCompletion4 && _iterator4.return != null) {
523
+ _iterator4.return();
524
+ }
525
+ } finally {
526
+ if (_didIteratorError4) {
527
+ throw _iteratorError4;
528
+ }
529
+ }
530
+ }
531
+ }
532
+ var defaultParameters = {
533
+ actions: {
534
+ argTypesRegex: "^on[A-Z].*"
535
+ },
536
+ layout: "padded",
537
+ viewMode: "story",
538
+ controls: {
539
+ expanded: true,
540
+ hideNoControlsWarning: true,
541
+ matchers: {
542
+ color: /(background|color)$/i,
543
+ date: /Date$/
544
+ }
545
+ },
546
+ // Disable the built-in backgrounds addon — the CanvasBackground component
547
+ // manages the preview background via the Tamagui $background token so it
548
+ // stays in sync with the active color scheme.
549
+ backgrounds: {
550
+ disable: true
551
+ },
552
+ previewTabs: {
553
+ "storybook/docs/panel": {
554
+ hidden: true
555
+ }
556
+ },
557
+ a11y: {
558
+ test: false
559
+ },
560
+ docs: {
561
+ codePanel: true
562
+ },
563
+ darkMode: {
564
+ stylePreview: true
565
+ }
566
+ };
567
+ function FrameworkDecoratorInner(param) {
568
+ var {
569
+ Story,
570
+ context
571
+ } = param;
572
+ var _context_parameters;
573
+ var [knobs, setKnobs] = (0, import_theme.useTheme)();
574
+ var schemeGlobal = context.globals.scheme || "system";
575
+ var [resolvedScheme, setResolvedScheme] = (0, import_react.useState)(function () {
576
+ if (schemeGlobal === "light" || schemeGlobal === "dark") return schemeGlobal;
577
+ if (typeof window !== "undefined" && window.matchMedia) {
578
+ return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
579
+ }
580
+ return "light";
581
+ });
582
+ (0, import_react.useEffect)(function () {
583
+ if (schemeGlobal === "light" || schemeGlobal === "dark") {
584
+ setResolvedScheme(schemeGlobal);
585
+ return;
586
+ }
587
+ if (typeof window === "undefined" || !window.matchMedia) {
588
+ setResolvedScheme("light");
589
+ return;
590
+ }
591
+ var mq = window.matchMedia("(prefers-color-scheme: dark)");
592
+ var handler = function handler2() {
593
+ return setResolvedScheme(mq.matches ? "dark" : "light");
594
+ };
595
+ handler();
596
+ mq.addEventListener("change", handler);
597
+ return function () {
598
+ return mq.removeEventListener("change", handler);
599
+ };
600
+ }, [schemeGlobal]);
601
+ var colorGlobal = context.globals.color || "";
602
+ var storyThemeParams = (_context_parameters = context.parameters) === null || _context_parameters === void 0 ? void 0 : _context_parameters.theme;
603
+ var activePresetName = context.globals.preset;
604
+ var activePreset = activePresetName ? (0, import_theme.getPreset)(activePresetName) : void 0;
605
+ var knobUpdate = (0, import_react.useMemo)(function () {
606
+ var result = {};
607
+ var stateKeys = /* @__PURE__ */new Set(["hover", "press", "focus", "focusVisible"]);
608
+ var _iteratorNormalCompletion5 = true,
609
+ _didIteratorError5 = false,
610
+ _iteratorError5 = void 0;
611
+ try {
612
+ for (var _iterator5 = Object.keys(knobs)[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) {
613
+ var key2 = _step5.value;
614
+ if (stateKeys.has(key2)) continue;
615
+ if (storyThemeParams && key2 in storyThemeParams) {
616
+ result[key2] = storyThemeParams[key2];
617
+ } else if (key2 in context.globals && context.globals[key2] !== void 0 && context.globals[key2] !== "") {
618
+ result[key2] = parseValue(context.globals[key2]);
619
+ } else if (activePreset && key2 in activePreset.knobs) {
620
+ result[key2] = activePreset.knobs[key2];
621
+ } else {
622
+ result[key2] = import_theme.defaultKnobs[key2];
623
+ }
624
+ }
625
+ } catch (err) {
626
+ _didIteratorError5 = true;
627
+ _iteratorError5 = err;
628
+ } finally {
629
+ try {
630
+ if (!_iteratorNormalCompletion5 && _iterator5.return != null) {
631
+ _iterator5.return();
632
+ }
633
+ } finally {
634
+ if (_didIteratorError5) {
635
+ throw _iteratorError5;
636
+ }
637
+ }
638
+ }
639
+ var _iteratorNormalCompletion12 = true,
640
+ _didIteratorError12 = false,
641
+ _iteratorError12 = void 0;
642
+ try {
643
+ for (var _iterator12 = stateKeys[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) {
644
+ var state2 = _step12.value;
645
+ var stateObj = {};
646
+ var hasValues = false;
647
+ var _iteratorNormalCompletion22 = true,
648
+ _didIteratorError22 = false,
649
+ _iteratorError22 = void 0;
650
+ try {
651
+ for (var _iterator22 = stateKnobFields[Symbol.iterator](), _step22; !(_iteratorNormalCompletion22 = (_step22 = _iterator22.next()).done); _iteratorNormalCompletion22 = true) {
652
+ var field2 = _step22.value;
653
+ var globalKey = `${state2}.${field2}`;
654
+ var val = context.globals[globalKey];
655
+ if (val) {
656
+ stateObj[field2] = val;
657
+ hasValues = true;
658
+ }
659
+ }
660
+ } catch (err) {
661
+ _didIteratorError22 = true;
662
+ _iteratorError22 = err;
663
+ } finally {
664
+ try {
665
+ if (!_iteratorNormalCompletion22 && _iterator22.return != null) {
666
+ _iterator22.return();
667
+ }
668
+ } finally {
669
+ if (_didIteratorError22) {
670
+ throw _iteratorError22;
671
+ }
672
+ }
673
+ }
674
+ if (hasValues) {
675
+ result[state2] = stateObj;
676
+ }
677
+ }
678
+ } catch (err) {
679
+ _didIteratorError12 = true;
680
+ _iteratorError12 = err;
681
+ } finally {
682
+ try {
683
+ if (!_iteratorNormalCompletion12 && _iterator12.return != null) {
684
+ _iterator12.return();
685
+ }
686
+ } finally {
687
+ if (_didIteratorError12) {
688
+ throw _iteratorError12;
689
+ }
690
+ }
691
+ }
692
+ return result;
693
+ }, [knobs, context.globals, storyThemeParams, activePreset]);
694
+ (0, import_react.useEffect)(function () {
695
+ setKnobs(knobUpdate);
696
+ }, [knobUpdate, setKnobs]);
697
+ (0, import_react.useEffect)(function () {
698
+ i18n.instance.changeLanguage(context.globals.locale);
699
+ }, [context.globals.locale]);
700
+ var presetCtxValue = (0, import_react.useMemo)(function () {
701
+ return {
702
+ preset: {
703
+ ...import_theme.defaultPreset,
704
+ theme: colorGlobal || import_theme.defaultPreset.theme,
705
+ knobs: {
706
+ ...import_theme.defaultKnobs,
707
+ ...knobUpdate
708
+ }
709
+ },
710
+ overrides: void 0
711
+ };
712
+ }, [knobUpdate, colorGlobal]);
713
+ var animationValue = presetCtxValue.preset.knobs.animation;
714
+ (0, import_react.useEffect)(function () {
715
+ var ms = animationValue === "none" ? "0ms" : animationValue === "quick" ? "100ms" : animationValue === "medium" ? "200ms" : animationValue === "slow" || animationValue === "lazy" ? "350ms" : animationValue === "bouncy" ? "300ms" : "200ms";
716
+ document.documentElement.style.setProperty("--mp-transition", ms);
717
+ }, [animationValue]);
718
+ var storyContent = /* @__PURE__ */(0, import_jsx_runtime.jsx)(CanvasBackground, {
719
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(Story, {
720
+ ...context
721
+ })
722
+ });
723
+ var oppositeScheme = resolvedScheme === "dark" ? "light" : "dark";
724
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_theme.PresetContext.Provider, {
725
+ value: presetCtxValue,
726
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsxs)(AppProvider, {
727
+ themeConfig,
728
+ systemTheme: resolvedScheme,
729
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(AnimationNamesEmitter, {}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrappeDebugEmitter, {}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(BaseThemeColorEmitter, {}), colorGlobal ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.Theme, {
730
+ name: colorGlobal,
731
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(ThemeColorEmitter, {}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ColorChannelEmitter, {
732
+ event: accentColorsChannelEvent,
733
+ prefix: "accent"
734
+ }), storyContent]
735
+ }) : /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
736
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(ThemeColorEmitter, {}), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ColorChannelEmitter, {
737
+ event: accentColorsChannelEvent,
738
+ prefix: "accent"
739
+ }), storyContent]
740
+ }), /* Opposite scheme emitters */
741
+ /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.Theme, {
742
+ name: oppositeScheme,
743
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(OppositeThemeColorEmitter, {}), colorGlobal ? /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_tamagui.Theme, {
744
+ name: colorGlobal,
745
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(ColorChannelEmitter, {
746
+ event: baseOppositeChannelEvent
747
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ColorChannelEmitter, {
748
+ event: accentOppositeChannelEvent,
749
+ prefix: "accent"
750
+ })]
751
+ }) : /* @__PURE__ */(0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, {
752
+ children: [/* @__PURE__ */(0, import_jsx_runtime.jsx)(ColorChannelEmitter, {
753
+ event: baseOppositeChannelEvent
754
+ }), /* @__PURE__ */(0, import_jsx_runtime.jsx)(ColorChannelEmitter, {
755
+ event: accentOppositeChannelEvent,
756
+ prefix: "accent"
757
+ })]
758
+ })]
759
+ })]
760
+ })
761
+ });
762
+ }
763
+ var frameworkDecorator = function frameworkDecorator2(Story, context) {
764
+ return /* @__PURE__ */(0, import_jsx_runtime.jsx)(import_react_cookie.CookiesProvider, {
765
+ children: /* @__PURE__ */(0, import_jsx_runtime.jsx)(FrameworkDecoratorInner, {
766
+ Story,
767
+ context
768
+ })
769
+ });
770
+ };
771
+ return {
772
+ globalTypes,
773
+ initialGlobals,
774
+ parameters: {
775
+ ...defaultParameters,
776
+ ...extraParameters
777
+ },
778
+ decorators: [frameworkDecorator, ...extraDecorators]
779
+ };
780
+ }
781
+ //# sourceMappingURL=CreatePreview.native.js.map