@qlover/create-app 0.7.14 → 0.8.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 (361) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/dist/configs/_common/.gitignore.template +6 -0
  3. package/dist/configs/_common/.prettierignore +17 -5
  4. package/dist/configs/_common/.vscode/settings.json +6 -1
  5. package/dist/index.cjs +1 -1
  6. package/dist/index.js +1 -1
  7. package/dist/templates/next-app/.env.template +1 -1
  8. package/dist/templates/next-app/README.en.md +130 -0
  9. package/dist/templates/next-app/README.md +114 -20
  10. package/dist/templates/next-app/config/Identifier/api.ts +5 -5
  11. package/dist/templates/next-app/config/Identifier/common/admint.table.ts +69 -0
  12. package/dist/templates/next-app/config/Identifier/common/common.ts +76 -0
  13. package/dist/templates/next-app/config/Identifier/common/index.ts +3 -0
  14. package/dist/templates/next-app/config/Identifier/{validator.ts → common/validators.ts} +5 -5
  15. package/dist/templates/next-app/config/Identifier/index.ts +2 -12
  16. package/dist/templates/next-app/config/Identifier/pages/index.ts +6 -0
  17. package/dist/templates/next-app/config/Identifier/pages/page.admin.home.ts +27 -0
  18. package/dist/templates/next-app/config/Identifier/pages/page.admin.locales.ts +266 -0
  19. package/dist/templates/next-app/config/Identifier/pages/page.admin.user.ts +293 -0
  20. package/dist/templates/{react-app/config/Identifier → next-app/config/Identifier/pages}/page.home.ts +15 -22
  21. package/dist/templates/next-app/config/Identifier/{page.login.ts → pages/page.login.ts} +28 -34
  22. package/dist/templates/next-app/config/Identifier/{page.register.ts → pages/page.register.ts} +30 -29
  23. package/dist/templates/next-app/config/adminNavs.ts +19 -0
  24. package/dist/templates/next-app/config/common.ts +22 -13
  25. package/dist/templates/next-app/config/i18n/HomeI18n.ts +5 -5
  26. package/dist/templates/next-app/config/i18n/admin18n.ts +61 -19
  27. package/dist/templates/next-app/config/i18n/i18nConfig.ts +2 -0
  28. package/dist/templates/next-app/config/i18n/i18nKeyScheam.ts +36 -0
  29. package/dist/templates/next-app/config/i18n/loginI18n.ts +22 -22
  30. package/dist/templates/next-app/config/i18n/register18n.ts +23 -24
  31. package/dist/templates/next-app/docs/en/api.md +387 -0
  32. package/dist/templates/next-app/docs/en/component.md +544 -0
  33. package/dist/templates/next-app/docs/en/database.md +496 -0
  34. package/dist/templates/next-app/docs/en/development-guide.md +727 -0
  35. package/dist/templates/next-app/docs/en/env.md +563 -0
  36. package/dist/templates/next-app/docs/en/i18n.md +287 -0
  37. package/dist/templates/next-app/docs/en/index.md +165 -0
  38. package/dist/templates/next-app/docs/en/page.md +457 -0
  39. package/dist/templates/next-app/docs/en/project-structure.md +176 -0
  40. package/dist/templates/next-app/docs/en/router.md +427 -0
  41. package/dist/templates/next-app/docs/en/theme.md +532 -0
  42. package/dist/templates/next-app/docs/en/validator.md +478 -0
  43. package/dist/templates/next-app/docs/zh/api.md +387 -0
  44. package/dist/templates/next-app/docs/zh/component.md +544 -0
  45. package/dist/templates/next-app/docs/zh/database.md +496 -0
  46. package/dist/templates/next-app/docs/zh/development-guide.md +727 -0
  47. package/dist/templates/next-app/docs/zh/env.md +563 -0
  48. package/dist/templates/next-app/docs/zh/i18n.md +287 -0
  49. package/dist/templates/next-app/docs/zh/index.md +165 -0
  50. package/dist/templates/next-app/docs/zh/page.md +457 -0
  51. package/dist/templates/next-app/docs/zh/project-structure.md +176 -0
  52. package/dist/templates/next-app/docs/zh/router.md +427 -0
  53. package/dist/templates/next-app/docs/zh/theme.md +532 -0
  54. package/dist/templates/next-app/docs/zh/validator.md +476 -0
  55. package/dist/templates/next-app/make/generateLocales.ts +19 -12
  56. package/dist/templates/next-app/migrations/schema/LocalesSchema.ts +15 -0
  57. package/dist/templates/next-app/migrations/sql/1694244000000.sql +11 -0
  58. package/dist/templates/next-app/package.json +7 -3
  59. package/dist/templates/next-app/public/locales/en.json +172 -207
  60. package/dist/templates/next-app/public/locales/zh.json +172 -207
  61. package/dist/templates/next-app/src/app/[locale]/admin/locales/page.tsx +153 -0
  62. package/dist/templates/next-app/src/app/[locale]/admin/users/page.tsx +48 -50
  63. package/dist/templates/next-app/src/app/[locale]/login/LoginForm.tsx +2 -2
  64. package/dist/templates/next-app/src/app/api/admin/locales/create/route.ts +34 -0
  65. package/dist/templates/next-app/src/app/api/admin/locales/import/route.ts +40 -0
  66. package/dist/templates/next-app/src/app/api/admin/locales/route.ts +42 -0
  67. package/dist/templates/next-app/src/app/api/admin/locales/update/route.ts +32 -0
  68. package/dist/templates/next-app/src/app/api/locales/json/route.ts +44 -0
  69. package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +1 -13
  70. package/dist/templates/next-app/src/base/cases/Datetime.ts +18 -0
  71. package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +12 -6
  72. package/dist/templates/next-app/src/base/cases/ResourceState.ts +17 -0
  73. package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +25 -0
  74. package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +200 -0
  75. package/dist/templates/next-app/src/base/port/ZodBuilderInterface.ts +8 -0
  76. package/dist/templates/next-app/src/base/services/AdminLocalesService.ts +20 -0
  77. package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +26 -0
  78. package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +42 -0
  79. package/dist/templates/next-app/src/base/services/ResourceService.ts +122 -0
  80. package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +104 -0
  81. package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +38 -5
  82. package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +1 -1
  83. package/dist/templates/next-app/src/i18n/request.ts +30 -1
  84. package/dist/templates/next-app/src/server/PageParams.ts +2 -10
  85. package/dist/templates/next-app/src/server/port/DBBridgeInterface.ts +5 -0
  86. package/dist/templates/next-app/src/server/port/DBTableInterface.ts +2 -0
  87. package/dist/templates/next-app/src/server/port/LocalesRepositoryInterface.ts +43 -0
  88. package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +197 -0
  89. package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +122 -0
  90. package/dist/templates/next-app/src/server/sqlBridges/SupabaseBridge.ts +60 -11
  91. package/dist/templates/next-app/src/server/validators/ExtendedExecutorError.ts +6 -0
  92. package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +131 -0
  93. package/dist/templates/next-app/src/server/validators/LoginValidator.ts +2 -5
  94. package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +32 -16
  95. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/_default.css +2 -1
  96. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/dark.css +28 -29
  97. package/dist/templates/next-app/src/styles/css/antd-themes/pagination/pink.css +2 -1
  98. package/dist/templates/next-app/src/uikit/components/AdminLayout.tsx +17 -3
  99. package/dist/templates/next-app/src/uikit/components/BaseHeader.tsx +5 -4
  100. package/dist/templates/next-app/src/uikit/components/BaseLayout.tsx +5 -4
  101. package/dist/templates/next-app/src/uikit/components/BootstrapsProvider.tsx +3 -2
  102. package/dist/templates/next-app/src/uikit/components/ComboProvider.tsx +1 -1
  103. package/dist/templates/next-app/src/uikit/components/EditableCell.tsx +118 -0
  104. package/dist/templates/next-app/src/uikit/components/LogoutButton.tsx +5 -6
  105. package/dist/templates/next-app/src/uikit/components/ThemeSwitcher.tsx +1 -1
  106. package/dist/templates/next-app/src/uikit/components/With.tsx +2 -2
  107. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportButton.tsx +62 -0
  108. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +28 -0
  109. package/dist/templates/next-app/src/uikit/components/localesImportButton/import.module.css +6 -0
  110. package/dist/templates/next-app/src/uikit/hook/useI18nInterface.ts +8 -14
  111. package/dist/templates/next-app/src/uikit/hook/useWarnTranslations.ts +25 -0
  112. package/dist/templates/react-app/.prettierignore +17 -0
  113. package/dist/templates/react-app/README.en.md +71 -54
  114. package/dist/templates/react-app/README.md +35 -18
  115. package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +14 -0
  116. package/dist/templates/react-app/__tests__/__mocks__/MockAppConfit.ts +1 -1
  117. package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +2 -2
  118. package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +1 -1
  119. package/dist/templates/react-app/__tests__/__mocks__/components/TestApp.tsx +45 -0
  120. package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +34 -0
  121. package/dist/templates/react-app/__tests__/__mocks__/components/TestRouter.tsx +46 -0
  122. package/dist/templates/react-app/__tests__/__mocks__/components/index.ts +12 -0
  123. package/dist/templates/react-app/__tests__/__mocks__/createMockGlobals.ts +1 -2
  124. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +51 -0
  125. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +69 -0
  126. package/dist/templates/react-app/__tests__/setup/index.ts +1 -51
  127. package/dist/templates/react-app/__tests__/setup/setupGlobal.ts +51 -0
  128. package/dist/templates/react-app/__tests__/src/App.structure.test.tsx +115 -0
  129. package/dist/templates/react-app/__tests__/src/base/cases/AppConfig.test.ts +2 -2
  130. package/dist/templates/react-app/__tests__/src/base/cases/AppError.test.ts +1 -1
  131. package/dist/templates/react-app/__tests__/src/base/cases/DialogHandler.test.ts +3 -5
  132. package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +13 -2
  133. package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +1 -1
  134. package/dist/templates/react-app/__tests__/src/base/cases/PublicAssetsPath.test.ts +1 -1
  135. package/dist/templates/react-app/__tests__/src/base/cases/RequestLogger.test.ts +5 -5
  136. package/dist/templates/react-app/__tests__/src/base/cases/RequestStatusCatcher.test.ts +1 -2
  137. package/dist/templates/react-app/__tests__/src/base/cases/RouterLoader.test.ts +25 -15
  138. package/dist/templates/react-app/__tests__/src/base/services/I18nService.test.ts +29 -15
  139. package/dist/templates/react-app/__tests__/src/core/IOC.test.ts +19 -9
  140. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +153 -0
  141. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapsApp.test.ts +9 -7
  142. package/dist/templates/react-app/__tests__/src/main.integration.test.tsx +4 -5
  143. package/dist/templates/react-app/__tests__/src/main.test.tsx +4 -4
  144. package/dist/templates/react-app/__tests__/src/uikit/components/BaseHeader.test.tsx +68 -59
  145. package/dist/templates/react-app/config/IOCIdentifier.ts +8 -8
  146. package/dist/templates/react-app/config/Identifier/{common.error.ts → common/common.error.ts} +5 -5
  147. package/dist/templates/react-app/config/Identifier/{common.ts → common/common.ts} +9 -9
  148. package/dist/templates/react-app/config/Identifier/common/index.ts +2 -0
  149. package/dist/templates/react-app/config/Identifier/index.ts +1 -9
  150. package/dist/templates/react-app/config/Identifier/pages/index.ts +8 -0
  151. package/dist/templates/react-app/config/Identifier/{page.about.ts → pages/page.about.ts} +34 -26
  152. package/dist/templates/react-app/config/Identifier/{page.executor.ts → pages/page.executor.ts} +47 -39
  153. package/dist/templates/{next-app/config/Identifier → react-app/config/Identifier/pages}/page.home.ts +24 -23
  154. package/dist/templates/react-app/config/Identifier/pages/page.identifiter.ts +102 -0
  155. package/dist/templates/react-app/config/Identifier/{page.jsonStorage.ts → pages/page.jsonStorage.ts} +18 -11
  156. package/dist/templates/react-app/config/Identifier/{page.login.ts → pages/page.login.ts} +37 -27
  157. package/dist/templates/react-app/config/Identifier/{page.register.ts → pages/page.register.ts} +37 -25
  158. package/dist/templates/react-app/config/Identifier/{page.request.ts → pages/page.request.ts} +34 -44
  159. package/dist/templates/react-app/config/app.router.ts +66 -69
  160. package/dist/templates/react-app/config/i18n/PageI18nInterface.ts +51 -0
  161. package/dist/templates/react-app/config/i18n/aboutI18n.ts +42 -0
  162. package/dist/templates/react-app/config/i18n/executorI18n.ts +51 -0
  163. package/dist/templates/react-app/config/i18n/homeI18n.ts +24 -0
  164. package/dist/templates/react-app/config/i18n/i18nConfig.ts +30 -0
  165. package/dist/templates/react-app/config/i18n/identifiter18n.ts +30 -0
  166. package/dist/templates/react-app/config/i18n/jsonStorage18n.ts +27 -0
  167. package/dist/templates/react-app/config/i18n/login18n.ts +42 -0
  168. package/dist/templates/react-app/config/i18n/notFoundI18n.ts +34 -0
  169. package/dist/templates/react-app/config/i18n/register18n.ts +40 -0
  170. package/dist/templates/react-app/config/i18n/request18n.ts +41 -0
  171. package/dist/templates/react-app/config/theme.ts +14 -4
  172. package/dist/templates/react-app/docs/en/bootstrap.md +1670 -341
  173. package/dist/templates/react-app/docs/en/development-guide.md +1021 -345
  174. package/dist/templates/react-app/docs/en/env.md +1132 -278
  175. package/dist/templates/react-app/docs/en/i18n.md +858 -147
  176. package/dist/templates/react-app/docs/en/index.md +733 -104
  177. package/dist/templates/react-app/docs/en/ioc.md +1228 -287
  178. package/dist/templates/react-app/docs/en/playwright/e2e-tests.md +321 -0
  179. package/dist/templates/react-app/docs/en/playwright/index.md +19 -0
  180. package/dist/templates/react-app/docs/en/playwright/installation-summary.md +332 -0
  181. package/dist/templates/react-app/docs/en/playwright/overview.md +222 -0
  182. package/dist/templates/react-app/docs/en/playwright/quickstart.md +325 -0
  183. package/dist/templates/react-app/docs/en/playwright/reorganization-notes.md +340 -0
  184. package/dist/templates/react-app/docs/en/playwright/setup-complete.md +290 -0
  185. package/dist/templates/react-app/docs/en/playwright/testing-guide.md +565 -0
  186. package/dist/templates/react-app/docs/en/store.md +1194 -184
  187. package/dist/templates/react-app/docs/en/why-no-globals.md +797 -0
  188. package/dist/templates/react-app/docs/zh/bootstrap.md +1670 -341
  189. package/dist/templates/react-app/docs/zh/development-guide.md +1021 -345
  190. package/dist/templates/react-app/docs/zh/env.md +1132 -275
  191. package/dist/templates/react-app/docs/zh/i18n.md +858 -147
  192. package/dist/templates/react-app/docs/zh/index.md +717 -104
  193. package/dist/templates/react-app/docs/zh/ioc.md +1229 -287
  194. package/dist/templates/react-app/docs/zh/playwright/e2e-tests.md +321 -0
  195. package/dist/templates/react-app/docs/zh/playwright/index.md +19 -0
  196. package/dist/templates/react-app/docs/zh/playwright/installation-summary.md +332 -0
  197. package/dist/templates/react-app/docs/zh/playwright/overview.md +222 -0
  198. package/dist/templates/react-app/docs/zh/playwright/quickstart.md +325 -0
  199. package/dist/templates/react-app/docs/zh/playwright/reorganization-notes.md +340 -0
  200. package/dist/templates/react-app/docs/zh/playwright/setup-complete.md +290 -0
  201. package/dist/templates/react-app/docs/zh/playwright/testing-guide.md +565 -0
  202. package/dist/templates/react-app/docs/zh/store.md +1192 -184
  203. package/dist/templates/react-app/docs/zh/why-no-globals.md +797 -0
  204. package/dist/templates/react-app/e2e/App.spec.ts +319 -0
  205. package/dist/templates/react-app/e2e/fixtures/base.fixture.ts +40 -0
  206. package/dist/templates/react-app/e2e/main.spec.ts +20 -0
  207. package/dist/templates/react-app/e2e/utils/test-helpers.ts +19 -0
  208. package/dist/templates/react-app/eslint.config.mjs +247 -0
  209. package/dist/templates/react-app/makes/eslint-utils.mjs +195 -0
  210. package/dist/templates/react-app/makes/generateTs2LocalesOptions.ts +26 -0
  211. package/dist/templates/react-app/package.json +31 -3
  212. package/dist/templates/react-app/playwright.config.ts +79 -0
  213. package/dist/templates/react-app/public/locales/en/common.json +190 -179
  214. package/dist/templates/react-app/public/locales/zh/common.json +190 -179
  215. package/dist/templates/react-app/src/App.tsx +15 -42
  216. package/dist/templates/react-app/src/base/apis/AiApi.ts +5 -5
  217. package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +1 -1
  218. package/dist/templates/react-app/src/base/apis/feApi/FeApiAdapter.ts +1 -1
  219. package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +8 -8
  220. package/dist/templates/react-app/src/base/apis/feApi/FeApiType.ts +1 -1
  221. package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +6 -6
  222. package/dist/templates/react-app/src/base/apis/userApi/UserApiAdapter.ts +1 -1
  223. package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -14
  224. package/dist/templates/react-app/src/base/apis/userApi/UserApiType.ts +1 -1
  225. package/dist/templates/react-app/src/base/cases/DialogHandler.ts +5 -2
  226. package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +3 -3
  227. package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +3 -3
  228. package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +2 -2
  229. package/dist/templates/react-app/src/base/cases/RequestLogger.ts +4 -4
  230. package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +1 -1
  231. package/dist/templates/react-app/src/base/cases/ResourceState.ts +23 -0
  232. package/dist/templates/react-app/src/base/cases/RouterLoader.ts +4 -4
  233. package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +26 -0
  234. package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -3
  235. package/dist/templates/react-app/src/base/port/I18nServiceInterface.ts +1 -1
  236. package/dist/templates/react-app/src/base/port/IOCInterface.ts +36 -0
  237. package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +2 -1
  238. package/dist/templates/react-app/src/base/port/ProcesserExecutorInterface.ts +1 -1
  239. package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +2 -2
  240. package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +9 -5
  241. package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +1 -1
  242. package/dist/templates/react-app/src/base/services/I18nService.ts +29 -29
  243. package/dist/templates/react-app/src/base/services/IdentifierService.ts +143 -0
  244. package/dist/templates/react-app/src/base/services/ProcesserExecutor.ts +3 -3
  245. package/dist/templates/react-app/src/base/services/RouteService.ts +27 -8
  246. package/dist/templates/react-app/src/base/services/UserService.ts +8 -8
  247. package/dist/templates/react-app/src/base/types/Page.ts +14 -2
  248. package/dist/templates/react-app/src/base/types/global.d.ts +1 -1
  249. package/dist/templates/react-app/src/core/IOC.ts +5 -46
  250. package/dist/templates/react-app/src/core/bootstraps/{BootstrapApp.ts → BootstrapClient.ts} +44 -17
  251. package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +14 -7
  252. package/dist/templates/react-app/src/core/bootstraps/IocIdentifierTest.ts +1 -1
  253. package/dist/templates/react-app/src/core/bootstraps/PrintBootstrap.ts +1 -1
  254. package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +40 -0
  255. package/dist/templates/react-app/src/core/{IocRegisterImpl.ts → clientIoc/ClientIOCRegister.ts} +35 -24
  256. package/dist/templates/react-app/src/core/globals.ts +9 -9
  257. package/dist/templates/react-app/src/main.tsx +4 -4
  258. package/dist/templates/react-app/src/pages/404.tsx +6 -3
  259. package/dist/templates/react-app/src/pages/500.tsx +5 -2
  260. package/dist/templates/react-app/src/pages/NoRouteFound.tsx +5 -0
  261. package/dist/templates/react-app/src/pages/auth/Layout.tsx +9 -6
  262. package/dist/templates/react-app/src/pages/auth/LoginPage.tsx +46 -56
  263. package/dist/templates/react-app/src/pages/auth/RegisterPage.tsx +46 -58
  264. package/dist/templates/react-app/src/pages/base/AboutPage.tsx +35 -40
  265. package/dist/templates/react-app/src/pages/base/ExecutorPage.tsx +51 -51
  266. package/dist/templates/react-app/src/pages/base/HomePage.tsx +14 -15
  267. package/dist/templates/react-app/src/pages/base/IdentifierPage.tsx +70 -11
  268. package/dist/templates/react-app/src/pages/base/JSONStoragePage.tsx +24 -25
  269. package/dist/templates/react-app/src/pages/base/Layout.tsx +2 -2
  270. package/dist/templates/react-app/src/pages/base/RedirectPathname.tsx +3 -2
  271. package/dist/templates/react-app/src/pages/base/RequestPage.tsx +41 -59
  272. package/dist/templates/react-app/src/styles/css/antd-themes/{_default.css → _common/_default.css} +85 -0
  273. package/dist/templates/react-app/src/styles/css/antd-themes/{dark.css → _common/dark.css} +99 -0
  274. package/dist/templates/react-app/src/styles/css/antd-themes/_common/index.css +3 -0
  275. package/dist/templates/react-app/src/styles/css/antd-themes/{pink.css → _common/pink.css} +86 -0
  276. package/dist/templates/react-app/src/styles/css/antd-themes/index.css +4 -3
  277. package/dist/templates/react-app/src/styles/css/antd-themes/menu/_default.css +108 -0
  278. package/dist/templates/react-app/src/styles/css/antd-themes/menu/dark.css +67 -0
  279. package/dist/templates/react-app/src/styles/css/antd-themes/menu/index.css +3 -0
  280. package/dist/templates/react-app/src/styles/css/antd-themes/menu/pink.css +67 -0
  281. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/_default.css +34 -0
  282. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/dark.css +31 -0
  283. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/index.css +3 -0
  284. package/dist/templates/react-app/src/styles/css/antd-themes/pagination/pink.css +36 -0
  285. package/dist/templates/react-app/src/styles/css/antd-themes/table/_default.css +44 -0
  286. package/dist/templates/react-app/src/styles/css/antd-themes/table/dark.css +43 -0
  287. package/dist/templates/react-app/src/styles/css/antd-themes/table/index.css +3 -0
  288. package/dist/templates/react-app/src/styles/css/antd-themes/table/pink.css +43 -0
  289. package/dist/templates/react-app/src/styles/css/page.css +4 -3
  290. package/dist/templates/react-app/src/styles/css/themes/_default.css +1 -0
  291. package/dist/templates/react-app/src/styles/css/themes/dark.css +1 -0
  292. package/dist/templates/react-app/src/styles/css/themes/pink.css +1 -0
  293. package/dist/templates/react-app/src/styles/css/zIndex.css +1 -1
  294. package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +3 -3
  295. package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +2 -2
  296. package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +1 -1
  297. package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +3 -3
  298. package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +35 -0
  299. package/dist/templates/react-app/src/uikit/components/BaseHeader.tsx +15 -11
  300. package/dist/templates/react-app/src/uikit/components/BaseRouteProvider.tsx +14 -11
  301. package/dist/templates/react-app/src/uikit/components/BaseRouteSeo.tsx +18 -0
  302. package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +13 -0
  303. package/dist/templates/react-app/src/uikit/components/ClientSeo.tsx +62 -0
  304. package/dist/templates/react-app/src/uikit/components/ComboProvider.tsx +38 -0
  305. package/dist/templates/react-app/src/uikit/components/LanguageSwitcher.tsx +48 -27
  306. package/dist/templates/react-app/src/uikit/components/Loading.tsx +4 -2
  307. package/dist/templates/react-app/src/uikit/components/LocaleLink.tsx +4 -5
  308. package/dist/templates/react-app/src/uikit/components/LogoutButton.tsx +34 -11
  309. package/dist/templates/react-app/src/uikit/components/ProcessExecutorProvider.tsx +9 -5
  310. package/dist/templates/react-app/src/uikit/components/RouterRenderComponent.tsx +6 -3
  311. package/dist/templates/react-app/src/uikit/components/ThemeSwitcher.tsx +97 -40
  312. package/dist/templates/react-app/src/uikit/components/UserAuthProvider.tsx +5 -5
  313. package/dist/templates/react-app/src/uikit/components/With.tsx +17 -0
  314. package/dist/templates/react-app/src/uikit/contexts/BaseRouteContext.ts +17 -11
  315. package/dist/templates/react-app/src/uikit/contexts/IOCContext.ts +13 -0
  316. package/dist/templates/react-app/src/uikit/hooks/useAppTranslation.ts +26 -0
  317. package/dist/templates/react-app/src/uikit/hooks/useI18nGuard.ts +8 -11
  318. package/dist/templates/react-app/src/uikit/hooks/useI18nInterface.ts +25 -0
  319. package/dist/templates/react-app/src/uikit/hooks/useIOC.ts +35 -0
  320. package/dist/templates/react-app/src/uikit/hooks/useNavigateBridge.ts +3 -3
  321. package/dist/templates/react-app/src/uikit/hooks/useStrictEffect.ts +0 -1
  322. package/dist/templates/react-app/tsconfig.e2e.json +21 -0
  323. package/dist/templates/react-app/tsconfig.json +8 -1
  324. package/dist/templates/react-app/tsconfig.node.json +1 -1
  325. package/dist/templates/react-app/tsconfig.test.json +3 -1
  326. package/dist/templates/react-app/vite.config.ts +50 -34
  327. package/package.json +2 -1
  328. package/dist/configs/react-app/eslint.config.js +0 -94
  329. package/dist/templates/next-app/config/Identifier/common.error.ts +0 -41
  330. package/dist/templates/next-app/config/Identifier/common.ts +0 -69
  331. package/dist/templates/next-app/config/Identifier/page.about.ts +0 -181
  332. package/dist/templates/next-app/config/Identifier/page.admin.ts +0 -48
  333. package/dist/templates/next-app/config/Identifier/page.executor.ts +0 -272
  334. package/dist/templates/next-app/config/Identifier/page.identifiter.ts +0 -39
  335. package/dist/templates/next-app/config/Identifier/page.jsonStorage.ts +0 -72
  336. package/dist/templates/next-app/config/Identifier/page.request.ts +0 -182
  337. package/dist/templates/next-app/docs/env.md +0 -94
  338. package/dist/templates/next-app/src/base/cases/ChatAction.ts +0 -21
  339. package/dist/templates/next-app/src/base/cases/FocusBarAction.ts +0 -36
  340. package/dist/templates/next-app/src/base/cases/RequestState.ts +0 -20
  341. package/dist/templates/next-app/src/base/port/AdminPageInterface.ts +0 -85
  342. package/dist/templates/next-app/src/base/port/AsyncStateInterface.ts +0 -7
  343. package/dist/templates/next-app/src/base/services/AdminUserService.ts +0 -45
  344. package/dist/templates/next-app/src/uikit/components/ChatRoot.tsx +0 -17
  345. package/dist/templates/next-app/src/uikit/components/chat/ChatActionInterface.ts +0 -30
  346. package/dist/templates/next-app/src/uikit/components/chat/ChatFocusBar.tsx +0 -65
  347. package/dist/templates/next-app/src/uikit/components/chat/ChatMessages.tsx +0 -59
  348. package/dist/templates/next-app/src/uikit/components/chat/ChatWrap.tsx +0 -28
  349. package/dist/templates/next-app/src/uikit/components/chat/FocusBarActionInterface.ts +0 -19
  350. package/dist/templates/next-app/src/uikit/hook/useMountedClient.ts +0 -17
  351. package/dist/templates/next-app/src/uikit/hook/useStore.ts +0 -15
  352. package/dist/templates/react-app/__tests__/__mocks__/I18nService.ts +0 -13
  353. package/dist/templates/react-app/__tests__/src/App.test.tsx +0 -139
  354. package/dist/templates/react-app/config/Identifier/page.identifiter.ts +0 -39
  355. package/dist/templates/react-app/config/i18n.ts +0 -15
  356. package/dist/templates/react-app/docs/en/project-structure.md +0 -434
  357. package/dist/templates/react-app/docs/zh/project-structure.md +0 -434
  358. package/dist/templates/react-app/src/base/cases/RequestState.ts +0 -20
  359. package/dist/templates/react-app/src/base/port/AsyncStateInterface.ts +0 -7
  360. package/dist/templates/react-app/src/uikit/hooks/useDocumentTitle.ts +0 -15
  361. package/dist/templates/react-app/src/uikit/hooks/useStore.ts +0 -15
@@ -0,0 +1,727 @@
1
+ # Development Guidelines
2
+
3
+ ## Table of Contents
4
+
5
+ 1. [Project Structure Guidelines](#project-structure-guidelines)
6
+ 2. [Code Style Guidelines](#code-style-guidelines)
7
+ 3. [Component Development Guidelines](#component-development-guidelines)
8
+ 4. [State Management Guidelines](#state-management-guidelines)
9
+ 5. [Router Development Guidelines](#router-development-guidelines)
10
+ 6. [Internationalization Guidelines](#internationalization-guidelines)
11
+ 7. [Theme Style Guidelines](#theme-style-guidelines)
12
+ 8. [Testing Guidelines](#testing-guidelines)
13
+ 9. [Documentation Guidelines](#documentation-guidelines)
14
+
15
+ ## Project Structure Guidelines
16
+
17
+ > 💡 These are just basic guidelines. For complete project structure documentation, please refer to [Project Structure Documentation](./project-structure.md)
18
+
19
+ ### 1. Directory Structure
20
+
21
+ ```
22
+ src/
23
+ ├── base/ # Base functionality implementation
24
+ │ ├── cases/ # Business case implementation
25
+ │ ├── services/ # Core service implementation
26
+ │ └── types/ # Type definitions
27
+ ├── core/ # Core functionality
28
+ │ ├── bootstraps/ # Startup related
29
+ │ ├── clientIoc/ # Client IOC implementation
30
+ │ ├── serverIoc/ # Server IOC implementation
31
+ │ └── globals.ts # Global variables
32
+ ├── pages/ # Page components
33
+ │ ├── auth/ # Authentication related pages
34
+ │ └── base/ # Base pages
35
+ ├── styles/ # Style files
36
+ │ └── css/
37
+ │ ├── themes/ # Theme related
38
+ │ └── antd-themes/ # Ant Design themes
39
+ ├── uikit/ # UI component library
40
+ │ ├── components/ # Common components
41
+ │ ├── contexts/ # React Context
42
+ │ ├── hooks/ # Custom Hooks
43
+ │ └── providers/ # Provider components
44
+ └── App.tsx # Application entry
45
+ ```
46
+
47
+ ### 2. Application Bootstrap Process
48
+
49
+ #### 2.1 Client Bootstrap Process
50
+
51
+ The client bootstrap process is handled by the `BootstrapClient` class, mainly including the following steps:
52
+
53
+ 1. **Initialize IOC Container**
54
+
55
+ ```typescript
56
+ // Create IOC container instance
57
+ const clientIOC = new ClientIOC();
58
+ const ioc = clientIOC.create();
59
+ ```
60
+
61
+ 2. **Register Dependencies**
62
+ - Register global dependencies and services through `ClientIOCRegister`
63
+ - Mainly includes three types of registration:
64
+
65
+ ```typescript
66
+ // 1. Register global dependencies
67
+ registerGlobals(ioc: IOCContainerInterface) {
68
+ ioc.bind(I.JSONSerializer, JSON);
69
+ ioc.bind(I.Logger, logger);
70
+ ioc.bind(I.AppConfig, appConfig);
71
+ ioc.bind(I.DialogHandler, dialogHandler);
72
+ }
73
+
74
+ // 2. Register core service implementations
75
+ registerImplement(ioc: IOCContainerInterface) {
76
+ ioc.bind(I.I18nServiceInterface, new I18nService());
77
+ ioc.bind(I.RouterServiceInterface, ioc.get(RouterService));
78
+ ioc.bind(I.UserServiceInterface, ioc.get(UserService));
79
+ }
80
+
81
+ // 3. Register common services and plugins
82
+ registerCommon(ioc: IOCContainerInterface) {
83
+ // Register request plugins, Mock plugins, etc.
84
+ }
85
+ ```
86
+
87
+ 3. **Start Application**
88
+
89
+ ```typescript
90
+ export class BootstrapClient {
91
+ static async main(args: BootstrapAppArgs) {
92
+ const bootstrap = new Bootstrap({
93
+ root,
94
+ logger,
95
+ ioc: { manager: IOC },
96
+ globalOptions: { sources: globals }
97
+ });
98
+
99
+ // Initialize bootstrapper
100
+ await bootstrap.initialize();
101
+
102
+ // Register bootstrap plugins
103
+ const bootstrapsRegistry = new BootstrapsRegistry(args);
104
+ await bootstrap.use(bootstrapsRegistry.register()).start();
105
+ }
106
+ }
107
+ ```
108
+
109
+ 4. **Bootstrap Plugin Registration**
110
+ ```typescript
111
+ class BootstrapsRegistry {
112
+ register(): BootstrapExecutorPlugin[] {
113
+ return [
114
+ i18nService, // Internationalization service
115
+ new AppUserApiBootstrap(), // User API
116
+ printBootstrap, // Development environment printing
117
+ IocIdentifierTest // IOC identifier test
118
+ ];
119
+ }
120
+ }
121
+ ```
122
+
123
+ #### 2.2 Server Bootstrap Process
124
+
125
+ The server bootstrap process is handled by the `BootstrapServer` class, mainly including the following steps:
126
+
127
+ 1. **Initialize IOC Container**
128
+
129
+ ```typescript
130
+ export class ServerIOC {
131
+ static create(): ServerIOC {
132
+ if (this.instance) return this.instance;
133
+ this.instance = new ServerIOC();
134
+ return this.instance;
135
+ }
136
+
137
+ create() {
138
+ this.ioc = createIOCFunction<IOCIdentifierMapServer>(
139
+ new InversifyContainer()
140
+ );
141
+ const register = new ServerIOCRegister({
142
+ appConfig: new AppConfig()
143
+ });
144
+ register.register(this.ioc.implemention!, this.ioc);
145
+ return this.ioc;
146
+ }
147
+ }
148
+ ```
149
+
150
+ 2. **Register Server Dependencies**
151
+ - Register server-specific dependencies through `ServerIOCRegister`:
152
+
153
+ ```typescript
154
+ class ServerIOCRegister {
155
+ // 1. Register global dependencies
156
+ registerGlobals(ioc: IOCContainerInterface) {
157
+ ioc.bind(I.AppConfig, appConfig);
158
+ ioc.bind(
159
+ I.Logger,
160
+ new Logger({
161
+ handlers: new ConsoleHandler(new TimestampFormatter()),
162
+ level: appConfig.env === 'development' ? 'debug' : 'info'
163
+ })
164
+ );
165
+ }
166
+
167
+ // 2. Register server implementations
168
+ registerImplement(ioc: IOCContainerInterface) {
169
+ ioc.bind(I.DBBridgeInterface, ioc.get(SupabaseBridge));
170
+ }
171
+ }
172
+ ```
173
+
174
+ 3. **Server Startup**
175
+
176
+ ```typescript
177
+ export class BootstrapServer implements ServerInterface {
178
+ constructor() {
179
+ const serverIOC = ServerIOC.create();
180
+ const ioc = serverIOC.create();
181
+ const logger = ioc(I.Logger);
182
+
183
+ this.executor = new AsyncExecutor();
184
+ this.IOC = ioc;
185
+ this.logger = logger;
186
+ }
187
+
188
+ // Register server plugins
189
+ use(plugin: BootstrapExecutorPlugin): this {
190
+ this.executor.use(plugin);
191
+ return this;
192
+ }
193
+
194
+ // Execute startup tasks
195
+ execNoError(task?: PromiseTask) {
196
+ const context = {
197
+ logger: this.logger,
198
+ root: this.root,
199
+ ioc: this.IOC.implemention!,
200
+ IOC: this.IOC
201
+ };
202
+ return this.executor.execNoError(context, task);
203
+ }
204
+ }
205
+ ```
206
+
207
+ ### 3. IOC Container Usage
208
+
209
+ #### 3.1 Get Service Instance
210
+
211
+ ```typescript
212
+ // Use in components
213
+ function UserProfile() {
214
+ const userService = IOC(UserService);
215
+ const i18nService = IOC(I.I18nServiceInterface);
216
+
217
+ // Use services...
218
+ }
219
+ ```
220
+
221
+ #### 3.2 Register New Service
222
+
223
+ ```typescript
224
+ // 1. Define service interface
225
+ interface MyServiceInterface {
226
+ doSomething(): void;
227
+ }
228
+
229
+ // 2. Add IOC identifier
230
+ export const IOCIdentifier = {
231
+ MyService: Symbol('MyService')
232
+ } as const;
233
+
234
+ // 3. Implement service
235
+ @injectable()
236
+ class MyService implements MyServiceInterface {
237
+ doSomething() {
238
+ // Implementation...
239
+ }
240
+ }
241
+
242
+ // 4. Register in IOC registrar
243
+ class ClientIOCRegister {
244
+ registerImplement(ioc: IOCContainerInterface) {
245
+ ioc.bind(I.MyService, ioc.get(MyService));
246
+ }
247
+ }
248
+ ```
249
+
250
+ ### 2. Naming Conventions
251
+
252
+ - **File Naming**:
253
+ - Component files: `PascalCase.tsx` (e.g., `UserProfile.tsx`)
254
+ - Utility files: `camelCase.ts` (e.g., `formatDate.ts`)
255
+ - Type files: `PascalCase.types.ts` (e.g., `User.types.ts`)
256
+ - Style files: `camelCase.css` (e.g., `buttonStyles.css`)
257
+
258
+ - **Directory Naming**:
259
+ - All lowercase, using hyphens (e.g., `user-profile/`)
260
+ - Feature modules use singular form (e.g., `auth/`, not `auths/`)
261
+
262
+ ## Code Style Guidelines
263
+
264
+ > 💡 These are just basic guidelines. For more TypeScript and React development guidelines, please refer to [TypeScript Development Guidelines](./typescript-guide.md)
265
+
266
+ ### 1. TypeScript Guidelines
267
+
268
+ ```typescript
269
+ // Use interface for object types
270
+ interface UserProfile {
271
+ id: string;
272
+ name: string;
273
+ age?: number; // Optional properties use ?
274
+ }
275
+
276
+ // Use type for union types or utility types
277
+ type Theme = 'light' | 'dark' | 'pink';
278
+ type Nullable<T> = T | null;
279
+
280
+ // Use enum for constant enumerations
281
+ enum UserRole {
282
+ ADMIN = 'ADMIN',
283
+ USER = 'USER',
284
+ GUEST = 'GUEST'
285
+ }
286
+
287
+ // Function type declarations
288
+ function processUser(user: UserProfile): void {
289
+ // Implementation
290
+ }
291
+
292
+ // Use meaningful names for generics
293
+ interface Repository<TEntity> {
294
+ find(id: string): Promise<TEntity>;
295
+ }
296
+ ```
297
+
298
+ ### 2. React Guidelines
299
+
300
+ ```tsx
301
+ // Use FC type for function components
302
+ interface Props {
303
+ name: string;
304
+ age: number;
305
+ }
306
+
307
+ const UserCard: FC<Props> = ({ name, age }) => {
308
+ return (
309
+ <div>
310
+ <h3>{name}</h3>
311
+ <p>{age}</p>
312
+ </div>
313
+ );
314
+ };
315
+
316
+ // Hooks guidelines
317
+ const useUser = (userId: string) => {
318
+ const [user, setUser] = useState<UserProfile | null>(null);
319
+ const [loading, setLoading] = useState(false);
320
+
321
+ useEffect(() => {
322
+ // Implementation
323
+ }, [userId]);
324
+
325
+ return { user, loading };
326
+ };
327
+ ```
328
+
329
+ ## Component Development Guidelines
330
+
331
+ > 💡 These are just basic guidelines. For complete component development guide, please refer to [Component Development Guide](./component-guide.md)
332
+
333
+ ### 1. Component Categories
334
+
335
+ - **Page Components**: Located in `pages/` directory
336
+ - **Business Components**: Located in corresponding business module directory
337
+ - **Common Components**: Located in `uikit/components/` directory
338
+ - **Layout Components**: Located in `uikit/layouts/` directory
339
+
340
+ ### 2. Component Implementation
341
+
342
+ ```tsx
343
+ // 1. Import order
344
+ import { FC, useEffect, useState } from 'react'; // React related
345
+ import { useTranslation } from 'react-i18next'; // Third-party libraries
346
+ import { UserService } from '@/services/user'; // Internal project imports
347
+ import { Button } from './Button'; // Relative path imports
348
+
349
+ // 2. Type definitions
350
+ interface Props {
351
+ userId: string;
352
+ onUpdate?: (user: User) => void;
353
+ }
354
+
355
+ // 3. Component implementation
356
+ export const UserProfile: FC<Props> = ({ userId, onUpdate }) => {
357
+ // 3.1 Hooks declarations
358
+ const { t } = useTranslation();
359
+ const [user, setUser] = useState<User | null>(null);
360
+
361
+ // 3.2 Side effects
362
+ useEffect(() => {
363
+ // Implementation
364
+ }, [userId]);
365
+
366
+ // 3.3 Event handlers
367
+ const handleUpdate = () => {
368
+ // Implementation
369
+ };
370
+
371
+ // 3.4 Render methods
372
+ const renderHeader = () => {
373
+ return <h2>{user?.name}</h2>;
374
+ };
375
+
376
+ // 3.5 Return JSX
377
+ return (
378
+ <div>
379
+ {renderHeader()}
380
+ <Button onClick={handleUpdate}>{t('common.update')}</Button>
381
+ </div>
382
+ );
383
+ };
384
+ ```
385
+
386
+ ## State Management Guidelines
387
+
388
+ > 💡 These are just basic guidelines. For complete state management guide, please refer to [Store Development Guide](./store.md)
389
+
390
+ ### 1. Store Implementation
391
+
392
+ ```typescript
393
+ // 1. State interface definition
394
+ interface UserState extends StoreStateInterface {
395
+ currentUser: User | null;
396
+ loading: boolean;
397
+ error: string | null;
398
+ }
399
+
400
+ // 2. Store implementation
401
+ @injectable()
402
+ export class UserStore extends StoreInterface<UserState> {
403
+ constructor() {
404
+ super(() => ({
405
+ currentUser: null,
406
+ loading: false,
407
+ error: null
408
+ }));
409
+ }
410
+
411
+ // 3. Selector definitions
412
+ selector = {
413
+ currentUser: (state: UserState) => state.currentUser,
414
+ loading: (state: UserState) => state.loading
415
+ };
416
+
417
+ // 4. Operation methods
418
+ async fetchUser(id: string) {
419
+ try {
420
+ this.emit({ ...this.state, loading: true });
421
+ const user = await api.getUser(id);
422
+ this.emit({ ...this.state, currentUser: user, loading: false });
423
+ } catch (error) {
424
+ this.emit({
425
+ ...this.state,
426
+ error: error.message,
427
+ loading: false
428
+ });
429
+ }
430
+ }
431
+ }
432
+ ```
433
+
434
+ ### 2. Store Usage
435
+
436
+ ```tsx
437
+ function UserProfile() {
438
+ const userStore = IOC(UserStore);
439
+ const user = useStore(userStore, userStore.selector.currentUser);
440
+ const loading = useStore(userStore, userStore.selector.loading);
441
+
442
+ return <div>{loading ? <Loading /> : <UserInfo user={user} />}</div>;
443
+ }
444
+ ```
445
+
446
+ ## Router Development Guidelines
447
+
448
+ > 💡 These are just basic guidelines. For complete router development guide, please refer to [Router Development Guide](./router.md)
449
+
450
+ ### 1. Basic Guidelines
451
+
452
+ - Router configuration centrally managed in `config/app.router.ts`
453
+ - Use declarative router configuration
454
+ - Router components placed in `pages` directory
455
+ - Support route-level code splitting
456
+ - Router configuration includes metadata support
457
+
458
+ ### 2. Example
459
+
460
+ ```typescript
461
+ // Router configuration example
462
+ export const baseRoutes: RouteConfigValue[] = [
463
+ {
464
+ path: '/:lng',
465
+ element: 'base/Layout',
466
+ meta: {
467
+ category: 'main'
468
+ },
469
+ children: [
470
+ {
471
+ path: 'users',
472
+ element: 'users/UserList',
473
+ meta: {
474
+ title: i18nKeys.PAGE_USERS_TITLE,
475
+ auth: true
476
+ }
477
+ }
478
+ ]
479
+ }
480
+ ];
481
+ ```
482
+
483
+ For more router configuration and usage examples, please refer to [Router Development Guide](./router.md).
484
+
485
+ ## Internationalization Guidelines
486
+
487
+ > 💡 These are just basic guidelines. For complete internationalization guide, please refer to [Internationalization Guide](./i18n.md)
488
+
489
+ ### 1. Basic Guidelines
490
+
491
+ - Use identifier constants for translation keys
492
+ - Generate translation resources through TypeScript comments
493
+ - Support multi-language routing
494
+ - Centrally manage translation files
495
+
496
+ ### 2. Example
497
+
498
+ ```typescript
499
+ /**
500
+ * @description User list page title
501
+ * @localZh 用户列表
502
+ * @localEn User List
503
+ */
504
+ export const PAGE_USERS_TITLE = 'page.users.title';
505
+ ```
506
+
507
+ For more internationalization configuration and usage examples, please refer to [Internationalization Guide](./i18n.md).
508
+
509
+ ## Theme Style Guidelines
510
+
511
+ > 💡 These are just basic guidelines. For complete theme development guide, please refer to [Theme Development Guide](./theme.md)
512
+
513
+ ### 1. Basic Guidelines
514
+
515
+ - Use CSS variables for theme management
516
+ - Follow Tailwind CSS usage guidelines
517
+ - Modularize component styles
518
+ - Support multi-theme switching
519
+
520
+ ### 2. Example
521
+
522
+ ```css
523
+ :root {
524
+ --color-brand: 37 99 235;
525
+ --text-primary: 15 23 42;
526
+ }
527
+ ```
528
+
529
+ For more theme configuration and usage examples, please refer to [Theme Development Guide](./theme.md).
530
+
531
+ ## Testing Guidelines
532
+
533
+ > 💡 These are just basic guidelines. For complete testing guide, please refer to [Testing Guide](./testing.md)
534
+
535
+ ### 1. Basic Guidelines
536
+
537
+ - Unit tests cover core logic
538
+ - Component tests focus on interaction and rendering
539
+ - Use Jest and Testing Library
540
+ - Keep tests simple and maintainable
541
+
542
+ ### 2. Example
543
+
544
+ ```typescript
545
+ describe('UserProfile', () => {
546
+ it('should render user info', () => {
547
+ const user = { id: '1', name: 'Test' };
548
+ render(<UserProfile user={user} />);
549
+ expect(screen.getByText(user.name)).toBeInTheDocument();
550
+ });
551
+ });
552
+ ```
553
+
554
+ For more testing examples and best practices, please refer to [Testing Guide](./testing.md).
555
+
556
+ ## Documentation Guidelines
557
+
558
+ > 💡 These are just basic guidelines. For complete documentation writing guide, please refer to [Documentation Writing Guide](./documentation.md)
559
+
560
+ ### 1. Code Comments
561
+
562
+ ```typescript
563
+ /**
564
+ * User Service
565
+ *
566
+ * @description Handles user-related business logic
567
+ * @example
568
+ * const userService = IOC(UserService);
569
+ * await userService.login(credentials);
570
+ */
571
+ @injectable()
572
+ export class UserService {
573
+ /**
574
+ * User login
575
+ *
576
+ * @param credentials - Login credentials
577
+ * @returns Logged in user information
578
+ * @throws {AuthError} Thrown when authentication fails
579
+ */
580
+ async login(credentials: Credentials): Promise<User> {
581
+ // Implementation
582
+ }
583
+ }
584
+ ```
585
+
586
+ ### 2. Documentation Structure
587
+
588
+ - **README.md**: Project overview, installation instructions, quick start
589
+ - **docs/**:
590
+ - `zh/`: Chinese documentation
591
+ - `en/`: English documentation
592
+ - Organize documentation files by functional modules
593
+
594
+ ### 3. Documentation Format
595
+
596
+ ```markdown
597
+ # Module Name
598
+
599
+ ## Overview
600
+
601
+ Brief explanation of module functionality and purpose.
602
+
603
+ ## Usage
604
+
605
+ Code examples and usage instructions.
606
+
607
+ ## API Documentation
608
+
609
+ Detailed API descriptions.
610
+
611
+ ## Best Practices
612
+
613
+ Usage suggestions and considerations.
614
+ ```
615
+
616
+ ## Git Commit Guidelines
617
+
618
+ > 💡 These are just basic guidelines. For complete Git workflow, please refer to [Git Workflow Guide](./git-workflow.md)
619
+
620
+ ### 1. Commit Message Format
621
+
622
+ ```
623
+ <type>(<scope>): <subject>
624
+
625
+ <body>
626
+
627
+ <footer>
628
+ ```
629
+
630
+ - **type**:
631
+ - `feat`: New feature
632
+ - `fix`: Bug fix
633
+ - `docs`: Documentation updates
634
+ - `style`: Code formatting (changes that do not affect code execution)
635
+ - `refactor`: Code refactoring
636
+ - `test`: Adding tests
637
+ - `chore`: Build process or auxiliary tool changes
638
+
639
+ - **scope**: Impact scope (optional)
640
+ - **subject**: Brief description
641
+ - **body**: Detailed description (optional)
642
+ - **footer**: Breaking changes, issue closure (optional)
643
+
644
+ ### 2. Example
645
+
646
+ ```
647
+ feat(auth): add user role management functionality
648
+
649
+ - Add role creation and editing interface
650
+ - Implement role permission configuration
651
+ - Add role assignment functionality
652
+
653
+ Closes #123
654
+ ```
655
+
656
+ ## Performance Optimization Guidelines
657
+
658
+ > 💡 These are just basic guidelines. For complete performance optimization guide, please refer to [Performance Optimization Guide](./performance.md)
659
+
660
+ ### 1. Code Splitting
661
+
662
+ ```typescript
663
+ // Route-level code splitting
664
+ const UserModule = lazy(() => import('./pages/users'));
665
+
666
+ // Component-level code splitting
667
+ const HeavyComponent = lazy(() => import('./components/Heavy'));
668
+ ```
669
+
670
+ ### 2. Performance Considerations
671
+
672
+ ```typescript
673
+ // Use useMemo to cache computation results
674
+ const sortedUsers = useMemo(() => {
675
+ return users.sort((a, b) => a.name.localeCompare(b.name));
676
+ }, [users]);
677
+
678
+ // Use useCallback to cache functions
679
+ const handleUpdate = useCallback(() => {
680
+ // Implementation
681
+ }, [dependencies]);
682
+
683
+ // Use React.memo to avoid unnecessary re-renders
684
+ const UserCard = React.memo(({ user }) => {
685
+ return <div>{user.name}</div>;
686
+ });
687
+ ```
688
+
689
+ ## Security Guidelines
690
+
691
+ > 💡 These are just basic guidelines. For complete security development guide, please refer to [Security Development Guide](./security.md)
692
+
693
+ ### 1. Data Handling
694
+
695
+ ```typescript
696
+ // Sensitive data encryption
697
+ const encryptedData = encrypt(sensitiveData);
698
+
699
+ // XSS protection
700
+ const sanitizedHtml = sanitizeHtml(userInput);
701
+
702
+ // CSRF protection
703
+ api.defaults.headers['X-CSRF-Token'] = getCsrfToken();
704
+ ```
705
+
706
+ ### 2. Access Control
707
+
708
+ ```typescript
709
+ // Route permissions
710
+ const PrivateRoute: FC = ({ children }) => {
711
+ const auth = useAuth();
712
+ return auth.isAuthenticated ? children : <Navigate to="/login" />;
713
+ };
714
+
715
+ // Operation permissions
716
+ function AdminPanel() {
717
+ const { hasPermission } = useAuth();
718
+
719
+ return (
720
+ <div>
721
+ {hasPermission('ADMIN') && (
722
+ <button>Admin Operation</button>
723
+ )}
724
+ </div>
725
+ );
726
+ }
727
+ ```