@qlover/create-app 0.7.15 → 0.9.0

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 (363) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/configs/_common/.github/workflows/general-check.yml +1 -1
  3. package/dist/configs/_common/.github/workflows/release.yml +2 -2
  4. package/dist/configs/_common/.gitignore.template +6 -0
  5. package/dist/configs/_common/.prettierignore +17 -5
  6. package/dist/configs/_common/.vscode/settings.json +6 -1
  7. package/dist/index.cjs +1 -1
  8. package/dist/index.js +1 -1
  9. package/dist/templates/next-app/.env.template +1 -1
  10. package/dist/templates/next-app/README.en.md +0 -1
  11. package/dist/templates/next-app/README.md +0 -1
  12. package/dist/templates/next-app/config/Identifier/api.ts +5 -5
  13. package/dist/templates/next-app/config/Identifier/common/admint.table.ts +69 -0
  14. package/dist/templates/next-app/config/Identifier/common/common.ts +76 -0
  15. package/dist/templates/next-app/config/Identifier/common/index.ts +3 -0
  16. package/dist/templates/next-app/config/Identifier/{validator.ts → common/validators.ts} +5 -5
  17. package/dist/templates/next-app/config/Identifier/index.ts +2 -12
  18. package/dist/templates/next-app/config/Identifier/pages/index.ts +6 -0
  19. package/dist/templates/next-app/config/Identifier/pages/page.admin.home.ts +27 -0
  20. package/dist/templates/next-app/config/Identifier/pages/page.admin.locales.ts +266 -0
  21. package/dist/templates/next-app/config/Identifier/pages/page.admin.user.ts +293 -0
  22. package/dist/templates/{react-app/config/Identifier → next-app/config/Identifier/pages}/page.home.ts +15 -22
  23. package/dist/templates/next-app/config/Identifier/{page.login.ts → pages/page.login.ts} +28 -34
  24. package/dist/templates/next-app/config/Identifier/{page.register.ts → pages/page.register.ts} +30 -29
  25. package/dist/templates/next-app/config/adminNavs.ts +19 -0
  26. package/dist/templates/next-app/config/common.ts +22 -13
  27. package/dist/templates/next-app/config/i18n/HomeI18n.ts +5 -5
  28. package/dist/templates/next-app/config/i18n/admin18n.ts +61 -19
  29. package/dist/templates/next-app/config/i18n/i18nConfig.ts +2 -0
  30. package/dist/templates/next-app/config/i18n/i18nKeyScheam.ts +36 -0
  31. package/dist/templates/next-app/config/i18n/loginI18n.ts +22 -22
  32. package/dist/templates/next-app/config/i18n/register18n.ts +23 -24
  33. package/dist/templates/next-app/docs/en/index.md +0 -1
  34. package/dist/templates/next-app/docs/en/project-structure.md +0 -1
  35. package/dist/templates/next-app/docs/zh/index.md +0 -1
  36. package/dist/templates/next-app/docs/zh/project-structure.md +0 -1
  37. package/dist/templates/next-app/make/generateLocales.ts +19 -12
  38. package/dist/templates/next-app/migrations/schema/LocalesSchema.ts +15 -0
  39. package/dist/templates/next-app/migrations/sql/1694244000000.sql +11 -0
  40. package/dist/templates/next-app/package.json +7 -3
  41. package/dist/templates/next-app/public/locales/en.json +172 -207
  42. package/dist/templates/next-app/public/locales/zh.json +172 -207
  43. package/dist/templates/next-app/src/app/[locale]/admin/locales/page.tsx +153 -0
  44. package/dist/templates/next-app/src/app/[locale]/admin/users/page.tsx +48 -50
  45. package/dist/templates/next-app/src/app/[locale]/login/LoginForm.tsx +2 -2
  46. package/dist/templates/next-app/src/app/api/admin/locales/create/route.ts +34 -0
  47. package/dist/templates/next-app/src/app/api/admin/locales/import/route.ts +40 -0
  48. package/dist/templates/next-app/src/app/api/admin/locales/route.ts +42 -0
  49. package/dist/templates/next-app/src/app/api/admin/locales/update/route.ts +32 -0
  50. package/dist/templates/next-app/src/app/api/locales/json/route.ts +44 -0
  51. package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +1 -13
  52. package/dist/templates/next-app/src/base/cases/Datetime.ts +18 -0
  53. package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +12 -6
  54. package/dist/templates/next-app/src/base/cases/ResourceState.ts +17 -0
  55. package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +25 -0
  56. package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +200 -0
  57. package/dist/templates/next-app/src/base/port/ZodBuilderInterface.ts +8 -0
  58. package/dist/templates/next-app/src/base/services/AdminLocalesService.ts +20 -0
  59. package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +26 -0
  60. package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +42 -0
  61. package/dist/templates/next-app/src/base/services/ResourceService.ts +122 -0
  62. package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +104 -0
  63. package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +38 -5
  64. package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +1 -1
  65. package/dist/templates/next-app/src/i18n/request.ts +30 -1
  66. package/dist/templates/next-app/src/server/PageParams.ts +2 -10
  67. package/dist/templates/next-app/src/server/port/DBBridgeInterface.ts +5 -0
  68. package/dist/templates/next-app/src/server/port/DBTableInterface.ts +2 -0
  69. package/dist/templates/next-app/src/server/port/LocalesRepositoryInterface.ts +43 -0
  70. package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +197 -0
  71. package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +122 -0
  72. package/dist/templates/next-app/src/server/sqlBridges/SupabaseBridge.ts +60 -11
  73. package/dist/templates/next-app/src/server/validators/ExtendedExecutorError.ts +6 -0
  74. package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +131 -0
  75. package/dist/templates/next-app/src/server/validators/LoginValidator.ts +2 -5
  76. package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +32 -16
  77. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/_default.css +2 -1
  78. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/dark.css +28 -29
  79. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/pink.css +2 -1
  80. package/dist/templates/next-app/src/uikit/components/AdminLayout.tsx +17 -3
  81. package/dist/templates/next-app/src/uikit/components/BaseHeader.tsx +5 -4
  82. package/dist/templates/next-app/src/uikit/components/BaseLayout.tsx +5 -4
  83. package/dist/templates/next-app/src/uikit/components/BootstrapsProvider.tsx +3 -2
  84. package/dist/templates/next-app/src/uikit/components/ComboProvider.tsx +1 -1
  85. package/dist/templates/next-app/src/uikit/components/EditableCell.tsx +118 -0
  86. package/dist/templates/next-app/src/uikit/components/LogoutButton.tsx +5 -6
  87. package/dist/templates/next-app/src/uikit/components/ThemeSwitcher.tsx +1 -1
  88. package/dist/templates/next-app/src/uikit/components/With.tsx +2 -2
  89. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportButton.tsx +62 -0
  90. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +28 -0
  91. package/dist/templates/next-app/src/uikit/components/localesImportButton/import.module.css +6 -0
  92. package/dist/templates/next-app/src/uikit/hook/useI18nInterface.ts +8 -14
  93. package/dist/templates/next-app/src/uikit/hook/useWarnTranslations.ts +25 -0
  94. package/dist/templates/react-app/.prettierignore +17 -0
  95. package/dist/templates/react-app/README.en.md +71 -54
  96. package/dist/templates/react-app/README.md +35 -18
  97. package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +14 -0
  98. package/dist/templates/react-app/__tests__/__mocks__/MockAppConfit.ts +1 -1
  99. package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +2 -2
  100. package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +1 -1
  101. package/dist/templates/react-app/__tests__/__mocks__/components/TestApp.tsx +45 -0
  102. package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +34 -0
  103. package/dist/templates/react-app/__tests__/__mocks__/components/TestRouter.tsx +46 -0
  104. package/dist/templates/react-app/__tests__/__mocks__/components/index.ts +12 -0
  105. package/dist/templates/react-app/__tests__/__mocks__/createMockGlobals.ts +1 -2
  106. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +51 -0
  107. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +69 -0
  108. package/dist/templates/react-app/__tests__/setup/index.ts +1 -51
  109. package/dist/templates/react-app/__tests__/setup/setupGlobal.ts +51 -0
  110. package/dist/templates/react-app/__tests__/src/App.structure.test.tsx +115 -0
  111. package/dist/templates/react-app/__tests__/src/base/cases/AppConfig.test.ts +2 -2
  112. package/dist/templates/react-app/__tests__/src/base/cases/AppError.test.ts +1 -1
  113. package/dist/templates/react-app/__tests__/src/base/cases/DialogHandler.test.ts +3 -5
  114. package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +13 -2
  115. package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +1 -1
  116. package/dist/templates/react-app/__tests__/src/base/cases/PublicAssetsPath.test.ts +1 -1
  117. package/dist/templates/react-app/__tests__/src/base/cases/RequestLogger.test.ts +5 -5
  118. package/dist/templates/react-app/__tests__/src/base/cases/RequestStatusCatcher.test.ts +1 -2
  119. package/dist/templates/react-app/__tests__/src/base/cases/RouterLoader.test.ts +25 -15
  120. package/dist/templates/react-app/__tests__/src/base/services/I18nService.test.ts +29 -15
  121. package/dist/templates/react-app/__tests__/src/core/IOC.test.ts +19 -9
  122. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +153 -0
  123. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapsApp.test.ts +9 -7
  124. package/dist/templates/react-app/__tests__/src/main.integration.test.tsx +4 -5
  125. package/dist/templates/react-app/__tests__/src/main.test.tsx +4 -4
  126. package/dist/templates/react-app/__tests__/src/uikit/components/BaseHeader.test.tsx +68 -59
  127. package/dist/templates/react-app/__tests__/src/uikit/components/chatMessage/ChatRoot.test.tsx +274 -0
  128. package/dist/templates/react-app/config/IOCIdentifier.ts +11 -8
  129. package/dist/templates/react-app/config/Identifier/{common.error.ts → common/common.error.ts} +5 -5
  130. package/dist/templates/react-app/config/Identifier/{common.ts → common/common.ts} +9 -9
  131. package/dist/templates/react-app/config/Identifier/common/index.ts +2 -0
  132. package/dist/templates/react-app/config/Identifier/components/component.chatMessage.ts +56 -0
  133. package/dist/templates/react-app/config/Identifier/components/component.messageBaseList.ts +103 -0
  134. package/dist/templates/react-app/config/Identifier/index.ts +1 -9
  135. package/dist/templates/react-app/config/Identifier/pages/index.ts +9 -0
  136. package/dist/templates/react-app/config/Identifier/{page.about.ts → pages/page.about.ts} +34 -26
  137. package/dist/templates/react-app/config/Identifier/{page.executor.ts → pages/page.executor.ts} +47 -39
  138. package/dist/templates/{next-app/config/Identifier → react-app/config/Identifier/pages}/page.home.ts +24 -23
  139. package/dist/templates/react-app/config/Identifier/pages/page.identifiter.ts +102 -0
  140. package/dist/templates/react-app/config/Identifier/{page.jsonStorage.ts → pages/page.jsonStorage.ts} +18 -11
  141. package/dist/templates/react-app/config/Identifier/{page.login.ts → pages/page.login.ts} +37 -27
  142. package/dist/templates/react-app/config/Identifier/pages/page.message.ts +20 -0
  143. package/dist/templates/react-app/config/Identifier/{page.register.ts → pages/page.register.ts} +37 -25
  144. package/dist/templates/react-app/config/Identifier/{page.request.ts → pages/page.request.ts} +34 -44
  145. package/dist/templates/react-app/config/app.router.ts +81 -61
  146. package/dist/templates/react-app/config/i18n/PageI18nInterface.ts +51 -0
  147. package/dist/templates/react-app/config/i18n/aboutI18n.ts +42 -0
  148. package/dist/templates/react-app/config/i18n/chatMessageI18n.ts +17 -0
  149. package/dist/templates/react-app/config/i18n/executorI18n.ts +51 -0
  150. package/dist/templates/react-app/config/i18n/homeI18n.ts +24 -0
  151. package/dist/templates/react-app/config/i18n/i18nConfig.ts +30 -0
  152. package/dist/templates/react-app/config/i18n/identifiter18n.ts +30 -0
  153. package/dist/templates/react-app/config/i18n/jsonStorage18n.ts +27 -0
  154. package/dist/templates/react-app/config/i18n/login18n.ts +42 -0
  155. package/dist/templates/react-app/config/i18n/messageBaseListI18n.ts +22 -0
  156. package/dist/templates/react-app/config/i18n/messageI18n.ts +14 -0
  157. package/dist/templates/react-app/config/i18n/notFoundI18n.ts +34 -0
  158. package/dist/templates/react-app/config/i18n/register18n.ts +40 -0
  159. package/dist/templates/react-app/config/i18n/request18n.ts +41 -0
  160. package/dist/templates/react-app/config/theme.ts +14 -4
  161. package/dist/templates/react-app/docs/en/bootstrap.md +1670 -341
  162. package/dist/templates/react-app/docs/en/components/chat-message-component.md +314 -0
  163. package/dist/templates/react-app/docs/en/components/chat-message-refactor.md +270 -0
  164. package/dist/templates/react-app/docs/en/components/message-base-list-component.md +172 -0
  165. package/dist/templates/react-app/docs/en/development-guide.md +1021 -345
  166. package/dist/templates/react-app/docs/en/env.md +1132 -278
  167. package/dist/templates/react-app/docs/en/i18n.md +858 -147
  168. package/dist/templates/react-app/docs/en/index.md +733 -104
  169. package/dist/templates/react-app/docs/en/ioc.md +1228 -287
  170. package/dist/templates/react-app/docs/en/playwright/e2e-tests.md +321 -0
  171. package/dist/templates/react-app/docs/en/playwright/index.md +19 -0
  172. package/dist/templates/react-app/docs/en/playwright/installation-summary.md +332 -0
  173. package/dist/templates/react-app/docs/en/playwright/overview.md +222 -0
  174. package/dist/templates/react-app/docs/en/playwright/quickstart.md +325 -0
  175. package/dist/templates/react-app/docs/en/playwright/reorganization-notes.md +340 -0
  176. package/dist/templates/react-app/docs/en/playwright/setup-complete.md +290 -0
  177. package/dist/templates/react-app/docs/en/playwright/testing-guide.md +565 -0
  178. package/dist/templates/react-app/docs/en/store.md +1194 -184
  179. package/dist/templates/react-app/docs/en/why-no-globals.md +797 -0
  180. package/dist/templates/react-app/docs/zh/bootstrap.md +1670 -341
  181. package/dist/templates/react-app/docs/zh/components/chat-message-component.md +314 -0
  182. package/dist/templates/react-app/docs/zh/components/chat-message-refactor.md +270 -0
  183. package/dist/templates/react-app/docs/zh/components/message-base-list-component.md +172 -0
  184. package/dist/templates/react-app/docs/zh/development-guide.md +1021 -345
  185. package/dist/templates/react-app/docs/zh/env.md +1132 -275
  186. package/dist/templates/react-app/docs/zh/i18n.md +858 -147
  187. package/dist/templates/react-app/docs/zh/index.md +717 -104
  188. package/dist/templates/react-app/docs/zh/ioc.md +1229 -287
  189. package/dist/templates/react-app/docs/zh/playwright/e2e-tests.md +321 -0
  190. package/dist/templates/react-app/docs/zh/playwright/index.md +19 -0
  191. package/dist/templates/react-app/docs/zh/playwright/installation-summary.md +332 -0
  192. package/dist/templates/react-app/docs/zh/playwright/overview.md +222 -0
  193. package/dist/templates/react-app/docs/zh/playwright/quickstart.md +325 -0
  194. package/dist/templates/react-app/docs/zh/playwright/reorganization-notes.md +340 -0
  195. package/dist/templates/react-app/docs/zh/playwright/setup-complete.md +290 -0
  196. package/dist/templates/react-app/docs/zh/playwright/testing-guide.md +565 -0
  197. package/dist/templates/react-app/docs/zh/store.md +1192 -184
  198. package/dist/templates/react-app/docs/zh/why-no-globals.md +797 -0
  199. package/dist/templates/react-app/e2e/App.spec.ts +319 -0
  200. package/dist/templates/react-app/e2e/fixtures/base.fixture.ts +40 -0
  201. package/dist/templates/react-app/e2e/main.spec.ts +20 -0
  202. package/dist/templates/react-app/e2e/utils/test-helpers.ts +19 -0
  203. package/dist/templates/react-app/eslint.config.mjs +247 -0
  204. package/dist/templates/react-app/makes/eslint-utils.mjs +195 -0
  205. package/dist/templates/react-app/makes/generateTs2LocalesOptions.ts +26 -0
  206. package/dist/templates/react-app/package.json +31 -3
  207. package/dist/templates/react-app/playwright.config.ts +79 -0
  208. package/dist/templates/react-app/public/locales/en/common.json +233 -179
  209. package/dist/templates/react-app/public/locales/zh/common.json +233 -179
  210. package/dist/templates/react-app/src/App.tsx +15 -42
  211. package/dist/templates/react-app/src/base/apis/AiApi.ts +5 -5
  212. package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +1 -1
  213. package/dist/templates/react-app/src/base/apis/feApi/FeApiAdapter.ts +1 -1
  214. package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +8 -8
  215. package/dist/templates/react-app/src/base/apis/feApi/FeApiType.ts +1 -1
  216. package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +6 -6
  217. package/dist/templates/react-app/src/base/apis/userApi/UserApiAdapter.ts +1 -1
  218. package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -14
  219. package/dist/templates/react-app/src/base/apis/userApi/UserApiType.ts +1 -1
  220. package/dist/templates/react-app/src/base/cases/DialogHandler.ts +5 -2
  221. package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +3 -3
  222. package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +3 -3
  223. package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +2 -2
  224. package/dist/templates/react-app/src/base/cases/RequestLogger.ts +4 -4
  225. package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +1 -1
  226. package/dist/templates/react-app/src/base/cases/ResourceState.ts +23 -0
  227. package/dist/templates/react-app/src/base/cases/RouterLoader.ts +4 -4
  228. package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +26 -0
  229. package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -3
  230. package/dist/templates/react-app/src/base/port/I18nServiceInterface.ts +1 -1
  231. package/dist/templates/react-app/src/base/port/IOCInterface.ts +36 -0
  232. package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +2 -1
  233. package/dist/templates/react-app/src/base/port/ProcesserExecutorInterface.ts +1 -1
  234. package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +2 -2
  235. package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +9 -5
  236. package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +1 -1
  237. package/dist/templates/react-app/src/base/services/I18nService.ts +29 -29
  238. package/dist/templates/react-app/src/base/services/IdentifierService.ts +143 -0
  239. package/dist/templates/react-app/src/base/services/ProcesserExecutor.ts +3 -3
  240. package/dist/templates/react-app/src/base/services/RouteService.ts +27 -8
  241. package/dist/templates/react-app/src/base/services/UserService.ts +8 -8
  242. package/dist/templates/react-app/src/base/types/Page.ts +14 -2
  243. package/dist/templates/react-app/src/base/types/global.d.ts +1 -1
  244. package/dist/templates/react-app/src/core/IOC.ts +5 -46
  245. package/dist/templates/react-app/src/core/bootstraps/{BootstrapApp.ts → BootstrapClient.ts} +44 -17
  246. package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +14 -7
  247. package/dist/templates/react-app/src/core/bootstraps/IocIdentifierTest.ts +1 -1
  248. package/dist/templates/react-app/src/core/bootstraps/PrintBootstrap.ts +1 -1
  249. package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +40 -0
  250. package/dist/templates/react-app/src/core/{IocRegisterImpl.ts → clientIoc/ClientIOCRegister.ts} +35 -24
  251. package/dist/templates/react-app/src/core/globals.ts +9 -9
  252. package/dist/templates/react-app/src/main.tsx +4 -4
  253. package/dist/templates/react-app/src/pages/404.tsx +6 -3
  254. package/dist/templates/react-app/src/pages/500.tsx +5 -2
  255. package/dist/templates/react-app/src/pages/NoRouteFound.tsx +5 -0
  256. package/dist/templates/react-app/src/pages/auth/Layout.tsx +9 -6
  257. package/dist/templates/react-app/src/pages/auth/LoginPage.tsx +46 -56
  258. package/dist/templates/react-app/src/pages/auth/RegisterPage.tsx +46 -58
  259. package/dist/templates/react-app/src/pages/base/AboutPage.tsx +35 -40
  260. package/dist/templates/react-app/src/pages/base/ExecutorPage.tsx +51 -51
  261. package/dist/templates/react-app/src/pages/base/HomePage.tsx +14 -15
  262. package/dist/templates/react-app/src/pages/base/IdentifierPage.tsx +70 -11
  263. package/dist/templates/react-app/src/pages/base/JSONStoragePage.tsx +24 -25
  264. package/dist/templates/react-app/src/pages/base/Layout.tsx +2 -2
  265. package/dist/templates/react-app/src/pages/base/MessagePage.tsx +40 -0
  266. package/dist/templates/react-app/src/pages/base/RedirectPathname.tsx +3 -2
  267. package/dist/templates/react-app/src/pages/base/RequestPage.tsx +41 -59
  268. package/dist/templates/react-app/src/styles/css/antd-themes/{_default.css → _common/_default.css} +85 -0
  269. package/dist/templates/react-app/src/styles/css/antd-themes/{dark.css → _common/dark.css} +99 -0
  270. package/dist/templates/react-app/src/styles/css/antd-themes/_common/index.css +3 -0
  271. package/dist/templates/react-app/src/styles/css/antd-themes/{pink.css → _common/pink.css} +86 -0
  272. package/dist/templates/react-app/src/styles/css/antd-themes/index.css +4 -3
  273. package/dist/templates/react-app/src/styles/css/antd-themes/menu/_default.css +108 -0
  274. package/dist/templates/react-app/src/styles/css/antd-themes/menu/dark.css +67 -0
  275. package/dist/templates/react-app/src/styles/css/antd-themes/menu/index.css +3 -0
  276. package/dist/templates/react-app/src/styles/css/antd-themes/menu/pink.css +67 -0
  277. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/_default.css +34 -0
  278. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/dark.css +31 -0
  279. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/index.css +3 -0
  280. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/pink.css +36 -0
  281. package/dist/templates/react-app/src/styles/css/antd-themes/table/_default.css +44 -0
  282. package/dist/templates/react-app/src/styles/css/antd-themes/table/dark.css +43 -0
  283. package/dist/templates/react-app/src/styles/css/antd-themes/table/index.css +3 -0
  284. package/dist/templates/react-app/src/styles/css/antd-themes/table/pink.css +43 -0
  285. package/dist/templates/react-app/src/styles/css/page.css +4 -3
  286. package/dist/templates/react-app/src/styles/css/themes/_default.css +1 -0
  287. package/dist/templates/react-app/src/styles/css/themes/dark.css +1 -0
  288. package/dist/templates/react-app/src/styles/css/themes/pink.css +1 -0
  289. package/dist/templates/react-app/src/styles/css/zIndex.css +1 -1
  290. package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +3 -3
  291. package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +2 -2
  292. package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +1 -1
  293. package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +3 -3
  294. package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +35 -0
  295. package/dist/templates/react-app/src/uikit/components/BaseHeader.tsx +15 -11
  296. package/dist/templates/react-app/src/uikit/components/BaseRouteProvider.tsx +14 -11
  297. package/dist/templates/react-app/src/uikit/components/BaseRouteSeo.tsx +18 -0
  298. package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +13 -0
  299. package/dist/templates/react-app/src/uikit/components/ClientSeo.tsx +62 -0
  300. package/dist/templates/react-app/src/uikit/components/ComboProvider.tsx +38 -0
  301. package/dist/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +48 -27
  302. package/dist/templates/react-app/src/uikit/components/Loading.tsx +4 -2
  303. package/dist/templates/react-app/src/uikit/components/LocaleLink.tsx +4 -5
  304. package/dist/templates/react-app/src/uikit/components/LogoutButton.tsx +34 -11
  305. package/dist/templates/react-app/src/uikit/components/MessageBaseList.tsx +240 -0
  306. package/dist/templates/react-app/src/uikit/components/ProcessExecutorProvider.tsx +9 -5
  307. package/dist/templates/react-app/src/uikit/components/RouterRenderComponent.tsx +6 -3
  308. package/dist/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +97 -40
  309. package/dist/templates/react-app/src/uikit/components/UserAuthProvider.tsx +5 -5
  310. package/dist/templates/react-app/src/uikit/components/With.tsx +17 -0
  311. package/dist/templates/react-app/src/uikit/components/chatMessage/ChatMessageBridge.ts +176 -0
  312. package/dist/templates/react-app/src/uikit/components/chatMessage/ChatRoot.tsx +21 -0
  313. package/dist/templates/react-app/src/uikit/components/chatMessage/FocusBar.tsx +106 -0
  314. package/dist/templates/react-app/src/uikit/components/chatMessage/MessageApi.ts +271 -0
  315. package/dist/templates/react-app/src/uikit/components/chatMessage/MessageItem.tsx +102 -0
  316. package/dist/templates/react-app/src/uikit/components/chatMessage/MessagesList.tsx +86 -0
  317. package/dist/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +17 -11
  318. package/dist/templates/react-app/src/uikit/contexts/IOCContext.ts +13 -0
  319. package/dist/templates/react-app/src/uikit/hooks/useAppTranslation.ts +26 -0
  320. package/dist/templates/react-app/src/uikit/hooks/useI18nGuard.ts +8 -11
  321. package/dist/templates/react-app/src/uikit/hooks/useI18nInterface.ts +25 -0
  322. package/dist/templates/react-app/src/uikit/hooks/useIOC.ts +35 -0
  323. package/dist/templates/react-app/src/uikit/hooks/useNavigateBridge.ts +3 -3
  324. package/dist/templates/react-app/src/uikit/hooks/useStrictEffect.ts +0 -1
  325. package/dist/templates/react-app/tsconfig.e2e.json +21 -0
  326. package/dist/templates/react-app/tsconfig.json +8 -1
  327. package/dist/templates/react-app/tsconfig.node.json +1 -1
  328. package/dist/templates/react-app/tsconfig.test.json +3 -1
  329. package/dist/templates/react-app/vite.config.ts +50 -34
  330. package/package.json +2 -1
  331. package/dist/configs/react-app/eslint.config.js +0 -94
  332. package/dist/templates/next-app/config/Identifier/common.error.ts +0 -41
  333. package/dist/templates/next-app/config/Identifier/common.ts +0 -69
  334. package/dist/templates/next-app/config/Identifier/page.about.ts +0 -181
  335. package/dist/templates/next-app/config/Identifier/page.admin.ts +0 -48
  336. package/dist/templates/next-app/config/Identifier/page.executor.ts +0 -272
  337. package/dist/templates/next-app/config/Identifier/page.identifiter.ts +0 -39
  338. package/dist/templates/next-app/config/Identifier/page.jsonStorage.ts +0 -72
  339. package/dist/templates/next-app/config/Identifier/page.request.ts +0 -182
  340. package/dist/templates/next-app/src/base/cases/ChatAction.ts +0 -21
  341. package/dist/templates/next-app/src/base/cases/FocusBarAction.ts +0 -36
  342. package/dist/templates/next-app/src/base/cases/RequestState.ts +0 -20
  343. package/dist/templates/next-app/src/base/port/AdminPageInterface.ts +0 -85
  344. package/dist/templates/next-app/src/base/port/AsyncStateInterface.ts +0 -7
  345. package/dist/templates/next-app/src/base/services/AdminUserService.ts +0 -45
  346. package/dist/templates/next-app/src/uikit/components/ChatRoot.tsx +0 -17
  347. package/dist/templates/next-app/src/uikit/components/chat/ChatActionInterface.ts +0 -30
  348. package/dist/templates/next-app/src/uikit/components/chat/ChatFocusBar.tsx +0 -65
  349. package/dist/templates/next-app/src/uikit/components/chat/ChatMessages.tsx +0 -59
  350. package/dist/templates/next-app/src/uikit/components/chat/ChatWrap.tsx +0 -28
  351. package/dist/templates/next-app/src/uikit/components/chat/FocusBarActionInterface.ts +0 -19
  352. package/dist/templates/next-app/src/uikit/hook/useMountedClient.ts +0 -17
  353. package/dist/templates/next-app/src/uikit/hook/useStore.ts +0 -15
  354. package/dist/templates/react-app/__tests__/__mocks__/I18nService.ts +0 -13
  355. package/dist/templates/react-app/__tests__/src/App.test.tsx +0 -139
  356. package/dist/templates/react-app/config/Identifier/page.identifiter.ts +0 -39
  357. package/dist/templates/react-app/config/i18n.ts +0 -15
  358. package/dist/templates/react-app/docs/en/project-structure.md +0 -434
  359. package/dist/templates/react-app/docs/zh/project-structure.md +0 -434
  360. package/dist/templates/react-app/src/base/cases/RequestState.ts +0 -20
  361. package/dist/templates/react-app/src/base/port/AsyncStateInterface.ts +0 -7
  362. package/dist/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +0 -15
  363. package/dist/templates/react-app/src/uikit/hooks/useStore.ts +0 -15
@@ -1,173 +1,802 @@
1
- # React Application Development Documentation
1
+ # Project Architecture Design
2
2
 
3
- ## Introduction
3
+ > **📖 This document is the entry point of the project, providing an architecture overview, core concepts, and complete documentation navigation.**
4
4
 
5
- This is a modern frontend application template based on React 18, integrating a complete development framework and toolchain. This template provides a comprehensive development solution, including state management, routing management, internationalization, theme system, and other core functionalities.
5
+ ## 📋 Table of Contents
6
6
 
7
- ### Key Features
7
+ - [Quick Start](#-quick-start)
8
+ - [Architecture Overview](#-architecture-overview)
9
+ - [Layered Architecture](#-layered-architecture)
10
+ - [Complete Workflow](#-complete-workflow)
11
+ - [Core Concepts](#-core-concepts)
12
+ - [Quick Example](#-quick-example)
13
+ - [Detailed Documentation Navigation](#-detailed-documentation-navigation)
8
14
 
9
- - 🚀 **Modern Technology Stack**: Based on React 18, TypeScript, Vite
10
- - 🎨 **Theme Customization**: Supports dynamic theme switching, dark mode
11
- - 🌍 **Internationalization**: Built-in multi-language support
12
- - 📦 **State Management**: Reactive state management based on publish-subscribe pattern
13
- - 🔑 **Authentication System**: Complete user authentication solution
14
- - 🛠️ **Development Tools**: ESLint, Prettier, TypeScript
15
- - 📱 **Responsive Design**: Supports multi-platform adaptation
16
- - 🧪 **Testing Support**: Integrated unit testing and component testing
15
+ ---
17
16
 
18
- ## Quick Start
17
+ ## 🚀 Quick Start
18
+
19
+ ### New Developers
20
+
21
+ If this is your first time with this project, we recommend the following order:
22
+
23
+ 1. **Read this document** - Understand overall architecture and core philosophy (10-15 minutes)
24
+ 2. **[IOC Container](./ioc.md)** - Understand UI and logic separation (10-15 minutes)
25
+ 3. **[Store State Management](./store.md)** - Understand how application layer notifies UI layer (10-15 minutes)
26
+ 4. **[Development Guide](./development-guide.md)** - Follow complete example to develop a page (20-30 minutes)
27
+
28
+ ### Experienced Developers
29
+
30
+ If you already have relevant experience, you can directly:
31
+
32
+ 1. Quickly browse this document to understand architecture features
33
+ 2. Check [Development Guide](./development-guide.md) to understand development workflow
34
+ 3. Refer to specialized documentation as needed
35
+
36
+ ### Environment Setup
19
37
 
20
38
  ```bash
21
39
  # Install dependencies
22
- npm install
40
+ pnpm install
23
41
 
24
42
  # Start development server
25
- npm run dev
43
+ pnpm dev
44
+
45
+ # Start staging environment
46
+ pnpm dev:staging
26
47
 
27
48
  # Build production version
28
- npm run build
49
+ pnpm build
50
+
51
+ # Run tests
52
+ pnpm test
29
53
  ```
30
54
 
31
- ## Documentation Navigation
55
+ ---
56
+
57
+ ## 🎯 Architecture Overview
32
58
 
33
- ### Architecture Guide
59
+ This project adopts **Layered Architecture + Dependency Injection + Interface-Oriented Programming** design pattern.
34
60
 
35
- - [Project Structure](./project-structure.md)
36
- - [Development Guidelines](./development-guide.md)
37
- - [Build and Deployment Guide](./deployment.md)
61
+ ### Architecture Panorama
38
62
 
39
- ### Core Features
63
+ ```
64
+ ┌─────────────────────────────────────────────────────┐
65
+ │ Config Layer │
66
+ │ • Unified management of all configurations │
67
+ │ (routes, themes, i18n, IOC, etc.) │
68
+ │ • Environment variable injection target │
69
+ │ (AppConfig.ts) │
70
+ │ 📄 See: env.md │
71
+ └─────────────────────────────────────────────────────┘
72
+
73
+ ┌─────────────────────────────────────────────────────┐
74
+ │ Entry Layer │
75
+ │ • main.tsx: Application startup │
76
+ │ • Inject global dependencies (window, document) │
77
+ │ • Initialize IOC container │
78
+ │ • Execute Bootstrap startup process │
79
+ │ 📄 See: bootstrap.md │
80
+ └─────────────────────────────────────────────────────┘
81
+
82
+ ┌─────────────────────────────────────────────────────┐
83
+ │ Core Layer │
84
+ │ • globals.ts: Encapsulate browser APIs │
85
+ │ • clientIoc/: IOC container management │
86
+ │ • bootstraps/: Bootstrap startup process │
87
+ │ 📄 See: why-no-globals.md │
88
+ └─────────────────────────────────────────────────────┘
89
+
90
+ ┌─────────────────────────────────────────────────────┐
91
+ │ Business Layer │
92
+ │ • port/: Interface definitions │
93
+ │ • services/: Service implementations │
94
+ │ • cases/: Business use cases │
95
+ │ • apis/: External API adapters │
96
+ │ 📄 See: ioc.md │
97
+ └─────────────────────────────────────────────────────┘
98
+
99
+ ┌─────────────────────────────────────────────────────┐
100
+ │ UI Layer │
101
+ │ • pages/: Page components │
102
+ │ • components/: UI components │
103
+ │ • hooks/: React Hooks (useIOC, useStore, etc.) │
104
+ │ • bridges/: Page bridges │
105
+ │ 📄 See: store.md │
106
+ └─────────────────────────────────────────────────────┘
107
+ ```
108
+
109
+ ### Core Principles
40
110
 
41
- - [Router Development Guide](./router.md)
42
- - [State Management Guide](./store.md)
43
- - [Internationalization Guide](./i18n.md)
44
- - [Theme Development Guide](./theme.md)
45
- - [Request System Guide](./request.md)
111
+ 1. **Unidirectional Dependency** ↓ - Can only depend from top to bottom, not reverse
112
+ 2. **Depend on Interfaces, Not Implementations** 🔌 - All dependencies defined through interfaces
113
+ 3. **UI and Logic Separation** 🎨 - UI is UI, logic is logic
114
+ 4. **Single Responsibility** 📦 - Each module does one thing
115
+ 5. **Configuration-Driven** ⚙️ - Business logic driven by configuration
46
116
 
47
- ### Component Development
117
+ ---
48
118
 
49
- - [Component Development Guide](./component-guide.md)
50
- - [TypeScript Development Standards](./typescript-guide.md)
51
- - [Styling Guide](./styling-guide.md)
119
+ ## 🏗️ Layered Architecture
52
120
 
53
- ### Tools and Testing
121
+ ### 1. Config Layer
54
122
 
55
- - [Testing Development Guide](./testing.md)
56
- - [Git Workflow Guide](./git-workflow.md)
57
- - [Performance Optimization Guide](./performance.md)
123
+ **Location:** `config/`, `src/base/cases/AppConfig.ts`
58
124
 
59
- ### Security and Best Practices
125
+ **Responsibilities:**
60
126
 
61
- - [Security Development Guide](./security.md)
62
- - [Documentation Writing Guide](./documentation.md)
127
+ - Unified management of all configurations (routes, themes, i18n, IOC identifiers, etc.)
128
+ - Serve as injection target for environment variables
63
129
 
64
- ## Directory Structure
130
+ **File Structure:**
65
131
 
66
132
  ```
67
- docs/en/
68
- ├── index.md # This document
69
- ├── project-structure.md # Project structure explanation
70
- ├── development-guide.md # Development guidelines
71
- ├── router.md # Router development guide
72
- ├── store.md # State management guide
73
- ├── i18n.md # Internationalization guide
74
- ├── theme.md # Theme development guide
75
- └── ...
133
+ config/
134
+ ├── common.ts # Common configuration
135
+ ├── theme.ts # Theme configuration
136
+ ├── app.router.ts # Route configuration
137
+ ├── IOCIdentifier.ts # IOC identifiers
138
+ ├── i18n/ # Internationalization config
139
+ └── Identifier/ # Business identifiers
76
140
  ```
77
141
 
78
- ## Core Concepts
142
+ **👉 See:** [Environment Variable Management](./env.md)
143
+
144
+ ### 2. Entry Layer
145
+
146
+ **Location:** `src/main.tsx`, `src/core/bootstraps/`
147
+
148
+ **Responsibilities:**
149
+
150
+ - Application startup
151
+ - Inject global dependencies (browser APIs)
152
+ - Create IOC container
153
+ - Execute Bootstrap startup process
154
+
155
+ **Key Characteristics:**
156
+
157
+ - 🔴 **Only place allowed to directly access global variables**
158
+ - 🔴 **Bootstrap executes all initialization before app renders**
159
+
160
+ **👉 See:** [Bootstrap Initializer](./bootstrap.md)
79
161
 
80
- ### 1. Startup Process
162
+ ### 3. Core Layer
81
163
 
82
- The application uses a plugin-based startup process:
164
+ **Location:** `src/core/`
165
+
166
+ **Responsibilities:**
167
+
168
+ - Encapsulate browser APIs (localStorage, cookie, etc.)
169
+ - Manage global instances (logger, dialog, etc.)
170
+ - IOC container initialization and service registration
171
+ - Bootstrap flow control
172
+
173
+ **File Structure:**
83
174
 
84
175
  ```
85
- Bootstrap Initialization → Load Plugins → Initialize Services → Render Application
176
+ core/
177
+ ├── globals.ts # Global variable encapsulation
178
+ ├── IOC.ts # IOC utilities
179
+ ├── bootstraps/ # Startup process
180
+ │ ├── BootstrapClient.ts
181
+ │ └── BootstrapsRegistry.ts
182
+ └── clientIoc/ # IOC container
183
+ ├── ClientIOC.ts
184
+ └── ClientIOCRegister.ts
86
185
  ```
87
186
 
88
- ### 2. State Management
187
+ **👉 See:** [Why Disable Global Variables](./why-no-globals.md)
188
+
189
+ ### 4. Business Layer
190
+
191
+ **Location:** `src/base/`
89
192
 
90
- Reactive state management based on publish-subscribe pattern:
193
+ **Responsibilities:**
194
+
195
+ - Define business interfaces (Port)
196
+ - Implement business services (Services)
197
+ - Handle business logic (Cases)
198
+ - Adapt external APIs (APIs)
199
+
200
+ **File Structure:**
91
201
 
92
202
  ```
93
- Action Trigger → Store Update → Component Re-render
203
+ base/
204
+ ├── port/ # Interface definitions
205
+ │ ├── UserServiceInterface.ts
206
+ │ └── I18nServiceInterface.ts
207
+ ├── services/ # Service implementations
208
+ │ ├── UserService.ts
209
+ │ └── I18nService.ts
210
+ ├── cases/ # Business use cases
211
+ │ ├── AppConfig.ts
212
+ │ └── AppError.ts
213
+ └── apis/ # API adapters
214
+ └── userApi/
215
+ ├── UserApi.ts
216
+ └── UserApiType.ts
94
217
  ```
95
218
 
96
- ### 3. Routing System
219
+ **Key Characteristics:**
220
+
221
+ - 🔵 **Interface-Oriented** - All dependencies injected through interfaces
222
+ - 🔵 **Single Responsibility** - Each service responsible for one domain
223
+ - 🔵 **Testability** - Easy to mock and test
224
+
225
+ **👉 See:** [IOC Container](./ioc.md)
226
+
227
+ ### 5. UI Layer
97
228
 
98
- Configuration-based route management:
229
+ **Location:** `src/pages/`, `src/uikit/`
230
+
231
+ **Responsibilities:**
232
+
233
+ - Render pages and components
234
+ - Handle user interactions
235
+ - Get services through `useIOC`
236
+ - Subscribe to state through `useStore`
237
+
238
+ **File Structure:**
99
239
 
100
240
  ```
101
- Route Configuration Auto-generate Routes → Code Splitting → Lazy Loading
241
+ ├── pages/ # Page components
242
+ │ ├── base/
243
+ │ └── auth/
244
+ └── uikit/ # UI utilities
245
+ ├── components/ # Common components
246
+ ├── hooks/ # React Hooks
247
+ │ ├── useIOC.ts # IOC Hook
248
+ │ └── useStore.ts # Store Hook
249
+ ├── contexts/ # React Context
250
+ └── bridges/ # Page bridges
251
+ ```
252
+
253
+ **Key Characteristics:**
254
+
255
+ - 🟢 **Don't depend on implementations directly** - Get services through IOC
256
+ - 🟢 **UI and logic separated** - Only handle rendering and interaction
257
+ - 🟢 **Reactive updates** - Automatic updates through Store
258
+
259
+ **👉 See:** [Store State Management](./store.md)
260
+
261
+ ---
262
+
263
+ ## 🔄 Complete Workflow
264
+
265
+ ### Data Flow Diagram
266
+
267
+ ```
268
+ ┌─────────────────────────────────────────────┐
269
+ │ 1. User Interaction (UI Layer) │
270
+ │ const userService = useIOC('UserService') │
271
+ │ userService.login(username, password) │
272
+ └──────────────────┬──────────────────────────┘
273
+ ↓ (Call service through IOC)
274
+ ┌─────────────────────────────────────────────┐
275
+ │ 2. Service Layer Processing (Business) │
276
+ │ async login(username, password) { │
277
+ │ const response = await this.api.login() │
278
+ │ this.storage.setItem('token', ...) │
279
+ │ this.emit({ user: ... }) // Notify UI │
280
+ │ } │
281
+ └──────────────┬─────────────┬────────────────┘
282
+ ↓ ↓ (Call API)
283
+ (Use Storage) ┌─────────────────────┐
284
+ ↓ │ 3. API Layer │
285
+ ┌──────────────┐ │ POST /api/login │
286
+ │ Core/Globals │ └─────────────────────┘
287
+ │ localStorage │ ↓
288
+ └──────────────┘ (HTTP request)
289
+ ↓ ↓
290
+ (Data persistence) (Backend server)
291
+ ↓ ↓
292
+ └────←── Return data ←┘
293
+
294
+ (emit publishes new state)
295
+
296
+ ┌─────────────────────────┐
297
+ │ 4. Store notifies │
298
+ │ subscribers │
299
+ │ listeners.forEach(...) │
300
+ └─────────────────────────┘
301
+
302
+ ┌─────────────────────────┐
303
+ │ 5. UI auto-updates │
304
+ │ useStore receives │
305
+ │ notification │
306
+ │ Component re-renders │
307
+ └─────────────────────────┘
308
+ ```
309
+
310
+ ### Application Startup Flow
311
+
312
+ ```
313
+ 1️⃣ main.tsx
314
+
315
+ 2️⃣ BootstrapClient.main()
316
+ ├── Create IOC container
317
+ ├── Register all services
318
+ ├── Execute Bootstrap plugins
319
+ │ ├── InjectEnv (Inject env vars to AppConfig)
320
+ │ ├── I18nService.onBefore() (Initialize i18n)
321
+ │ ├── UserService.onBefore() (Check user login)
322
+ │ └── ProcesserExecutor.startup() (Start processors)
323
+ └── Bootstrap complete
324
+
325
+ 3️⃣ React application renders
326
+ ├── App.tsx
327
+ ├── IOCContext.Provider (Provide IOC container)
328
+ └── AppRouterProvider (Routing)
329
+
330
+ 4️⃣ Page components render
331
+ ├── useIOC() get services
332
+ ├── useStore() subscribe to state
333
+ └── UI renders
334
+ ```
335
+
336
+ ---
337
+
338
+ ## 💡 Core Concepts
339
+
340
+ ### 1. IOC Container (Dependency Injection) ⭐
341
+
342
+ **Core Philosophy:** UI is UI, logic is logic, they must be separated
343
+
344
+ ```typescript
345
+ // ❌ Traditional approach: UI and logic mixed together
346
+ function UserProfile() {
347
+ const [user, setUser] = useState(null);
348
+ useEffect(() => {
349
+ fetch('/api/user').then(res => res.json()).then(setUser);
350
+ }, []);
351
+ return <div>{user?.name}</div>;
352
+ }
353
+
354
+ // ✅ IOC approach: UI and logic completely separated
355
+ function UserProfile() {
356
+ const userService = useIOC('UserServiceInterface'); // Get service
357
+ const { user } = useStore(userService); // Subscribe to state
358
+ return <div>{user?.name}</div>;
359
+ }
360
+ ```
361
+
362
+ **Key Questions:**
363
+
364
+ 1. **Why does an implementation class also need an interface?** → For testability
365
+ 2. **Why separate even simple components?** → Simple now doesn't mean simple later
366
+
367
+ **👉 See:** [IOC Container Detailed Documentation](./ioc.md)
368
+
369
+ ### 2. Store State Management (Application Layer Notifies UI Layer) ⭐
370
+
371
+ **Core Philosophy:** Service publishes state through Store, UI subscribes to state through useStore
372
+
373
+ ```typescript
374
+ // Service (Application Layer)
375
+ @injectable()
376
+ export class UserService extends StoreInterface<UserState> {
377
+ async login(username: string, password: string) {
378
+ this.emit({ loading: true }); // Publish: start loading
379
+ const response = await this.api.login({ username, password });
380
+ this.emit({ user: response.user, loading: false }); // Publish: complete
381
+ }
382
+ }
383
+
384
+ // UI (UI Layer)
385
+ function LoginPage() {
386
+ const userService = useIOC('UserServiceInterface');
387
+ const { loading } = useStore(userService); // Subscribe: auto-update
388
+
389
+ return (
390
+ <button onClick={() => userService.login('user', 'pass')} disabled={loading}>
391
+ {loading ? 'Logging in...' : 'Login'}
392
+ </button>
393
+ );
394
+ }
395
+ ```
396
+
397
+ **👉 See:** [Store State Management Detailed Documentation](./store.md)
398
+
399
+ ### 3. Bootstrap Initializer (Application Initialization) ⭐
400
+
401
+ **Core Philosophy:** Execute all initialization logic before app renders
402
+
403
+ ```typescript
404
+ // Bootstrap plugin
405
+ export class I18nService implements BootstrapPlugin {
406
+ onBefore() {
407
+ // Initialize i18n before app starts
408
+ i18n.init({
409
+ /* ... */
410
+ });
411
+ }
412
+ }
413
+
414
+ // Bootstrap execution
415
+ const bootstrap = new Bootstrap({
416
+ root: window,
417
+ ioc: clientIOC
418
+ });
419
+
420
+ await bootstrap.initialize(); // Execute all plugins' onBefore
421
+ await bootstrap.start(); // Start application
422
+ ```
423
+
424
+ **👉 See:** [Bootstrap Initializer Detailed Documentation](./bootstrap.md)
425
+
426
+ ### 4. Environment Variable Management (Multi-Environment Configuration) ⭐
427
+
428
+ **Core Philosophy:** Use `vite --mode` to switch environments, inject to AppConfig through Bootstrap
429
+
430
+ ```bash
431
+ # Different environments
432
+ npm run dev # Development environment (.env.localhost)
433
+ npm run dev:staging # Staging environment (.env.staging)
434
+ npm run build # Production environment (.env.production)
435
+ ```
436
+
437
+ ```typescript
438
+ // AppConfig automatically injects environment variables
439
+ export class AppConfig {
440
+ readonly env: string;
441
+ readonly apiBaseUrl = ''; // Auto-injected from VITE_API_BASE_URL
442
+ readonly appName = ''; // Auto-injected from VITE_APP_NAME
443
+ }
444
+
445
+ // Usage
446
+ const config = useIOC(IOCIdentifier.AppConfig);
447
+ console.log(config.apiBaseUrl); // Automatically switches based on environment
102
448
  ```
103
449
 
104
- ### 4. Internationalization
450
+ **👉 See:** [Environment Variable Management Detailed Documentation](./env.md)
105
451
 
106
- Automatic internationalization based on TypeScript comments:
452
+ ### 5. Internationalization (i18n Key)
107
453
 
454
+ **Core Philosophy:** All text uses i18n Keys, never hard-code
455
+
456
+ ```typescript
457
+ // ❌ Wrong: Hard-coded text
458
+ <button>Login</button>
459
+
460
+ // ✅ Correct: Use i18n Key
461
+ import { BUTTON_LOGIN } from '@config/Identifier';
462
+ <button>{t(BUTTON_LOGIN)}</button>
108
463
  ```
109
- Comment Definition → Auto-generate Resources → Dynamic Loading → Language Switching
464
+
465
+ **Core Advantage:** Developers don't need to remember `'common:button.login'` string, just need to know `BUTTON_LOGIN` variable, IDE will auto-complete
466
+
467
+ **👉 See:** [Internationalization Detailed Documentation](./i18n.md)
468
+
469
+ ---
470
+
471
+ ## 📝 Quick Example
472
+
473
+ ### Example: Create a Theme Switching Feature
474
+
475
+ ```typescript
476
+ // 1️⃣ Define interface (base/port/ThemeServiceInterface.ts)
477
+ export interface ThemeServiceInterface {
478
+ setTheme(theme: 'light' | 'dark'): void;
479
+ getTheme(): 'light' | 'dark';
480
+ }
481
+
482
+ // 2️⃣ Implement service (base/services/ThemeService.ts)
483
+ @injectable()
484
+ export class ThemeService extends StoreInterface<ThemeState> {
485
+ constructor(
486
+ @inject(IOCIdentifier.LocalStorage) private storage: Storage
487
+ ) {
488
+ super(() => ({ theme: 'light' }));
489
+ }
490
+
491
+ setTheme(theme: 'light' | 'dark') {
492
+ this.storage.setItem('theme', theme);
493
+ this.emit({ theme }); // Notify UI to update
494
+ }
495
+
496
+ getTheme() {
497
+ return this.state.theme;
498
+ }
499
+ }
500
+
501
+ // 3️⃣ Register to IOC (core/clientIoc/ClientIOCRegister.ts)
502
+ register(ioc: IOCContainer) {
503
+ ioc.bind(IOCIdentifier.ThemeServiceInterface, ThemeService);
504
+ }
505
+
506
+ // 4️⃣ UI usage (components/ThemeSwitcher.tsx)
507
+ function ThemeSwitcher() {
508
+ const themeService = useIOC('ThemeServiceInterface');
509
+ const { theme } = useStore(themeService);
510
+
511
+ return (
512
+ <button onClick={() => themeService.setTheme(theme === 'light' ? 'dark' : 'light')}>
513
+ {theme === 'light' ? '🌙 Dark' : '☀️ Light'}
514
+ </button>
515
+ );
516
+ }
110
517
  ```
111
518
 
112
- ## Development Process
519
+ **For complete development workflow see:** [Development Guide](./development-guide.md)
520
+
521
+ ---
522
+
523
+ ## 📚 Detailed Documentation Navigation
524
+
525
+ ### Core Documentation ⭐
526
+
527
+ #### 1. [Development Guide](./development-guide.md)
528
+
529
+ **Target Audience:** Developers preparing to develop new features
530
+ **Reading Time:** 20-30 minutes
531
+
532
+ **Content Overview:**
533
+
534
+ - What's needed to develop a page (8-item checklist)
535
+ - Complete 10-step development process
536
+ - Practical example: User list page (complete code)
537
+ - Common scenarios (add button, dialog, search, etc.)
538
+ - Code standards and development tools
539
+
540
+ **Core Value:** Step-by-step guide to develop a complete page
541
+
542
+ #### 2. [IOC Container](./ioc.md)
543
+
544
+ **Core Questions:** How to separate UI and logic? Why need interfaces?
545
+
546
+ **Key Content:**
547
+
548
+ - Why need IOC (UI and logic separation)
549
+ - Two key questions:
550
+ 1. Why does an implementation class also need an interface? (Testability)
551
+ 2. Why separate even simple components? (Future extensibility)
552
+ - How to test logic and UI independently
553
+ - How to test in combination
554
+ - Complete practical examples
555
+
556
+ **Applicable Scenarios:**
557
+
558
+ - Need to create new services
559
+ - Need to understand dependency injection
560
+ - Need to write testable code
561
+
562
+ #### 3. [Store State Management](./store.md)
563
+
564
+ **Core Question:** How does application layer (Service) notify UI layer to update?
565
+
566
+ **Key Content:**
567
+
568
+ - Why need Store (solve communication problem)
569
+ - Service publishes state through `emit`
570
+ - UI subscribes to state through `useStore`
571
+ - Selectors and performance optimization
572
+ - Independent testing and combination testing
573
+
574
+ **Applicable Scenarios:**
575
+
576
+ - Service needs to notify UI to update
577
+ - Need to implement reactive UI
578
+ - Need to optimize rendering performance
579
+
580
+ #### 4. [Bootstrap Initializer](./bootstrap.md)
581
+
582
+ **Core Question:** How does application initialize? Why need Bootstrap?
583
+
584
+ **Key Content:**
585
+
586
+ - What is Bootstrap (plugin system)
587
+ - Why need Bootstrap (problem-driven)
588
+ - Core advantages of Bootstrap (especially testing)
589
+ - Complete project implementation and examples
590
+ - Vitest testing guide
591
+
592
+ **Applicable Scenarios:**
593
+
594
+ - Need to execute initialization logic before app starts
595
+ - Need to understand application startup flow
596
+ - Need to add new startup plugins
597
+
598
+ #### 5. [Environment Variable Management](./env.md)
599
+
600
+ **Core Question:** How to manage multi-environment configuration?
601
+
602
+ **Key Content:**
603
+
604
+ - Use `vite --mode` to switch environments
605
+ - `.env` file management and priority
606
+ - AppConfig automatic injection mechanism
607
+ - Bootstrap's InjectEnv plugin
608
+ - Multi-environment configuration examples
609
+
610
+ **Applicable Scenarios:**
611
+
612
+ - Need to add new environment variables
613
+ - Need to switch between dev/staging/production environments
614
+ - Need to understand configuration injection mechanism
615
+
616
+ #### 6. [Internationalization (i18n)](./i18n.md)
617
+
618
+ **Core Question:** How to manage multi-language text?
619
+
620
+ **Key Content:**
621
+
622
+ - **Core Principle:** All text uses i18n Keys, never hard-code
623
+ - **Core Advantage:** Reduce developer thinking (don't need to remember strings, just variable names)
624
+ - Auto-generate translation files (ts2Locales)
625
+ - I18nService Bootstrap plugin
626
+ - Complete usage examples
113
627
 
114
- 1. **Requirement Analysis**
115
- - Understand business requirements
116
- - Design technical solutions
117
- - Evaluate development cycle
628
+ **Applicable Scenarios:**
118
629
 
119
- 2. **Development Phase**
120
- - Follow development standards
121
- - Write unit tests
122
- - Conduct code reviews
630
+ - Need to add new text
631
+ - Need to support new languages
632
+ - Need to understand i18n Key concept
123
633
 
124
- 3. **Testing Phase**
125
- - Unit testing
126
- - Integration testing
127
- - Performance testing
634
+ ### Supporting Documentation
128
635
 
129
- 4. **Deployment**
130
- - Build optimization
131
- - Deployment configuration
132
- - Monitoring and alerts
636
+ #### [Why Disable Global Variables](./why-no-globals.md)
133
637
 
134
- ## Common Issues
638
+ **Core Question:** Why can't we directly use `window`, `document`, etc.?
135
639
 
136
- ### 1. Development Environment Setup
640
+ **Key Content:**
137
641
 
138
- - Ensure Node.js version >= 16
139
- - Use recommended IDE configuration
140
- - Install necessary development tools
642
+ - Core philosophy: Global variables should be injected from entry point
643
+ - Allowed locations: `main.tsx`, `core/globals.ts`
644
+ - Why do this (testing, SSR, traceability)
645
+ - Practical application scenarios (IOC container)
646
+ - Test-friendliness comparison
141
647
 
142
- ### 2. Build Related
648
+ #### [Route Management](./router.md)
143
649
 
144
- - Common build error solutions
145
- - Performance optimization suggestions
146
- - Deployment considerations
650
+ **Core Content:**
147
651
 
148
- ### 3. Development Related
652
+ - Route configuration file (`config/app.router.ts`)
653
+ - Route metadata (title, requiresAuth, etc.)
654
+ - Dynamic route loading
655
+ - RouteService usage
149
656
 
150
- - Code standard issues
151
- - Type system usage
152
- - Component development standards
657
+ #### [Theme System](./theme.md)
658
+
659
+ **Core Content:**
660
+
661
+ - Tailwind CSS configuration
662
+ - CSS variable management
663
+ - Theme switching implementation
664
+ - ThemeService usage
665
+
666
+ #### [Request Handling](./request.md)
667
+
668
+ **Core Content:**
669
+
670
+ - API adapter pattern
671
+ - Request plugin system
672
+ - Error handling
673
+ - Mock data
674
+
675
+ #### [Testing Guide](./test-guide.md)
676
+
677
+ **Core Content:**
678
+
679
+ - Vitest testing framework
680
+ - Service testing (logic layer)
681
+ - UI testing (component layer)
682
+ - Integration testing (workflow)
683
+ - Testing best practices
684
+
685
+ #### [Playwright E2E Testing](./playwright/) 🎭
686
+
687
+ **Core Content:**
688
+
689
+ - Complete E2E testing documentation
690
+ - Multi-browser testing (Chromium, Firefox, WebKit, Mobile)
691
+ - Page Object Model architecture
692
+ - Test writing guide and best practices
693
+ - Debugging techniques and CI/CD integration
694
+ - See [Playwright Documentation Hub](./playwright/)
695
+ - Quick reference: [Playwright Overview](./playwright/overview.md)
696
+
697
+ #### [TypeScript Guide](./typescript-guide.md)
698
+
699
+ **Core Content:**
700
+
701
+ - TypeScript type standards
702
+ - Generic usage
703
+ - Type inference
704
+ - Common issues
705
+
706
+ ---
707
+
708
+ ## 🎯 Quick Lookup
709
+
710
+ ### I want to...
711
+
712
+ **Develop a new page** → [Development Guide](./development-guide.md)
713
+
714
+ **Understand UI and logic separation** → [IOC Container](./ioc.md)
715
+
716
+ **Let Service notify UI to update** → [Store State Management](./store.md)
717
+
718
+ **Add environment variables** → [Environment Variable Management](./env.md)
719
+
720
+ **Add multi-language text** → [Internationalization](./i18n.md)
721
+
722
+ **Execute initialization before app starts** → [Bootstrap Initializer](./bootstrap.md)
723
+
724
+ **Encapsulate browser APIs** → [Why Disable Global Variables](./why-no-globals.md)
725
+
726
+ **Add routes** → [Route Management](./router.md)
727
+
728
+ **Switch themes** → [Theme System](./theme.md)
729
+
730
+ **Call APIs** → [Request Handling](./request.md)
731
+
732
+ **Write unit tests** → [Testing Guide](./test-guide.md)
733
+
734
+ **Write E2E tests** → [Playwright E2E Testing](./playwright/README.md)
735
+
736
+ **Solve TypeScript issues** → [TypeScript Guide](./typescript-guide.md)
737
+
738
+ ---
739
+
740
+ ## 🎯 Core Philosophy Summary
741
+
742
+ | Philosophy | Description | Benefits |
743
+ | ----------------------------- | ----------------------------------------- | -------------------------------- |
744
+ | **Layered Architecture** | Clear responsibility division | Easy to understand and maintain |
745
+ | **Unidirectional Dependency** | Can only depend from top to bottom | Avoid circular dependencies |
746
+ | **Interface-Oriented** | Depend on interfaces, not implementations | Easy to test and replace |
747
+ | **Dependency Injection** | IOC container manages dependencies | Decoupling, testable |
748
+ | **UI Separation** | UI is UI, logic is logic | Independent testing, reusable |
749
+ | **State Management** | Service emits, UI uses useStore | Auto-update, maintain separation |
750
+ | **Single Responsibility** | Each module does one thing | Easy to reuse and maintain |
751
+ | **Configuration-Driven** | Business driven by configuration | Flexible, easy to extend |
752
+
753
+ ---
754
+
755
+ ## 🚦 Development Workflow
756
+
757
+ ```
758
+ 1. Define i18n Key (config/Identifier/)
759
+
760
+ 2. Define interface (base/port/)
761
+
762
+ 3. Implement service (base/services/)
763
+
764
+ 4. Implement API (if needed) (base/apis/)
765
+
766
+ 5. Configure routes (config/app.router.ts)
767
+
768
+ 6. Implement page (pages/)
769
+ ├── useIOC() get services
770
+ └── useStore() subscribe to state
771
+
772
+ 7. Register IOC (if new service) (core/clientIoc/)
773
+
774
+ 8. Write tests (__tests__/)
775
+ ├── Service tests (logic)
776
+ ├── UI tests (rendering)
777
+ └── Integration tests (workflow)
778
+ ```
153
779
 
154
- ## Contribution Guide
780
+ ---
155
781
 
156
- 1. Fork the project
157
- 2. Create feature branch
158
- 3. Submit changes
159
- 4. Create Pull Request
782
+ ## 💡 Development Recommendations
160
783
 
161
- ## Changelog
784
+ ### New Developers
162
785
 
163
- See [CHANGELOG.md](../../CHANGELOG.md) for detailed update history.
786
+ 1. Understand architecture first - Read this document
787
+ 2. Learn IOC - Read [IOC Container Documentation](./ioc.md)
788
+ 3. Learn Store - Read [Store Documentation](./store.md)
789
+ 4. See example code - Refer to existing `UserService`, `I18nService`, etc.
790
+ 5. Hands-on practice - Create a simple feature
164
791
 
165
- ## Support and Help
792
+ ### Experienced Developers
166
793
 
167
- - Submit Issues
168
- - Check Wiki
169
- - Participate in discussions
794
+ - **Bootstrap mechanism** → [Bootstrap Documentation](./bootstrap.md)
795
+ - **Environment variable management** → [Environment Variable Documentation](./env.md)
796
+ - **Internationalization implementation** → [i18n Documentation](./i18n.md)
797
+ - **Global variable standards** → [why-no-globals Documentation](./why-no-globals.md)
170
798
 
171
- ## License
799
+ ---
172
800
 
173
- This project is open-sourced under the [ISC License](../../LICENSE).
801
+ **Feedback:**
802
+ If you have any questions or suggestions about the architecture design, please discuss in the team channel or submit an Issue.