@vlian/framework 1.2.1 → 1.2.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics/index.cjs +24 -0
- package/dist/analytics/index.cjs.map +1 -0
- package/dist/analytics/index.d.ts +2 -0
- package/dist/analytics/index.js +3 -0
- package/dist/analytics/index.js.map +1 -0
- package/dist/analytics.umd.js +2406 -0
- package/dist/analytics.umd.js.map +1 -0
- package/dist/components/LocaleSwitch.cjs +118 -0
- package/dist/components/LocaleSwitch.cjs.map +1 -0
- package/dist/components/LocaleSwitch.d.ts +21 -0
- package/dist/components/LocaleSwitch.js +103 -0
- package/dist/components/LocaleSwitch.js.map +1 -0
- package/dist/components/ThemeSwitch.cjs +117 -0
- package/dist/components/ThemeSwitch.cjs.map +1 -0
- package/dist/components/ThemeSwitch.d.ts +20 -0
- package/dist/components/ThemeSwitch.js +102 -0
- package/dist/components/ThemeSwitch.js.map +1 -0
- package/dist/components/index.cjs +16 -0
- package/dist/components/index.cjs.map +1 -1
- package/dist/components/index.d.ts +5 -2
- package/dist/components/index.js +2 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/persistence.cjs +60 -0
- package/dist/components/persistence.cjs.map +1 -0
- package/dist/components/persistence.d.ts +12 -0
- package/dist/components/persistence.js +39 -0
- package/dist/components/persistence.js.map +1 -0
- package/dist/core/Test.d.ts +0 -1
- package/dist/core/app/AppContext.cjs +36 -30
- package/dist/core/app/AppContext.cjs.map +1 -1
- package/dist/core/app/AppContext.d.ts +9 -6
- package/dist/core/app/AppContext.js +36 -30
- package/dist/core/app/AppContext.js.map +1 -1
- package/dist/core/app/AppContext.types.d.ts +9 -10
- package/dist/core/app/AppContext.types.js.map +1 -1
- package/dist/core/app/BasicLayout.cjs +57 -22
- package/dist/core/app/BasicLayout.cjs.map +1 -1
- package/dist/core/app/BasicLayout.d.ts +7 -5
- package/dist/core/app/BasicLayout.js +57 -22
- package/dist/core/app/BasicLayout.js.map +1 -1
- package/dist/core/app/DefaultApp.cjs +104 -153
- package/dist/core/app/DefaultApp.cjs.map +1 -1
- package/dist/core/app/DefaultApp.d.ts +0 -21
- package/dist/core/app/DefaultApp.js +104 -153
- package/dist/core/app/DefaultApp.js.map +1 -1
- package/dist/core/app/index.d.ts +0 -1
- package/dist/core/config/AppConfig.cjs.map +1 -1
- package/dist/core/config/AppConfig.d.ts +3 -4
- package/dist/core/config/AppConfig.js.map +1 -1
- package/dist/core/config/ConfigLoader.d.ts +0 -1
- package/dist/core/config/ConfigValidator.d.ts +0 -1
- package/dist/core/config/index.d.ts +0 -1
- package/dist/core/dev/DevTools.cjs +141 -287
- package/dist/core/dev/DevTools.cjs.map +1 -1
- package/dist/core/dev/DevTools.d.ts +1 -32
- package/dist/core/dev/DevTools.js +143 -296
- package/dist/core/dev/DevTools.js.map +1 -1
- package/dist/core/error/ErrorBoundary.cjs +72 -14
- package/dist/core/error/ErrorBoundary.cjs.map +1 -1
- package/dist/core/error/ErrorBoundary.d.ts +7 -9
- package/dist/core/error/ErrorBoundary.js +73 -15
- package/dist/core/error/ErrorBoundary.js.map +1 -1
- package/dist/core/error/ErrorHandler.d.ts +0 -1
- package/dist/core/error/index.d.ts +0 -1
- package/dist/core/event/AppEventBus.d.ts +0 -1
- package/dist/core/event/frameworkEvents.d.ts +0 -1
- package/dist/core/event/hooks.d.ts +0 -1
- package/dist/core/event/index.d.ts +0 -1
- package/dist/core/event/types.d.ts +0 -1
- package/dist/core/event/useEventBus.d.ts +0 -1
- package/dist/core/index.cjs +2 -0
- package/dist/core/index.cjs.map +1 -1
- package/dist/core/index.d.ts +2 -1
- package/dist/core/index.js +2 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/initialization/InitializationErrorThrower.d.ts +0 -1
- package/dist/core/initialization/index.d.ts +0 -1
- package/dist/core/initialization/initialization.d.ts +0 -1
- package/dist/core/initialization/initializationErrorState.d.ts +0 -1
- package/dist/core/kernel/defaultAdapters.cjs +185 -0
- package/dist/core/kernel/defaultAdapters.cjs.map +1 -0
- package/dist/core/kernel/defaultAdapters.d.ts +2 -0
- package/dist/core/kernel/defaultAdapters.js +175 -0
- package/dist/core/kernel/defaultAdapters.js.map +1 -0
- package/dist/core/kernel/errors.cjs +71 -0
- package/dist/core/kernel/errors.cjs.map +1 -0
- package/dist/core/kernel/errors.d.ts +18 -0
- package/dist/core/kernel/errors.js +53 -0
- package/dist/core/kernel/errors.js.map +1 -0
- package/dist/core/kernel/index.cjs +22 -0
- package/dist/core/kernel/index.cjs.map +1 -0
- package/dist/core/kernel/index.d.ts +3 -0
- package/dist/core/kernel/index.js +4 -0
- package/dist/core/kernel/index.js.map +1 -0
- package/dist/core/kernel/startKernel.cjs +203 -0
- package/dist/core/kernel/startKernel.cjs.map +1 -0
- package/dist/core/kernel/startKernel.d.ts +2 -0
- package/dist/core/kernel/startKernel.js +193 -0
- package/dist/core/kernel/startKernel.js.map +1 -0
- package/dist/core/kernel/types.cjs +6 -0
- package/dist/core/kernel/types.cjs.map +1 -0
- package/dist/core/kernel/types.d.ts +114 -0
- package/dist/core/kernel/types.js +3 -0
- package/dist/core/kernel/types.js.map +1 -0
- package/dist/core/middleware.d.ts +0 -1
- package/dist/core/plugin/PluginEventBus.d.ts +0 -1
- package/dist/core/plugin/PluginSandbox.d.ts +0 -1
- package/dist/core/plugin.cjs +1 -1
- package/dist/core/plugin.cjs.map +1 -1
- package/dist/core/plugin.d.ts +0 -1
- package/dist/core/plugin.js +1 -1
- package/dist/core/plugin.js.map +1 -1
- package/dist/core/router/RouterManager.d.ts +0 -1
- package/dist/core/router/adapter/AdapterManager.d.ts +0 -1
- package/dist/core/router/adapter/index.d.ts +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts +0 -1
- package/dist/core/router/adapter/react-router/index.d.ts +0 -1
- package/dist/core/router/adapter/types.cjs.map +1 -1
- package/dist/core/router/adapter/types.d.ts +1 -2
- package/dist/core/router/adapter/types.js.map +1 -1
- package/dist/core/router/dev/RouterDevTools.cjs +148 -296
- package/dist/core/router/dev/RouterDevTools.cjs.map +1 -1
- package/dist/core/router/dev/RouterDevTools.d.ts +1 -6
- package/dist/core/router/dev/RouterDevTools.js +149 -301
- package/dist/core/router/dev/RouterDevTools.js.map +1 -1
- package/dist/core/router/dev/index.d.ts +0 -1
- package/dist/core/router/dynamic/DynamicRouteManager.d.ts +0 -1
- package/dist/core/router/dynamic/index.d.ts +0 -1
- package/dist/core/router/errors/RouterError.d.ts +0 -1
- package/dist/core/router/errors/index.d.ts +0 -1
- package/dist/core/router/index.d.ts +0 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts +0 -1
- package/dist/core/router/lifecycle/index.d.ts +0 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.d.ts +0 -1
- package/dist/core/router/middleware/auth.d.ts +0 -1
- package/dist/core/router/middleware/index.d.ts +0 -1
- package/dist/core/router/middleware/types.d.ts +0 -1
- package/dist/core/router/monitoring/RouterMonitoring.d.ts +0 -1
- package/dist/core/router/monitoring/index.d.ts +0 -1
- package/dist/core/router/navigation/RouterNavigation.d.ts +0 -1
- package/dist/core/router/navigation/index.d.ts +0 -1
- package/dist/core/router/performance/RouteCache.d.ts +0 -1
- package/dist/core/router/performance/RoutePreloader.d.ts +0 -1
- package/dist/core/router/performance/index.d.ts +0 -1
- package/dist/core/router/plugin/RouterPluginManager.d.ts +0 -1
- package/dist/core/router/plugin/index.d.ts +0 -1
- package/dist/core/router/plugin/types.d.ts +0 -1
- package/dist/core/router/types.d.ts +1 -2
- package/dist/core/router/types.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +90 -103
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +0 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +91 -104
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.cjs +13 -4
- package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
- package/dist/core/router/utils/adapters/react-router/transform.d.ts +0 -1
- package/dist/core/router/utils/adapters/react-router/transform.js +13 -4
- package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
- package/dist/core/router/utils/transform.cjs +1 -1
- package/dist/core/router/utils/transform.cjs.map +1 -1
- package/dist/core/router/utils/transform.d.ts +0 -1
- package/dist/core/router/utils/transform.js +1 -1
- package/dist/core/router/utils/transform.js.map +1 -1
- package/dist/core/router/validation/RouterConfigValidator.d.ts +0 -1
- package/dist/core/router/validation/index.d.ts +0 -1
- package/dist/core/router/validation/schema.d.ts +0 -1
- package/dist/core/router/version/RouteVersionManager.d.ts +0 -1
- package/dist/core/router/version/index.d.ts +0 -1
- package/dist/core/splash/SplashScreen.cjs +101 -15
- package/dist/core/splash/SplashScreen.cjs.map +1 -1
- package/dist/core/splash/SplashScreen.d.ts +0 -1
- package/dist/core/splash/SplashScreen.js +101 -15
- package/dist/core/splash/SplashScreen.js.map +1 -1
- package/dist/core/splash/index.d.ts +0 -1
- package/dist/core/splash/splashScreenUtils.d.ts +0 -1
- package/dist/core/startup/AppInstance.d.ts +0 -1
- package/dist/core/startup/environment.d.ts +0 -1
- package/dist/core/startup/index.d.ts +0 -1
- package/dist/core/startup/initializeServices.d.ts +0 -1
- package/dist/core/startup/performanceTracker.d.ts +0 -1
- package/dist/core/startup/renderApp.cjs +12 -10
- package/dist/core/startup/renderApp.cjs.map +1 -1
- package/dist/core/startup/renderApp.d.ts +0 -1
- package/dist/core/startup/renderApp.js +12 -10
- package/dist/core/startup/renderApp.js.map +1 -1
- package/dist/core/startup/startApp.cjs +118 -13
- package/dist/core/startup/startApp.cjs.map +1 -1
- package/dist/core/startup/startApp.d.ts +0 -1
- package/dist/core/startup/startApp.js +118 -13
- package/dist/core/startup/startApp.js.map +1 -1
- package/dist/core/types.d.ts +34 -21
- package/dist/core/types.js.map +1 -1
- package/dist/core/ui-adapter/adapters.cjs +45 -0
- package/dist/core/ui-adapter/adapters.cjs.map +1 -0
- package/dist/core/ui-adapter/adapters.d.ts +4 -0
- package/dist/core/ui-adapter/adapters.js +27 -0
- package/dist/core/ui-adapter/adapters.js.map +1 -0
- package/dist/core/ui-adapter/index.cjs +21 -0
- package/dist/core/ui-adapter/index.cjs.map +1 -0
- package/dist/core/ui-adapter/index.d.ts +2 -0
- package/dist/core/ui-adapter/index.js +3 -0
- package/dist/core/ui-adapter/index.js.map +1 -0
- package/dist/core/ui-adapter/types.cjs +6 -0
- package/dist/core/ui-adapter/types.cjs.map +1 -0
- package/dist/core/ui-adapter/types.d.ts +24 -0
- package/dist/core/ui-adapter/types.js +3 -0
- package/dist/core/ui-adapter/types.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.umd.d.ts +0 -1
- package/dist/index.umd.js +7315 -5936
- package/dist/index.umd.js.map +1 -1
- package/dist/library/index.d.ts +0 -1
- package/dist/library/locale/index.d.ts +0 -1
- package/dist/library/locale/langs/en-us/index.d.ts +0 -1
- package/dist/library/locale/langs/zh-cn/index.d.ts +0 -1
- package/dist/library/locale/types.d.ts +0 -1
- package/dist/library/storage/cache.d.ts +0 -1
- package/dist/library/storage/encryption.d.ts +0 -1
- package/dist/library/storage/index.d.ts +0 -1
- package/dist/request/adapter/RequestAdapter.d.ts +0 -1
- package/dist/request/adapter/axiosAdapter.d.ts +0 -1
- package/dist/request/adapter/fetchAdapter.d.ts +0 -1
- package/dist/request/adapter/index.d.ts +0 -1
- package/dist/request/adapter/kyAdapter.d.ts +0 -1
- package/dist/request/adapter/undiciAdapter.d.ts +0 -1
- package/dist/request/core/RequestClient.d.ts +0 -1
- package/dist/request/core/index.d.ts +0 -1
- package/dist/request/index.d.ts +0 -1
- package/dist/request/plugin/RequestPlugin.d.ts +0 -1
- package/dist/request/plugin/cache.d.ts +0 -1
- package/dist/request/plugin/csrfPlugin.d.ts +0 -1
- package/dist/request/plugin/index.d.ts +0 -1
- package/dist/request/plugin/monitoring.d.ts +0 -1
- package/dist/request/plugin/queue.d.ts +0 -1
- package/dist/request/plugin/retry.d.ts +0 -1
- package/dist/request/plugin/validation.d.ts +0 -1
- package/dist/request/runtime/RequestContext.d.ts +0 -1
- package/dist/request/runtime/index.d.ts +0 -1
- package/dist/request/types.d.ts +0 -1
- package/dist/request/utils/RequestQueueManager.d.ts +0 -1
- package/dist/request/utils/dependencyCheck.d.ts +0 -1
- package/dist/request/utils/index.d.ts +0 -1
- package/dist/request.umd.js +5392 -0
- package/dist/request.umd.js.map +1 -0
- package/dist/state/StateManager.d.ts +0 -1
- package/dist/state/adapters/AdapterFactory.d.ts +0 -1
- package/dist/state/adapters/DefaultAdapter.d.ts +0 -1
- package/dist/state/adapters/ReduxAdapter.d.ts +0 -1
- package/dist/state/adapters/ZustandAdapter.d.ts +0 -1
- package/dist/state/adapters/index.d.ts +0 -1
- package/dist/state/adapters/types.d.ts +0 -1
- package/dist/state/core/DerivedStateInstance.d.ts +0 -1
- package/dist/state/core/StateInstance.d.ts +0 -1
- package/dist/state/core/StateRegistry.d.ts +0 -1
- package/dist/state/core/StateScope.d.ts +0 -1
- package/dist/state/core/index.d.ts +0 -1
- package/dist/state/index.d.ts +0 -1
- package/dist/state/types.d.ts +0 -1
- package/dist/state.umd.js +1414 -0
- package/dist/state.umd.js.map +1 -0
- package/dist/types.d.ts +0 -1
- package/dist/utils/analytics.d.ts +0 -1
- package/dist/utils/configSecurity.d.ts +0 -1
- package/dist/utils/csrf.d.ts +0 -1
- package/dist/utils/errors/ErrorCodes.d.ts +0 -1
- package/dist/utils/errors.cjs +44 -1
- package/dist/utils/errors.cjs.map +1 -1
- package/dist/utils/errors.d.ts +5 -1
- package/dist/utils/errors.js +44 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/logger.d.ts +0 -1
- package/dist/utils/logger.types.d.ts +0 -1
- package/dist/utils/monitoring.d.ts +0 -1
- package/dist/utils/performance.d.ts +0 -1
- package/dist/utils/resourceLoader.d.ts +0 -1
- package/dist/utils/runtimeSecurity.d.ts +0 -1
- package/dist/utils/security.d.ts +0 -1
- package/dist/utils/traceId.d.ts +0 -1
- package/dist/utils/validation.d.ts +0 -1
- package/package.json +24 -9
- package/dist/components/index.d.ts.map +0 -1
- package/dist/core/Test.d.ts.map +0 -1
- package/dist/core/app/AppContext.d.ts.map +0 -1
- package/dist/core/app/AppContext.types.d.ts.map +0 -1
- package/dist/core/app/BasicLayout.d.ts.map +0 -1
- package/dist/core/app/DefaultApp.d.ts.map +0 -1
- package/dist/core/app/index.d.ts.map +0 -1
- package/dist/core/config/AppConfig.d.ts.map +0 -1
- package/dist/core/config/ConfigLoader.d.ts.map +0 -1
- package/dist/core/config/ConfigValidator.d.ts.map +0 -1
- package/dist/core/config/index.d.ts.map +0 -1
- package/dist/core/dev/DevTools.d.ts.map +0 -1
- package/dist/core/error/ErrorBoundary.d.ts.map +0 -1
- package/dist/core/error/ErrorHandler.d.ts.map +0 -1
- package/dist/core/error/index.d.ts.map +0 -1
- package/dist/core/event/AppEventBus.d.ts.map +0 -1
- package/dist/core/event/frameworkEvents.d.ts.map +0 -1
- package/dist/core/event/hooks.d.ts.map +0 -1
- package/dist/core/event/index.d.ts.map +0 -1
- package/dist/core/event/types.d.ts.map +0 -1
- package/dist/core/event/useEventBus.d.ts.map +0 -1
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/initialization/InitializationErrorThrower.d.ts.map +0 -1
- package/dist/core/initialization/index.d.ts.map +0 -1
- package/dist/core/initialization/initialization.d.ts.map +0 -1
- package/dist/core/initialization/initializationErrorState.d.ts.map +0 -1
- package/dist/core/middleware.d.ts.map +0 -1
- package/dist/core/plugin/PluginEventBus.d.ts.map +0 -1
- package/dist/core/plugin/PluginSandbox.d.ts.map +0 -1
- package/dist/core/plugin.d.ts.map +0 -1
- package/dist/core/router/RouterManager.d.ts.map +0 -1
- package/dist/core/router/adapter/AdapterManager.d.ts.map +0 -1
- package/dist/core/router/adapter/index.d.ts.map +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts.map +0 -1
- package/dist/core/router/adapter/react-router/index.d.ts.map +0 -1
- package/dist/core/router/adapter/types.d.ts.map +0 -1
- package/dist/core/router/dev/RouterDevTools.d.ts.map +0 -1
- package/dist/core/router/dev/index.d.ts.map +0 -1
- package/dist/core/router/dynamic/DynamicRouteManager.d.ts.map +0 -1
- package/dist/core/router/dynamic/index.d.ts.map +0 -1
- package/dist/core/router/errors/RouterError.d.ts.map +0 -1
- package/dist/core/router/errors/index.d.ts.map +0 -1
- package/dist/core/router/index.d.ts.map +0 -1
- package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts.map +0 -1
- package/dist/core/router/lifecycle/index.d.ts.map +0 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.d.ts.map +0 -1
- package/dist/core/router/middleware/auth.d.ts.map +0 -1
- package/dist/core/router/middleware/index.d.ts.map +0 -1
- package/dist/core/router/middleware/types.d.ts.map +0 -1
- package/dist/core/router/monitoring/RouterMonitoring.d.ts.map +0 -1
- package/dist/core/router/monitoring/index.d.ts.map +0 -1
- package/dist/core/router/navigation/RouterNavigation.d.ts.map +0 -1
- package/dist/core/router/navigation/index.d.ts.map +0 -1
- package/dist/core/router/performance/RouteCache.d.ts.map +0 -1
- package/dist/core/router/performance/RoutePreloader.d.ts.map +0 -1
- package/dist/core/router/performance/index.d.ts.map +0 -1
- package/dist/core/router/plugin/RouterPluginManager.d.ts.map +0 -1
- package/dist/core/router/plugin/index.d.ts.map +0 -1
- package/dist/core/router/plugin/types.d.ts.map +0 -1
- package/dist/core/router/types.d.ts.map +0 -1
- package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts.map +0 -1
- package/dist/core/router/utils/adapters/react-router/transform.d.ts.map +0 -1
- package/dist/core/router/utils/transform.d.ts.map +0 -1
- package/dist/core/router/validation/RouterConfigValidator.d.ts.map +0 -1
- package/dist/core/router/validation/index.d.ts.map +0 -1
- package/dist/core/router/validation/schema.d.ts.map +0 -1
- package/dist/core/router/version/RouteVersionManager.d.ts.map +0 -1
- package/dist/core/router/version/index.d.ts.map +0 -1
- package/dist/core/splash/SplashScreen.d.ts.map +0 -1
- package/dist/core/splash/index.d.ts.map +0 -1
- package/dist/core/splash/splashScreenUtils.d.ts.map +0 -1
- package/dist/core/startup/AppInstance.d.ts.map +0 -1
- package/dist/core/startup/environment.d.ts.map +0 -1
- package/dist/core/startup/index.d.ts.map +0 -1
- package/dist/core/startup/initializeServices.d.ts.map +0 -1
- package/dist/core/startup/performanceTracker.d.ts.map +0 -1
- package/dist/core/startup/renderApp.d.ts.map +0 -1
- package/dist/core/startup/startApp.d.ts.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.umd.d.ts.map +0 -1
- package/dist/library/index.d.ts.map +0 -1
- package/dist/library/locale/index.d.ts.map +0 -1
- package/dist/library/locale/langs/en-us/index.d.ts.map +0 -1
- package/dist/library/locale/langs/zh-cn/index.d.ts.map +0 -1
- package/dist/library/locale/types.d.ts.map +0 -1
- package/dist/library/storage/cache.d.ts.map +0 -1
- package/dist/library/storage/encryption.d.ts.map +0 -1
- package/dist/library/storage/index.d.ts.map +0 -1
- package/dist/request/adapter/RequestAdapter.d.ts.map +0 -1
- package/dist/request/adapter/axiosAdapter.d.ts.map +0 -1
- package/dist/request/adapter/fetchAdapter.d.ts.map +0 -1
- package/dist/request/adapter/index.d.ts.map +0 -1
- package/dist/request/adapter/kyAdapter.d.ts.map +0 -1
- package/dist/request/adapter/undiciAdapter.d.ts.map +0 -1
- package/dist/request/core/RequestClient.d.ts.map +0 -1
- package/dist/request/core/index.d.ts.map +0 -1
- package/dist/request/index.d.ts.map +0 -1
- package/dist/request/plugin/RequestPlugin.d.ts.map +0 -1
- package/dist/request/plugin/cache.d.ts.map +0 -1
- package/dist/request/plugin/csrfPlugin.d.ts.map +0 -1
- package/dist/request/plugin/index.d.ts.map +0 -1
- package/dist/request/plugin/monitoring.d.ts.map +0 -1
- package/dist/request/plugin/queue.d.ts.map +0 -1
- package/dist/request/plugin/retry.d.ts.map +0 -1
- package/dist/request/plugin/validation.d.ts.map +0 -1
- package/dist/request/runtime/RequestContext.d.ts.map +0 -1
- package/dist/request/runtime/index.d.ts.map +0 -1
- package/dist/request/types.d.ts.map +0 -1
- package/dist/request/utils/RequestQueueManager.d.ts.map +0 -1
- package/dist/request/utils/dependencyCheck.d.ts.map +0 -1
- package/dist/request/utils/index.d.ts.map +0 -1
- package/dist/state/StateManager.d.ts.map +0 -1
- package/dist/state/adapters/AdapterFactory.d.ts.map +0 -1
- package/dist/state/adapters/DefaultAdapter.d.ts.map +0 -1
- package/dist/state/adapters/ReduxAdapter.d.ts.map +0 -1
- package/dist/state/adapters/ZustandAdapter.d.ts.map +0 -1
- package/dist/state/adapters/index.d.ts.map +0 -1
- package/dist/state/adapters/types.d.ts.map +0 -1
- package/dist/state/core/DerivedStateInstance.d.ts.map +0 -1
- package/dist/state/core/StateInstance.d.ts.map +0 -1
- package/dist/state/core/StateRegistry.d.ts.map +0 -1
- package/dist/state/core/StateScope.d.ts.map +0 -1
- package/dist/state/core/index.d.ts.map +0 -1
- package/dist/state/index.d.ts.map +0 -1
- package/dist/state/types.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/utils/analytics.d.ts.map +0 -1
- package/dist/utils/configSecurity.d.ts.map +0 -1
- package/dist/utils/csrf.d.ts.map +0 -1
- package/dist/utils/errors/ErrorCodes.d.ts.map +0 -1
- package/dist/utils/errors.d.ts.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.types.d.ts.map +0 -1
- package/dist/utils/monitoring.d.ts.map +0 -1
- package/dist/utils/performance.d.ts.map +0 -1
- package/dist/utils/resourceLoader.d.ts.map +0 -1
- package/dist/utils/runtimeSecurity.d.ts.map +0 -1
- package/dist/utils/security.d.ts.map +0 -1
- package/dist/utils/traceId.d.ts.map +0 -1
- package/dist/utils/validation.d.ts.map +0 -1
|
@@ -30,7 +30,6 @@ _export(exports, {
|
|
|
30
30
|
});
|
|
31
31
|
const _jsxruntime = require("react/jsx-runtime");
|
|
32
32
|
const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
|
|
33
|
-
const _antd = require("antd");
|
|
34
33
|
const _library = require("../../library");
|
|
35
34
|
const _AppConfig = require("../config/AppConfig");
|
|
36
35
|
function _getRequireWildcardCache(nodeInterop) {
|
|
@@ -90,36 +89,46 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
90
89
|
* 主题 Provider 组件
|
|
91
90
|
*/ const ThemeProvider = /*#__PURE__*/ _react.default.memo(({ children, initialTheme })=>{
|
|
92
91
|
const [theme, setThemeState] = (0, _react.useState)(initialTheme || _AppConfig.appConfig.getTheme());
|
|
92
|
+
const applyDocumentThemeClass = (0, _react.useCallback)((mode)=>{
|
|
93
|
+
if (typeof window === 'undefined') {
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
96
|
+
const html = document.documentElement;
|
|
97
|
+
html.classList.remove('light', 'dark');
|
|
98
|
+
const resolvedMode = mode === 'system' ? window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : mode || 'light';
|
|
99
|
+
html.classList.add(resolvedMode);
|
|
100
|
+
}, []);
|
|
93
101
|
// 同步到单例
|
|
94
102
|
(0, _react.useEffect)(()=>{
|
|
95
103
|
_AppConfig.appConfig.setTheme(theme);
|
|
96
104
|
}, [
|
|
97
105
|
theme
|
|
98
106
|
]);
|
|
99
|
-
//
|
|
107
|
+
// 同步到文档 class,确保首屏与刷新时也能正确反映主题
|
|
108
|
+
(0, _react.useEffect)(()=>{
|
|
109
|
+
if (typeof window === 'undefined') {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
applyDocumentThemeClass(theme.mode);
|
|
113
|
+
if (theme.mode !== 'system') {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
117
|
+
const onSystemThemeChange = ()=>applyDocumentThemeClass('system');
|
|
118
|
+
if (typeof mediaQuery.addEventListener === 'function') {
|
|
119
|
+
mediaQuery.addEventListener('change', onSystemThemeChange);
|
|
120
|
+
return ()=>mediaQuery.removeEventListener('change', onSystemThemeChange);
|
|
121
|
+
}
|
|
122
|
+
mediaQuery.addListener(onSystemThemeChange);
|
|
123
|
+
return ()=>mediaQuery.removeListener(onSystemThemeChange);
|
|
124
|
+
}, [
|
|
125
|
+
applyDocumentThemeClass,
|
|
126
|
+
theme.mode
|
|
127
|
+
]);
|
|
128
|
+
// 更新主题
|
|
100
129
|
const setTheme = (0, _react.useCallback)((newTheme)=>{
|
|
101
130
|
setThemeState((prev)=>{
|
|
102
|
-
|
|
103
|
-
// 如果主题模式改变,更新文档类名(添加过渡效果)
|
|
104
|
-
if (updated.mode !== prev.mode) {
|
|
105
|
-
// 使用 requestAnimationFrame 确保 DOM 更新在下一帧
|
|
106
|
-
requestAnimationFrame(()=>{
|
|
107
|
-
const html = document.documentElement;
|
|
108
|
-
html.classList.remove('light', 'dark');
|
|
109
|
-
// 添加过渡类(如果支持)
|
|
110
|
-
if (html.style.transition === undefined) {
|
|
111
|
-
html.style.transition = 'background-color 0.3s ease, color 0.3s ease';
|
|
112
|
-
}
|
|
113
|
-
if (updated.mode && updated.mode !== 'auto') {
|
|
114
|
-
html.classList.add(updated.mode);
|
|
115
|
-
} else if (updated.mode === 'auto') {
|
|
116
|
-
// 跟随系统设置
|
|
117
|
-
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
118
|
-
html.classList.add(prefersDark ? 'dark' : 'light');
|
|
119
|
-
}
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
return updated;
|
|
131
|
+
return typeof newTheme === 'function' ? newTheme(prev) : newTheme;
|
|
123
132
|
});
|
|
124
133
|
}, []);
|
|
125
134
|
const value = (0, _react.useMemo)(()=>({
|
|
@@ -245,7 +254,7 @@ AppConfigProvider.displayName = 'AppConfigProvider';
|
|
|
245
254
|
});
|
|
246
255
|
});
|
|
247
256
|
StateManagerProvider.displayName = 'StateManagerProvider';
|
|
248
|
-
const AppContextProvider = ({ children, initialTheme, initialLocale, initialAntdConfig, initialInitializationContext, stateManager, antdApp })=>{
|
|
257
|
+
const AppContextProvider = ({ children, initialTheme, initialLocale, initialAntdConfig, initialInitializationContext, stateManager, antdApp: _antdApp, uiApp: _uiApp })=>{
|
|
249
258
|
// 初始化单例配置(仅执行一次)
|
|
250
259
|
const initializedRef = _react.default.useRef(false);
|
|
251
260
|
_react.default.useEffect(()=>{
|
|
@@ -271,12 +280,9 @@ const AppContextProvider = ({ children, initialTheme, initialLocale, initialAntd
|
|
|
271
280
|
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(AppConfigProvider, {
|
|
272
281
|
initialAntdConfig: initialAntdConfig,
|
|
273
282
|
initialInitializationContext: initialInitializationContext,
|
|
274
|
-
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(
|
|
275
|
-
|
|
276
|
-
children:
|
|
277
|
-
stateManager: stateManager,
|
|
278
|
-
children: children
|
|
279
|
-
})
|
|
283
|
+
children: /*#__PURE__*/ (0, _jsxruntime.jsx)(StateManagerProvider, {
|
|
284
|
+
stateManager: stateManager,
|
|
285
|
+
children: children
|
|
280
286
|
})
|
|
281
287
|
})
|
|
282
288
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/app/AppContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { App } from 'antd';\nimport type { AppProps, ConfigProviderProps } from 'antd';\nimport { setLang } from '../../library';\nimport type { LangType } from '../../library/locale/types';\nimport type { InitializationContext } from '../initialization';\nimport type {\n ThemeContextValue,\n LocaleContextValue,\n ConfigContextValue,\n AppContextValue,\n ThemeConfig,\n} from './AppContext.types';\nimport { appConfig } from '../config/AppConfig';\nimport type { StateManager } from '../../state';\n\n/**\n * 主题上下文\n */\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\n/**\n * 国际化上下文\n */\nconst LocaleContext = createContext<LocaleContextValue | undefined>(undefined);\n\n/**\n * 配置上下文\n */\nconst ConfigContext = createContext<ConfigContextValue | undefined>(undefined);\n\n/**\n * 状态管理器上下文\n */\nconst StateManagerContext = createContext<import('./AppContext.types').StateManagerContextValue | undefined>(undefined);\n\n/**\n * 主题 Provider 属性\n */\ninterface ThemeProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n}\n\n/**\n * 主题 Provider 组件\n */\nconst ThemeProvider: React.FC<ThemeProviderProps> = React.memo(({ children, initialTheme }) => {\n const [theme, setThemeState] = useState<ThemeConfig>(initialTheme || appConfig.getTheme());\n\n // 同步到单例\n useEffect(() => {\n appConfig.setTheme(theme);\n }, [theme]);\n\n // 更新主题,添加过渡动画支持\n const setTheme = useCallback((newTheme: ThemeConfig | ((prev: ThemeConfig) => ThemeConfig)) => {\n setThemeState((prev) => {\n const updated = typeof newTheme === 'function' ? newTheme(prev) : newTheme;\n\n // 如果主题模式改变,更新文档类名(添加过渡效果)\n if (updated.mode !== prev.mode) {\n // 使用 requestAnimationFrame 确保 DOM 更新在下一帧\n requestAnimationFrame(() => {\n const html = document.documentElement;\n html.classList.remove('light', 'dark');\n \n // 添加过渡类(如果支持)\n if (html.style.transition === undefined) {\n html.style.transition = 'background-color 0.3s ease, color 0.3s ease';\n }\n \n if (updated.mode && updated.mode !== 'auto') {\n html.classList.add(updated.mode);\n } else if (updated.mode === 'auto') {\n // 跟随系统设置\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n html.classList.add(prefersDark ? 'dark' : 'light');\n }\n });\n }\n\n return updated;\n });\n }, []);\n\n const value: ThemeContextValue = useMemo(\n () => ({\n theme,\n setTheme,\n }),\n [theme, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n});\n\nThemeProvider.displayName = 'ThemeProvider';\n\n/**\n * 国际化 Provider 属性\n */\ninterface LocaleProviderProps extends PropsWithChildren {\n /**\n * 初始语言\n */\n initialLocale?: LangType;\n}\n\n/**\n * 国际化 Provider 组件\n */\nconst LocaleProvider: React.FC<LocaleProviderProps> = React.memo(({ children, initialLocale }) => {\n const [locale, setLocaleState] = useState<LangType>(initialLocale || appConfig.getLocale());\n const [isChanging, setIsChanging] = useState(false);\n\n // 同步到单例\n useEffect(() => {\n appConfig.setLocale(locale);\n }, [locale]);\n\n // 更新语言,添加加载状态\n const setLocale = useCallback(\n (newLocale: LangType) => {\n if (newLocale === locale) {\n return;\n }\n setIsChanging(true);\n setLocaleState(newLocale);\n setLang(newLocale);\n // 使用 requestAnimationFrame 确保状态更新在下一帧\n requestAnimationFrame(() => {\n setIsChanging(false);\n });\n },\n [locale]\n );\n\n const value: LocaleContextValue = useMemo(\n () => ({\n locale,\n setLocale,\n isChanging,\n }),\n [locale, setLocale, isChanging]\n );\n\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n});\n\nLocaleProvider.displayName = 'LocaleProvider';\n\n/**\n * 配置 Provider 属性\n */\ninterface AppConfigProviderProps extends PropsWithChildren {\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: ConfigProviderProps;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n}\n\n/**\n * 配置 Provider 组件\n */\nconst AppConfigProvider: React.FC<AppConfigProviderProps> = React.memo(({\n children,\n initialAntdConfig,\n initialInitializationContext,\n}) => {\n const [antdConfig, setAntdConfigState] = useState<ConfigProviderProps | undefined>(\n initialAntdConfig || appConfig.getAntdConfig()\n );\n const [initializationContext, setInitializationContextState] = useState<\n InitializationContext | undefined\n >(initialInitializationContext || appConfig.getInitializationContext());\n\n // 同步到单例\n useEffect(() => {\n appConfig.setAntdConfig(antdConfig);\n }, [antdConfig]);\n\n useEffect(() => {\n appConfig.setInitializationContext(initializationContext);\n }, [initializationContext]);\n\n // 更新 Ant Design 配置\n const setAntdConfig = useCallback((config: ConfigProviderProps | undefined) => {\n setAntdConfigState(config);\n }, []);\n\n // 更新初始化上下文\n const setInitializationContext = useCallback((context: InitializationContext | undefined) => {\n setInitializationContextState(context);\n }, []);\n\n const value: ConfigContextValue = useMemo(\n () => ({\n antdConfig,\n initializationContext,\n setAntdConfig,\n setInitializationContext,\n }),\n [antdConfig, initializationContext, setAntdConfig, setInitializationContext]\n );\n\n return <ConfigContext.Provider value={value}>{children}</ConfigContext.Provider>;\n});\n\nAppConfigProvider.displayName = 'AppConfigProvider';\n\n/**\n * 应用上下文 Provider 属性\n */\nexport interface AppContextProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n /**\n * 初始国际化语言\n */\n initialLocale?: LangType;\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: ConfigProviderProps;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n /**\n * 状态管理器实例\n */\n stateManager?: StateManager | null;\n /**\n * antd App 组件配置\n * \n * 用于配置 antd 的 App 组件,使 message、modal、notification 等静态方法能够正确使用。\n */\n antdApp?: AppProps;\n}\n\n/**\n * 应用上下文 Provider 组件\n * \n * 组合所有 Provider,提供统一的全局上下文\n * \n * @example\n * ```tsx\n * <AppContextProvider\n * initialTheme={{ mode: 'light', primaryColor: '#1890ff' }}\n * initialLocale=\"zh-CN\"\n * >\n * <App />\n * </AppContextProvider>\n * ```\n */\n/**\n * 状态管理器 Provider 组件\n */\nconst StateManagerProvider: React.FC<PropsWithChildren<{ stateManager?: StateManager | null }>> = React.memo(({ children, stateManager }) => {\n const value = useMemo(\n () => ({\n stateManager: stateManager ?? null,\n }),\n [stateManager]\n );\n\n return <StateManagerContext.Provider value={value}>{children}</StateManagerContext.Provider>;\n});\n\nStateManagerProvider.displayName = 'StateManagerProvider';\n\nexport const AppContextProvider: React.FC<AppContextProviderProps> = ({\n children,\n initialTheme,\n initialLocale,\n initialAntdConfig,\n initialInitializationContext,\n stateManager,\n antdApp,\n}) => {\n // 初始化单例配置(仅执行一次)\n const initializedRef = React.useRef(false);\n React.useEffect(() => {\n if (!initializedRef.current) {\n appConfig.initialize({\n theme: initialTheme,\n locale: initialLocale,\n antdConfig: initialAntdConfig,\n initializationContext: initialInitializationContext,\n });\n initializedRef.current = true;\n }\n }, [initialTheme, initialLocale, initialAntdConfig, initialInitializationContext]);\n\n return (\n <ThemeProvider initialTheme={initialTheme}>\n <LocaleProvider initialLocale={initialLocale}>\n <AppConfigProvider\n initialAntdConfig={initialAntdConfig}\n initialInitializationContext={initialInitializationContext}\n >\n <App {...antdApp}>\n <StateManagerProvider stateManager={stateManager}>\n {children}\n </StateManagerProvider>\n </App>\n </AppConfigProvider>\n </LocaleProvider>\n </ThemeProvider>\n );\n};\n\n/**\n * 使用主题上下文 Hook\n * \n * @returns 主题上下文值\n * @throws 如果不在 ThemeProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme } = useTheme();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * ```\n */\nexport const useTheme = (): ThemeContextValue => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用国际化上下文 Hook\n * \n * @returns 国际化上下文值\n * @throws 如果不在 LocaleProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { locale, setLocale } = useLocale();\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\nexport const useLocale = (): LocaleContextValue => {\n const context = useContext(LocaleContext);\n if (context === undefined) {\n throw new Error('useLocale 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用配置上下文 Hook\n * \n * @returns 配置上下文值\n * @throws 如果不在 ConfigProvider 内使用会抛出错误\n */\nexport const useConfig = (): ConfigContextValue => {\n const context = useContext(ConfigContext);\n if (context === undefined) {\n throw new Error('useConfig 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用应用上下文 Hook(聚合所有上下文)\n * \n * @returns 应用上下文值\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme, locale, setLocale, antdConfig } = useAppContext();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\n/**\n * 使用状态管理器 Hook\n * \n * @returns 状态管理器实例\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const stateManager = useStateManager();\n * \n * // 创建状态实例\n * const countState = stateManager?.createState(0);\n * ```\n */\nexport const useStateManager = (): StateManager | null => {\n const context = useContext(StateManagerContext);\n if (context === undefined) {\n throw new Error('useStateManager 必须在 AppContextProvider 内使用');\n }\n return context.stateManager;\n};\n\nexport const useAppContext = (): AppContextValue => {\n const themeContext = useTheme();\n const localeContext = useLocale();\n const configContext = useConfig();\n const stateManagerContext = useStateManager();\n\n // 优化:使用更细粒度的依赖项,避免不必要的重新计算\n // 只依赖实际变化的值,函数引用是稳定的\n return useMemo(\n () => ({\n theme: themeContext.theme,\n locale: localeContext.locale,\n antdConfig: configContext.antdConfig,\n initializationContext: configContext.initializationContext,\n stateManager: stateManagerContext,\n setTheme: themeContext.setTheme,\n setLocale: localeContext.setLocale,\n setAntdConfig: configContext.setAntdConfig,\n setInitializationContext: configContext.setInitializationContext,\n }),\n [\n themeContext.theme,\n localeContext.locale,\n configContext.antdConfig,\n configContext.initializationContext,\n stateManagerContext,\n // 函数引用是稳定的,不需要作为依赖\n themeContext.setTheme,\n localeContext.setLocale,\n configContext.setAntdConfig,\n configContext.setInitializationContext,\n ]\n );\n};\n"],"names":["AppContextProvider","useAppContext","useConfig","useLocale","useStateManager","useTheme","ThemeContext","createContext","undefined","LocaleContext","ConfigContext","StateManagerContext","ThemeProvider","React","memo","children","initialTheme","theme","setThemeState","useState","appConfig","getTheme","useEffect","setTheme","useCallback","newTheme","prev","updated","mode","requestAnimationFrame","html","document","documentElement","classList","remove","style","transition","add","prefersDark","window","matchMedia","matches","value","useMemo","Provider","displayName","LocaleProvider","initialLocale","locale","setLocaleState","getLocale","isChanging","setIsChanging","setLocale","newLocale","setLang","AppConfigProvider","initialAntdConfig","initialInitializationContext","antdConfig","setAntdConfigState","getAntdConfig","initializationContext","setInitializationContextState","getInitializationContext","setAntdConfig","setInitializationContext","config","context","StateManagerProvider","stateManager","antdApp","initializedRef","useRef","current","initialize","App","useContext","Error","themeContext","localeContext","configContext","stateManagerContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/app/AppContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { setLang } from '../../library';\nimport type { LangType } from '../../library/locale/types';\nimport type { InitializationContext } from '../initialization';\nimport type {\n ThemeContextValue,\n LocaleContextValue,\n ConfigContextValue,\n AppContextValue,\n ThemeConfig,\n} from './AppContext.types';\nimport { appConfig } from '../config/AppConfig';\nimport type { StateManager } from '../../state';\nimport type { UIAppConfig, UIProviderConfig } from '../types';\n\n/**\n * 主题上下文\n */\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\n/**\n * 国际化上下文\n */\nconst LocaleContext = createContext<LocaleContextValue | undefined>(undefined);\n\n/**\n * 配置上下文\n */\nconst ConfigContext = createContext<ConfigContextValue | undefined>(undefined);\n\n/**\n * 状态管理器上下文\n */\nconst StateManagerContext = createContext<import('./AppContext.types').StateManagerContextValue | undefined>(undefined);\n\n/**\n * 主题 Provider 属性\n */\ninterface ThemeProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n}\n\n/**\n * 主题 Provider 组件\n */\nconst ThemeProvider: React.FC<ThemeProviderProps> = React.memo(({ children, initialTheme }) => {\n const [theme, setThemeState] = useState<ThemeConfig>(initialTheme || appConfig.getTheme());\n\n const applyDocumentThemeClass = useCallback((mode?: ThemeConfig['mode']) => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const html = document.documentElement;\n html.classList.remove('light', 'dark');\n\n const resolvedMode = mode === 'system'\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n : (mode || 'light');\n\n html.classList.add(resolvedMode);\n }, []);\n\n // 同步到单例\n useEffect(() => {\n appConfig.setTheme(theme);\n }, [theme]);\n\n // 同步到文档 class,确保首屏与刷新时也能正确反映主题\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n applyDocumentThemeClass(theme.mode);\n\n if (theme.mode !== 'system') {\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const onSystemThemeChange = () => applyDocumentThemeClass('system');\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', onSystemThemeChange);\n return () => mediaQuery.removeEventListener('change', onSystemThemeChange);\n }\n\n mediaQuery.addListener(onSystemThemeChange);\n return () => mediaQuery.removeListener(onSystemThemeChange);\n }, [applyDocumentThemeClass, theme.mode]);\n\n // 更新主题\n const setTheme = useCallback((newTheme: ThemeConfig | ((prev: ThemeConfig) => ThemeConfig)) => {\n setThemeState((prev) => {\n return typeof newTheme === 'function' ? newTheme(prev) : newTheme;\n });\n }, []);\n\n const value: ThemeContextValue = useMemo(\n () => ({\n theme,\n setTheme,\n }),\n [theme, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n});\n\nThemeProvider.displayName = 'ThemeProvider';\n\n/**\n * 国际化 Provider 属性\n */\ninterface LocaleProviderProps extends PropsWithChildren {\n /**\n * 初始语言\n */\n initialLocale?: LangType;\n}\n\n/**\n * 国际化 Provider 组件\n */\nconst LocaleProvider: React.FC<LocaleProviderProps> = React.memo(({ children, initialLocale }) => {\n const [locale, setLocaleState] = useState<LangType>(initialLocale || appConfig.getLocale());\n const [isChanging, setIsChanging] = useState(false);\n\n // 同步到单例\n useEffect(() => {\n appConfig.setLocale(locale);\n }, [locale]);\n\n // 更新语言,添加加载状态\n const setLocale = useCallback(\n (newLocale: LangType) => {\n if (newLocale === locale) {\n return;\n }\n setIsChanging(true);\n setLocaleState(newLocale);\n setLang(newLocale);\n // 使用 requestAnimationFrame 确保状态更新在下一帧\n requestAnimationFrame(() => {\n setIsChanging(false);\n });\n },\n [locale]\n );\n\n const value: LocaleContextValue = useMemo(\n () => ({\n locale,\n setLocale,\n isChanging,\n }),\n [locale, setLocale, isChanging]\n );\n\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n});\n\nLocaleProvider.displayName = 'LocaleProvider';\n\n/**\n * 配置 Provider 属性\n */\ninterface AppConfigProviderProps extends PropsWithChildren {\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: UIProviderConfig;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n}\n\n/**\n * 配置 Provider 组件\n */\nconst AppConfigProvider: React.FC<AppConfigProviderProps> = React.memo(({\n children,\n initialAntdConfig,\n initialInitializationContext,\n}) => {\n const [antdConfig, setAntdConfigState] = useState<UIProviderConfig | undefined>(\n initialAntdConfig || appConfig.getAntdConfig()\n );\n const [initializationContext, setInitializationContextState] = useState<\n InitializationContext | undefined\n >(initialInitializationContext || appConfig.getInitializationContext());\n\n // 同步到单例\n useEffect(() => {\n appConfig.setAntdConfig(antdConfig);\n }, [antdConfig]);\n\n useEffect(() => {\n appConfig.setInitializationContext(initializationContext);\n }, [initializationContext]);\n\n // 更新 Ant Design 配置\n const setAntdConfig = useCallback((config: UIProviderConfig | undefined) => {\n setAntdConfigState(config);\n }, []);\n\n // 更新初始化上下文\n const setInitializationContext = useCallback((context: InitializationContext | undefined) => {\n setInitializationContextState(context);\n }, []);\n\n const value: ConfigContextValue = useMemo(\n () => ({\n antdConfig,\n initializationContext,\n setAntdConfig,\n setInitializationContext,\n }),\n [antdConfig, initializationContext, setAntdConfig, setInitializationContext]\n );\n\n return <ConfigContext.Provider value={value}>{children}</ConfigContext.Provider>;\n});\n\nAppConfigProvider.displayName = 'AppConfigProvider';\n\n/**\n * 应用上下文 Provider 属性\n */\nexport interface AppContextProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n /**\n * 初始国际化语言\n */\n initialLocale?: LangType;\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: UIProviderConfig;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n /**\n * 状态管理器实例\n */\n stateManager?: StateManager | null;\n /**\n * UI App 基础配置\n * \n * 用于传递 UI 适配层的应用级配置(如消息、通知、弹窗容器)。\n */\n antdApp?: UIAppConfig;\n /**\n * UI App 配置(无框架绑定)\n */\n uiApp?: UIAppConfig;\n}\n\n/**\n * 应用上下文 Provider 组件\n * \n * 组合所有 Provider,提供统一的全局上下文\n * \n * @example\n * ```tsx\n * <AppContextProvider\n * initialTheme={{ mode: 'light', primaryColor: '#1890ff' }}\n * initialLocale=\"zh-CN\"\n * >\n * <App />\n * </AppContextProvider>\n * ```\n */\n/**\n * 状态管理器 Provider 组件\n */\nconst StateManagerProvider: React.FC<PropsWithChildren<{ stateManager?: StateManager | null }>> = React.memo(({ children, stateManager }) => {\n const value = useMemo(\n () => ({\n stateManager: stateManager ?? null,\n }),\n [stateManager]\n );\n\n return <StateManagerContext.Provider value={value}>{children}</StateManagerContext.Provider>;\n});\n\nStateManagerProvider.displayName = 'StateManagerProvider';\n\nexport const AppContextProvider: React.FC<AppContextProviderProps> = ({\n children,\n initialTheme,\n initialLocale,\n initialAntdConfig,\n initialInitializationContext,\n stateManager,\n antdApp: _antdApp,\n uiApp: _uiApp,\n}) => {\n // 初始化单例配置(仅执行一次)\n const initializedRef = React.useRef(false);\n React.useEffect(() => {\n if (!initializedRef.current) {\n appConfig.initialize({\n theme: initialTheme,\n locale: initialLocale,\n antdConfig: initialAntdConfig,\n initializationContext: initialInitializationContext,\n });\n initializedRef.current = true;\n }\n }, [initialTheme, initialLocale, initialAntdConfig, initialInitializationContext]);\n\n return (\n <ThemeProvider initialTheme={initialTheme}>\n <LocaleProvider initialLocale={initialLocale}>\n <AppConfigProvider\n initialAntdConfig={initialAntdConfig}\n initialInitializationContext={initialInitializationContext}\n >\n <StateManagerProvider stateManager={stateManager}>\n {children}\n </StateManagerProvider>\n </AppConfigProvider>\n </LocaleProvider>\n </ThemeProvider>\n );\n};\n\n/**\n * 使用主题上下文 Hook\n * \n * @returns 主题上下文值\n * @throws 如果不在 ThemeProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme } = useTheme();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * ```\n */\nexport const useTheme = (): ThemeContextValue => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用国际化上下文 Hook\n * \n * @returns 国际化上下文值\n * @throws 如果不在 LocaleProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { locale, setLocale } = useLocale();\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\nexport const useLocale = (): LocaleContextValue => {\n const context = useContext(LocaleContext);\n if (context === undefined) {\n throw new Error('useLocale 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用配置上下文 Hook\n * \n * @returns 配置上下文值\n * @throws 如果不在 ConfigProvider 内使用会抛出错误\n */\nexport const useConfig = (): ConfigContextValue => {\n const context = useContext(ConfigContext);\n if (context === undefined) {\n throw new Error('useConfig 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用应用上下文 Hook(聚合所有上下文)\n * \n * @returns 应用上下文值\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme, locale, setLocale, antdConfig } = useAppContext();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\n/**\n * 使用状态管理器 Hook\n * \n * @returns 状态管理器实例\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const stateManager = useStateManager();\n * \n * // 创建状态实例\n * const countState = stateManager?.createState(0);\n * ```\n */\nexport const useStateManager = (): StateManager | null => {\n const context = useContext(StateManagerContext);\n if (context === undefined) {\n throw new Error('useStateManager 必须在 AppContextProvider 内使用');\n }\n return context.stateManager;\n};\n\nexport const useAppContext = (): AppContextValue => {\n const themeContext = useTheme();\n const localeContext = useLocale();\n const configContext = useConfig();\n const stateManagerContext = useStateManager();\n\n // 优化:使用更细粒度的依赖项,避免不必要的重新计算\n // 只依赖实际变化的值,函数引用是稳定的\n return useMemo(\n () => ({\n theme: themeContext.theme,\n locale: localeContext.locale,\n antdConfig: configContext.antdConfig,\n initializationContext: configContext.initializationContext,\n stateManager: stateManagerContext,\n setTheme: themeContext.setTheme,\n setLocale: localeContext.setLocale,\n setAntdConfig: configContext.setAntdConfig,\n setInitializationContext: configContext.setInitializationContext,\n }),\n [\n themeContext.theme,\n localeContext.locale,\n configContext.antdConfig,\n configContext.initializationContext,\n stateManagerContext,\n // 函数引用是稳定的,不需要作为依赖\n themeContext.setTheme,\n localeContext.setLocale,\n configContext.setAntdConfig,\n configContext.setInitializationContext,\n ]\n );\n};\n"],"names":["AppContextProvider","useAppContext","useConfig","useLocale","useStateManager","useTheme","ThemeContext","createContext","undefined","LocaleContext","ConfigContext","StateManagerContext","ThemeProvider","React","memo","children","initialTheme","theme","setThemeState","useState","appConfig","getTheme","applyDocumentThemeClass","useCallback","mode","window","html","document","documentElement","classList","remove","resolvedMode","matchMedia","matches","add","useEffect","setTheme","mediaQuery","onSystemThemeChange","addEventListener","removeEventListener","addListener","removeListener","newTheme","prev","value","useMemo","Provider","displayName","LocaleProvider","initialLocale","locale","setLocaleState","getLocale","isChanging","setIsChanging","setLocale","newLocale","setLang","requestAnimationFrame","AppConfigProvider","initialAntdConfig","initialInitializationContext","antdConfig","setAntdConfigState","getAntdConfig","initializationContext","setInitializationContextState","getInitializationContext","setAntdConfig","setInitializationContext","config","context","StateManagerProvider","stateManager","antdApp","_antdApp","uiApp","_uiApp","initializedRef","useRef","current","initialize","useContext","Error","themeContext","localeContext","configContext","stateManagerContext"],"mappings":";;;;;;;;;;;QA2SaA;eAAAA;;QAyIAC;eAAAA;;QA/CAC;eAAAA;;QAdAC;eAAAA;;QAqDAC;eAAAA;;QA3EAC;eAAAA;;;;+DAjW+E;yBAEpE;2BAUE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAI1B;;CAEC,GACD,MAAMC,6BAAeC,IAAAA,oBAAa,EAAgCC;AAElE;;CAEC,GACD,MAAMC,8BAAgBF,IAAAA,oBAAa,EAAiCC;AAEpE;;CAEC,GACD,MAAME,8BAAgBH,IAAAA,oBAAa,EAAiCC;AAEpE;;CAEC,GACD,MAAMG,oCAAsBJ,IAAAA,oBAAa,EAAoEC;AAY7G;;CAEC,GACD,MAAMI,8BAA8CC,cAAK,CAACC,IAAI,CAAC,CAAC,EAAEC,QAAQ,EAAEC,YAAY,EAAE;IACtF,MAAM,CAACC,OAAOC,cAAc,GAAGC,IAAAA,eAAQ,EAAcH,gBAAgBI,oBAAS,CAACC,QAAQ;IAEvF,MAAMC,0BAA0BC,IAAAA,kBAAW,EAAC,CAACC;QACzC,IAAI,OAAOC,WAAW,aAAa;YAC/B;QACJ;QAEA,MAAMC,OAAOC,SAASC,eAAe;QACrCF,KAAKG,SAAS,CAACC,MAAM,CAAC,SAAS;QAE/B,MAAMC,eAAeP,SAAS,WACvBC,OAAOO,UAAU,CAAC,gCAAgCC,OAAO,GAAG,SAAS,UACrET,QAAQ;QAEfE,KAAKG,SAAS,CAACK,GAAG,CAACH;IACvB,GAAG,EAAE;IAEL,QAAQ;IACRI,IAAAA,gBAAS,EAAC;QACNf,oBAAS,CAACgB,QAAQ,CAACnB;IACvB,GAAG;QAACA;KAAM;IAEV,+BAA+B;IAC/BkB,IAAAA,gBAAS,EAAC;QACN,IAAI,OAAOV,WAAW,aAAa;YAC/B;QACJ;QAEAH,wBAAwBL,MAAMO,IAAI;QAElC,IAAIP,MAAMO,IAAI,KAAK,UAAU;YACzB;QACJ;QAEA,MAAMa,aAAaZ,OAAOO,UAAU,CAAC;QACrC,MAAMM,sBAAsB,IAAMhB,wBAAwB;QAE1D,IAAI,OAAOe,WAAWE,gBAAgB,KAAK,YAAY;YACnDF,WAAWE,gBAAgB,CAAC,UAAUD;YACtC,OAAO,IAAMD,WAAWG,mBAAmB,CAAC,UAAUF;QAC1D;QAEAD,WAAWI,WAAW,CAACH;QACvB,OAAO,IAAMD,WAAWK,cAAc,CAACJ;IAC3C,GAAG;QAAChB;QAAyBL,MAAMO,IAAI;KAAC;IAExC,OAAO;IACP,MAAMY,WAAWb,IAAAA,kBAAW,EAAC,CAACoB;QAC1BzB,cAAc,CAAC0B;YACX,OAAO,OAAOD,aAAa,aAAaA,SAASC,QAAQD;QAC7D;IACJ,GAAG,EAAE;IAEL,MAAME,QAA2BC,IAAAA,cAAO,EACpC,IAAO,CAAA;YACH7B;YACAmB;QACJ,CAAA,GACA;QAACnB;QAAOmB;KAAS;IAGrB,qBAAO,qBAAC9B,aAAayC,QAAQ;QAACF,OAAOA;kBAAQ9B;;AACjD;AAEAH,cAAcoC,WAAW,GAAG;AAY5B;;CAEC,GACD,MAAMC,+BAAgDpC,cAAK,CAACC,IAAI,CAAC,CAAC,EAAEC,QAAQ,EAAEmC,aAAa,EAAE;IACzF,MAAM,CAACC,QAAQC,eAAe,GAAGjC,IAAAA,eAAQ,EAAW+B,iBAAiB9B,oBAAS,CAACiC,SAAS;IACxF,MAAM,CAACC,YAAYC,cAAc,GAAGpC,IAAAA,eAAQ,EAAC;IAE7C,QAAQ;IACRgB,IAAAA,gBAAS,EAAC;QACNf,oBAAS,CAACoC,SAAS,CAACL;IACxB,GAAG;QAACA;KAAO;IAEX,cAAc;IACd,MAAMK,YAAYjC,IAAAA,kBAAW,EACzB,CAACkC;QACG,IAAIA,cAAcN,QAAQ;YACtB;QACJ;QACAI,cAAc;QACdH,eAAeK;QACfC,IAAAA,gBAAO,EAACD;QACR,sCAAsC;QACtCE,sBAAsB;YAClBJ,cAAc;QAClB;IACJ,GACA;QAACJ;KAAO;IAGZ,MAAMN,QAA4BC,IAAAA,cAAO,EACrC,IAAO,CAAA;YACHK;YACAK;YACAF;QACJ,CAAA,GACA;QAACH;QAAQK;QAAWF;KAAW;IAGnC,qBAAO,qBAAC7C,cAAcsC,QAAQ;QAACF,OAAOA;kBAAQ9B;;AAClD;AAEAkC,eAAeD,WAAW,GAAG;AAgB7B;;CAEC,GACD,MAAMY,kCAAsD/C,cAAK,CAACC,IAAI,CAAC,CAAC,EACpEC,QAAQ,EACR8C,iBAAiB,EACjBC,4BAA4B,EAC/B;IACG,MAAM,CAACC,YAAYC,mBAAmB,GAAG7C,IAAAA,eAAQ,EAC7C0C,qBAAqBzC,oBAAS,CAAC6C,aAAa;IAEhD,MAAM,CAACC,uBAAuBC,8BAA8B,GAAGhD,IAAAA,eAAQ,EAErE2C,gCAAgC1C,oBAAS,CAACgD,wBAAwB;IAEpE,QAAQ;IACRjC,IAAAA,gBAAS,EAAC;QACNf,oBAAS,CAACiD,aAAa,CAACN;IAC5B,GAAG;QAACA;KAAW;IAEf5B,IAAAA,gBAAS,EAAC;QACNf,oBAAS,CAACkD,wBAAwB,CAACJ;IACvC,GAAG;QAACA;KAAsB;IAE1B,mBAAmB;IACnB,MAAMG,gBAAgB9C,IAAAA,kBAAW,EAAC,CAACgD;QAC/BP,mBAAmBO;IACvB,GAAG,EAAE;IAEL,WAAW;IACX,MAAMD,2BAA2B/C,IAAAA,kBAAW,EAAC,CAACiD;QAC1CL,8BAA8BK;IAClC,GAAG,EAAE;IAEL,MAAM3B,QAA4BC,IAAAA,cAAO,EACrC,IAAO,CAAA;YACHiB;YACAG;YACAG;YACAC;QACJ,CAAA,GACA;QAACP;QAAYG;QAAuBG;QAAeC;KAAyB;IAGhF,qBAAO,qBAAC5D,cAAcqC,QAAQ;QAACF,OAAOA;kBAAQ9B;;AAClD;AAEA6C,kBAAkBZ,WAAW,GAAG;AAsChC;;;;;;;;;;;;;;CAcC,GACD;;CAEC,GACD,MAAMyB,qCAA4F5D,cAAK,CAACC,IAAI,CAAC,CAAC,EAAEC,QAAQ,EAAE2D,YAAY,EAAE;IACpI,MAAM7B,QAAQC,IAAAA,cAAO,EACjB,IAAO,CAAA;YACH4B,cAAcA,gBAAgB;QAClC,CAAA,GACA;QAACA;KAAa;IAGlB,qBAAO,qBAAC/D,oBAAoBoC,QAAQ;QAACF,OAAOA;kBAAQ9B;;AACxD;AAEA0D,qBAAqBzB,WAAW,GAAG;AAE5B,MAAMhD,qBAAwD,CAAC,EAClEe,QAAQ,EACRC,YAAY,EACZkC,aAAa,EACbW,iBAAiB,EACjBC,4BAA4B,EAC5BY,YAAY,EACZC,SAASC,QAAQ,EACjBC,OAAOC,MAAM,EAChB;IACG,iBAAiB;IACjB,MAAMC,iBAAiBlE,cAAK,CAACmE,MAAM,CAAC;IACpCnE,cAAK,CAACsB,SAAS,CAAC;QACZ,IAAI,CAAC4C,eAAeE,OAAO,EAAE;YACzB7D,oBAAS,CAAC8D,UAAU,CAAC;gBACjBjE,OAAOD;gBACPmC,QAAQD;gBACRa,YAAYF;gBACZK,uBAAuBJ;YAC3B;YACAiB,eAAeE,OAAO,GAAG;QAC7B;IACJ,GAAG;QAACjE;QAAckC;QAAeW;QAAmBC;KAA6B;IAEjF,qBACI,qBAAClD;QAAcI,cAAcA;kBACzB,cAAA,qBAACiC;YAAeC,eAAeA;sBAC3B,cAAA,qBAACU;gBACGC,mBAAmBA;gBACnBC,8BAA8BA;0BAE9B,cAAA,qBAACW;oBAAqBC,cAAcA;8BAC/B3D;;;;;AAMzB;AAgBO,MAAMV,WAAW;IACpB,MAAMmE,UAAUW,IAAAA,iBAAU,EAAC7E;IAC3B,IAAIkE,YAAYhE,WAAW;QACvB,MAAM,IAAI4E,MAAM;IACpB;IACA,OAAOZ;AACX;AAgBO,MAAMrE,YAAY;IACrB,MAAMqE,UAAUW,IAAAA,iBAAU,EAAC1E;IAC3B,IAAI+D,YAAYhE,WAAW;QACvB,MAAM,IAAI4E,MAAM;IACpB;IACA,OAAOZ;AACX;AAQO,MAAMtE,YAAY;IACrB,MAAMsE,UAAUW,IAAAA,iBAAU,EAACzE;IAC3B,IAAI8D,YAAYhE,WAAW;QACvB,MAAM,IAAI4E,MAAM;IACpB;IACA,OAAOZ;AACX;AAiCO,MAAMpE,kBAAkB;IAC3B,MAAMoE,UAAUW,IAAAA,iBAAU,EAACxE;IAC3B,IAAI6D,YAAYhE,WAAW;QACvB,MAAM,IAAI4E,MAAM;IACpB;IACA,OAAOZ,QAAQE,YAAY;AAC/B;AAEO,MAAMzE,gBAAgB;IACzB,MAAMoF,eAAehF;IACrB,MAAMiF,gBAAgBnF;IACtB,MAAMoF,gBAAgBrF;IACtB,MAAMsF,sBAAsBpF;IAE5B,2BAA2B;IAC3B,qBAAqB;IACrB,OAAO0C,IAAAA,cAAO,EACV,IAAO,CAAA;YACH7B,OAAOoE,aAAapE,KAAK;YACzBkC,QAAQmC,cAAcnC,MAAM;YAC5BY,YAAYwB,cAAcxB,UAAU;YACpCG,uBAAuBqB,cAAcrB,qBAAqB;YAC1DQ,cAAcc;YACdpD,UAAUiD,aAAajD,QAAQ;YAC/BoB,WAAW8B,cAAc9B,SAAS;YAClCa,eAAekB,cAAclB,aAAa;YAC1CC,0BAA0BiB,cAAcjB,wBAAwB;QACpE,CAAA,GACA;QACIe,aAAapE,KAAK;QAClBqE,cAAcnC,MAAM;QACpBoC,cAAcxB,UAAU;QACxBwB,cAAcrB,qBAAqB;QACnCsB;QACA,mBAAmB;QACnBH,aAAajD,QAAQ;QACrBkD,cAAc9B,SAAS;QACvB+B,cAAclB,aAAa;QAC3BkB,cAAcjB,wBAAwB;KACzC;AAET"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import type { PropsWithChildren } from 'react';
|
|
3
|
-
import type { AppProps, ConfigProviderProps } from 'antd';
|
|
4
3
|
import type { LangType } from '../../library/locale/types';
|
|
5
4
|
import type { InitializationContext } from '../initialization';
|
|
6
5
|
import type { ThemeContextValue, LocaleContextValue, ConfigContextValue, AppContextValue, ThemeConfig } from './AppContext.types';
|
|
7
6
|
import type { StateManager } from '../../state';
|
|
7
|
+
import type { UIAppConfig, UIProviderConfig } from '../types';
|
|
8
8
|
/**
|
|
9
9
|
* 应用上下文 Provider 属性
|
|
10
10
|
*/
|
|
@@ -20,7 +20,7 @@ export interface AppContextProviderProps extends PropsWithChildren {
|
|
|
20
20
|
/**
|
|
21
21
|
* 初始 Ant Design 配置
|
|
22
22
|
*/
|
|
23
|
-
initialAntdConfig?:
|
|
23
|
+
initialAntdConfig?: UIProviderConfig;
|
|
24
24
|
/**
|
|
25
25
|
* 初始初始化上下文
|
|
26
26
|
*/
|
|
@@ -30,11 +30,15 @@ export interface AppContextProviderProps extends PropsWithChildren {
|
|
|
30
30
|
*/
|
|
31
31
|
stateManager?: StateManager | null;
|
|
32
32
|
/**
|
|
33
|
-
*
|
|
33
|
+
* UI App 基础配置
|
|
34
34
|
*
|
|
35
|
-
*
|
|
35
|
+
* 用于传递 UI 适配层的应用级配置(如消息、通知、弹窗容器)。
|
|
36
36
|
*/
|
|
37
|
-
antdApp?:
|
|
37
|
+
antdApp?: UIAppConfig;
|
|
38
|
+
/**
|
|
39
|
+
* UI App 配置(无框架绑定)
|
|
40
|
+
*/
|
|
41
|
+
uiApp?: UIAppConfig;
|
|
38
42
|
}
|
|
39
43
|
export declare const AppContextProvider: React.FC<AppContextProviderProps>;
|
|
40
44
|
/**
|
|
@@ -107,4 +111,3 @@ export declare const useConfig: () => ConfigContextValue;
|
|
|
107
111
|
*/
|
|
108
112
|
export declare const useStateManager: () => StateManager | null;
|
|
109
113
|
export declare const useAppContext: () => AppContextValue;
|
|
110
|
-
//# sourceMappingURL=AppContext.d.ts.map
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from "react";
|
|
3
|
-
import { App } from "antd";
|
|
4
3
|
import { setLang } from "../../library";
|
|
5
4
|
import { appConfig } from "../config/AppConfig";
|
|
6
5
|
/**
|
|
@@ -19,36 +18,46 @@ import { appConfig } from "../config/AppConfig";
|
|
|
19
18
|
* 主题 Provider 组件
|
|
20
19
|
*/ const ThemeProvider = /*#__PURE__*/ React.memo(({ children, initialTheme })=>{
|
|
21
20
|
const [theme, setThemeState] = useState(initialTheme || appConfig.getTheme());
|
|
21
|
+
const applyDocumentThemeClass = useCallback((mode)=>{
|
|
22
|
+
if (typeof window === 'undefined') {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const html = document.documentElement;
|
|
26
|
+
html.classList.remove('light', 'dark');
|
|
27
|
+
const resolvedMode = mode === 'system' ? window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : mode || 'light';
|
|
28
|
+
html.classList.add(resolvedMode);
|
|
29
|
+
}, []);
|
|
22
30
|
// 同步到单例
|
|
23
31
|
useEffect(()=>{
|
|
24
32
|
appConfig.setTheme(theme);
|
|
25
33
|
}, [
|
|
26
34
|
theme
|
|
27
35
|
]);
|
|
28
|
-
//
|
|
36
|
+
// 同步到文档 class,确保首屏与刷新时也能正确反映主题
|
|
37
|
+
useEffect(()=>{
|
|
38
|
+
if (typeof window === 'undefined') {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
applyDocumentThemeClass(theme.mode);
|
|
42
|
+
if (theme.mode !== 'system') {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
46
|
+
const onSystemThemeChange = ()=>applyDocumentThemeClass('system');
|
|
47
|
+
if (typeof mediaQuery.addEventListener === 'function') {
|
|
48
|
+
mediaQuery.addEventListener('change', onSystemThemeChange);
|
|
49
|
+
return ()=>mediaQuery.removeEventListener('change', onSystemThemeChange);
|
|
50
|
+
}
|
|
51
|
+
mediaQuery.addListener(onSystemThemeChange);
|
|
52
|
+
return ()=>mediaQuery.removeListener(onSystemThemeChange);
|
|
53
|
+
}, [
|
|
54
|
+
applyDocumentThemeClass,
|
|
55
|
+
theme.mode
|
|
56
|
+
]);
|
|
57
|
+
// 更新主题
|
|
29
58
|
const setTheme = useCallback((newTheme)=>{
|
|
30
59
|
setThemeState((prev)=>{
|
|
31
|
-
|
|
32
|
-
// 如果主题模式改变,更新文档类名(添加过渡效果)
|
|
33
|
-
if (updated.mode !== prev.mode) {
|
|
34
|
-
// 使用 requestAnimationFrame 确保 DOM 更新在下一帧
|
|
35
|
-
requestAnimationFrame(()=>{
|
|
36
|
-
const html = document.documentElement;
|
|
37
|
-
html.classList.remove('light', 'dark');
|
|
38
|
-
// 添加过渡类(如果支持)
|
|
39
|
-
if (html.style.transition === undefined) {
|
|
40
|
-
html.style.transition = 'background-color 0.3s ease, color 0.3s ease';
|
|
41
|
-
}
|
|
42
|
-
if (updated.mode && updated.mode !== 'auto') {
|
|
43
|
-
html.classList.add(updated.mode);
|
|
44
|
-
} else if (updated.mode === 'auto') {
|
|
45
|
-
// 跟随系统设置
|
|
46
|
-
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
47
|
-
html.classList.add(prefersDark ? 'dark' : 'light');
|
|
48
|
-
}
|
|
49
|
-
});
|
|
50
|
-
}
|
|
51
|
-
return updated;
|
|
60
|
+
return typeof newTheme === 'function' ? newTheme(prev) : newTheme;
|
|
52
61
|
});
|
|
53
62
|
}, []);
|
|
54
63
|
const value = useMemo(()=>({
|
|
@@ -174,7 +183,7 @@ AppConfigProvider.displayName = 'AppConfigProvider';
|
|
|
174
183
|
});
|
|
175
184
|
});
|
|
176
185
|
StateManagerProvider.displayName = 'StateManagerProvider';
|
|
177
|
-
export const AppContextProvider = ({ children, initialTheme, initialLocale, initialAntdConfig, initialInitializationContext, stateManager, antdApp })=>{
|
|
186
|
+
export const AppContextProvider = ({ children, initialTheme, initialLocale, initialAntdConfig, initialInitializationContext, stateManager, antdApp: _antdApp, uiApp: _uiApp })=>{
|
|
178
187
|
// 初始化单例配置(仅执行一次)
|
|
179
188
|
const initializedRef = React.useRef(false);
|
|
180
189
|
React.useEffect(()=>{
|
|
@@ -200,12 +209,9 @@ export const AppContextProvider = ({ children, initialTheme, initialLocale, init
|
|
|
200
209
|
children: /*#__PURE__*/ _jsx(AppConfigProvider, {
|
|
201
210
|
initialAntdConfig: initialAntdConfig,
|
|
202
211
|
initialInitializationContext: initialInitializationContext,
|
|
203
|
-
children: /*#__PURE__*/ _jsx(
|
|
204
|
-
|
|
205
|
-
children:
|
|
206
|
-
stateManager: stateManager,
|
|
207
|
-
children: children
|
|
208
|
-
})
|
|
212
|
+
children: /*#__PURE__*/ _jsx(StateManagerProvider, {
|
|
213
|
+
stateManager: stateManager,
|
|
214
|
+
children: children
|
|
209
215
|
})
|
|
210
216
|
})
|
|
211
217
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/app/AppContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { App } from 'antd';\nimport type { AppProps, ConfigProviderProps } from 'antd';\nimport { setLang } from '../../library';\nimport type { LangType } from '../../library/locale/types';\nimport type { InitializationContext } from '../initialization';\nimport type {\n ThemeContextValue,\n LocaleContextValue,\n ConfigContextValue,\n AppContextValue,\n ThemeConfig,\n} from './AppContext.types';\nimport { appConfig } from '../config/AppConfig';\nimport type { StateManager } from '../../state';\n\n/**\n * 主题上下文\n */\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\n/**\n * 国际化上下文\n */\nconst LocaleContext = createContext<LocaleContextValue | undefined>(undefined);\n\n/**\n * 配置上下文\n */\nconst ConfigContext = createContext<ConfigContextValue | undefined>(undefined);\n\n/**\n * 状态管理器上下文\n */\nconst StateManagerContext = createContext<import('./AppContext.types').StateManagerContextValue | undefined>(undefined);\n\n/**\n * 主题 Provider 属性\n */\ninterface ThemeProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n}\n\n/**\n * 主题 Provider 组件\n */\nconst ThemeProvider: React.FC<ThemeProviderProps> = React.memo(({ children, initialTheme }) => {\n const [theme, setThemeState] = useState<ThemeConfig>(initialTheme || appConfig.getTheme());\n\n // 同步到单例\n useEffect(() => {\n appConfig.setTheme(theme);\n }, [theme]);\n\n // 更新主题,添加过渡动画支持\n const setTheme = useCallback((newTheme: ThemeConfig | ((prev: ThemeConfig) => ThemeConfig)) => {\n setThemeState((prev) => {\n const updated = typeof newTheme === 'function' ? newTheme(prev) : newTheme;\n\n // 如果主题模式改变,更新文档类名(添加过渡效果)\n if (updated.mode !== prev.mode) {\n // 使用 requestAnimationFrame 确保 DOM 更新在下一帧\n requestAnimationFrame(() => {\n const html = document.documentElement;\n html.classList.remove('light', 'dark');\n \n // 添加过渡类(如果支持)\n if (html.style.transition === undefined) {\n html.style.transition = 'background-color 0.3s ease, color 0.3s ease';\n }\n \n if (updated.mode && updated.mode !== 'auto') {\n html.classList.add(updated.mode);\n } else if (updated.mode === 'auto') {\n // 跟随系统设置\n const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;\n html.classList.add(prefersDark ? 'dark' : 'light');\n }\n });\n }\n\n return updated;\n });\n }, []);\n\n const value: ThemeContextValue = useMemo(\n () => ({\n theme,\n setTheme,\n }),\n [theme, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n});\n\nThemeProvider.displayName = 'ThemeProvider';\n\n/**\n * 国际化 Provider 属性\n */\ninterface LocaleProviderProps extends PropsWithChildren {\n /**\n * 初始语言\n */\n initialLocale?: LangType;\n}\n\n/**\n * 国际化 Provider 组件\n */\nconst LocaleProvider: React.FC<LocaleProviderProps> = React.memo(({ children, initialLocale }) => {\n const [locale, setLocaleState] = useState<LangType>(initialLocale || appConfig.getLocale());\n const [isChanging, setIsChanging] = useState(false);\n\n // 同步到单例\n useEffect(() => {\n appConfig.setLocale(locale);\n }, [locale]);\n\n // 更新语言,添加加载状态\n const setLocale = useCallback(\n (newLocale: LangType) => {\n if (newLocale === locale) {\n return;\n }\n setIsChanging(true);\n setLocaleState(newLocale);\n setLang(newLocale);\n // 使用 requestAnimationFrame 确保状态更新在下一帧\n requestAnimationFrame(() => {\n setIsChanging(false);\n });\n },\n [locale]\n );\n\n const value: LocaleContextValue = useMemo(\n () => ({\n locale,\n setLocale,\n isChanging,\n }),\n [locale, setLocale, isChanging]\n );\n\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n});\n\nLocaleProvider.displayName = 'LocaleProvider';\n\n/**\n * 配置 Provider 属性\n */\ninterface AppConfigProviderProps extends PropsWithChildren {\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: ConfigProviderProps;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n}\n\n/**\n * 配置 Provider 组件\n */\nconst AppConfigProvider: React.FC<AppConfigProviderProps> = React.memo(({\n children,\n initialAntdConfig,\n initialInitializationContext,\n}) => {\n const [antdConfig, setAntdConfigState] = useState<ConfigProviderProps | undefined>(\n initialAntdConfig || appConfig.getAntdConfig()\n );\n const [initializationContext, setInitializationContextState] = useState<\n InitializationContext | undefined\n >(initialInitializationContext || appConfig.getInitializationContext());\n\n // 同步到单例\n useEffect(() => {\n appConfig.setAntdConfig(antdConfig);\n }, [antdConfig]);\n\n useEffect(() => {\n appConfig.setInitializationContext(initializationContext);\n }, [initializationContext]);\n\n // 更新 Ant Design 配置\n const setAntdConfig = useCallback((config: ConfigProviderProps | undefined) => {\n setAntdConfigState(config);\n }, []);\n\n // 更新初始化上下文\n const setInitializationContext = useCallback((context: InitializationContext | undefined) => {\n setInitializationContextState(context);\n }, []);\n\n const value: ConfigContextValue = useMemo(\n () => ({\n antdConfig,\n initializationContext,\n setAntdConfig,\n setInitializationContext,\n }),\n [antdConfig, initializationContext, setAntdConfig, setInitializationContext]\n );\n\n return <ConfigContext.Provider value={value}>{children}</ConfigContext.Provider>;\n});\n\nAppConfigProvider.displayName = 'AppConfigProvider';\n\n/**\n * 应用上下文 Provider 属性\n */\nexport interface AppContextProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n /**\n * 初始国际化语言\n */\n initialLocale?: LangType;\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: ConfigProviderProps;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n /**\n * 状态管理器实例\n */\n stateManager?: StateManager | null;\n /**\n * antd App 组件配置\n * \n * 用于配置 antd 的 App 组件,使 message、modal、notification 等静态方法能够正确使用。\n */\n antdApp?: AppProps;\n}\n\n/**\n * 应用上下文 Provider 组件\n * \n * 组合所有 Provider,提供统一的全局上下文\n * \n * @example\n * ```tsx\n * <AppContextProvider\n * initialTheme={{ mode: 'light', primaryColor: '#1890ff' }}\n * initialLocale=\"zh-CN\"\n * >\n * <App />\n * </AppContextProvider>\n * ```\n */\n/**\n * 状态管理器 Provider 组件\n */\nconst StateManagerProvider: React.FC<PropsWithChildren<{ stateManager?: StateManager | null }>> = React.memo(({ children, stateManager }) => {\n const value = useMemo(\n () => ({\n stateManager: stateManager ?? null,\n }),\n [stateManager]\n );\n\n return <StateManagerContext.Provider value={value}>{children}</StateManagerContext.Provider>;\n});\n\nStateManagerProvider.displayName = 'StateManagerProvider';\n\nexport const AppContextProvider: React.FC<AppContextProviderProps> = ({\n children,\n initialTheme,\n initialLocale,\n initialAntdConfig,\n initialInitializationContext,\n stateManager,\n antdApp,\n}) => {\n // 初始化单例配置(仅执行一次)\n const initializedRef = React.useRef(false);\n React.useEffect(() => {\n if (!initializedRef.current) {\n appConfig.initialize({\n theme: initialTheme,\n locale: initialLocale,\n antdConfig: initialAntdConfig,\n initializationContext: initialInitializationContext,\n });\n initializedRef.current = true;\n }\n }, [initialTheme, initialLocale, initialAntdConfig, initialInitializationContext]);\n\n return (\n <ThemeProvider initialTheme={initialTheme}>\n <LocaleProvider initialLocale={initialLocale}>\n <AppConfigProvider\n initialAntdConfig={initialAntdConfig}\n initialInitializationContext={initialInitializationContext}\n >\n <App {...antdApp}>\n <StateManagerProvider stateManager={stateManager}>\n {children}\n </StateManagerProvider>\n </App>\n </AppConfigProvider>\n </LocaleProvider>\n </ThemeProvider>\n );\n};\n\n/**\n * 使用主题上下文 Hook\n * \n * @returns 主题上下文值\n * @throws 如果不在 ThemeProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme } = useTheme();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * ```\n */\nexport const useTheme = (): ThemeContextValue => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用国际化上下文 Hook\n * \n * @returns 国际化上下文值\n * @throws 如果不在 LocaleProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { locale, setLocale } = useLocale();\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\nexport const useLocale = (): LocaleContextValue => {\n const context = useContext(LocaleContext);\n if (context === undefined) {\n throw new Error('useLocale 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用配置上下文 Hook\n * \n * @returns 配置上下文值\n * @throws 如果不在 ConfigProvider 内使用会抛出错误\n */\nexport const useConfig = (): ConfigContextValue => {\n const context = useContext(ConfigContext);\n if (context === undefined) {\n throw new Error('useConfig 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用应用上下文 Hook(聚合所有上下文)\n * \n * @returns 应用上下文值\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme, locale, setLocale, antdConfig } = useAppContext();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\n/**\n * 使用状态管理器 Hook\n * \n * @returns 状态管理器实例\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const stateManager = useStateManager();\n * \n * // 创建状态实例\n * const countState = stateManager?.createState(0);\n * ```\n */\nexport const useStateManager = (): StateManager | null => {\n const context = useContext(StateManagerContext);\n if (context === undefined) {\n throw new Error('useStateManager 必须在 AppContextProvider 内使用');\n }\n return context.stateManager;\n};\n\nexport const useAppContext = (): AppContextValue => {\n const themeContext = useTheme();\n const localeContext = useLocale();\n const configContext = useConfig();\n const stateManagerContext = useStateManager();\n\n // 优化:使用更细粒度的依赖项,避免不必要的重新计算\n // 只依赖实际变化的值,函数引用是稳定的\n return useMemo(\n () => ({\n theme: themeContext.theme,\n locale: localeContext.locale,\n antdConfig: configContext.antdConfig,\n initializationContext: configContext.initializationContext,\n stateManager: stateManagerContext,\n setTheme: themeContext.setTheme,\n setLocale: localeContext.setLocale,\n setAntdConfig: configContext.setAntdConfig,\n setInitializationContext: configContext.setInitializationContext,\n }),\n [\n themeContext.theme,\n localeContext.locale,\n configContext.antdConfig,\n configContext.initializationContext,\n stateManagerContext,\n // 函数引用是稳定的,不需要作为依赖\n themeContext.setTheme,\n localeContext.setLocale,\n configContext.setAntdConfig,\n configContext.setInitializationContext,\n ]\n );\n};\n"],"names":["React","createContext","useContext","useState","useCallback","useMemo","useEffect","App","setLang","appConfig","ThemeContext","undefined","LocaleContext","ConfigContext","StateManagerContext","ThemeProvider","memo","children","initialTheme","theme","setThemeState","getTheme","setTheme","newTheme","prev","updated","mode","requestAnimationFrame","html","document","documentElement","classList","remove","style","transition","add","prefersDark","window","matchMedia","matches","value","Provider","displayName","LocaleProvider","initialLocale","locale","setLocaleState","getLocale","isChanging","setIsChanging","setLocale","newLocale","AppConfigProvider","initialAntdConfig","initialInitializationContext","antdConfig","setAntdConfigState","getAntdConfig","initializationContext","setInitializationContextState","getInitializationContext","setAntdConfig","setInitializationContext","config","context","StateManagerProvider","stateManager","AppContextProvider","antdApp","initializedRef","useRef","current","initialize","useTheme","Error","useLocale","useConfig","useStateManager","useAppContext","themeContext","localeContext","configContext","stateManagerContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/core/app/AppContext.tsx"],"sourcesContent":["import React, { createContext, useContext, useState, useCallback, useMemo, useEffect } from 'react';\nimport type { PropsWithChildren } from 'react';\nimport { setLang } from '../../library';\nimport type { LangType } from '../../library/locale/types';\nimport type { InitializationContext } from '../initialization';\nimport type {\n ThemeContextValue,\n LocaleContextValue,\n ConfigContextValue,\n AppContextValue,\n ThemeConfig,\n} from './AppContext.types';\nimport { appConfig } from '../config/AppConfig';\nimport type { StateManager } from '../../state';\nimport type { UIAppConfig, UIProviderConfig } from '../types';\n\n/**\n * 主题上下文\n */\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\n/**\n * 国际化上下文\n */\nconst LocaleContext = createContext<LocaleContextValue | undefined>(undefined);\n\n/**\n * 配置上下文\n */\nconst ConfigContext = createContext<ConfigContextValue | undefined>(undefined);\n\n/**\n * 状态管理器上下文\n */\nconst StateManagerContext = createContext<import('./AppContext.types').StateManagerContextValue | undefined>(undefined);\n\n/**\n * 主题 Provider 属性\n */\ninterface ThemeProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n}\n\n/**\n * 主题 Provider 组件\n */\nconst ThemeProvider: React.FC<ThemeProviderProps> = React.memo(({ children, initialTheme }) => {\n const [theme, setThemeState] = useState<ThemeConfig>(initialTheme || appConfig.getTheme());\n\n const applyDocumentThemeClass = useCallback((mode?: ThemeConfig['mode']) => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const html = document.documentElement;\n html.classList.remove('light', 'dark');\n\n const resolvedMode = mode === 'system'\n ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light')\n : (mode || 'light');\n\n html.classList.add(resolvedMode);\n }, []);\n\n // 同步到单例\n useEffect(() => {\n appConfig.setTheme(theme);\n }, [theme]);\n\n // 同步到文档 class,确保首屏与刷新时也能正确反映主题\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n applyDocumentThemeClass(theme.mode);\n\n if (theme.mode !== 'system') {\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const onSystemThemeChange = () => applyDocumentThemeClass('system');\n\n if (typeof mediaQuery.addEventListener === 'function') {\n mediaQuery.addEventListener('change', onSystemThemeChange);\n return () => mediaQuery.removeEventListener('change', onSystemThemeChange);\n }\n\n mediaQuery.addListener(onSystemThemeChange);\n return () => mediaQuery.removeListener(onSystemThemeChange);\n }, [applyDocumentThemeClass, theme.mode]);\n\n // 更新主题\n const setTheme = useCallback((newTheme: ThemeConfig | ((prev: ThemeConfig) => ThemeConfig)) => {\n setThemeState((prev) => {\n return typeof newTheme === 'function' ? newTheme(prev) : newTheme;\n });\n }, []);\n\n const value: ThemeContextValue = useMemo(\n () => ({\n theme,\n setTheme,\n }),\n [theme, setTheme]\n );\n\n return <ThemeContext.Provider value={value}>{children}</ThemeContext.Provider>;\n});\n\nThemeProvider.displayName = 'ThemeProvider';\n\n/**\n * 国际化 Provider 属性\n */\ninterface LocaleProviderProps extends PropsWithChildren {\n /**\n * 初始语言\n */\n initialLocale?: LangType;\n}\n\n/**\n * 国际化 Provider 组件\n */\nconst LocaleProvider: React.FC<LocaleProviderProps> = React.memo(({ children, initialLocale }) => {\n const [locale, setLocaleState] = useState<LangType>(initialLocale || appConfig.getLocale());\n const [isChanging, setIsChanging] = useState(false);\n\n // 同步到单例\n useEffect(() => {\n appConfig.setLocale(locale);\n }, [locale]);\n\n // 更新语言,添加加载状态\n const setLocale = useCallback(\n (newLocale: LangType) => {\n if (newLocale === locale) {\n return;\n }\n setIsChanging(true);\n setLocaleState(newLocale);\n setLang(newLocale);\n // 使用 requestAnimationFrame 确保状态更新在下一帧\n requestAnimationFrame(() => {\n setIsChanging(false);\n });\n },\n [locale]\n );\n\n const value: LocaleContextValue = useMemo(\n () => ({\n locale,\n setLocale,\n isChanging,\n }),\n [locale, setLocale, isChanging]\n );\n\n return <LocaleContext.Provider value={value}>{children}</LocaleContext.Provider>;\n});\n\nLocaleProvider.displayName = 'LocaleProvider';\n\n/**\n * 配置 Provider 属性\n */\ninterface AppConfigProviderProps extends PropsWithChildren {\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: UIProviderConfig;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n}\n\n/**\n * 配置 Provider 组件\n */\nconst AppConfigProvider: React.FC<AppConfigProviderProps> = React.memo(({\n children,\n initialAntdConfig,\n initialInitializationContext,\n}) => {\n const [antdConfig, setAntdConfigState] = useState<UIProviderConfig | undefined>(\n initialAntdConfig || appConfig.getAntdConfig()\n );\n const [initializationContext, setInitializationContextState] = useState<\n InitializationContext | undefined\n >(initialInitializationContext || appConfig.getInitializationContext());\n\n // 同步到单例\n useEffect(() => {\n appConfig.setAntdConfig(antdConfig);\n }, [antdConfig]);\n\n useEffect(() => {\n appConfig.setInitializationContext(initializationContext);\n }, [initializationContext]);\n\n // 更新 Ant Design 配置\n const setAntdConfig = useCallback((config: UIProviderConfig | undefined) => {\n setAntdConfigState(config);\n }, []);\n\n // 更新初始化上下文\n const setInitializationContext = useCallback((context: InitializationContext | undefined) => {\n setInitializationContextState(context);\n }, []);\n\n const value: ConfigContextValue = useMemo(\n () => ({\n antdConfig,\n initializationContext,\n setAntdConfig,\n setInitializationContext,\n }),\n [antdConfig, initializationContext, setAntdConfig, setInitializationContext]\n );\n\n return <ConfigContext.Provider value={value}>{children}</ConfigContext.Provider>;\n});\n\nAppConfigProvider.displayName = 'AppConfigProvider';\n\n/**\n * 应用上下文 Provider 属性\n */\nexport interface AppContextProviderProps extends PropsWithChildren {\n /**\n * 初始主题配置\n */\n initialTheme?: ThemeConfig;\n /**\n * 初始国际化语言\n */\n initialLocale?: LangType;\n /**\n * 初始 Ant Design 配置\n */\n initialAntdConfig?: UIProviderConfig;\n /**\n * 初始初始化上下文\n */\n initialInitializationContext?: InitializationContext;\n /**\n * 状态管理器实例\n */\n stateManager?: StateManager | null;\n /**\n * UI App 基础配置\n * \n * 用于传递 UI 适配层的应用级配置(如消息、通知、弹窗容器)。\n */\n antdApp?: UIAppConfig;\n /**\n * UI App 配置(无框架绑定)\n */\n uiApp?: UIAppConfig;\n}\n\n/**\n * 应用上下文 Provider 组件\n * \n * 组合所有 Provider,提供统一的全局上下文\n * \n * @example\n * ```tsx\n * <AppContextProvider\n * initialTheme={{ mode: 'light', primaryColor: '#1890ff' }}\n * initialLocale=\"zh-CN\"\n * >\n * <App />\n * </AppContextProvider>\n * ```\n */\n/**\n * 状态管理器 Provider 组件\n */\nconst StateManagerProvider: React.FC<PropsWithChildren<{ stateManager?: StateManager | null }>> = React.memo(({ children, stateManager }) => {\n const value = useMemo(\n () => ({\n stateManager: stateManager ?? null,\n }),\n [stateManager]\n );\n\n return <StateManagerContext.Provider value={value}>{children}</StateManagerContext.Provider>;\n});\n\nStateManagerProvider.displayName = 'StateManagerProvider';\n\nexport const AppContextProvider: React.FC<AppContextProviderProps> = ({\n children,\n initialTheme,\n initialLocale,\n initialAntdConfig,\n initialInitializationContext,\n stateManager,\n antdApp: _antdApp,\n uiApp: _uiApp,\n}) => {\n // 初始化单例配置(仅执行一次)\n const initializedRef = React.useRef(false);\n React.useEffect(() => {\n if (!initializedRef.current) {\n appConfig.initialize({\n theme: initialTheme,\n locale: initialLocale,\n antdConfig: initialAntdConfig,\n initializationContext: initialInitializationContext,\n });\n initializedRef.current = true;\n }\n }, [initialTheme, initialLocale, initialAntdConfig, initialInitializationContext]);\n\n return (\n <ThemeProvider initialTheme={initialTheme}>\n <LocaleProvider initialLocale={initialLocale}>\n <AppConfigProvider\n initialAntdConfig={initialAntdConfig}\n initialInitializationContext={initialInitializationContext}\n >\n <StateManagerProvider stateManager={stateManager}>\n {children}\n </StateManagerProvider>\n </AppConfigProvider>\n </LocaleProvider>\n </ThemeProvider>\n );\n};\n\n/**\n * 使用主题上下文 Hook\n * \n * @returns 主题上下文值\n * @throws 如果不在 ThemeProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme } = useTheme();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * ```\n */\nexport const useTheme = (): ThemeContextValue => {\n const context = useContext(ThemeContext);\n if (context === undefined) {\n throw new Error('useTheme 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用国际化上下文 Hook\n * \n * @returns 国际化上下文值\n * @throws 如果不在 LocaleProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { locale, setLocale } = useLocale();\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\nexport const useLocale = (): LocaleContextValue => {\n const context = useContext(LocaleContext);\n if (context === undefined) {\n throw new Error('useLocale 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用配置上下文 Hook\n * \n * @returns 配置上下文值\n * @throws 如果不在 ConfigProvider 内使用会抛出错误\n */\nexport const useConfig = (): ConfigContextValue => {\n const context = useContext(ConfigContext);\n if (context === undefined) {\n throw new Error('useConfig 必须在 AppContextProvider 内使用');\n }\n return context;\n};\n\n/**\n * 使用应用上下文 Hook(聚合所有上下文)\n * \n * @returns 应用上下文值\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const { theme, setTheme, locale, setLocale, antdConfig } = useAppContext();\n * \n * // 切换主题\n * setTheme({ mode: 'dark' });\n * \n * // 切换语言\n * setLocale('en-US');\n * ```\n */\n/**\n * 使用状态管理器 Hook\n * \n * @returns 状态管理器实例\n * @throws 如果不在 AppContextProvider 内使用会抛出错误\n * \n * @example\n * ```tsx\n * const stateManager = useStateManager();\n * \n * // 创建状态实例\n * const countState = stateManager?.createState(0);\n * ```\n */\nexport const useStateManager = (): StateManager | null => {\n const context = useContext(StateManagerContext);\n if (context === undefined) {\n throw new Error('useStateManager 必须在 AppContextProvider 内使用');\n }\n return context.stateManager;\n};\n\nexport const useAppContext = (): AppContextValue => {\n const themeContext = useTheme();\n const localeContext = useLocale();\n const configContext = useConfig();\n const stateManagerContext = useStateManager();\n\n // 优化:使用更细粒度的依赖项,避免不必要的重新计算\n // 只依赖实际变化的值,函数引用是稳定的\n return useMemo(\n () => ({\n theme: themeContext.theme,\n locale: localeContext.locale,\n antdConfig: configContext.antdConfig,\n initializationContext: configContext.initializationContext,\n stateManager: stateManagerContext,\n setTheme: themeContext.setTheme,\n setLocale: localeContext.setLocale,\n setAntdConfig: configContext.setAntdConfig,\n setInitializationContext: configContext.setInitializationContext,\n }),\n [\n themeContext.theme,\n localeContext.locale,\n configContext.antdConfig,\n configContext.initializationContext,\n stateManagerContext,\n // 函数引用是稳定的,不需要作为依赖\n themeContext.setTheme,\n localeContext.setLocale,\n configContext.setAntdConfig,\n configContext.setInitializationContext,\n ]\n );\n};\n"],"names":["React","createContext","useContext","useState","useCallback","useMemo","useEffect","setLang","appConfig","ThemeContext","undefined","LocaleContext","ConfigContext","StateManagerContext","ThemeProvider","memo","children","initialTheme","theme","setThemeState","getTheme","applyDocumentThemeClass","mode","window","html","document","documentElement","classList","remove","resolvedMode","matchMedia","matches","add","setTheme","mediaQuery","onSystemThemeChange","addEventListener","removeEventListener","addListener","removeListener","newTheme","prev","value","Provider","displayName","LocaleProvider","initialLocale","locale","setLocaleState","getLocale","isChanging","setIsChanging","setLocale","newLocale","requestAnimationFrame","AppConfigProvider","initialAntdConfig","initialInitializationContext","antdConfig","setAntdConfigState","getAntdConfig","initializationContext","setInitializationContextState","getInitializationContext","setAntdConfig","setInitializationContext","config","context","StateManagerProvider","stateManager","AppContextProvider","antdApp","_antdApp","uiApp","_uiApp","initializedRef","useRef","current","initialize","useTheme","Error","useLocale","useConfig","useStateManager","useAppContext","themeContext","localeContext","configContext","stateManagerContext"],"mappings":"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"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import type { LangType } from '../../library/locale/types';
|
|
2
|
-
import type { ConfigProviderProps } from 'antd';
|
|
3
2
|
import type { InitializationContext } from '../initialization';
|
|
4
3
|
import type { StateManager } from '../../state';
|
|
4
|
+
import type { UIProviderConfig } from '../types';
|
|
5
5
|
/**
|
|
6
6
|
* 主题配置
|
|
7
7
|
*/
|
|
8
8
|
export interface ThemeConfig {
|
|
9
9
|
/**
|
|
10
|
-
* 主题模式:'light' | 'dark' | '
|
|
10
|
+
* 主题模式:'light' | 'dark' | 'system'
|
|
11
11
|
* - 'light': 浅色主题
|
|
12
12
|
* - 'dark': 深色主题
|
|
13
|
-
* - '
|
|
13
|
+
* - 'system': 跟随系统设置
|
|
14
14
|
*/
|
|
15
|
-
mode?: 'light' | 'dark' | '
|
|
15
|
+
mode?: 'light' | 'dark' | 'system';
|
|
16
16
|
/**
|
|
17
17
|
* 主题色(主色调)
|
|
18
18
|
*/
|
|
@@ -37,7 +37,7 @@ export interface AppConfig {
|
|
|
37
37
|
/**
|
|
38
38
|
* Ant Design 配置
|
|
39
39
|
*/
|
|
40
|
-
antdConfig?:
|
|
40
|
+
antdConfig?: UIProviderConfig;
|
|
41
41
|
/**
|
|
42
42
|
* 初始化上下文
|
|
43
43
|
*/
|
|
@@ -80,7 +80,7 @@ export interface ConfigContextValue {
|
|
|
80
80
|
/**
|
|
81
81
|
* Ant Design 配置
|
|
82
82
|
*/
|
|
83
|
-
antdConfig?:
|
|
83
|
+
antdConfig?: UIProviderConfig;
|
|
84
84
|
/**
|
|
85
85
|
* 初始化上下文
|
|
86
86
|
*/
|
|
@@ -88,7 +88,7 @@ export interface ConfigContextValue {
|
|
|
88
88
|
/**
|
|
89
89
|
* 更新 Ant Design 配置
|
|
90
90
|
*/
|
|
91
|
-
setAntdConfig: (config:
|
|
91
|
+
setAntdConfig: (config: UIProviderConfig | undefined) => void;
|
|
92
92
|
/**
|
|
93
93
|
* 更新初始化上下文
|
|
94
94
|
*/
|
|
@@ -118,7 +118,7 @@ export interface AppContextValue {
|
|
|
118
118
|
/**
|
|
119
119
|
* Ant Design 配置
|
|
120
120
|
*/
|
|
121
|
-
antdConfig?:
|
|
121
|
+
antdConfig?: UIProviderConfig;
|
|
122
122
|
/**
|
|
123
123
|
* 初始化上下文
|
|
124
124
|
*/
|
|
@@ -138,10 +138,9 @@ export interface AppContextValue {
|
|
|
138
138
|
/**
|
|
139
139
|
* 更新 Ant Design 配置
|
|
140
140
|
*/
|
|
141
|
-
setAntdConfig: (config:
|
|
141
|
+
setAntdConfig: (config: UIProviderConfig | undefined) => void;
|
|
142
142
|
/**
|
|
143
143
|
* 更新初始化上下文
|
|
144
144
|
*/
|
|
145
145
|
setInitializationContext: (context: InitializationContext | undefined) => void;
|
|
146
146
|
}
|
|
147
|
-
//# sourceMappingURL=AppContext.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/core/app/AppContext.types.ts"],"sourcesContent":["import type { LangType } from '../../library/locale/types';\nimport type {
|
|
1
|
+
{"version":3,"sources":["../../../src/core/app/AppContext.types.ts"],"sourcesContent":["import type { LangType } from '../../library/locale/types';\nimport type { InitializationContext } from '../initialization';\nimport type { StateManager } from '../../state';\nimport type { UIProviderConfig } from '../types';\n\n/**\n * 主题配置\n */\nexport interface ThemeConfig {\n /**\n * 主题模式:'light' | 'dark' | 'system'\n * - 'light': 浅色主题\n * - 'dark': 深色主题\n * - 'system': 跟随系统设置\n */\n mode?: 'light' | 'dark' | 'system';\n\n /**\n * 主题色(主色调)\n */\n primaryColor?: string;\n\n /**\n * 自定义主题配置\n */\n custom?: Record<string, unknown>;\n}\n\n/**\n * 应用配置接口\n */\nexport interface AppConfig {\n /**\n * 主题配置\n */\n theme: ThemeConfig;\n\n /**\n * 国际化语言\n */\n locale: LangType;\n\n /**\n * Ant Design 配置\n */\n antdConfig?: UIProviderConfig;\n\n /**\n * 初始化上下文\n */\n initializationContext?: InitializationContext;\n}\n\n/**\n * 主题上下文值\n */\nexport interface ThemeContextValue {\n /**\n * 主题配置\n */\n theme: ThemeConfig;\n\n /**\n * 更新主题\n */\n setTheme: (theme: ThemeConfig | ((prev: ThemeConfig) => ThemeConfig)) => void;\n}\n\n/**\n * 国际化上下文值\n */\nexport interface LocaleContextValue {\n /**\n * 当前语言\n */\n locale: LangType;\n\n /**\n * 更新语言\n */\n setLocale: (locale: LangType) => void;\n\n /**\n * 是否正在切换语言\n */\n isChanging?: boolean;\n}\n\n/**\n * 配置上下文值\n */\nexport interface ConfigContextValue {\n /**\n * Ant Design 配置\n */\n antdConfig?: UIProviderConfig;\n\n /**\n * 初始化上下文\n */\n initializationContext?: InitializationContext;\n\n /**\n * 更新 Ant Design 配置\n */\n setAntdConfig: (config: UIProviderConfig | undefined) => void;\n\n /**\n * 更新初始化上下文\n */\n setInitializationContext: (context: InitializationContext | undefined) => void;\n}\n\n/**\n * 状态管理器上下文值\n */\nexport interface StateManagerContextValue {\n /**\n * 状态管理器实例\n */\n stateManager: StateManager | null;\n}\n\n/**\n * 应用全局上下文值(聚合所有上下文)\n */\nexport interface AppContextValue {\n /**\n * 主题配置\n */\n theme: ThemeConfig;\n\n /**\n * 国际化语言\n */\n locale: LangType;\n\n /**\n * Ant Design 配置\n */\n antdConfig?: UIProviderConfig;\n\n /**\n * 初始化上下文\n */\n initializationContext?: InitializationContext;\n\n /**\n * 状态管理器实例\n */\n stateManager: StateManager | null;\n\n /**\n * 更新主题\n */\n setTheme: (theme: ThemeConfig | ((prev: ThemeConfig) => ThemeConfig)) => void;\n\n /**\n * 更新国际化语言\n */\n setLocale: (locale: LangType) => void;\n\n /**\n * 更新 Ant Design 配置\n */\n setAntdConfig: (config: UIProviderConfig | undefined) => void;\n\n /**\n * 更新初始化上下文\n */\n setInitializationContext: (context: InitializationContext | undefined) => void;\n}\n"],"names":[],"mappings":"AA2HA;;CAEC,GACD,WA6CC"}
|