@_tc/template-core 0.2.11 → 0.3.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 (403) hide show
  1. package/.skills/tc-component-usage-skills/SKILL.md +7 -9
  2. package/.skills/tc-component-usage-skills/reference/component-api.md +2 -2
  3. package/.skills/tc-component-usage-skills/reference/examples.md +9 -9
  4. package/.skills/tc-component-usage-skills/reference/patterns.md +5 -5
  5. package/.skills/tc-component-usage-skills/reference/template-core-frontend.md +1 -1
  6. package/.skills/tc-generator/SKILL.md +30 -14
  7. package/.skills/tc-generator/reference/example.md +4 -4
  8. package/.skills/tc-generator/reference/model-schema.md +9 -5
  9. package/.skills/tc-generator/reference/runtime-extensions.md +9 -7
  10. package/AGENT_README.md +52 -33
  11. package/CHANGE.md +91 -0
  12. package/README.md +147 -46
  13. package/cjs/app/controller/ssr.js +1 -0
  14. package/cjs/app/controller/view.js +1 -1
  15. package/cjs/app/html/shell.js +36 -0
  16. package/cjs/app/middleware.js +1 -1
  17. package/cjs/app/router/ssr.js +1 -0
  18. package/cjs/app/router/view.js +1 -1
  19. package/cjs/app/ssr/html.js +17 -0
  20. package/cjs/app/ssr/manifest.js +2 -0
  21. package/cjs/app/view/entry.tpl +2 -37
  22. package/cjs/bundler/buildBE.js +1 -1
  23. package/cjs/bundler/buildSSR.js +1 -0
  24. package/cjs/bundler/entryCollect.js +1 -0
  25. package/cjs/bundler/feSharedConfig.js +1 -0
  26. package/cjs/bundler/index.js +1 -1
  27. package/cjs/bundler/ssrClientManifest.js +1 -0
  28. package/cjs/bundler/ssrEntries.js +1 -0
  29. package/cjs/bundler/utils.js +3 -3
  30. package/cjs/packages/common/i18n/index.js +1 -1
  31. package/cjs/packages/common/index.js +1 -1
  32. package/cjs/packages/common/ssr/hydration.js +1 -0
  33. package/cjs/packages/common/ssr/index.js +1 -0
  34. package/cjs/packages/core/index.js +1 -1
  35. package/cjs/packages/core/loader/controller.js +1 -1
  36. package/cjs/packages/core/loader/extend.js +1 -1
  37. package/cjs/packages/core/loader/merge.js +1 -0
  38. package/cjs/packages/core/loader/middleware.js +1 -1
  39. package/cjs/packages/core/loader/model.js +1 -1
  40. package/cjs/packages/core/loader/router-schema.js +1 -1
  41. package/cjs/packages/core/loader/router.js +1 -1
  42. package/cjs/packages/core/loader/service.js +1 -1
  43. package/cjs/packages/core/paths.js +1 -1
  44. package/cjs/scripts/vite-build/build.js +3 -3
  45. package/cjs/scripts/vite-build/collect.js +1 -1
  46. package/cjs/scripts/vite-build/dts.js +1 -1
  47. package/cjs/scripts/vite-build/normalize.js +1 -1
  48. package/cjs/ssrSharedData/outputPaths.js +1 -0
  49. package/esm/app/controller/ssr.js +215 -0
  50. package/esm/app/controller/view.js +26 -25
  51. package/esm/app/html/shell.js +69 -0
  52. package/esm/app/middleware.js +18 -9
  53. package/esm/app/router/ssr.js +8 -0
  54. package/esm/app/router/view.js +5 -4
  55. package/esm/app/ssr/html.js +90 -0
  56. package/esm/app/ssr/manifest.js +47 -0
  57. package/esm/app/view/entry.tpl +2 -37
  58. package/esm/bundler/buildBE.js +1 -1
  59. package/esm/bundler/buildSSR.js +126 -0
  60. package/esm/bundler/entryCollect.js +45 -0
  61. package/esm/bundler/feSharedConfig.js +143 -0
  62. package/esm/bundler/index.js +4 -2
  63. package/esm/bundler/ssrClientManifest.js +14 -0
  64. package/esm/bundler/ssrEntries.js +13 -0
  65. package/esm/bundler/utils.js +248 -255
  66. package/esm/packages/common/i18n/index.js +5 -1
  67. package/esm/packages/common/index.js +4 -2
  68. package/esm/packages/common/ssr/hydration.js +55 -0
  69. package/esm/packages/common/ssr/index.js +20 -0
  70. package/esm/packages/core/index.js +42 -42
  71. package/esm/packages/core/loader/controller.js +11 -9
  72. package/esm/packages/core/loader/extend.js +20 -16
  73. package/esm/packages/core/loader/merge.js +7 -0
  74. package/esm/packages/core/loader/middleware.js +11 -12
  75. package/esm/packages/core/loader/model.js +2 -2
  76. package/esm/packages/core/loader/router-schema.js +22 -15
  77. package/esm/packages/core/loader/router.js +32 -26
  78. package/esm/packages/core/loader/service.js +11 -9
  79. package/esm/packages/core/paths.js +9 -1
  80. package/esm/scripts/vite-build/build.js +88 -83
  81. package/esm/scripts/vite-build/collect.js +31 -27
  82. package/esm/scripts/vite-build/dts.js +1 -1
  83. package/esm/scripts/vite-build/normalize.js +6 -3
  84. package/esm/ssrSharedData/outputPaths.js +33 -0
  85. package/fe/frontend/apps/dash/Dashboard.d.ts +5 -1
  86. package/fe/frontend/apps/dash/Dashboard.js +22 -13
  87. package/fe/frontend/apps/dash/types.d.ts +2 -0
  88. package/fe/frontend/src/api/baseInfo.d.ts +1 -1
  89. package/fe/frontend/src/common/CRUD/CRUD.js +1 -1
  90. package/fe/frontend/src/common/CRUD/index.js +1 -1
  91. package/fe/frontend/src/common/menu.d.ts +1 -1
  92. package/fe/frontend/src/common/menu.js +8 -7
  93. package/fe/frontend/src/common/request.js +1 -1
  94. package/fe/frontend/src/common/schemaForm.d.ts +1 -0
  95. package/fe/frontend/src/common/schemaForm.js +12 -0
  96. package/fe/frontend/src/components/AsyncSelect/AsyncSelect.d.ts +1 -1
  97. package/fe/frontend/src/components/Router/basename.d.ts +3 -0
  98. package/fe/frontend/src/components/Router/basename.js +11 -0
  99. package/fe/frontend/src/components/Router/index.d.ts +1 -1
  100. package/fe/frontend/src/components/Router/index.js +3 -1
  101. package/fe/frontend/src/defaultPages/SchemaPage/components/CallCom/builtIn.d.ts +1 -1
  102. package/fe/frontend/src/defaultPages/SchemaPage/components/SchemaTable/data.d.ts +1 -1
  103. package/fe/frontend/src/defaultPages/SchemaPage/schemaType.d.ts +2 -2
  104. package/fe/frontend/src/defaultPages/SchemaPage/utils/schemaConversion.d.ts +1 -1
  105. package/fe/frontend/src/defaultPages/SidebarSlotPage/SidebarSlotContainer.d.ts +2 -1
  106. package/fe/frontend/src/defaultPages/SidebarSlotPage/SidebarSlotContainer.js +8 -4
  107. package/fe/frontend/src/defaultPages/SidebarSlotPageTmp.js +2 -1
  108. package/fe/frontend/src/exportStore.js +2 -2
  109. package/fe/frontend/src/hooks/useCurrentMenuData.d.ts +1 -1
  110. package/fe/frontend/src/hooks/useCurrentMenuData.js +2 -2
  111. package/fe/frontend/src/hooks/useRouterParams.js +4 -3
  112. package/fe/frontend/src/index.d.ts +1 -0
  113. package/fe/frontend/src/index.js +4 -3
  114. package/fe/frontend/src/main.js +2 -0
  115. package/fe/frontend/src/stores/mode.d.ts +15 -2
  116. package/fe/frontend/src/stores/mode.js +19 -5
  117. package/fe/frontend/src/typing/window.d.ts +2 -0
  118. package/fe/packages/common/LRUCache.js +2 -0
  119. package/fe/packages/common/array/index.js +37 -0
  120. package/fe/packages/common/cache/index.js +2 -0
  121. package/fe/packages/common/guards/index.js +19 -1
  122. package/fe/packages/common/http/index.js +1 -1
  123. package/fe/packages/common/i18n/index.js +8 -4
  124. package/fe/packages/common/i18n/locales.js +1 -1
  125. package/fe/packages/common/i18n/types.d.ts +1 -0
  126. package/fe/packages/common/i18n/types.js +0 -0
  127. package/fe/packages/common/index.d.ts +1 -0
  128. package/fe/packages/common/index.js +17 -0
  129. package/fe/packages/common/log/index.js +146 -0
  130. package/fe/packages/common/number/index.js +11 -0
  131. package/fe/packages/common/object/filterEmpty.js +2 -1
  132. package/fe/packages/common/object/filtereEmpty.js +2 -0
  133. package/fe/packages/common/object/index.js +20 -0
  134. package/fe/packages/common/ssr/hydration.d.ts +23 -0
  135. package/fe/packages/common/ssr/hydration.js +88 -0
  136. package/fe/packages/common/ssr/index.d.ts +8 -0
  137. package/fe/packages/common/ssr/index.js +52 -0
  138. package/fe/packages/common/string/index.js +32 -0
  139. package/fe/packages/common/types/index.js +0 -0
  140. package/fe/packages/react/hooks/index.d.ts +2 -0
  141. package/fe/packages/react/hooks/index.js +3 -1
  142. package/fe/packages/react/hooks/useHydrationData.d.ts +2 -0
  143. package/fe/packages/react/hooks/useHydrationData.js +23 -0
  144. package/fe/packages/react/hooks/useSSR.d.ts +6 -0
  145. package/fe/packages/react/hooks/useSSR.js +46 -0
  146. package/fe/packages/react/ui/components/DataTable/index.js +16 -15
  147. package/fe/packages/react/ui/components/Form/SchemaForm/data.d.ts +3 -2
  148. package/fe/packages/react/ui/components/Form/SchemaForm/data.js +5 -6
  149. package/fe/packages/react/ui/components/Form/SchemaForm/index.d.ts +1 -0
  150. package/fe/packages/react/ui/components/Form/SchemaForm/index.js +2 -2
  151. package/fe/packages/react/ui/components/Form/index.js +2 -1
  152. package/fe/packages/react/ui/components/Input/Input.js +5 -1
  153. package/fe/packages/react/ui/components/Popup/Popup.js +6 -1
  154. package/fe/packages/react/ui/components/index.js +2 -1
  155. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo.js +241 -211
  156. package/fe/packages/react/ui/components/testPage/demos/core/DataTableDemo2.js +1 -1
  157. package/fe/packages/react/ui/i18n/I18nProvider.js +4 -0
  158. package/fe/packages/react/ui/index.js +2 -1
  159. package/fe/ssr/apps/dash/dash.entry.d.ts +13 -0
  160. package/fe/ssr/apps/dash/dash.entry.js +162 -0
  161. package/fe/ssr/apps/demo/demo.entry.d.ts +13 -0
  162. package/fe/ssr/apps/demo/demo.entry.js +38 -0
  163. package/fe/ssr/apps/server-data/server-data.entry.d.ts +26 -0
  164. package/fe/ssr/apps/server-data/server-data.entry.js +275 -0
  165. package/fe/ssr/apps/ui-components/ui-components.entry.d.ts +5 -0
  166. package/fe/ssr/apps/ui-components/ui-components.entry.js +17 -0
  167. package/fe/ssr/components/StreamingRender/StreamingCache.d.ts +2 -0
  168. package/fe/ssr/components/StreamingRender/StreamingCache.js +31 -0
  169. package/fe/ssr/components/StreamingRender/StreamingRender.d.ts +3 -0
  170. package/fe/ssr/components/StreamingRender/StreamingRender.js +48 -0
  171. package/fe/ssr/components/StreamingRender/StreamingScript.d.ts +8 -0
  172. package/fe/ssr/components/StreamingRender/StreamingScript.js +58 -0
  173. package/fe/ssr/components/StreamingRender/index.d.ts +4 -0
  174. package/fe/ssr/components/StreamingRender/index.js +5 -0
  175. package/fe/ssr/components/StreamingRender/type.d.ts +9 -0
  176. package/fe/ssr/components/StreamingRender/type.js +0 -0
  177. package/fe/ssr/components/index.d.ts +2 -0
  178. package/fe/ssr/components/index.js +2 -0
  179. package/fe/ssr/createSSREntry.d.ts +6 -0
  180. package/fe/ssr/createSSREntry.js +42 -0
  181. package/fe/ssr/hooks/index.d.ts +1 -0
  182. package/fe/ssr/hooks/index.js +2 -0
  183. package/fe/ssr/hooks/useSuspensePromise.d.ts +1 -0
  184. package/fe/ssr/hooks/useSuspensePromise.js +31 -0
  185. package/fe/ssr/index.d.ts +4 -0
  186. package/fe/ssr/index.js +6 -0
  187. package/fe/ssr/types.d.ts +13 -0
  188. package/fe/ssr/types.js +0 -0
  189. package/{model → models}/frontend/src/typing/window.d.ts +2 -0
  190. package/{model → models}/packages/common/i18n/types.d.ts +1 -0
  191. package/{model → models}/packages/common/index.d.ts +1 -0
  192. package/models/packages/common/ssr/hydration.d.ts +23 -0
  193. package/models/packages/common/ssr/index.d.ts +8 -0
  194. package/{model → models}/packages/react/ui/components/Form/SchemaForm/data.d.ts +3 -2
  195. package/{model → models}/packages/react/ui/components/Form/SchemaForm/index.d.ts +1 -0
  196. package/package.json +43 -6
  197. package/types/app/controller/ssr.d.ts +14 -0
  198. package/types/app/html/shell.d.ts +101 -0
  199. package/types/app/router/ssr.d.ts +6 -0
  200. package/types/app/ssr/html.d.ts +53 -0
  201. package/types/app/ssr/manifest.d.ts +17 -0
  202. package/types/app/typings.d.ts +2 -0
  203. package/types/bundler/buildSSR.d.ts +56 -0
  204. package/types/bundler/entryCollect.d.ts +36 -0
  205. package/types/bundler/feSharedConfig.d.ts +35 -0
  206. package/types/bundler/index.d.ts +4 -0
  207. package/types/bundler/ssrClientManifest.d.ts +4 -0
  208. package/types/bundler/ssrEntries.d.ts +23 -0
  209. package/types/bundler/state.d.ts +2 -2
  210. package/types/bundler/utils.d.ts +35 -2
  211. package/types/config/config.default.d.ts +10 -0
  212. package/types/packages/common/i18n/types.d.ts +2 -0
  213. package/types/packages/common/index.d.ts +1 -0
  214. package/types/packages/common/ssr/hydration.d.ts +72 -0
  215. package/types/packages/common/ssr/index.d.ts +34 -0
  216. package/types/packages/core/loader/merge.d.ts +3 -0
  217. package/types/packages/core/loader/model.d.ts +2 -2
  218. package/types/packages/core/paths.d.ts +5 -0
  219. package/types/packages/core/types.d.ts +10 -1
  220. package/types/scripts/vite-build/build.d.ts +1 -0
  221. package/types/scripts/vite-build/types.d.ts +3 -0
  222. package/types/ssrSharedData/outputPaths.d.ts +59 -0
  223. package/fe/packages/react/hooks/useWatch.test.js +0 -24
  224. package/fe/packages/react/ui/assets/table/no-result.js +0 -4
  225. package/fe/packages/react/ui/components/DataTable/dataTableWidth.test.js +0 -39
  226. package/fe/packages/react/ui/components/InputNumber/inputNumberUtils.test.js +0 -59
  227. /package/.skills/tc-generator/reference/project-template/{model → models}/product/mode.js +0 -0
  228. /package/.skills/tc-generator/reference/project-template/{model → models}/product/project/default.js +0 -0
  229. /package/fe/{model → models}/types/data/button.d.ts +0 -0
  230. /package/fe/{model → models}/types/data/component.d.ts +0 -0
  231. /package/fe/{model → models}/types/data/fetchInfo.d.ts +0 -0
  232. /package/fe/{model → models}/types/data/schema.d.ts +0 -0
  233. /package/fe/{model → models}/types/data/search.d.ts +0 -0
  234. /package/fe/{model → models}/types/index.d.ts +0 -0
  235. /package/fe/{model → models}/types/menuType.d.ts +0 -0
  236. /package/fe/{model → models}/types/model.d.ts +0 -0
  237. /package/{model → models}/frontend/extended/SchemaForm/data.d.ts +0 -0
  238. /package/{model → models}/frontend/src/common/auth/index.d.ts +0 -0
  239. /package/{model → models}/frontend/src/common/fetchErrorShow.d.ts +0 -0
  240. /package/{model → models}/frontend/src/common/language.d.ts +0 -0
  241. /package/{model → models}/frontend/src/common/logFn/index.d.ts +0 -0
  242. /package/{model → models}/frontend/src/common/request.d.ts +0 -0
  243. /package/{model → models}/frontend/src/components/AsyncSelect/AsyncSelect.d.ts +0 -0
  244. /package/{model → models}/frontend/src/components/AsyncSelect/index.d.ts +0 -0
  245. /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/DetailPanel.d.ts +0 -0
  246. /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/PopFrom.d.ts +0 -0
  247. /package/{model → models}/frontend/src/defaultPages/SchemaPage/components/CallCom/builtIn.d.ts +0 -0
  248. /package/{model → models}/frontend/src/defaultPages/SchemaPage/data/eventInfo.d.ts +0 -0
  249. /package/{model → models}/frontend/src/defaultPages/SchemaPage/data/index.d.ts +0 -0
  250. /package/{model → models}/frontend/src/defaultPages/SchemaPage/hooks/useComConfig.d.ts +0 -0
  251. /package/{model → models}/frontend/src/defaultPages/SchemaPage/schemaType.d.ts +0 -0
  252. /package/{model → models}/frontend/src/defaultPages/SchemaPage/utils/permissions.d.ts +0 -0
  253. /package/{model → models}/frontend/src/defaultPages/SchemaPage/utils/validator.d.ts +0 -0
  254. /package/{model → models}/frontend/src/hooks/useText.d.ts +0 -0
  255. /package/{model → models}/frontend/src/language/en-US.d.ts +0 -0
  256. /package/{model → models}/frontend/src/language/index.d.ts +0 -0
  257. /package/{model → models}/frontend/src/language/resources.d.ts +0 -0
  258. /package/{model → models}/frontend/src/language/zh-CN.d.ts +0 -0
  259. /package/{model → models}/frontend/src/stores/apiFreezer.d.ts +0 -0
  260. /package/{model → models}/frontend/src/stores/schemaEventBus.d.ts +0 -0
  261. /package/{model → models}/frontend/src/stores/schemaStore.d.ts +0 -0
  262. /package/{model → models}/frontend/src/typing/scalability.d.ts +0 -0
  263. /package/{model/model → models/models}/index.d.ts +0 -0
  264. /package/{model/model → models/models}/test.d.ts +0 -0
  265. /package/{model/model → models/models}/types/data/button.d.ts +0 -0
  266. /package/{model/model → models/models}/types/data/component.d.ts +0 -0
  267. /package/{model/model → models/models}/types/data/fetchInfo.d.ts +0 -0
  268. /package/{model/model → models/models}/types/data/schema.d.ts +0 -0
  269. /package/{model/model → models/models}/types/data/search.d.ts +0 -0
  270. /package/{model/model → models/models}/types/index.d.ts +0 -0
  271. /package/{model/model → models/models}/types/menuType.d.ts +0 -0
  272. /package/{model/model → models/models}/types/model.d.ts +0 -0
  273. /package/{model → models}/packages/common/array/index.d.ts +0 -0
  274. /package/{model → models}/packages/common/cache/LRUCache.d.ts +0 -0
  275. /package/{model → models}/packages/common/cache/index.d.ts +0 -0
  276. /package/{model → models}/packages/common/guards/index.d.ts +0 -0
  277. /package/{model → models}/packages/common/http/index.d.ts +0 -0
  278. /package/{model → models}/packages/common/i18n/default.d.ts +0 -0
  279. /package/{model → models}/packages/common/i18n/en-US.d.ts +0 -0
  280. /package/{model → models}/packages/common/i18n/index.d.ts +0 -0
  281. /package/{model → models}/packages/common/i18n/locales.d.ts +0 -0
  282. /package/{model → models}/packages/common/log/index.d.ts +0 -0
  283. /package/{model → models}/packages/common/number/index.d.ts +0 -0
  284. /package/{model → models}/packages/common/object/filterEmpty.d.ts +0 -0
  285. /package/{model → models}/packages/common/object/index.d.ts +0 -0
  286. /package/{model → models}/packages/common/rafTimer.d.ts +0 -0
  287. /package/{model → models}/packages/common/string/index.d.ts +0 -0
  288. /package/{model → models}/packages/common/types/index.d.ts +0 -0
  289. /package/{model → models}/packages/react/hooks/useBreadcrumb.d.ts +0 -0
  290. /package/{model → models}/packages/react/hooks/useExecuteOnce.d.ts +0 -0
  291. /package/{model → models}/packages/react/hooks/useLanguage.d.ts +0 -0
  292. /package/{model → models}/packages/react/ui/components/Button/Button.d.ts +0 -0
  293. /package/{model → models}/packages/react/ui/components/Button/SubmitButton.d.ts +0 -0
  294. /package/{model → models}/packages/react/ui/components/Button/index.d.ts +0 -0
  295. /package/{model → models}/packages/react/ui/components/Card/Card.d.ts +0 -0
  296. /package/{model → models}/packages/react/ui/components/Card/index.d.ts +0 -0
  297. /package/{model → models}/packages/react/ui/components/Checkbox/Checkbox.d.ts +0 -0
  298. /package/{model → models}/packages/react/ui/components/Checkbox/index.d.ts +0 -0
  299. /package/{model → models}/packages/react/ui/components/ConfirmDialog/ConfirmDialog.d.ts +0 -0
  300. /package/{model → models}/packages/react/ui/components/ConfirmDialog/index.d.ts +0 -0
  301. /package/{model → models}/packages/react/ui/components/DataTable/ActionBtn.d.ts +0 -0
  302. /package/{model → models}/packages/react/ui/components/DataTable/dataTableWidth.d.ts +0 -0
  303. /package/{model → models}/packages/react/ui/components/DataTable/index.d.ts +0 -0
  304. /package/{model → models}/packages/react/ui/components/Date/Calendar.d.ts +0 -0
  305. /package/{model → models}/packages/react/ui/components/Date/Date.d.ts +0 -0
  306. /package/{model → models}/packages/react/ui/components/Date/LocaleContext.d.ts +0 -0
  307. /package/{model → models}/packages/react/ui/components/Date/LocaleProvider.d.ts +0 -0
  308. /package/{model → models}/packages/react/ui/components/Date/TimePicker.d.ts +0 -0
  309. /package/{model → models}/packages/react/ui/components/Date/data.d.ts +0 -0
  310. /package/{model → models}/packages/react/ui/components/Date/dateLocaleStore.d.ts +0 -0
  311. /package/{model → models}/packages/react/ui/components/Date/dropdownPositioning.d.ts +0 -0
  312. /package/{model → models}/packages/react/ui/components/Date/index.d.ts +0 -0
  313. /package/{model → models}/packages/react/ui/components/Date/locales.d.ts +0 -0
  314. /package/{model → models}/packages/react/ui/components/Drawer/Drawer.d.ts +0 -0
  315. /package/{model → models}/packages/react/ui/components/Drawer/index.d.ts +0 -0
  316. /package/{model → models}/packages/react/ui/components/Dropdown/Dropdown.d.ts +0 -0
  317. /package/{model → models}/packages/react/ui/components/Dropdown/index.d.ts +0 -0
  318. /package/{model → models}/packages/react/ui/components/Form/Form.d.ts +0 -0
  319. /package/{model → models}/packages/react/ui/components/Form/FormItem.d.ts +0 -0
  320. /package/{model → models}/packages/react/ui/components/Form/index.d.ts +0 -0
  321. /package/{model → models}/packages/react/ui/components/Form/useForm.d.ts +0 -0
  322. /package/{model → models}/packages/react/ui/components/ImagePreview/ImagePreview.d.ts +0 -0
  323. /package/{model → models}/packages/react/ui/components/ImagePreview/PreviewImage.d.ts +0 -0
  324. /package/{model → models}/packages/react/ui/components/ImagePreview/index.d.ts +0 -0
  325. /package/{model → models}/packages/react/ui/components/Input/Input.d.ts +0 -0
  326. /package/{model → models}/packages/react/ui/components/Input/index.d.ts +0 -0
  327. /package/{model → models}/packages/react/ui/components/InputNumber/InputNumber.d.ts +0 -0
  328. /package/{model → models}/packages/react/ui/components/InputNumber/index.d.ts +0 -0
  329. /package/{model → models}/packages/react/ui/components/InputNumber/inputNumberUtils.d.ts +0 -0
  330. /package/{model → models}/packages/react/ui/components/Label/Label.d.ts +0 -0
  331. /package/{model → models}/packages/react/ui/components/Label/index.d.ts +0 -0
  332. /package/{model → models}/packages/react/ui/components/Layout/Layout.d.ts +0 -0
  333. /package/{model → models}/packages/react/ui/components/Layout/index.d.ts +0 -0
  334. /package/{model → models}/packages/react/ui/components/Loading/Loading.d.ts +0 -0
  335. /package/{model → models}/packages/react/ui/components/Loading/index.d.ts +0 -0
  336. /package/{model → models}/packages/react/ui/components/Menu/Menu.d.ts +0 -0
  337. /package/{model → models}/packages/react/ui/components/Menu/MenuContext.d.ts +0 -0
  338. /package/{model → models}/packages/react/ui/components/Menu/MenuItem.d.ts +0 -0
  339. /package/{model → models}/packages/react/ui/components/Menu/SubMenu.d.ts +0 -0
  340. /package/{model → models}/packages/react/ui/components/Menu/index.d.ts +0 -0
  341. /package/{model → models}/packages/react/ui/components/Menu/menuTypes.d.ts +0 -0
  342. /package/{model → models}/packages/react/ui/components/Menu/utils.d.ts +0 -0
  343. /package/{model → models}/packages/react/ui/components/Message/Message.d.ts +0 -0
  344. /package/{model → models}/packages/react/ui/components/Message/MessageManager.d.ts +0 -0
  345. /package/{model → models}/packages/react/ui/components/Message/data.d.ts +0 -0
  346. /package/{model → models}/packages/react/ui/components/Message/index.d.ts +0 -0
  347. /package/{model → models}/packages/react/ui/components/Modal/Modal.d.ts +0 -0
  348. /package/{model → models}/packages/react/ui/components/Modal/ModalManager.d.ts +0 -0
  349. /package/{model → models}/packages/react/ui/components/Modal/index.d.ts +0 -0
  350. /package/{model → models}/packages/react/ui/components/Notification/Notification.d.ts +0 -0
  351. /package/{model → models}/packages/react/ui/components/Notification/index.d.ts +0 -0
  352. /package/{model → models}/packages/react/ui/components/Overlay/Overlay.d.ts +0 -0
  353. /package/{model → models}/packages/react/ui/components/Overlay/index.d.ts +0 -0
  354. /package/{model → models}/packages/react/ui/components/Pagination/Pagination.d.ts +0 -0
  355. /package/{model → models}/packages/react/ui/components/Pagination/index.d.ts +0 -0
  356. /package/{model → models}/packages/react/ui/components/Popup/Popup.d.ts +0 -0
  357. /package/{model → models}/packages/react/ui/components/Popup/index.d.ts +0 -0
  358. /package/{model → models}/packages/react/ui/components/Radio/Radio.d.ts +0 -0
  359. /package/{model → models}/packages/react/ui/components/Radio/RadioGroup.d.ts +0 -0
  360. /package/{model → models}/packages/react/ui/components/Radio/index.d.ts +0 -0
  361. /package/{model → models}/packages/react/ui/components/Search/Search.d.ts +0 -0
  362. /package/{model → models}/packages/react/ui/components/Search/index.d.ts +0 -0
  363. /package/{model → models}/packages/react/ui/components/Select/Select.d.ts +0 -0
  364. /package/{model → models}/packages/react/ui/components/Select/dropdownPositioning.d.ts +0 -0
  365. /package/{model → models}/packages/react/ui/components/Select/index.d.ts +0 -0
  366. /package/{model → models}/packages/react/ui/components/Skeleton/Skeleton.d.ts +0 -0
  367. /package/{model → models}/packages/react/ui/components/Skeleton/index.d.ts +0 -0
  368. /package/{model → models}/packages/react/ui/components/Switch/Switch.d.ts +0 -0
  369. /package/{model → models}/packages/react/ui/components/Switch/index.d.ts +0 -0
  370. /package/{model → models}/packages/react/ui/components/TableSearch/TableSearch.d.ts +0 -0
  371. /package/{model → models}/packages/react/ui/components/TableSearch/index.d.ts +0 -0
  372. /package/{model → models}/packages/react/ui/components/TableSearch/lang.d.ts +0 -0
  373. /package/{model → models}/packages/react/ui/components/TableSearch/tableSearchLocaleStore.d.ts +0 -0
  374. /package/{model → models}/packages/react/ui/components/Tabs/Tabs.d.ts +0 -0
  375. /package/{model → models}/packages/react/ui/components/Tabs/index.d.ts +0 -0
  376. /package/{model → models}/packages/react/ui/components/Textarea/Textarea.d.ts +0 -0
  377. /package/{model → models}/packages/react/ui/components/Textarea/index.d.ts +0 -0
  378. /package/{model → models}/packages/react/ui/components/Tooltip/Tooltip.d.ts +0 -0
  379. /package/{model → models}/packages/react/ui/components/Tooltip/index.d.ts +0 -0
  380. /package/{model → models}/packages/react/ui/components/TreeSelect/TreeSelect.d.ts +0 -0
  381. /package/{model → models}/packages/react/ui/components/TreeSelect/index.d.ts +0 -0
  382. /package/{model → models}/packages/react/ui/components/Upload/ImageUpload.d.ts +0 -0
  383. /package/{model → models}/packages/react/ui/components/Upload/Upload.d.ts +0 -0
  384. /package/{model → models}/packages/react/ui/components/Upload/index.d.ts +0 -0
  385. /package/{model → models}/packages/react/ui/components/breadcrumb/breadcrumb.d.ts +0 -0
  386. /package/{model → models}/packages/react/ui/components/breadcrumb/index.d.ts +0 -0
  387. /package/{model → models}/packages/react/ui/components/hooks/useDropdownPositioning.d.ts +0 -0
  388. /package/{model → models}/packages/react/ui/components/hooks/useInputController.d.ts +0 -0
  389. /package/{model → models}/packages/react/ui/components/index.d.ts +0 -0
  390. /package/{model → models}/packages/react/ui/components/table/index.d.ts +0 -0
  391. /package/{model → models}/packages/react/ui/components/table/table.d.ts +0 -0
  392. /package/{model → models}/packages/react/ui/components/types/baseType.d.ts +0 -0
  393. /package/{model → models}/packages/react/ui/i18n/I18nProvider.d.ts +0 -0
  394. /package/{model → models}/packages/react/ui/i18n/index.d.ts +0 -0
  395. /package/{model → models}/packages/react/ui/i18n/useI18n.d.ts +0 -0
  396. /package/{model → models}/packages/react/ui/index.d.ts +0 -0
  397. /package/{model → models}/packages/react/ui/lib/createStoreHook.d.ts +0 -0
  398. /package/{model → models}/packages/react/ui/lib/export.d.ts +0 -0
  399. /package/{model → models}/packages/react/ui/lib/utils.d.ts +0 -0
  400. /package/{model → models}/packages/react/ui/stores/breadcrumb.d.ts +0 -0
  401. /package/{model → models}/packages/react/ui/stores/language.d.ts +0 -0
  402. /package/{model → models}/packages/react/ui/types/index.d.ts +0 -0
  403. /package/{model → models}/typings/type.d.ts +0 -0
@@ -0,0 +1,162 @@
1
+ import "../../../frontend/src/main.css";
2
+ /* empty css */
3
+ import { registerFrontendI18nResources } from "../../../frontend/src/common/language.js";
4
+ import { ModeStoreProvider } from "../../../frontend/src/stores/mode.js";
5
+ import { QK, leftSidebarBasePath } from "../../../frontend/src/common/menu.js";
6
+ import Dashboard from "../../../frontend/apps/dash/Dashboard.js";
7
+ import { renderImportComponent } from "../../../frontend/src/common/importComponent.js";
8
+ import { registerFrontendSchemaFormComponents } from "../../../frontend/src/common/schemaForm.js";
9
+ import { initThemeMode } from "../../../frontend/src/common/theme.js";
10
+ import { getRouterBasename } from "../../../frontend/src/components/Router/basename.js";
11
+ import { clearHydrationData, peekHydrationData } from "../../../packages/common/ssr/hydration.js";
12
+ import { useEffect, useMemo } from "react";
13
+ import { BrowserRouter, Route, Routes } from "react-router-dom";
14
+ import { jsx } from "react/jsx-runtime";
15
+ import { hydrateRoot } from "react-dom/client";
16
+ import extendDashRoutes from "@tc/scalability/dash/customRoutes";
17
+ import initDash from "@tc/scalability/dash/init";
18
+ import { StaticRouter } from "react-router-dom/server";
19
+ //#region ssr/apps/dash/dash.entry.tsx
20
+ registerFrontendSchemaFormComponents();
21
+ var normalizeBasePath = (basePath) => getRouterBasename("browser", basePath);
22
+ var getRequestBasePath = (context) => {
23
+ const page = context.params.page;
24
+ if (page) {
25
+ const marker = `/${page}`;
26
+ const markerIndex = context.path.indexOf(marker);
27
+ if (markerIndex >= 0) return context.path.slice(0, markerIndex + marker.length) || "/";
28
+ }
29
+ const rest = context.params.rest;
30
+ if (!rest) return context.path;
31
+ const suffix = `/${rest}`;
32
+ if (!context.path.endsWith(suffix)) return context.path;
33
+ return context.path.slice(0, -suffix.length) || "/";
34
+ };
35
+ var getQueryString = (value) => {
36
+ if (Array.isArray(value)) return String(value[0] ?? "");
37
+ if (typeof value === "string") return value;
38
+ return "";
39
+ };
40
+ var getServerProjectInfo = (context) => {
41
+ const projectKey = getQueryString(context.query.projk);
42
+ if (!projectKey) return null;
43
+ return context.app.service.project.getProject(projectKey);
44
+ };
45
+ var createBaseRoutes = (projectInfo) => [{
46
+ path: "/",
47
+ component: /* @__PURE__ */ jsx(Dashboard, { projectInfo }),
48
+ children: [{
49
+ path: `/:${QK.k}`,
50
+ component: renderImportComponent(import("../../../frontend/src/defaultPages/SlotPage/index.js"))
51
+ }, {
52
+ path: "/ui-components",
53
+ component: renderImportComponent(import("../../../frontend/apps/ui-components/index.js"))
54
+ }]
55
+ }];
56
+ var createSidebarRoutes = () => [{
57
+ path: `/:${QK.k}/*`,
58
+ component: renderImportComponent(import("../../../frontend/src/defaultPages/SidebarSlotPage/index.js")),
59
+ children: [{
60
+ path: `:${QK.sk}`,
61
+ component: renderImportComponent(import("../../../frontend/src/defaultPages/SlotPage/index.js"))
62
+ }]
63
+ }, {
64
+ path: `/${leftSidebarBasePath}/*`,
65
+ component: renderImportComponent(import("../../../frontend/src/defaultPages/SidebarSlotPageTmp.js")),
66
+ children: [{
67
+ path: `:${QK.sk}`,
68
+ component: renderImportComponent(import("../../../frontend/src/defaultPages/SlotPage/index.js"))
69
+ }]
70
+ }];
71
+ var getDefaultPageRoutes = (projectInfo) => {
72
+ const baseRoutes = createBaseRoutes(projectInfo);
73
+ const sidebarRoutes = createSidebarRoutes();
74
+ if (typeof extendDashRoutes === "function") {
75
+ const ctx = {
76
+ topRoutes: [],
77
+ sidebarRoutes: []
78
+ };
79
+ extendDashRoutes(ctx);
80
+ const { topRoutes: customTopRoutes, sidebarRoutes: customSidebarRoutes } = ctx;
81
+ baseRoutes[0]?.children?.push(...customTopRoutes);
82
+ sidebarRoutes.forEach((sr) => {
83
+ sr.children?.push(...customSidebarRoutes);
84
+ });
85
+ }
86
+ baseRoutes[0]?.children?.push(...sidebarRoutes);
87
+ return baseRoutes;
88
+ };
89
+ var renderRouteElements = (routes) => routes.map((route) => /* @__PURE__ */ jsx(Route, {
90
+ path: route.path,
91
+ element: route.component,
92
+ children: route.children ? renderRouteElements(route.children) : void 0
93
+ }, route.path));
94
+ function DashRoutes({ projectInfo }) {
95
+ return /* @__PURE__ */ jsx(Routes, { children: renderRouteElements(useMemo(() => getDefaultPageRoutes(projectInfo), [projectInfo])) });
96
+ }
97
+ function DashSSRPage({ path = "/", basePath, projectInfo }) {
98
+ const basename = normalizeBasePath(basePath);
99
+ const modeInitialState = {
100
+ projectInfo: projectInfo ?? null,
101
+ initData: Boolean(projectInfo)
102
+ };
103
+ if (typeof window === "undefined") return /* @__PURE__ */ jsx("div", {
104
+ className: "dash",
105
+ children: /* @__PURE__ */ jsx(ModeStoreProvider, {
106
+ initialState: modeInitialState,
107
+ children: /* @__PURE__ */ jsx(StaticRouter, {
108
+ location: path,
109
+ basename,
110
+ children: /* @__PURE__ */ jsx(DashRoutes, { projectInfo })
111
+ })
112
+ })
113
+ });
114
+ return /* @__PURE__ */ jsx("div", {
115
+ className: "dash",
116
+ children: /* @__PURE__ */ jsx(ModeStoreProvider, {
117
+ initialState: modeInitialState,
118
+ children: /* @__PURE__ */ jsx(BrowserRouter, {
119
+ basename: normalizeBasePath(window._basePath),
120
+ children: /* @__PURE__ */ jsx(DashRoutes, { projectInfo })
121
+ })
122
+ })
123
+ });
124
+ }
125
+ function HydrationBoundary({ data, props }) {
126
+ useEffect(() => {
127
+ clearHydrationData();
128
+ }, []);
129
+ return /* @__PURE__ */ jsx(DashSSRPage, { ...data?.props ?? props });
130
+ }
131
+ async function hydrateDash() {
132
+ const container = document.getElementById("root");
133
+ if (!container) {
134
+ console.error("[SSR] Root element #root not found");
135
+ return;
136
+ }
137
+ const data = peekHydrationData();
138
+ const props = data?.props ?? {
139
+ path: window.location.pathname,
140
+ basePath: window._basePath
141
+ };
142
+ await registerFrontendI18nResources();
143
+ initThemeMode();
144
+ if (typeof initDash === "function") await initDash({ rootElement: container });
145
+ hydrateRoot(container, /* @__PURE__ */ jsx(HydrationBoundary, {
146
+ data,
147
+ props
148
+ }));
149
+ }
150
+ async function getServerProps(context) {
151
+ await registerFrontendI18nResources();
152
+ return {
153
+ path: context.path,
154
+ basePath: getRequestBasePath(context),
155
+ projectInfo: getServerProjectInfo(context)
156
+ };
157
+ }
158
+ var pageTitle = "Dash";
159
+ var pageDescription = "Server-rendered Dash page.";
160
+ if (typeof window !== "undefined") hydrateDash();
161
+ //#endregion
162
+ export { DashSSRPage as default, getServerProps, pageDescription, pageTitle };
@@ -0,0 +1,13 @@
1
+ import type { SSRPropsContext } from "../../types";
2
+ export interface DemoProps {
3
+ title?: string;
4
+ content?: string;
5
+ serverTime?: string;
6
+ }
7
+ export declare function App({ title, content, serverTime }: DemoProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function getServerProps(context: SSRPropsContext): Promise<{
9
+ title: string;
10
+ content: string;
11
+ serverTime: string;
12
+ }>;
13
+ export default App;
@@ -0,0 +1,38 @@
1
+ import { createSSREntry } from "../../createSSREntry.js";
2
+ import { useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region ssr/apps/demo/demo.entry.tsx
5
+ /**
6
+ * SSR Demo 页面入口
7
+ * 验证 hydration 注水协议全链路
8
+ */
9
+ /**
10
+ * 渲染 SSR hydration 协议演示页面。
11
+ */
12
+ function App({ title = "SSR Demo", content = "This page is server-side rendered.", serverTime }) {
13
+ const [count, setCount] = useState(0);
14
+ return /* @__PURE__ */ jsxs("div", { children: [
15
+ /* @__PURE__ */ jsx("h1", { children: title }),
16
+ /* @__PURE__ */ jsx("p", { children: content }),
17
+ serverTime && /* @__PURE__ */ jsxs("p", { children: ["Server rendered at: ", /* @__PURE__ */ jsx("time", { children: serverTime })] }),
18
+ /* @__PURE__ */ jsxs("button", {
19
+ type: "button",
20
+ onClick: () => setCount((value) => value + 1),
21
+ children: ["Hydration count: ", count]
22
+ })
23
+ ] });
24
+ }
25
+ /**
26
+ * 服务端数据获取
27
+ * SSR controller 会调用此函数获取初始 props
28
+ */
29
+ async function getServerProps(context) {
30
+ return {
31
+ title: "SSR Demo Page",
32
+ content: "This content was rendered on the server.",
33
+ serverTime: (/* @__PURE__ */ new Date()).toISOString()
34
+ };
35
+ }
36
+ createSSREntry(App);
37
+ //#endregion
38
+ export { App, App as default, getServerProps };
@@ -0,0 +1,26 @@
1
+ import type { SSRPropsContext } from "../../types";
2
+ interface ActivityItem {
3
+ id: string;
4
+ label: string;
5
+ status: 'ready' | 'running' | 'queued';
6
+ owner: string;
7
+ }
8
+ interface MetricItem {
9
+ label: string;
10
+ value: string;
11
+ }
12
+ export interface ServerDataProps extends Record<string, unknown> {
13
+ title: string;
14
+ requestId: string;
15
+ path: string;
16
+ filter: string;
17
+ fetchedAt: string;
18
+ latencyMs: number;
19
+ metrics: MetricItem[];
20
+ activities: ActivityItem[];
21
+ }
22
+ declare function ServerDataPage({ title, requestId, path, filter, fetchedAt, latencyMs, metrics, activities, }: ServerDataProps): import("react/jsx-runtime").JSX.Element;
23
+ export declare function getServerProps(context: SSRPropsContext): Promise<ServerDataProps>;
24
+ export declare const pageTitle = "Server Data SSR";
25
+ export declare const pageDescription = "SSR demo that fetches data on the server before hydration.";
26
+ export default ServerDataPage;
@@ -0,0 +1,275 @@
1
+ import { createSSREntry } from "../../createSSREntry.js";
2
+ import { useState } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region ssr/apps/server-data/server-data.entry.tsx
5
+ /**
6
+ * SSR server-data demo
7
+ * Shows async getServerProps data flowing into first paint and hydration.
8
+ */
9
+ var shellStyle = {
10
+ maxWidth: 920,
11
+ margin: "0 auto",
12
+ padding: "32px 24px",
13
+ fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif",
14
+ color: "oklch(24% 0.025 245)",
15
+ background: "oklch(98% 0.006 245)",
16
+ minHeight: "100vh"
17
+ };
18
+ var panelStyle = {
19
+ border: "1px solid oklch(88% 0.018 245)",
20
+ borderRadius: 8,
21
+ background: "oklch(99% 0.004 245)",
22
+ padding: 20
23
+ };
24
+ /**
25
+ * 从 query 值中读取字符串,并提供默认值。
26
+ */
27
+ var getQueryString = (value, fallback) => {
28
+ if (Array.isArray(value)) return String(value[0] ?? fallback);
29
+ if (typeof value === "string" && value.trim()) return value;
30
+ return fallback;
31
+ };
32
+ /**
33
+ * 模拟异步服务端数据请求延迟。
34
+ */
35
+ var wait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
36
+ /**
37
+ * 渲染服务端数据 SSR 示例页面。
38
+ */
39
+ function ServerDataPage({ title, requestId, path, filter, fetchedAt, latencyMs, metrics, activities }) {
40
+ const [ackCount, setAckCount] = useState(0);
41
+ return /* @__PURE__ */ jsx("main", {
42
+ style: shellStyle,
43
+ children: /* @__PURE__ */ jsxs("section", {
44
+ style: {
45
+ display: "grid",
46
+ gap: 18
47
+ },
48
+ children: [
49
+ /* @__PURE__ */ jsxs("div", { children: [
50
+ /* @__PURE__ */ jsx("p", {
51
+ style: {
52
+ margin: "0 0 8px",
53
+ fontSize: 13,
54
+ color: "oklch(48% 0.035 245)"
55
+ },
56
+ children: "getServerProps demo"
57
+ }),
58
+ /* @__PURE__ */ jsx("h1", {
59
+ style: {
60
+ margin: 0,
61
+ fontSize: 34,
62
+ lineHeight: 1.15
63
+ },
64
+ children: title
65
+ }),
66
+ /* @__PURE__ */ jsxs("p", {
67
+ style: {
68
+ maxWidth: 680,
69
+ margin: "12px 0 0",
70
+ lineHeight: 1.65
71
+ },
72
+ children: [
73
+ "This page waits for server data before render, injects it into",
74
+ /* @__PURE__ */ jsx("code", { children: " window.__SSR_DATA__" }),
75
+ ", then hydrates with the same props."
76
+ ]
77
+ })
78
+ ] }),
79
+ /* @__PURE__ */ jsx("div", {
80
+ style: {
81
+ display: "grid",
82
+ gridTemplateColumns: "repeat(3, minmax(0, 1fr))",
83
+ gap: 12
84
+ },
85
+ children: metrics.map((metric) => /* @__PURE__ */ jsxs("div", {
86
+ style: panelStyle,
87
+ children: [/* @__PURE__ */ jsx("div", {
88
+ style: {
89
+ fontSize: 13,
90
+ color: "oklch(48% 0.035 245)"
91
+ },
92
+ children: metric.label
93
+ }), /* @__PURE__ */ jsx("div", {
94
+ style: {
95
+ marginTop: 6,
96
+ fontSize: 24,
97
+ fontWeight: 700
98
+ },
99
+ children: metric.value
100
+ })]
101
+ }, metric.label))
102
+ }),
103
+ /* @__PURE__ */ jsxs("div", {
104
+ style: panelStyle,
105
+ children: [/* @__PURE__ */ jsx("h2", {
106
+ style: {
107
+ margin: "0 0 14px",
108
+ fontSize: 18
109
+ },
110
+ children: "Server payload"
111
+ }), /* @__PURE__ */ jsxs("dl", {
112
+ style: {
113
+ display: "grid",
114
+ gridTemplateColumns: "140px 1fr",
115
+ gap: "10px 14px",
116
+ margin: 0
117
+ },
118
+ children: [
119
+ /* @__PURE__ */ jsx("dt", {
120
+ style: { color: "oklch(48% 0.035 245)" },
121
+ children: "Request ID"
122
+ }),
123
+ /* @__PURE__ */ jsx("dd", {
124
+ style: { margin: 0 },
125
+ children: requestId
126
+ }),
127
+ /* @__PURE__ */ jsx("dt", {
128
+ style: { color: "oklch(48% 0.035 245)" },
129
+ children: "Path"
130
+ }),
131
+ /* @__PURE__ */ jsx("dd", {
132
+ style: { margin: 0 },
133
+ children: path
134
+ }),
135
+ /* @__PURE__ */ jsx("dt", {
136
+ style: { color: "oklch(48% 0.035 245)" },
137
+ children: "Filter"
138
+ }),
139
+ /* @__PURE__ */ jsx("dd", {
140
+ style: { margin: 0 },
141
+ children: filter
142
+ }),
143
+ /* @__PURE__ */ jsx("dt", {
144
+ style: { color: "oklch(48% 0.035 245)" },
145
+ children: "Fetched at"
146
+ }),
147
+ /* @__PURE__ */ jsx("dd", {
148
+ style: { margin: 0 },
149
+ children: /* @__PURE__ */ jsx("time", { children: fetchedAt })
150
+ }),
151
+ /* @__PURE__ */ jsx("dt", {
152
+ style: { color: "oklch(48% 0.035 245)" },
153
+ children: "Latency"
154
+ }),
155
+ /* @__PURE__ */ jsxs("dd", {
156
+ style: { margin: 0 },
157
+ children: [latencyMs, "ms"]
158
+ })
159
+ ]
160
+ })]
161
+ }),
162
+ /* @__PURE__ */ jsxs("div", {
163
+ style: panelStyle,
164
+ children: [/* @__PURE__ */ jsx("h2", {
165
+ style: {
166
+ margin: "0 0 14px",
167
+ fontSize: 18
168
+ },
169
+ children: "Activities"
170
+ }), /* @__PURE__ */ jsx("div", {
171
+ style: {
172
+ display: "grid",
173
+ gap: 10
174
+ },
175
+ children: activities.map((item) => /* @__PURE__ */ jsxs("article", {
176
+ style: {
177
+ display: "grid",
178
+ gridTemplateColumns: "1fr auto",
179
+ gap: 10,
180
+ alignItems: "center",
181
+ borderTop: "1px solid oklch(91% 0.014 245)",
182
+ paddingTop: 10
183
+ },
184
+ children: [/* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("strong", { children: item.label }), /* @__PURE__ */ jsx("div", {
185
+ style: {
186
+ marginTop: 4,
187
+ fontSize: 13,
188
+ color: "oklch(48% 0.035 245)"
189
+ },
190
+ children: item.owner
191
+ })] }), /* @__PURE__ */ jsx("span", {
192
+ style: {
193
+ fontSize: 13,
194
+ fontWeight: 700
195
+ },
196
+ children: item.status
197
+ })]
198
+ }, item.id))
199
+ })]
200
+ }),
201
+ /* @__PURE__ */ jsxs("button", {
202
+ type: "button",
203
+ onClick: () => setAckCount((value) => value + 1),
204
+ style: {
205
+ width: "fit-content",
206
+ border: "1px solid oklch(37% 0.07 245)",
207
+ borderRadius: 8,
208
+ background: "oklch(32% 0.065 245)",
209
+ color: "oklch(98% 0.006 245)",
210
+ padding: "10px 14px",
211
+ fontWeight: 700,
212
+ cursor: "pointer"
213
+ },
214
+ children: ["Hydrated acknowledgements: ", ackCount]
215
+ })
216
+ ]
217
+ })
218
+ });
219
+ }
220
+ /**
221
+ * 生成服务端数据示例的首屏 props。
222
+ */
223
+ async function getServerProps(context) {
224
+ const startedAt = Date.now();
225
+ const filter = getQueryString(context.query.filter, "all");
226
+ await wait(30);
227
+ const activities = [
228
+ {
229
+ id: "build",
230
+ label: "SSR bundle compiled",
231
+ status: "ready",
232
+ owner: "bundler/buildSSR"
233
+ },
234
+ {
235
+ id: "props",
236
+ label: "Server props resolved",
237
+ status: "ready",
238
+ owner: "getServerProps"
239
+ },
240
+ {
241
+ id: "hydrate",
242
+ label: "Client hydration prepared",
243
+ status: "queued",
244
+ owner: "createSSREntry"
245
+ }
246
+ ];
247
+ return {
248
+ title: "Server Data SSR Demo",
249
+ requestId: `ssr-${startedAt.toString(36)}`,
250
+ path: context.path,
251
+ filter,
252
+ fetchedAt: (/* @__PURE__ */ new Date()).toISOString(),
253
+ latencyMs: Date.now() - startedAt,
254
+ metrics: [
255
+ {
256
+ label: "Source",
257
+ value: "server"
258
+ },
259
+ {
260
+ label: "Rows",
261
+ value: String(activities.length)
262
+ },
263
+ {
264
+ label: "Filter",
265
+ value: filter
266
+ }
267
+ ],
268
+ activities
269
+ };
270
+ }
271
+ var pageTitle = "Server Data SSR";
272
+ var pageDescription = "SSR demo that fetches data on the server before hydration.";
273
+ createSSREntry(ServerDataPage);
274
+ //#endregion
275
+ export { ServerDataPage as default, getServerProps, pageDescription, pageTitle };
@@ -0,0 +1,5 @@
1
+ import "../../../frontend/src/main";
2
+ declare function UIComponentsSSRPage(): import("react/jsx-runtime").JSX.Element;
3
+ export declare const pageTitle = "UI Components";
4
+ export declare const pageDescription = "Server-rendered UI components preview.";
5
+ export default UIComponentsSSRPage;
@@ -0,0 +1,17 @@
1
+ import "../../../frontend/src/main.css";
2
+ /* empty css */
3
+ import { createSSREntry } from "../../createSSREntry.js";
4
+ import TestPage from "../../../packages/react/ui/components/testPage/index.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region ssr/apps/ui-components/ui-components.entry.tsx
7
+ /**
8
+ * 渲染 UI 组件预览的 SSR 页面。
9
+ */
10
+ function UIComponentsSSRPage() {
11
+ return /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(TestPage, {}) });
12
+ }
13
+ var pageTitle = "UI Components";
14
+ var pageDescription = "Server-rendered UI components preview.";
15
+ createSSREntry(UIComponentsSSRPage);
16
+ //#endregion
17
+ export { UIComponentsSSRPage as default, pageDescription, pageTitle };
@@ -0,0 +1,2 @@
1
+ import { StateParams } from "./type";
2
+ export declare const promiseCache: <T>(params: StateParams<T>) => Promise<T>;
@@ -0,0 +1,31 @@
1
+ //#region ssr/components/StreamingRender/StreamingCache.ts
2
+ var cacheMap = /* @__PURE__ */ new Map();
3
+ var STREAM_CACHE_TTL_MS = 3e4;
4
+ /**
5
+ * promise 响应30s后清除缓存
6
+ */
7
+ var promiseCacheCleanup = (params) => {
8
+ const { keyName, promise } = params;
9
+ const onSettled = () => {
10
+ setTimeout(() => {
11
+ if (cacheMap.get(keyName)?.promise === promise) cacheMap.delete(keyName);
12
+ }, STREAM_CACHE_TTL_MS);
13
+ };
14
+ promise.then(onSettled, onSettled);
15
+ };
16
+ var promiseCache = (params) => {
17
+ const { keyName, getData } = params;
18
+ let result = cacheMap.get(keyName);
19
+ if (!result) {
20
+ const _v = { promise: Promise.resolve().then(getData) };
21
+ cacheMap.set(keyName, _v);
22
+ result = _v;
23
+ promiseCacheCleanup({
24
+ keyName,
25
+ promise: _v.promise
26
+ });
27
+ }
28
+ return result.promise;
29
+ };
30
+ //#endregion
31
+ export { promiseCache };
@@ -0,0 +1,3 @@
1
+ import { StreamingRenderProps } from "./type";
2
+ declare const StreamingRender: <T>(props: StreamingRenderProps<T>) => import("react/jsx-runtime").JSX.Element;
3
+ export default StreamingRender;
@@ -0,0 +1,48 @@
1
+ import { promiseCache } from "./StreamingCache.js";
2
+ import { useSuspensePromise } from "../../hooks/useSuspensePromise.js";
3
+ import { StreamingRenderGetDataScript, readClientStreamData } from "./StreamingScript.js";
4
+ import { Suspense } from "react";
5
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
6
+ //#region ssr/components/StreamingRender/StreamingRender.tsx
7
+ /**
8
+ * 双端运行的 hook
9
+ * server 端 调用
10
+ */
11
+ var useStreamData = (params) => {
12
+ const clientData = readClientStreamData(params.keyName);
13
+ if (clientData?.found) return clientData.data;
14
+ return useSuspensePromise(promiseCache(params));
15
+ };
16
+ var RenderCom = (props) => {
17
+ const { keyName, getData, name, children } = props;
18
+ const KN = `${keyName}+${name ?? ""}`;
19
+ const data = useStreamData({
20
+ keyName: KN,
21
+ getData
22
+ });
23
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [children(data), /* @__PURE__ */ jsx(StreamingRenderGetDataScript, {
24
+ keyName: KN,
25
+ data
26
+ })] });
27
+ };
28
+ /**
29
+ * 组件级流式异步数据渲染组件。
30
+ *
31
+ * - 服务端通过 Suspense 等待 getData(),并把结果注入到 HTML script 中。
32
+ * - 客户端 hydration 优先读取服务端注入数据,读取失败时才会走 getData() fallback。
33
+ * - keyName 需要同请求内稳定;多请求数据可能不同时,应拼入非敏感的请求维度。
34
+ * - getData() 返回值会进入 HTML,不能包含 token、密钥、未脱敏个人信息等敏感数据。
35
+ */
36
+ var StreamingRender = (props) => {
37
+ const { fallback, name, ...ext } = props;
38
+ return /* @__PURE__ */ jsx(Suspense, {
39
+ fallback,
40
+ name,
41
+ children: /* @__PURE__ */ jsx(RenderCom, {
42
+ ...ext,
43
+ name
44
+ })
45
+ });
46
+ };
47
+ //#endregion
48
+ export { StreamingRender as default };
@@ -0,0 +1,8 @@
1
+ import { StateParams } from "./type";
2
+ export declare const StreamingRenderGetDataScript: <T>(props: Pick<StateParams<T>, "keyName"> & {
3
+ data: T;
4
+ }) => false | import("react/jsx-runtime").JSX.Element;
5
+ export declare const readClientStreamData: <T>(key: Pick<StateParams<T>, "keyName">["keyName"]) => {
6
+ found: boolean;
7
+ data: T | null;
8
+ };