@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
@@ -0,0 +1,40 @@
1
+ import { useFactory } from '@brain-toolkit/react-kit';
2
+ import { chatMessageI18n } from '@config/i18n/chatMessageI18n';
3
+ import {
4
+ ChatMessageStore,
5
+ ChatSenderStrategy,
6
+ SendFailureStrategy
7
+ } from '@qlover/corekit-bridge';
8
+ import { useState } from 'react';
9
+ import { logger } from '@/core/globals';
10
+ import { ChatMessageBridge } from '@/uikit/components/chatMessage/ChatMessageBridge';
11
+ import { ChatRoot } from '@/uikit/components/chatMessage/ChatRoot';
12
+ import { MessageApi } from '@/uikit/components/chatMessage/MessageApi';
13
+ import { MessageBaseList } from '@/uikit/components/MessageBaseList';
14
+ import { useI18nInterface } from '@/uikit/hooks/useI18nInterface';
15
+
16
+ export default function MessagePage() {
17
+ const tt = useI18nInterface(chatMessageI18n);
18
+ const messagesStore = useFactory(ChatMessageStore<string>);
19
+ const messageApi = useFactory(MessageApi, messagesStore);
20
+
21
+ const [bridge] = useState(() => {
22
+ return new ChatMessageBridge<string>(messagesStore, {
23
+ gateway: messageApi,
24
+ logger: logger,
25
+ senderName: 'ChatSender',
26
+ gatewayOptions: { stream: true }
27
+ }).use(new ChatSenderStrategy(SendFailureStrategy.KEEP_FAILED, logger));
28
+ });
29
+
30
+ return (
31
+ <div
32
+ data-testid="MessagePage"
33
+ className="min-h-screen bg-primary py-8 px-4 sm:px-6 lg:px-8"
34
+ >
35
+ <MessageBaseList />
36
+
37
+ <ChatRoot bridge={bridge} tt={tt} />
38
+ </div>
39
+ );
40
+ }
@@ -1,14 +1,15 @@
1
- import { IOC } from '@/core/IOC';
2
1
  import { IOCIdentifier } from '@config/IOCIdentifier';
3
2
  import { useEffect } from 'react';
4
3
  import { useNavigate } from 'react-router-dom';
4
+ import { useIOC } from '@/uikit/hooks/useIOC';
5
5
 
6
6
  const RedirectToDefault = () => {
7
7
  const navigate = useNavigate();
8
+ const routeService = useIOC(IOCIdentifier.RouteServiceInterface);
8
9
 
9
10
  useEffect(() => {
10
11
  // Redirect to the default language path
11
- IOC(IOCIdentifier.RouteServiceInterface).redirectToDefault(navigate);
12
+ routeService.redirectToDefault(navigate);
12
13
  }, [navigate]);
13
14
 
14
15
  return null;
@@ -1,11 +1,11 @@
1
- import { IOC } from '@/core/IOC';
2
- import { useBaseRoutePage } from '@/uikit/contexts/BaseRouteContext';
3
- import { useMemo } from 'react';
4
- import { useStore } from '@/uikit/hooks/useStore';
5
- import { Button } from 'antd';
6
1
  import { LoadingOutlined } from '@ant-design/icons';
7
- import * as i18nKeys from '@config/Identifier/page.request';
2
+ import { useStore } from '@brain-toolkit/react-kit/hooks/useStore';
3
+ import { request18n } from '@config/i18n/request18n';
8
4
  import { IOCIdentifier } from '@config/IOCIdentifier';
5
+ import { Button } from 'antd';
6
+ import { useMemo } from 'react';
7
+ import { useI18nInterface } from '@/uikit/hooks/useI18nInterface';
8
+ import { useIOC } from '@/uikit/hooks/useIOC';
9
9
 
10
10
  function JSONValue({ value }: { value: unknown }) {
11
11
  const output = useMemo(() => {
@@ -16,27 +16,31 @@ function JSONValue({ value }: { value: unknown }) {
16
16
  }
17
17
  }, [value]);
18
18
  return (
19
- <pre className="mt-1 text-sm text-text-secondary font-mono bg-secondary p-2 rounded overflow-x-auto">
19
+ <pre
20
+ data-testid="JSONValue"
21
+ className="mt-1 text-sm text-text-secondary font-mono bg-secondary p-2 rounded overflow-x-auto"
22
+ >
20
23
  {output}
21
24
  </pre>
22
25
  );
23
26
  }
24
27
 
25
28
  export default function RequestPage() {
26
- const pageBridge = IOC(IOCIdentifier.RequestPageBridgeInterface);
29
+ const pageBridge = useIOC(IOCIdentifier.RequestPageBridgeInterface);
27
30
  const pageState = useStore(pageBridge);
28
- const jsonStoragePageBridge = IOC(IOCIdentifier.JSONStoragePageInterface);
31
+ const jsonStoragePageBridge = useIOC(IOCIdentifier.JSONStoragePageInterface);
29
32
  const jsonStoragePageState = useStore(jsonStoragePageBridge);
30
- const { t } = useBaseRoutePage();
33
+ const tt = useI18nInterface(request18n);
31
34
 
32
35
  return (
33
- <div className="min-h-screen bg-primary py-8 px-4 sm:px-6 lg:px-8">
36
+ <div
37
+ data-testid="RequestPage"
38
+ className="min-h-screen bg-primary py-8 px-4 sm:px-6 lg:px-8"
39
+ >
34
40
  <div className="max-w-4xl mx-auto space-y-6">
35
41
  {/* Request Timeout Information */}
36
42
  <div className="bg-secondary shadow sm:rounded-lg p-6 border border-primary">
37
- <h2 className="text-lg font-medium text-text mb-2">
38
- {t(i18nKeys.PAGE_REQUEST_TIMEOUT)}
39
- </h2>
43
+ <h2 className="text-lg font-medium text-text mb-2">{tt.timeout}</h2>
40
44
  <div className="text-sm text-text-secondary font-mono bg-base p-2 rounded">
41
45
  {jsonStoragePageState.requestTimeout}
42
46
  </div>
@@ -45,34 +49,28 @@ export default function RequestPage() {
45
49
  {/* Hello Request Card */}
46
50
  <div className="bg-secondary shadow sm:rounded-lg p-6 border border-primary hover:bg-elevated transition-colors duration-200">
47
51
  <h2 className="text-lg font-medium text-text mb-4">
48
- {t(i18nKeys.PAGE_REQUEST_HELLO_TITLE)}
52
+ {tt.helloTitle}
49
53
  </h2>
50
54
 
51
55
  <p className="text-sm text-text-secondary mb-4">
52
- {t(i18nKeys.PAGE_REQUEST_HELLO_DESCRIPTION)}
56
+ {tt.helloDescription}
53
57
  </p>
54
58
  <Button
55
59
  type="primary"
56
60
  onClick={pageBridge.onHello}
57
61
  loading={pageState.helloState.loading}
58
62
  >
59
- {pageState.helloState.loading
60
- ? t(i18nKeys.REQUEST_LOADING)
61
- : t(i18nKeys.PAGE_REQUEST_HELLO_BUTTON)}
63
+ {pageState.helloState.loading ? tt.loading : tt.helloButton}
62
64
  </Button>
63
65
 
64
66
  <div className="mt-4 space-y-2">
65
67
  <div>
66
- <p className="text-sm font-medium text-text">
67
- {t(i18nKeys.REQUEST_HELLO_RESULT)}:
68
- </p>
68
+ <p className="text-sm font-medium text-text">{tt.helloResult}:</p>
69
69
  <JSONValue value={pageState.helloState.result} />
70
70
  </div>
71
71
 
72
72
  <div>
73
- <p className="text-sm font-medium text-text">
74
- {t(i18nKeys.REQUEST_HELLO_ERROR)}:
75
- </p>
73
+ <p className="text-sm font-medium text-text">{tt.helloError}:</p>
76
74
  <JSONValue value={pageState.helloState.error} />
77
75
  </div>
78
76
  </div>
@@ -81,26 +79,22 @@ export default function RequestPage() {
81
79
  {/* IP Information Card */}
82
80
  <div className="bg-secondary shadow sm:rounded-lg p-6 border border-primary hover:bg-elevated transition-colors duration-200">
83
81
  <h2 className="text-lg font-medium text-text mb-4">
84
- {t(i18nKeys.PAGE_REQUEST_IP_INFO_TITLE)}
82
+ {tt.ipInfoTitle}
85
83
  </h2>
86
84
 
87
85
  <p className="text-sm text-text-secondary mb-4">
88
- {t(i18nKeys.PAGE_REQUEST_IP_INFO_DESCRIPTION)}
86
+ {tt.ipInfoDescription}
89
87
  </p>
90
88
  <Button
91
89
  type="primary"
92
90
  onClick={pageBridge.onIpInfo}
93
91
  loading={pageState.ipInfoState.loading}
94
92
  >
95
- {pageState.ipInfoState.loading
96
- ? t(i18nKeys.REQUEST_LOADING)
97
- : t(i18nKeys.REQUEST_IP_INFO)}
93
+ {pageState.ipInfoState.loading ? tt.loading : tt.ipInfo}
98
94
  </Button>
99
95
 
100
96
  <div className="mt-4">
101
- <p className="text-sm font-medium text-text">
102
- {t(i18nKeys.REQUEST_IP_INFO_RESULT)}:
103
- </p>
97
+ <p className="text-sm font-medium text-text">{tt.ipInfoResult}:</p>
104
98
  <JSONValue value={pageState.ipInfoState.result} />
105
99
  </div>
106
100
  </div>
@@ -108,32 +102,30 @@ export default function RequestPage() {
108
102
  {/* Random User Card */}
109
103
  <div className="bg-secondary shadow sm:rounded-lg p-6 border border-primary hover:bg-elevated transition-colors duration-200">
110
104
  <h2 className="text-lg font-medium text-text mb-4">
111
- {t(i18nKeys.PAGE_REQUEST_RANDOM_USER_TITLE)}
105
+ {tt.randomUserTitle}
112
106
  </h2>
113
107
  <p className="text-sm text-text-secondary mb-4">
114
- {t(i18nKeys.PAGE_REQUEST_RANDOM_USER_DESCRIPTION)}
108
+ {tt.randomUserDescription}
115
109
  </p>
116
110
  <Button
117
111
  type="primary"
118
112
  onClick={pageBridge.onRandomUser}
119
113
  loading={pageState.randomUserState.loading}
120
114
  >
121
- {pageState.randomUserState.loading
122
- ? t(i18nKeys.REQUEST_LOADING)
123
- : t(i18nKeys.REQUEST_RANDOM_USER)}
115
+ {pageState.randomUserState.loading ? tt.loading : tt.randomUser}
124
116
  </Button>
125
117
 
126
118
  <div className="mt-4 space-y-2">
127
119
  <div>
128
120
  <p className="text-sm font-medium text-text">
129
- {t(i18nKeys.REQUEST_RANDOM_USER_RESULT)}:
121
+ {tt.randomUserResult}:
130
122
  </p>
131
123
  <JSONValue value={pageState.randomUserState.result} />
132
124
  </div>
133
125
 
134
126
  <div>
135
127
  <p className="text-sm font-medium text-text">
136
- {t(i18nKeys.REQUEST_RANDOM_USER_ERROR)}:
128
+ {tt.randomUserError}:
137
129
  </p>
138
130
  <JSONValue value={pageState.randomUserState.error} />
139
131
  </div>
@@ -143,7 +135,7 @@ export default function RequestPage() {
143
135
  {/* Api catch result */}
144
136
  <div className="bg-secondary shadow sm:rounded-lg p-6 border border-primary hover:bg-elevated transition-colors duration-200">
145
137
  <h2 className="text-lg font-medium text-text mb-4">
146
- {t(i18nKeys.PAGE_REQUEST_API_CATCH_TITLE)}
138
+ {tt.apiCatchTitle}
147
139
  </h2>
148
140
  <Button
149
141
  type={pageState.apiCatchResultState.loading ? 'primary' : 'primary'}
@@ -152,22 +144,18 @@ export default function RequestPage() {
152
144
  loading={pageState.apiCatchResultState.loading}
153
145
  >
154
146
  {pageState.apiCatchResultState.loading
155
- ? t(i18nKeys.PAGE_REQUEST_STOP_API_CATCH)
156
- : t(i18nKeys.PAGE_REQUEST_TRIGGER_API_CATCH)}
147
+ ? tt.stopAbort
148
+ : tt.triggerApiCatch}
157
149
  </Button>
158
150
 
159
151
  <div className="mt-4 space-y-2">
160
152
  <div>
161
- <p className="text-sm font-medium text-text">
162
- {t(i18nKeys.REQUEST_ABORT_RESULT)}:
163
- </p>
153
+ <p className="text-sm font-medium text-text">{tt.abortResult}:</p>
164
154
  <JSONValue value={pageState.apiCatchResultState.result} />
165
155
  </div>
166
156
 
167
157
  <div>
168
- <p className="text-sm font-medium text-text">
169
- {t(i18nKeys.REQUEST_ABORT_ERROR)}:
170
- </p>
158
+ <p className="text-sm font-medium text-text">{tt.abortError}:</p>
171
159
  <JSONValue value={pageState.apiCatchResultState.error} />
172
160
  </div>
173
161
  </div>
@@ -176,7 +164,7 @@ export default function RequestPage() {
176
164
  {/* Abort Request Card */}
177
165
  <div className="bg-secondary shadow sm:rounded-lg p-6 border border-primary hover:bg-elevated transition-colors duration-200">
178
166
  <h2 className="text-lg font-medium text-text mb-4">
179
- {t(i18nKeys.PAGE_REQUEST_ABORT_TITLE)}
167
+ {tt.abortTitle}
180
168
  </h2>
181
169
  <Button
182
170
  type={pageState.abortState.loading ? 'primary' : 'primary'}
@@ -184,23 +172,17 @@ export default function RequestPage() {
184
172
  onClick={pageBridge.onTriggerAbortRequest}
185
173
  >
186
174
  {pageState.abortState.loading && <LoadingOutlined />}
187
- {pageState.abortState.loading
188
- ? t(i18nKeys.PAGE_REQUEST_STOP_ABORT)
189
- : t(i18nKeys.PAGE_REQUEST_TRIGGER_ABORT)}
175
+ {pageState.abortState.loading ? tt.stopAbort : tt.triggerAbort}
190
176
  </Button>
191
177
 
192
178
  <div className="mt-4 space-y-2">
193
179
  <div>
194
- <p className="text-sm font-medium text-text">
195
- {t(i18nKeys.REQUEST_ABORT_RESULT)}:
196
- </p>
180
+ <p className="text-sm font-medium text-text">{tt.abortResult}:</p>
197
181
  <JSONValue value={pageState.abortState.result} />
198
182
  </div>
199
183
 
200
184
  <div>
201
- <p className="text-sm font-medium text-text">
202
- {t(i18nKeys.REQUEST_ABORT_ERROR)}:
203
- </p>
185
+ <p className="text-sm font-medium text-text">{tt.abortError}:</p>
204
186
  <JSONValue value={pageState.abortState.error} />
205
187
  </div>
206
188
  </div>
@@ -44,6 +44,7 @@ html,
44
44
  --fe-color-text-tertiary: rgba(15 23 42 / 0.35);
45
45
  --fe-color-text-quaternary: rgba(15 23 42 / 0.15);
46
46
  --fe-color-text-placeholder: rgba(15 23 42 / 0.25);
47
+ --fe-color-text-disabled: rgba(15 23 42 / 0.25); /* 禁用状态文本颜色 */
47
48
  --fe-color-border: rgb(226 232 240);
48
49
 
49
50
  /* Antd 组件通用变量 */
@@ -236,4 +237,88 @@ html,
236
237
  --fe-message-info-color: var(--fe-color-primary);
237
238
  --fe-message-loading-color: var(--fe-color-primary);
238
239
  }
240
+
241
+ .ant-dropdown-css-var {
242
+ /* Control Variables - Default Theme */
243
+ --fe-control-outline-width: 2px;
244
+ --fe-control-interactive-size: 16px;
245
+ --fe-control-item-bg-hover: rgba(0, 0, 0, 0.04);
246
+ --fe-control-item-bg-active: #e6f4ff;
247
+ --fe-control-item-bg-active-hover: #bae0ff;
248
+ --fe-control-item-bg-active-disabled: rgba(0, 0, 0, 0.15);
249
+ --fe-control-tmp-outline: rgba(0, 0, 0, 0.02);
250
+ --fe-control-outline: rgba(
251
+ 96,
252
+ 165,
253
+ 250,
254
+ 0.1
255
+ ); /* blue-400 with 0.1 opacity */
256
+ }
257
+
258
+ /* Antd Layout 组件变量 */
259
+ &.ant-layout-sider {
260
+ --fe-layout-color-bg-header: rgb(var(--color-bg-base));
261
+ --fe-layout-color-bg-body: rgb(var(--color-bg-secondary));
262
+ --fe-layout-color-bg-trigger: rgb(var(--color-bg-elevated));
263
+ --fe-layout-body-bg: rgb(var(--color-bg-secondary));
264
+ --fe-layout-header-bg: rgb(var(--color-bg-base));
265
+ --fe-layout-header-height: 64px;
266
+ --fe-layout-header-padding: 0 50px;
267
+ --fe-layout-header-color: rgb(var(--text-primary));
268
+ --fe-layout-footer-padding: 24px 50px;
269
+ --fe-layout-footer-bg: rgb(var(--color-bg-secondary));
270
+ --fe-layout-sider-bg: rgb(var(--color-bg-base));
271
+ --fe-layout-trigger-height: 48px;
272
+ --fe-layout-trigger-bg: rgb(var(--color-bg-elevated));
273
+ --fe-layout-trigger-color: rgb(var(--text-primary));
274
+ --fe-layout-zero-trigger-width: 40px;
275
+ --fe-layout-zero-trigger-height: 40px;
276
+ --fe-layout-light-sider-bg: rgb(var(--color-bg-base));
277
+ --fe-layout-light-trigger-bg: rgb(var(--color-bg-base));
278
+ --fe-layout-light-trigger-color: rgb(var(--text-primary));
279
+ }
280
+
281
+ /* 滚动条样式变量 */
282
+ --fe-scrollbar-size: 6px;
283
+ --fe-scrollbar-thumb-bg: rgba(15 23 42 / 0.2);
284
+ --fe-scrollbar-thumb-hover-bg: rgba(15 23 42 / 0.3);
285
+ --fe-scrollbar-track-bg: transparent;
286
+
287
+ /* 滚动条样式 */
288
+ ::-webkit-scrollbar {
289
+ width: var(--fe-scrollbar-size);
290
+ height: var(--fe-scrollbar-size);
291
+ }
292
+
293
+ ::-webkit-scrollbar-track {
294
+ background: var(--fe-scrollbar-track-bg);
295
+ border-radius: var(--fe-scrollbar-size);
296
+ }
297
+
298
+ ::-webkit-scrollbar-thumb {
299
+ background: var(--fe-scrollbar-thumb-bg);
300
+ border-radius: var(--fe-scrollbar-size);
301
+ }
302
+
303
+ ::-webkit-scrollbar-thumb:hover {
304
+ background: var(--fe-scrollbar-thumb-hover-bg);
305
+ }
306
+
307
+ ::-webkit-scrollbar-corner {
308
+ background: transparent;
309
+ }
310
+
311
+ /* 可选的细滚动条样式 */
312
+ .scrollbar-thin {
313
+ --fe-scrollbar-size: 4px;
314
+ }
315
+
316
+ /* 隐藏滚动条但保持可滚动 */
317
+ .scrollbar-hidden {
318
+ -ms-overflow-style: none;
319
+ scrollbar-width: none;
320
+ &::-webkit-scrollbar {
321
+ display: none;
322
+ }
323
+ }
239
324
  }
@@ -45,6 +45,12 @@
45
45
  --fe-color-text-tertiary: rgba(255, 255, 255, 0.35);
46
46
  --fe-color-text-quaternary: rgba(255, 255, 255, 0.15);
47
47
  --fe-color-text-placeholder: rgba(255, 255, 255, 0.25);
48
+ --fe-color-text-disabled: rgba(
49
+ 255,
50
+ 255,
51
+ 255,
52
+ 0.25
53
+ ); /* 暗色主题禁用状态文本颜色 */
48
54
  --fe-color-border: rgb(51 65 85);
49
55
 
50
56
  /* Antd 图标相关变量 */
@@ -175,4 +181,97 @@
175
181
  0.85
176
182
  ); /* 确保文字在深色背景上清晰可见 */
177
183
  }
184
+ .ant-dropdown-css-var {
185
+ /* Control Variables - Dark Theme */
186
+ --fe-control-outline-width: 2px;
187
+ --fe-control-interactive-size: 16px;
188
+ --fe-control-item-bg-hover: rgba(255, 255, 255, 0.08);
189
+ --fe-control-item-bg-active: rgba(
190
+ 96,
191
+ 165,
192
+ 250,
193
+ 0.2
194
+ ); /* blue-400 with 0.2 opacity */
195
+ --fe-control-item-bg-active-hover: rgba(
196
+ 96,
197
+ 165,
198
+ 250,
199
+ 0.3
200
+ ); /* blue-400 with 0.3 opacity */
201
+ --fe-control-item-bg-active-disabled: rgba(255, 255, 255, 0.15);
202
+ --fe-control-tmp-outline: rgba(255, 255, 255, 0.02);
203
+ --fe-control-outline: rgba(
204
+ 96,
205
+ 165,
206
+ 250,
207
+ 0.1
208
+ ); /* blue-400 with 0.1 opacity */
209
+ }
210
+
211
+ /* Antd Layout 组件变量 */
212
+ &.ant-layout-sider {
213
+ --fe-layout-color-bg-header: rgb(15 23 42);
214
+ --fe-layout-color-bg-body: rgb(30 41 59);
215
+ --fe-layout-color-bg-trigger: rgb(15 23 42);
216
+ --fe-layout-body-bg: rgb(30 41 59);
217
+ --fe-layout-header-bg: rgb(15 23 42);
218
+ --fe-layout-header-height: 64px;
219
+ --fe-layout-header-padding: 0 50px;
220
+ --fe-layout-header-color: rgb(var(--text-primary));
221
+ --fe-layout-footer-padding: 24px 50px;
222
+ --fe-layout-footer-bg: rgb(30 41 59);
223
+ --fe-layout-sider-bg: rgb(15 23 42);
224
+ --fe-layout-trigger-height: 48px;
225
+ --fe-layout-trigger-bg: rgb(15 23 42);
226
+ --fe-layout-trigger-color: rgb(255 255 255);
227
+ --fe-layout-zero-trigger-width: 40px;
228
+ --fe-layout-zero-trigger-height: 40px;
229
+ --fe-layout-light-sider-bg: rgb(30 41 59);
230
+ --fe-layout-light-trigger-bg: rgb(30 41 59);
231
+ --fe-layout-light-trigger-color: rgb(var(--text-primary));
232
+ }
233
+
234
+ /* 滚动条样式变量 */
235
+ --fe-scrollbar-size: 6px;
236
+ --fe-scrollbar-thumb-bg: rgba(255 255 255 / 0.2);
237
+ --fe-scrollbar-thumb-hover-bg: rgba(255 255 255 / 0.3);
238
+ --fe-scrollbar-track-bg: transparent;
239
+
240
+ /* 滚动条样式 */
241
+ ::-webkit-scrollbar {
242
+ width: var(--fe-scrollbar-size);
243
+ height: var(--fe-scrollbar-size);
244
+ }
245
+
246
+ ::-webkit-scrollbar-track {
247
+ background: var(--fe-scrollbar-track-bg);
248
+ border-radius: var(--fe-scrollbar-size);
249
+ }
250
+
251
+ ::-webkit-scrollbar-thumb {
252
+ background: var(--fe-scrollbar-thumb-bg);
253
+ border-radius: var(--fe-scrollbar-size);
254
+ }
255
+
256
+ ::-webkit-scrollbar-thumb:hover {
257
+ background: var(--fe-scrollbar-thumb-hover-bg);
258
+ }
259
+
260
+ ::-webkit-scrollbar-corner {
261
+ background: transparent;
262
+ }
263
+
264
+ /* 可选的细滚动条样式 */
265
+ .scrollbar-thin {
266
+ --fe-scrollbar-size: 4px;
267
+ }
268
+
269
+ /* 隐藏滚动条但保持可滚动 */
270
+ .scrollbar-hidden {
271
+ -ms-overflow-style: none;
272
+ scrollbar-width: none;
273
+ &::-webkit-scrollbar {
274
+ display: none;
275
+ }
276
+ }
178
277
  }
@@ -0,0 +1,3 @@
1
+ @import './_default.css';
2
+ @import './dark.css';
3
+ @import './pink.css';
@@ -43,6 +43,9 @@
43
43
  --ant-color-text-tertiary: rgba(190 18 60 / 0.35);
44
44
  --ant-color-text-quaternary: rgba(190 18 60 / 0.15);
45
45
  --ant-color-text-placeholder: rgba(190 18 60 / 0.25);
46
+ --fe-color-text-disabled: rgba(
47
+ 190 18 60 / 0.25
48
+ ); /* 粉色主题禁用状态文本颜色 */
46
49
  --ant-color-border: rgb(254 205 211);
47
50
 
48
51
  /* Antd 图标相关变量 */
@@ -201,4 +204,87 @@
201
204
  0 9px 28px 8px rgba(244, 114, 182, 0.05);
202
205
  --fe-modal-mask-bg: rgba(244, 114, 182, 0.45);
203
206
  }
207
+ .ant-dropdown-css-var {
208
+ /* Control Variables - Pink Theme */
209
+ --fe-control-outline-width: 2px;
210
+ --fe-control-interactive-size: 16px;
211
+ --fe-control-item-bg-hover: rgba(0, 0, 0, 0.04);
212
+ --fe-control-item-bg-active: #fce7f3; /* pink-100 */
213
+ --fe-control-item-bg-active-hover: #fbcfe8; /* pink-200 */
214
+ --fe-control-item-bg-active-disabled: rgba(0, 0, 0, 0.15);
215
+ --fe-control-tmp-outline: rgba(0, 0, 0, 0.02);
216
+ --fe-control-outline: rgba(
217
+ 244,
218
+ 114,
219
+ 182,
220
+ 0.1
221
+ ); /* pink-400 with 0.1 opacity */
222
+ }
223
+
224
+ /* Antd Layout 组件变量 */
225
+ &.ant-layout-sider {
226
+ --fe-layout-color-bg-header: var(--ant-color-bg-container);
227
+ --fe-layout-color-bg-body: rgb(255 241 242);
228
+ --fe-layout-color-bg-trigger: var(--ant-color-bg-elevated);
229
+ --fe-layout-body-bg: rgb(255 241 242);
230
+ --fe-layout-header-bg: var(--ant-color-bg-container);
231
+ --fe-layout-header-height: 64px;
232
+ --fe-layout-header-padding: 0 50px;
233
+ --fe-layout-header-color: var(--ant-color-text);
234
+ --fe-layout-footer-padding: 24px 50px;
235
+ --fe-layout-footer-bg: rgb(255 241 242);
236
+ --fe-layout-sider-bg: var(--ant-color-bg-container);
237
+ --fe-layout-trigger-height: 48px;
238
+ --fe-layout-trigger-bg: var(--ant-color-bg-elevated);
239
+ --fe-layout-trigger-color: var(--ant-color-text);
240
+ --fe-layout-zero-trigger-width: 40px;
241
+ --fe-layout-zero-trigger-height: 40px;
242
+ --fe-layout-light-sider-bg: var(--ant-color-bg-container);
243
+ --fe-layout-light-trigger-bg: var(--ant-color-bg-container);
244
+ --fe-layout-light-trigger-color: var(--ant-color-text);
245
+ }
246
+
247
+ /* 滚动条样式变量 */
248
+ --fe-scrollbar-size: 6px;
249
+ --fe-scrollbar-thumb-bg: rgba(244 114 182 / 0.3);
250
+ --fe-scrollbar-thumb-hover-bg: rgba(244 114 182 / 0.4);
251
+ --fe-scrollbar-track-bg: transparent;
252
+
253
+ /* 滚动条样式 */
254
+ ::-webkit-scrollbar {
255
+ width: var(--fe-scrollbar-size);
256
+ height: var(--fe-scrollbar-size);
257
+ }
258
+
259
+ ::-webkit-scrollbar-track {
260
+ background: var(--fe-scrollbar-track-bg);
261
+ border-radius: var(--fe-scrollbar-size);
262
+ }
263
+
264
+ ::-webkit-scrollbar-thumb {
265
+ background: var(--fe-scrollbar-thumb-bg);
266
+ border-radius: var(--fe-scrollbar-size);
267
+ }
268
+
269
+ ::-webkit-scrollbar-thumb:hover {
270
+ background: var(--fe-scrollbar-thumb-hover-bg);
271
+ }
272
+
273
+ ::-webkit-scrollbar-corner {
274
+ background: transparent;
275
+ }
276
+
277
+ /* 可选的细滚动条样式 */
278
+ .scrollbar-thin {
279
+ --fe-scrollbar-size: 4px;
280
+ }
281
+
282
+ /* 隐藏滚动条但保持可滚动 */
283
+ .scrollbar-hidden {
284
+ -ms-overflow-style: none;
285
+ scrollbar-width: none;
286
+ &::-webkit-scrollbar {
287
+ display: none;
288
+ }
289
+ }
204
290
  }
@@ -1,3 +1,4 @@
1
- @import './_default.css';
2
- @import './dark.css';
3
- @import './pink.css';
1
+ @import './_common/index.css';
2
+ @import './table/index.css';
3
+ @import './pagination/index.css';
4
+ @import './menu/index.css';