@vlian/framework 1.2.54 → 1.2.56

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 (97) hide show
  1. package/dist/analytics.umd.js +1 -1
  2. package/dist/core/initialization/initialization.cjs.map +1 -1
  3. package/dist/core/initialization/initialization.js +3 -3
  4. package/dist/core/initialization/initialization.js.map +1 -1
  5. package/dist/core/router/validation/RouterConfigValidator.d.ts +2 -2
  6. package/dist/core/router/validation/schema.d.ts +3 -3
  7. package/dist/index.umd.js +497 -281
  8. package/dist/index.umd.js.map +1 -1
  9. package/dist/kernel/manager/i18n/I18nManager.cjs +93 -0
  10. package/dist/kernel/manager/i18n/I18nManager.cjs.map +1 -0
  11. package/dist/kernel/manager/i18n/I18nManager.d.ts +15 -0
  12. package/dist/kernel/manager/i18n/I18nManager.js +83 -0
  13. package/dist/kernel/manager/i18n/I18nManager.js.map +1 -0
  14. package/dist/kernel/manager/i18n/i18n.persistence.cjs +59 -0
  15. package/dist/kernel/manager/i18n/i18n.persistence.cjs.map +1 -0
  16. package/dist/kernel/manager/i18n/i18n.persistence.d.ts +5 -0
  17. package/dist/kernel/manager/i18n/i18n.persistence.js +38 -0
  18. package/dist/kernel/manager/i18n/i18n.persistence.js.map +1 -0
  19. package/dist/kernel/manager/i18n/i18n.schema.cjs +88 -0
  20. package/dist/kernel/manager/i18n/i18n.schema.cjs.map +1 -0
  21. package/dist/kernel/manager/i18n/i18n.schema.d.ts +6 -0
  22. package/dist/kernel/manager/i18n/i18n.schema.js +64 -0
  23. package/dist/kernel/manager/i18n/i18n.schema.js.map +1 -0
  24. package/dist/kernel/manager/i18n/index.cjs +13 -0
  25. package/dist/kernel/manager/i18n/index.cjs.map +1 -0
  26. package/dist/kernel/manager/i18n/index.d.ts +1 -0
  27. package/dist/kernel/manager/i18n/index.js +3 -0
  28. package/dist/kernel/manager/i18n/index.js.map +1 -0
  29. package/dist/kernel/manager/i18nManager.cjs +2 -77
  30. package/dist/kernel/manager/i18nManager.cjs.map +1 -1
  31. package/dist/kernel/manager/i18nManager.d.ts +1 -13
  32. package/dist/kernel/manager/i18nManager.js +1 -76
  33. package/dist/kernel/manager/i18nManager.js.map +1 -1
  34. package/dist/kernel/manager/logger/LoggerManager.cjs +109 -0
  35. package/dist/kernel/manager/logger/LoggerManager.cjs.map +1 -0
  36. package/dist/kernel/manager/logger/LoggerManager.d.ts +21 -0
  37. package/dist/kernel/manager/logger/LoggerManager.js +99 -0
  38. package/dist/kernel/manager/logger/LoggerManager.js.map +1 -0
  39. package/dist/kernel/manager/logger/index.cjs +13 -0
  40. package/dist/kernel/manager/logger/index.cjs.map +1 -0
  41. package/dist/kernel/manager/logger/index.d.ts +1 -0
  42. package/dist/kernel/manager/logger/index.js +3 -0
  43. package/dist/kernel/manager/logger/index.js.map +1 -0
  44. package/dist/kernel/manager/logger/logger.persistence.cjs +64 -0
  45. package/dist/kernel/manager/logger/logger.persistence.cjs.map +1 -0
  46. package/dist/kernel/manager/logger/logger.persistence.d.ts +6 -0
  47. package/dist/kernel/manager/logger/logger.persistence.js +43 -0
  48. package/dist/kernel/manager/logger/logger.persistence.js.map +1 -0
  49. package/dist/kernel/manager/logger/logger.schema.cjs +76 -0
  50. package/dist/kernel/manager/logger/logger.schema.cjs.map +1 -0
  51. package/dist/kernel/manager/logger/logger.schema.d.ts +8 -0
  52. package/dist/kernel/manager/logger/logger.schema.js +55 -0
  53. package/dist/kernel/manager/logger/logger.schema.js.map +1 -0
  54. package/dist/kernel/manager/loggerManager.cjs +2 -103
  55. package/dist/kernel/manager/loggerManager.cjs.map +1 -1
  56. package/dist/kernel/manager/loggerManager.d.ts +1 -18
  57. package/dist/kernel/manager/loggerManager.js +1 -102
  58. package/dist/kernel/manager/loggerManager.js.map +1 -1
  59. package/dist/kernel/manager/theme/ThemeManager.cjs +86 -0
  60. package/dist/kernel/manager/theme/ThemeManager.cjs.map +1 -0
  61. package/dist/kernel/manager/theme/ThemeManager.d.ts +16 -0
  62. package/dist/kernel/manager/theme/ThemeManager.js +76 -0
  63. package/dist/kernel/manager/theme/ThemeManager.js.map +1 -0
  64. package/dist/kernel/manager/theme/index.cjs +13 -0
  65. package/dist/kernel/manager/theme/index.cjs.map +1 -0
  66. package/dist/kernel/manager/theme/index.d.ts +1 -0
  67. package/dist/kernel/manager/theme/index.js +3 -0
  68. package/dist/kernel/manager/theme/index.js.map +1 -0
  69. package/dist/kernel/manager/theme/theme.dom.cjs +63 -0
  70. package/dist/kernel/manager/theme/theme.dom.cjs.map +1 -0
  71. package/dist/kernel/manager/theme/theme.dom.d.ts +3 -0
  72. package/dist/kernel/manager/theme/theme.dom.js +45 -0
  73. package/dist/kernel/manager/theme/theme.dom.js.map +1 -0
  74. package/dist/kernel/manager/theme/theme.persistence.cjs +59 -0
  75. package/dist/kernel/manager/theme/theme.persistence.cjs.map +1 -0
  76. package/dist/kernel/manager/theme/theme.persistence.d.ts +5 -0
  77. package/dist/kernel/manager/theme/theme.persistence.js +38 -0
  78. package/dist/kernel/manager/theme/theme.persistence.js.map +1 -0
  79. package/dist/kernel/manager/theme/theme.schema.cjs +124 -0
  80. package/dist/kernel/manager/theme/theme.schema.cjs.map +1 -0
  81. package/dist/kernel/manager/theme/theme.schema.d.ts +7 -0
  82. package/dist/kernel/manager/theme/theme.schema.js +97 -0
  83. package/dist/kernel/manager/theme/theme.schema.js.map +1 -0
  84. package/dist/kernel/manager/themeManager.cjs +2 -95
  85. package/dist/kernel/manager/themeManager.cjs.map +1 -1
  86. package/dist/kernel/manager/themeManager.d.ts +1 -15
  87. package/dist/kernel/manager/themeManager.js +1 -94
  88. package/dist/kernel/manager/themeManager.js.map +1 -1
  89. package/dist/kernel/types.d.ts +3 -3
  90. package/dist/kernel/types.js.map +1 -1
  91. package/dist/library/locale/index.cjs +8 -34
  92. package/dist/library/locale/index.cjs.map +1 -1
  93. package/dist/library/locale/index.d.ts +4 -4
  94. package/dist/library/locale/index.js +5 -34
  95. package/dist/library/locale/index.js.map +1 -1
  96. package/dist/state.umd.js +1 -1
  97. package/package.json +3 -1
@@ -1,96 +1,3 @@
1
- function _define_property(obj, key, value) {
2
- if (key in obj) {
3
- Object.defineProperty(obj, key, {
4
- value: value,
5
- enumerable: true,
6
- configurable: true,
7
- writable: true
8
- });
9
- } else {
10
- obj[key] = value;
11
- }
12
- return obj;
13
- }
14
- import { DEFAULT_CONFIG, DEFAULT_THEME } from "../constants";
15
- function applyThemeToDocument(theme) {
16
- if (typeof document === 'undefined') {
17
- return;
18
- }
19
- const root = document.documentElement;
20
- root.classList.remove('light', 'dark');
21
- const resolvedMode = theme.mode === 'system' ? typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : theme.mode;
22
- root.classList.add(resolvedMode);
23
- if (theme.primaryColor) {
24
- root.style.setProperty('--app-primary-color', theme.primaryColor);
25
- }
26
- if (theme.tokens) {
27
- Object.entries(theme.tokens).forEach(([token, tokenValue])=>{
28
- root.style.setProperty(`--${token}`, String(tokenValue));
29
- });
30
- }
31
- }
32
- export class ThemeManager {
33
- async initialize(context) {
34
- this.config = context.config.theme;
35
- this.theme = {
36
- ...DEFAULT_THEME,
37
- ...this.config.initial || {}
38
- };
39
- this.cache = context.cacheManager;
40
- const { key = "vlian:kernel:theme" } = this.config.persistence || {};
41
- const persisted = await this.cache.get(key, {
42
- defaultValue: this.theme
43
- });
44
- if (persisted !== null) {
45
- this.theme = {
46
- ...this.theme,
47
- ...persisted
48
- };
49
- } else {
50
- await this.cache.set(key, persisted);
51
- }
52
- applyThemeToDocument(this.theme);
53
- }
54
- getTheme() {
55
- return {
56
- ...this.theme
57
- };
58
- }
59
- subscribe(listener) {
60
- this.listeners.add(listener);
61
- return ()=>{
62
- this.listeners.delete(listener);
63
- };
64
- }
65
- emit(next, prev) {
66
- this.listeners.forEach((listener)=>{
67
- listener({
68
- ...next
69
- }, {
70
- ...prev
71
- });
72
- });
73
- }
74
- async setTheme(nextTheme) {
75
- const prev = this.theme;
76
- this.theme = {
77
- ...this.theme,
78
- ...nextTheme
79
- };
80
- applyThemeToDocument(this.theme);
81
- const { key = "vlian:kernel:theme" } = this.config.persistence || {};
82
- await this.cache?.set(key, this.theme);
83
- this.emit(this.theme, prev);
84
- }
85
- getSnapshot() {
86
- return this.getTheme();
87
- }
88
- constructor(){
89
- _define_property(this, "theme", DEFAULT_THEME);
90
- _define_property(this, "config", DEFAULT_CONFIG.theme);
91
- _define_property(this, "listeners", new Set());
92
- _define_property(this, "cache", undefined);
93
- }
94
- }
1
+ export { ThemeManager } from "./theme";
95
2
 
96
3
  //# sourceMappingURL=themeManager.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["import type { KernelConfig, KernelManager, KernelManagerContext, ThemeSnapshot } from '../types';\nimport { DEFAULT_CONFIG, DEFAULT_THEME } from '../constants';\nimport type{StorageInstance} from \"@vlian/utils\";\n\ntype ThemeListener = (next: ThemeSnapshot, prev: ThemeSnapshot) => void;\n\nfunction applyThemeToDocument(theme: ThemeSnapshot): void {\n if (typeof document === 'undefined') {\n return;\n }\n\n const root = document.documentElement;\n root.classList.remove('light', 'dark');\n\n const resolvedMode = theme.mode === 'system'\n ? (typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light')\n : theme.mode;\n\n root.classList.add(resolvedMode);\n\n if (theme.primaryColor) {\n root.style.setProperty('--app-primary-color', theme.primaryColor);\n }\n\n if (theme.tokens) {\n Object.entries(theme.tokens).forEach(([token, tokenValue]) => {\n root.style.setProperty(`--${token}`, String(tokenValue));\n });\n }\n}\n\nexport class ThemeManager implements KernelManager<ThemeSnapshot> {\n private theme: ThemeSnapshot = DEFAULT_THEME;\n private config: KernelConfig['theme'] = DEFAULT_CONFIG.theme;\n private listeners = new Set<ThemeListener>();\n private cache: StorageInstance|undefined = undefined;\n\n public async initialize(context: KernelManagerContext): Promise<void> {\n this.config = context.config.theme;\n this.theme = { ...DEFAULT_THEME, ...(this.config.initial || {}) };\n\n this.cache = context.cacheManager;\n\n const { key = \"vlian:kernel:theme\" } = this.config.persistence || {};\n\n const persisted = await this.cache.get<ThemeSnapshot>(key, {\n defaultValue: this.theme\n })\n\n if (persisted !== null) {\n this.theme = { ...this.theme, ...persisted };\n } else {\n await this.cache.set(key, persisted);\n }\n\n applyThemeToDocument(this.theme);\n }\n\n public getTheme(): ThemeSnapshot {\n return { ...this.theme };\n }\n\n public subscribe(listener: ThemeListener): () => void {\n this.listeners.add(listener);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private emit(next: ThemeSnapshot, prev: ThemeSnapshot): void {\n this.listeners.forEach((listener) => {\n listener({ ...next }, { ...prev });\n });\n }\n\n public async setTheme(nextTheme: ThemeSnapshot): Promise<void> {\n const prev = this.theme;\n this.theme = { ...this.theme, ...nextTheme };\n applyThemeToDocument(this.theme);\n\n const { key = \"vlian:kernel:theme\" } = this.config.persistence || {};\n\n await this.cache?.set(key, this.theme)\n\n this.emit(this.theme, prev);\n }\n\n public getSnapshot(): ThemeSnapshot {\n return this.getTheme();\n }\n}\n"],"names":["DEFAULT_CONFIG","DEFAULT_THEME","applyThemeToDocument","theme","document","root","documentElement","classList","remove","resolvedMode","mode","window","matchMedia","matches","add","primaryColor","style","setProperty","tokens","Object","entries","forEach","token","tokenValue","String","ThemeManager","initialize","context","config","initial","cache","cacheManager","key","persistence","persisted","get","defaultValue","set","getTheme","subscribe","listener","listeners","delete","emit","next","prev","setTheme","nextTheme","getSnapshot","Set","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/kernel/manager/themeManager.ts"],"sourcesContent":["export { ThemeManager } from './theme';\n"],"names":["ThemeManager"],"mappings":"AAAA,SAASA,YAAY,QAAQ,UAAU"}
@@ -1,8 +1,8 @@
1
1
  import type { LogLevel } from '@vlian/logger';
2
- import type { LangType } from '../library/locale/types';
3
2
  import type { StartOptions as CoreStartOptions } from '../core/types';
4
3
  import type { StorageOptions } from '../types';
5
4
  import type { StorageInstance } from "@vlian/utils";
5
+ import type { Resource } from "i18next";
6
6
  export type KernelInstanceId = string;
7
7
  export type KernelStorageDriver = 'localStorage' | 'sessionStorage' | 'indexedDB' | 'none';
8
8
  export interface ThemeSnapshot {
@@ -11,8 +11,8 @@ export interface ThemeSnapshot {
11
11
  tokens?: Record<string, string | number>;
12
12
  }
13
13
  export interface I18nSnapshot {
14
- locale: LangType;
15
- resources?: Record<LangType, Record<string, unknown>>;
14
+ locale: string;
15
+ resources?: Resource;
16
16
  }
17
17
  export interface PersistenceOptions {
18
18
  enabled?: boolean;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/kernel/types.ts"],"sourcesContent":["import type { LogLevel } from '@vlian/logger';\nimport type { LangType } from '../library/locale/types';\nimport type { StartOptions as CoreStartOptions } from '../core/types';\nimport type { StorageOptions } from '../types';\nimport type {StorageInstance} from \"@vlian/utils\"\n\nexport type KernelInstanceId = string;\nexport type KernelStorageDriver = 'localStorage' | 'sessionStorage' | 'indexedDB' | 'none';\n\nexport interface ThemeSnapshot {\n mode: 'light' | 'dark' | 'system';\n primaryColor?: string;\n tokens?: Record<string, string | number>;\n}\n\nexport interface I18nSnapshot {\n locale: LangType;\n resources?: Record<LangType, Record<string, unknown>>;\n}\n\nexport interface PersistenceOptions {\n enabled?: boolean;\n storage?: KernelStorageDriver;\n key?: string;\n}\n\nexport interface LoggerManagerConfig {\n level?: LogLevel;\n persistence?: PersistenceOptions;\n}\n\nexport interface CacheManagerConfig {\n enabled?: boolean;\n storageOptions?: Partial<StorageOptions>;\n}\n\nexport interface ThemeManagerConfig {\n initial?: ThemeSnapshot;\n persistence?: PersistenceOptions;\n}\n\nexport interface I18nManagerConfig {\n initial?: I18nSnapshot;\n persistence?: PersistenceOptions;\n}\n\nexport interface KernelConfig {\n logger: LoggerManagerConfig;\n cache: CacheManagerConfig;\n theme: ThemeManagerConfig;\n i18n: I18nManagerConfig;\n}\n\nexport interface KernelTimingMetric {\n phase: string;\n startTime: number;\n endTime: number;\n duration: number;\n}\n\nexport interface KernelManagerContext {\n instanceId: KernelInstanceId;\n config: KernelConfig;\n cacheManager: StorageInstance;\n}\n\nexport interface KernelManager<TSnapshot = unknown> {\n initialize: (context: KernelManagerContext) => Promise<void> | void;\n getSnapshot?: () => TSnapshot;\n destroy?: () => Promise<void> | void;\n}\n\nexport interface KernelRenderContext {\n instanceId: KernelInstanceId;\n config: KernelConfig;\n}\n\nexport interface StartupHooks {\n initialize?: () => Promise<void> | void;\n}\n\nexport interface StartOptions extends CoreStartOptions {\n config?: Partial<KernelConfig>;\n configLoader?: () => Promise<Partial<KernelConfig> | void> | Partial<KernelConfig> | void;\n render?: (context: KernelRenderContext) => Promise<void> | void;\n customManagers?: Record<string, KernelManager>;\n hooks?: StartupHooks;\n}\n\nexport type KernelStartOptions = StartOptions;\n"],"names":[],"mappings":"AAyFA,WAA8C"}
1
+ {"version":3,"sources":["../../src/kernel/types.ts"],"sourcesContent":["import type { LogLevel } from '@vlian/logger';\nimport type { StartOptions as CoreStartOptions } from '../core/types';\nimport type { StorageOptions } from '../types';\nimport type {StorageInstance} from \"@vlian/utils\"\nimport type { Resource } from \"i18next\";\n\nexport type KernelInstanceId = string;\nexport type KernelStorageDriver = 'localStorage' | 'sessionStorage' | 'indexedDB' | 'none';\n\nexport interface ThemeSnapshot {\n mode: 'light' | 'dark' | 'system';\n primaryColor?: string;\n tokens?: Record<string, string | number>;\n}\n\nexport interface I18nSnapshot {\n locale: string;\n resources?: Resource;\n}\n\nexport interface PersistenceOptions {\n enabled?: boolean;\n storage?: KernelStorageDriver;\n key?: string;\n}\n\nexport interface LoggerManagerConfig {\n level?: LogLevel;\n persistence?: PersistenceOptions;\n}\n\nexport interface CacheManagerConfig {\n enabled?: boolean;\n storageOptions?: Partial<StorageOptions>;\n}\n\nexport interface ThemeManagerConfig {\n initial?: ThemeSnapshot;\n persistence?: PersistenceOptions;\n}\n\nexport interface I18nManagerConfig {\n initial?: I18nSnapshot;\n persistence?: PersistenceOptions;\n}\n\nexport interface KernelConfig {\n logger: LoggerManagerConfig;\n cache: CacheManagerConfig;\n theme: ThemeManagerConfig;\n i18n: I18nManagerConfig;\n}\n\nexport interface KernelTimingMetric {\n phase: string;\n startTime: number;\n endTime: number;\n duration: number;\n}\n\nexport interface KernelManagerContext {\n instanceId: KernelInstanceId;\n config: KernelConfig;\n cacheManager: StorageInstance;\n}\n\nexport interface KernelManager<TSnapshot = unknown> {\n initialize: (context: KernelManagerContext) => Promise<void> | void;\n getSnapshot?: () => TSnapshot;\n destroy?: () => Promise<void> | void;\n}\n\nexport interface KernelRenderContext {\n instanceId: KernelInstanceId;\n config: KernelConfig;\n}\n\nexport interface StartupHooks {\n initialize?: () => Promise<void> | void;\n}\n\nexport interface StartOptions extends CoreStartOptions {\n config?: Partial<KernelConfig>;\n configLoader?: () => Promise<Partial<KernelConfig> | void> | Partial<KernelConfig> | void;\n render?: (context: KernelRenderContext) => Promise<void> | void;\n customManagers?: Record<string, KernelManager>;\n hooks?: StartupHooks;\n}\n\nexport type KernelStartOptions = StartOptions;\n"],"names":[],"mappings":"AAyFA,WAA8C"}
@@ -12,6 +12,9 @@ _export(exports, {
12
12
  get $t () {
13
13
  return $t;
14
14
  },
15
+ get reactI18nextInstance () {
16
+ return reactI18nextInstance;
17
+ },
15
18
  get setLang () {
16
19
  return setLang;
17
20
  },
@@ -21,47 +24,18 @@ _export(exports, {
21
24
  });
22
25
  const _i18next = /*#__PURE__*/ _interop_require_default(require("i18next"));
23
26
  const _reacti18next = require("react-i18next");
24
- const _enus = /*#__PURE__*/ _interop_require_default(require("./langs/en-us"));
25
- const _zhcn = /*#__PURE__*/ _interop_require_default(require("./langs/zh-cn"));
26
27
  function _interop_require_default(obj) {
27
28
  return obj && obj.__esModule ? obj : {
28
29
  default: obj
29
30
  };
30
31
  }
31
- let setupPromise = null;
32
- function setupI18n(otherLocales = {
33
- 'en-US': {},
34
- 'zh-CN': {}
35
- }) {
36
- const locales = {
37
- 'en-US': {
38
- translation: Object.assign({}, _enus.default, otherLocales['en-US'])
39
- },
40
- 'zh-CN': {
41
- translation: Object.assign({}, _zhcn.default, otherLocales['zh-CN'])
42
- }
43
- };
44
- if (_i18next.default.isInitialized) {
45
- _i18next.default.addResourceBundle('en-US', 'translation', locales['en-US'].translation, true, true);
46
- _i18next.default.addResourceBundle('zh-CN', 'translation', locales['zh-CN'].translation, true, true);
47
- return Promise.resolve(_i18next.default);
48
- }
49
- if (setupPromise) {
50
- return setupPromise;
51
- }
52
- const initPromise = _i18next.default.use(_reacti18next.initReactI18next).init({
53
- interpolation: {
54
- escapeValue: false
55
- },
56
- lng: 'zh-CN',
57
- resources: locales
58
- }).then(()=>_i18next.default);
59
- setupPromise = initPromise;
60
- return initPromise;
32
+ const reactI18nextInstance = _i18next.default.use(_reacti18next.initReactI18next);
33
+ async function setupI18n(options, callback) {
34
+ await reactI18nextInstance.init(options, callback);
61
35
  }
62
36
  const $t = _i18next.default.t;
63
- function setLang(locale) {
64
- _i18next.default.changeLanguage(locale);
37
+ async function setLang(locale, callback) {
38
+ await _i18next.default.changeLanguage(locale, callback);
65
39
  }
66
40
 
67
41
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/library/locale/index.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport enUS from './langs/en-us';\nimport zhCN from './langs/zh-cn';\n\nimport { LangType, Schema } from \"./types\"\n\nlet setupPromise: Promise<typeof i18n> | null = null;\n\n/** Setup plugin i18n */\nexport function setupI18n(otherLocales: Record<LangType, Record<string, unknown>> = {\n 'en-US': {},\n 'zh-CN': {}\n}): Promise<typeof i18n> {\n const locales: Record<LangType, Schema> = {\n 'en-US': {\n translation: Object.assign({}, enUS, otherLocales['en-US'])\n },\n 'zh-CN': {\n translation: Object.assign({}, zhCN, otherLocales['zh-CN'])\n }\n };\n\n if (i18n.isInitialized) {\n i18n.addResourceBundle('en-US', 'translation', locales['en-US'].translation, true, true);\n i18n.addResourceBundle('zh-CN', 'translation', locales['zh-CN'].translation, true, true);\n return Promise.resolve(i18n);\n }\n\n if (setupPromise) {\n return setupPromise;\n }\n\n const initPromise = i18n.use(initReactI18next).init({\n interpolation: {\n escapeValue: false\n },\n lng: 'zh-CN',\n resources: locales\n }).then(() => i18n);\n\n setupPromise = initPromise;\n\n return initPromise;\n}\n\nexport const $t = i18n.t;\n\nexport function setLang(locale: LangType) {\n i18n.changeLanguage(locale);\n}\n"],"names":["$t","setLang","setupI18n","setupPromise","otherLocales","locales","translation","Object","assign","enUS","zhCN","i18n","isInitialized","addResourceBundle","Promise","resolve","initPromise","use","initReactI18next","init","interpolation","escapeValue","lng","resources","then","t","locale","changeLanguage"],"mappings":";;;;;;;;;;;QA8CaA;eAAAA;;QAEGC;eAAAA;;QAtCAC;eAAAA;;;gEAVC;8BACgB;6DAChB;6DACA;;;;;;AAIjB,IAAIC,eAA4C;AAGzC,SAASD,UAAUE,eAA0D;IAChF,SAAS,CAAC;IACV,SAAS,CAAC;AACd,CAAC;IACG,MAAMC,UAAoC;QACtC,SAAS;YACLC,aAAaC,OAAOC,MAAM,CAAC,CAAC,GAAGC,aAAI,EAAEL,YAAY,CAAC,QAAQ;QAC9D;QACA,SAAS;YACLE,aAAaC,OAAOC,MAAM,CAAC,CAAC,GAAGE,aAAI,EAAEN,YAAY,CAAC,QAAQ;QAC9D;IACJ;IAEA,IAAIO,gBAAI,CAACC,aAAa,EAAE;QACpBD,gBAAI,CAACE,iBAAiB,CAAC,SAAS,eAAeR,OAAO,CAAC,QAAQ,CAACC,WAAW,EAAE,MAAM;QACnFK,gBAAI,CAACE,iBAAiB,CAAC,SAAS,eAAeR,OAAO,CAAC,QAAQ,CAACC,WAAW,EAAE,MAAM;QACnF,OAAOQ,QAAQC,OAAO,CAACJ,gBAAI;IAC/B;IAEA,IAAIR,cAAc;QACd,OAAOA;IACX;IAEA,MAAMa,cAAcL,gBAAI,CAACM,GAAG,CAACC,8BAAgB,EAAEC,IAAI,CAAC;QAChDC,eAAe;YACXC,aAAa;QACjB;QACAC,KAAK;QACLC,WAAWlB;IACf,GAAGmB,IAAI,CAAC,IAAMb,gBAAI;IAElBR,eAAea;IAEf,OAAOA;AACX;AAEO,MAAMhB,KAAKW,gBAAI,CAACc,CAAC;AAEjB,SAASxB,QAAQyB,MAAgB;IACpCf,gBAAI,CAACgB,cAAc,CAACD;AACxB"}
1
+ {"version":3,"sources":["../../../src/library/locale/index.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport type { Callback, InitOptions } from \"i18next\";\nexport const reactI18nextInstance = i18n.use(initReactI18next);\n\n\n/** Setup plugin i18n */\nexport async function setupI18n <T = unknown>(options: InitOptions<T>, callback?: Callback): Promise<void> {\n await reactI18nextInstance.init(options, callback);\n}\n\nexport const $t = i18n.t;\n\nexport async function setLang(locale: string, callback?: Callback) {\n await i18n.changeLanguage(locale, callback);\n}\n"],"names":["$t","reactI18nextInstance","setLang","setupI18n","i18n","use","initReactI18next","options","callback","init","t","locale","changeLanguage"],"mappings":";;;;;;;;;;;QAWaA;eAAAA;;QARAC;eAAAA;;QAUSC;eAAAA;;QANAC;eAAAA;;;gEAPL;8BACgB;;;;;;AAE1B,MAAMF,uBAAuBG,gBAAI,CAACC,GAAG,CAACC,8BAAgB;AAItD,eAAeH,UAAwBI,OAAuB,EAAEC,QAAmB;IACtF,MAAMP,qBAAqBQ,IAAI,CAACF,SAASC;AAC7C;AAEO,MAAMR,KAAKI,gBAAI,CAACM,CAAC;AAEjB,eAAeR,QAAQS,MAAc,EAAEH,QAAmB;IAC7D,MAAMJ,gBAAI,CAACQ,cAAc,CAACD,QAAQH;AACtC"}
@@ -1,6 +1,6 @@
1
- import i18n from 'i18next';
2
- import { LangType } from "./types";
1
+ import type { Callback, InitOptions } from "i18next";
2
+ export declare const reactI18nextInstance: import("i18next").i18n;
3
3
  /** Setup plugin i18n */
4
- export declare function setupI18n(otherLocales?: Record<LangType, Record<string, unknown>>): Promise<typeof i18n>;
4
+ export declare function setupI18n<T = unknown>(options: InitOptions<T>, callback?: Callback): Promise<void>;
5
5
  export declare const $t: import("i18next").TFunction<["translation", ...string[]], undefined>;
6
- export declare function setLang(locale: LangType): void;
6
+ export declare function setLang(locale: string, callback?: Callback): Promise<void>;
@@ -1,41 +1,12 @@
1
1
  import i18n from "i18next";
2
2
  import { initReactI18next } from "react-i18next";
3
- import enUS from "./langs/en-us";
4
- import zhCN from "./langs/zh-cn";
5
- let setupPromise = null;
6
- /** Setup plugin i18n */ export function setupI18n(otherLocales = {
7
- 'en-US': {},
8
- 'zh-CN': {}
9
- }) {
10
- const locales = {
11
- 'en-US': {
12
- translation: Object.assign({}, enUS, otherLocales['en-US'])
13
- },
14
- 'zh-CN': {
15
- translation: Object.assign({}, zhCN, otherLocales['zh-CN'])
16
- }
17
- };
18
- if (i18n.isInitialized) {
19
- i18n.addResourceBundle('en-US', 'translation', locales['en-US'].translation, true, true);
20
- i18n.addResourceBundle('zh-CN', 'translation', locales['zh-CN'].translation, true, true);
21
- return Promise.resolve(i18n);
22
- }
23
- if (setupPromise) {
24
- return setupPromise;
25
- }
26
- const initPromise = i18n.use(initReactI18next).init({
27
- interpolation: {
28
- escapeValue: false
29
- },
30
- lng: 'zh-CN',
31
- resources: locales
32
- }).then(()=>i18n);
33
- setupPromise = initPromise;
34
- return initPromise;
3
+ export const reactI18nextInstance = i18n.use(initReactI18next);
4
+ /** Setup plugin i18n */ export async function setupI18n(options, callback) {
5
+ await reactI18nextInstance.init(options, callback);
35
6
  }
36
7
  export const $t = i18n.t;
37
- export function setLang(locale) {
38
- i18n.changeLanguage(locale);
8
+ export async function setLang(locale, callback) {
9
+ await i18n.changeLanguage(locale, callback);
39
10
  }
40
11
 
41
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/library/locale/index.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport enUS from './langs/en-us';\nimport zhCN from './langs/zh-cn';\n\nimport { LangType, Schema } from \"./types\"\n\nlet setupPromise: Promise<typeof i18n> | null = null;\n\n/** Setup plugin i18n */\nexport function setupI18n(otherLocales: Record<LangType, Record<string, unknown>> = {\n 'en-US': {},\n 'zh-CN': {}\n}): Promise<typeof i18n> {\n const locales: Record<LangType, Schema> = {\n 'en-US': {\n translation: Object.assign({}, enUS, otherLocales['en-US'])\n },\n 'zh-CN': {\n translation: Object.assign({}, zhCN, otherLocales['zh-CN'])\n }\n };\n\n if (i18n.isInitialized) {\n i18n.addResourceBundle('en-US', 'translation', locales['en-US'].translation, true, true);\n i18n.addResourceBundle('zh-CN', 'translation', locales['zh-CN'].translation, true, true);\n return Promise.resolve(i18n);\n }\n\n if (setupPromise) {\n return setupPromise;\n }\n\n const initPromise = i18n.use(initReactI18next).init({\n interpolation: {\n escapeValue: false\n },\n lng: 'zh-CN',\n resources: locales\n }).then(() => i18n);\n\n setupPromise = initPromise;\n\n return initPromise;\n}\n\nexport const $t = i18n.t;\n\nexport function setLang(locale: LangType) {\n i18n.changeLanguage(locale);\n}\n"],"names":["i18n","initReactI18next","enUS","zhCN","setupPromise","setupI18n","otherLocales","locales","translation","Object","assign","isInitialized","addResourceBundle","Promise","resolve","initPromise","use","init","interpolation","escapeValue","lng","resources","then","$t","t","setLang","locale","changeLanguage"],"mappings":"AAAA,OAAOA,UAAU,UAAU;AAC3B,SAASC,gBAAgB,QAAQ,gBAAgB;AACjD,OAAOC,UAAU,gBAAgB;AACjC,OAAOC,UAAU,gBAAgB;AAIjC,IAAIC,eAA4C;AAEhD,sBAAsB,GACtB,OAAO,SAASC,UAAUC,eAA0D;IAChF,SAAS,CAAC;IACV,SAAS,CAAC;AACd,CAAC;IACG,MAAMC,UAAoC;QACtC,SAAS;YACLC,aAAaC,OAAOC,MAAM,CAAC,CAAC,GAAGR,MAAMI,YAAY,CAAC,QAAQ;QAC9D;QACA,SAAS;YACLE,aAAaC,OAAOC,MAAM,CAAC,CAAC,GAAGP,MAAMG,YAAY,CAAC,QAAQ;QAC9D;IACJ;IAEA,IAAIN,KAAKW,aAAa,EAAE;QACpBX,KAAKY,iBAAiB,CAAC,SAAS,eAAeL,OAAO,CAAC,QAAQ,CAACC,WAAW,EAAE,MAAM;QACnFR,KAAKY,iBAAiB,CAAC,SAAS,eAAeL,OAAO,CAAC,QAAQ,CAACC,WAAW,EAAE,MAAM;QACnF,OAAOK,QAAQC,OAAO,CAACd;IAC3B;IAEA,IAAII,cAAc;QACd,OAAOA;IACX;IAEA,MAAMW,cAAcf,KAAKgB,GAAG,CAACf,kBAAkBgB,IAAI,CAAC;QAChDC,eAAe;YACXC,aAAa;QACjB;QACAC,KAAK;QACLC,WAAWd;IACf,GAAGe,IAAI,CAAC,IAAMtB;IAEdI,eAAeW;IAEf,OAAOA;AACX;AAEA,OAAO,MAAMQ,KAAKvB,KAAKwB,CAAC,CAAC;AAEzB,OAAO,SAASC,QAAQC,MAAgB;IACpC1B,KAAK2B,cAAc,CAACD;AACxB"}
1
+ {"version":3,"sources":["../../../src/library/locale/index.ts"],"sourcesContent":["import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport type { Callback, InitOptions } from \"i18next\";\nexport const reactI18nextInstance = i18n.use(initReactI18next);\n\n\n/** Setup plugin i18n */\nexport async function setupI18n <T = unknown>(options: InitOptions<T>, callback?: Callback): Promise<void> {\n await reactI18nextInstance.init(options, callback);\n}\n\nexport const $t = i18n.t;\n\nexport async function setLang(locale: string, callback?: Callback) {\n await i18n.changeLanguage(locale, callback);\n}\n"],"names":["i18n","initReactI18next","reactI18nextInstance","use","setupI18n","options","callback","init","$t","t","setLang","locale","changeLanguage"],"mappings":"AAAA,OAAOA,UAAU,UAAU;AAC3B,SAASC,gBAAgB,QAAQ,gBAAgB;AAEjD,OAAO,MAAMC,uBAAuBF,KAAKG,GAAG,CAACF,kBAAkB;AAG/D,sBAAsB,GACtB,OAAO,eAAeG,UAAwBC,OAAuB,EAAEC,QAAmB;IACtF,MAAMJ,qBAAqBK,IAAI,CAACF,SAASC;AAC7C;AAEA,OAAO,MAAME,KAAKR,KAAKS,CAAC,CAAC;AAEzB,OAAO,eAAeC,QAAQC,MAAc,EAAEL,QAAmB;IAC7D,MAAMN,KAAKY,cAAc,CAACD,QAAQL;AACtC"}
package/dist/state.umd.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @vlian/framework v1.2.53
2
+ * @vlian/framework v1.2.55
3
3
  * Secra Framework - 一个现代化的低代码框架
4
4
  * (c) 2026 Secra Framework Contributors
5
5
  * Licensed under Apache-2.0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vlian/framework",
3
- "version": "1.2.54",
3
+ "version": "1.2.56",
4
4
  "private": false,
5
5
  "packageManager": "pnpm@10.27.0",
6
6
  "description": "Secra Framework - 一个现代化的低代码框架",
@@ -192,9 +192,11 @@
192
192
  "antd": "^5.29.2",
193
193
  "dumi": "^2.4.21",
194
194
  "happy-dom": "^20.1.0",
195
+ "i18next": "^25.8.18",
195
196
  "jsdom": "^27.4.0",
196
197
  "react": "^19.2.3",
197
198
  "react-dom": "^19.2.3",
199
+ "react-i18next": "^16.5.8",
198
200
  "react-router-dom": "^7.12.0",
199
201
  "rollup": "^4.55.1",
200
202
  "rollup-plugin-peer-deps-external": "^2.2.4",