@vlian/framework 1.2.1 → 1.2.18
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.cjs +32 -2
- package/dist/core/router/RouterManager.cjs.map +1 -1
- package/dist/core/router/RouterManager.d.ts +5 -1
- package/dist/core/router/RouterManager.js +33 -3
- package/dist/core/router/RouterManager.js.map +1 -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.cjs.map +1 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts +0 -1
- package/dist/core/router/adapter/react-router/ReactRouterAdapter.js.map +1 -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.cjs +24 -4
- package/dist/core/router/middleware/RouterMiddlewareManager.cjs.map +1 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.d.ts +1 -1
- package/dist/core/router/middleware/RouterMiddlewareManager.js +24 -4
- package/dist/core/router/middleware/RouterMiddlewareManager.js.map +1 -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.cjs.map +1 -1
- package/dist/core/router/middleware/types.d.ts +1 -2
- package/dist/core/router/middleware/types.js.map +1 -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.cjs +69 -14
- package/dist/core/router/navigation/RouterNavigation.cjs.map +1 -1
- package/dist/core/router/navigation/RouterNavigation.d.ts +3 -1
- package/dist/core/router/navigation/RouterNavigation.js +69 -14
- package/dist/core/router/navigation/RouterNavigation.js.map +1 -1
- package/dist/core/router/navigation/index.d.ts +0 -1
- package/dist/core/router/performance/RouteCache.cjs +34 -13
- package/dist/core/router/performance/RouteCache.cjs.map +1 -1
- package/dist/core/router/performance/RouteCache.d.ts +8 -3
- package/dist/core/router/performance/RouteCache.js +34 -13
- package/dist/core/router/performance/RouteCache.js.map +1 -1
- package/dist/core/router/performance/RoutePreloader.cjs +89 -22
- package/dist/core/router/performance/RoutePreloader.cjs.map +1 -1
- package/dist/core/router/performance/RoutePreloader.d.ts +9 -2
- package/dist/core/router/performance/RoutePreloader.js +89 -22
- package/dist/core/router/performance/RoutePreloader.js.map +1 -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 +23 -7
- 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 +45 -63
- 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 +46 -59
- package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
- package/dist/core/router/utils/transform.cjs +80 -71
- package/dist/core/router/utils/transform.cjs.map +1 -1
- package/dist/core/router/utils/transform.d.ts +1 -2
- package/dist/core/router/utils/transform.js +81 -72
- package/dist/core/router/utils/transform.js.map +1 -1
- package/dist/core/router/validation/RouterConfigValidator.d.ts +66 -5
- package/dist/core/router/validation/index.d.ts +0 -1
- package/dist/core/router/validation/schema.cjs +71 -2
- package/dist/core/router/validation/schema.cjs.map +1 -1
- package/dist/core/router/validation/schema.d.ts +102 -7
- package/dist/core/router/validation/schema.js +71 -2
- package/dist/core/router/validation/schema.js.map +1 -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 +7684 -6056
- 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
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
3
|
+
import type { LangType } from '../library/locale/types';
|
|
4
|
+
import { type PersistenceOptions } from './persistence';
|
|
5
|
+
export interface LocaleSwitchRenderContext {
|
|
6
|
+
locale: LangType;
|
|
7
|
+
isChanging: boolean;
|
|
8
|
+
setLocale: (locale: LangType) => void;
|
|
9
|
+
locales: LangType[];
|
|
10
|
+
labels: Record<LangType, string>;
|
|
11
|
+
}
|
|
12
|
+
export interface LocaleSwitchProps {
|
|
13
|
+
locales?: LangType[];
|
|
14
|
+
labels?: Partial<Record<LangType, string>>;
|
|
15
|
+
persistence?: PersistenceOptions;
|
|
16
|
+
className?: string;
|
|
17
|
+
style?: CSSProperties;
|
|
18
|
+
onChange?: (locale: LangType) => void;
|
|
19
|
+
render?: (context: LocaleSwitchRenderContext) => ReactNode;
|
|
20
|
+
}
|
|
21
|
+
export declare const LocaleSwitch: React.FC<LocaleSwitchProps>;
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { useLocale } from "../core";
|
|
4
|
+
import { readPersistedValue, writePersistedValue } from "./persistence";
|
|
5
|
+
const DEFAULT_LOCALE_STORAGE_KEY = 'vlian:locale';
|
|
6
|
+
const DEFAULT_LOCALES = [
|
|
7
|
+
'zh-CN',
|
|
8
|
+
'en-US'
|
|
9
|
+
];
|
|
10
|
+
const DEFAULT_PERSISTENCE = {
|
|
11
|
+
enabled: true
|
|
12
|
+
};
|
|
13
|
+
const DEFAULT_LABELS = {
|
|
14
|
+
'zh-CN': '中文',
|
|
15
|
+
'en-US': 'English'
|
|
16
|
+
};
|
|
17
|
+
function isLocale(value) {
|
|
18
|
+
return value === 'zh-CN' || value === 'en-US';
|
|
19
|
+
}
|
|
20
|
+
export const LocaleSwitch = ({ locales = DEFAULT_LOCALES, labels = DEFAULT_LABELS, persistence, className, style, onChange, render })=>{
|
|
21
|
+
const { locale, setLocale, isChanging } = useLocale();
|
|
22
|
+
const persistenceOptions = persistence || DEFAULT_PERSISTENCE;
|
|
23
|
+
const hydratedRef = React.useRef(false);
|
|
24
|
+
const lastWrittenLocaleRef = React.useRef(undefined);
|
|
25
|
+
const mergedLabels = React.useMemo(()=>({
|
|
26
|
+
...DEFAULT_LABELS,
|
|
27
|
+
...labels
|
|
28
|
+
}), [
|
|
29
|
+
labels
|
|
30
|
+
]);
|
|
31
|
+
React.useEffect(()=>{
|
|
32
|
+
if (hydratedRef.current) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
hydratedRef.current = true;
|
|
36
|
+
const persistedLocale = readPersistedValue(persistenceOptions, DEFAULT_LOCALE_STORAGE_KEY);
|
|
37
|
+
if (!persistedLocale || !isLocale(persistedLocale) || !locales.includes(persistedLocale)) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (persistedLocale !== locale) {
|
|
41
|
+
setLocale(persistedLocale);
|
|
42
|
+
}
|
|
43
|
+
}, [
|
|
44
|
+
locale,
|
|
45
|
+
locales,
|
|
46
|
+
persistenceOptions,
|
|
47
|
+
setLocale
|
|
48
|
+
]);
|
|
49
|
+
React.useEffect(()=>{
|
|
50
|
+
if (lastWrittenLocaleRef.current === locale) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
writePersistedValue(locale, persistenceOptions, DEFAULT_LOCALE_STORAGE_KEY);
|
|
54
|
+
lastWrittenLocaleRef.current = locale;
|
|
55
|
+
}, [
|
|
56
|
+
locale,
|
|
57
|
+
persistenceOptions
|
|
58
|
+
]);
|
|
59
|
+
const handleSetLocale = React.useCallback((nextLocale)=>{
|
|
60
|
+
if (nextLocale === locale) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
setLocale(nextLocale);
|
|
64
|
+
onChange?.(nextLocale);
|
|
65
|
+
}, [
|
|
66
|
+
locale,
|
|
67
|
+
onChange,
|
|
68
|
+
setLocale
|
|
69
|
+
]);
|
|
70
|
+
if (render) {
|
|
71
|
+
return render({
|
|
72
|
+
locale,
|
|
73
|
+
isChanging: Boolean(isChanging),
|
|
74
|
+
setLocale: handleSetLocale,
|
|
75
|
+
locales,
|
|
76
|
+
labels: mergedLabels
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
return /*#__PURE__*/ _jsxs("label", {
|
|
80
|
+
className: className,
|
|
81
|
+
style: style,
|
|
82
|
+
children: [
|
|
83
|
+
/*#__PURE__*/ _jsx("span", {
|
|
84
|
+
style: {
|
|
85
|
+
display: 'none'
|
|
86
|
+
},
|
|
87
|
+
children: "Language Switch"
|
|
88
|
+
}),
|
|
89
|
+
/*#__PURE__*/ _jsx("select", {
|
|
90
|
+
"aria-label": "Language Switch",
|
|
91
|
+
value: locale,
|
|
92
|
+
onChange: (event)=>handleSetLocale(event.target.value),
|
|
93
|
+
disabled: Boolean(isChanging),
|
|
94
|
+
children: locales.map((item)=>/*#__PURE__*/ _jsx("option", {
|
|
95
|
+
value: item,
|
|
96
|
+
children: mergedLabels[item]
|
|
97
|
+
}, item))
|
|
98
|
+
})
|
|
99
|
+
]
|
|
100
|
+
});
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
//# sourceMappingURL=LocaleSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/LocaleSwitch.tsx"],"sourcesContent":["import React from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useLocale } from '../core';\nimport type { LangType } from '../library/locale/types';\nimport {\n type PersistenceOptions,\n readPersistedValue,\n writePersistedValue,\n} from './persistence';\n\nconst DEFAULT_LOCALE_STORAGE_KEY = 'vlian:locale';\nconst DEFAULT_LOCALES: LangType[] = ['zh-CN', 'en-US'];\nconst DEFAULT_PERSISTENCE: PersistenceOptions = { enabled: true };\n\nconst DEFAULT_LABELS: Record<LangType, string> = {\n 'zh-CN': '中文',\n 'en-US': 'English',\n};\n\nexport interface LocaleSwitchRenderContext {\n locale: LangType;\n isChanging: boolean;\n setLocale: (locale: LangType) => void;\n locales: LangType[];\n labels: Record<LangType, string>;\n}\n\nexport interface LocaleSwitchProps {\n locales?: LangType[];\n labels?: Partial<Record<LangType, string>>;\n persistence?: PersistenceOptions;\n className?: string;\n style?: CSSProperties;\n onChange?: (locale: LangType) => void;\n render?: (context: LocaleSwitchRenderContext) => ReactNode;\n}\n\nfunction isLocale(value: string): value is LangType {\n return value === 'zh-CN' || value === 'en-US';\n}\n\nexport const LocaleSwitch: React.FC<LocaleSwitchProps> = ({\n locales = DEFAULT_LOCALES,\n labels = DEFAULT_LABELS,\n persistence,\n className,\n style,\n onChange,\n render,\n}) => {\n const { locale, setLocale, isChanging } = useLocale();\n const persistenceOptions = persistence || DEFAULT_PERSISTENCE;\n const hydratedRef = React.useRef(false);\n const lastWrittenLocaleRef = React.useRef<LangType | undefined>(undefined);\n\n const mergedLabels = React.useMemo<Record<LangType, string>>(\n () => ({\n ...DEFAULT_LABELS,\n ...labels,\n }),\n [labels]\n );\n\n React.useEffect(() => {\n if (hydratedRef.current) {\n return;\n }\n hydratedRef.current = true;\n\n const persistedLocale = readPersistedValue(persistenceOptions, DEFAULT_LOCALE_STORAGE_KEY);\n if (!persistedLocale || !isLocale(persistedLocale) || !locales.includes(persistedLocale)) {\n return;\n }\n\n if (persistedLocale !== locale) {\n setLocale(persistedLocale);\n }\n }, [locale, locales, persistenceOptions, setLocale]);\n\n React.useEffect(() => {\n if (lastWrittenLocaleRef.current === locale) {\n return;\n }\n\n writePersistedValue(locale, persistenceOptions, DEFAULT_LOCALE_STORAGE_KEY);\n lastWrittenLocaleRef.current = locale;\n }, [locale, persistenceOptions]);\n\n const handleSetLocale = React.useCallback(\n (nextLocale: LangType) => {\n if (nextLocale === locale) {\n return;\n }\n setLocale(nextLocale);\n onChange?.(nextLocale);\n },\n [locale, onChange, setLocale]\n );\n\n if (render) {\n return render({\n locale,\n isChanging: Boolean(isChanging),\n setLocale: handleSetLocale,\n locales,\n labels: mergedLabels,\n });\n }\n\n return (\n <label className={className} style={style}>\n <span style={{ display: 'none' }}>Language Switch</span>\n <select\n aria-label=\"Language Switch\"\n value={locale}\n onChange={(event) => handleSetLocale(event.target.value as LangType)}\n disabled={Boolean(isChanging)}\n >\n {locales.map((item) => (\n <option key={item} value={item}>\n {mergedLabels[item]}\n </option>\n ))}\n </select>\n </label>\n );\n};\n"],"names":["React","useLocale","readPersistedValue","writePersistedValue","DEFAULT_LOCALE_STORAGE_KEY","DEFAULT_LOCALES","DEFAULT_PERSISTENCE","enabled","DEFAULT_LABELS","isLocale","value","LocaleSwitch","locales","labels","persistence","className","style","onChange","render","locale","setLocale","isChanging","persistenceOptions","hydratedRef","useRef","lastWrittenLocaleRef","undefined","mergedLabels","useMemo","useEffect","current","persistedLocale","includes","handleSetLocale","useCallback","nextLocale","Boolean","label","span","display","select","aria-label","event","target","disabled","map","item","option"],"mappings":";AAAA,OAAOA,WAAW,QAAQ;AAE1B,SAASC,SAAS,QAAQ,UAAU;AAEpC,SAEEC,kBAAkB,EAClBC,mBAAmB,QACd,gBAAgB;AAEvB,MAAMC,6BAA6B;AACnC,MAAMC,kBAA8B;IAAC;IAAS;CAAQ;AACtD,MAAMC,sBAA0C;IAAEC,SAAS;AAAK;AAEhE,MAAMC,iBAA2C;IAC/C,SAAS;IACT,SAAS;AACX;AAoBA,SAASC,SAASC,KAAa;IAC7B,OAAOA,UAAU,WAAWA,UAAU;AACxC;AAEA,OAAO,MAAMC,eAA4C,CAAC,EACxDC,UAAUP,eAAe,EACzBQ,SAASL,cAAc,EACvBM,WAAW,EACXC,SAAS,EACTC,KAAK,EACLC,QAAQ,EACRC,MAAM,EACP;IACC,MAAM,EAAEC,MAAM,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGpB;IAC1C,MAAMqB,qBAAqBR,eAAeR;IAC1C,MAAMiB,cAAcvB,MAAMwB,MAAM,CAAC;IACjC,MAAMC,uBAAuBzB,MAAMwB,MAAM,CAAuBE;IAEhE,MAAMC,eAAe3B,MAAM4B,OAAO,CAChC,IAAO,CAAA;YACL,GAAGpB,cAAc;YACjB,GAAGK,MAAM;QACX,CAAA,GACA;QAACA;KAAO;IAGVb,MAAM6B,SAAS,CAAC;QACd,IAAIN,YAAYO,OAAO,EAAE;YACvB;QACF;QACAP,YAAYO,OAAO,GAAG;QAEtB,MAAMC,kBAAkB7B,mBAAmBoB,oBAAoBlB;QAC/D,IAAI,CAAC2B,mBAAmB,CAACtB,SAASsB,oBAAoB,CAACnB,QAAQoB,QAAQ,CAACD,kBAAkB;YACxF;QACF;QAEA,IAAIA,oBAAoBZ,QAAQ;YAC9BC,UAAUW;QACZ;IACF,GAAG;QAACZ;QAAQP;QAASU;QAAoBF;KAAU;IAEnDpB,MAAM6B,SAAS,CAAC;QACd,IAAIJ,qBAAqBK,OAAO,KAAKX,QAAQ;YAC3C;QACF;QAEAhB,oBAAoBgB,QAAQG,oBAAoBlB;QAChDqB,qBAAqBK,OAAO,GAAGX;IACjC,GAAG;QAACA;QAAQG;KAAmB;IAE/B,MAAMW,kBAAkBjC,MAAMkC,WAAW,CACvC,CAACC;QACC,IAAIA,eAAehB,QAAQ;YACzB;QACF;QACAC,UAAUe;QACVlB,WAAWkB;IACb,GACA;QAAChB;QAAQF;QAAUG;KAAU;IAG/B,IAAIF,QAAQ;QACV,OAAOA,OAAO;YACZC;YACAE,YAAYe,QAAQf;YACpBD,WAAWa;YACXrB;YACAC,QAAQc;QACV;IACF;IAEA,qBACE,MAACU;QAAMtB,WAAWA;QAAWC,OAAOA;;0BAClC,KAACsB;gBAAKtB,OAAO;oBAAEuB,SAAS;gBAAO;0BAAG;;0BAClC,KAACC;gBACCC,cAAW;gBACX/B,OAAOS;gBACPF,UAAU,CAACyB,QAAUT,gBAAgBS,MAAMC,MAAM,CAACjC,KAAK;gBACvDkC,UAAUR,QAAQf;0BAEjBT,QAAQiC,GAAG,CAAC,CAACC,qBACZ,KAACC;wBAAkBrC,OAAOoC;kCACvBnB,YAAY,CAACmB,KAAK;uBADRA;;;;AAOvB,EAAE"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
Object.defineProperty(exports, "ThemeSwitch", {
|
|
6
|
+
enumerable: true,
|
|
7
|
+
get: function() {
|
|
8
|
+
return ThemeSwitch;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
const _jsxruntime = require("react/jsx-runtime");
|
|
12
|
+
const _react = /*#__PURE__*/ _interop_require_default(require("react"));
|
|
13
|
+
const _core = require("../core");
|
|
14
|
+
const _persistence = require("./persistence");
|
|
15
|
+
function _interop_require_default(obj) {
|
|
16
|
+
return obj && obj.__esModule ? obj : {
|
|
17
|
+
default: obj
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
const DEFAULT_THEME_STORAGE_KEY = 'vlian:theme-mode';
|
|
21
|
+
const DEFAULT_MODES = [
|
|
22
|
+
'light',
|
|
23
|
+
'dark',
|
|
24
|
+
'system'
|
|
25
|
+
];
|
|
26
|
+
const DEFAULT_PERSISTENCE = {
|
|
27
|
+
enabled: true
|
|
28
|
+
};
|
|
29
|
+
const DEFAULT_LABELS = {
|
|
30
|
+
light: '浅色',
|
|
31
|
+
dark: '深色',
|
|
32
|
+
system: '跟随系统'
|
|
33
|
+
};
|
|
34
|
+
function isThemeMode(value) {
|
|
35
|
+
return value === 'light' || value === 'dark' || value === 'system';
|
|
36
|
+
}
|
|
37
|
+
const ThemeSwitch = ({ modes = DEFAULT_MODES, labels = DEFAULT_LABELS, persistence, className, style, onChange, render })=>{
|
|
38
|
+
const { theme, setTheme } = (0, _core.useTheme)();
|
|
39
|
+
const persistenceOptions = persistence || DEFAULT_PERSISTENCE;
|
|
40
|
+
const hydratedRef = _react.default.useRef(false);
|
|
41
|
+
const lastWrittenModeRef = _react.default.useRef(undefined);
|
|
42
|
+
const mergedLabels = _react.default.useMemo(()=>({
|
|
43
|
+
...DEFAULT_LABELS,
|
|
44
|
+
...labels
|
|
45
|
+
}), [
|
|
46
|
+
labels
|
|
47
|
+
]);
|
|
48
|
+
_react.default.useEffect(()=>{
|
|
49
|
+
if (hydratedRef.current) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
hydratedRef.current = true;
|
|
53
|
+
const persistedMode = (0, _persistence.readPersistedValue)(persistenceOptions, DEFAULT_THEME_STORAGE_KEY);
|
|
54
|
+
if (!persistedMode || !isThemeMode(persistedMode) || !modes.includes(persistedMode)) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (persistedMode !== theme.mode) {
|
|
58
|
+
setTheme((prev)=>({
|
|
59
|
+
...prev,
|
|
60
|
+
mode: persistedMode
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
}, [
|
|
64
|
+
modes,
|
|
65
|
+
persistenceOptions,
|
|
66
|
+
setTheme,
|
|
67
|
+
theme.mode
|
|
68
|
+
]);
|
|
69
|
+
_react.default.useEffect(()=>{
|
|
70
|
+
const mode = theme.mode;
|
|
71
|
+
if (!mode || lastWrittenModeRef.current === mode) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
(0, _persistence.writePersistedValue)(mode, persistenceOptions, DEFAULT_THEME_STORAGE_KEY);
|
|
75
|
+
lastWrittenModeRef.current = mode;
|
|
76
|
+
}, [
|
|
77
|
+
persistenceOptions,
|
|
78
|
+
theme.mode
|
|
79
|
+
]);
|
|
80
|
+
const currentMode = theme.mode || 'light';
|
|
81
|
+
const setMode = _react.default.useCallback((mode)=>{
|
|
82
|
+
if (mode === currentMode) {
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
setTheme((prev)=>({
|
|
86
|
+
...prev,
|
|
87
|
+
mode
|
|
88
|
+
}));
|
|
89
|
+
onChange?.(mode);
|
|
90
|
+
}, [
|
|
91
|
+
currentMode,
|
|
92
|
+
onChange,
|
|
93
|
+
setTheme
|
|
94
|
+
]);
|
|
95
|
+
if (render) {
|
|
96
|
+
return render({
|
|
97
|
+
mode: currentMode,
|
|
98
|
+
setMode,
|
|
99
|
+
modes,
|
|
100
|
+
labels: mergedLabels
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
return /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
|
|
104
|
+
className: className,
|
|
105
|
+
style: style,
|
|
106
|
+
role: "group",
|
|
107
|
+
"aria-label": "Theme Switch",
|
|
108
|
+
children: modes.map((mode)=>/*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
|
|
109
|
+
type: "button",
|
|
110
|
+
onClick: ()=>setMode(mode),
|
|
111
|
+
"aria-pressed": currentMode === mode,
|
|
112
|
+
children: mergedLabels[mode]
|
|
113
|
+
}, mode))
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
//# sourceMappingURL=ThemeSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/ThemeSwitch.tsx"],"sourcesContent":["import React from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useTheme } from '../core';\nimport type { ThemeMode } from '../core/kernel';\nimport {\n type PersistenceOptions,\n readPersistedValue,\n writePersistedValue,\n} from './persistence';\n\nconst DEFAULT_THEME_STORAGE_KEY = 'vlian:theme-mode';\nconst DEFAULT_MODES: ThemeMode[] = ['light', 'dark', 'system'];\nconst DEFAULT_PERSISTENCE: PersistenceOptions = { enabled: true };\n\nconst DEFAULT_LABELS: Record<ThemeMode, string> = {\n light: '浅色',\n dark: '深色',\n system: '跟随系统',\n};\n\nexport interface ThemeSwitchRenderContext {\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n modes: ThemeMode[];\n labels: Record<ThemeMode, string>;\n}\n\nexport interface ThemeSwitchProps {\n modes?: ThemeMode[];\n labels?: Partial<Record<ThemeMode, string>>;\n persistence?: PersistenceOptions;\n className?: string;\n style?: CSSProperties;\n onChange?: (mode: ThemeMode) => void;\n render?: (context: ThemeSwitchRenderContext) => ReactNode;\n}\n\nfunction isThemeMode(value: string): value is ThemeMode {\n return value === 'light' || value === 'dark' || value === 'system';\n}\n\nexport const ThemeSwitch: React.FC<ThemeSwitchProps> = ({\n modes = DEFAULT_MODES,\n labels = DEFAULT_LABELS,\n persistence,\n className,\n style,\n onChange,\n render,\n}) => {\n const { theme, setTheme } = useTheme();\n const persistenceOptions = persistence || DEFAULT_PERSISTENCE;\n const hydratedRef = React.useRef(false);\n const lastWrittenModeRef = React.useRef<ThemeMode | undefined>(undefined);\n\n const mergedLabels = React.useMemo<Record<ThemeMode, string>>(\n () => ({\n ...DEFAULT_LABELS,\n ...labels,\n }),\n [labels]\n );\n\n React.useEffect(() => {\n if (hydratedRef.current) {\n return;\n }\n hydratedRef.current = true;\n\n const persistedMode = readPersistedValue(persistenceOptions, DEFAULT_THEME_STORAGE_KEY);\n if (!persistedMode || !isThemeMode(persistedMode) || !modes.includes(persistedMode)) {\n return;\n }\n\n if (persistedMode !== theme.mode) {\n setTheme((prev) => ({\n ...prev,\n mode: persistedMode,\n }));\n }\n }, [modes, persistenceOptions, setTheme, theme.mode]);\n\n React.useEffect(() => {\n const mode = theme.mode;\n if (!mode || lastWrittenModeRef.current === mode) {\n return;\n }\n\n writePersistedValue(mode, persistenceOptions, DEFAULT_THEME_STORAGE_KEY);\n lastWrittenModeRef.current = mode;\n }, [persistenceOptions, theme.mode]);\n\n const currentMode: ThemeMode = (theme.mode || 'light') as ThemeMode;\n\n const setMode = React.useCallback(\n (mode: ThemeMode) => {\n if (mode === currentMode) {\n return;\n }\n setTheme((prev) => ({\n ...prev,\n mode,\n }));\n onChange?.(mode);\n },\n [currentMode, onChange, setTheme]\n );\n\n if (render) {\n return render({\n mode: currentMode,\n setMode,\n modes,\n labels: mergedLabels,\n });\n }\n\n return (\n <div className={className} style={style} role=\"group\" aria-label=\"Theme Switch\">\n {modes.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => setMode(mode)}\n aria-pressed={currentMode === mode}\n >\n {mergedLabels[mode]}\n </button>\n ))}\n </div>\n );\n};\n"],"names":["ThemeSwitch","DEFAULT_THEME_STORAGE_KEY","DEFAULT_MODES","DEFAULT_PERSISTENCE","enabled","DEFAULT_LABELS","light","dark","system","isThemeMode","value","modes","labels","persistence","className","style","onChange","render","theme","setTheme","useTheme","persistenceOptions","hydratedRef","React","useRef","lastWrittenModeRef","undefined","mergedLabels","useMemo","useEffect","current","persistedMode","readPersistedValue","includes","mode","prev","writePersistedValue","currentMode","setMode","useCallback","div","role","aria-label","map","button","type","onClick","aria-pressed"],"mappings":";;;;+BAyCaA;;;eAAAA;;;;8DAzCK;sBAEO;6BAMlB;;;;;;AAEP,MAAMC,4BAA4B;AAClC,MAAMC,gBAA6B;IAAC;IAAS;IAAQ;CAAS;AAC9D,MAAMC,sBAA0C;IAAEC,SAAS;AAAK;AAEhE,MAAMC,iBAA4C;IAChDC,OAAO;IACPC,MAAM;IACNC,QAAQ;AACV;AAmBA,SAASC,YAAYC,KAAa;IAChC,OAAOA,UAAU,WAAWA,UAAU,UAAUA,UAAU;AAC5D;AAEO,MAAMV,cAA0C,CAAC,EACtDW,QAAQT,aAAa,EACrBU,SAASP,cAAc,EACvBQ,WAAW,EACXC,SAAS,EACTC,KAAK,EACLC,QAAQ,EACRC,MAAM,EACP;IACC,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,IAAAA,cAAQ;IACpC,MAAMC,qBAAqBR,eAAeV;IAC1C,MAAMmB,cAAcC,cAAK,CAACC,MAAM,CAAC;IACjC,MAAMC,qBAAqBF,cAAK,CAACC,MAAM,CAAwBE;IAE/D,MAAMC,eAAeJ,cAAK,CAACK,OAAO,CAChC,IAAO,CAAA;YACL,GAAGvB,cAAc;YACjB,GAAGO,MAAM;QACX,CAAA,GACA;QAACA;KAAO;IAGVW,cAAK,CAACM,SAAS,CAAC;QACd,IAAIP,YAAYQ,OAAO,EAAE;YACvB;QACF;QACAR,YAAYQ,OAAO,GAAG;QAEtB,MAAMC,gBAAgBC,IAAAA,+BAAkB,EAACX,oBAAoBpB;QAC7D,IAAI,CAAC8B,iBAAiB,CAACtB,YAAYsB,kBAAkB,CAACpB,MAAMsB,QAAQ,CAACF,gBAAgB;YACnF;QACF;QAEA,IAAIA,kBAAkBb,MAAMgB,IAAI,EAAE;YAChCf,SAAS,CAACgB,OAAU,CAAA;oBAClB,GAAGA,IAAI;oBACPD,MAAMH;gBACR,CAAA;QACF;IACF,GAAG;QAACpB;QAAOU;QAAoBF;QAAUD,MAAMgB,IAAI;KAAC;IAEpDX,cAAK,CAACM,SAAS,CAAC;QACd,MAAMK,OAAOhB,MAAMgB,IAAI;QACvB,IAAI,CAACA,QAAQT,mBAAmBK,OAAO,KAAKI,MAAM;YAChD;QACF;QAEAE,IAAAA,gCAAmB,EAACF,MAAMb,oBAAoBpB;QAC9CwB,mBAAmBK,OAAO,GAAGI;IAC/B,GAAG;QAACb;QAAoBH,MAAMgB,IAAI;KAAC;IAEnC,MAAMG,cAA0BnB,MAAMgB,IAAI,IAAI;IAE9C,MAAMI,UAAUf,cAAK,CAACgB,WAAW,CAC/B,CAACL;QACC,IAAIA,SAASG,aAAa;YACxB;QACF;QACAlB,SAAS,CAACgB,OAAU,CAAA;gBAClB,GAAGA,IAAI;gBACPD;YACF,CAAA;QACAlB,WAAWkB;IACb,GACA;QAACG;QAAarB;QAAUG;KAAS;IAGnC,IAAIF,QAAQ;QACV,OAAOA,OAAO;YACZiB,MAAMG;YACNC;YACA3B;YACAC,QAAQe;QACV;IACF;IAEA,qBACE,qBAACa;QAAI1B,WAAWA;QAAWC,OAAOA;QAAO0B,MAAK;QAAQC,cAAW;kBAC9D/B,MAAMgC,GAAG,CAAC,CAACT,qBACV,qBAACU;gBAECC,MAAK;gBACLC,SAAS,IAAMR,QAAQJ;gBACvBa,gBAAcV,gBAAgBH;0BAE7BP,YAAY,CAACO,KAAK;eALdA;;AAUf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { CSSProperties, ReactNode } from 'react';
|
|
3
|
+
import type { ThemeMode } from '../core/kernel';
|
|
4
|
+
import { type PersistenceOptions } from './persistence';
|
|
5
|
+
export interface ThemeSwitchRenderContext {
|
|
6
|
+
mode: ThemeMode;
|
|
7
|
+
setMode: (mode: ThemeMode) => void;
|
|
8
|
+
modes: ThemeMode[];
|
|
9
|
+
labels: Record<ThemeMode, string>;
|
|
10
|
+
}
|
|
11
|
+
export interface ThemeSwitchProps {
|
|
12
|
+
modes?: ThemeMode[];
|
|
13
|
+
labels?: Partial<Record<ThemeMode, string>>;
|
|
14
|
+
persistence?: PersistenceOptions;
|
|
15
|
+
className?: string;
|
|
16
|
+
style?: CSSProperties;
|
|
17
|
+
onChange?: (mode: ThemeMode) => void;
|
|
18
|
+
render?: (context: ThemeSwitchRenderContext) => ReactNode;
|
|
19
|
+
}
|
|
20
|
+
export declare const ThemeSwitch: React.FC<ThemeSwitchProps>;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { useTheme } from "../core";
|
|
4
|
+
import { readPersistedValue, writePersistedValue } from "./persistence";
|
|
5
|
+
const DEFAULT_THEME_STORAGE_KEY = 'vlian:theme-mode';
|
|
6
|
+
const DEFAULT_MODES = [
|
|
7
|
+
'light',
|
|
8
|
+
'dark',
|
|
9
|
+
'system'
|
|
10
|
+
];
|
|
11
|
+
const DEFAULT_PERSISTENCE = {
|
|
12
|
+
enabled: true
|
|
13
|
+
};
|
|
14
|
+
const DEFAULT_LABELS = {
|
|
15
|
+
light: '浅色',
|
|
16
|
+
dark: '深色',
|
|
17
|
+
system: '跟随系统'
|
|
18
|
+
};
|
|
19
|
+
function isThemeMode(value) {
|
|
20
|
+
return value === 'light' || value === 'dark' || value === 'system';
|
|
21
|
+
}
|
|
22
|
+
export const ThemeSwitch = ({ modes = DEFAULT_MODES, labels = DEFAULT_LABELS, persistence, className, style, onChange, render })=>{
|
|
23
|
+
const { theme, setTheme } = useTheme();
|
|
24
|
+
const persistenceOptions = persistence || DEFAULT_PERSISTENCE;
|
|
25
|
+
const hydratedRef = React.useRef(false);
|
|
26
|
+
const lastWrittenModeRef = React.useRef(undefined);
|
|
27
|
+
const mergedLabels = React.useMemo(()=>({
|
|
28
|
+
...DEFAULT_LABELS,
|
|
29
|
+
...labels
|
|
30
|
+
}), [
|
|
31
|
+
labels
|
|
32
|
+
]);
|
|
33
|
+
React.useEffect(()=>{
|
|
34
|
+
if (hydratedRef.current) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
hydratedRef.current = true;
|
|
38
|
+
const persistedMode = readPersistedValue(persistenceOptions, DEFAULT_THEME_STORAGE_KEY);
|
|
39
|
+
if (!persistedMode || !isThemeMode(persistedMode) || !modes.includes(persistedMode)) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (persistedMode !== theme.mode) {
|
|
43
|
+
setTheme((prev)=>({
|
|
44
|
+
...prev,
|
|
45
|
+
mode: persistedMode
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
}, [
|
|
49
|
+
modes,
|
|
50
|
+
persistenceOptions,
|
|
51
|
+
setTheme,
|
|
52
|
+
theme.mode
|
|
53
|
+
]);
|
|
54
|
+
React.useEffect(()=>{
|
|
55
|
+
const mode = theme.mode;
|
|
56
|
+
if (!mode || lastWrittenModeRef.current === mode) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
writePersistedValue(mode, persistenceOptions, DEFAULT_THEME_STORAGE_KEY);
|
|
60
|
+
lastWrittenModeRef.current = mode;
|
|
61
|
+
}, [
|
|
62
|
+
persistenceOptions,
|
|
63
|
+
theme.mode
|
|
64
|
+
]);
|
|
65
|
+
const currentMode = theme.mode || 'light';
|
|
66
|
+
const setMode = React.useCallback((mode)=>{
|
|
67
|
+
if (mode === currentMode) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
setTheme((prev)=>({
|
|
71
|
+
...prev,
|
|
72
|
+
mode
|
|
73
|
+
}));
|
|
74
|
+
onChange?.(mode);
|
|
75
|
+
}, [
|
|
76
|
+
currentMode,
|
|
77
|
+
onChange,
|
|
78
|
+
setTheme
|
|
79
|
+
]);
|
|
80
|
+
if (render) {
|
|
81
|
+
return render({
|
|
82
|
+
mode: currentMode,
|
|
83
|
+
setMode,
|
|
84
|
+
modes,
|
|
85
|
+
labels: mergedLabels
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return /*#__PURE__*/ _jsx("div", {
|
|
89
|
+
className: className,
|
|
90
|
+
style: style,
|
|
91
|
+
role: "group",
|
|
92
|
+
"aria-label": "Theme Switch",
|
|
93
|
+
children: modes.map((mode)=>/*#__PURE__*/ _jsx("button", {
|
|
94
|
+
type: "button",
|
|
95
|
+
onClick: ()=>setMode(mode),
|
|
96
|
+
"aria-pressed": currentMode === mode,
|
|
97
|
+
children: mergedLabels[mode]
|
|
98
|
+
}, mode))
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=ThemeSwitch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/ThemeSwitch.tsx"],"sourcesContent":["import React from 'react';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useTheme } from '../core';\nimport type { ThemeMode } from '../core/kernel';\nimport {\n type PersistenceOptions,\n readPersistedValue,\n writePersistedValue,\n} from './persistence';\n\nconst DEFAULT_THEME_STORAGE_KEY = 'vlian:theme-mode';\nconst DEFAULT_MODES: ThemeMode[] = ['light', 'dark', 'system'];\nconst DEFAULT_PERSISTENCE: PersistenceOptions = { enabled: true };\n\nconst DEFAULT_LABELS: Record<ThemeMode, string> = {\n light: '浅色',\n dark: '深色',\n system: '跟随系统',\n};\n\nexport interface ThemeSwitchRenderContext {\n mode: ThemeMode;\n setMode: (mode: ThemeMode) => void;\n modes: ThemeMode[];\n labels: Record<ThemeMode, string>;\n}\n\nexport interface ThemeSwitchProps {\n modes?: ThemeMode[];\n labels?: Partial<Record<ThemeMode, string>>;\n persistence?: PersistenceOptions;\n className?: string;\n style?: CSSProperties;\n onChange?: (mode: ThemeMode) => void;\n render?: (context: ThemeSwitchRenderContext) => ReactNode;\n}\n\nfunction isThemeMode(value: string): value is ThemeMode {\n return value === 'light' || value === 'dark' || value === 'system';\n}\n\nexport const ThemeSwitch: React.FC<ThemeSwitchProps> = ({\n modes = DEFAULT_MODES,\n labels = DEFAULT_LABELS,\n persistence,\n className,\n style,\n onChange,\n render,\n}) => {\n const { theme, setTheme } = useTheme();\n const persistenceOptions = persistence || DEFAULT_PERSISTENCE;\n const hydratedRef = React.useRef(false);\n const lastWrittenModeRef = React.useRef<ThemeMode | undefined>(undefined);\n\n const mergedLabels = React.useMemo<Record<ThemeMode, string>>(\n () => ({\n ...DEFAULT_LABELS,\n ...labels,\n }),\n [labels]\n );\n\n React.useEffect(() => {\n if (hydratedRef.current) {\n return;\n }\n hydratedRef.current = true;\n\n const persistedMode = readPersistedValue(persistenceOptions, DEFAULT_THEME_STORAGE_KEY);\n if (!persistedMode || !isThemeMode(persistedMode) || !modes.includes(persistedMode)) {\n return;\n }\n\n if (persistedMode !== theme.mode) {\n setTheme((prev) => ({\n ...prev,\n mode: persistedMode,\n }));\n }\n }, [modes, persistenceOptions, setTheme, theme.mode]);\n\n React.useEffect(() => {\n const mode = theme.mode;\n if (!mode || lastWrittenModeRef.current === mode) {\n return;\n }\n\n writePersistedValue(mode, persistenceOptions, DEFAULT_THEME_STORAGE_KEY);\n lastWrittenModeRef.current = mode;\n }, [persistenceOptions, theme.mode]);\n\n const currentMode: ThemeMode = (theme.mode || 'light') as ThemeMode;\n\n const setMode = React.useCallback(\n (mode: ThemeMode) => {\n if (mode === currentMode) {\n return;\n }\n setTheme((prev) => ({\n ...prev,\n mode,\n }));\n onChange?.(mode);\n },\n [currentMode, onChange, setTheme]\n );\n\n if (render) {\n return render({\n mode: currentMode,\n setMode,\n modes,\n labels: mergedLabels,\n });\n }\n\n return (\n <div className={className} style={style} role=\"group\" aria-label=\"Theme Switch\">\n {modes.map((mode) => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => setMode(mode)}\n aria-pressed={currentMode === mode}\n >\n {mergedLabels[mode]}\n </button>\n ))}\n </div>\n );\n};\n"],"names":["React","useTheme","readPersistedValue","writePersistedValue","DEFAULT_THEME_STORAGE_KEY","DEFAULT_MODES","DEFAULT_PERSISTENCE","enabled","DEFAULT_LABELS","light","dark","system","isThemeMode","value","ThemeSwitch","modes","labels","persistence","className","style","onChange","render","theme","setTheme","persistenceOptions","hydratedRef","useRef","lastWrittenModeRef","undefined","mergedLabels","useMemo","useEffect","current","persistedMode","includes","mode","prev","currentMode","setMode","useCallback","div","role","aria-label","map","button","type","onClick","aria-pressed"],"mappings":";AAAA,OAAOA,WAAW,QAAQ;AAE1B,SAASC,QAAQ,QAAQ,UAAU;AAEnC,SAEEC,kBAAkB,EAClBC,mBAAmB,QACd,gBAAgB;AAEvB,MAAMC,4BAA4B;AAClC,MAAMC,gBAA6B;IAAC;IAAS;IAAQ;CAAS;AAC9D,MAAMC,sBAA0C;IAAEC,SAAS;AAAK;AAEhE,MAAMC,iBAA4C;IAChDC,OAAO;IACPC,MAAM;IACNC,QAAQ;AACV;AAmBA,SAASC,YAAYC,KAAa;IAChC,OAAOA,UAAU,WAAWA,UAAU,UAAUA,UAAU;AAC5D;AAEA,OAAO,MAAMC,cAA0C,CAAC,EACtDC,QAAQV,aAAa,EACrBW,SAASR,cAAc,EACvBS,WAAW,EACXC,SAAS,EACTC,KAAK,EACLC,QAAQ,EACRC,MAAM,EACP;IACC,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGtB;IAC5B,MAAMuB,qBAAqBP,eAAeX;IAC1C,MAAMmB,cAAczB,MAAM0B,MAAM,CAAC;IACjC,MAAMC,qBAAqB3B,MAAM0B,MAAM,CAAwBE;IAE/D,MAAMC,eAAe7B,MAAM8B,OAAO,CAChC,IAAO,CAAA;YACL,GAAGtB,cAAc;YACjB,GAAGQ,MAAM;QACX,CAAA,GACA;QAACA;KAAO;IAGVhB,MAAM+B,SAAS,CAAC;QACd,IAAIN,YAAYO,OAAO,EAAE;YACvB;QACF;QACAP,YAAYO,OAAO,GAAG;QAEtB,MAAMC,gBAAgB/B,mBAAmBsB,oBAAoBpB;QAC7D,IAAI,CAAC6B,iBAAiB,CAACrB,YAAYqB,kBAAkB,CAAClB,MAAMmB,QAAQ,CAACD,gBAAgB;YACnF;QACF;QAEA,IAAIA,kBAAkBX,MAAMa,IAAI,EAAE;YAChCZ,SAAS,CAACa,OAAU,CAAA;oBAClB,GAAGA,IAAI;oBACPD,MAAMF;gBACR,CAAA;QACF;IACF,GAAG;QAAClB;QAAOS;QAAoBD;QAAUD,MAAMa,IAAI;KAAC;IAEpDnC,MAAM+B,SAAS,CAAC;QACd,MAAMI,OAAOb,MAAMa,IAAI;QACvB,IAAI,CAACA,QAAQR,mBAAmBK,OAAO,KAAKG,MAAM;YAChD;QACF;QAEAhC,oBAAoBgC,MAAMX,oBAAoBpB;QAC9CuB,mBAAmBK,OAAO,GAAGG;IAC/B,GAAG;QAACX;QAAoBF,MAAMa,IAAI;KAAC;IAEnC,MAAME,cAA0Bf,MAAMa,IAAI,IAAI;IAE9C,MAAMG,UAAUtC,MAAMuC,WAAW,CAC/B,CAACJ;QACC,IAAIA,SAASE,aAAa;YACxB;QACF;QACAd,SAAS,CAACa,OAAU,CAAA;gBAClB,GAAGA,IAAI;gBACPD;YACF,CAAA;QACAf,WAAWe;IACb,GACA;QAACE;QAAajB;QAAUG;KAAS;IAGnC,IAAIF,QAAQ;QACV,OAAOA,OAAO;YACZc,MAAME;YACNC;YACAvB;YACAC,QAAQa;QACV;IACF;IAEA,qBACE,KAACW;QAAItB,WAAWA;QAAWC,OAAOA;QAAOsB,MAAK;QAAQC,cAAW;kBAC9D3B,MAAM4B,GAAG,CAAC,CAACR,qBACV,KAACS;gBAECC,MAAK;gBACLC,SAAS,IAAMR,QAAQH;gBACvBY,gBAAcV,gBAAgBF;0BAE7BN,YAAY,CAACM,KAAK;eALdA;;AAUf,EAAE"}
|
|
@@ -2,5 +2,21 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", {
|
|
3
3
|
value: true
|
|
4
4
|
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get LocaleSwitch () {
|
|
13
|
+
return _LocaleSwitch.LocaleSwitch;
|
|
14
|
+
},
|
|
15
|
+
get ThemeSwitch () {
|
|
16
|
+
return _ThemeSwitch.ThemeSwitch;
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
const _ThemeSwitch = require("./ThemeSwitch");
|
|
20
|
+
const _LocaleSwitch = require("./LocaleSwitch");
|
|
5
21
|
|
|
6
22
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/index.ts"],"names":[],"mappings":""}
|
|
1
|
+
{"version":3,"sources":["../../src/components/index.ts"],"sourcesContent":["export { ThemeSwitch } from './ThemeSwitch';\nexport type { ThemeSwitchProps, ThemeSwitchRenderContext } from './ThemeSwitch';\n\nexport { LocaleSwitch } from './LocaleSwitch';\nexport type { LocaleSwitchProps, LocaleSwitchRenderContext } from './LocaleSwitch';\n\nexport type { PersistenceOptions, StorageLike } from './persistence';\n"],"names":["LocaleSwitch","ThemeSwitch"],"mappings":";;;;;;;;;;;QAGSA;eAAAA,0BAAY;;QAHZC;eAAAA,wBAAW;;;6BAAQ;8BAGC"}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
|
|
1
|
+
export { ThemeSwitch } from './ThemeSwitch';
|
|
2
|
+
export type { ThemeSwitchProps, ThemeSwitchRenderContext } from './ThemeSwitch';
|
|
3
|
+
export { LocaleSwitch } from './LocaleSwitch';
|
|
4
|
+
export type { LocaleSwitchProps, LocaleSwitchRenderContext } from './LocaleSwitch';
|
|
5
|
+
export type { PersistenceOptions, StorageLike } from './persistence';
|
package/dist/components/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/index.ts"],"sourcesContent":["export {}
|
|
1
|
+
{"version":3,"sources":["../../src/components/index.ts"],"sourcesContent":["export { ThemeSwitch } from './ThemeSwitch';\nexport type { ThemeSwitchProps, ThemeSwitchRenderContext } from './ThemeSwitch';\n\nexport { LocaleSwitch } from './LocaleSwitch';\nexport type { LocaleSwitchProps, LocaleSwitchRenderContext } from './LocaleSwitch';\n\nexport type { PersistenceOptions, StorageLike } from './persistence';\n"],"names":["ThemeSwitch","LocaleSwitch"],"mappings":"AAAA,SAASA,WAAW,QAAQ,gBAAgB;AAG5C,SAASC,YAAY,QAAQ,iBAAiB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
function _export(target, all) {
|
|
6
|
+
for(var name in all)Object.defineProperty(target, name, {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: Object.getOwnPropertyDescriptor(all, name).get
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
_export(exports, {
|
|
12
|
+
get readPersistedValue () {
|
|
13
|
+
return readPersistedValue;
|
|
14
|
+
},
|
|
15
|
+
get resolveStorage () {
|
|
16
|
+
return resolveStorage;
|
|
17
|
+
},
|
|
18
|
+
get writePersistedValue () {
|
|
19
|
+
return writePersistedValue;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
function resolveStorage(storage) {
|
|
23
|
+
if (storage) {
|
|
24
|
+
return storage;
|
|
25
|
+
}
|
|
26
|
+
if (typeof window === 'undefined' || !window.localStorage) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
return window.localStorage;
|
|
30
|
+
}
|
|
31
|
+
function readPersistedValue(options, defaultKey) {
|
|
32
|
+
if (options.enabled === false) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
const targetStorage = resolveStorage(options.storage);
|
|
36
|
+
if (!targetStorage) {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
return targetStorage.getItem(options.key || defaultKey);
|
|
41
|
+
} catch {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function writePersistedValue(value, options, defaultKey) {
|
|
46
|
+
if (options.enabled === false || !value) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
const targetStorage = resolveStorage(options.storage);
|
|
50
|
+
if (!targetStorage) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
try {
|
|
54
|
+
targetStorage.setItem(options.key || defaultKey, value);
|
|
55
|
+
} catch {
|
|
56
|
+
// Ignore storage write failures (private mode / quota / disabled storage).
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/persistence.ts"],"sourcesContent":["export interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n}\n\nexport interface PersistenceOptions {\n enabled?: boolean;\n key?: string;\n storage?: StorageLike;\n}\n\nexport function resolveStorage(storage?: StorageLike): StorageLike | null {\n if (storage) {\n return storage;\n }\n\n if (typeof window === 'undefined' || !window.localStorage) {\n return null;\n }\n\n return window.localStorage;\n}\n\nexport function readPersistedValue(\n options: PersistenceOptions,\n defaultKey: string\n): string | null {\n if (options.enabled === false) {\n return null;\n }\n\n const targetStorage = resolveStorage(options.storage);\n if (!targetStorage) {\n return null;\n }\n\n try {\n return targetStorage.getItem(options.key || defaultKey);\n } catch {\n return null;\n }\n}\n\nexport function writePersistedValue(\n value: string | undefined,\n options: PersistenceOptions,\n defaultKey: string\n): void {\n if (options.enabled === false || !value) {\n return;\n }\n\n const targetStorage = resolveStorage(options.storage);\n if (!targetStorage) {\n return;\n }\n\n try {\n targetStorage.setItem(options.key || defaultKey, value);\n } catch {\n // Ignore storage write failures (private mode / quota / disabled storage).\n }\n}\n"],"names":["readPersistedValue","resolveStorage","writePersistedValue","storage","window","localStorage","options","defaultKey","enabled","targetStorage","getItem","key","value","setItem"],"mappings":";;;;;;;;;;;QAuBgBA;eAAAA;;QAZAC;eAAAA;;QAgCAC;eAAAA;;;AAhCT,SAASD,eAAeE,OAAqB;IAClD,IAAIA,SAAS;QACX,OAAOA;IACT;IAEA,IAAI,OAAOC,WAAW,eAAe,CAACA,OAAOC,YAAY,EAAE;QACzD,OAAO;IACT;IAEA,OAAOD,OAAOC,YAAY;AAC5B;AAEO,SAASL,mBACdM,OAA2B,EAC3BC,UAAkB;IAElB,IAAID,QAAQE,OAAO,KAAK,OAAO;QAC7B,OAAO;IACT;IAEA,MAAMC,gBAAgBR,eAAeK,QAAQH,OAAO;IACpD,IAAI,CAACM,eAAe;QAClB,OAAO;IACT;IAEA,IAAI;QACF,OAAOA,cAAcC,OAAO,CAACJ,QAAQK,GAAG,IAAIJ;IAC9C,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEO,SAASL,oBACdU,KAAyB,EACzBN,OAA2B,EAC3BC,UAAkB;IAElB,IAAID,QAAQE,OAAO,KAAK,SAAS,CAACI,OAAO;QACvC;IACF;IAEA,MAAMH,gBAAgBR,eAAeK,QAAQH,OAAO;IACpD,IAAI,CAACM,eAAe;QAClB;IACF;IAEA,IAAI;QACFA,cAAcI,OAAO,CAACP,QAAQK,GAAG,IAAIJ,YAAYK;IACnD,EAAE,OAAM;IACN,2EAA2E;IAC7E;AACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface StorageLike {
|
|
2
|
+
getItem(key: string): string | null;
|
|
3
|
+
setItem(key: string, value: string): void;
|
|
4
|
+
}
|
|
5
|
+
export interface PersistenceOptions {
|
|
6
|
+
enabled?: boolean;
|
|
7
|
+
key?: string;
|
|
8
|
+
storage?: StorageLike;
|
|
9
|
+
}
|
|
10
|
+
export declare function resolveStorage(storage?: StorageLike): StorageLike | null;
|
|
11
|
+
export declare function readPersistedValue(options: PersistenceOptions, defaultKey: string): string | null;
|
|
12
|
+
export declare function writePersistedValue(value: string | undefined, options: PersistenceOptions, defaultKey: string): void;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export function resolveStorage(storage) {
|
|
2
|
+
if (storage) {
|
|
3
|
+
return storage;
|
|
4
|
+
}
|
|
5
|
+
if (typeof window === 'undefined' || !window.localStorage) {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
return window.localStorage;
|
|
9
|
+
}
|
|
10
|
+
export function readPersistedValue(options, defaultKey) {
|
|
11
|
+
if (options.enabled === false) {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
const targetStorage = resolveStorage(options.storage);
|
|
15
|
+
if (!targetStorage) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
try {
|
|
19
|
+
return targetStorage.getItem(options.key || defaultKey);
|
|
20
|
+
} catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function writePersistedValue(value, options, defaultKey) {
|
|
25
|
+
if (options.enabled === false || !value) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const targetStorage = resolveStorage(options.storage);
|
|
29
|
+
if (!targetStorage) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
targetStorage.setItem(options.key || defaultKey, value);
|
|
34
|
+
} catch {
|
|
35
|
+
// Ignore storage write failures (private mode / quota / disabled storage).
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=persistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/components/persistence.ts"],"sourcesContent":["export interface StorageLike {\n getItem(key: string): string | null;\n setItem(key: string, value: string): void;\n}\n\nexport interface PersistenceOptions {\n enabled?: boolean;\n key?: string;\n storage?: StorageLike;\n}\n\nexport function resolveStorage(storage?: StorageLike): StorageLike | null {\n if (storage) {\n return storage;\n }\n\n if (typeof window === 'undefined' || !window.localStorage) {\n return null;\n }\n\n return window.localStorage;\n}\n\nexport function readPersistedValue(\n options: PersistenceOptions,\n defaultKey: string\n): string | null {\n if (options.enabled === false) {\n return null;\n }\n\n const targetStorage = resolveStorage(options.storage);\n if (!targetStorage) {\n return null;\n }\n\n try {\n return targetStorage.getItem(options.key || defaultKey);\n } catch {\n return null;\n }\n}\n\nexport function writePersistedValue(\n value: string | undefined,\n options: PersistenceOptions,\n defaultKey: string\n): void {\n if (options.enabled === false || !value) {\n return;\n }\n\n const targetStorage = resolveStorage(options.storage);\n if (!targetStorage) {\n return;\n }\n\n try {\n targetStorage.setItem(options.key || defaultKey, value);\n } catch {\n // Ignore storage write failures (private mode / quota / disabled storage).\n }\n}\n"],"names":["resolveStorage","storage","window","localStorage","readPersistedValue","options","defaultKey","enabled","targetStorage","getItem","key","writePersistedValue","value","setItem"],"mappings":"AAWA,OAAO,SAASA,eAAeC,OAAqB;IAClD,IAAIA,SAAS;QACX,OAAOA;IACT;IAEA,IAAI,OAAOC,WAAW,eAAe,CAACA,OAAOC,YAAY,EAAE;QACzD,OAAO;IACT;IAEA,OAAOD,OAAOC,YAAY;AAC5B;AAEA,OAAO,SAASC,mBACdC,OAA2B,EAC3BC,UAAkB;IAElB,IAAID,QAAQE,OAAO,KAAK,OAAO;QAC7B,OAAO;IACT;IAEA,MAAMC,gBAAgBR,eAAeK,QAAQJ,OAAO;IACpD,IAAI,CAACO,eAAe;QAClB,OAAO;IACT;IAEA,IAAI;QACF,OAAOA,cAAcC,OAAO,CAACJ,QAAQK,GAAG,IAAIJ;IAC9C,EAAE,OAAM;QACN,OAAO;IACT;AACF;AAEA,OAAO,SAASK,oBACdC,KAAyB,EACzBP,OAA2B,EAC3BC,UAAkB;IAElB,IAAID,QAAQE,OAAO,KAAK,SAAS,CAACK,OAAO;QACvC;IACF;IAEA,MAAMJ,gBAAgBR,eAAeK,QAAQJ,OAAO;IACpD,IAAI,CAACO,eAAe;QAClB;IACF;IAEA,IAAI;QACFA,cAAcK,OAAO,CAACR,QAAQK,GAAG,IAAIJ,YAAYM;IACnD,EAAE,OAAM;IACN,2EAA2E;IAC7E;AACF"}
|
package/dist/core/Test.d.ts
CHANGED