@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.
Files changed (428) hide show
  1. package/dist/analytics/index.cjs +24 -0
  2. package/dist/analytics/index.cjs.map +1 -0
  3. package/dist/analytics/index.d.ts +2 -0
  4. package/dist/analytics/index.js +3 -0
  5. package/dist/analytics/index.js.map +1 -0
  6. package/dist/analytics.umd.js +2406 -0
  7. package/dist/analytics.umd.js.map +1 -0
  8. package/dist/components/LocaleSwitch.cjs +118 -0
  9. package/dist/components/LocaleSwitch.cjs.map +1 -0
  10. package/dist/components/LocaleSwitch.d.ts +21 -0
  11. package/dist/components/LocaleSwitch.js +103 -0
  12. package/dist/components/LocaleSwitch.js.map +1 -0
  13. package/dist/components/ThemeSwitch.cjs +117 -0
  14. package/dist/components/ThemeSwitch.cjs.map +1 -0
  15. package/dist/components/ThemeSwitch.d.ts +20 -0
  16. package/dist/components/ThemeSwitch.js +102 -0
  17. package/dist/components/ThemeSwitch.js.map +1 -0
  18. package/dist/components/index.cjs +16 -0
  19. package/dist/components/index.cjs.map +1 -1
  20. package/dist/components/index.d.ts +5 -2
  21. package/dist/components/index.js +2 -1
  22. package/dist/components/index.js.map +1 -1
  23. package/dist/components/persistence.cjs +60 -0
  24. package/dist/components/persistence.cjs.map +1 -0
  25. package/dist/components/persistence.d.ts +12 -0
  26. package/dist/components/persistence.js +39 -0
  27. package/dist/components/persistence.js.map +1 -0
  28. package/dist/core/Test.d.ts +0 -1
  29. package/dist/core/app/AppContext.cjs +36 -30
  30. package/dist/core/app/AppContext.cjs.map +1 -1
  31. package/dist/core/app/AppContext.d.ts +9 -6
  32. package/dist/core/app/AppContext.js +36 -30
  33. package/dist/core/app/AppContext.js.map +1 -1
  34. package/dist/core/app/AppContext.types.d.ts +9 -10
  35. package/dist/core/app/AppContext.types.js.map +1 -1
  36. package/dist/core/app/BasicLayout.cjs +57 -22
  37. package/dist/core/app/BasicLayout.cjs.map +1 -1
  38. package/dist/core/app/BasicLayout.d.ts +7 -5
  39. package/dist/core/app/BasicLayout.js +57 -22
  40. package/dist/core/app/BasicLayout.js.map +1 -1
  41. package/dist/core/app/DefaultApp.cjs +104 -153
  42. package/dist/core/app/DefaultApp.cjs.map +1 -1
  43. package/dist/core/app/DefaultApp.d.ts +0 -21
  44. package/dist/core/app/DefaultApp.js +104 -153
  45. package/dist/core/app/DefaultApp.js.map +1 -1
  46. package/dist/core/app/index.d.ts +0 -1
  47. package/dist/core/config/AppConfig.cjs.map +1 -1
  48. package/dist/core/config/AppConfig.d.ts +3 -4
  49. package/dist/core/config/AppConfig.js.map +1 -1
  50. package/dist/core/config/ConfigLoader.d.ts +0 -1
  51. package/dist/core/config/ConfigValidator.d.ts +0 -1
  52. package/dist/core/config/index.d.ts +0 -1
  53. package/dist/core/dev/DevTools.cjs +141 -287
  54. package/dist/core/dev/DevTools.cjs.map +1 -1
  55. package/dist/core/dev/DevTools.d.ts +1 -32
  56. package/dist/core/dev/DevTools.js +143 -296
  57. package/dist/core/dev/DevTools.js.map +1 -1
  58. package/dist/core/error/ErrorBoundary.cjs +72 -14
  59. package/dist/core/error/ErrorBoundary.cjs.map +1 -1
  60. package/dist/core/error/ErrorBoundary.d.ts +7 -9
  61. package/dist/core/error/ErrorBoundary.js +73 -15
  62. package/dist/core/error/ErrorBoundary.js.map +1 -1
  63. package/dist/core/error/ErrorHandler.d.ts +0 -1
  64. package/dist/core/error/index.d.ts +0 -1
  65. package/dist/core/event/AppEventBus.d.ts +0 -1
  66. package/dist/core/event/frameworkEvents.d.ts +0 -1
  67. package/dist/core/event/hooks.d.ts +0 -1
  68. package/dist/core/event/index.d.ts +0 -1
  69. package/dist/core/event/types.d.ts +0 -1
  70. package/dist/core/event/useEventBus.d.ts +0 -1
  71. package/dist/core/index.cjs +2 -0
  72. package/dist/core/index.cjs.map +1 -1
  73. package/dist/core/index.d.ts +2 -1
  74. package/dist/core/index.js +2 -0
  75. package/dist/core/index.js.map +1 -1
  76. package/dist/core/initialization/InitializationErrorThrower.d.ts +0 -1
  77. package/dist/core/initialization/index.d.ts +0 -1
  78. package/dist/core/initialization/initialization.d.ts +0 -1
  79. package/dist/core/initialization/initializationErrorState.d.ts +0 -1
  80. package/dist/core/kernel/defaultAdapters.cjs +185 -0
  81. package/dist/core/kernel/defaultAdapters.cjs.map +1 -0
  82. package/dist/core/kernel/defaultAdapters.d.ts +2 -0
  83. package/dist/core/kernel/defaultAdapters.js +175 -0
  84. package/dist/core/kernel/defaultAdapters.js.map +1 -0
  85. package/dist/core/kernel/errors.cjs +71 -0
  86. package/dist/core/kernel/errors.cjs.map +1 -0
  87. package/dist/core/kernel/errors.d.ts +18 -0
  88. package/dist/core/kernel/errors.js +53 -0
  89. package/dist/core/kernel/errors.js.map +1 -0
  90. package/dist/core/kernel/index.cjs +22 -0
  91. package/dist/core/kernel/index.cjs.map +1 -0
  92. package/dist/core/kernel/index.d.ts +3 -0
  93. package/dist/core/kernel/index.js +4 -0
  94. package/dist/core/kernel/index.js.map +1 -0
  95. package/dist/core/kernel/startKernel.cjs +203 -0
  96. package/dist/core/kernel/startKernel.cjs.map +1 -0
  97. package/dist/core/kernel/startKernel.d.ts +2 -0
  98. package/dist/core/kernel/startKernel.js +193 -0
  99. package/dist/core/kernel/startKernel.js.map +1 -0
  100. package/dist/core/kernel/types.cjs +6 -0
  101. package/dist/core/kernel/types.cjs.map +1 -0
  102. package/dist/core/kernel/types.d.ts +114 -0
  103. package/dist/core/kernel/types.js +3 -0
  104. package/dist/core/kernel/types.js.map +1 -0
  105. package/dist/core/middleware.d.ts +0 -1
  106. package/dist/core/plugin/PluginEventBus.d.ts +0 -1
  107. package/dist/core/plugin/PluginSandbox.d.ts +0 -1
  108. package/dist/core/plugin.cjs +1 -1
  109. package/dist/core/plugin.cjs.map +1 -1
  110. package/dist/core/plugin.d.ts +0 -1
  111. package/dist/core/plugin.js +1 -1
  112. package/dist/core/plugin.js.map +1 -1
  113. package/dist/core/router/RouterManager.d.ts +0 -1
  114. package/dist/core/router/adapter/AdapterManager.d.ts +0 -1
  115. package/dist/core/router/adapter/index.d.ts +0 -1
  116. package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts +0 -1
  117. package/dist/core/router/adapter/react-router/index.d.ts +0 -1
  118. package/dist/core/router/adapter/types.cjs.map +1 -1
  119. package/dist/core/router/adapter/types.d.ts +1 -2
  120. package/dist/core/router/adapter/types.js.map +1 -1
  121. package/dist/core/router/dev/RouterDevTools.cjs +148 -296
  122. package/dist/core/router/dev/RouterDevTools.cjs.map +1 -1
  123. package/dist/core/router/dev/RouterDevTools.d.ts +1 -6
  124. package/dist/core/router/dev/RouterDevTools.js +149 -301
  125. package/dist/core/router/dev/RouterDevTools.js.map +1 -1
  126. package/dist/core/router/dev/index.d.ts +0 -1
  127. package/dist/core/router/dynamic/DynamicRouteManager.d.ts +0 -1
  128. package/dist/core/router/dynamic/index.d.ts +0 -1
  129. package/dist/core/router/errors/RouterError.d.ts +0 -1
  130. package/dist/core/router/errors/index.d.ts +0 -1
  131. package/dist/core/router/index.d.ts +0 -1
  132. package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts +0 -1
  133. package/dist/core/router/lifecycle/index.d.ts +0 -1
  134. package/dist/core/router/middleware/RouterMiddlewareManager.d.ts +0 -1
  135. package/dist/core/router/middleware/auth.d.ts +0 -1
  136. package/dist/core/router/middleware/index.d.ts +0 -1
  137. package/dist/core/router/middleware/types.d.ts +0 -1
  138. package/dist/core/router/monitoring/RouterMonitoring.d.ts +0 -1
  139. package/dist/core/router/monitoring/index.d.ts +0 -1
  140. package/dist/core/router/navigation/RouterNavigation.d.ts +0 -1
  141. package/dist/core/router/navigation/index.d.ts +0 -1
  142. package/dist/core/router/performance/RouteCache.d.ts +0 -1
  143. package/dist/core/router/performance/RoutePreloader.d.ts +0 -1
  144. package/dist/core/router/performance/index.d.ts +0 -1
  145. package/dist/core/router/plugin/RouterPluginManager.d.ts +0 -1
  146. package/dist/core/router/plugin/index.d.ts +0 -1
  147. package/dist/core/router/plugin/types.d.ts +0 -1
  148. package/dist/core/router/types.d.ts +1 -2
  149. package/dist/core/router/types.js.map +1 -1
  150. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs +90 -103
  151. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.cjs.map +1 -1
  152. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts +0 -1
  153. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js +91 -104
  154. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.js.map +1 -1
  155. package/dist/core/router/utils/adapters/react-router/transform.cjs +13 -4
  156. package/dist/core/router/utils/adapters/react-router/transform.cjs.map +1 -1
  157. package/dist/core/router/utils/adapters/react-router/transform.d.ts +0 -1
  158. package/dist/core/router/utils/adapters/react-router/transform.js +13 -4
  159. package/dist/core/router/utils/adapters/react-router/transform.js.map +1 -1
  160. package/dist/core/router/utils/transform.cjs +1 -1
  161. package/dist/core/router/utils/transform.cjs.map +1 -1
  162. package/dist/core/router/utils/transform.d.ts +0 -1
  163. package/dist/core/router/utils/transform.js +1 -1
  164. package/dist/core/router/utils/transform.js.map +1 -1
  165. package/dist/core/router/validation/RouterConfigValidator.d.ts +0 -1
  166. package/dist/core/router/validation/index.d.ts +0 -1
  167. package/dist/core/router/validation/schema.d.ts +0 -1
  168. package/dist/core/router/version/RouteVersionManager.d.ts +0 -1
  169. package/dist/core/router/version/index.d.ts +0 -1
  170. package/dist/core/splash/SplashScreen.cjs +101 -15
  171. package/dist/core/splash/SplashScreen.cjs.map +1 -1
  172. package/dist/core/splash/SplashScreen.d.ts +0 -1
  173. package/dist/core/splash/SplashScreen.js +101 -15
  174. package/dist/core/splash/SplashScreen.js.map +1 -1
  175. package/dist/core/splash/index.d.ts +0 -1
  176. package/dist/core/splash/splashScreenUtils.d.ts +0 -1
  177. package/dist/core/startup/AppInstance.d.ts +0 -1
  178. package/dist/core/startup/environment.d.ts +0 -1
  179. package/dist/core/startup/index.d.ts +0 -1
  180. package/dist/core/startup/initializeServices.d.ts +0 -1
  181. package/dist/core/startup/performanceTracker.d.ts +0 -1
  182. package/dist/core/startup/renderApp.cjs +12 -10
  183. package/dist/core/startup/renderApp.cjs.map +1 -1
  184. package/dist/core/startup/renderApp.d.ts +0 -1
  185. package/dist/core/startup/renderApp.js +12 -10
  186. package/dist/core/startup/renderApp.js.map +1 -1
  187. package/dist/core/startup/startApp.cjs +118 -13
  188. package/dist/core/startup/startApp.cjs.map +1 -1
  189. package/dist/core/startup/startApp.d.ts +0 -1
  190. package/dist/core/startup/startApp.js +118 -13
  191. package/dist/core/startup/startApp.js.map +1 -1
  192. package/dist/core/types.d.ts +34 -21
  193. package/dist/core/types.js.map +1 -1
  194. package/dist/core/ui-adapter/adapters.cjs +45 -0
  195. package/dist/core/ui-adapter/adapters.cjs.map +1 -0
  196. package/dist/core/ui-adapter/adapters.d.ts +4 -0
  197. package/dist/core/ui-adapter/adapters.js +27 -0
  198. package/dist/core/ui-adapter/adapters.js.map +1 -0
  199. package/dist/core/ui-adapter/index.cjs +21 -0
  200. package/dist/core/ui-adapter/index.cjs.map +1 -0
  201. package/dist/core/ui-adapter/index.d.ts +2 -0
  202. package/dist/core/ui-adapter/index.js +3 -0
  203. package/dist/core/ui-adapter/index.js.map +1 -0
  204. package/dist/core/ui-adapter/types.cjs +6 -0
  205. package/dist/core/ui-adapter/types.cjs.map +1 -0
  206. package/dist/core/ui-adapter/types.d.ts +24 -0
  207. package/dist/core/ui-adapter/types.js +3 -0
  208. package/dist/core/ui-adapter/types.js.map +1 -0
  209. package/dist/index.cjs +1 -0
  210. package/dist/index.cjs.map +1 -1
  211. package/dist/index.d.ts +1 -1
  212. package/dist/index.js +1 -0
  213. package/dist/index.js.map +1 -1
  214. package/dist/index.umd.d.ts +0 -1
  215. package/dist/index.umd.js +7315 -5936
  216. package/dist/index.umd.js.map +1 -1
  217. package/dist/library/index.d.ts +0 -1
  218. package/dist/library/locale/index.d.ts +0 -1
  219. package/dist/library/locale/langs/en-us/index.d.ts +0 -1
  220. package/dist/library/locale/langs/zh-cn/index.d.ts +0 -1
  221. package/dist/library/locale/types.d.ts +0 -1
  222. package/dist/library/storage/cache.d.ts +0 -1
  223. package/dist/library/storage/encryption.d.ts +0 -1
  224. package/dist/library/storage/index.d.ts +0 -1
  225. package/dist/request/adapter/RequestAdapter.d.ts +0 -1
  226. package/dist/request/adapter/axiosAdapter.d.ts +0 -1
  227. package/dist/request/adapter/fetchAdapter.d.ts +0 -1
  228. package/dist/request/adapter/index.d.ts +0 -1
  229. package/dist/request/adapter/kyAdapter.d.ts +0 -1
  230. package/dist/request/adapter/undiciAdapter.d.ts +0 -1
  231. package/dist/request/core/RequestClient.d.ts +0 -1
  232. package/dist/request/core/index.d.ts +0 -1
  233. package/dist/request/index.d.ts +0 -1
  234. package/dist/request/plugin/RequestPlugin.d.ts +0 -1
  235. package/dist/request/plugin/cache.d.ts +0 -1
  236. package/dist/request/plugin/csrfPlugin.d.ts +0 -1
  237. package/dist/request/plugin/index.d.ts +0 -1
  238. package/dist/request/plugin/monitoring.d.ts +0 -1
  239. package/dist/request/plugin/queue.d.ts +0 -1
  240. package/dist/request/plugin/retry.d.ts +0 -1
  241. package/dist/request/plugin/validation.d.ts +0 -1
  242. package/dist/request/runtime/RequestContext.d.ts +0 -1
  243. package/dist/request/runtime/index.d.ts +0 -1
  244. package/dist/request/types.d.ts +0 -1
  245. package/dist/request/utils/RequestQueueManager.d.ts +0 -1
  246. package/dist/request/utils/dependencyCheck.d.ts +0 -1
  247. package/dist/request/utils/index.d.ts +0 -1
  248. package/dist/request.umd.js +5392 -0
  249. package/dist/request.umd.js.map +1 -0
  250. package/dist/state/StateManager.d.ts +0 -1
  251. package/dist/state/adapters/AdapterFactory.d.ts +0 -1
  252. package/dist/state/adapters/DefaultAdapter.d.ts +0 -1
  253. package/dist/state/adapters/ReduxAdapter.d.ts +0 -1
  254. package/dist/state/adapters/ZustandAdapter.d.ts +0 -1
  255. package/dist/state/adapters/index.d.ts +0 -1
  256. package/dist/state/adapters/types.d.ts +0 -1
  257. package/dist/state/core/DerivedStateInstance.d.ts +0 -1
  258. package/dist/state/core/StateInstance.d.ts +0 -1
  259. package/dist/state/core/StateRegistry.d.ts +0 -1
  260. package/dist/state/core/StateScope.d.ts +0 -1
  261. package/dist/state/core/index.d.ts +0 -1
  262. package/dist/state/index.d.ts +0 -1
  263. package/dist/state/types.d.ts +0 -1
  264. package/dist/state.umd.js +1414 -0
  265. package/dist/state.umd.js.map +1 -0
  266. package/dist/types.d.ts +0 -1
  267. package/dist/utils/analytics.d.ts +0 -1
  268. package/dist/utils/configSecurity.d.ts +0 -1
  269. package/dist/utils/csrf.d.ts +0 -1
  270. package/dist/utils/errors/ErrorCodes.d.ts +0 -1
  271. package/dist/utils/errors.cjs +44 -1
  272. package/dist/utils/errors.cjs.map +1 -1
  273. package/dist/utils/errors.d.ts +5 -1
  274. package/dist/utils/errors.js +44 -1
  275. package/dist/utils/errors.js.map +1 -1
  276. package/dist/utils/index.d.ts +0 -1
  277. package/dist/utils/logger.d.ts +0 -1
  278. package/dist/utils/logger.types.d.ts +0 -1
  279. package/dist/utils/monitoring.d.ts +0 -1
  280. package/dist/utils/performance.d.ts +0 -1
  281. package/dist/utils/resourceLoader.d.ts +0 -1
  282. package/dist/utils/runtimeSecurity.d.ts +0 -1
  283. package/dist/utils/security.d.ts +0 -1
  284. package/dist/utils/traceId.d.ts +0 -1
  285. package/dist/utils/validation.d.ts +0 -1
  286. package/package.json +24 -9
  287. package/dist/components/index.d.ts.map +0 -1
  288. package/dist/core/Test.d.ts.map +0 -1
  289. package/dist/core/app/AppContext.d.ts.map +0 -1
  290. package/dist/core/app/AppContext.types.d.ts.map +0 -1
  291. package/dist/core/app/BasicLayout.d.ts.map +0 -1
  292. package/dist/core/app/DefaultApp.d.ts.map +0 -1
  293. package/dist/core/app/index.d.ts.map +0 -1
  294. package/dist/core/config/AppConfig.d.ts.map +0 -1
  295. package/dist/core/config/ConfigLoader.d.ts.map +0 -1
  296. package/dist/core/config/ConfigValidator.d.ts.map +0 -1
  297. package/dist/core/config/index.d.ts.map +0 -1
  298. package/dist/core/dev/DevTools.d.ts.map +0 -1
  299. package/dist/core/error/ErrorBoundary.d.ts.map +0 -1
  300. package/dist/core/error/ErrorHandler.d.ts.map +0 -1
  301. package/dist/core/error/index.d.ts.map +0 -1
  302. package/dist/core/event/AppEventBus.d.ts.map +0 -1
  303. package/dist/core/event/frameworkEvents.d.ts.map +0 -1
  304. package/dist/core/event/hooks.d.ts.map +0 -1
  305. package/dist/core/event/index.d.ts.map +0 -1
  306. package/dist/core/event/types.d.ts.map +0 -1
  307. package/dist/core/event/useEventBus.d.ts.map +0 -1
  308. package/dist/core/index.d.ts.map +0 -1
  309. package/dist/core/initialization/InitializationErrorThrower.d.ts.map +0 -1
  310. package/dist/core/initialization/index.d.ts.map +0 -1
  311. package/dist/core/initialization/initialization.d.ts.map +0 -1
  312. package/dist/core/initialization/initializationErrorState.d.ts.map +0 -1
  313. package/dist/core/middleware.d.ts.map +0 -1
  314. package/dist/core/plugin/PluginEventBus.d.ts.map +0 -1
  315. package/dist/core/plugin/PluginSandbox.d.ts.map +0 -1
  316. package/dist/core/plugin.d.ts.map +0 -1
  317. package/dist/core/router/RouterManager.d.ts.map +0 -1
  318. package/dist/core/router/adapter/AdapterManager.d.ts.map +0 -1
  319. package/dist/core/router/adapter/index.d.ts.map +0 -1
  320. package/dist/core/router/adapter/react-router/ReactRouterAdapter.d.ts.map +0 -1
  321. package/dist/core/router/adapter/react-router/index.d.ts.map +0 -1
  322. package/dist/core/router/adapter/types.d.ts.map +0 -1
  323. package/dist/core/router/dev/RouterDevTools.d.ts.map +0 -1
  324. package/dist/core/router/dev/index.d.ts.map +0 -1
  325. package/dist/core/router/dynamic/DynamicRouteManager.d.ts.map +0 -1
  326. package/dist/core/router/dynamic/index.d.ts.map +0 -1
  327. package/dist/core/router/errors/RouterError.d.ts.map +0 -1
  328. package/dist/core/router/errors/index.d.ts.map +0 -1
  329. package/dist/core/router/index.d.ts.map +0 -1
  330. package/dist/core/router/lifecycle/RouterLifecycleManager.d.ts.map +0 -1
  331. package/dist/core/router/lifecycle/index.d.ts.map +0 -1
  332. package/dist/core/router/middleware/RouterMiddlewareManager.d.ts.map +0 -1
  333. package/dist/core/router/middleware/auth.d.ts.map +0 -1
  334. package/dist/core/router/middleware/index.d.ts.map +0 -1
  335. package/dist/core/router/middleware/types.d.ts.map +0 -1
  336. package/dist/core/router/monitoring/RouterMonitoring.d.ts.map +0 -1
  337. package/dist/core/router/monitoring/index.d.ts.map +0 -1
  338. package/dist/core/router/navigation/RouterNavigation.d.ts.map +0 -1
  339. package/dist/core/router/navigation/index.d.ts.map +0 -1
  340. package/dist/core/router/performance/RouteCache.d.ts.map +0 -1
  341. package/dist/core/router/performance/RoutePreloader.d.ts.map +0 -1
  342. package/dist/core/router/performance/index.d.ts.map +0 -1
  343. package/dist/core/router/plugin/RouterPluginManager.d.ts.map +0 -1
  344. package/dist/core/router/plugin/index.d.ts.map +0 -1
  345. package/dist/core/router/plugin/types.d.ts.map +0 -1
  346. package/dist/core/router/types.d.ts.map +0 -1
  347. package/dist/core/router/utils/adapters/react-router/RouteErrorBoundary.d.ts.map +0 -1
  348. package/dist/core/router/utils/adapters/react-router/transform.d.ts.map +0 -1
  349. package/dist/core/router/utils/transform.d.ts.map +0 -1
  350. package/dist/core/router/validation/RouterConfigValidator.d.ts.map +0 -1
  351. package/dist/core/router/validation/index.d.ts.map +0 -1
  352. package/dist/core/router/validation/schema.d.ts.map +0 -1
  353. package/dist/core/router/version/RouteVersionManager.d.ts.map +0 -1
  354. package/dist/core/router/version/index.d.ts.map +0 -1
  355. package/dist/core/splash/SplashScreen.d.ts.map +0 -1
  356. package/dist/core/splash/index.d.ts.map +0 -1
  357. package/dist/core/splash/splashScreenUtils.d.ts.map +0 -1
  358. package/dist/core/startup/AppInstance.d.ts.map +0 -1
  359. package/dist/core/startup/environment.d.ts.map +0 -1
  360. package/dist/core/startup/index.d.ts.map +0 -1
  361. package/dist/core/startup/initializeServices.d.ts.map +0 -1
  362. package/dist/core/startup/performanceTracker.d.ts.map +0 -1
  363. package/dist/core/startup/renderApp.d.ts.map +0 -1
  364. package/dist/core/startup/startApp.d.ts.map +0 -1
  365. package/dist/core/types.d.ts.map +0 -1
  366. package/dist/index.d.ts.map +0 -1
  367. package/dist/index.umd.d.ts.map +0 -1
  368. package/dist/library/index.d.ts.map +0 -1
  369. package/dist/library/locale/index.d.ts.map +0 -1
  370. package/dist/library/locale/langs/en-us/index.d.ts.map +0 -1
  371. package/dist/library/locale/langs/zh-cn/index.d.ts.map +0 -1
  372. package/dist/library/locale/types.d.ts.map +0 -1
  373. package/dist/library/storage/cache.d.ts.map +0 -1
  374. package/dist/library/storage/encryption.d.ts.map +0 -1
  375. package/dist/library/storage/index.d.ts.map +0 -1
  376. package/dist/request/adapter/RequestAdapter.d.ts.map +0 -1
  377. package/dist/request/adapter/axiosAdapter.d.ts.map +0 -1
  378. package/dist/request/adapter/fetchAdapter.d.ts.map +0 -1
  379. package/dist/request/adapter/index.d.ts.map +0 -1
  380. package/dist/request/adapter/kyAdapter.d.ts.map +0 -1
  381. package/dist/request/adapter/undiciAdapter.d.ts.map +0 -1
  382. package/dist/request/core/RequestClient.d.ts.map +0 -1
  383. package/dist/request/core/index.d.ts.map +0 -1
  384. package/dist/request/index.d.ts.map +0 -1
  385. package/dist/request/plugin/RequestPlugin.d.ts.map +0 -1
  386. package/dist/request/plugin/cache.d.ts.map +0 -1
  387. package/dist/request/plugin/csrfPlugin.d.ts.map +0 -1
  388. package/dist/request/plugin/index.d.ts.map +0 -1
  389. package/dist/request/plugin/monitoring.d.ts.map +0 -1
  390. package/dist/request/plugin/queue.d.ts.map +0 -1
  391. package/dist/request/plugin/retry.d.ts.map +0 -1
  392. package/dist/request/plugin/validation.d.ts.map +0 -1
  393. package/dist/request/runtime/RequestContext.d.ts.map +0 -1
  394. package/dist/request/runtime/index.d.ts.map +0 -1
  395. package/dist/request/types.d.ts.map +0 -1
  396. package/dist/request/utils/RequestQueueManager.d.ts.map +0 -1
  397. package/dist/request/utils/dependencyCheck.d.ts.map +0 -1
  398. package/dist/request/utils/index.d.ts.map +0 -1
  399. package/dist/state/StateManager.d.ts.map +0 -1
  400. package/dist/state/adapters/AdapterFactory.d.ts.map +0 -1
  401. package/dist/state/adapters/DefaultAdapter.d.ts.map +0 -1
  402. package/dist/state/adapters/ReduxAdapter.d.ts.map +0 -1
  403. package/dist/state/adapters/ZustandAdapter.d.ts.map +0 -1
  404. package/dist/state/adapters/index.d.ts.map +0 -1
  405. package/dist/state/adapters/types.d.ts.map +0 -1
  406. package/dist/state/core/DerivedStateInstance.d.ts.map +0 -1
  407. package/dist/state/core/StateInstance.d.ts.map +0 -1
  408. package/dist/state/core/StateRegistry.d.ts.map +0 -1
  409. package/dist/state/core/StateScope.d.ts.map +0 -1
  410. package/dist/state/core/index.d.ts.map +0 -1
  411. package/dist/state/index.d.ts.map +0 -1
  412. package/dist/state/types.d.ts.map +0 -1
  413. package/dist/types.d.ts.map +0 -1
  414. package/dist/utils/analytics.d.ts.map +0 -1
  415. package/dist/utils/configSecurity.d.ts.map +0 -1
  416. package/dist/utils/csrf.d.ts.map +0 -1
  417. package/dist/utils/errors/ErrorCodes.d.ts.map +0 -1
  418. package/dist/utils/errors.d.ts.map +0 -1
  419. package/dist/utils/index.d.ts.map +0 -1
  420. package/dist/utils/logger.d.ts.map +0 -1
  421. package/dist/utils/logger.types.d.ts.map +0 -1
  422. package/dist/utils/monitoring.d.ts.map +0 -1
  423. package/dist/utils/performance.d.ts.map +0 -1
  424. package/dist/utils/resourceLoader.d.ts.map +0 -1
  425. package/dist/utils/runtimeSecurity.d.ts.map +0 -1
  426. package/dist/utils/security.d.ts.map +0 -1
  427. package/dist/utils/traceId.d.ts.map +0 -1
  428. package/dist/utils/validation.d.ts.map +0 -1
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export * from './schema';
5
5
  export * from './RouterConfigValidator';
6
- //# sourceMappingURL=index.d.ts.map
@@ -79,4 +79,3 @@ export declare function safeValidateRouterConfig(config: unknown): z.ZodSafePars
79
79
  } | undefined;
80
80
  transformOptions?: any;
81
81
  }>;
82
- //# sourceMappingURL=schema.d.ts.map
@@ -122,4 +122,3 @@ export declare class RouteVersionManager {
122
122
  rollback(version: string, routes: RouteConfig[]): Promise<RouteConfig[]>;
123
123
  }
124
124
  export declare function getRouteVersionManager(config?: RouteVersionManagerConfig): RouteVersionManager;
125
- //# sourceMappingURL=RouteVersionManager.d.ts.map
@@ -2,4 +2,3 @@
2
2
  * 路由版本管理模块入口
3
3
  */
4
4
  export * from './RouteVersionManager';
5
- //# sourceMappingURL=index.d.ts.map
@@ -10,7 +10,6 @@ Object.defineProperty(exports, "SplashScreen", {
10
10
  });
11
11
  const _jsxruntime = require("react/jsx-runtime");
12
12
  const _react = /*#__PURE__*/ _interop_require_wildcard(require("react"));
13
- const _antd = require("antd");
14
13
  const _utils = require("../../utils");
15
14
  const _initialization = require("../initialization");
16
15
  function _getRequireWildcardCache(nodeInterop) {
@@ -63,6 +62,12 @@ function _interop_require_wildcard(obj, nodeInterop) {
63
62
  const [currentStep, setCurrentStep] = (0, _react.useState)('准备初始化...');
64
63
  const [isInitializing, setIsInitializing] = (0, _react.useState)(false);
65
64
  const [estimatedTime, setEstimatedTime] = (0, _react.useState)(null);
65
+ const [isSystemDark, setIsSystemDark] = (0, _react.useState)(()=>{
66
+ if (typeof window === 'undefined') {
67
+ return false;
68
+ }
69
+ return window.matchMedia('(prefers-color-scheme: dark)').matches;
70
+ });
66
71
  const hasCompletedRef = (0, _react.useRef)(false);
67
72
  const onCompleteRef = (0, _react.useRef)(onComplete);
68
73
  const optionsRef = (0, _react.useRef)(options);
@@ -182,6 +187,51 @@ function _interop_require_wildcard(obj, nodeInterop) {
182
187
  }, [
183
188
  debouncedProgressUpdate
184
189
  ]);
190
+ (0, _react.useEffect)(()=>{
191
+ if (typeof window === 'undefined') {
192
+ return;
193
+ }
194
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
195
+ const onSystemThemeChange = (event)=>{
196
+ setIsSystemDark(event.matches);
197
+ };
198
+ setIsSystemDark(mediaQuery.matches);
199
+ if (typeof mediaQuery.addEventListener === 'function') {
200
+ mediaQuery.addEventListener('change', onSystemThemeChange);
201
+ return ()=>mediaQuery.removeEventListener('change', onSystemThemeChange);
202
+ }
203
+ mediaQuery.addListener(onSystemThemeChange);
204
+ return ()=>mediaQuery.removeListener(onSystemThemeChange);
205
+ }, []);
206
+ const resolvedMode = _react.default.useMemo(()=>{
207
+ const mode = optionsRef.current.theme?.mode || 'light';
208
+ if (mode === 'system') {
209
+ return isSystemDark ? 'dark' : 'light';
210
+ }
211
+ return mode === 'dark' ? 'dark' : 'light';
212
+ }, [
213
+ isSystemDark
214
+ ]);
215
+ const palette = _react.default.useMemo(()=>{
216
+ if (resolvedMode === 'dark') {
217
+ return {
218
+ background: '#0b1220',
219
+ text: '#e2e8f0',
220
+ subText: '#94a3b8',
221
+ track: '#1f2937',
222
+ spinnerTrack: '#334155'
223
+ };
224
+ }
225
+ return {
226
+ background: '#f5f7fb',
227
+ text: '#51606f',
228
+ subText: '#94a3b8',
229
+ track: '#e9eff5',
230
+ spinnerTrack: '#d9e2ec'
231
+ };
232
+ }, [
233
+ resolvedMode
234
+ ]);
185
235
  // 如果提供了自定义启动屏组件,使用自定义组件
186
236
  const CustomSplashScreen = optionsRef.current.splashScreen;
187
237
  if (CustomSplashScreen) {
@@ -206,31 +256,64 @@ function _interop_require_wildcard(obj, nodeInterop) {
206
256
  justifyContent: 'center',
207
257
  height: '100vh',
208
258
  width: '100%',
209
- gap: 24
259
+ gap: 24,
260
+ background: palette.background,
261
+ color: palette.text
210
262
  },
211
263
  children: [
212
- /*#__PURE__*/ (0, _jsxruntime.jsx)(_antd.Spin, {
213
- size: "large",
214
- spinning: isInitializing,
215
- "aria-label": "加载中"
216
- }),
217
264
  /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
265
+ "aria-label": "加载中",
266
+ style: {
267
+ width: 42,
268
+ height: 42,
269
+ border: `4px solid ${palette.spinnerTrack}`,
270
+ borderTopColor: 'var(--app-primary-color, #2f80ed)',
271
+ borderRadius: '50%',
272
+ animation: 'secra-spin 1s linear infinite'
273
+ }
274
+ }),
275
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
218
276
  style: {
219
277
  width: '300px'
220
278
  },
221
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_antd.Progress, {
222
- percent: progress,
223
- status: isInitializing ? 'active' : 'success',
224
- showInfo: true,
225
- "aria-label": `加载进度 ${progress}%`
226
- })
279
+ children: [
280
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
281
+ "aria-label": `加载进度 ${progress}%`,
282
+ style: {
283
+ height: 12,
284
+ background: palette.track,
285
+ borderRadius: 999,
286
+ overflow: 'hidden'
287
+ },
288
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
289
+ style: {
290
+ width: `${Math.max(0, Math.min(100, progress))}%`,
291
+ height: '100%',
292
+ background: 'var(--app-primary-color, #2f80ed)',
293
+ transition: 'width 0.2s ease'
294
+ }
295
+ })
296
+ }),
297
+ /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
298
+ style: {
299
+ marginTop: 8,
300
+ textAlign: 'right',
301
+ fontSize: 12,
302
+ color: palette.text
303
+ },
304
+ children: [
305
+ progress,
306
+ "%"
307
+ ]
308
+ })
309
+ ]
227
310
  }),
228
311
  /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
229
312
  role: "status",
230
313
  "aria-live": "polite",
231
314
  style: {
232
315
  fontSize: 14,
233
- color: '#666',
316
+ color: palette.text,
234
317
  textAlign: 'center'
235
318
  },
236
319
  children: [
@@ -238,7 +321,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
238
321
  estimatedTime !== null && estimatedTime > 0 && /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
239
322
  style: {
240
323
  fontSize: 12,
241
- color: '#999',
324
+ color: palette.subText,
242
325
  marginTop: 8
243
326
  },
244
327
  children: [
@@ -248,6 +331,9 @@ function _interop_require_wildcard(obj, nodeInterop) {
248
331
  ]
249
332
  })
250
333
  ]
334
+ }),
335
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("style", {
336
+ children: `@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`
251
337
  })
252
338
  ]
253
339
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/splash/SplashScreen.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { Spin, Progress } from 'antd';\nimport { logger } from '../../utils';\nimport { initialization, initializationErrorState } from '../initialization';\nimport type { StartOptions, SplashScreenCustomProps } from '../types';\nimport type { InitializationContext } from '../initialization';\n\ninterface SplashScreenProps {\n options: StartOptions;\n onComplete: (context: InitializationContext) => void;\n}\n\n/**\n * 启动页组件\n * \n * 在启动页中执行初始化,并使用 Ant Design 5 的 Spin 和 Progress 组件展示启动进度\n */\nconst SplashScreen: React.FC<SplashScreenProps> = memo(({ options, onComplete }) => {\n const [progress, setProgress] = useState(0);\n const [currentStep, setCurrentStep] = useState<string>('准备初始化...');\n const [isInitializing, setIsInitializing] = useState(false);\n const [estimatedTime, setEstimatedTime] = useState<number | null>(null);\n const hasCompletedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n const optionsRef = useRef(options);\n const startTimeRef = useRef<number>(Date.now());\n const minDisplayTimeRef = useRef<number>(options.minSplashScreenTime ?? 500); // 最小显示时间,默认 500ms\n const progressUpdateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n const lastProgressRef = useRef(0);\n const progressHistoryRef = useRef<Array<{ progress: number; time: number }>>([]);\n\n // 保持引用最新\n useEffect(() => {\n onCompleteRef.current = onComplete;\n optionsRef.current = options;\n minDisplayTimeRef.current = options.minSplashScreenTime ?? 500;\n }, [onComplete, options]);\n\n // 自适应防抖进度更新函数(使用 requestAnimationFrame 优化)\n const debouncedProgressUpdate = useCallback((progressValue: number, step?: string) => {\n // 取消之前的更新\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // 记录进度历史用于时间预估\n const now = Date.now();\n progressHistoryRef.current.push({ progress: progressValue, time: now });\n // 只保留最近10个记录\n if (progressHistoryRef.current.length > 10) {\n progressHistoryRef.current.shift();\n }\n\n // 计算预估时间\n if (progressHistoryRef.current.length >= 2 && progressValue > 0) {\n const history = progressHistoryRef.current;\n const first = history[0]!;\n const last = history[history.length - 1]!;\n const progressDelta = last.progress - first.progress;\n const timeDelta = last.time - first.time;\n\n if (progressDelta > 0 && timeDelta > 0) {\n const progressPerMs = progressDelta / timeDelta;\n const remainingProgress = 100 - progressValue;\n const estimatedMs = remainingProgress / progressPerMs;\n setEstimatedTime(Math.max(0, Math.round(estimatedMs)));\n }\n }\n\n // 使用 requestAnimationFrame 优化更新\n rafRef.current = requestAnimationFrame(() => {\n setProgress(progressValue);\n if (step) {\n setCurrentStep(step);\n }\n lastProgressRef.current = progressValue;\n rafRef.current = null;\n });\n }, []);\n\n useEffect(() => {\n if (hasCompletedRef.current) return;\n hasCompletedRef.current = true;\n startTimeRef.current = Date.now();\n\n const performInitialization = async () => {\n try {\n setIsInitializing(true);\n setProgress(0);\n setCurrentStep('开始初始化...');\n\n logger.info('启动页开始执行初始化');\n\n // 执行初始化,传入防抖的进度回调\n const context = await initialization(optionsRef.current, (progressValue, step) => {\n debouncedProgressUpdate(progressValue, step);\n });\n\n logger.info('启动页初始化完成', context);\n\n // 动态调整最小显示时间(如果初始化很快,减少最小显示时间)\n const elapsedTime = Date.now() - startTimeRef.current;\n const dynamicMinTime = elapsedTime < 200 ? Math.min(minDisplayTimeRef.current, 300) : minDisplayTimeRef.current;\n const remainingTime = Math.max(0, dynamicMinTime - elapsedTime);\n\n if (remainingTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n }\n\n // 清理防抖定时器\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n progressUpdateTimerRef.current = null;\n }\n\n // 确保进度条显示 100%\n setProgress(100);\n setCurrentStep('初始化完成');\n\n // 初始化完成,调用回调\n onCompleteRef.current(context);\n } catch (error) {\n logger.error('启动页初始化失败:', error);\n // 设置错误状态,让 ErrorBoundary 能够捕获\n initializationErrorState.setError(error);\n setCurrentStep('初始化失败,请刷新页面重试');\n // 即使失败也调用 onComplete,让应用能够处理错误\n onCompleteRef.current({\n config: {},\n progress: 0,\n isReady: false,\n duration: 0,\n });\n } finally {\n setIsInitializing(false);\n }\n };\n\n performInitialization();\n\n // 清理函数\n return () => {\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, [debouncedProgressUpdate]);\n\n // 如果提供了自定义启动屏组件,使用自定义组件\n const CustomSplashScreen = optionsRef.current.splashScreen;\n if (CustomSplashScreen) {\n const customProps: SplashScreenCustomProps = {\n progress,\n currentStep,\n isInitializing,\n };\n return <CustomSplashScreen {...customProps} />;\n }\n\n // 默认启动屏 UI\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"应用正在加载\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100%',\n gap: 24,\n }}\n >\n <Spin size=\"large\" spinning={isInitializing} aria-label=\"加载中\" />\n <div style={{ width: '300px' }}>\n <Progress\n percent={progress}\n status={isInitializing ? 'active' : 'success'}\n showInfo\n aria-label={`加载进度 ${progress}%`}\n />\n </div>\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontSize: 14,\n color: '#666',\n textAlign: 'center',\n }}\n >\n {currentStep}\n {estimatedTime !== null && estimatedTime > 0 && (\n <div style={{ fontSize: 12, color: '#999', marginTop: 8 }}>\n 预计还需 {Math.ceil(estimatedTime / 1000)} 秒\n </div>\n )}\n </div>\n </div>\n );\n});\n\nSplashScreen.displayName = 'SplashScreen';\n\nexport { SplashScreen };"],"names":["SplashScreen","memo","options","onComplete","progress","setProgress","useState","currentStep","setCurrentStep","isInitializing","setIsInitializing","estimatedTime","setEstimatedTime","hasCompletedRef","useRef","onCompleteRef","optionsRef","startTimeRef","Date","now","minDisplayTimeRef","minSplashScreenTime","progressUpdateTimerRef","rafRef","lastProgressRef","progressHistoryRef","useEffect","current","debouncedProgressUpdate","useCallback","progressValue","step","cancelAnimationFrame","push","time","length","shift","history","first","last","progressDelta","timeDelta","progressPerMs","remainingProgress","estimatedMs","Math","max","round","requestAnimationFrame","performInitialization","logger","info","context","initialization","elapsedTime","dynamicMinTime","min","remainingTime","Promise","resolve","setTimeout","clearTimeout","error","initializationErrorState","setError","config","isReady","duration","CustomSplashScreen","splashScreen","customProps","div","role","aria-live","aria-label","style","display","flexDirection","alignItems","justifyContent","height","width","gap","Spin","size","spinning","Progress","percent","status","showInfo","fontSize","color","textAlign","marginTop","ceil","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/splash/SplashScreen.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { logger } from '../../utils';\nimport { initialization, initializationErrorState } from '../initialization';\nimport type { StartOptions, SplashScreenCustomProps } from '../types';\nimport type { InitializationContext } from '../initialization';\n\ninterface SplashScreenProps {\n options: StartOptions;\n onComplete: (context: InitializationContext) => void;\n}\n\n/**\n * 启动页组件\n * \n * 在启动页中执行初始化,并使用 Ant Design 5 的 Spin 和 Progress 组件展示启动进度\n */\nconst SplashScreen: React.FC<SplashScreenProps> = memo(({ options, onComplete }) => {\n const [progress, setProgress] = useState(0);\n const [currentStep, setCurrentStep] = useState<string>('准备初始化...');\n const [isInitializing, setIsInitializing] = useState(false);\n const [estimatedTime, setEstimatedTime] = useState<number | null>(null);\n const [isSystemDark, setIsSystemDark] = useState<boolean>(() => {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n });\n const hasCompletedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n const optionsRef = useRef(options);\n const startTimeRef = useRef<number>(Date.now());\n const minDisplayTimeRef = useRef<number>(options.minSplashScreenTime ?? 500); // 最小显示时间,默认 500ms\n const progressUpdateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n const lastProgressRef = useRef(0);\n const progressHistoryRef = useRef<Array<{ progress: number; time: number }>>([]);\n\n // 保持引用最新\n useEffect(() => {\n onCompleteRef.current = onComplete;\n optionsRef.current = options;\n minDisplayTimeRef.current = options.minSplashScreenTime ?? 500;\n }, [onComplete, options]);\n\n // 自适应防抖进度更新函数(使用 requestAnimationFrame 优化)\n const debouncedProgressUpdate = useCallback((progressValue: number, step?: string) => {\n // 取消之前的更新\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // 记录进度历史用于时间预估\n const now = Date.now();\n progressHistoryRef.current.push({ progress: progressValue, time: now });\n // 只保留最近10个记录\n if (progressHistoryRef.current.length > 10) {\n progressHistoryRef.current.shift();\n }\n\n // 计算预估时间\n if (progressHistoryRef.current.length >= 2 && progressValue > 0) {\n const history = progressHistoryRef.current;\n const first = history[0]!;\n const last = history[history.length - 1]!;\n const progressDelta = last.progress - first.progress;\n const timeDelta = last.time - first.time;\n\n if (progressDelta > 0 && timeDelta > 0) {\n const progressPerMs = progressDelta / timeDelta;\n const remainingProgress = 100 - progressValue;\n const estimatedMs = remainingProgress / progressPerMs;\n setEstimatedTime(Math.max(0, Math.round(estimatedMs)));\n }\n }\n\n // 使用 requestAnimationFrame 优化更新\n rafRef.current = requestAnimationFrame(() => {\n setProgress(progressValue);\n if (step) {\n setCurrentStep(step);\n }\n lastProgressRef.current = progressValue;\n rafRef.current = null;\n });\n }, []);\n\n useEffect(() => {\n if (hasCompletedRef.current) return;\n hasCompletedRef.current = true;\n startTimeRef.current = Date.now();\n\n const performInitialization = async () => {\n try {\n setIsInitializing(true);\n setProgress(0);\n setCurrentStep('开始初始化...');\n\n logger.info('启动页开始执行初始化');\n\n // 执行初始化,传入防抖的进度回调\n const context = await initialization(optionsRef.current, (progressValue, step) => {\n debouncedProgressUpdate(progressValue, step);\n });\n\n logger.info('启动页初始化完成', context);\n\n // 动态调整最小显示时间(如果初始化很快,减少最小显示时间)\n const elapsedTime = Date.now() - startTimeRef.current;\n const dynamicMinTime = elapsedTime < 200 ? Math.min(minDisplayTimeRef.current, 300) : minDisplayTimeRef.current;\n const remainingTime = Math.max(0, dynamicMinTime - elapsedTime);\n\n if (remainingTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n }\n\n // 清理防抖定时器\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n progressUpdateTimerRef.current = null;\n }\n\n // 确保进度条显示 100%\n setProgress(100);\n setCurrentStep('初始化完成');\n\n // 初始化完成,调用回调\n onCompleteRef.current(context);\n } catch (error) {\n logger.error('启动页初始化失败:', error);\n // 设置错误状态,让 ErrorBoundary 能够捕获\n initializationErrorState.setError(error);\n setCurrentStep('初始化失败,请刷新页面重试');\n // 即使失败也调用 onComplete,让应用能够处理错误\n onCompleteRef.current({\n config: {},\n progress: 0,\n isReady: false,\n duration: 0,\n });\n } finally {\n setIsInitializing(false);\n }\n };\n\n performInitialization();\n\n // 清理函数\n return () => {\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, [debouncedProgressUpdate]);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const onSystemThemeChange = (event: MediaQueryListEvent) => {\n setIsSystemDark(event.matches);\n };\n\n setIsSystemDark(mediaQuery.matches);\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 }, []);\n\n const resolvedMode = React.useMemo<'light' | 'dark'>(() => {\n const mode = optionsRef.current.theme?.mode || 'light';\n if (mode === 'system') {\n return isSystemDark ? 'dark' : 'light';\n }\n return mode === 'dark' ? 'dark' : 'light';\n }, [isSystemDark]);\n\n const palette = React.useMemo(() => {\n if (resolvedMode === 'dark') {\n return {\n background: '#0b1220',\n text: '#e2e8f0',\n subText: '#94a3b8',\n track: '#1f2937',\n spinnerTrack: '#334155',\n };\n }\n\n return {\n background: '#f5f7fb',\n text: '#51606f',\n subText: '#94a3b8',\n track: '#e9eff5',\n spinnerTrack: '#d9e2ec',\n };\n }, [resolvedMode]);\n\n // 如果提供了自定义启动屏组件,使用自定义组件\n const CustomSplashScreen = optionsRef.current.splashScreen;\n if (CustomSplashScreen) {\n const customProps: SplashScreenCustomProps = {\n progress,\n currentStep,\n isInitializing,\n };\n return <CustomSplashScreen {...customProps} />;\n }\n\n // 默认启动屏 UI\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"应用正在加载\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100%',\n gap: 24,\n background: palette.background,\n color: palette.text,\n }}\n >\n <div\n aria-label=\"加载中\"\n style={{\n width: 42,\n height: 42,\n border: `4px solid ${palette.spinnerTrack}`,\n borderTopColor: 'var(--app-primary-color, #2f80ed)',\n borderRadius: '50%',\n animation: 'secra-spin 1s linear infinite',\n }}\n />\n <div style={{ width: '300px' }}>\n <div\n aria-label={`加载进度 ${progress}%`}\n style={{\n height: 12,\n background: palette.track,\n borderRadius: 999,\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n width: `${Math.max(0, Math.min(100, progress))}%`,\n height: '100%',\n background: 'var(--app-primary-color, #2f80ed)',\n transition: 'width 0.2s ease',\n }}\n />\n </div>\n <div style={{ marginTop: 8, textAlign: 'right', fontSize: 12, color: palette.text }}>\n {progress}%\n </div>\n </div>\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontSize: 14,\n color: palette.text,\n textAlign: 'center',\n }}\n >\n {currentStep}\n {estimatedTime !== null && estimatedTime > 0 && (\n <div style={{ fontSize: 12, color: palette.subText, marginTop: 8 }}>\n 预计还需 {Math.ceil(estimatedTime / 1000)} 秒\n </div>\n )}\n </div>\n <style>\n {`@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`}\n </style>\n </div>\n );\n});\n\nSplashScreen.displayName = 'SplashScreen';\n\nexport { SplashScreen };\n"],"names":["SplashScreen","memo","options","onComplete","progress","setProgress","useState","currentStep","setCurrentStep","isInitializing","setIsInitializing","estimatedTime","setEstimatedTime","isSystemDark","setIsSystemDark","window","matchMedia","matches","hasCompletedRef","useRef","onCompleteRef","optionsRef","startTimeRef","Date","now","minDisplayTimeRef","minSplashScreenTime","progressUpdateTimerRef","rafRef","lastProgressRef","progressHistoryRef","useEffect","current","debouncedProgressUpdate","useCallback","progressValue","step","cancelAnimationFrame","push","time","length","shift","history","first","last","progressDelta","timeDelta","progressPerMs","remainingProgress","estimatedMs","Math","max","round","requestAnimationFrame","performInitialization","logger","info","context","initialization","elapsedTime","dynamicMinTime","min","remainingTime","Promise","resolve","setTimeout","clearTimeout","error","initializationErrorState","setError","config","isReady","duration","mediaQuery","onSystemThemeChange","event","addEventListener","removeEventListener","addListener","removeListener","resolvedMode","React","useMemo","mode","theme","palette","background","text","subText","track","spinnerTrack","CustomSplashScreen","splashScreen","customProps","div","role","aria-live","aria-label","style","display","flexDirection","alignItems","justifyContent","height","width","gap","color","border","borderTopColor","borderRadius","animation","overflow","transition","marginTop","textAlign","fontSize","ceil","displayName"],"mappings":"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"}
@@ -12,4 +12,3 @@ interface SplashScreenProps {
12
12
  */
13
13
  declare const SplashScreen: React.FC<SplashScreenProps>;
14
14
  export { SplashScreen };
15
- //# sourceMappingURL=SplashScreen.d.ts.map
@@ -1,6 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import React, { useEffect, useState, useRef, memo, useCallback } from "react";
3
- import { Spin, Progress } from "antd";
4
3
  import { logger } from "../../utils";
5
4
  import { initialization, initializationErrorState } from "../initialization";
6
5
  /**
@@ -12,6 +11,12 @@ import { initialization, initializationErrorState } from "../initialization";
12
11
  const [currentStep, setCurrentStep] = useState('准备初始化...');
13
12
  const [isInitializing, setIsInitializing] = useState(false);
14
13
  const [estimatedTime, setEstimatedTime] = useState(null);
14
+ const [isSystemDark, setIsSystemDark] = useState(()=>{
15
+ if (typeof window === 'undefined') {
16
+ return false;
17
+ }
18
+ return window.matchMedia('(prefers-color-scheme: dark)').matches;
19
+ });
15
20
  const hasCompletedRef = useRef(false);
16
21
  const onCompleteRef = useRef(onComplete);
17
22
  const optionsRef = useRef(options);
@@ -131,6 +136,51 @@ import { initialization, initializationErrorState } from "../initialization";
131
136
  }, [
132
137
  debouncedProgressUpdate
133
138
  ]);
139
+ useEffect(()=>{
140
+ if (typeof window === 'undefined') {
141
+ return;
142
+ }
143
+ const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
144
+ const onSystemThemeChange = (event)=>{
145
+ setIsSystemDark(event.matches);
146
+ };
147
+ setIsSystemDark(mediaQuery.matches);
148
+ if (typeof mediaQuery.addEventListener === 'function') {
149
+ mediaQuery.addEventListener('change', onSystemThemeChange);
150
+ return ()=>mediaQuery.removeEventListener('change', onSystemThemeChange);
151
+ }
152
+ mediaQuery.addListener(onSystemThemeChange);
153
+ return ()=>mediaQuery.removeListener(onSystemThemeChange);
154
+ }, []);
155
+ const resolvedMode = React.useMemo(()=>{
156
+ const mode = optionsRef.current.theme?.mode || 'light';
157
+ if (mode === 'system') {
158
+ return isSystemDark ? 'dark' : 'light';
159
+ }
160
+ return mode === 'dark' ? 'dark' : 'light';
161
+ }, [
162
+ isSystemDark
163
+ ]);
164
+ const palette = React.useMemo(()=>{
165
+ if (resolvedMode === 'dark') {
166
+ return {
167
+ background: '#0b1220',
168
+ text: '#e2e8f0',
169
+ subText: '#94a3b8',
170
+ track: '#1f2937',
171
+ spinnerTrack: '#334155'
172
+ };
173
+ }
174
+ return {
175
+ background: '#f5f7fb',
176
+ text: '#51606f',
177
+ subText: '#94a3b8',
178
+ track: '#e9eff5',
179
+ spinnerTrack: '#d9e2ec'
180
+ };
181
+ }, [
182
+ resolvedMode
183
+ ]);
134
184
  // 如果提供了自定义启动屏组件,使用自定义组件
135
185
  const CustomSplashScreen = optionsRef.current.splashScreen;
136
186
  if (CustomSplashScreen) {
@@ -155,31 +205,64 @@ import { initialization, initializationErrorState } from "../initialization";
155
205
  justifyContent: 'center',
156
206
  height: '100vh',
157
207
  width: '100%',
158
- gap: 24
208
+ gap: 24,
209
+ background: palette.background,
210
+ color: palette.text
159
211
  },
160
212
  children: [
161
- /*#__PURE__*/ _jsx(Spin, {
162
- size: "large",
163
- spinning: isInitializing,
164
- "aria-label": "加载中"
165
- }),
166
213
  /*#__PURE__*/ _jsx("div", {
214
+ "aria-label": "加载中",
215
+ style: {
216
+ width: 42,
217
+ height: 42,
218
+ border: `4px solid ${palette.spinnerTrack}`,
219
+ borderTopColor: 'var(--app-primary-color, #2f80ed)',
220
+ borderRadius: '50%',
221
+ animation: 'secra-spin 1s linear infinite'
222
+ }
223
+ }),
224
+ /*#__PURE__*/ _jsxs("div", {
167
225
  style: {
168
226
  width: '300px'
169
227
  },
170
- children: /*#__PURE__*/ _jsx(Progress, {
171
- percent: progress,
172
- status: isInitializing ? 'active' : 'success',
173
- showInfo: true,
174
- "aria-label": `加载进度 ${progress}%`
175
- })
228
+ children: [
229
+ /*#__PURE__*/ _jsx("div", {
230
+ "aria-label": `加载进度 ${progress}%`,
231
+ style: {
232
+ height: 12,
233
+ background: palette.track,
234
+ borderRadius: 999,
235
+ overflow: 'hidden'
236
+ },
237
+ children: /*#__PURE__*/ _jsx("div", {
238
+ style: {
239
+ width: `${Math.max(0, Math.min(100, progress))}%`,
240
+ height: '100%',
241
+ background: 'var(--app-primary-color, #2f80ed)',
242
+ transition: 'width 0.2s ease'
243
+ }
244
+ })
245
+ }),
246
+ /*#__PURE__*/ _jsxs("div", {
247
+ style: {
248
+ marginTop: 8,
249
+ textAlign: 'right',
250
+ fontSize: 12,
251
+ color: palette.text
252
+ },
253
+ children: [
254
+ progress,
255
+ "%"
256
+ ]
257
+ })
258
+ ]
176
259
  }),
177
260
  /*#__PURE__*/ _jsxs("div", {
178
261
  role: "status",
179
262
  "aria-live": "polite",
180
263
  style: {
181
264
  fontSize: 14,
182
- color: '#666',
265
+ color: palette.text,
183
266
  textAlign: 'center'
184
267
  },
185
268
  children: [
@@ -187,7 +270,7 @@ import { initialization, initializationErrorState } from "../initialization";
187
270
  estimatedTime !== null && estimatedTime > 0 && /*#__PURE__*/ _jsxs("div", {
188
271
  style: {
189
272
  fontSize: 12,
190
- color: '#999',
273
+ color: palette.subText,
191
274
  marginTop: 8
192
275
  },
193
276
  children: [
@@ -197,6 +280,9 @@ import { initialization, initializationErrorState } from "../initialization";
197
280
  ]
198
281
  })
199
282
  ]
283
+ }),
284
+ /*#__PURE__*/ _jsx("style", {
285
+ children: `@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`
200
286
  })
201
287
  ]
202
288
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/core/splash/SplashScreen.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { Spin, Progress } from 'antd';\nimport { logger } from '../../utils';\nimport { initialization, initializationErrorState } from '../initialization';\nimport type { StartOptions, SplashScreenCustomProps } from '../types';\nimport type { InitializationContext } from '../initialization';\n\ninterface SplashScreenProps {\n options: StartOptions;\n onComplete: (context: InitializationContext) => void;\n}\n\n/**\n * 启动页组件\n * \n * 在启动页中执行初始化,并使用 Ant Design 5 的 Spin 和 Progress 组件展示启动进度\n */\nconst SplashScreen: React.FC<SplashScreenProps> = memo(({ options, onComplete }) => {\n const [progress, setProgress] = useState(0);\n const [currentStep, setCurrentStep] = useState<string>('准备初始化...');\n const [isInitializing, setIsInitializing] = useState(false);\n const [estimatedTime, setEstimatedTime] = useState<number | null>(null);\n const hasCompletedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n const optionsRef = useRef(options);\n const startTimeRef = useRef<number>(Date.now());\n const minDisplayTimeRef = useRef<number>(options.minSplashScreenTime ?? 500); // 最小显示时间,默认 500ms\n const progressUpdateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n const lastProgressRef = useRef(0);\n const progressHistoryRef = useRef<Array<{ progress: number; time: number }>>([]);\n\n // 保持引用最新\n useEffect(() => {\n onCompleteRef.current = onComplete;\n optionsRef.current = options;\n minDisplayTimeRef.current = options.minSplashScreenTime ?? 500;\n }, [onComplete, options]);\n\n // 自适应防抖进度更新函数(使用 requestAnimationFrame 优化)\n const debouncedProgressUpdate = useCallback((progressValue: number, step?: string) => {\n // 取消之前的更新\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // 记录进度历史用于时间预估\n const now = Date.now();\n progressHistoryRef.current.push({ progress: progressValue, time: now });\n // 只保留最近10个记录\n if (progressHistoryRef.current.length > 10) {\n progressHistoryRef.current.shift();\n }\n\n // 计算预估时间\n if (progressHistoryRef.current.length >= 2 && progressValue > 0) {\n const history = progressHistoryRef.current;\n const first = history[0]!;\n const last = history[history.length - 1]!;\n const progressDelta = last.progress - first.progress;\n const timeDelta = last.time - first.time;\n\n if (progressDelta > 0 && timeDelta > 0) {\n const progressPerMs = progressDelta / timeDelta;\n const remainingProgress = 100 - progressValue;\n const estimatedMs = remainingProgress / progressPerMs;\n setEstimatedTime(Math.max(0, Math.round(estimatedMs)));\n }\n }\n\n // 使用 requestAnimationFrame 优化更新\n rafRef.current = requestAnimationFrame(() => {\n setProgress(progressValue);\n if (step) {\n setCurrentStep(step);\n }\n lastProgressRef.current = progressValue;\n rafRef.current = null;\n });\n }, []);\n\n useEffect(() => {\n if (hasCompletedRef.current) return;\n hasCompletedRef.current = true;\n startTimeRef.current = Date.now();\n\n const performInitialization = async () => {\n try {\n setIsInitializing(true);\n setProgress(0);\n setCurrentStep('开始初始化...');\n\n logger.info('启动页开始执行初始化');\n\n // 执行初始化,传入防抖的进度回调\n const context = await initialization(optionsRef.current, (progressValue, step) => {\n debouncedProgressUpdate(progressValue, step);\n });\n\n logger.info('启动页初始化完成', context);\n\n // 动态调整最小显示时间(如果初始化很快,减少最小显示时间)\n const elapsedTime = Date.now() - startTimeRef.current;\n const dynamicMinTime = elapsedTime < 200 ? Math.min(minDisplayTimeRef.current, 300) : minDisplayTimeRef.current;\n const remainingTime = Math.max(0, dynamicMinTime - elapsedTime);\n\n if (remainingTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n }\n\n // 清理防抖定时器\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n progressUpdateTimerRef.current = null;\n }\n\n // 确保进度条显示 100%\n setProgress(100);\n setCurrentStep('初始化完成');\n\n // 初始化完成,调用回调\n onCompleteRef.current(context);\n } catch (error) {\n logger.error('启动页初始化失败:', error);\n // 设置错误状态,让 ErrorBoundary 能够捕获\n initializationErrorState.setError(error);\n setCurrentStep('初始化失败,请刷新页面重试');\n // 即使失败也调用 onComplete,让应用能够处理错误\n onCompleteRef.current({\n config: {},\n progress: 0,\n isReady: false,\n duration: 0,\n });\n } finally {\n setIsInitializing(false);\n }\n };\n\n performInitialization();\n\n // 清理函数\n return () => {\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, [debouncedProgressUpdate]);\n\n // 如果提供了自定义启动屏组件,使用自定义组件\n const CustomSplashScreen = optionsRef.current.splashScreen;\n if (CustomSplashScreen) {\n const customProps: SplashScreenCustomProps = {\n progress,\n currentStep,\n isInitializing,\n };\n return <CustomSplashScreen {...customProps} />;\n }\n\n // 默认启动屏 UI\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"应用正在加载\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100%',\n gap: 24,\n }}\n >\n <Spin size=\"large\" spinning={isInitializing} aria-label=\"加载中\" />\n <div style={{ width: '300px' }}>\n <Progress\n percent={progress}\n status={isInitializing ? 'active' : 'success'}\n showInfo\n aria-label={`加载进度 ${progress}%`}\n />\n </div>\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontSize: 14,\n color: '#666',\n textAlign: 'center',\n }}\n >\n {currentStep}\n {estimatedTime !== null && estimatedTime > 0 && (\n <div style={{ fontSize: 12, color: '#999', marginTop: 8 }}>\n 预计还需 {Math.ceil(estimatedTime / 1000)} 秒\n </div>\n )}\n </div>\n </div>\n );\n});\n\nSplashScreen.displayName = 'SplashScreen';\n\nexport { SplashScreen };"],"names":["React","useEffect","useState","useRef","memo","useCallback","Spin","Progress","logger","initialization","initializationErrorState","SplashScreen","options","onComplete","progress","setProgress","currentStep","setCurrentStep","isInitializing","setIsInitializing","estimatedTime","setEstimatedTime","hasCompletedRef","onCompleteRef","optionsRef","startTimeRef","Date","now","minDisplayTimeRef","minSplashScreenTime","progressUpdateTimerRef","rafRef","lastProgressRef","progressHistoryRef","current","debouncedProgressUpdate","progressValue","step","cancelAnimationFrame","push","time","length","shift","history","first","last","progressDelta","timeDelta","progressPerMs","remainingProgress","estimatedMs","Math","max","round","requestAnimationFrame","performInitialization","info","context","elapsedTime","dynamicMinTime","min","remainingTime","Promise","resolve","setTimeout","clearTimeout","error","setError","config","isReady","duration","CustomSplashScreen","splashScreen","customProps","div","role","aria-live","aria-label","style","display","flexDirection","alignItems","justifyContent","height","width","gap","size","spinning","percent","status","showInfo","fontSize","color","textAlign","marginTop","ceil","displayName"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/core/splash/SplashScreen.tsx"],"sourcesContent":["import React, { useEffect, useState, useRef, memo, useCallback } from 'react';\nimport { logger } from '../../utils';\nimport { initialization, initializationErrorState } from '../initialization';\nimport type { StartOptions, SplashScreenCustomProps } from '../types';\nimport type { InitializationContext } from '../initialization';\n\ninterface SplashScreenProps {\n options: StartOptions;\n onComplete: (context: InitializationContext) => void;\n}\n\n/**\n * 启动页组件\n * \n * 在启动页中执行初始化,并使用 Ant Design 5 的 Spin 和 Progress 组件展示启动进度\n */\nconst SplashScreen: React.FC<SplashScreenProps> = memo(({ options, onComplete }) => {\n const [progress, setProgress] = useState(0);\n const [currentStep, setCurrentStep] = useState<string>('准备初始化...');\n const [isInitializing, setIsInitializing] = useState(false);\n const [estimatedTime, setEstimatedTime] = useState<number | null>(null);\n const [isSystemDark, setIsSystemDark] = useState<boolean>(() => {\n if (typeof window === 'undefined') {\n return false;\n }\n return window.matchMedia('(prefers-color-scheme: dark)').matches;\n });\n const hasCompletedRef = useRef(false);\n const onCompleteRef = useRef(onComplete);\n const optionsRef = useRef(options);\n const startTimeRef = useRef<number>(Date.now());\n const minDisplayTimeRef = useRef<number>(options.minSplashScreenTime ?? 500); // 最小显示时间,默认 500ms\n const progressUpdateTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const rafRef = useRef<number | null>(null);\n const lastProgressRef = useRef(0);\n const progressHistoryRef = useRef<Array<{ progress: number; time: number }>>([]);\n\n // 保持引用最新\n useEffect(() => {\n onCompleteRef.current = onComplete;\n optionsRef.current = options;\n minDisplayTimeRef.current = options.minSplashScreenTime ?? 500;\n }, [onComplete, options]);\n\n // 自适应防抖进度更新函数(使用 requestAnimationFrame 优化)\n const debouncedProgressUpdate = useCallback((progressValue: number, step?: string) => {\n // 取消之前的更新\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // 记录进度历史用于时间预估\n const now = Date.now();\n progressHistoryRef.current.push({ progress: progressValue, time: now });\n // 只保留最近10个记录\n if (progressHistoryRef.current.length > 10) {\n progressHistoryRef.current.shift();\n }\n\n // 计算预估时间\n if (progressHistoryRef.current.length >= 2 && progressValue > 0) {\n const history = progressHistoryRef.current;\n const first = history[0]!;\n const last = history[history.length - 1]!;\n const progressDelta = last.progress - first.progress;\n const timeDelta = last.time - first.time;\n\n if (progressDelta > 0 && timeDelta > 0) {\n const progressPerMs = progressDelta / timeDelta;\n const remainingProgress = 100 - progressValue;\n const estimatedMs = remainingProgress / progressPerMs;\n setEstimatedTime(Math.max(0, Math.round(estimatedMs)));\n }\n }\n\n // 使用 requestAnimationFrame 优化更新\n rafRef.current = requestAnimationFrame(() => {\n setProgress(progressValue);\n if (step) {\n setCurrentStep(step);\n }\n lastProgressRef.current = progressValue;\n rafRef.current = null;\n });\n }, []);\n\n useEffect(() => {\n if (hasCompletedRef.current) return;\n hasCompletedRef.current = true;\n startTimeRef.current = Date.now();\n\n const performInitialization = async () => {\n try {\n setIsInitializing(true);\n setProgress(0);\n setCurrentStep('开始初始化...');\n\n logger.info('启动页开始执行初始化');\n\n // 执行初始化,传入防抖的进度回调\n const context = await initialization(optionsRef.current, (progressValue, step) => {\n debouncedProgressUpdate(progressValue, step);\n });\n\n logger.info('启动页初始化完成', context);\n\n // 动态调整最小显示时间(如果初始化很快,减少最小显示时间)\n const elapsedTime = Date.now() - startTimeRef.current;\n const dynamicMinTime = elapsedTime < 200 ? Math.min(minDisplayTimeRef.current, 300) : minDisplayTimeRef.current;\n const remainingTime = Math.max(0, dynamicMinTime - elapsedTime);\n\n if (remainingTime > 0) {\n await new Promise((resolve) => setTimeout(resolve, remainingTime));\n }\n\n // 清理防抖定时器\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n progressUpdateTimerRef.current = null;\n }\n\n // 确保进度条显示 100%\n setProgress(100);\n setCurrentStep('初始化完成');\n\n // 初始化完成,调用回调\n onCompleteRef.current(context);\n } catch (error) {\n logger.error('启动页初始化失败:', error);\n // 设置错误状态,让 ErrorBoundary 能够捕获\n initializationErrorState.setError(error);\n setCurrentStep('初始化失败,请刷新页面重试');\n // 即使失败也调用 onComplete,让应用能够处理错误\n onCompleteRef.current({\n config: {},\n progress: 0,\n isReady: false,\n duration: 0,\n });\n } finally {\n setIsInitializing(false);\n }\n };\n\n performInitialization();\n\n // 清理函数\n return () => {\n if (progressUpdateTimerRef.current) {\n clearTimeout(progressUpdateTimerRef.current);\n }\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, [debouncedProgressUpdate]);\n\n useEffect(() => {\n if (typeof window === 'undefined') {\n return;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const onSystemThemeChange = (event: MediaQueryListEvent) => {\n setIsSystemDark(event.matches);\n };\n\n setIsSystemDark(mediaQuery.matches);\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 }, []);\n\n const resolvedMode = React.useMemo<'light' | 'dark'>(() => {\n const mode = optionsRef.current.theme?.mode || 'light';\n if (mode === 'system') {\n return isSystemDark ? 'dark' : 'light';\n }\n return mode === 'dark' ? 'dark' : 'light';\n }, [isSystemDark]);\n\n const palette = React.useMemo(() => {\n if (resolvedMode === 'dark') {\n return {\n background: '#0b1220',\n text: '#e2e8f0',\n subText: '#94a3b8',\n track: '#1f2937',\n spinnerTrack: '#334155',\n };\n }\n\n return {\n background: '#f5f7fb',\n text: '#51606f',\n subText: '#94a3b8',\n track: '#e9eff5',\n spinnerTrack: '#d9e2ec',\n };\n }, [resolvedMode]);\n\n // 如果提供了自定义启动屏组件,使用自定义组件\n const CustomSplashScreen = optionsRef.current.splashScreen;\n if (CustomSplashScreen) {\n const customProps: SplashScreenCustomProps = {\n progress,\n currentStep,\n isInitializing,\n };\n return <CustomSplashScreen {...customProps} />;\n }\n\n // 默认启动屏 UI\n return (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"应用正在加载\"\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n height: '100vh',\n width: '100%',\n gap: 24,\n background: palette.background,\n color: palette.text,\n }}\n >\n <div\n aria-label=\"加载中\"\n style={{\n width: 42,\n height: 42,\n border: `4px solid ${palette.spinnerTrack}`,\n borderTopColor: 'var(--app-primary-color, #2f80ed)',\n borderRadius: '50%',\n animation: 'secra-spin 1s linear infinite',\n }}\n />\n <div style={{ width: '300px' }}>\n <div\n aria-label={`加载进度 ${progress}%`}\n style={{\n height: 12,\n background: palette.track,\n borderRadius: 999,\n overflow: 'hidden',\n }}\n >\n <div\n style={{\n width: `${Math.max(0, Math.min(100, progress))}%`,\n height: '100%',\n background: 'var(--app-primary-color, #2f80ed)',\n transition: 'width 0.2s ease',\n }}\n />\n </div>\n <div style={{ marginTop: 8, textAlign: 'right', fontSize: 12, color: palette.text }}>\n {progress}%\n </div>\n </div>\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n fontSize: 14,\n color: palette.text,\n textAlign: 'center',\n }}\n >\n {currentStep}\n {estimatedTime !== null && estimatedTime > 0 && (\n <div style={{ fontSize: 12, color: palette.subText, marginTop: 8 }}>\n 预计还需 {Math.ceil(estimatedTime / 1000)} 秒\n </div>\n )}\n </div>\n <style>\n {`@keyframes secra-spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }`}\n </style>\n </div>\n );\n});\n\nSplashScreen.displayName = 'SplashScreen';\n\nexport { SplashScreen };\n"],"names":["React","useEffect","useState","useRef","memo","useCallback","logger","initialization","initializationErrorState","SplashScreen","options","onComplete","progress","setProgress","currentStep","setCurrentStep","isInitializing","setIsInitializing","estimatedTime","setEstimatedTime","isSystemDark","setIsSystemDark","window","matchMedia","matches","hasCompletedRef","onCompleteRef","optionsRef","startTimeRef","Date","now","minDisplayTimeRef","minSplashScreenTime","progressUpdateTimerRef","rafRef","lastProgressRef","progressHistoryRef","current","debouncedProgressUpdate","progressValue","step","cancelAnimationFrame","push","time","length","shift","history","first","last","progressDelta","timeDelta","progressPerMs","remainingProgress","estimatedMs","Math","max","round","requestAnimationFrame","performInitialization","info","context","elapsedTime","dynamicMinTime","min","remainingTime","Promise","resolve","setTimeout","clearTimeout","error","setError","config","isReady","duration","mediaQuery","onSystemThemeChange","event","addEventListener","removeEventListener","addListener","removeListener","resolvedMode","useMemo","mode","theme","palette","background","text","subText","track","spinnerTrack","CustomSplashScreen","splashScreen","customProps","div","role","aria-live","aria-label","style","display","flexDirection","alignItems","justifyContent","height","width","gap","color","border","borderTopColor","borderRadius","animation","overflow","transition","marginTop","textAlign","fontSize","ceil","displayName"],"mappings":";AAAA,OAAOA,SAASC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,IAAI,EAAEC,WAAW,QAAQ,QAAQ;AAC9E,SAASC,MAAM,QAAQ,cAAc;AACrC,SAASC,cAAc,EAAEC,wBAAwB,QAAQ,oBAAoB;AAS7E;;;;CAIC,GACD,MAAMC,6BAA4CL,KAAK,CAAC,EAAEM,OAAO,EAAEC,UAAU,EAAE;IAC7E,MAAM,CAACC,UAAUC,YAAY,GAAGX,SAAS;IACzC,MAAM,CAACY,aAAaC,eAAe,GAAGb,SAAiB;IACvD,MAAM,CAACc,gBAAgBC,kBAAkB,GAAGf,SAAS;IACrD,MAAM,CAACgB,eAAeC,iBAAiB,GAAGjB,SAAwB;IAClE,MAAM,CAACkB,cAAcC,gBAAgB,GAAGnB,SAAkB;QACxD,IAAI,OAAOoB,WAAW,aAAa;YACjC,OAAO;QACT;QACA,OAAOA,OAAOC,UAAU,CAAC,gCAAgCC,OAAO;IAClE;IACA,MAAMC,kBAAkBtB,OAAO;IAC/B,MAAMuB,gBAAgBvB,OAAOQ;IAC7B,MAAMgB,aAAaxB,OAAOO;IAC1B,MAAMkB,eAAezB,OAAe0B,KAAKC,GAAG;IAC5C,MAAMC,oBAAoB5B,OAAeO,QAAQsB,mBAAmB,IAAI,MAAM,kBAAkB;IAChG,MAAMC,yBAAyB9B,OAA6C;IAC5E,MAAM+B,SAAS/B,OAAsB;IACrC,MAAMgC,kBAAkBhC,OAAO;IAC/B,MAAMiC,qBAAqBjC,OAAkD,EAAE;IAE/E,SAAS;IACTF,UAAU;QACRyB,cAAcW,OAAO,GAAG1B;QACxBgB,WAAWU,OAAO,GAAG3B;QACrBqB,kBAAkBM,OAAO,GAAG3B,QAAQsB,mBAAmB,IAAI;IAC7D,GAAG;QAACrB;QAAYD;KAAQ;IAExB,2CAA2C;IAC3C,MAAM4B,0BAA0BjC,YAAY,CAACkC,eAAuBC;QAClE,UAAU;QACV,IAAIN,OAAOG,OAAO,KAAK,MAAM;YAC3BI,qBAAqBP,OAAOG,OAAO;QACrC;QAEA,eAAe;QACf,MAAMP,MAAMD,KAAKC,GAAG;QACpBM,mBAAmBC,OAAO,CAACK,IAAI,CAAC;YAAE9B,UAAU2B;YAAeI,MAAMb;QAAI;QACrE,aAAa;QACb,IAAIM,mBAAmBC,OAAO,CAACO,MAAM,GAAG,IAAI;YAC1CR,mBAAmBC,OAAO,CAACQ,KAAK;QAClC;QAEA,SAAS;QACT,IAAIT,mBAAmBC,OAAO,CAACO,MAAM,IAAI,KAAKL,gBAAgB,GAAG;YAC/D,MAAMO,UAAUV,mBAAmBC,OAAO;YAC1C,MAAMU,QAAQD,OAAO,CAAC,EAAE;YACxB,MAAME,OAAOF,OAAO,CAACA,QAAQF,MAAM,GAAG,EAAE;YACxC,MAAMK,gBAAgBD,KAAKpC,QAAQ,GAAGmC,MAAMnC,QAAQ;YACpD,MAAMsC,YAAYF,KAAKL,IAAI,GAAGI,MAAMJ,IAAI;YAExC,IAAIM,gBAAgB,KAAKC,YAAY,GAAG;gBACtC,MAAMC,gBAAgBF,gBAAgBC;gBACtC,MAAME,oBAAoB,MAAMb;gBAChC,MAAMc,cAAcD,oBAAoBD;gBACxChC,iBAAiBmC,KAAKC,GAAG,CAAC,GAAGD,KAAKE,KAAK,CAACH;YAC1C;QACF;QAEA,gCAAgC;QAChCnB,OAAOG,OAAO,GAAGoB,sBAAsB;YACrC5C,YAAY0B;YACZ,IAAIC,MAAM;gBACRzB,eAAeyB;YACjB;YACAL,gBAAgBE,OAAO,GAAGE;YAC1BL,OAAOG,OAAO,GAAG;QACnB;IACF,GAAG,EAAE;IAELpC,UAAU;QACR,IAAIwB,gBAAgBY,OAAO,EAAE;QAC7BZ,gBAAgBY,OAAO,GAAG;QAC1BT,aAAaS,OAAO,GAAGR,KAAKC,GAAG;QAE/B,MAAM4B,wBAAwB;YAC5B,IAAI;gBACFzC,kBAAkB;gBAClBJ,YAAY;gBACZE,eAAe;gBAEfT,OAAOqD,IAAI,CAAC;gBAEZ,kBAAkB;gBAClB,MAAMC,UAAU,MAAMrD,eAAeoB,WAAWU,OAAO,EAAE,CAACE,eAAeC;oBACvEF,wBAAwBC,eAAeC;gBACzC;gBAEAlC,OAAOqD,IAAI,CAAC,YAAYC;gBAExB,+BAA+B;gBAC/B,MAAMC,cAAchC,KAAKC,GAAG,KAAKF,aAAaS,OAAO;gBACrD,MAAMyB,iBAAiBD,cAAc,MAAMP,KAAKS,GAAG,CAAChC,kBAAkBM,OAAO,EAAE,OAAON,kBAAkBM,OAAO;gBAC/G,MAAM2B,gBAAgBV,KAAKC,GAAG,CAAC,GAAGO,iBAAiBD;gBAEnD,IAAIG,gBAAgB,GAAG;oBACrB,MAAM,IAAIC,QAAQ,CAACC,UAAYC,WAAWD,SAASF;gBACrD;gBAEA,UAAU;gBACV,IAAI/B,uBAAuBI,OAAO,EAAE;oBAClC+B,aAAanC,uBAAuBI,OAAO;oBAC3CJ,uBAAuBI,OAAO,GAAG;gBACnC;gBAEA,eAAe;gBACfxB,YAAY;gBACZE,eAAe;gBAEf,aAAa;gBACbW,cAAcW,OAAO,CAACuB;YACxB,EAAE,OAAOS,OAAO;gBACd/D,OAAO+D,KAAK,CAAC,aAAaA;gBAC1B,8BAA8B;gBAC9B7D,yBAAyB8D,QAAQ,CAACD;gBAClCtD,eAAe;gBACf,+BAA+B;gBAC/BW,cAAcW,OAAO,CAAC;oBACpBkC,QAAQ,CAAC;oBACT3D,UAAU;oBACV4D,SAAS;oBACTC,UAAU;gBACZ;YACF,SAAU;gBACRxD,kBAAkB;YACpB;QACF;QAEAyC;QAEA,OAAO;QACP,OAAO;YACL,IAAIzB,uBAAuBI,OAAO,EAAE;gBAClC+B,aAAanC,uBAAuBI,OAAO;YAC7C;YACA,IAAIH,OAAOG,OAAO,KAAK,MAAM;gBAC3BI,qBAAqBP,OAAOG,OAAO;YACrC;QACF;IACF,GAAG;QAACC;KAAwB;IAE5BrC,UAAU;QACR,IAAI,OAAOqB,WAAW,aAAa;YACjC;QACF;QAEA,MAAMoD,aAAapD,OAAOC,UAAU,CAAC;QACrC,MAAMoD,sBAAsB,CAACC;YAC3BvD,gBAAgBuD,MAAMpD,OAAO;QAC/B;QAEAH,gBAAgBqD,WAAWlD,OAAO;QAElC,IAAI,OAAOkD,WAAWG,gBAAgB,KAAK,YAAY;YACrDH,WAAWG,gBAAgB,CAAC,UAAUF;YACtC,OAAO,IAAMD,WAAWI,mBAAmB,CAAC,UAAUH;QACxD;QAEAD,WAAWK,WAAW,CAACJ;QACvB,OAAO,IAAMD,WAAWM,cAAc,CAACL;IACzC,GAAG,EAAE;IAEL,MAAMM,eAAejF,MAAMkF,OAAO,CAAmB;QACnD,MAAMC,OAAOxD,WAAWU,OAAO,CAAC+C,KAAK,EAAED,QAAQ;QAC/C,IAAIA,SAAS,UAAU;YACrB,OAAO/D,eAAe,SAAS;QACjC;QACA,OAAO+D,SAAS,SAAS,SAAS;IACpC,GAAG;QAAC/D;KAAa;IAEjB,MAAMiE,UAAUrF,MAAMkF,OAAO,CAAC;QAC5B,IAAID,iBAAiB,QAAQ;YAC3B,OAAO;gBACLK,YAAY;gBACZC,MAAM;gBACNC,SAAS;gBACTC,OAAO;gBACPC,cAAc;YAChB;QACF;QAEA,OAAO;YACLJ,YAAY;YACZC,MAAM;YACNC,SAAS;YACTC,OAAO;YACPC,cAAc;QAChB;IACF,GAAG;QAACT;KAAa;IAEjB,wBAAwB;IACxB,MAAMU,qBAAqBhE,WAAWU,OAAO,CAACuD,YAAY;IAC1D,IAAID,oBAAoB;QACtB,MAAME,cAAuC;YAC3CjF;YACAE;YACAE;QACF;QACA,qBAAO,KAAC2E;YAAoB,GAAGE,WAAW;;IAC5C;IAEA,WAAW;IACX,qBACE,MAACC;QACCC,MAAK;QACLC,aAAU;QACVC,cAAW;QACXC,OAAO;YACLC,SAAS;YACTC,eAAe;YACfC,YAAY;YACZC,gBAAgB;YAChBC,QAAQ;YACRC,OAAO;YACPC,KAAK;YACLnB,YAAYD,QAAQC,UAAU;YAC9BoB,OAAOrB,QAAQE,IAAI;QACrB;;0BAEA,KAACO;gBACCG,cAAW;gBACXC,OAAO;oBACLM,OAAO;oBACPD,QAAQ;oBACRI,QAAQ,CAAC,UAAU,EAAEtB,QAAQK,YAAY,EAAE;oBAC3CkB,gBAAgB;oBAChBC,cAAc;oBACdC,WAAW;gBACb;;0BAEF,MAAChB;gBAAII,OAAO;oBAAEM,OAAO;gBAAQ;;kCAC3B,KAACV;wBACCG,cAAY,CAAC,KAAK,EAAErF,SAAS,CAAC,CAAC;wBAC/BsF,OAAO;4BACLK,QAAQ;4BACRjB,YAAYD,QAAQI,KAAK;4BACzBoB,cAAc;4BACdE,UAAU;wBACZ;kCAEA,cAAA,KAACjB;4BACCI,OAAO;gCACLM,OAAO,GAAGlD,KAAKC,GAAG,CAAC,GAAGD,KAAKS,GAAG,CAAC,KAAKnD,WAAW,CAAC,CAAC;gCACjD2F,QAAQ;gCACRjB,YAAY;gCACZ0B,YAAY;4BACd;;;kCAGJ,MAAClB;wBAAII,OAAO;4BAAEe,WAAW;4BAAGC,WAAW;4BAASC,UAAU;4BAAIT,OAAOrB,QAAQE,IAAI;wBAAC;;4BAC/E3E;4BAAS;;;;;0BAGd,MAACkF;gBACCC,MAAK;gBACLC,aAAU;gBACVE,OAAO;oBACLiB,UAAU;oBACVT,OAAOrB,QAAQE,IAAI;oBACnB2B,WAAW;gBACb;;oBAECpG;oBACAI,kBAAkB,QAAQA,gBAAgB,mBACzC,MAAC4E;wBAAII,OAAO;4BAAEiB,UAAU;4BAAIT,OAAOrB,QAAQG,OAAO;4BAAEyB,WAAW;wBAAE;;4BAAG;4BAC5D3D,KAAK8D,IAAI,CAAClG,gBAAgB;4BAAM;;;;;0BAI5C,KAACgF;0BACE,CAAC,6FAA6F,CAAC;;;;AAIxG;AAEAzF,aAAa4G,WAAW,GAAG;AAE3B,SAAS5G,YAAY,GAAG"}
@@ -3,4 +3,3 @@
3
3
  */
4
4
  export { SplashScreen } from './SplashScreen';
5
5
  export { shouldShowSplashScreen } from './splashScreenUtils';
6
- //# sourceMappingURL=index.d.ts.map
@@ -5,4 +5,3 @@
5
5
  * @returns boolean
6
6
  */
7
7
  export declare function shouldShowSplashScreen(showSplashScreen?: 'auto' | 'always' | 'never' | 'first-time-only'): boolean;
8
- //# sourceMappingURL=splashScreenUtils.d.ts.map
@@ -136,4 +136,3 @@ export declare class AppInstanceManager {
136
136
  * 获取应用实例管理器
137
137
  */
138
138
  export declare function getAppInstanceManager(): AppInstanceManager;
139
- //# sourceMappingURL=AppInstance.d.ts.map
@@ -85,4 +85,3 @@ export declare class EnvironmentDetector {
85
85
  * 获取环境检测器实例
86
86
  */
87
87
  export declare function getEnvironmentDetector(): EnvironmentDetector;
88
- //# sourceMappingURL=environment.d.ts.map
@@ -5,4 +5,3 @@ export * from './initializeServices';
5
5
  export * from './renderApp';
6
6
  export * from './performanceTracker';
7
7
  export * from './environment';
8
- //# sourceMappingURL=index.d.ts.map
@@ -66,4 +66,3 @@ export interface ServicesInitResult {
66
66
  * @returns 服务初始化结果
67
67
  */
68
68
  export declare function initializeServices(options?: StartOptions): Promise<ServicesInitResult>;
69
- //# sourceMappingURL=initializeServices.d.ts.map
@@ -102,4 +102,3 @@ export declare class PerformanceTracker {
102
102
  */
103
103
  getTotalDuration(): number;
104
104
  }
105
- //# sourceMappingURL=performanceTracker.d.ts.map
@@ -133,11 +133,12 @@ securityConfig: _securityConfig })=>{
133
133
  /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.AppContextProvider, {
134
134
  initialTheme: options.theme,
135
135
  initialLocale: initialLocale,
136
- initialAntdConfig: options.antd,
136
+ initialAntdConfig: options.uiProvider || options.antd,
137
137
  initialInitializationContext: context,
138
138
  stateManager: services.stateManager,
139
- antdApp: options.antdApp,
139
+ antdApp: options.uiApp || options.antdApp,
140
140
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.BasicLayout, {
141
+ globalProvider: options.globalProvider,
141
142
  children: appContent
142
143
  })
143
144
  })
@@ -148,7 +149,7 @@ OptimizedAppContent.displayName = 'OptimizedAppContent';
148
149
  let AppRenderer = class AppRenderer {
149
150
  /**
150
151
  * 初始化渲染器
151
- *
152
+ *
152
153
  * @param container - React应用的挂载容器
153
154
  * @param rootOptions - React根节点配置选项
154
155
  */ initialize(container, rootOptions) {
@@ -159,12 +160,12 @@ let AppRenderer = class AppRenderer {
159
160
  }
160
161
  /**
161
162
  * 渲染应用
162
- *
163
+ *
163
164
  * 优化:
164
165
  * 1. 默认启用安全防护(XSS防护)
165
166
  * 2. 优化组件渲染性能,使用 useMemo 缓存计算结果
166
167
  * 3. 将安全配置计算提取到初始化阶段
167
- *
168
+ *
168
169
  * @param options - 启动配置选项
169
170
  * @param services - 服务实例
170
171
  * @param context - 初始化上下文(可选)
@@ -226,9 +227,9 @@ let AppRenderer = class AppRenderer {
226
227
  }
227
228
  /**
228
229
  * 渲染启动页
229
- *
230
+ *
230
231
  * 注意:启动页不使用 RouterWrapper,因为启动页应该在路由系统之前渲染
231
- *
232
+ *
232
233
  * @param options - 启动配置选项
233
234
  * @param services - 服务实例
234
235
  * @param onComplete - 启动页完成回调
@@ -249,10 +250,11 @@ let AppRenderer = class AppRenderer {
249
250
  /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.AppContextProvider, {
250
251
  initialTheme: options.theme,
251
252
  initialLocale: initialLocale,
252
- initialAntdConfig: options.antd,
253
+ initialAntdConfig: options.uiProvider || options.antd,
253
254
  stateManager: services.stateManager,
254
- antdApp: options.antdApp,
255
+ antdApp: options.uiApp || options.antdApp,
255
256
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_app.BasicLayout, {
257
+ globalProvider: options.globalProvider,
256
258
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_splash.SplashScreen, {
257
259
  options: options,
258
260
  onComplete: onComplete
@@ -265,7 +267,7 @@ let AppRenderer = class AppRenderer {
265
267
  }
266
268
  /**
267
269
  * 渲染错误页面
268
- *
270
+ *
269
271
  * @param options - 启动配置选项
270
272
  * @param services - 服务实例
271
273
  * @param error - 错误信息