@_tc/template-core 0.2.12 → 0.3.1

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 +31 -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 +66 -33
  11. package/CHANGE.md +48 -5
  12. package/README.md +161 -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
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: tc-component-usage-skills
3
- description: Use when building or modifying React UI in TemplateCore projects. Covers how to choose, compose, and correctly use components from `@tc/ui-react` / `@_tc/template-core/fe/rc`, plus TemplateCore frontend helpers from `@_tc/template-core/fe` such as `AsyncSelect`, `LanguageSwitch`, and `ThemeSwitch`. Includes patterns for forms, tables, modals, drawers, menus, Dashboard toolbar UI, and TC visual style.
3
+ description: Use when building or modifying React UI in TemplateCore projects. Covers how to choose, compose, and correctly use components from the published `@_tc/template-core/fe/rc` UI entry, plus TemplateCore frontend helpers from `@_tc/template-core/fe` such as `AsyncSelect`, `LanguageSwitch`, and `ThemeSwitch`. Includes patterns for forms, tables, modals, drawers, menus, Dashboard toolbar UI, and TC visual style.
4
4
  ---
5
5
 
6
6
  # TC Component Usage
7
7
 
8
- Use this skill when writing React components that consume `@tc/ui-react`, `@_tc/template-core/fe/rc`, or TemplateCore frontend helpers from `@_tc/template-core/fe`.
8
+ Use this skill when writing React components that consume the published TemplateCore UI entry `@_tc/template-core/fe/rc` or frontend helpers from `@_tc/template-core/fe`.
9
9
 
10
10
  ## Quick Decision Flow
11
11
 
@@ -51,7 +51,7 @@ const [form] = useForm<T>();
51
51
  ```
52
52
 
53
53
  UI-library built-in `type` values: `input`, `inputNumber`, `select`, `textarea`, `switch`, `date`, `checkbox`.
54
- TemplateCore adds framework type `asyncSelect` via `@tc/scalability/SchemaForm/frameData`; custom app types are registered via `@tc/scalability/SchemaForm/data`.
54
+ TemplateCore adds framework type `asyncSelect`; custom app types are registered in the consumer app at `frontend/extended/SchemaForm/data.ts`.
55
55
 
56
56
  ### Modal (Declarative + Imperative)
57
57
 
@@ -114,24 +114,22 @@ pnpm type-check
114
114
  ## Component Import Convention
115
115
 
116
116
  ```tsx
117
- import { Button, Form, FormItem, Input, DataTable, Modal, modal, useForm } from '@tc/ui-react'
117
+ import { Button, Form, FormItem, Input, DataTable, Modal, modal, useForm } from '@_tc/template-core/fe/rc'
118
118
  import { AsyncSelect, LanguageSwitch, ThemeSwitch } from '@_tc/template-core/fe'
119
119
  ```
120
120
 
121
- When consuming the published TemplateCore package, `@_tc/template-core/fe/rc` re-exports the UI component library:
121
+ When editing the TemplateCore package source repository, `@tc/ui-react` is the raw UI workspace package. Published consumer projects should use `@_tc/template-core/fe/rc`, which re-exports the UI component library:
122
122
 
123
123
  ```tsx
124
124
  import { Button, DataTable, TableSearch } from '@_tc/template-core/fe/rc'
125
125
  ```
126
126
 
127
- Inside this source repository, use `@tc/ui-react` for the raw UI workspace package. The `@_tc/template-core/fe/rc` path is a published TemplateCore package export generated into `dist/package.json`.
128
-
129
127
  Style entry:
130
128
 
131
129
  ```tsx
132
- import '@tc/ui-react/index.css'
133
- // or, in published TemplateCore frontend entries:
134
130
  import '@_tc/template-core/fe/tailwind_ui.css'
131
+ // source repository raw UI work can use:
132
+ // import '@tc/ui-react/index.css'
135
133
  ```
136
134
 
137
135
  ## Visual Style
@@ -1,6 +1,6 @@
1
1
  # Component API Reference
2
2
 
3
- Complete props for every `@tc/ui-react` component.
3
+ Complete props for the UI components re-exported by `@_tc/template-core/fe/rc`.
4
4
 
5
5
  ---
6
6
 
@@ -317,7 +317,7 @@ interface SchemaFormProps<T> {
317
317
  }
318
318
  ```
319
319
 
320
- **Important:** In `horizontal` layout, `footerButtons` are NOT auto-rendered. UI-library built-in types: `input`, `inputNumber`, `select`, `textarea`, `switch`, `date`, `checkbox`. TemplateCore also registers framework type `asyncSelect`. App types are extensible via `@tc/scalability/SchemaForm/data`.
320
+ **Important:** In `horizontal` layout, `footerButtons` are NOT auto-rendered. UI-library built-in types: `input`, `inputNumber`, `select`, `textarea`, `switch`, `date`, `checkbox`. TemplateCore also registers framework type `asyncSelect`. App types are registered in `frontend/extended/SchemaForm/data.ts` and resolved by the TemplateCore build alias.
321
321
 
322
322
  ---
323
323
 
@@ -8,8 +8,8 @@ Copy-paste starting points for common TC UI scenarios.
8
8
 
9
9
  ```tsx
10
10
  import { useState, useEffect, useCallback } from 'react'
11
- import { DataTable, TableSearch, Button, Modal, SchemaForm, ConfirmDialog, message, useForm } from '@tc/ui-react'
12
- import type { TableColumnDef, TableSearchSchema } from '@tc/ui-react'
11
+ import { DataTable, TableSearch, Button, Modal, SchemaForm, ConfirmDialog, message, useForm } from '@_tc/template-core/fe/rc'
12
+ import type { TableColumnDef, TableSearchSchema } from '@_tc/template-core/fe/rc'
13
13
 
14
14
  interface Product {
15
15
  id: number
@@ -164,7 +164,7 @@ export function ProductList() {
164
164
  ## Example 2: Detail Drawer
165
165
 
166
166
  ```tsx
167
- import { Drawer, Button, Loading, Skeleton } from '@tc/ui-react'
167
+ import { Drawer, Button, Loading, Skeleton } from '@_tc/template-core/fe/rc'
168
168
 
169
169
  export function UserDetailDrawer({ userId, open, onClose }: {
170
170
  userId: number | null
@@ -207,7 +207,7 @@ export function UserDetailDrawer({ userId, open, onClose }: {
207
207
  ## Example 3: App Shell with Sidebar Menu
208
208
 
209
209
  ```tsx
210
- import { Layout, Menu, Breadcrumb } from '@tc/ui-react'
210
+ import { Layout, Menu, Breadcrumb } from '@_tc/template-core/fe/rc'
211
211
  import { useNavigate, useLocation } from 'react-router-dom'
212
212
 
213
213
  export function AppShell({ children }: { children: ReactNode }) {
@@ -253,7 +253,7 @@ export function AppShell({ children }: { children: ReactNode }) {
253
253
  ## Example 4: Image Upload Form
254
254
 
255
255
  ```tsx
256
- import { SchemaForm, ImageUpload, message, useForm } from '@tc/ui-react'
256
+ import { SchemaForm, ImageUpload, message, useForm } from '@_tc/template-core/fe/rc'
257
257
 
258
258
  interface BannerForm {
259
259
  title: string
@@ -295,7 +295,7 @@ function BannerEditor() {
295
295
  ## Example 5: TreeSelect for Permissions
296
296
 
297
297
  ```tsx
298
- import { TreeSelect } from '@tc/ui-react'
298
+ import { TreeSelect } from '@_tc/template-core/fe/rc'
299
299
 
300
300
  function PermissionEditor() {
301
301
  const [checked, setChecked] = useState<(string | number)[]>([])
@@ -326,7 +326,7 @@ function PermissionEditor() {
326
326
  ## Example 6: DataTable with Row Selection (Batch Actions)
327
327
 
328
328
  ```tsx
329
- import { DataTable, Button, message } from '@tc/ui-react'
329
+ import { DataTable, Button, message } from '@_tc/template-core/fe/rc'
330
330
 
331
331
  function BatchUserList() {
332
332
  const [selectedKeys, setSelectedKeys] = useState<(string | number)[]>([])
@@ -368,7 +368,7 @@ function BatchUserList() {
368
368
  ## Example 7: DatePicker Usage
369
369
 
370
370
  ```tsx
371
- import { DatePicker } from '@tc/ui-react'
371
+ import { DatePicker } from '@_tc/template-core/fe/rc'
372
372
 
373
373
  // Single date
374
374
  <DatePicker
@@ -398,7 +398,7 @@ import { DatePicker } from '@tc/ui-react'
398
398
  ## Example 8: Tooltip & Popup
399
399
 
400
400
  ```tsx
401
- import { Tooltip, Popup, Dropdown, Button } from '@tc/ui-react'
401
+ import { Tooltip, Popup, Dropdown, Button } from '@_tc/template-core/fe/rc'
402
402
  import { useRef, useState } from 'react'
403
403
 
404
404
  // Simple tooltip
@@ -1,6 +1,6 @@
1
1
  # Component Patterns
2
2
 
3
- Recurring patterns and best practices for `@tc/ui-react`.
3
+ Recurring patterns and best practices for TemplateCore UI components from `@_tc/template-core/fe/rc`.
4
4
 
5
5
  ---
6
6
 
@@ -69,7 +69,7 @@ TemplateCore already registers framework field type `asyncSelect`:
69
69
  The options endpoint should return the normal TemplateCore response wrapper, usually via `this.success(ctx, options)`.
70
70
 
71
71
  ```tsx
72
- // In the app-side module aliased as @tc/scalability/SchemaForm/data:
72
+ // frontend/extended/SchemaForm/data.ts
73
73
  const consumerComponentsMap = {
74
74
  richText: RichTextEditor,
75
75
  userSelector: UserSelect,
@@ -311,7 +311,7 @@ In `mode='top'`, SubMenus always use popup dropdowns.
311
311
  ### Toast Messages
312
312
 
313
313
  ```tsx
314
- import { message } from '@tc/ui-react'
314
+ import { message } from '@_tc/template-core/fe/rc'
315
315
 
316
316
  message.success('User created successfully')
317
317
  message.error('Failed to save')
@@ -322,7 +322,7 @@ message.info('New update available')
322
322
  ### Notifications (Corner)
323
323
 
324
324
  ```tsx
325
- import { Notification } from '@tc/ui-react'
325
+ import { Notification } from '@_tc/template-core/fe/rc'
326
326
 
327
327
  // As component
328
328
  <Notification type="error" title="Upload Failed" message="Network error. Retry?" />
@@ -385,7 +385,7 @@ This means both patterns work identically:
385
385
 
386
386
  ## CSS Conventions
387
387
 
388
- - Import styles before using components: `@tc/ui-react/index.css` for raw UI usage, or `@_tc/template-core/fe/tailwind_ui.css` for published TemplateCore frontend entries.
388
+ - Import styles before using components: `@_tc/template-core/fe/tailwind_ui.css` for published TemplateCore frontend entries; raw UI source work can use `@tc/ui-react/index.css`.
389
389
  - All CSS classes are prefixed `tc-ui-<component-name>`
390
390
  - Tailwind CSS used for styling
391
391
  - Theme via CSS custom properties: `hsl(var(--theme-primary))`, `hsl(var(--theme-background))`, etc.
@@ -11,7 +11,7 @@ import type { BaseResponse, RequestConfig, ResponseConfig } from '@_tc/template-
11
11
  import { Button, DataTable, TableSearch } from '@_tc/template-core/fe/rc'
12
12
  ```
13
13
 
14
- Inside this repository, use `@tc/ui-react` for the raw UI workspace package. In published business projects, prefer `@_tc/template-core/fe/rc` for UI components, `@_tc/template-core/fe` for frontend runtime helpers, and `@_tc/template-core/fe/common/request` when only the request layer is needed.
14
+ Inside the TemplateCore package source repository, use `@tc/ui-react` for the raw UI workspace package. In published business projects, prefer `@_tc/template-core/fe/rc` for UI components, `@_tc/template-core/fe` for frontend runtime helpers, and `@_tc/template-core/fe/common/request` when only the request layer is needed.
15
15
 
16
16
  ## LanguageSwitch
17
17
 
@@ -1,21 +1,24 @@
1
1
  ---
2
2
  name: tc-generator
3
- description: Generate TemplateCore business projects, modules, model configurations, Schema CRUD pages, controllers, routers, and project overrides that follow this repository's Koa + React + model-driven conventions. Use when the user asks to create or modify TC/TemplateCore projects, admin modules, model/mode.js files, schemaConfig CRUD pages, menu structures, or app/controller and app/router files.
3
+ description: Generate consumer business projects, modules, model configurations, Schema CRUD pages, controllers, routers, and project overrides that use the TemplateCore npm package's Koa + React + model-driven conventions. Use when the user asks to create or modify TC/TemplateCore consumer apps, admin modules, models/mode.js files, schemaConfig CRUD pages, menu structures, or app/controller and app/router files.
4
4
  ---
5
5
 
6
6
  # TC Generator
7
7
 
8
- Use this skill to generate or update TemplateCore business code.
8
+ Use this skill to generate or update consumer business code that runs on TemplateCore.
9
+
10
+ This workspace is the TemplateCore npm package repository (`@_tc/template-core`). Treat generated business code as consumer-app code that imports the package. Do not treat the package repository root as the business `baseDir` unless the user explicitly asks to edit this repository's demo, reference templates, or framework/package source.
9
11
 
10
12
  ## Quick Workflow
11
13
 
12
- 1. Identify the target business root. In this repository, a generated project usually uses:
14
+ 1. Identify the target consumer business root. A generated consumer app usually uses:
13
15
  - `index.js`
14
16
  - `config/config.default.js`
15
17
  - `app/controller/*.js`
16
18
  - `app/router/*.js`
17
- - `model/{modelKey}/mode.js`
18
- - optional `model/{modelKey}/project/{projectKey}.js`
19
+ - `models/{modelKey}/mode.js`
20
+ - optional `models/{modelKey}/project/{projectKey}.js`
21
+ - optional `ssr/apps/{page}/{page}.entry.jsx|tsx` only when the user explicitly asks for SSR pages.
19
22
  2. Read only the reference needed:
20
23
  - Model/menu/schema rules: `reference/model-schema.md`
21
24
  - Runtime extensions (db, Dashboard slots/routes, frontend helpers): `reference/runtime-extensions.md`
@@ -23,15 +26,18 @@ Use this skill to generate or update TemplateCore business code.
23
26
  - Complete product CRUD example: `reference/example.md`
24
27
  3. Generate the smallest working slice first: config, entry, controller, router, model.
25
28
  4. Keep keys stable. Array merge and project overrides depend on `key`.
26
- 5. Prefer CommonJS `.js` for generated business examples unless the existing business project already uses TypeScript.
29
+ 5. Prefer CommonJS `.js` for generated consumer examples unless the existing consumer app already uses TypeScript.
30
+ 6. If the existing consumer app declares `"type": "module"`, do not generate `.js` backend convention files with `module.exports` under that scope. Use `.ts` convention files, or add a local `package.json` with `{ "type": "commonjs" }` under `app/`, `config/`, or `models/` before generating CommonJS `.js` files.
27
31
 
28
32
  ## TemplateCore Conventions
29
33
 
30
- - Start the app with `serverStart({ name, baseDir })` from `@_tc/template-core`.
31
- - Start the built-in frontend with `await buildFE("dev")` from `@_tc/template-core/bundler` when the user needs the admin UI. The current API returns `Promise<void>`; in dev mode it performs the initial build, then watches the business `frontend/` directory. Use `buildFE("prod", { output: "run", minifyHtml: true })` when the generated project should emit its own `app/public/dist` templates and compact final `.tpl` output.
34
+ - Start the consumer app with `serverStart({ name, baseDir })` from `@_tc/template-core`.
35
+ - Start the built-in frontend with `await buildFE("dev")` from `@_tc/template-core/bundler` when the user needs the admin UI. The current API returns `Promise<void>`; in dev mode it performs the initial build, then watches the consumer app's `frontend/` directory. Use `buildFE("prod", { output: "run", minifyHtml: true })` when the generated consumer app should emit its own `app/public/dist` templates and compact final `.tpl` output.
32
36
  - `buildFE()` writes `FEBuildKey` into the output directory; the server uses it to invalidate local HTML ETag cache after frontend rebuilds.
33
- - If `buildFE("dev")` is used in a standalone project, include the TemplateCore peer dependencies or use the package manager's peer dependency auto-install behavior.
34
- - Business code lives under the user's `baseDir`, not inside TemplateCore framework folders.
37
+ - Generate SSR pages only when requested. SSR entries live under `ssr/apps/{page}/{page}.entry.tsx`, import `createSSREntry` from `@_tc/template-core/ssr/createSSREntry`, and are built with `buildSSR({ baseDir, output: "run" })` from `@_tc/template-core/bundler`. Use `watchSSRFiles({ baseDir, output: "run" })` for development watches. SSR entries may export static strings or `SSRPageMetaResolver` functions as `pageTitle` / `pageDescription`; resolver functions run after `getServerProps()` and receive `{ params, query, path, app, ctx, props }`.
38
+ - SSR entry files are built for both server and browser. Do not put top-level Node-only or browser-only side effects in them; load server-only code inside `getServerProps()` with dynamic import and guard browser APIs with `typeof window !== "undefined"` or React effects. Do not call frontend API helpers that depend on `window` or `localStorage` from `getServerProps()`; put Node-safe request/data code in `*.server.ts` and import it dynamically from `getServerProps()`.
39
+ - If `buildFE("dev")` is used in a standalone consumer app, include the TemplateCore peer dependencies or use the package manager's peer dependency auto-install behavior.
40
+ - Consumer business code lives under the consumer app's `baseDir`, not inside this TemplateCore npm package's framework folders.
35
41
  - The framework provides `app.extends.db` as a default SQLite-backed KV/SQL helper. Use it for small framework/business settings; override `app/extends/db.js` only when the project needs a custom storage implementation.
36
42
  - Backend loaders map filenames to camelCase fields:
37
43
  - `app/controller/product.js` -> `app.controller.product`
@@ -47,25 +53,36 @@ Use this skill to generate or update TemplateCore business code.
47
53
 
48
54
  ## Output Rules
49
55
 
50
- - Make generated code directly runnable when package dependencies are installed.
56
+ - Make generated consumer code directly runnable when its package dependencies are installed.
51
57
  - Include realistic in-memory data only for demos or scaffolds.
52
58
  - Use `$i18n::...` only when also adding or pointing to language resources; otherwise write plain labels.
53
59
  - For Schema CRUD, include `tableOption`, `createFormOption`, `editFormOption`, and `detailPanelOption` only where the field should appear.
54
60
  - For edit/detail components, set `fetchKey` to the primary key field.
55
61
  - For remove buttons, use `$schema::{field}` to pull values from the current row.
56
- - Generate frontend extensions only when needed:
62
+ - When generating or updating a model, validate every requested form `comType` and table `renderComponent` before writing the model:
63
+ - Do not hard-code the available `comType` or `renderComponent` names in this skill. They are extensible by the framework consumer and can vary by project/version.
64
+ - Determine availability from the target consumer app's existing registrations and the TemplateCore package source/docs available in this repository. Consumer app registrations include `frontend/extended/SchemaForm/data.ts` for form types and `frontend/extended/SchemaPage/SchemaTable/data.ts` for table render components.
65
+ - If a requested type/component cannot be verified as available, do not invent a substitute, do not auto-create frontend extensions, and do not force the model to use an unknown type. Return the unverified/missing type list to the user and ask them to choose whether to reuse an existing type, add/register a custom component, or adjust the field design.
66
+ - Generate frontend extensions only when explicitly requested or after the user confirms a missing custom type/component:
57
67
  - Dashboard header UI: `frontend/extended/dash/components.tsx` with `HeaderView.userArea`
58
68
  - Dashboard custom routes: `frontend/extended/dash/customRoutes.tsx`
59
69
  - SchemaForm field types: `frontend/extended/SchemaForm/data.ts`
70
+ - SchemaTable render components: `frontend/extended/SchemaPage/SchemaTable/data.ts`
60
71
  - SchemaPage custom call components: `frontend/extended/SchemaPage/CallCom/data.ts`
61
72
 
62
73
  ## Validation
63
74
 
64
- When editing an existing project, verify with the closest available command:
75
+ When editing this TemplateCore npm package repository, verify with the closest relevant package command:
76
+
77
+ ```bash
78
+ npm run type-check
79
+ ```
80
+
81
+ When editing or generating a consumer business project, verify with the closest command available in that project:
65
82
 
66
83
  ```bash
67
84
  pnpm type-check
68
85
  pnpm dev
69
86
  ```
70
87
 
71
- For generated standalone CommonJS examples, at minimum inspect paths and imports against the current package name.
88
+ For generated standalone CommonJS examples, at minimum inspect paths and imports against the TemplateCore package name.
@@ -1,6 +1,6 @@
1
1
  # Complete Product CRUD Example
2
2
 
3
- This example creates a minimal TemplateCore business project with a product Schema CRUD page.
3
+ This example creates a minimal consumer business project that imports the `@_tc/template-core` npm package and exposes a product Schema CRUD page. It is not the layout of the TemplateCore package repository itself.
4
4
 
5
5
  ## Structure
6
6
 
@@ -13,7 +13,7 @@ my-admin/
13
13
  │ └── product.js
14
14
  ├── config/
15
15
  │ └── config.default.js
16
- ├── model/
16
+ ├── models/
17
17
  │ └── product/
18
18
  │ ├── mode.js
19
19
  │ └── project/
@@ -155,7 +155,7 @@ module.exports = (app, router) => {
155
155
  };
156
156
  ```
157
157
 
158
- ## model/product/mode.js
158
+ ## models/product/mode.js
159
159
 
160
160
  ```js
161
161
  module.exports = {
@@ -339,7 +339,7 @@ module.exports = {
339
339
  };
340
340
  ```
341
341
 
342
- ## model/product/project/default.js
342
+ ## models/product/project/default.js
343
343
 
344
344
  ```js
345
345
  module.exports = {
@@ -1,15 +1,17 @@
1
1
  # TemplateCore Model Schema Reference
2
2
 
3
+ This reference describes model files in a consumer business app that uses the `@_tc/template-core` npm package. Paths are relative to that app's `baseDir`, not to the TemplateCore package repository root, unless the user explicitly asks to edit this repository's demo or reference files.
4
+
3
5
  ## File Layout
4
6
 
5
- The model loader reads the business root:
7
+ The model loader reads the consumer business root:
6
8
 
7
9
  ```text
8
- model/{modelKey}/mode.js
9
- model/{modelKey}/project/{projectKey}.js
10
+ models/{modelKey}/mode.js
11
+ models/{modelKey}/project/{projectKey}.js
10
12
  ```
11
13
 
12
- `model/index.js` and `model/index.ts` are ignored.
14
+ `models/index.js` and `models/index.ts` are ignored.
13
15
 
14
16
  Loader output shape:
15
17
 
@@ -228,7 +230,7 @@ cover: {
228
230
 
229
231
  Built-in `PreviewImage` accepts the current field value as a string or string array. Project-specific table render components are registered in `frontend/extended/SchemaPage/SchemaTable/data.ts` and referenced by `tableOption.renderComponent`.
230
232
 
231
- Common form `comType` values:
233
+ Example form `comType` values often seen in TemplateCore configs. This is not an authoritative or exhaustive list; verify available types from the target consumer app and this package repository before generating a model.
232
234
 
233
235
  ```text
234
236
  input
@@ -240,6 +242,8 @@ date
240
242
  checkbox
241
243
  ```
242
244
 
245
+ Model generation guard: before writing generated model config, verify that every `comType` and `tableOption.renderComponent` can be found in the target consumer app registrations or the TemplateCore package source/docs available in this repository. Because both extension points are consumer-extensible, this reference should not be treated as an authoritative list of all valid names. If a needed type cannot be verified, return the unverified `comType` / `renderComponent` names to the user for confirmation instead of auto-creating a custom component or forcing an unknown type into the model.
246
+
243
247
  Useful option fields:
244
248
 
245
249
  ```js
@@ -1,6 +1,8 @@
1
1
  # TemplateCore Runtime Extensions
2
2
 
3
- Use this reference when generating business code that needs persistence, Dashboard customization, or frontend helper components.
3
+ Use this reference when generating consumer business code that needs persistence, Dashboard customization, or frontend helper components.
4
+
5
+ This repository is the `@_tc/template-core` npm package source. Paths such as `app/extends/*` and `frontend/extended/*` are consumer-app paths under that app's `baseDir`, not package-source paths, unless the task is explicitly about this repository's demo, docs, or framework implementation.
4
6
 
5
7
  ## Default DB
6
8
 
@@ -10,7 +12,7 @@ Use this reference when generating business code that needs persistence, Dashboa
10
12
  .template-core/template-core.sqlite
11
13
  ```
12
14
 
13
- The default path is relative to the business project `baseDir`. Configure it in `config/config.default.js`:
15
+ The default path is relative to the consumer app `baseDir`. Configure it in `config/config.default.js`:
14
16
 
15
17
  ```js
16
18
  module.exports = {
@@ -179,7 +181,7 @@ Keep header content compact; the default header already owns brand, title, and m
179
181
 
180
182
  ## Server Router Guard
181
183
 
182
- Use `app/router-guard.js` or `app/router-guard.ts` in the generated business project when unmatched server paths need custom fallback behavior. The file lives directly under the business `app/` directory.
184
+ Use `app/router-guard.js` or `app/router-guard.ts` in the generated consumer app when unmatched server paths need custom fallback behavior. The file lives directly under the consumer app's `app/` directory.
183
185
 
184
186
  ```js
185
187
  module.exports = (app) => (ctx) => {
@@ -222,14 +224,14 @@ Use `frontend/extended/dash/routeGuard.ts` when the built-in Dashboard needs a o
222
224
  ```ts
223
225
  import type { DashRouteGuard } from '@_tc/template-core/fe'
224
226
 
225
- const dashRouteGuard: DashRouteGuard = ({ isLoggedIn }) => {
226
- if (!isLoggedIn) return '/login'
227
+ const dashRouteGuard: DashRouteGuard = ({ isLoggedIn, isSSR }) => {
228
+ if (!isLoggedIn) return isSSR ? '/login?from=ssr' : '/login'
227
229
  }
228
230
 
229
231
  export default dashRouteGuard
230
232
  ```
231
233
 
232
- Return a login URL string when the framework should jump with `window.location.href`; the login page does not need to be inside Dash routes. `DashRouteGuardResult` is `string | undefined`, and `undefined` also interrupts the built-in Dashboard redirect, including the implicit return from a logged-in branch.
234
+ Return a login URL string when the framework should jump with `window.location.href`; the login page does not need to be inside Dash routes. `DashRouteGuardContext` includes `renderMode: 'csr' | 'ssr'` and `isSSR` for render-mode-specific redirects. `DashRouteGuardResult` is `string | undefined`, and `undefined` also interrupts the built-in Dashboard redirect, including the implicit return from a logged-in branch.
233
235
 
234
236
  ## Frontend Helpers
235
237
 
@@ -313,7 +315,7 @@ cover: {
313
315
  }
314
316
  ```
315
317
 
316
- For project-specific renderers, create `frontend/extended/SchemaPage/SchemaTable/data.ts` and default-export a component map typed as `SchemaTableRenderComponentsMap` from `@_tc/template-core/fe`. Extend `SchemaTableNamespace.RenderComponentPropsMap` from `@_tc/template-core/model` when TypeScript model config should know the renderer props.
318
+ For project-specific renderers, create `frontend/extended/SchemaPage/SchemaTable/data.ts` and default-export a component map typed as `SchemaTableRenderComponentsMap` from `@_tc/template-core/fe`. Extend `SchemaTableNamespace.RenderComponentPropsMap` from `@_tc/template-core/models` when TypeScript model config should know the renderer props.
317
319
 
318
320
  ## SchemaPage CallCom Extensions
319
321