@vlian/framework 1.2.51 → 1.2.55

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 (48) hide show
  1. package/dist/analytics.umd.js +1 -1
  2. package/dist/index.umd.js +222 -65
  3. package/dist/index.umd.js.map +1 -1
  4. package/dist/kernel/kernel.cjs +2 -1
  5. package/dist/kernel/kernel.cjs.map +1 -1
  6. package/dist/kernel/kernel.js +2 -1
  7. package/dist/kernel/kernel.js.map +1 -1
  8. package/dist/kernel/manager/cacheManager.cjs +8 -6
  9. package/dist/kernel/manager/cacheManager.cjs.map +1 -1
  10. package/dist/kernel/manager/cacheManager.d.ts +3 -0
  11. package/dist/kernel/manager/cacheManager.js +8 -6
  12. package/dist/kernel/manager/cacheManager.js.map +1 -1
  13. package/dist/kernel/manager/theme/ThemeManager.cjs +86 -0
  14. package/dist/kernel/manager/theme/ThemeManager.cjs.map +1 -0
  15. package/dist/kernel/manager/theme/ThemeManager.d.ts +16 -0
  16. package/dist/kernel/manager/theme/ThemeManager.js +76 -0
  17. package/dist/kernel/manager/theme/ThemeManager.js.map +1 -0
  18. package/dist/kernel/manager/theme/index.cjs +13 -0
  19. package/dist/kernel/manager/theme/index.cjs.map +1 -0
  20. package/dist/kernel/manager/theme/index.d.ts +1 -0
  21. package/dist/kernel/manager/theme/index.js +3 -0
  22. package/dist/kernel/manager/theme/index.js.map +1 -0
  23. package/dist/kernel/manager/theme/theme.dom.cjs +63 -0
  24. package/dist/kernel/manager/theme/theme.dom.cjs.map +1 -0
  25. package/dist/kernel/manager/theme/theme.dom.d.ts +3 -0
  26. package/dist/kernel/manager/theme/theme.dom.js +45 -0
  27. package/dist/kernel/manager/theme/theme.dom.js.map +1 -0
  28. package/dist/kernel/manager/theme/theme.persistence.cjs +59 -0
  29. package/dist/kernel/manager/theme/theme.persistence.cjs.map +1 -0
  30. package/dist/kernel/manager/theme/theme.persistence.d.ts +5 -0
  31. package/dist/kernel/manager/theme/theme.persistence.js +38 -0
  32. package/dist/kernel/manager/theme/theme.persistence.js.map +1 -0
  33. package/dist/kernel/manager/theme/theme.schema.cjs +124 -0
  34. package/dist/kernel/manager/theme/theme.schema.cjs.map +1 -0
  35. package/dist/kernel/manager/theme/theme.schema.d.ts +7 -0
  36. package/dist/kernel/manager/theme/theme.schema.js +97 -0
  37. package/dist/kernel/manager/theme/theme.schema.js.map +1 -0
  38. package/dist/kernel/manager/themeManager.cjs +2 -95
  39. package/dist/kernel/manager/themeManager.cjs.map +1 -1
  40. package/dist/kernel/manager/themeManager.d.ts +1 -14
  41. package/dist/kernel/manager/themeManager.js +1 -94
  42. package/dist/kernel/manager/themeManager.js.map +1 -1
  43. package/dist/kernel/types.d.ts +2 -0
  44. package/dist/kernel/types.js.map +1 -1
  45. package/dist/state.umd.js +1 -1
  46. package/dist/types.d.ts +2 -0
  47. package/dist/types.js.map +1 -1
  48. package/package.json +1 -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
- import { readPersistedValue, writePersistedValue } from "./persistence";
16
- function applyThemeToDocument(theme) {
17
- if (typeof document === 'undefined') {
18
- return;
19
- }
20
- const root = document.documentElement;
21
- root.classList.remove('light', 'dark');
22
- const resolvedMode = theme.mode === 'system' ? typeof window !== 'undefined' && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : theme.mode;
23
- root.classList.add(resolvedMode);
24
- if (theme.primaryColor) {
25
- root.style.setProperty('--app-primary-color', theme.primaryColor);
26
- }
27
- if (theme.tokens) {
28
- Object.entries(theme.tokens).forEach(([token, tokenValue])=>{
29
- root.style.setProperty(`--${token}`, String(tokenValue));
30
- });
31
- }
32
- }
33
- export class ThemeManager {
34
- async initialize(context) {
35
- this.config = context.config.theme;
36
- this.theme = {
37
- ...DEFAULT_THEME,
38
- ...this.config.initial || {}
39
- };
40
- const persisted = await readPersistedValue(this.config.persistence);
41
- if (persisted !== null) {
42
- try {
43
- const parsed = JSON.parse(persisted);
44
- this.theme = {
45
- ...this.theme,
46
- ...parsed
47
- };
48
- } catch {
49
- // ignore parse errors
50
- }
51
- } else {
52
- await writePersistedValue(this.config.persistence, JSON.stringify(this.theme));
53
- }
54
- applyThemeToDocument(this.theme);
55
- }
56
- getTheme() {
57
- return {
58
- ...this.theme
59
- };
60
- }
61
- subscribe(listener) {
62
- this.listeners.add(listener);
63
- return ()=>{
64
- this.listeners.delete(listener);
65
- };
66
- }
67
- emit(next, prev) {
68
- this.listeners.forEach((listener)=>{
69
- listener({
70
- ...next
71
- }, {
72
- ...prev
73
- });
74
- });
75
- }
76
- async setTheme(nextTheme) {
77
- const prev = this.theme;
78
- this.theme = {
79
- ...this.theme,
80
- ...nextTheme
81
- };
82
- applyThemeToDocument(this.theme);
83
- await writePersistedValue(this.config.persistence, JSON.stringify(this.theme));
84
- this.emit(this.theme, prev);
85
- }
86
- getSnapshot() {
87
- return this.getTheme();
88
- }
89
- constructor(){
90
- _define_property(this, "theme", DEFAULT_THEME);
91
- _define_property(this, "config", DEFAULT_CONFIG.theme);
92
- _define_property(this, "listeners", new Set());
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 { readPersistedValue, writePersistedValue } from './persistence';\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\n public async initialize(context: KernelManagerContext): Promise<void> {\n this.config = context.config.theme;\n this.theme = { ...DEFAULT_THEME, ...(this.config.initial || {}) };\n\n const persisted = await readPersistedValue(this.config.persistence);\n if (persisted !== null) {\n try {\n const parsed = JSON.parse(persisted) as Partial<ThemeSnapshot>;\n this.theme = { ...this.theme, ...parsed };\n } catch {\n // ignore parse errors\n }\n } else {\n await writePersistedValue(this.config.persistence, JSON.stringify(this.theme));\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 await writePersistedValue(this.config.persistence, JSON.stringify(this.theme));\n this.emit(this.theme, prev);\n }\n\n public getSnapshot(): ThemeSnapshot {\n return this.getTheme();\n }\n}\n"],"names":["DEFAULT_CONFIG","DEFAULT_THEME","readPersistedValue","writePersistedValue","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","persisted","persistence","parsed","JSON","parse","stringify","getTheme","subscribe","listener","listeners","delete","emit","next","prev","setTheme","nextTheme","getSnapshot","Set"],"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"}
@@ -2,6 +2,7 @@ import type { LogLevel } from '@vlian/logger';
2
2
  import type { LangType } from '../library/locale/types';
3
3
  import type { StartOptions as CoreStartOptions } from '../core/types';
4
4
  import type { StorageOptions } from '../types';
5
+ import type { StorageInstance } from "@vlian/utils";
5
6
  export type KernelInstanceId = string;
6
7
  export type KernelStorageDriver = 'localStorage' | 'sessionStorage' | 'indexedDB' | 'none';
7
8
  export interface ThemeSnapshot {
@@ -49,6 +50,7 @@ export interface KernelTimingMetric {
49
50
  export interface KernelManagerContext {
50
51
  instanceId: KernelInstanceId;
51
52
  config: KernelConfig;
53
+ cacheManager: StorageInstance;
52
54
  }
53
55
  export interface KernelManager<TSnapshot = unknown> {
54
56
  initialize: (context: KernelManagerContext) => Promise<void> | void;
@@ -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';\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}\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":"AAuFA,WAA8C"}
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"}
package/dist/state.umd.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @vlian/framework v1.2.50
2
+ * @vlian/framework v1.2.54
3
3
  * Secra Framework - 一个现代化的低代码框架
4
4
  * (c) 2026 Secra Framework Contributors
5
5
  * Licensed under Apache-2.0
package/dist/types.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ import type { StorageType } from '@vlian/utils';
1
2
  export type StorageOptions = {
2
3
  prefix: string;
3
4
  defaultExpire: number;
4
5
  tableName?: string;
6
+ type?: StorageType;
5
7
  };
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts"],"sourcesContent":["export type StorageOptions = {\n prefix: string;\n defaultExpire: number;\n tableName?: string;\n};\n"],"names":[],"mappings":"AAAA,WAIE"}
1
+ {"version":3,"sources":["../src/types.ts"],"sourcesContent":["import type { StorageType } from '@vlian/utils';\nexport type StorageOptions = {\n prefix: string;\n defaultExpire: number;\n tableName?: string;\n type?: StorageType;\n};\n"],"names":[],"mappings":"AACA,WAKE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vlian/framework",
3
- "version": "1.2.51",
3
+ "version": "1.2.55",
4
4
  "private": false,
5
5
  "packageManager": "pnpm@10.27.0",
6
6
  "description": "Secra Framework - 一个现代化的低代码框架",