@qlover/create-app 0.10.2 → 0.10.3

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 (137) hide show
  1. package/CHANGELOG.md +37 -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/index.cjs +4 -4
  5. package/dist/index.js +4 -4
  6. package/dist/templates/next-app/eslint.config.mjs +5 -1
  7. package/dist/templates/next-app/package.json +4 -2
  8. package/dist/templates/next-app/src/base/cases/AdminPageManager.ts +3 -3
  9. package/dist/templates/next-app/src/base/cases/AppConfig.ts +14 -13
  10. package/dist/templates/next-app/src/base/cases/Datetime.ts +3 -3
  11. package/dist/templates/next-app/src/base/cases/DialogErrorPlugin.ts +8 -2
  12. package/dist/templates/next-app/src/base/cases/DialogHandler.ts +30 -4
  13. package/dist/templates/next-app/src/base/cases/InversifyContainer.ts +16 -4
  14. package/dist/templates/next-app/src/base/cases/NavigateBridge.ts +8 -2
  15. package/dist/templates/next-app/src/base/cases/RequestEncryptPlugin.ts +8 -2
  16. package/dist/templates/next-app/src/base/cases/ResourceState.ts +3 -3
  17. package/dist/templates/next-app/src/base/cases/RouterService.ts +24 -6
  18. package/dist/templates/next-app/src/base/cases/StringEncryptor.ts +14 -2
  19. package/dist/templates/next-app/src/base/cases/TranslateI18nInterface.ts +1 -1
  20. package/dist/templates/next-app/src/base/cases/UserServiceApi.ts +20 -5
  21. package/dist/templates/next-app/src/base/cases/ZodColumnBuilder.ts +31 -8
  22. package/dist/templates/next-app/src/base/port/AdminLayoutInterface.ts +4 -1
  23. package/dist/templates/next-app/src/base/port/I18nServiceInterface.ts +27 -7
  24. package/dist/templates/next-app/src/base/services/AdminPageEvent.ts +1 -1
  25. package/dist/templates/next-app/src/base/services/AdminPageScheduler.ts +3 -3
  26. package/dist/templates/next-app/src/base/services/I18nService.ts +20 -10
  27. package/dist/templates/next-app/src/base/services/ResourceService.ts +32 -11
  28. package/dist/templates/next-app/src/base/services/UserService.ts +12 -3
  29. package/dist/templates/next-app/src/base/services/adminApi/AdminLocalesApi.ts +9 -6
  30. package/dist/templates/next-app/src/base/services/adminApi/AdminUserApi.ts +20 -5
  31. package/dist/templates/next-app/src/base/services/appApi/AppApiPlugin.ts +21 -4
  32. package/dist/templates/next-app/src/base/services/appApi/AppUserApi.ts +12 -3
  33. package/dist/templates/next-app/src/base/services/appApi/AppUserApiBootstrap.ts +10 -2
  34. package/dist/templates/next-app/src/core/bootstraps/BootstrapClient.ts +2 -2
  35. package/dist/templates/next-app/src/core/bootstraps/BootstrapServer.ts +25 -7
  36. package/dist/templates/next-app/src/core/bootstraps/BootstrapsRegistry.ts +6 -3
  37. package/dist/templates/next-app/src/core/clientIoc/ClientIOC.ts +11 -2
  38. package/dist/templates/next-app/src/core/clientIoc/ClientIOCRegister.ts +5 -0
  39. package/dist/templates/next-app/src/core/serverIoc/ServerIOC.ts +13 -4
  40. package/dist/templates/next-app/src/core/serverIoc/ServerIOCRegister.ts +8 -1
  41. package/dist/templates/next-app/src/pages/_app.tsx +1 -1
  42. package/dist/templates/next-app/src/server/AppErrorApi.ts +1 -1
  43. package/dist/templates/next-app/src/server/AppPageRouteParams.ts +13 -0
  44. package/dist/templates/next-app/src/server/AppSuccessApi.ts +1 -1
  45. package/dist/templates/next-app/src/server/NextApiServer.ts +11 -2
  46. package/dist/templates/next-app/src/server/PagesRouteParams.ts +11 -1
  47. package/dist/templates/next-app/src/server/PasswordEncrypt.ts +8 -2
  48. package/dist/templates/next-app/src/server/ServerAuth.ts +20 -5
  49. package/dist/templates/next-app/src/server/SupabaseBridge.ts +48 -8
  50. package/dist/templates/next-app/src/server/UserCredentialToken.ts +8 -2
  51. package/dist/templates/next-app/src/server/controllers/AdminLocalesController.ts +16 -4
  52. package/dist/templates/next-app/src/server/controllers/AdminUserController.ts +4 -1
  53. package/dist/templates/next-app/src/server/controllers/LocalesController.ts +4 -1
  54. package/dist/templates/next-app/src/server/controllers/UserController.ts +12 -3
  55. package/dist/templates/next-app/src/server/repositorys/LocalesRepository.ts +23 -7
  56. package/dist/templates/next-app/src/server/repositorys/UserRepository.ts +15 -6
  57. package/dist/templates/next-app/src/server/services/AIService.ts +3 -1
  58. package/dist/templates/next-app/src/server/services/AdminAuthPlugin.ts +5 -2
  59. package/dist/templates/next-app/src/server/services/ApiLocaleService.ts +5 -5
  60. package/dist/templates/next-app/src/server/services/ApiUserService.ts +1 -1
  61. package/dist/templates/next-app/src/server/services/UserService.ts +12 -3
  62. package/dist/templates/next-app/src/server/validators/LocalesValidator.ts +20 -5
  63. package/dist/templates/next-app/src/server/validators/LoginValidator.ts +16 -4
  64. package/dist/templates/next-app/src/server/validators/PaginationValidator.ts +8 -2
  65. package/dist/templates/next-app/src/uikit/components/IOCProvider.tsx +1 -1
  66. package/dist/templates/next-app/src/uikit/components/localesImportButton/LocalesImportEvent.ts +7 -1
  67. package/dist/templates/react-app/__tests__/__mocks__/BootstrapTest.ts +3 -1
  68. package/dist/templates/react-app/__tests__/__mocks__/MockAppConfig.ts +19 -19
  69. package/dist/templates/react-app/__tests__/__mocks__/MockDialogHandler.ts +8 -8
  70. package/dist/templates/react-app/__tests__/__mocks__/MockLogger.ts +9 -9
  71. package/dist/templates/react-app/__tests__/__mocks__/components/TestBootstrapsProvider.tsx +1 -1
  72. package/dist/templates/react-app/__tests__/__mocks__/i18nextHttpBackend.ts +5 -5
  73. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOC.ts +9 -5
  74. package/dist/templates/react-app/__tests__/__mocks__/testIOC/TestIOCRegister.ts +8 -4
  75. package/dist/templates/react-app/__tests__/src/base/cases/I18nKeyErrorPlugin.test.ts +4 -4
  76. package/dist/templates/react-app/__tests__/src/base/cases/InversifyContainer.test.ts +5 -5
  77. package/dist/templates/react-app/__tests__/src/core/bootstraps/BootstrapClient.test.ts +3 -3
  78. package/dist/templates/react-app/__tests__/src/uikit/components/chatMessage/ChatRoot.test.tsx +1 -1
  79. package/dist/templates/react-app/docs/en/components/chat-message-component.md +35 -29
  80. package/dist/templates/react-app/docs/en/components/chat-message-refactor.md +18 -5
  81. package/dist/templates/react-app/docs/en/components/message-base-list-component.md +11 -12
  82. package/dist/templates/react-app/docs/en/request.md +1 -3
  83. package/dist/templates/react-app/docs/zh/components/chat-message-component.md +35 -29
  84. package/dist/templates/react-app/docs/zh/components/chat-message-refactor.md +18 -5
  85. package/dist/templates/react-app/docs/zh/components/message-base-list-component.md +11 -12
  86. package/dist/templates/react-app/docs/zh/request.md +1 -3
  87. package/dist/templates/react-app/eslint.config.mjs +10 -5
  88. package/dist/templates/react-app/src/App.tsx +1 -1
  89. package/dist/templates/react-app/src/base/apis/feApi/FeApi.ts +2 -2
  90. package/dist/templates/react-app/src/base/apis/feApi/FeApiBootstarp.ts +14 -11
  91. package/dist/templates/react-app/src/base/apis/userApi/UserApi.ts +10 -16
  92. package/dist/templates/react-app/src/base/apis/userApi/UserApiBootstarp.ts +12 -10
  93. package/dist/templates/react-app/src/base/cases/AppConfig.ts +19 -19
  94. package/dist/templates/react-app/src/base/cases/DialogHandler.ts +28 -5
  95. package/dist/templates/react-app/src/base/cases/I18nKeyErrorPlugin.ts +5 -2
  96. package/dist/templates/react-app/src/base/cases/InversifyContainer.ts +16 -4
  97. package/dist/templates/react-app/src/base/cases/PublicAssetsPath.ts +1 -1
  98. package/dist/templates/react-app/src/base/cases/RequestLanguages.ts +6 -3
  99. package/dist/templates/react-app/src/base/cases/RequestLogger.ts +17 -8
  100. package/dist/templates/react-app/src/base/cases/RequestStatusCatcher.ts +4 -6
  101. package/dist/templates/react-app/src/base/cases/ResourceState.ts +3 -3
  102. package/dist/templates/react-app/src/base/cases/RouterLoader.ts +3 -3
  103. package/dist/templates/react-app/src/base/cases/TranslateI18nInterface.ts +1 -1
  104. package/dist/templates/react-app/src/base/port/ExecutorPageBridgeInterface.ts +2 -2
  105. package/dist/templates/react-app/src/base/port/IOCInterface.ts +4 -2
  106. package/dist/templates/react-app/src/base/port/JSONStoragePageBridgeInterface.ts +5 -5
  107. package/dist/templates/react-app/src/base/port/RequestPageBridgeInterface.ts +7 -7
  108. package/dist/templates/react-app/src/base/port/RouteServiceInterface.ts +8 -8
  109. package/dist/templates/react-app/src/base/port/UserServiceInterface.ts +4 -2
  110. package/dist/templates/react-app/src/base/services/BaseLayoutService.ts +3 -3
  111. package/dist/templates/react-app/src/base/services/I18nService.ts +24 -13
  112. package/dist/templates/react-app/src/base/services/IdentifierService.ts +21 -26
  113. package/dist/templates/react-app/src/base/services/RouteService.ts +8 -8
  114. package/dist/templates/react-app/src/base/services/UserBootstrap.ts +2 -2
  115. package/dist/templates/react-app/src/base/services/UserGatewayPlugin.ts +9 -5
  116. package/dist/templates/react-app/src/base/services/UserService.ts +10 -4
  117. package/dist/templates/react-app/src/core/bootstraps/BootstrapClient.ts +3 -1
  118. package/dist/templates/react-app/src/core/bootstraps/BootstrapsRegistry.ts +5 -2
  119. package/dist/templates/react-app/src/core/clientIoc/ClientIOC.ts +11 -4
  120. package/dist/templates/react-app/src/core/clientIoc/ClientIOCRegister.ts +5 -4
  121. package/dist/templates/react-app/src/pages/base/Layout.tsx +1 -1
  122. package/dist/templates/react-app/src/styles/css/antd-themes/_common/_default.css +0 -44
  123. package/dist/templates/react-app/src/styles/css/antd-themes/_common/dark.css +0 -44
  124. package/dist/templates/react-app/src/styles/css/antd-themes/_common/pink.css +0 -44
  125. package/dist/templates/react-app/src/styles/css/index.css +1 -1
  126. package/dist/templates/react-app/src/styles/css/scrollbar.css +34 -0
  127. package/dist/templates/react-app/src/uikit/bridges/ExecutorPageBridge.ts +2 -2
  128. package/dist/templates/react-app/src/uikit/bridges/JSONStoragePageBridge.ts +4 -4
  129. package/dist/templates/react-app/src/uikit/bridges/NavigateBridge.ts +8 -2
  130. package/dist/templates/react-app/src/uikit/bridges/RequestPageBridge.ts +6 -6
  131. package/dist/templates/react-app/src/uikit/components/AppRouterProvider.tsx +1 -1
  132. package/dist/templates/react-app/src/uikit/components/BootstrapsProvider.tsx +1 -3
  133. package/dist/templates/react-app/src/uikit/components/MessageBaseList.tsx +4 -1
  134. package/dist/templates/react-app/src/uikit/components/chatMessage/ChatMessageBridge.ts +39 -16
  135. package/dist/templates/react-app/src/uikit/components/chatMessage/MessageApi.ts +4 -2
  136. package/package.json +3 -3
  137. package/dist/templates/react-app/makes/eslint-utils.mjs +0 -195
@@ -9,15 +9,22 @@ import type { IOCIdentifierMap } from '@config/IOCIdentifier';
9
9
  import { ClientIOCRegister } from './ClientIOCRegister';
10
10
  import { appConfig } from '../globals';
11
11
 
12
- export class ClientIOC
13
- implements IOCInterface<IOCIdentifierMap, IOCContainerInterface>
14
- {
12
+ export class ClientIOC implements IOCInterface<
13
+ IOCIdentifierMap,
14
+ IOCContainerInterface
15
+ > {
15
16
  protected ioc: IOCFunctionInterface<
16
17
  IOCIdentifierMap,
17
18
  IOCContainerInterface
18
19
  > | null = null;
19
20
 
20
- create(): IOCFunctionInterface<IOCIdentifierMap, IOCContainerInterface> {
21
+ /**
22
+ * @override
23
+ */
24
+ public create(): IOCFunctionInterface<
25
+ IOCIdentifierMap,
26
+ IOCContainerInterface
27
+ > {
21
28
  if (this.ioc) {
22
29
  return this.ioc;
23
30
  }
@@ -30,9 +30,10 @@ import type {
30
30
  } from '@qlover/corekit-bridge';
31
31
  import type { LoggerInterface } from '@qlover/logger';
32
32
 
33
- export class ClientIOCRegister
34
- implements IOCRegisterInterface<IOCContainerInterface, IocRegisterOptions>
35
- {
33
+ export class ClientIOCRegister implements IOCRegisterInterface<
34
+ IOCContainerInterface,
35
+ IocRegisterOptions
36
+ > {
36
37
  constructor(protected options: IocRegisterOptions) {}
37
38
 
38
39
  /**
@@ -131,7 +132,7 @@ export class ClientIOCRegister
131
132
  /**
132
133
  * @override
133
134
  */
134
- register(
135
+ public register(
135
136
  ioc: IOCContainerInterface,
136
137
  _manager: IOCManagerInterface<IOCContainerInterface>
137
138
  ): void {
@@ -4,7 +4,7 @@ import { BaseHeader } from '../../uikit/components/BaseHeader';
4
4
 
5
5
  export default function Layout() {
6
6
  return (
7
- <BaseLayoutProvider data-testid="Layout">
7
+ <BaseLayoutProvider>
8
8
  <div
9
9
  data-testid="basic-layout"
10
10
  className="text-base min-h-screen bg-primary"
@@ -277,48 +277,4 @@ html,
277
277
  --fe-layout-light-trigger-bg: rgb(var(--color-bg-base));
278
278
  --fe-layout-light-trigger-color: rgb(var(--text-primary));
279
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
- }
324
280
  }
@@ -230,48 +230,4 @@
230
230
  --fe-layout-light-trigger-bg: rgb(30 41 59);
231
231
  --fe-layout-light-trigger-color: rgb(var(--text-primary));
232
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
- }
277
233
  }
@@ -243,48 +243,4 @@
243
243
  --fe-layout-light-trigger-bg: var(--ant-color-bg-container);
244
244
  --fe-layout-light-trigger-color: var(--ant-color-text);
245
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
- }
290
246
  }
@@ -2,5 +2,5 @@
2
2
  @import './zIndex.css';
3
3
 
4
4
  @import './antd-themes/index.css';
5
-
5
+ @import './scrollbar.css';
6
6
  @import './page.css';
@@ -0,0 +1,34 @@
1
+ html,
2
+ .fe-theme {
3
+ --scrollbar-track-color: var(--color-secondary);
4
+ --scrollbar-thumb-color: var(--color-text-secondary);
5
+ --scrollbar-thumb-hover-color: var(--color-brand-hover);
6
+
7
+ /* Webkit browsers (Chrome, Safari, Edge) - 全局样式,使用最高优先级 */
8
+ body *::-webkit-scrollbar,
9
+ *::-webkit-scrollbar {
10
+ width: 10px;
11
+ height: 10px;
12
+ }
13
+
14
+ body *::-webkit-scrollbar-track,
15
+ *::-webkit-scrollbar-track {
16
+ background: var(--scrollbar-track-color);
17
+ }
18
+
19
+ body *::-webkit-scrollbar-thumb,
20
+ *::-webkit-scrollbar-thumb {
21
+ background-color: var(--scrollbar-thumb-color);
22
+ border-radius: 6px;
23
+ border: 1px solid var(--scrollbar-track-color);
24
+ transition: background-color 0.2s ease;
25
+ }
26
+
27
+ body *::-webkit-scrollbar-thumb:hover {
28
+ background-color: var(--scrollbar-thumb-hover-color) !important;
29
+ }
30
+
31
+ *::-webkit-scrollbar-thumb:hover {
32
+ background-color: var(--scrollbar-thumb-hover-color) !important;
33
+ }
34
+ }
@@ -13,7 +13,7 @@ import {
13
13
  } from '@/base/port/ExecutorPageBridgeInterface';
14
14
 
15
15
  class ExecutorPageBridgeState implements ExecutorPageStateInterface {
16
- helloState = new RequestState();
16
+ public helloState = new RequestState();
17
17
  }
18
18
 
19
19
  const TestPlugin: ExecutorPlugin<RequestAdapterFetchConfig> = {
@@ -41,7 +41,7 @@ export class ExecutorPageBridge extends ExecutorPageBridgeInterface {
41
41
  this.feApi.usePlugin(TestPlugin);
42
42
  }
43
43
 
44
- override onTestPlugins = async () => {
44
+ public override onTestPlugins = async () => {
45
45
  this.emit({
46
46
  ...this.state,
47
47
  helloState: new RequestState(true)
@@ -18,23 +18,23 @@ export class JSONStoragePageBridge extends JSONStoragePageBridgeInterface {
18
18
  }));
19
19
  }
20
20
 
21
- override changeRandomTestKey1 = (): void => {
21
+ public override changeRandomTestKey1 = (): void => {
22
22
  const value = random(100, 9000);
23
23
  this.storage.setItem('testKey1', value);
24
24
  this.emit({ ...this.state, testKey1: value });
25
25
  };
26
26
 
27
- override onChangeRandomTestKey2 = (): void => {
27
+ public override onChangeRandomTestKey2 = (): void => {
28
28
  const value = random(100, 9000);
29
29
  this.storage.setItem('testKey2', value, Date.now() + this.state.expireTime);
30
30
  this.emit({ ...this.state, testKey2: value });
31
31
  };
32
32
 
33
- override changeExpireTime = (expireTime: number): void => {
33
+ public override changeExpireTime = (expireTime: number): void => {
34
34
  this.emit({ ...this.state, expireTime });
35
35
  };
36
36
 
37
- override changeRequestTimeout = (requestTimeout: number): void => {
37
+ public override changeRequestTimeout = (requestTimeout: number): void => {
38
38
  this.storage.setItem('requestTimeout', requestTimeout);
39
39
  this.emit({ ...this.state, requestTimeout });
40
40
  };
@@ -6,11 +6,17 @@ import { NavigateFunction } from 'react-router-dom';
6
6
  export class NavigateBridge implements UIBridgeInterface<NavigateFunction> {
7
7
  protected navigate: NavigateFunction | null = null;
8
8
 
9
- setUIBridge(ui: NavigateFunction): void {
9
+ /**
10
+ * @override
11
+ */
12
+ public setUIBridge(ui: NavigateFunction): void {
10
13
  this.navigate = ui;
11
14
  }
12
15
 
13
- getUIBridge(): NavigateFunction | null {
16
+ /**
17
+ * @override
18
+ */
19
+ public getUIBridge(): NavigateFunction | null {
14
20
  return this.navigate;
15
21
  }
16
22
  }
@@ -32,7 +32,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
32
32
  super(createDefaultState);
33
33
  }
34
34
 
35
- override onHello = async () => {
35
+ public override onHello = async () => {
36
36
  if (this.state.helloState.loading) {
37
37
  return;
38
38
  }
@@ -52,7 +52,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
52
52
  }
53
53
  };
54
54
 
55
- override onIpInfo = async () => {
55
+ public override onIpInfo = async () => {
56
56
  if (this.state.ipInfoState.loading) {
57
57
  return;
58
58
  }
@@ -70,7 +70,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
70
70
  }
71
71
  };
72
72
 
73
- override onRandomUser = async () => {
73
+ public override onRandomUser = async () => {
74
74
  if (this.state.randomUserState.loading) {
75
75
  return;
76
76
  }
@@ -89,7 +89,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
89
89
  }
90
90
  };
91
91
 
92
- override onTriggerApiCatchResult = async () => {
92
+ public override onTriggerApiCatchResult = async () => {
93
93
  if (this.state.apiCatchResultState.loading) {
94
94
  return;
95
95
  }
@@ -107,7 +107,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
107
107
  }
108
108
  };
109
109
 
110
- override onTriggerAbortRequest = async () => {
110
+ public override onTriggerAbortRequest = async () => {
111
111
  if (this.state.abortState.loading) {
112
112
  this.stopAbortRequest();
113
113
  return;
@@ -128,7 +128,7 @@ export class RequestPageBridge extends RequestPageBridgeInterface {
128
128
  }
129
129
  };
130
130
 
131
- override stopAbortRequest = async () => {
131
+ public override stopAbortRequest = async () => {
132
132
  this.userApi.stop({
133
133
  requestId: 'onTriggerAbortRequest'
134
134
  });
@@ -31,5 +31,5 @@ export function AppRouterProvider(props: { pages: ComponentValue }) {
31
31
  return router;
32
32
  }, [routes]);
33
33
 
34
- return <RouterProvider data-testid="AppRouterProvider" router={routerBase} />;
34
+ return <RouterProvider router={routerBase} />;
35
35
  }
@@ -6,8 +6,6 @@ export function BootstrapsProvider(props: { children: React.ReactNode }) {
6
6
  const IOC = clientIOC.create();
7
7
 
8
8
  return (
9
- <IOCContext.Provider data-testid="BootstrapsProvider" value={IOC}>
10
- {props.children}
11
- </IOCContext.Provider>
9
+ <IOCContext.Provider value={IOC}>{props.children}</IOCContext.Provider>
12
10
  );
13
11
  }
@@ -29,7 +29,10 @@ function createMessagesState(): MessagesStateInterface<MessageBaseMsg> {
29
29
  }
30
30
 
31
31
  class MessageBaseApi implements MessageGetwayInterface {
32
- async sendMessage<M extends MessageStoreMsg<string>>(
32
+ /**
33
+ * @override
34
+ */
35
+ public async sendMessage<M extends MessageStoreMsg<string>>(
33
36
  message: M
34
37
  ): Promise<unknown> {
35
38
  const times = random(200, 1000);
@@ -14,9 +14,9 @@ import type {
14
14
  } from '@qlover/corekit-bridge';
15
15
  import type { TextAreaRef } from 'antd/es/input/TextArea';
16
16
 
17
- export class ChatMessageBridge<T = string>
18
- implements ChatMessageBridgeInterface<T>
19
- {
17
+ export class ChatMessageBridge<
18
+ T = string
19
+ > implements ChatMessageBridgeInterface<T> {
20
20
  protected ref: TextAreaRef | null = null;
21
21
  protected readonly messageSender: MessageSender<ChatMessage<T>>;
22
22
 
@@ -27,7 +27,12 @@ export class ChatMessageBridge<T = string>
27
27
  this.messageSender = new MessageSender(messages, config);
28
28
  }
29
29
 
30
- use(plugin: ChatMessageBridgePlugin<T> | ChatMessageBridgePlugin<T>[]): this {
30
+ /**
31
+ * @override
32
+ */
33
+ public use(
34
+ plugin: ChatMessageBridgePlugin<T> | ChatMessageBridgePlugin<T>[]
35
+ ): this {
31
36
  if (Array.isArray(plugin)) {
32
37
  plugin.forEach((p) => this.messageSender.use(p));
33
38
  } else {
@@ -37,7 +42,10 @@ export class ChatMessageBridge<T = string>
37
42
  return this;
38
43
  }
39
44
 
40
- getMessageStore(): ChatMessageStore<T> {
45
+ /**
46
+ * @override
47
+ */
48
+ public getMessageStore(): ChatMessageStore<T> {
41
49
  return this.messages;
42
50
  }
43
51
 
@@ -45,8 +53,10 @@ export class ChatMessageBridge<T = string>
45
53
  * Disable rules
46
54
  * 1. If streaming, don't allow sending
47
55
  * 2. If sending, don't allow sending
48
- */
49
- getDisabledSend(params?: DisabledSendParams<T>): boolean {
56
+
57
+ * @override
58
+ */
59
+ public getDisabledSend(params?: DisabledSendParams<T>): boolean {
50
60
  const disabledSend =
51
61
  params?.disabledSend || this.messages.state.disabledSend;
52
62
 
@@ -62,7 +72,10 @@ export class ChatMessageBridge<T = string>
62
72
  return false;
63
73
  }
64
74
 
65
- onChangeContent(content: T): void {
75
+ /**
76
+ * @override
77
+ */
78
+ public onChangeContent(content: T): void {
66
79
  const firstDraft = this.getFirstDraftMessage();
67
80
 
68
81
  // If draft message exists, update its content
@@ -79,21 +92,24 @@ export class ChatMessageBridge<T = string>
79
92
  }
80
93
  }
81
94
 
82
- getFirstDraftMessage(): ChatMessage<T> | null {
95
+ /**
96
+ * @override
97
+ */
98
+ public getFirstDraftMessage(): ChatMessage<T> | null {
83
99
  return this.messages.getFirstDraftMessage();
84
100
  }
85
101
 
86
- setRef(ref: unknown): void {
102
+ public setRef(ref: unknown): void {
87
103
  this.ref = ref as TextAreaRef;
88
104
  }
89
105
 
90
- focus(): void {
106
+ public focus(): void {
91
107
  requestAnimationFrame(() => {
92
108
  this.ref?.focus();
93
109
  });
94
110
  }
95
111
 
96
- sendMessage(
112
+ public sendMessage(
97
113
  messages: ChatMessage<T>,
98
114
  gatewayOptions?: GatewayOptions<ChatMessage<T>>
99
115
  ): Promise<ChatMessage<T>> {
@@ -112,10 +128,11 @@ export class ChatMessageBridge<T = string>
112
128
  * - If loading, sending is not allowed
113
129
  * - If no message to send, sending is not allowed
114
130
  *
131
+ * @override
115
132
  * @param message - Message object
116
133
  * @param gatewayOptions - Gateway options
117
134
  */
118
- send(
135
+ public send(
119
136
  message?: ChatMessage<T>,
120
137
  gatewayOptions?: GatewayOptions<ChatMessage<T>>
121
138
  ): Promise<ChatMessage<T>> {
@@ -140,7 +157,10 @@ export class ChatMessageBridge<T = string>
140
157
  return this.sendMessage(targetMessage, gatewayOptions);
141
158
  }
142
159
 
143
- getSendingMessage(messages?: ChatMessage<T>[]): ChatMessage<T> | null {
160
+ /**
161
+ * @override
162
+ */
163
+ public getSendingMessage(messages?: ChatMessage<T>[]): ChatMessage<T> | null {
144
164
  messages = messages || this.messages.getMessages();
145
165
 
146
166
  return (
@@ -152,7 +172,10 @@ export class ChatMessageBridge<T = string>
152
172
  );
153
173
  }
154
174
 
155
- stop(messageId?: string): boolean {
175
+ /**
176
+ * @override
177
+ */
178
+ public stop(messageId?: string): boolean {
156
179
  if (!messageId) {
157
180
  const sendingMessage = this.getSendingMessage();
158
181
  if (sendingMessage) {
@@ -170,7 +193,7 @@ export class ChatMessageBridge<T = string>
170
193
  /**
171
194
  * Stop all sending messages
172
195
  */
173
- stopAll(): void {
196
+ public stopAll(): void {
174
197
  this.messageSender.stopAll();
175
198
  }
176
199
  }
@@ -21,8 +21,10 @@ export class MessageApi implements MessageGetwayInterface {
21
21
  * - If options.stream === true, use streaming mode (progressive output)
22
22
  * - If options provided but stream !== true, use interruptible normal mode
23
23
  * - If no options, use fast normal mode (non-interruptible)
24
- */
25
- async sendMessage<M extends MessageStoreMsg<string>>(
24
+
25
+ * @override
26
+ */
27
+ public async sendMessage<M extends MessageStoreMsg<string>>(
26
28
  message: M,
27
29
  options?: GatewayOptions<M>
28
30
  ): Promise<M> {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qlover/create-app",
3
- "version": "0.10.2",
3
+ "version": "0.10.3",
4
4
  "description": "Create a new app with a single command",
5
5
  "private": false,
6
6
  "type": "module",
@@ -33,12 +33,12 @@
33
33
  "ignore": "^7.0.3",
34
34
  "lodash": "^4.17.21",
35
35
  "ora": "^8.1.1",
36
- "@qlover/logger": "0.3.0"
36
+ "@qlover/logger": "0.3.1"
37
37
  },
38
38
  "dependencies": {
39
39
  "commander": "^13.1.0",
40
40
  "inquirer": "^12.3.2",
41
- "@qlover/scripts-context": "1.2.0"
41
+ "@qlover/scripts-context": "1.2.1"
42
42
  },
43
43
  "scripts": {
44
44
  "lint": "eslint src --fix",