@vlian/framework 2.0.1 → 2.0.2

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.
Files changed (59) hide show
  1. package/README.md +7 -4
  2. package/dist/i18n.cjs +1 -0
  3. package/dist/i18n.d.ts +2 -0
  4. package/dist/i18n.js +1 -0
  5. package/dist/index.umd.js +1 -1
  6. package/dist/kernel/custom-manager/i18n/I18nManager.cjs +1 -0
  7. package/dist/kernel/{manager → custom-manager}/i18n/I18nManager.d.ts +1 -1
  8. package/dist/kernel/custom-manager/i18n/I18nManager.js +1 -0
  9. package/dist/kernel/{manager → custom-manager}/i18n/i18n.persistence.d.ts +1 -1
  10. package/dist/kernel/{manager → custom-manager}/i18n/i18n.schema.cjs +1 -1
  11. package/dist/kernel/{manager → custom-manager}/i18n/i18n.schema.d.ts +1 -1
  12. package/dist/kernel/custom-manager/i18n/i18n.schema.js +1 -0
  13. package/dist/kernel/custom-manager/i18n/index.cjs +1 -1
  14. package/dist/kernel/custom-manager/i18n/index.d.ts +2 -2
  15. package/dist/kernel/custom-manager/i18n/index.js +1 -1
  16. package/dist/kernel/custom-manager/theme/ThemeManager.cjs +1 -0
  17. package/dist/kernel/{manager → custom-manager}/theme/ThemeManager.d.ts +1 -1
  18. package/dist/kernel/custom-manager/theme/ThemeManager.js +1 -0
  19. package/dist/kernel/custom-manager/theme/index.cjs +1 -1
  20. package/dist/kernel/custom-manager/theme/index.d.ts +2 -2
  21. package/dist/kernel/custom-manager/theme/index.js +1 -1
  22. package/dist/kernel/{manager → custom-manager}/theme/theme.dom.d.ts +1 -1
  23. package/dist/kernel/{manager → custom-manager}/theme/theme.persistence.d.ts +1 -1
  24. package/dist/kernel/{manager → custom-manager}/theme/theme.schema.d.ts +1 -1
  25. package/dist/kernel/index.cjs +1 -1
  26. package/dist/kernel/index.d.ts +0 -2
  27. package/dist/kernel/index.js +1 -1
  28. package/dist/theme.cjs +1 -0
  29. package/dist/theme.d.ts +2 -0
  30. package/dist/theme.js +1 -0
  31. package/package.json +23 -1
  32. package/dist/kernel/manager/i18n/I18nManager.cjs +0 -1
  33. package/dist/kernel/manager/i18n/I18nManager.js +0 -1
  34. package/dist/kernel/manager/i18n/i18n.schema.js +0 -1
  35. package/dist/kernel/manager/i18n/index.cjs +0 -1
  36. package/dist/kernel/manager/i18n/index.d.ts +0 -1
  37. package/dist/kernel/manager/i18n/index.js +0 -1
  38. package/dist/kernel/manager/i18nManager.cjs +0 -1
  39. package/dist/kernel/manager/i18nManager.d.ts +0 -1
  40. package/dist/kernel/manager/i18nManager.js +0 -1
  41. package/dist/kernel/manager/theme/ThemeManager.cjs +0 -1
  42. package/dist/kernel/manager/theme/ThemeManager.js +0 -1
  43. package/dist/kernel/manager/theme/index.cjs +0 -1
  44. package/dist/kernel/manager/theme/index.d.ts +0 -1
  45. package/dist/kernel/manager/theme/index.js +0 -1
  46. package/dist/kernel/manager/themeManager.cjs +0 -1
  47. package/dist/kernel/manager/themeManager.d.ts +0 -1
  48. package/dist/kernel/manager/themeManager.js +0 -1
  49. /package/dist/kernel/{manager → custom-manager}/i18n/i18n.persistence.cjs +0 -0
  50. /package/dist/kernel/{manager → custom-manager}/i18n/i18n.persistence.js +0 -0
  51. /package/dist/kernel/{manager → custom-manager}/i18n/i18n.runtime.cjs +0 -0
  52. /package/dist/kernel/{manager → custom-manager}/i18n/i18n.runtime.d.ts +0 -0
  53. /package/dist/kernel/{manager → custom-manager}/i18n/i18n.runtime.js +0 -0
  54. /package/dist/kernel/{manager → custom-manager}/theme/theme.dom.cjs +0 -0
  55. /package/dist/kernel/{manager → custom-manager}/theme/theme.dom.js +0 -0
  56. /package/dist/kernel/{manager → custom-manager}/theme/theme.persistence.cjs +0 -0
  57. /package/dist/kernel/{manager → custom-manager}/theme/theme.persistence.js +0 -0
  58. /package/dist/kernel/{manager → custom-manager}/theme/theme.schema.cjs +0 -0
  59. /package/dist/kernel/{manager → custom-manager}/theme/theme.schema.js +0 -0
package/README.md CHANGED
@@ -15,7 +15,8 @@ pnpm add @vlian/framework i18next @vlian/logger @vlian/utils
15
15
  ## 快速开始
16
16
 
17
17
  ```typescript
18
- import { getKernel, startup, registerThemeManager } from '@vlian/framework';
18
+ import { getKernel, startup } from '@vlian/framework';
19
+ import { registerThemeManager } from '@vlian/framework/theme';
19
20
 
20
21
  const kernel = await startup({}, 'app');
21
22
 
@@ -30,15 +31,17 @@ await registerThemeManager(kernel, {
30
31
 
31
32
  - `@vlian/framework`
32
33
  - `@vlian/framework/kernel`
34
+ - `@vlian/framework/theme`
35
+ - `@vlian/framework/i18n`
33
36
 
34
- 两者导出相同的 kernel API,包括 `Kernel`、`startup`、`getKernel`、`kernelStartApp` 以及相关类型。
35
- `theme`、`i18n` 现在作为可选自定义管理器导出,按需注册到 kernel
37
+ `@vlian/framework` 与 `@vlian/framework/kernel` 导出相同的 kernel API,包括 `Kernel`、`startup`、`getKernel`、`kernelStartApp` 以及相关类型。
38
+ `theme`、`i18n` 改为独立子路径导出,按需从 `@vlian/framework/theme`、`@vlian/framework/i18n` 引入并注册到 kernel,可让消费方在 Vite 打包时获得更稳定的分包边界。
36
39
 
37
40
  ## 迁移说明
38
41
 
39
42
  - 删除所有 `@vlian/framework/utils`、`@vlian/framework/state`、`@vlian/framework/library`、`@vlian/framework/components`、`@vlian/framework/analytics` 的导入。
40
43
  - 旧模块如果仍有业务价值,需要迁移到应用侧或拆分为独立包维护。
41
- - `theme`、`i18n` 不再默认随 kernel 启动;需要时请显式注册自定义管理器。
44
+ - `theme`、`i18n` 不再从根入口或 `kernel` 入口聚合导出;需要时请显式从 `@vlian/framework/theme`、`@vlian/framework/i18n` 引入并注册自定义管理器。
42
45
  - 推荐围绕 kernel manager 收口日志、缓存,以及按需挂载的主题和国际化能力。
43
46
 
44
47
  ## 依赖要求
package/dist/i18n.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_I18N(){return _i18n.DEFAULT_I18N},get DEFAULT_I18N_MANAGER_CONFIG(){return _i18n.DEFAULT_I18N_MANAGER_CONFIG},get I18N_MANAGER_NAME(){return _i18n.I18N_MANAGER_NAME},get I18nManager(){return _i18n.I18nManager},get registerI18nManager(){return _i18n.registerI18nManager}});const _i18n=require("./kernel/custom-manager/i18n");
package/dist/i18n.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { I18nManager, DEFAULT_I18N, DEFAULT_I18N_MANAGER_CONFIG, I18N_MANAGER_NAME, registerI18nManager, } from './kernel/custom-manager/i18n';
2
+ export type { I18nManagerConfig, I18nSnapshot } from './kernel/custom-manager/i18n';
package/dist/i18n.js ADDED
@@ -0,0 +1 @@
1
+ export{I18nManager,DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME,registerI18nManager}from"./kernel/custom-manager/i18n";
package/dist/index.umd.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @vlian/framework v2.0.0
2
+ * @vlian/framework v2.0.1
3
3
  * Secra Framework - 一个现代化的低代码框架
4
4
  * (c) 2026 Secra Framework Contributors
5
5
  * Licensed under Apache-2.0
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return I18nManager}});const _constants=require("./constants");const _i18npersistence=require("./i18n.persistence");const _i18nruntime=require("./i18n.runtime");const _i18nschema=require("./i18n.schema");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let I18nManager=class I18nManager{async initialize(context){this.config=context.getManagerConfig(_constants.I18N_MANAGER_NAME)||_constants.DEFAULT_I18N_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialSnapshot=(0,_i18nschema.normalizeI18nSnapshot)(this.config.initial||{},_constants.DEFAULT_I18N);this.snapshot=await (0,_i18npersistence.loadI18nFromCache)(this.cacheManager,this.config.persistence,initialSnapshot);await (0,_i18nruntime.initializeI18nRuntime)({locale:this.snapshot.locale||"zh-CN",resources:this.snapshot.resources});this.initialized=true}getSnapshot(){return(0,_i18nschema.cloneI18nSnapshot)(this.snapshot)}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setLocale(locale){this.ensureInitialized();const prevSnapshot=this.snapshot;const nextSnapshot=(0,_i18nschema.mergeI18nSnapshot)(prevSnapshot,{locale});if((0,_i18nschema.isI18nEqual)(prevSnapshot,nextSnapshot)){return}this.snapshot=nextSnapshot;await (0,_i18nruntime.switchI18nLocale)(this.snapshot.locale);if(this.cacheManager){await (0,_i18npersistence.saveI18nToCache)(this.cacheManager,this.config.persistence,this.snapshot)}this.emit(this.snapshot,prevSnapshot)}ensureInitialized(){if(!this.initialized){throw new Error("I18nManager must be initialized before use.")}}emit(next,prev){for(const listener of this.listeners){try{listener((0,_i18nschema.cloneI18nSnapshot)(next),(0,_i18nschema.cloneI18nSnapshot)(prev))}catch{}}}constructor(){_define_property(this,"snapshot",(0,_i18nschema.cloneI18nSnapshot)(_constants.DEFAULT_I18N));_define_property(this,"config",_constants.DEFAULT_I18N_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"initialized",false)}};
@@ -1,5 +1,5 @@
1
1
  import type { KernelManager, KernelManagerContext } from '../../types';
2
- import type { I18nSnapshot } from '../../custom-manager/i18n/types';
2
+ import type { I18nSnapshot } from './types';
3
3
  import { type I18nListener } from './i18n.schema';
4
4
  export declare class I18nManager implements KernelManager<I18nSnapshot> {
5
5
  private snapshot;
@@ -0,0 +1 @@
1
+ function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"./constants";import{loadI18nFromCache,saveI18nToCache}from"./i18n.persistence";import{initializeI18nRuntime,switchI18nLocale}from"./i18n.runtime";import{cloneI18nSnapshot,isI18nEqual,mergeI18nSnapshot,normalizeI18nSnapshot}from"./i18n.schema";export class I18nManager{async initialize(context){this.config=context.getManagerConfig(I18N_MANAGER_NAME)||DEFAULT_I18N_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialSnapshot=normalizeI18nSnapshot(this.config.initial||{},DEFAULT_I18N);this.snapshot=await loadI18nFromCache(this.cacheManager,this.config.persistence,initialSnapshot);await initializeI18nRuntime({locale:this.snapshot.locale||"zh-CN",resources:this.snapshot.resources});this.initialized=true}getSnapshot(){return cloneI18nSnapshot(this.snapshot)}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setLocale(locale){this.ensureInitialized();const prevSnapshot=this.snapshot;const nextSnapshot=mergeI18nSnapshot(prevSnapshot,{locale});if(isI18nEqual(prevSnapshot,nextSnapshot)){return}this.snapshot=nextSnapshot;await switchI18nLocale(this.snapshot.locale);if(this.cacheManager){await saveI18nToCache(this.cacheManager,this.config.persistence,this.snapshot)}this.emit(this.snapshot,prevSnapshot)}ensureInitialized(){if(!this.initialized){throw new Error("I18nManager must be initialized before use.")}}emit(next,prev){for(const listener of this.listeners){try{listener(cloneI18nSnapshot(next),cloneI18nSnapshot(prev))}catch{}}}constructor(){_define_property(this,"snapshot",cloneI18nSnapshot(DEFAULT_I18N));_define_property(this,"config",DEFAULT_I18N_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"initialized",false)}}
@@ -1,6 +1,6 @@
1
1
  import type { StorageInstance } from '@vlian/utils';
2
2
  import type { PersistenceOptions } from '../../types';
3
- import type { I18nSnapshot } from '../../custom-manager/i18n/types';
3
+ import type { I18nSnapshot } from './types';
4
4
  export declare const DEFAULT_I18N_CACHE_KEY = "vlian:kernel:i18n";
5
5
  export declare function loadI18nFromCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, fallback: I18nSnapshot): Promise<I18nSnapshot>;
6
6
  export declare function saveI18nToCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, snapshot: I18nSnapshot): Promise<void>;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get cloneI18nSnapshot(){return cloneI18nSnapshot},get isI18nEqual(){return isI18nEqual},get mergeI18nSnapshot(){return mergeI18nSnapshot},get normalizeI18nSnapshot(){return normalizeI18nSnapshot}});function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}function cloneI18nSnapshot(snapshot){const resources=snapshot.resources?Object.fromEntries(Object.entries(snapshot.resources).map(([locale,value])=>[locale,{...value}])):undefined;return{locale:snapshot.locale,...resources?{resources}:{}}}function normalizeI18nSnapshot(value,fallback){const source=isPlainObject(value)?value:{};const locale=typeof source.locale==="string"&&source.locale.trim()?source.locale:fallback.locale;const fallbackResources=fallback.resources;const incomingResources=isPlainObject(source.resources)?Object.fromEntries(Object.entries(source.resources).filter(([,resourceValue])=>isPlainObject(resourceValue)).map(([locale,resourceValue])=>[locale,{...resourceValue}])):undefined;const resources=incomingResources||fallbackResources?{...fallbackResources||{},...incomingResources||{}}:undefined;return{locale,...resources?{resources}:{}}}function mergeI18nSnapshot(current,next){return normalizeI18nSnapshot({locale:next.locale??current.locale,resources:next.resources??current.resources},current)}function isI18nEqual(left,right){if(left.locale!==right.locale){return false}const leftResources=left.resources||{};const rightResources=right.resources||{};const leftLocales=Object.keys(leftResources);const rightLocales=Object.keys(rightResources);if(leftLocales.length!==rightLocales.length){return false}for(const locale of leftLocales){if(leftResources[locale]!==rightResources[locale]){return false}}return true}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get cloneI18nSnapshot(){return cloneI18nSnapshot},get isI18nEqual(){return isI18nEqual},get mergeI18nSnapshot(){return mergeI18nSnapshot},get normalizeI18nSnapshot(){return normalizeI18nSnapshot}});function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}function cloneI18nSnapshot(snapshot){const resources=snapshot.resources?Object.fromEntries(Object.entries(snapshot.resources).map(([locale,value])=>[locale,{...value}])):undefined;return{locale:snapshot.locale,...resources?{resources}:{}}}function normalizeI18nSnapshot(value,fallback){const source=isPlainObject(value)?value:{};const locale=typeof source.locale==="string"&&source.locale.trim()?source.locale:fallback.locale;const fallbackResources=fallback.resources;const incomingResources=isPlainObject(source.resources)?Object.fromEntries(Object.entries(source.resources).filter(([,resourceValue])=>isPlainObject(resourceValue)).map(([resourceLocale,resourceValue])=>[resourceLocale,{...resourceValue}])):undefined;const resources=incomingResources||fallbackResources?{...fallbackResources||{},...incomingResources||{}}:undefined;return{locale,...resources?{resources}:{}}}function mergeI18nSnapshot(current,next){return normalizeI18nSnapshot({locale:next.locale??current.locale,resources:next.resources??current.resources},current)}function isI18nEqual(left,right){if(left.locale!==right.locale){return false}const leftResources=left.resources||{};const rightResources=right.resources||{};const leftLocales=Object.keys(leftResources);const rightLocales=Object.keys(rightResources);if(leftLocales.length!==rightLocales.length){return false}for(const locale of leftLocales){if(leftResources[locale]!==rightResources[locale]){return false}}return true}
@@ -1,4 +1,4 @@
1
- import type { I18nSnapshot } from '../../custom-manager/i18n/types';
1
+ import type { I18nSnapshot } from './types';
2
2
  export type I18nListener = (next: I18nSnapshot, prev: I18nSnapshot) => void;
3
3
  export declare function cloneI18nSnapshot(snapshot: I18nSnapshot): I18nSnapshot;
4
4
  export declare function normalizeI18nSnapshot(value: unknown, fallback: I18nSnapshot): I18nSnapshot;
@@ -0,0 +1 @@
1
+ function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}export function cloneI18nSnapshot(snapshot){const resources=snapshot.resources?Object.fromEntries(Object.entries(snapshot.resources).map(([locale,value])=>[locale,{...value}])):undefined;return{locale:snapshot.locale,...resources?{resources}:{}}}export function normalizeI18nSnapshot(value,fallback){const source=isPlainObject(value)?value:{};const locale=typeof source.locale==="string"&&source.locale.trim()?source.locale:fallback.locale;const fallbackResources=fallback.resources;const incomingResources=isPlainObject(source.resources)?Object.fromEntries(Object.entries(source.resources).filter(([,resourceValue])=>isPlainObject(resourceValue)).map(([resourceLocale,resourceValue])=>[resourceLocale,{...resourceValue}])):undefined;const resources=incomingResources||fallbackResources?{...fallbackResources||{},...incomingResources||{}}:undefined;return{locale,...resources?{resources}:{}}}export function mergeI18nSnapshot(current,next){return normalizeI18nSnapshot({locale:next.locale??current.locale,resources:next.resources??current.resources},current)}export function isI18nEqual(left,right){if(left.locale!==right.locale){return false}const leftResources=left.resources||{};const rightResources=right.resources||{};const leftLocales=Object.keys(leftResources);const rightLocales=Object.keys(rightResources);if(leftLocales.length!==rightLocales.length){return false}for(const locale of leftLocales){if(leftResources[locale]!==rightResources[locale]){return false}}return true}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_I18N(){return _constants.DEFAULT_I18N},get DEFAULT_I18N_MANAGER_CONFIG(){return _constants.DEFAULT_I18N_MANAGER_CONFIG},get I18N_MANAGER_NAME(){return _constants.I18N_MANAGER_NAME},get I18nManager(){return _I18nManager.I18nManager},get registerI18nManager(){return registerI18nManager}});const _I18nManager=require("../../manager/i18n/I18nManager");const _constants=require("./constants");async function registerI18nManager(kernel,config=_constants.DEFAULT_I18N_MANAGER_CONFIG){const existing=kernel.getManager(_constants.I18N_MANAGER_NAME);if(existing instanceof _I18nManager.I18nManager){kernel.setManagerConfig(_constants.I18N_MANAGER_NAME,config);await kernel.initializeManager(_constants.I18N_MANAGER_NAME);return existing}const manager=new _I18nManager.I18nManager;kernel.setManagerConfig(_constants.I18N_MANAGER_NAME,config);kernel.registerManager(_constants.I18N_MANAGER_NAME,manager);await kernel.initializeManager(_constants.I18N_MANAGER_NAME);return manager}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_I18N(){return _constants.DEFAULT_I18N},get DEFAULT_I18N_MANAGER_CONFIG(){return _constants.DEFAULT_I18N_MANAGER_CONFIG},get I18N_MANAGER_NAME(){return _constants.I18N_MANAGER_NAME},get I18nManager(){return _I18nManager.I18nManager},get registerI18nManager(){return registerI18nManager}});const _I18nManager=require("./I18nManager");const _constants=require("./constants");async function registerI18nManager(kernel,config=_constants.DEFAULT_I18N_MANAGER_CONFIG){const existing=kernel.getManager(_constants.I18N_MANAGER_NAME);if(existing instanceof _I18nManager.I18nManager){kernel.setManagerConfig(_constants.I18N_MANAGER_NAME,config);await kernel.initializeManager(_constants.I18N_MANAGER_NAME);return existing}const manager=new _I18nManager.I18nManager;kernel.setManagerConfig(_constants.I18N_MANAGER_NAME,config);kernel.registerManager(_constants.I18N_MANAGER_NAME,manager);await kernel.initializeManager(_constants.I18N_MANAGER_NAME);return manager}
@@ -1,7 +1,7 @@
1
1
  import type { Kernel } from '../../kernel';
2
- import { I18nManager } from '../../manager/i18n/I18nManager';
2
+ import { I18nManager } from './I18nManager';
3
3
  import type { I18nManagerConfig } from './types';
4
- export { I18nManager } from '../../manager/i18n/I18nManager';
4
+ export { I18nManager } from './I18nManager';
5
5
  export { DEFAULT_I18N, DEFAULT_I18N_MANAGER_CONFIG, I18N_MANAGER_NAME } from './constants';
6
6
  export type { I18nManagerConfig, I18nSnapshot } from './types';
7
7
  export declare function registerI18nManager(kernel: Kernel, config?: I18nManagerConfig): Promise<I18nManager>;
@@ -1 +1 @@
1
- import{I18nManager}from"../../manager/i18n/I18nManager";import{DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"./constants";export{I18nManager}from"../../manager/i18n/I18nManager";export{DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"./constants";export async function registerI18nManager(kernel,config=DEFAULT_I18N_MANAGER_CONFIG){const existing=kernel.getManager(I18N_MANAGER_NAME);if(existing instanceof I18nManager){kernel.setManagerConfig(I18N_MANAGER_NAME,config);await kernel.initializeManager(I18N_MANAGER_NAME);return existing}const manager=new I18nManager;kernel.setManagerConfig(I18N_MANAGER_NAME,config);kernel.registerManager(I18N_MANAGER_NAME,manager);await kernel.initializeManager(I18N_MANAGER_NAME);return manager}
1
+ import{I18nManager}from"./I18nManager";import{DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"./constants";export{I18nManager}from"./I18nManager";export{DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"./constants";export async function registerI18nManager(kernel,config=DEFAULT_I18N_MANAGER_CONFIG){const existing=kernel.getManager(I18N_MANAGER_NAME);if(existing instanceof I18nManager){kernel.setManagerConfig(I18N_MANAGER_NAME,config);await kernel.initializeManager(I18N_MANAGER_NAME);return existing}const manager=new I18nManager;kernel.setManagerConfig(I18N_MANAGER_NAME,config);kernel.registerManager(I18N_MANAGER_NAME,manager);await kernel.initializeManager(I18N_MANAGER_NAME);return manager}
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return ThemeManager}});const _constants=require("./constants");const _themedom=require("./theme.dom");const _themepersistence=require("./theme.persistence");const _themeschema=require("./theme.schema");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let ThemeManager=class ThemeManager{async initialize(context){this.config=context.getManagerConfig(_constants.THEME_MANAGER_NAME)||_constants.DEFAULT_THEME_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialTheme=(0,_themeschema.normalizeTheme)(this.config.initial||{},_constants.DEFAULT_THEME);this.theme=await (0,_themepersistence.loadThemeFromCache)(this.cacheManager,this.config.persistence,initialTheme);this.resolvedMode=(0,_themedom.resolveThemeMode)(this.theme);(0,_themedom.applyThemeToDocument)(this.theme,{nextResolvedMode:this.resolvedMode});this.bindSystemThemeObserver();this.initialized=true}getTheme(){return(0,_themeschema.cloneTheme)(this.theme)}getSnapshot(){return this.getTheme()}getResolvedMode(){this.ensureInitialized();return this.resolvedMode}getResolvedTheme(){this.ensureInitialized();return(0,_themeschema.cloneResolvedTheme)({...this.getTheme(),resolvedMode:this.resolvedMode})}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setTheme(nextTheme){this.ensureInitialized();const prevTheme=this.theme;const prevResolvedMode=this.resolvedMode;const mergedTheme=(0,_themeschema.mergeTheme)(prevTheme,nextTheme);const nextResolvedMode=(0,_themedom.resolveThemeMode)(mergedTheme);if((0,_themeschema.isThemeEqual)(prevTheme,mergedTheme)&&(0,_themeschema.isResolvedThemeModeEqual)(prevResolvedMode,nextResolvedMode)){return}this.theme=mergedTheme;this.resolvedMode=nextResolvedMode;(0,_themedom.applyThemeToDocument)(this.theme,{prevTheme,prevResolvedMode,nextResolvedMode});if(this.cacheManager){await (0,_themepersistence.saveThemeToCache)(this.cacheManager,this.config.persistence,this.theme)}this.emit(this.theme,prevTheme)}ensureInitialized(){if(!this.initialized){throw new Error("ThemeManager must be initialized before use.")}}destroy(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=null;this.listeners.clear();this.initialized=false}bindSystemThemeObserver(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=(0,_themedom.observeSystemThemeChange)(nextResolvedMode=>{if(this.theme.mode!=="system"){return}const prevResolvedMode=this.resolvedMode;if((0,_themeschema.isResolvedThemeModeEqual)(prevResolvedMode,nextResolvedMode)){return}this.resolvedMode=nextResolvedMode;(0,_themedom.applyThemeToDocument)(this.theme,{prevTheme:this.theme,prevResolvedMode,nextResolvedMode});this.emit(this.theme,this.theme)})||null}emit(next,prev){for(const listener of this.listeners){try{listener((0,_themeschema.cloneTheme)(next),(0,_themeschema.cloneTheme)(prev))}catch{}}}constructor(){_define_property(this,"theme",(0,_themeschema.cloneTheme)(_constants.DEFAULT_THEME));_define_property(this,"resolvedMode",(0,_themedom.resolveThemeMode)(_constants.DEFAULT_THEME));_define_property(this,"config",_constants.DEFAULT_THEME_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"stopSystemThemeObserver",null);_define_property(this,"initialized",false)}};
@@ -1,5 +1,5 @@
1
1
  import type { KernelManager, KernelManagerContext } from '../../types';
2
- import type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot } from '../../custom-manager/theme/types';
2
+ import type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot } from './types';
3
3
  import { type ThemeListener } from './theme.schema';
4
4
  export declare class ThemeManager implements KernelManager<ThemeSnapshot> {
5
5
  private theme;
@@ -0,0 +1 @@
1
+ function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"./constants";import{applyThemeToDocument,observeSystemThemeChange,resolveThemeMode}from"./theme.dom";import{loadThemeFromCache,saveThemeToCache}from"./theme.persistence";import{cloneResolvedTheme,cloneTheme,isResolvedThemeModeEqual,isThemeEqual,mergeTheme,normalizeTheme}from"./theme.schema";export class ThemeManager{async initialize(context){this.config=context.getManagerConfig(THEME_MANAGER_NAME)||DEFAULT_THEME_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialTheme=normalizeTheme(this.config.initial||{},DEFAULT_THEME);this.theme=await loadThemeFromCache(this.cacheManager,this.config.persistence,initialTheme);this.resolvedMode=resolveThemeMode(this.theme);applyThemeToDocument(this.theme,{nextResolvedMode:this.resolvedMode});this.bindSystemThemeObserver();this.initialized=true}getTheme(){return cloneTheme(this.theme)}getSnapshot(){return this.getTheme()}getResolvedMode(){this.ensureInitialized();return this.resolvedMode}getResolvedTheme(){this.ensureInitialized();return cloneResolvedTheme({...this.getTheme(),resolvedMode:this.resolvedMode})}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setTheme(nextTheme){this.ensureInitialized();const prevTheme=this.theme;const prevResolvedMode=this.resolvedMode;const mergedTheme=mergeTheme(prevTheme,nextTheme);const nextResolvedMode=resolveThemeMode(mergedTheme);if(isThemeEqual(prevTheme,mergedTheme)&&isResolvedThemeModeEqual(prevResolvedMode,nextResolvedMode)){return}this.theme=mergedTheme;this.resolvedMode=nextResolvedMode;applyThemeToDocument(this.theme,{prevTheme,prevResolvedMode,nextResolvedMode});if(this.cacheManager){await saveThemeToCache(this.cacheManager,this.config.persistence,this.theme)}this.emit(this.theme,prevTheme)}ensureInitialized(){if(!this.initialized){throw new Error("ThemeManager must be initialized before use.")}}destroy(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=null;this.listeners.clear();this.initialized=false}bindSystemThemeObserver(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=observeSystemThemeChange(nextResolvedMode=>{if(this.theme.mode!=="system"){return}const prevResolvedMode=this.resolvedMode;if(isResolvedThemeModeEqual(prevResolvedMode,nextResolvedMode)){return}this.resolvedMode=nextResolvedMode;applyThemeToDocument(this.theme,{prevTheme:this.theme,prevResolvedMode,nextResolvedMode});this.emit(this.theme,this.theme)})||null}emit(next,prev){for(const listener of this.listeners){try{listener(cloneTheme(next),cloneTheme(prev))}catch{}}}constructor(){_define_property(this,"theme",cloneTheme(DEFAULT_THEME));_define_property(this,"resolvedMode",resolveThemeMode(DEFAULT_THEME));_define_property(this,"config",DEFAULT_THEME_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"stopSystemThemeObserver",null);_define_property(this,"initialized",false)}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_THEME(){return _constants.DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return _constants.DEFAULT_THEME_MANAGER_CONFIG},get THEME_MANAGER_NAME(){return _constants.THEME_MANAGER_NAME},get ThemeManager(){return _ThemeManager.ThemeManager},get registerThemeManager(){return registerThemeManager}});const _ThemeManager=require("../../manager/theme/ThemeManager");const _constants=require("./constants");async function registerThemeManager(kernel,config=_constants.DEFAULT_THEME_MANAGER_CONFIG){const existing=kernel.getManager(_constants.THEME_MANAGER_NAME);if(existing instanceof _ThemeManager.ThemeManager){kernel.setManagerConfig(_constants.THEME_MANAGER_NAME,config);await kernel.initializeManager(_constants.THEME_MANAGER_NAME);return existing}const manager=new _ThemeManager.ThemeManager;kernel.setManagerConfig(_constants.THEME_MANAGER_NAME,config);kernel.registerManager(_constants.THEME_MANAGER_NAME,manager);await kernel.initializeManager(_constants.THEME_MANAGER_NAME);return manager}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_THEME(){return _constants.DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return _constants.DEFAULT_THEME_MANAGER_CONFIG},get THEME_MANAGER_NAME(){return _constants.THEME_MANAGER_NAME},get ThemeManager(){return _ThemeManager.ThemeManager},get registerThemeManager(){return registerThemeManager}});const _ThemeManager=require("./ThemeManager");const _constants=require("./constants");async function registerThemeManager(kernel,config=_constants.DEFAULT_THEME_MANAGER_CONFIG){const existing=kernel.getManager(_constants.THEME_MANAGER_NAME);if(existing instanceof _ThemeManager.ThemeManager){kernel.setManagerConfig(_constants.THEME_MANAGER_NAME,config);await kernel.initializeManager(_constants.THEME_MANAGER_NAME);return existing}const manager=new _ThemeManager.ThemeManager;kernel.setManagerConfig(_constants.THEME_MANAGER_NAME,config);kernel.registerManager(_constants.THEME_MANAGER_NAME,manager);await kernel.initializeManager(_constants.THEME_MANAGER_NAME);return manager}
@@ -1,7 +1,7 @@
1
1
  import type { Kernel } from '../../kernel';
2
- import { ThemeManager } from '../../manager/theme/ThemeManager';
2
+ import { ThemeManager } from './ThemeManager';
3
3
  import type { ThemeManagerConfig } from './types';
4
- export { ThemeManager } from '../../manager/theme/ThemeManager';
4
+ export { ThemeManager } from './ThemeManager';
5
5
  export { DEFAULT_THEME, DEFAULT_THEME_MANAGER_CONFIG, THEME_MANAGER_NAME } from './constants';
6
6
  export type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeManagerConfig, ThemeSnapshot } from './types';
7
7
  export declare function registerThemeManager(kernel: Kernel, config?: ThemeManagerConfig): Promise<ThemeManager>;
@@ -1 +1 @@
1
- import{ThemeManager}from"../../manager/theme/ThemeManager";import{DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"./constants";export{ThemeManager}from"../../manager/theme/ThemeManager";export{DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"./constants";export async function registerThemeManager(kernel,config=DEFAULT_THEME_MANAGER_CONFIG){const existing=kernel.getManager(THEME_MANAGER_NAME);if(existing instanceof ThemeManager){kernel.setManagerConfig(THEME_MANAGER_NAME,config);await kernel.initializeManager(THEME_MANAGER_NAME);return existing}const manager=new ThemeManager;kernel.setManagerConfig(THEME_MANAGER_NAME,config);kernel.registerManager(THEME_MANAGER_NAME,manager);await kernel.initializeManager(THEME_MANAGER_NAME);return manager}
1
+ import{ThemeManager}from"./ThemeManager";import{DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"./constants";export{ThemeManager}from"./ThemeManager";export{DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"./constants";export async function registerThemeManager(kernel,config=DEFAULT_THEME_MANAGER_CONFIG){const existing=kernel.getManager(THEME_MANAGER_NAME);if(existing instanceof ThemeManager){kernel.setManagerConfig(THEME_MANAGER_NAME,config);await kernel.initializeManager(THEME_MANAGER_NAME);return existing}const manager=new ThemeManager;kernel.setManagerConfig(THEME_MANAGER_NAME,config);kernel.registerManager(THEME_MANAGER_NAME,manager);await kernel.initializeManager(THEME_MANAGER_NAME);return manager}
@@ -1,4 +1,4 @@
1
- import type { ResolvedThemeMode, ThemeSnapshot } from '../../custom-manager/theme/types';
1
+ import type { ResolvedThemeMode, ThemeSnapshot } from './types';
2
2
  type ThemeDomApplyOptions = {
3
3
  prevTheme?: ThemeSnapshot;
4
4
  nextResolvedMode?: ResolvedThemeMode;
@@ -1,6 +1,6 @@
1
1
  import type { StorageInstance } from '@vlian/utils';
2
2
  import type { PersistenceOptions } from '../../types';
3
- import type { ThemeSnapshot } from '../../custom-manager/theme/types';
3
+ import type { ThemeSnapshot } from './types';
4
4
  export declare const DEFAULT_THEME_CACHE_KEY = "vlian:kernel:theme";
5
5
  export declare function loadThemeFromCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, fallback: ThemeSnapshot): Promise<ThemeSnapshot>;
6
6
  export declare function saveThemeToCache(cacheManager: StorageInstance, persistence: PersistenceOptions | undefined, theme: ThemeSnapshot): Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot } from '../../custom-manager/theme/types';
1
+ import type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot } from './types';
2
2
  export type ThemeListener = (next: ThemeSnapshot, prev: ThemeSnapshot) => void;
3
3
  export declare function cloneTheme(theme: ThemeSnapshot): ThemeSnapshot;
4
4
  export declare function cloneResolvedTheme(theme: ResolvedThemeSnapshot): ResolvedThemeSnapshot;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get CacheManager(){return _manager.CacheManager},get DEFAULT_I18N(){return _custommanager.DEFAULT_I18N},get DEFAULT_I18N_MANAGER_CONFIG(){return _custommanager.DEFAULT_I18N_MANAGER_CONFIG},get DEFAULT_THEME(){return _custommanager.DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return _custommanager.DEFAULT_THEME_MANAGER_CONFIG},get I18N_MANAGER_NAME(){return _custommanager.I18N_MANAGER_NAME},get I18nManager(){return _custommanager.I18nManager},get Kernel(){return _kernel.Kernel},get LoggerManager(){return _manager.LoggerManager},get THEME_MANAGER_NAME(){return _custommanager.THEME_MANAGER_NAME},get ThemeManager(){return _custommanager.ThemeManager},get getKernel(){return _kernel.getKernel},get kernelStartApp(){return _kernel.kernelStartApp},get registerI18nManager(){return _custommanager.registerI18nManager},get registerThemeManager(){return _custommanager.registerThemeManager},get startup(){return _kernel.startup}});const _kernel=require("./kernel");const _manager=require("./manager");const _custommanager=require("./custom-manager");
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get CacheManager(){return _manager.CacheManager},get Kernel(){return _kernel.Kernel},get LoggerManager(){return _manager.LoggerManager},get getKernel(){return _kernel.getKernel},get kernelStartApp(){return _kernel.kernelStartApp},get startup(){return _kernel.startup}});const _kernel=require("./kernel");const _manager=require("./manager");
@@ -1,5 +1,3 @@
1
1
  export { Kernel, startup, getKernel, kernelStartApp } from './kernel';
2
2
  export { LoggerManager, CacheManager } from './manager';
3
- export { ThemeManager, I18nManager, THEME_MANAGER_NAME, I18N_MANAGER_NAME, DEFAULT_THEME, DEFAULT_I18N, DEFAULT_THEME_MANAGER_CONFIG, DEFAULT_I18N_MANAGER_CONFIG, registerThemeManager, registerI18nManager, } from './custom-manager';
4
3
  export type { KernelInstanceId, KernelStorageDriver, StorageOptions, PersistenceOptions, LoggerManagerConfig, CacheManagerConfig, KernelConfig, KernelTimingMetric, KernelManager, KernelManagerContext, KernelRenderContext, StartupHooks, StartOptions, KernelStartOptions, } from './types';
5
- export type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeSnapshot, ThemeManagerConfig, I18nSnapshot, I18nManagerConfig, } from './custom-manager';
@@ -1 +1 @@
1
- export{Kernel,startup,getKernel,kernelStartApp}from"./kernel";export{LoggerManager,CacheManager}from"./manager";export{ThemeManager,I18nManager,THEME_MANAGER_NAME,I18N_MANAGER_NAME,DEFAULT_THEME,DEFAULT_I18N,DEFAULT_THEME_MANAGER_CONFIG,DEFAULT_I18N_MANAGER_CONFIG,registerThemeManager,registerI18nManager}from"./custom-manager";
1
+ export{Kernel,startup,getKernel,kernelStartApp}from"./kernel";export{LoggerManager,CacheManager}from"./manager";
package/dist/theme.cjs ADDED
@@ -0,0 +1 @@
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:true});function _export(target,all){for(var name in all)Object.defineProperty(target,name,{enumerable:true,get:Object.getOwnPropertyDescriptor(all,name).get})}_export(exports,{get DEFAULT_THEME(){return _theme.DEFAULT_THEME},get DEFAULT_THEME_MANAGER_CONFIG(){return _theme.DEFAULT_THEME_MANAGER_CONFIG},get THEME_MANAGER_NAME(){return _theme.THEME_MANAGER_NAME},get ThemeManager(){return _theme.ThemeManager},get registerThemeManager(){return _theme.registerThemeManager}});const _theme=require("./kernel/custom-manager/theme");
@@ -0,0 +1,2 @@
1
+ export { ThemeManager, DEFAULT_THEME, DEFAULT_THEME_MANAGER_CONFIG, THEME_MANAGER_NAME, registerThemeManager, } from './kernel/custom-manager/theme';
2
+ export type { ResolvedThemeMode, ResolvedThemeSnapshot, ThemeManagerConfig, ThemeSnapshot, } from './kernel/custom-manager/theme';
package/dist/theme.js ADDED
@@ -0,0 +1 @@
1
+ export{ThemeManager,DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME,registerThemeManager}from"./kernel/custom-manager/theme";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vlian/framework",
3
- "version": "2.0.1",
3
+ "version": "2.0.2",
4
4
  "private": false,
5
5
  "packageManager": "pnpm@10.27.0",
6
6
  "description": "Secra Framework - 一个现代化的低代码框架",
@@ -15,6 +15,16 @@
15
15
  "require": "./dist/index.cjs",
16
16
  "browser": "./dist/index.umd.js"
17
17
  },
18
+ "./theme": {
19
+ "types": "./dist/theme.d.ts",
20
+ "import": "./dist/theme.js",
21
+ "require": "./dist/theme.cjs"
22
+ },
23
+ "./i18n": {
24
+ "types": "./dist/i18n.d.ts",
25
+ "import": "./dist/i18n.js",
26
+ "require": "./dist/i18n.cjs"
27
+ },
18
28
  "./kernel": {
19
29
  "types": "./dist/kernel/index.d.ts",
20
30
  "import": "./dist/kernel/index.js",
@@ -29,6 +39,12 @@
29
39
  },
30
40
  "typesVersions": {
31
41
  "*": {
42
+ "theme": [
43
+ "dist/theme.d.ts"
44
+ ],
45
+ "i18n": [
46
+ "dist/i18n.d.ts"
47
+ ],
32
48
  "kernel": [
33
49
  "dist/kernel/index.d.ts"
34
50
  ],
@@ -45,6 +61,12 @@
45
61
  "dist/index.d.ts",
46
62
  "dist/index.js",
47
63
  "dist/index.umd.js",
64
+ "dist/theme.cjs",
65
+ "dist/theme.d.ts",
66
+ "dist/theme.js",
67
+ "dist/i18n.cjs",
68
+ "dist/i18n.d.ts",
69
+ "dist/i18n.js",
48
70
  "dist/kernel",
49
71
  "README.md",
50
72
  "LICENSE"
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return I18nManager}});const _constants=require("../../custom-manager/i18n/constants");const _i18npersistence=require("./i18n.persistence");const _i18nruntime=require("./i18n.runtime");const _i18nschema=require("./i18n.schema");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let I18nManager=class I18nManager{async initialize(context){this.config=context.getManagerConfig(_constants.I18N_MANAGER_NAME)||_constants.DEFAULT_I18N_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialSnapshot=(0,_i18nschema.normalizeI18nSnapshot)(this.config.initial||{},_constants.DEFAULT_I18N);this.snapshot=await (0,_i18npersistence.loadI18nFromCache)(this.cacheManager,this.config.persistence,initialSnapshot);await (0,_i18nruntime.initializeI18nRuntime)({locale:this.snapshot.locale||"zh-CN",resources:this.snapshot.resources});this.initialized=true}getSnapshot(){return(0,_i18nschema.cloneI18nSnapshot)(this.snapshot)}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setLocale(locale){this.ensureInitialized();const prevSnapshot=this.snapshot;const nextSnapshot=(0,_i18nschema.mergeI18nSnapshot)(prevSnapshot,{locale});if((0,_i18nschema.isI18nEqual)(prevSnapshot,nextSnapshot)){return}this.snapshot=nextSnapshot;await (0,_i18nruntime.switchI18nLocale)(this.snapshot.locale);if(this.cacheManager){await (0,_i18npersistence.saveI18nToCache)(this.cacheManager,this.config.persistence,this.snapshot)}this.emit(this.snapshot,prevSnapshot)}ensureInitialized(){if(!this.initialized){throw new Error("I18nManager must be initialized before use.")}}emit(next,prev){for(const listener of this.listeners){try{listener((0,_i18nschema.cloneI18nSnapshot)(next),(0,_i18nschema.cloneI18nSnapshot)(prev))}catch{}}}constructor(){_define_property(this,"snapshot",(0,_i18nschema.cloneI18nSnapshot)(_constants.DEFAULT_I18N));_define_property(this,"config",_constants.DEFAULT_I18N_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"initialized",false)}};
@@ -1 +0,0 @@
1
- function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_I18N,DEFAULT_I18N_MANAGER_CONFIG,I18N_MANAGER_NAME}from"../../custom-manager/i18n/constants";import{loadI18nFromCache,saveI18nToCache}from"./i18n.persistence";import{initializeI18nRuntime,switchI18nLocale}from"./i18n.runtime";import{cloneI18nSnapshot,isI18nEqual,mergeI18nSnapshot,normalizeI18nSnapshot}from"./i18n.schema";export class I18nManager{async initialize(context){this.config=context.getManagerConfig(I18N_MANAGER_NAME)||DEFAULT_I18N_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialSnapshot=normalizeI18nSnapshot(this.config.initial||{},DEFAULT_I18N);this.snapshot=await loadI18nFromCache(this.cacheManager,this.config.persistence,initialSnapshot);await initializeI18nRuntime({locale:this.snapshot.locale||"zh-CN",resources:this.snapshot.resources});this.initialized=true}getSnapshot(){return cloneI18nSnapshot(this.snapshot)}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setLocale(locale){this.ensureInitialized();const prevSnapshot=this.snapshot;const nextSnapshot=mergeI18nSnapshot(prevSnapshot,{locale});if(isI18nEqual(prevSnapshot,nextSnapshot)){return}this.snapshot=nextSnapshot;await switchI18nLocale(this.snapshot.locale);if(this.cacheManager){await saveI18nToCache(this.cacheManager,this.config.persistence,this.snapshot)}this.emit(this.snapshot,prevSnapshot)}ensureInitialized(){if(!this.initialized){throw new Error("I18nManager must be initialized before use.")}}emit(next,prev){for(const listener of this.listeners){try{listener(cloneI18nSnapshot(next),cloneI18nSnapshot(prev))}catch{}}}constructor(){_define_property(this,"snapshot",cloneI18nSnapshot(DEFAULT_I18N));_define_property(this,"config",DEFAULT_I18N_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"initialized",false)}}
@@ -1 +0,0 @@
1
- function isPlainObject(value){return Object.prototype.toString.call(value)==="[object Object]"}export function cloneI18nSnapshot(snapshot){const resources=snapshot.resources?Object.fromEntries(Object.entries(snapshot.resources).map(([locale,value])=>[locale,{...value}])):undefined;return{locale:snapshot.locale,...resources?{resources}:{}}}export function normalizeI18nSnapshot(value,fallback){const source=isPlainObject(value)?value:{};const locale=typeof source.locale==="string"&&source.locale.trim()?source.locale:fallback.locale;const fallbackResources=fallback.resources;const incomingResources=isPlainObject(source.resources)?Object.fromEntries(Object.entries(source.resources).filter(([,resourceValue])=>isPlainObject(resourceValue)).map(([locale,resourceValue])=>[locale,{...resourceValue}])):undefined;const resources=incomingResources||fallbackResources?{...fallbackResources||{},...incomingResources||{}}:undefined;return{locale,...resources?{resources}:{}}}export function mergeI18nSnapshot(current,next){return normalizeI18nSnapshot({locale:next.locale??current.locale,resources:next.resources??current.resources},current)}export function isI18nEqual(left,right){if(left.locale!==right.locale){return false}const leftResources=left.resources||{};const rightResources=right.resources||{};const leftLocales=Object.keys(leftResources);const rightLocales=Object.keys(rightResources);if(leftLocales.length!==rightLocales.length){return false}for(const locale of leftLocales){if(leftResources[locale]!==rightResources[locale]){return false}}return true}
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return _I18nManager.I18nManager}});const _I18nManager=require("./I18nManager");
@@ -1 +0,0 @@
1
- export { I18nManager } from './I18nManager';
@@ -1 +0,0 @@
1
- export{I18nManager}from"./I18nManager";
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"I18nManager",{enumerable:true,get:function(){return _i18n.I18nManager}});const _i18n=require("../custom-manager/i18n");
@@ -1 +0,0 @@
1
- export { I18nManager } from '../custom-manager/i18n';
@@ -1 +0,0 @@
1
- export{I18nManager}from"../custom-manager/i18n";
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return ThemeManager}});const _constants=require("../../custom-manager/theme/constants");const _themedom=require("./theme.dom");const _themepersistence=require("./theme.persistence");const _themeschema=require("./theme.schema");function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}let ThemeManager=class ThemeManager{async initialize(context){this.config=context.getManagerConfig(_constants.THEME_MANAGER_NAME)||_constants.DEFAULT_THEME_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialTheme=(0,_themeschema.normalizeTheme)(this.config.initial||{},_constants.DEFAULT_THEME);this.theme=await (0,_themepersistence.loadThemeFromCache)(this.cacheManager,this.config.persistence,initialTheme);this.resolvedMode=(0,_themedom.resolveThemeMode)(this.theme);(0,_themedom.applyThemeToDocument)(this.theme,{nextResolvedMode:this.resolvedMode});this.bindSystemThemeObserver();this.initialized=true}getTheme(){return(0,_themeschema.cloneTheme)(this.theme)}getSnapshot(){return this.getTheme()}getResolvedMode(){this.ensureInitialized();return this.resolvedMode}getResolvedTheme(){this.ensureInitialized();return(0,_themeschema.cloneResolvedTheme)({...this.getTheme(),resolvedMode:this.resolvedMode})}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setTheme(nextTheme){this.ensureInitialized();const prevTheme=this.theme;const prevResolvedMode=this.resolvedMode;const mergedTheme=(0,_themeschema.mergeTheme)(prevTheme,nextTheme);const nextResolvedMode=(0,_themedom.resolveThemeMode)(mergedTheme);if((0,_themeschema.isThemeEqual)(prevTheme,mergedTheme)&&(0,_themeschema.isResolvedThemeModeEqual)(prevResolvedMode,nextResolvedMode)){return}this.theme=mergedTheme;this.resolvedMode=nextResolvedMode;(0,_themedom.applyThemeToDocument)(this.theme,{prevTheme,prevResolvedMode,nextResolvedMode});if(this.cacheManager){await (0,_themepersistence.saveThemeToCache)(this.cacheManager,this.config.persistence,this.theme)}this.emit(this.theme,prevTheme)}ensureInitialized(){if(!this.initialized){throw new Error("ThemeManager must be initialized before use.")}}destroy(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=null;this.listeners.clear();this.initialized=false}bindSystemThemeObserver(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=(0,_themedom.observeSystemThemeChange)(nextResolvedMode=>{if(this.theme.mode!=="system"){return}const prevResolvedMode=this.resolvedMode;if((0,_themeschema.isResolvedThemeModeEqual)(prevResolvedMode,nextResolvedMode)){return}this.resolvedMode=nextResolvedMode;(0,_themedom.applyThemeToDocument)(this.theme,{prevTheme:this.theme,prevResolvedMode,nextResolvedMode});this.emit(this.theme,this.theme)})||null}emit(next,prev){for(const listener of this.listeners){try{listener((0,_themeschema.cloneTheme)(next),(0,_themeschema.cloneTheme)(prev))}catch{}}}constructor(){_define_property(this,"theme",(0,_themeschema.cloneTheme)(_constants.DEFAULT_THEME));_define_property(this,"resolvedMode",(0,_themedom.resolveThemeMode)(_constants.DEFAULT_THEME));_define_property(this,"config",_constants.DEFAULT_THEME_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"stopSystemThemeObserver",null);_define_property(this,"initialized",false)}};
@@ -1 +0,0 @@
1
- function _define_property(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true})}else{obj[key]=value}return obj}import{DEFAULT_THEME,DEFAULT_THEME_MANAGER_CONFIG,THEME_MANAGER_NAME}from"../../custom-manager/theme/constants";import{applyThemeToDocument,observeSystemThemeChange,resolveThemeMode}from"./theme.dom";import{loadThemeFromCache,saveThemeToCache}from"./theme.persistence";import{cloneResolvedTheme,cloneTheme,isResolvedThemeModeEqual,isThemeEqual,mergeTheme,normalizeTheme}from"./theme.schema";export class ThemeManager{async initialize(context){this.config=context.getManagerConfig(THEME_MANAGER_NAME)||DEFAULT_THEME_MANAGER_CONFIG;this.cacheManager=context.cacheManager;const initialTheme=normalizeTheme(this.config.initial||{},DEFAULT_THEME);this.theme=await loadThemeFromCache(this.cacheManager,this.config.persistence,initialTheme);this.resolvedMode=resolveThemeMode(this.theme);applyThemeToDocument(this.theme,{nextResolvedMode:this.resolvedMode});this.bindSystemThemeObserver();this.initialized=true}getTheme(){return cloneTheme(this.theme)}getSnapshot(){return this.getTheme()}getResolvedMode(){this.ensureInitialized();return this.resolvedMode}getResolvedTheme(){this.ensureInitialized();return cloneResolvedTheme({...this.getTheme(),resolvedMode:this.resolvedMode})}subscribe(listener){this.listeners.add(listener);return()=>{this.listeners.delete(listener)}}async setTheme(nextTheme){this.ensureInitialized();const prevTheme=this.theme;const prevResolvedMode=this.resolvedMode;const mergedTheme=mergeTheme(prevTheme,nextTheme);const nextResolvedMode=resolveThemeMode(mergedTheme);if(isThemeEqual(prevTheme,mergedTheme)&&isResolvedThemeModeEqual(prevResolvedMode,nextResolvedMode)){return}this.theme=mergedTheme;this.resolvedMode=nextResolvedMode;applyThemeToDocument(this.theme,{prevTheme,prevResolvedMode,nextResolvedMode});if(this.cacheManager){await saveThemeToCache(this.cacheManager,this.config.persistence,this.theme)}this.emit(this.theme,prevTheme)}ensureInitialized(){if(!this.initialized){throw new Error("ThemeManager must be initialized before use.")}}destroy(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=null;this.listeners.clear();this.initialized=false}bindSystemThemeObserver(){this.stopSystemThemeObserver?.();this.stopSystemThemeObserver=observeSystemThemeChange(nextResolvedMode=>{if(this.theme.mode!=="system"){return}const prevResolvedMode=this.resolvedMode;if(isResolvedThemeModeEqual(prevResolvedMode,nextResolvedMode)){return}this.resolvedMode=nextResolvedMode;applyThemeToDocument(this.theme,{prevTheme:this.theme,prevResolvedMode,nextResolvedMode});this.emit(this.theme,this.theme)})||null}emit(next,prev){for(const listener of this.listeners){try{listener(cloneTheme(next),cloneTheme(prev))}catch{}}}constructor(){_define_property(this,"theme",cloneTheme(DEFAULT_THEME));_define_property(this,"resolvedMode",resolveThemeMode(DEFAULT_THEME));_define_property(this,"config",DEFAULT_THEME_MANAGER_CONFIG);_define_property(this,"listeners",new Set);_define_property(this,"cacheManager",null);_define_property(this,"stopSystemThemeObserver",null);_define_property(this,"initialized",false)}}
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return _ThemeManager.ThemeManager}});const _ThemeManager=require("./ThemeManager");
@@ -1 +0,0 @@
1
- export { ThemeManager } from './ThemeManager';
@@ -1 +0,0 @@
1
- export{ThemeManager}from"./ThemeManager";
@@ -1 +0,0 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:true});Object.defineProperty(exports,"ThemeManager",{enumerable:true,get:function(){return _theme.ThemeManager}});const _theme=require("../custom-manager/theme");
@@ -1 +0,0 @@
1
- export { ThemeManager } from '../custom-manager/theme';
@@ -1 +0,0 @@
1
- export{ThemeManager}from"../custom-manager/theme";