zova-module-a-style 5.1.33 → 5.1.35
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/dist/bean/bean.theme.d.ts +2 -0
- package/dist/bean/bean.theme.d.ts.map +1 -1
- package/dist/index.js +17 -3
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/.metadata/index.ts +9 -9
- package/src/bean/bean.theme.ts +22 -3
|
@@ -8,6 +8,7 @@ export declare class BeanTheme extends BeanModelBase {
|
|
|
8
8
|
private _dark;
|
|
9
9
|
get dark(): boolean;
|
|
10
10
|
token: unknown;
|
|
11
|
+
private _cookieTheme;
|
|
11
12
|
private _mediaDark?;
|
|
12
13
|
private _onMediaDarkChange?;
|
|
13
14
|
$$scopeSsr: ScopeModuleASsr;
|
|
@@ -17,6 +18,7 @@ export declare class BeanTheme extends BeanModelBase {
|
|
|
17
18
|
_applyInitialThemeAndSsrDualOutput(): Promise<void>;
|
|
18
19
|
_applyTheme(): Promise<void>;
|
|
19
20
|
_loadThemeBean(name: keyof IThemeRecord): Promise<IThemeBase | undefined>;
|
|
21
|
+
private _syncDarkModePersistence;
|
|
20
22
|
toggleDark(): void;
|
|
21
23
|
_getDarkFromDarkMode(mode?: ThemeDarkMode): boolean;
|
|
22
24
|
_listenMediaDarkChange(listen: boolean): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bean.theme.d.ts","sourceRoot":"","sources":["../../src/bean/bean.theme.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7C,qBACa,SAAU,SAAQ,aAAa;IAC1C,IAAI,EAAE,MAAM,YAAY,CAAC;IACzB,QAAQ,EAAE,aAAa,CAAC;IAExB,OAAO,CAAC,KAAK,CAAU;IACvB,IAAI,IAAI,YAEP;IAED,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAG5B,UAAU,EAAE,eAAe,CAAC;cAEZ,QAAQ;
|
|
1
|
+
{"version":3,"file":"bean.theme.d.ts","sourceRoot":"","sources":["../../src/bean/bean.theme.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,UAAU,EAAiB,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7C,qBACa,SAAU,SAAQ,aAAa;IAC1C,IAAI,EAAE,MAAM,YAAY,CAAC;IACzB,QAAQ,EAAE,aAAa,CAAC;IAExB,OAAO,CAAC,KAAK,CAAU;IACvB,IAAI,IAAI,YAEP;IAED,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,YAAY,CAAU;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAiB;IACpC,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAG5B,UAAU,EAAE,eAAe,CAAC;cAEZ,QAAQ;IAmDxB,SAAS,CAAC,WAAW;IAIrB,OAAO,CAAC,WAAW;IAKb,kCAAkC;IAWlC,WAAW;IAqBX,cAAc,CAAC,IAAI,EAAE,MAAM,YAAY,GAAG,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;IAU/E,OAAO,CAAC,wBAAwB;IAWhC,UAAU;IAKV,oBAAoB,CAAC,IAAI,CAAC,EAAE,aAAa;IAWzC,sBAAsB,CAAC,MAAM,EAAE,OAAO;CAmBvC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { BeanBase, BeanInfo, BeanScopeBase, BeanSimple, SymbolBeanFullName, UseScope, beanFullNameFromOnionName, cast, createBeanDecorator, deepExtend, useComputed } from "zova";
|
|
1
|
+
import { BeanBase, BeanInfo, BeanScopeBase, BeanSimple, SymbolBeanFullName, UseScope, beanFullNameFromOnionName, cast, createBeanDecorator, deepExtend, ssr_load_local, useComputed } from "zova";
|
|
2
2
|
import { Bean, Scope } from "zova-module-a-bean";
|
|
3
3
|
import { BeanModelBase } from "zova-module-a-model";
|
|
4
4
|
import { classes, createTypeStyle, cssRaw, cssRule, style } from "typestyle";
|
|
@@ -27,6 +27,7 @@ var BeanTheme = (_dec$1 = Bean(), _dec2$1 = BeanInfo({ module: "a-style" }), _de
|
|
|
27
27
|
this.darkMode = void 0;
|
|
28
28
|
this._dark = void 0;
|
|
29
29
|
this.token = void 0;
|
|
30
|
+
this._cookieTheme = void 0;
|
|
30
31
|
this._mediaDark = void 0;
|
|
31
32
|
this._onMediaDarkChange = void 0;
|
|
32
33
|
_initializerDefineProperty(this, "$$scopeSsr", _descriptor, this);
|
|
@@ -35,8 +36,9 @@ var BeanTheme = (_dec$1 = Bean(), _dec2$1 = BeanInfo({ module: "a-style" }), _de
|
|
|
35
36
|
return this._dark;
|
|
36
37
|
}
|
|
37
38
|
async __init__() {
|
|
38
|
-
const cookieTheme = this.$ssr.profileOptions.useCookie;
|
|
39
|
+
const cookieTheme = this._cookieTheme = this.$ssr.profileOptions.useCookie;
|
|
39
40
|
const cookieThemeDarkDefault = this.$$scopeSsr.config.cookieThemeDarkDefault;
|
|
41
|
+
const darkModeDefault = cookieTheme ? cookieThemeDarkDefault : process.env.CLIENT ? ssr_load_local("themedark") ?? "auto" : "auto";
|
|
40
42
|
this.name = this.$useState(cookieTheme ? "cookie" : "local", {
|
|
41
43
|
queryKey: ["themename"],
|
|
42
44
|
meta: {
|
|
@@ -54,7 +56,7 @@ var BeanTheme = (_dec$1 = Bean(), _dec2$1 = BeanInfo({ module: "a-style" }), _de
|
|
|
54
56
|
return deserializeDefault(value);
|
|
55
57
|
}
|
|
56
58
|
},
|
|
57
|
-
defaultData:
|
|
59
|
+
defaultData: darkModeDefault
|
|
58
60
|
}
|
|
59
61
|
});
|
|
60
62
|
this._updateDark();
|
|
@@ -65,12 +67,14 @@ var BeanTheme = (_dec$1 = Bean(), _dec2$1 = BeanInfo({ module: "a-style" }), _de
|
|
|
65
67
|
this._applyTheme();
|
|
66
68
|
});
|
|
67
69
|
await this._applyInitialThemeAndSsrDualOutput();
|
|
70
|
+
this._syncDarkModePersistence();
|
|
68
71
|
}
|
|
69
72
|
__dispose__() {
|
|
70
73
|
this._listenMediaDarkChange(false);
|
|
71
74
|
}
|
|
72
75
|
_updateDark() {
|
|
73
76
|
this._dark = this._getDarkFromDarkMode(this.darkMode);
|
|
77
|
+
this._syncDarkModePersistence();
|
|
74
78
|
}
|
|
75
79
|
async _applyInitialThemeAndSsrDualOutput() {
|
|
76
80
|
await this._applyTheme();
|
|
@@ -107,6 +111,16 @@ var BeanTheme = (_dec$1 = Bean(), _dec2$1 = BeanInfo({ module: "a-style" }), _de
|
|
|
107
111
|
if (!this.app.meta.module.exists(moduleName)) return;
|
|
108
112
|
return await this.bean._getBean(beanFullNameFromOnionName(name, "theme"), true);
|
|
109
113
|
}
|
|
114
|
+
_syncDarkModePersistence() {
|
|
115
|
+
if (!process.env.CLIENT || this._dark === void 0) return;
|
|
116
|
+
const queryKey = ["themedark"];
|
|
117
|
+
const target = this._cookieTheme ? "local" : "cookie";
|
|
118
|
+
try {
|
|
119
|
+
this.$persisterSaveTo(queryKey, target, this._dark);
|
|
120
|
+
} catch (err) {
|
|
121
|
+
if (process.env.DEV) console.warn("Failed to mirror themedark persistence", err);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
110
124
|
toggleDark() {
|
|
111
125
|
this.darkMode = !this._dark;
|
|
112
126
|
this._updateDark();
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../src/bean/bean.theme.ts","../src/config/config.ts","../src/.metadata/this.ts","../src/monkey.ts","../src/.metadata/index.ts","../src/lib/style.ts","../src/lib/theme.ts","../src/lib/themeBase.ts"],"sourcesContent":["var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { \"BeanInfo\" as __z_BeanInfo } from \"zova\";\nimport { beanFullNameFromOnionName, cast, UseScope } from 'zova';\nimport { Bean } from 'zova-module-a-bean';\nimport { BeanModelBase } from 'zova-module-a-model';\nexport let BeanTheme = (_dec = Bean(), _dec2 = __z_BeanInfo({\n module: \"a-style\"\n}), _dec3 = UseScope(\"a-ssr\"), _dec4 = Reflect.metadata(\"design:type\", typeof ScopeModuleASsr === \"undefined\" ? Object : ScopeModuleASsr), _dec(_class = _dec2(_class = (_class2 = class BeanTheme extends BeanModelBase {\n constructor(...args) {\n super(...args);\n this.name = void 0;\n this.darkMode = void 0;\n // auto/true/false\n this._dark = void 0;\n this.token = void 0;\n this._mediaDark = void 0;\n this._onMediaDarkChange = void 0;\n _initializerDefineProperty(this, \"$$scopeSsr\", _descriptor, this);\n }\n get dark() {\n return this._dark;\n }\n async __init__() {\n const cookieTheme = this.$ssr.profileOptions.useCookie;\n const cookieThemeDarkDefault = this.$$scopeSsr.config.cookieThemeDarkDefault;\n // support admin\n this.name = this.$useState(cookieTheme ? 'cookie' : 'local', {\n queryKey: ['themename'],\n meta: {\n persister: {\n maxAge: this.scope.config.model.themename.persister.maxAge\n },\n defaultData: this.scope.config.defaultTheme\n }\n });\n this.darkMode = this.$useState(cookieTheme ? 'cookie' : 'local', {\n queryKey: ['themedark'],\n meta: {\n persister: {\n maxAge: this.scope.config.model.themename.persister.maxAge,\n deserialize: (value, deserializeDefault) => {\n if (cookieTheme && value === 'auto') value = cookieThemeDarkDefault;\n return deserializeDefault(value);\n }\n },\n defaultData: cookieTheme ? cookieThemeDarkDefault : 'auto'\n }\n });\n this._updateDark();\n this.$watch(() => this.darkMode, () => {\n this._updateDark();\n });\n if (process.env.CLIENT) {\n this.$watch([() => this.name, () => this._dark], () => {\n this._applyTheme();\n });\n }\n\n // not use watch.immediate for await done\n await this._applyInitialThemeAndSsrDualOutput();\n }\n __dispose__() {\n this._listenMediaDarkChange(false);\n }\n _updateDark() {\n this._dark = this._getDarkFromDarkMode(this.darkMode);\n }\n async _applyInitialThemeAndSsrDualOutput() {\n // When server-side theme cookies are disabled, apply twice during SSR initialization so the\n // server emits both data-ssr-theme-dark-false/true markers and the browser can resolve the\n // final data-theme during bootstrap.\n await this._applyTheme();\n if (this.$ssr.cookieDisabledOnServer) {\n this.toggleDark();\n await this._applyTheme();\n }\n }\n async _applyTheme() {\n const name = this.name;\n const dark = this._dark;\n const theme = await this._loadThemeBean(name);\n if (!theme) {\n this.name = this.scope.config.defaultTheme;\n await this._applyTheme();\n return;\n }\n const res = await theme.apply({\n name,\n dark\n });\n this.token = cast(res).token;\n const handler = res.handler ?? this.scope.config.defaultThemeHandler;\n if (handler) {\n const themeHandler = await this.bean._getBean(beanFullNameFromOnionName(handler, 'meta'), true);\n await themeHandler.apply({\n name,\n dark,\n token: this.token\n });\n }\n }\n async _loadThemeBean(name) {\n const parts = name.split(':');\n if (parts.length === 1) {\n throw new Error(`invalid theme name: ${name}`);\n }\n const moduleName = parts[0];\n if (!this.app.meta.module.exists(moduleName)) return;\n return await this.bean._getBean(beanFullNameFromOnionName(name, 'theme'), true);\n }\n toggleDark() {\n this.darkMode = !this._dark;\n this._updateDark(); // immediate\n }\n _getDarkFromDarkMode(mode) {\n if (mode === undefined) mode = 'auto';\n if (mode === 'auto') {\n this._listenMediaDarkChange(true);\n return !!this._mediaDark?.matches;\n } else {\n this._listenMediaDarkChange(false);\n return mode;\n }\n }\n _listenMediaDarkChange(listen) {\n if (process.env.SERVER) return;\n if (listen) {\n if (!this._mediaDark) {\n this._mediaDark = window.matchMedia('(prefers-color-scheme: dark)');\n this._onMediaDarkChange = async () => {\n this._updateDark();\n this._applyTheme();\n };\n this._mediaDark.addEventListener('change', this._onMediaDarkChange);\n }\n } else {\n if (this._mediaDark) {\n this._mediaDark.removeEventListener('change', this._onMediaDarkChange);\n this._onMediaDarkChange = undefined;\n this._mediaDark = undefined;\n }\n }\n }\n}, _descriptor = _applyDecoratedDescriptor(_class2.prototype, \"$$scopeSsr\", [_dec3, _dec4], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class2)) || _class) || _class);","export const config = _sys => {\n return {\n defaultCss: 'home-theme:base',\n defaultTheme: 'home-theme:default',\n defaultThemeHandler: '',\n model: {\n themename: {\n persister: {\n maxAge: Infinity\n }\n }\n }\n };\n};","export const __ThisModule__ = 'a-style';\nexport { ScopeModuleAStyle as ScopeModule } from './index.js';","import { classes, createTypeStyle, cssRaw, cssRule, style } from 'typestyle';\nimport { beanFullNameFromOnionName, BeanSimple, SymbolBeanFullName, useComputed } from 'zova';\nimport { __ThisModule__ } from './.metadata/this.js';\nimport { BeanTheme } from './bean/bean.theme.js';\nexport class Monkey extends BeanSimple {\n constructor(...args) {\n super(...args);\n this._beanTheme = void 0;\n this._beanCssBase = void 0;\n this._styleInstance = void 0;\n }\n async appInitialize() {\n if (process.env.SERVER) {\n this._styleInstance = createTypeStyle();\n this.ctx.meta.$ssr.context.onRendered(err => {\n if (err) return;\n const styles = this._styleInstance.getStyles();\n this.ctx.meta.$ssr.context._meta.endingHeadTags += `<style id=\"styles-target\">${styles}</style>`;\n });\n }\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration) {\n this._styleInstance = createTypeStyle();\n this.ctx.meta.$ssr.onHydrated(() => {\n this._styleInstance.setStylesTarget(document.getElementById('styles-target'));\n });\n }\n }\n async appInitialized() {\n // theme\n this._beanTheme = await this.bean._getBean(BeanTheme, true);\n // css base\n const scope = await this.bean.getScope(__ThisModule__);\n this._beanCssBase = await this.bean._getBean(beanFullNameFromOnionName(scope.config.defaultCss, 'css'), true);\n }\n async beanInit(bean, beanInstance) {\n // eslint-disable-next-line\n const self = this;\n bean.defineProperty(beanInstance, '$style', {\n enumerable: false,\n configurable: true,\n get() {\n return function (props, ...args) {\n return self._patchStyle(beanInstance, props, ...args);\n };\n }\n });\n bean.defineProperty(beanInstance, '$cssRule', {\n enumerable: false,\n configurable: true,\n get() {\n return function (selector, ...objects) {\n return self._patchCssRule(beanInstance, selector, ...objects);\n };\n }\n });\n bean.defineProperty(beanInstance, '$cssRaw', {\n enumerable: false,\n configurable: true,\n get() {\n return function (mustBeValidCSS) {\n return self._patchCssRaw(beanInstance, mustBeValidCSS);\n };\n }\n });\n bean.defineProperty(beanInstance, '$cssBase', {\n enumerable: false,\n configurable: true,\n get() {\n return self._beanCssBase;\n }\n });\n bean.defineProperty(beanInstance, '$cssMerge', {\n enumerable: false,\n configurable: true,\n get() {\n return function (...args) {\n return self._patchCssMerge(beanInstance, ...args);\n };\n }\n });\n bean.defineProperty(beanInstance, '$theme', {\n enumerable: false,\n configurable: true,\n get() {\n return self._beanTheme;\n }\n });\n bean.defineProperty(beanInstance, '$token', {\n enumerable: false,\n configurable: true,\n get() {\n return useComputed(() => self._beanTheme.token);\n }\n });\n }\n _patchStyle(beanInstance, props, ...args) {\n // undefined/null/false\n if (!props) return undefined;\n if (this.sys.env.META_MODE === 'development') {\n if (props && typeof props === 'object') {\n props = Object.assign({\n $debugName: beanInstance[SymbolBeanFullName].replaceAll('.', '_')\n }, props);\n }\n }\n if (this._styleInstance) {\n return this._styleInstance.style(props, ...args);\n } else {\n return style(props, ...args);\n }\n }\n _patchCssRule(_beanInstance, selector, ...objects) {\n if (this._styleInstance) {\n return this._styleInstance.cssRule(selector, ...objects);\n } else {\n return cssRule(selector, ...objects);\n }\n }\n _patchCssRaw(_beanInstance, mustBeValidCSS) {\n if (this._styleInstance) {\n return this._styleInstance.cssRaw(mustBeValidCSS);\n } else {\n return cssRaw(mustBeValidCSS);\n }\n }\n _patchCssMerge(beanInstance, ...args) {\n const args2 = args.map(item => {\n if (Array.isArray(item)) {\n return this._patchCssMerge(beanInstance, ...item);\n } else if (typeof item === 'string' && item.startsWith('cssBase:')) {\n const varName = item.substring('cssBase:'.length);\n return beanInstance.$cssBase[varName];\n }\n return item;\n });\n return classes(...args2);\n }\n}","var _dec, _dec2, _class;\nimport { \"BeanInfo\" as __z_BeanInfo } from \"zova\";\n// eslint-disable\n/** bean: begin */\nexport * from '../bean/bean.theme.js';\nimport 'zova';\n/** bean: end */\n/** bean: begin */\nimport { BeanTheme } from '../bean/bean.theme.js';\nimport 'zova';\n/** bean: end */\n/** config: begin */\nexport * from '../config/config.js';\n/** config: end */\n/** monkey: begin */\nexport * from '../monkey.js';\n/** monkey: end */\n/** scope: begin */\nimport { BeanScopeBase } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\nexport let ScopeModuleAStyle = (_dec = Scope(), _dec2 = __z_BeanInfo({\n module: \"a-style\"\n}), _dec(_class = _dec2(_class = class ScopeModuleAStyle extends BeanScopeBase {}) || _class) || _class);\nimport 'zova';\n\n/** scope: end */","import { createBeanDecorator } from 'zova';\nexport function Css(options) {\n return createBeanDecorator('css', 'app', true, options);\n}\nexport function Theme(options) {\n return createBeanDecorator('theme', 'app', true, options);\n}","export function $getThemeName(themeName) {\n return themeName;\n}","import { BeanBase, deepExtend } from 'zova';\nexport class BeanThemeBase extends BeanBase {\n getOptionsToken(params) {\n const options = this.$onionOptions;\n return options.token?.(params);\n }\n mergeOptionsToken(params, token) {\n const optionsToken = this.getOptionsToken(params);\n if (optionsToken) {\n token = deepExtend(token, optionsToken);\n }\n return token;\n }\n}"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../src/bean/bean.theme.ts","../src/config/config.ts","../src/.metadata/this.ts","../src/monkey.ts","../src/.metadata/index.ts","../src/lib/style.ts","../src/lib/theme.ts","../src/lib/themeBase.ts"],"sourcesContent":["var _dec, _dec2, _dec3, _dec4, _class, _class2, _descriptor;\nfunction _initializerDefineProperty(e, i, r, l) { r && Object.defineProperty(e, i, { enumerable: r.enumerable, configurable: r.configurable, writable: r.writable, value: r.initializer ? r.initializer.call(l) : void 0 }); }\nfunction _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, (\"value\" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }\nfunction _initializerWarningHelper(r, e) { throw Error(\"Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform.\"); }\nimport { \"BeanInfo\" as __z_BeanInfo } from \"zova\";\nimport { beanFullNameFromOnionName, cast, ssr_load_local, UseScope } from 'zova';\nimport { Bean } from 'zova-module-a-bean';\nimport { BeanModelBase } from 'zova-module-a-model';\nexport let BeanTheme = (_dec = Bean(), _dec2 = __z_BeanInfo({\n module: \"a-style\"\n}), _dec3 = UseScope(\"a-ssr\"), _dec4 = Reflect.metadata(\"design:type\", typeof ScopeModuleASsr === \"undefined\" ? Object : ScopeModuleASsr), _dec(_class = _dec2(_class = (_class2 = class BeanTheme extends BeanModelBase {\n constructor(...args) {\n super(...args);\n this.name = void 0;\n this.darkMode = void 0;\n // auto/true/false\n this._dark = void 0;\n this.token = void 0;\n this._cookieTheme = void 0;\n this._mediaDark = void 0;\n this._onMediaDarkChange = void 0;\n _initializerDefineProperty(this, \"$$scopeSsr\", _descriptor, this);\n }\n get dark() {\n return this._dark;\n }\n async __init__() {\n const cookieTheme = this._cookieTheme = this.$ssr.profileOptions.useCookie;\n const cookieThemeDarkDefault = this.$$scopeSsr.config.cookieThemeDarkDefault;\n const darkModeDefault = cookieTheme ? cookieThemeDarkDefault : process.env.CLIENT ? ssr_load_local('themedark') ?? 'auto' : 'auto';\n // support admin\n this.name = this.$useState(cookieTheme ? 'cookie' : 'local', {\n queryKey: ['themename'],\n meta: {\n persister: {\n maxAge: this.scope.config.model.themename.persister.maxAge\n },\n defaultData: this.scope.config.defaultTheme\n }\n });\n this.darkMode = this.$useState(cookieTheme ? 'cookie' : 'local', {\n queryKey: ['themedark'],\n meta: {\n persister: {\n maxAge: this.scope.config.model.themename.persister.maxAge,\n deserialize: (value, deserializeDefault) => {\n if (cookieTheme && value === 'auto') value = cookieThemeDarkDefault;\n return deserializeDefault(value);\n }\n },\n defaultData: darkModeDefault\n }\n });\n this._updateDark();\n this.$watch(() => this.darkMode, () => {\n this._updateDark();\n });\n if (process.env.CLIENT) {\n this.$watch([() => this.name, () => this._dark], () => {\n this._applyTheme();\n });\n }\n\n // not use watch.immediate for await done\n await this._applyInitialThemeAndSsrDualOutput();\n this._syncDarkModePersistence();\n }\n __dispose__() {\n this._listenMediaDarkChange(false);\n }\n _updateDark() {\n this._dark = this._getDarkFromDarkMode(this.darkMode);\n this._syncDarkModePersistence();\n }\n async _applyInitialThemeAndSsrDualOutput() {\n // When server-side theme cookies are disabled, apply twice during SSR initialization so the\n // server emits both data-ssr-theme-dark-false/true markers and the browser can resolve the\n // final data-theme during bootstrap.\n await this._applyTheme();\n if (this.$ssr.cookieDisabledOnServer) {\n this.toggleDark();\n await this._applyTheme();\n }\n }\n async _applyTheme() {\n const name = this.name;\n const dark = this._dark;\n const theme = await this._loadThemeBean(name);\n if (!theme) {\n this.name = this.scope.config.defaultTheme;\n await this._applyTheme();\n return;\n }\n const res = await theme.apply({\n name,\n dark\n });\n this.token = cast(res).token;\n const handler = res.handler ?? this.scope.config.defaultThemeHandler;\n if (handler) {\n const themeHandler = await this.bean._getBean(beanFullNameFromOnionName(handler, 'meta'), true);\n await themeHandler.apply({\n name,\n dark,\n token: this.token\n });\n }\n }\n async _loadThemeBean(name) {\n const parts = name.split(':');\n if (parts.length === 1) {\n throw new Error(`invalid theme name: ${name}`);\n }\n const moduleName = parts[0];\n if (!this.app.meta.module.exists(moduleName)) return;\n return await this.bean._getBean(beanFullNameFromOnionName(name, 'theme'), true);\n }\n _syncDarkModePersistence() {\n if (!process.env.CLIENT || this._dark === undefined) return;\n const queryKey = ['themedark'];\n const target = this._cookieTheme ? 'local' : 'cookie';\n try {\n this.$persisterSaveTo(queryKey, target, this._dark);\n } catch (err) {\n if (process.env.DEV) console.warn('Failed to mirror themedark persistence', err);\n }\n }\n toggleDark() {\n this.darkMode = !this._dark;\n this._updateDark(); // immediate\n }\n _getDarkFromDarkMode(mode) {\n if (mode === undefined) mode = 'auto';\n if (mode === 'auto') {\n this._listenMediaDarkChange(true);\n return !!this._mediaDark?.matches;\n } else {\n this._listenMediaDarkChange(false);\n return mode;\n }\n }\n _listenMediaDarkChange(listen) {\n if (process.env.SERVER) return;\n if (listen) {\n if (!this._mediaDark) {\n this._mediaDark = window.matchMedia('(prefers-color-scheme: dark)');\n this._onMediaDarkChange = async () => {\n this._updateDark();\n this._applyTheme();\n };\n this._mediaDark.addEventListener('change', this._onMediaDarkChange);\n }\n } else {\n if (this._mediaDark) {\n this._mediaDark.removeEventListener('change', this._onMediaDarkChange);\n this._onMediaDarkChange = undefined;\n this._mediaDark = undefined;\n }\n }\n }\n}, _descriptor = _applyDecoratedDescriptor(_class2.prototype, \"$$scopeSsr\", [_dec3, _dec4], {\n configurable: true,\n enumerable: true,\n writable: true,\n initializer: null\n}), _class2)) || _class) || _class);","export const config = _sys => {\n return {\n defaultCss: 'home-theme:base',\n defaultTheme: 'home-theme:default',\n defaultThemeHandler: '',\n model: {\n themename: {\n persister: {\n maxAge: Infinity\n }\n }\n }\n };\n};","export const __ThisModule__ = 'a-style';\nexport { ScopeModuleAStyle as ScopeModule } from './index.js';","import { classes, createTypeStyle, cssRaw, cssRule, style } from 'typestyle';\nimport { beanFullNameFromOnionName, BeanSimple, SymbolBeanFullName, useComputed } from 'zova';\nimport { __ThisModule__ } from './.metadata/this.js';\nimport { BeanTheme } from './bean/bean.theme.js';\nexport class Monkey extends BeanSimple {\n constructor(...args) {\n super(...args);\n this._beanTheme = void 0;\n this._beanCssBase = void 0;\n this._styleInstance = void 0;\n }\n async appInitialize() {\n if (process.env.SERVER) {\n this._styleInstance = createTypeStyle();\n this.ctx.meta.$ssr.context.onRendered(err => {\n if (err) return;\n const styles = this._styleInstance.getStyles();\n this.ctx.meta.$ssr.context._meta.endingHeadTags += `<style id=\"styles-target\">${styles}</style>`;\n });\n }\n if (process.env.CLIENT && this.ctx.meta.$ssr.isRuntimeSsrPreHydration) {\n this._styleInstance = createTypeStyle();\n this.ctx.meta.$ssr.onHydrated(() => {\n this._styleInstance.setStylesTarget(document.getElementById('styles-target'));\n });\n }\n }\n async appInitialized() {\n // theme\n this._beanTheme = await this.bean._getBean(BeanTheme, true);\n // css base\n const scope = await this.bean.getScope(__ThisModule__);\n this._beanCssBase = await this.bean._getBean(beanFullNameFromOnionName(scope.config.defaultCss, 'css'), true);\n }\n async beanInit(bean, beanInstance) {\n // eslint-disable-next-line\n const self = this;\n bean.defineProperty(beanInstance, '$style', {\n enumerable: false,\n configurable: true,\n get() {\n return function (props, ...args) {\n return self._patchStyle(beanInstance, props, ...args);\n };\n }\n });\n bean.defineProperty(beanInstance, '$cssRule', {\n enumerable: false,\n configurable: true,\n get() {\n return function (selector, ...objects) {\n return self._patchCssRule(beanInstance, selector, ...objects);\n };\n }\n });\n bean.defineProperty(beanInstance, '$cssRaw', {\n enumerable: false,\n configurable: true,\n get() {\n return function (mustBeValidCSS) {\n return self._patchCssRaw(beanInstance, mustBeValidCSS);\n };\n }\n });\n bean.defineProperty(beanInstance, '$cssBase', {\n enumerable: false,\n configurable: true,\n get() {\n return self._beanCssBase;\n }\n });\n bean.defineProperty(beanInstance, '$cssMerge', {\n enumerable: false,\n configurable: true,\n get() {\n return function (...args) {\n return self._patchCssMerge(beanInstance, ...args);\n };\n }\n });\n bean.defineProperty(beanInstance, '$theme', {\n enumerable: false,\n configurable: true,\n get() {\n return self._beanTheme;\n }\n });\n bean.defineProperty(beanInstance, '$token', {\n enumerable: false,\n configurable: true,\n get() {\n return useComputed(() => self._beanTheme.token);\n }\n });\n }\n _patchStyle(beanInstance, props, ...args) {\n // undefined/null/false\n if (!props) return undefined;\n if (this.sys.env.META_MODE === 'development') {\n if (props && typeof props === 'object') {\n props = Object.assign({\n $debugName: beanInstance[SymbolBeanFullName].replaceAll('.', '_')\n }, props);\n }\n }\n if (this._styleInstance) {\n return this._styleInstance.style(props, ...args);\n } else {\n return style(props, ...args);\n }\n }\n _patchCssRule(_beanInstance, selector, ...objects) {\n if (this._styleInstance) {\n return this._styleInstance.cssRule(selector, ...objects);\n } else {\n return cssRule(selector, ...objects);\n }\n }\n _patchCssRaw(_beanInstance, mustBeValidCSS) {\n if (this._styleInstance) {\n return this._styleInstance.cssRaw(mustBeValidCSS);\n } else {\n return cssRaw(mustBeValidCSS);\n }\n }\n _patchCssMerge(beanInstance, ...args) {\n const args2 = args.map(item => {\n if (Array.isArray(item)) {\n return this._patchCssMerge(beanInstance, ...item);\n } else if (typeof item === 'string' && item.startsWith('cssBase:')) {\n const varName = item.substring('cssBase:'.length);\n return beanInstance.$cssBase[varName];\n }\n return item;\n });\n return classes(...args2);\n }\n}","var _dec, _dec2, _class;\nimport { \"BeanInfo\" as __z_BeanInfo } from \"zova\";\n// eslint-disable\n/** bean: begin */\nexport * from '../bean/bean.theme.js';\nimport 'zova';\n/** bean: end */\n/** bean: begin */\nimport { BeanTheme } from '../bean/bean.theme.js';\nimport 'zova';\n/** bean: end */\n/** config: begin */\nexport * from '../config/config.js';\n/** config: end */\n/** monkey: begin */\nexport * from '../monkey.js';\n/** monkey: end */\n/** scope: begin */\nimport { BeanScopeBase } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\nexport let ScopeModuleAStyle = (_dec = Scope(), _dec2 = __z_BeanInfo({\n module: \"a-style\"\n}), _dec(_class = _dec2(_class = class ScopeModuleAStyle extends BeanScopeBase {}) || _class) || _class);\nimport 'zova';\n\n/** scope: end */","import { createBeanDecorator } from 'zova';\nexport function Css(options) {\n return createBeanDecorator('css', 'app', true, options);\n}\nexport function Theme(options) {\n return createBeanDecorator('theme', 'app', true, options);\n}","export function $getThemeName(themeName) {\n return themeName;\n}","import { BeanBase, deepExtend } from 'zova';\nexport class BeanThemeBase extends BeanBase {\n getOptionsToken(params) {\n const options = this.$onionOptions;\n return options.token?.(params);\n }\n mergeOptionsToken(params, token) {\n const optionsToken = this.getOptionsToken(params);\n if (optionsToken) {\n token = deepExtend(token, optionsToken);\n }\n return token;\n }\n}"],"mappings":"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"}
|
package/package.json
CHANGED
package/src/.metadata/index.ts
CHANGED
|
@@ -4,11 +4,11 @@ export * from '../bean/bean.theme.js';
|
|
|
4
4
|
|
|
5
5
|
import 'zova';
|
|
6
6
|
declare module 'zova' {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
|
|
8
|
+
|
|
9
9
|
}
|
|
10
10
|
declare module 'zova-module-a-style' {
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
export interface BeanTheme {
|
|
13
13
|
/** @internal */
|
|
14
14
|
get scope(): ScopeModuleAStyle;
|
|
@@ -17,8 +17,8 @@ declare module 'zova-module-a-style' {
|
|
|
17
17
|
export interface BeanTheme {
|
|
18
18
|
get $beanFullName(): 'a-style.bean.theme';
|
|
19
19
|
get $onionName(): 'a-style:theme';
|
|
20
|
-
|
|
21
|
-
}
|
|
20
|
+
|
|
21
|
+
}
|
|
22
22
|
}
|
|
23
23
|
/** bean: end */
|
|
24
24
|
/** bean: begin */
|
|
@@ -54,14 +54,14 @@ declare module 'zova' {
|
|
|
54
54
|
export interface IBeanScopeRecord {
|
|
55
55
|
'a-style': ScopeModuleAStyle;
|
|
56
56
|
}
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
export interface IBeanScopeConfig {
|
|
59
59
|
'a-style': ReturnType<typeof config>;
|
|
60
60
|
}
|
|
61
61
|
|
|
62
|
-
|
|
63
62
|
|
|
64
|
-
|
|
63
|
+
|
|
64
|
+
|
|
65
65
|
}
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
/** scope: end */
|
package/src/bean/bean.theme.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { beanFullNameFromOnionName, cast, UseScope } from 'zova';
|
|
1
|
+
import { beanFullNameFromOnionName, cast, ssr_load_local, UseScope } from 'zova';
|
|
2
2
|
import { Bean } from 'zova-module-a-bean';
|
|
3
3
|
import { BeanModelBase } from 'zova-module-a-model';
|
|
4
4
|
import { ScopeModuleASsr } from 'zova-module-a-ssr';
|
|
@@ -18,6 +18,7 @@ export class BeanTheme extends BeanModelBase {
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
token: unknown;
|
|
21
|
+
private _cookieTheme: boolean;
|
|
21
22
|
private _mediaDark?: MediaQueryList;
|
|
22
23
|
private _onMediaDarkChange?;
|
|
23
24
|
|
|
@@ -25,8 +26,13 @@ export class BeanTheme extends BeanModelBase {
|
|
|
25
26
|
$$scopeSsr: ScopeModuleASsr;
|
|
26
27
|
|
|
27
28
|
protected async __init__() {
|
|
28
|
-
const cookieTheme = this.$ssr.profileOptions.useCookie;
|
|
29
|
+
const cookieTheme = (this._cookieTheme = this.$ssr.profileOptions.useCookie);
|
|
29
30
|
const cookieThemeDarkDefault = this.$$scopeSsr.config.cookieThemeDarkDefault;
|
|
31
|
+
const darkModeDefault = cookieTheme
|
|
32
|
+
? cookieThemeDarkDefault
|
|
33
|
+
: process.env.CLIENT
|
|
34
|
+
? (ssr_load_local('themedark') ?? 'auto')
|
|
35
|
+
: 'auto';
|
|
30
36
|
// support admin
|
|
31
37
|
this.name = this.$useState(cookieTheme ? 'cookie' : 'local', {
|
|
32
38
|
queryKey: ['themename'],
|
|
@@ -47,7 +53,7 @@ export class BeanTheme extends BeanModelBase {
|
|
|
47
53
|
return deserializeDefault(value);
|
|
48
54
|
},
|
|
49
55
|
},
|
|
50
|
-
defaultData:
|
|
56
|
+
defaultData: darkModeDefault,
|
|
51
57
|
},
|
|
52
58
|
});
|
|
53
59
|
this._updateDark();
|
|
@@ -67,6 +73,7 @@ export class BeanTheme extends BeanModelBase {
|
|
|
67
73
|
|
|
68
74
|
// not use watch.immediate for await done
|
|
69
75
|
await this._applyInitialThemeAndSsrDualOutput();
|
|
76
|
+
this._syncDarkModePersistence();
|
|
70
77
|
}
|
|
71
78
|
|
|
72
79
|
protected __dispose__() {
|
|
@@ -75,6 +82,7 @@ export class BeanTheme extends BeanModelBase {
|
|
|
75
82
|
|
|
76
83
|
private _updateDark() {
|
|
77
84
|
this._dark = this._getDarkFromDarkMode(this.darkMode);
|
|
85
|
+
this._syncDarkModePersistence();
|
|
78
86
|
}
|
|
79
87
|
|
|
80
88
|
async _applyInitialThemeAndSsrDualOutput() {
|
|
@@ -119,6 +127,17 @@ export class BeanTheme extends BeanModelBase {
|
|
|
119
127
|
return (await this.bean._getBean(beanFullNameFromOnionName(name, 'theme'), true)) as IThemeBase;
|
|
120
128
|
}
|
|
121
129
|
|
|
130
|
+
private _syncDarkModePersistence() {
|
|
131
|
+
if (!process.env.CLIENT || this._dark === undefined) return;
|
|
132
|
+
const queryKey = ['themedark'];
|
|
133
|
+
const target = this._cookieTheme ? 'local' : 'cookie';
|
|
134
|
+
try {
|
|
135
|
+
this.$persisterSaveTo(queryKey, target, this._dark);
|
|
136
|
+
} catch (err) {
|
|
137
|
+
if (process.env.DEV) console.warn('Failed to mirror themedark persistence', err);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
122
141
|
toggleDark() {
|
|
123
142
|
this.darkMode = !this._dark;
|
|
124
143
|
this._updateDark(); // immediate
|