akanjs 2.0.7 → 2.1.0-rc.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 (498) hide show
  1. package/README.ko.md +4 -4
  2. package/README.md +4 -4
  3. package/client/router.ts +10 -3
  4. package/document/documentSchema.ts +9 -1
  5. package/index.ts +187 -0
  6. package/package.json +6 -50
  7. package/server/akanApp.ts +2 -24
  8. package/server/akanAppHeaders.ts +30 -0
  9. package/server/di/predefinedAdaptor.ts +1 -1
  10. package/types/dictionary/base.dictionary.d.ts +1 -1
  11. package/types/dictionary/dictionary.d.ts +8 -8
  12. package/types/document/documentSchema.d.ts +33 -0
  13. package/types/document/index.d.ts +1 -1
  14. package/types/document/schema.d.ts +1 -1
  15. package/types/document/types.d.ts +1 -1
  16. package/types/{devkit/akanConfig/types.d.ts → index.d.ts} +45 -54
  17. package/types/server/akanAppHeaders.d.ts +1 -0
  18. package/types/server/di/predefinedAdaptor.d.ts +1 -1
  19. package/types/store/baseSt.d.ts +2 -2
  20. package/ui/Link/SsrLink.tsx +2 -2
  21. package/webkit/useCodepush.tsx +1 -1
  22. package/cli/application/application.command.ts +0 -224
  23. package/cli/application/application.interface.tsx +0 -225
  24. package/cli/application/application.runner.ts +0 -355
  25. package/cli/application/application.script.ts +0 -244
  26. package/cli/build.ts +0 -27
  27. package/cli/cloud/cloud.command.ts +0 -48
  28. package/cli/cloud/cloud.runner.ts +0 -157
  29. package/cli/cloud/cloud.script.ts +0 -40
  30. package/cli/guideline/guideline.command.ts +0 -31
  31. package/cli/guideline/guideline.prompt.ts +0 -212
  32. package/cli/guideline/guideline.runner.ts +0 -53
  33. package/cli/guideline/guideline.script.ts +0 -33
  34. package/cli/guidelines/___library/sharedUiStructureDescription.en.md +0 -767
  35. package/cli/guidelines/___library/utilUiStructureDescription.en.md +0 -395
  36. package/cli/guidelines/___lint/lintRuleDescription.en.md +0 -64
  37. package/cli/guidelines/___module/moduleStructureDescription.en.md +0 -80
  38. package/cli/guidelines/componentRule/componentRule.generate.json +0 -131
  39. package/cli/guidelines/componentRule/componentRule.instruction.md +0 -637
  40. package/cli/guidelines/cssRule/cssRule.generate.json +0 -93
  41. package/cli/guidelines/cssRule/cssRule.instruction.md +0 -435
  42. package/cli/guidelines/databaseModule/databaseModule.generate.json +0 -51
  43. package/cli/guidelines/databaseModule/databaseModule.instruction.md +0 -612
  44. package/cli/guidelines/docPageRule/docPageRule.generate.json +0 -72
  45. package/cli/guidelines/docPageRule/docPageRule.instruction.md +0 -389
  46. package/cli/guidelines/enumConstant/enumConstant.generate.json +0 -24
  47. package/cli/guidelines/enumConstant/enumConstant.instruction.md +0 -232
  48. package/cli/guidelines/framework/framework.generate.json +0 -119
  49. package/cli/guidelines/framework/framework.instruction.md +0 -1110
  50. package/cli/guidelines/howToUseStore/howToUseStore.generate.json +0 -0
  51. package/cli/guidelines/modelConstant/modelConstant.generate.json +0 -128
  52. package/cli/guidelines/modelConstant/modelConstant.instruction.md +0 -506
  53. package/cli/guidelines/modelDictionary/modelDictionary.generate.json +0 -108
  54. package/cli/guidelines/modelDictionary/modelDictionary.instruction.md +0 -547
  55. package/cli/guidelines/modelDocument/modelDocument.generate.json +0 -129
  56. package/cli/guidelines/modelDocument/modelDocument.instruction.md +0 -509
  57. package/cli/guidelines/modelService/modelService.generate.json +0 -135
  58. package/cli/guidelines/modelService/modelService.instruction.md +0 -708
  59. package/cli/guidelines/modelSignal/modelSignal.generate.json +0 -201
  60. package/cli/guidelines/modelSignal/modelSignal.instruction.md +0 -552
  61. package/cli/guidelines/modelStore/modelStore.generate.json +0 -130
  62. package/cli/guidelines/modelStore/modelStore.instruction.md +0 -585
  63. package/cli/guidelines/modelTemplate/modelTemplate.generate.json +0 -104
  64. package/cli/guidelines/modelTemplate/modelTemplate.instruction.md +0 -604
  65. package/cli/guidelines/modelUnit/modelUnit.generate.json +0 -92
  66. package/cli/guidelines/modelUnit/modelUnit.instruction.md +0 -541
  67. package/cli/guidelines/modelUtil/modelUtil.generate.json +0 -93
  68. package/cli/guidelines/modelUtil/modelUtil.instruction.md +0 -752
  69. package/cli/guidelines/modelView/modelView.generate.json +0 -80
  70. package/cli/guidelines/modelView/modelView.instruction.md +0 -1005
  71. package/cli/guidelines/modelZone/modelZone.generate.json +0 -126
  72. package/cli/guidelines/modelZone/modelZone.instruction.md +0 -528
  73. package/cli/guidelines/scalarConstant/scalarConstant.generate.json +0 -106
  74. package/cli/guidelines/scalarConstant/scalarConstant.instruction.md +0 -442
  75. package/cli/guidelines/scalarDictionary/scalarDictionary.generate.json +0 -83
  76. package/cli/guidelines/scalarDictionary/scalarDictionary.instruction.md +0 -273
  77. package/cli/guidelines/scalarModule/scalarModule.generate.json +0 -35
  78. package/cli/guidelines/scalarModule/scalarModule.instruction.md +0 -81
  79. package/cli/guidelines/sharedUiUsage/sharedUiUsage.generate.json +0 -108
  80. package/cli/guidelines/sharedUiUsage/sharedUiUsage.instruction.md +0 -310
  81. package/cli/guidelines/utilUiUsage/utilUiUsage.generate.json +0 -140
  82. package/cli/guidelines/utilUiUsage/utilUiUsage.instruction.md +0 -339
  83. package/cli/index.js +0 -184444
  84. package/cli/index.ts +0 -24
  85. package/cli/library/library.command.ts +0 -28
  86. package/cli/library/library.runner.ts +0 -66
  87. package/cli/library/library.script.ts +0 -39
  88. package/cli/module/module.command.ts +0 -35
  89. package/cli/module/module.prompt.ts +0 -18
  90. package/cli/module/module.request.ts +0 -319
  91. package/cli/module/module.runner.ts +0 -76
  92. package/cli/module/module.script.ts +0 -161
  93. package/cli/npmRegistry.ts +0 -13
  94. package/cli/openBrowser.ts +0 -15
  95. package/cli/package/package.command.ts +0 -32
  96. package/cli/package/package.runner.ts +0 -94
  97. package/cli/package/package.script.ts +0 -35
  98. package/cli/page/page.command.ts +0 -14
  99. package/cli/page/page.runner.ts +0 -14
  100. package/cli/page/page.script.ts +0 -12
  101. package/cli/pluralizeName.ts +0 -5
  102. package/cli/scalar/scalar.command.ts +0 -21
  103. package/cli/scalar/scalar.prompt.ts +0 -131
  104. package/cli/scalar/scalar.runner.ts +0 -38
  105. package/cli/scalar/scalar.script.ts +0 -16
  106. package/cli/semver.ts +0 -18
  107. package/cli/templates/__scalar/__model__/__model__.constant.ts +0 -15
  108. package/cli/templates/__scalar/__model__/__model__.dictionary.ts +0 -19
  109. package/cli/templates/__scalar/__model__/__model__.document.ts +0 -15
  110. package/cli/templates/app/akan.config.ts +0 -14
  111. package/cli/templates/app/env/env.client.debug.ts.template +0 -7
  112. package/cli/templates/app/env/env.client.develop.ts.template +0 -7
  113. package/cli/templates/app/env/env.client.local.ts.template +0 -7
  114. package/cli/templates/app/env/env.client.main.ts.template +0 -7
  115. package/cli/templates/app/env/env.client.testing.ts.template +0 -7
  116. package/cli/templates/app/env/env.client.ts +0 -21
  117. package/cli/templates/app/env/env.client.type.ts +0 -16
  118. package/cli/templates/app/env/env.server.debug.ts.template +0 -7
  119. package/cli/templates/app/env/env.server.develop.ts.template +0 -7
  120. package/cli/templates/app/env/env.server.local.ts.template +0 -7
  121. package/cli/templates/app/env/env.server.main.ts.template +0 -7
  122. package/cli/templates/app/env/env.server.testing.ts.template +0 -6
  123. package/cli/templates/app/env/env.server.ts +0 -20
  124. package/cli/templates/app/lib/___appName__/__appName__.dictionary.ts +0 -17
  125. package/cli/templates/app/lib/___appName__/__appName__.service.ts +0 -13
  126. package/cli/templates/app/lib/___appName__/__appName__.signal.ts +0 -17
  127. package/cli/templates/app/lib/___appName__/__appName__.store.ts +0 -15
  128. package/cli/templates/app/lib/option.ts +0 -17
  129. package/cli/templates/app/main.ts +0 -16
  130. package/cli/templates/app/package.json.template +0 -5
  131. package/cli/templates/app/page/_index.tsx +0 -296
  132. package/cli/templates/app/page/_layout.tsx +0 -31
  133. package/cli/templates/app/page/styles.css.template +0 -53
  134. package/cli/templates/app/public/favicon.ico +0 -0
  135. package/cli/templates/app/public/logo.png +0 -0
  136. package/cli/templates/app/tsconfig.json.template +0 -21
  137. package/cli/templates/client.ts +0 -46
  138. package/cli/templates/crudPages/[__model__Id]/edit/page.tsx +0 -47
  139. package/cli/templates/crudPages/[__model__Id]/page.tsx +0 -52
  140. package/cli/templates/crudPages/new/page.tsx +0 -42
  141. package/cli/templates/crudPages/page.tsx +0 -43
  142. package/cli/templates/crudSinglePage/page.tsx +0 -37
  143. package/cli/templates/env/_env.server.type.ts +0 -16
  144. package/cli/templates/facetIndex/index.ts +0 -32
  145. package/cli/templates/index.ts +0 -10
  146. package/cli/templates/lib/__lib/lib.constant.ts +0 -38
  147. package/cli/templates/lib/__lib/lib.dictionary.ts +0 -33
  148. package/cli/templates/lib/__lib/lib.document.ts +0 -35
  149. package/cli/templates/lib/__lib/lib.service.ts +0 -33
  150. package/cli/templates/lib/__lib/lib.signal.ts +0 -34
  151. package/cli/templates/lib/__lib/lib.store.ts +0 -33
  152. package/cli/templates/lib/cnst.ts +0 -29
  153. package/cli/templates/lib/db.ts +0 -32
  154. package/cli/templates/lib/dict.ts +0 -49
  155. package/cli/templates/lib/sig.ts +0 -60
  156. package/cli/templates/lib/srv.ts +0 -34
  157. package/cli/templates/lib/st.ts +0 -31
  158. package/cli/templates/lib/useClient.ts +0 -19
  159. package/cli/templates/lib/useServer.ts +0 -7
  160. package/cli/templates/libRoot/.gitignore.template +0 -16
  161. package/cli/templates/libRoot/akan.config.ts +0 -12
  162. package/cli/templates/libRoot/base/baseLogic.ts +0 -10
  163. package/cli/templates/libRoot/base/index.ts +0 -8
  164. package/cli/templates/libRoot/common/commonLogic.ts +0 -10
  165. package/cli/templates/libRoot/common/index.ts +0 -8
  166. package/cli/templates/libRoot/env/env.server.example.ts.template +0 -6
  167. package/cli/templates/libRoot/env/env.server.testing.ts.template +0 -6
  168. package/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.ts +0 -15
  169. package/cli/templates/libRoot/lib/___libName__/__libName__.service.ts +0 -11
  170. package/cli/templates/libRoot/lib/___libName__/__libName__.store.ts +0 -13
  171. package/cli/templates/libRoot/lib/option.ts +0 -17
  172. package/cli/templates/libRoot/package.json.template +0 -5
  173. package/cli/templates/libRoot/srvkit/backendLogic.ts +0 -10
  174. package/cli/templates/libRoot/srvkit/index.ts +0 -8
  175. package/cli/templates/libRoot/tsconfig.json.template +0 -11
  176. package/cli/templates/libRoot/ui/index.ts +0 -7
  177. package/cli/templates/libRoot/webkit/frontendLogic.ts +0 -10
  178. package/cli/templates/libRoot/webkit/index.ts +0 -8
  179. package/cli/templates/localDev/docker-compose.yaml.template +0 -37
  180. package/cli/templates/module/__Model__.Template.tsx +0 -36
  181. package/cli/templates/module/__Model__.Unit.tsx +0 -26
  182. package/cli/templates/module/__Model__.Util.tsx +0 -30
  183. package/cli/templates/module/__Model__.View.tsx +0 -29
  184. package/cli/templates/module/__Model__.Zone.tsx +0 -43
  185. package/cli/templates/module/__model__.constant.ts +0 -24
  186. package/cli/templates/module/__model__.dictionary.ts +0 -30
  187. package/cli/templates/module/__model__.document.ts +0 -23
  188. package/cli/templates/module/__model__.service.ts +0 -16
  189. package/cli/templates/module/__model__.signal.ts +0 -27
  190. package/cli/templates/module/__model__.store.ts +0 -19
  191. package/cli/templates/moduleRoot/index.tsx +0 -31
  192. package/cli/templates/pkgRoot/tsconfig.json.template +0 -10
  193. package/cli/templates/server.ts +0 -45
  194. package/cli/templates/workspaceRoot/.env.template +0 -14
  195. package/cli/templates/workspaceRoot/.gitignore.template +0 -120
  196. package/cli/templates/workspaceRoot/.vscode/settings.json.template +0 -23
  197. package/cli/templates/workspaceRoot/biome.json.template +0 -191
  198. package/cli/templates/workspaceRoot/bunfig.toml +0 -4
  199. package/cli/templates/workspaceRoot/package.json.template +0 -7
  200. package/cli/templates/workspaceRoot/tsconfig.json.template +0 -29
  201. package/cli/testHelpers.ts +0 -171
  202. package/cli/workspace/workspace.command.ts +0 -55
  203. package/cli/workspace/workspace.runner.ts +0 -79
  204. package/cli/workspace/workspace.script.ts +0 -74
  205. package/devkit/aiEditor.ts +0 -299
  206. package/devkit/akanApp/akanApp.host.ts +0 -393
  207. package/devkit/akanApp/index.ts +0 -1
  208. package/devkit/akanConfig/akanConfig.ts +0 -360
  209. package/devkit/akanConfig/index.ts +0 -2
  210. package/devkit/akanConfig/types.ts +0 -187
  211. package/devkit/applicationBuildReporter.ts +0 -69
  212. package/devkit/applicationBuildRunner.ts +0 -302
  213. package/devkit/applicationReleasePackager.ts +0 -205
  214. package/devkit/artifact/implicitRootLayout.ts +0 -155
  215. package/devkit/artifact/index.ts +0 -1
  216. package/devkit/artifact/routeSeedIndex.ts +0 -128
  217. package/devkit/auth.ts +0 -41
  218. package/devkit/builder.ts +0 -164
  219. package/devkit/capacitor.base.config.ts +0 -88
  220. package/devkit/capacitorApp.ts +0 -443
  221. package/devkit/commandDecorators/argMeta.ts +0 -102
  222. package/devkit/commandDecorators/command.ts +0 -340
  223. package/devkit/commandDecorators/commandBuilder.ts +0 -224
  224. package/devkit/commandDecorators/commandMeta.ts +0 -6
  225. package/devkit/commandDecorators/dependencyBuilder.ts +0 -100
  226. package/devkit/commandDecorators/helpFormatter.ts +0 -220
  227. package/devkit/commandDecorators/index.ts +0 -8
  228. package/devkit/commandDecorators/targetMeta.ts +0 -31
  229. package/devkit/commandDecorators/types.ts +0 -10
  230. package/devkit/constants.ts +0 -25
  231. package/devkit/createTunnel.ts +0 -36
  232. package/devkit/dependencyScanner.ts +0 -339
  233. package/devkit/executors.ts +0 -1362
  234. package/devkit/extractDeps.ts +0 -85
  235. package/devkit/fileEditor.ts +0 -106
  236. package/devkit/fileSys.ts +0 -39
  237. package/devkit/frontendBuild/allRoutesBuilder.ts +0 -103
  238. package/devkit/frontendBuild/clientBuildTypes.ts +0 -114
  239. package/devkit/frontendBuild/clientEntriesBundler.ts +0 -300
  240. package/devkit/frontendBuild/clientEntryDiscovery.ts +0 -196
  241. package/devkit/frontendBuild/csrArtifactBuilder.ts +0 -237
  242. package/devkit/frontendBuild/cssCompiler.ts +0 -285
  243. package/devkit/frontendBuild/cssImportResolver.ts +0 -116
  244. package/devkit/frontendBuild/fontOptimizer.ts +0 -427
  245. package/devkit/frontendBuild/hmrChangeClassifier.ts +0 -28
  246. package/devkit/frontendBuild/hmrWatcher.ts +0 -101
  247. package/devkit/frontendBuild/index.ts +0 -18
  248. package/devkit/frontendBuild/pagesBundleBuilder.ts +0 -137
  249. package/devkit/frontendBuild/pagesEntrySourceGenerator.ts +0 -37
  250. package/devkit/frontendBuild/precompressArtifacts.ts +0 -59
  251. package/devkit/frontendBuild/routeClientBuilder.ts +0 -290
  252. package/devkit/frontendBuild/routesManifestArtifactSerializer.ts +0 -62
  253. package/devkit/frontendBuild/ssrBaseArtifactBuilder.ts +0 -139
  254. package/devkit/frontendBuild/vendorSpecifiers.ts +0 -16
  255. package/devkit/frontendBuild/watchRootResolver.ts +0 -28
  256. package/devkit/getCredentials.ts +0 -19
  257. package/devkit/getDirname.ts +0 -3
  258. package/devkit/getModelFileData.ts +0 -59
  259. package/devkit/getRelatedCnsts.ts +0 -300
  260. package/devkit/guideline.ts +0 -19
  261. package/devkit/incrementalBuilder/incrementalBuilder.host.ts +0 -152
  262. package/devkit/incrementalBuilder/incrementalBuilder.proc.ts +0 -331
  263. package/devkit/incrementalBuilder/index.ts +0 -1
  264. package/devkit/index.ts +0 -36
  265. package/devkit/lint/no-deep-internal-import.grit +0 -25
  266. package/devkit/lint/no-import-client-functions.grit +0 -32
  267. package/devkit/lint/no-import-external-library.grit +0 -21
  268. package/devkit/lint/no-js-private-class-method.grit +0 -42
  269. package/devkit/lint/no-use-client-in-server.grit +0 -7
  270. package/devkit/lint/non-scalar-props-restricted.grit +0 -13
  271. package/devkit/linter.ts +0 -248
  272. package/devkit/mobile/index.ts +0 -1
  273. package/devkit/mobile/mobileTarget.ts +0 -88
  274. package/devkit/prompter.ts +0 -71
  275. package/devkit/scanInfo.ts +0 -606
  276. package/devkit/selectModel.ts +0 -11
  277. package/devkit/spinner.ts +0 -54
  278. package/devkit/src/capacitorApp.ts +0 -277
  279. package/devkit/sshTunnel.ts +0 -151
  280. package/devkit/streamAi.ts +0 -45
  281. package/devkit/transforms/barrelAnalyzer.ts +0 -249
  282. package/devkit/transforms/barrelImportsPlugin.ts +0 -457
  283. package/devkit/transforms/externalizeFrameworkPlugin.ts +0 -159
  284. package/devkit/transforms/index.ts +0 -5
  285. package/devkit/transforms/rscUseClientTransform.ts +0 -52
  286. package/devkit/transforms/useClientBundlePlugin.ts +0 -47
  287. package/devkit/typeChecker.ts +0 -260
  288. package/devkit/types.ts +0 -44
  289. package/devkit/ui/MultiScrollList.tsx +0 -228
  290. package/devkit/ui/ScrollList.tsx +0 -106
  291. package/devkit/ui/index.ts +0 -2
  292. package/devkit/uploadRelease.ts +0 -95
  293. package/devkit/useStdoutDimensions.ts +0 -20
  294. package/types/cli/application/application.command.d.ts +0 -7
  295. package/types/cli/application/application.interface.d.ts +0 -40
  296. package/types/cli/application/application.runner.d.ts +0 -66
  297. package/types/cli/application/application.script.d.ts +0 -72
  298. package/types/cli/build.d.ts +0 -1
  299. package/types/cli/cloud/cloud.command.d.ts +0 -7
  300. package/types/cli/cloud/cloud.runner.d.ts +0 -13
  301. package/types/cli/cloud/cloud.script.d.ts +0 -23
  302. package/types/cli/guideline/guideline.command.d.ts +0 -7
  303. package/types/cli/guideline/guideline.prompt.d.ts +0 -29
  304. package/types/cli/guideline/guideline.runner.d.ts +0 -21
  305. package/types/cli/guideline/guideline.script.d.ts +0 -16
  306. package/types/cli/index.d.ts +0 -2
  307. package/types/cli/library/library.command.d.ts +0 -7
  308. package/types/cli/library/library.runner.d.ts +0 -11
  309. package/types/cli/library/library.script.d.ts +0 -13
  310. package/types/cli/module/module.command.d.ts +0 -7
  311. package/types/cli/module/module.prompt.d.ts +0 -13
  312. package/types/cli/module/module.request.d.ts +0 -63
  313. package/types/cli/module/module.runner.d.ts +0 -55
  314. package/types/cli/module/module.script.d.ts +0 -22
  315. package/types/cli/npmRegistry.d.ts +0 -1
  316. package/types/cli/openBrowser.d.ts +0 -1
  317. package/types/cli/package/package.command.d.ts +0 -7
  318. package/types/cli/package/package.runner.d.ts +0 -13
  319. package/types/cli/package/package.script.d.ts +0 -18
  320. package/types/cli/page/page.command.d.ts +0 -7
  321. package/types/cli/page/page.runner.d.ts +0 -10
  322. package/types/cli/page/page.script.d.ts +0 -13
  323. package/types/cli/pluralizeName.d.ts +0 -1
  324. package/types/cli/scalar/scalar.command.d.ts +0 -7
  325. package/types/cli/scalar/scalar.prompt.d.ts +0 -23
  326. package/types/cli/scalar/scalar.runner.d.ts +0 -16
  327. package/types/cli/scalar/scalar.script.d.ts +0 -11
  328. package/types/cli/semver.d.ts +0 -1
  329. package/types/cli/templates/__scalar/__model__/__model__.constant.d.ts +0 -7
  330. package/types/cli/templates/__scalar/__model__/__model__.dictionary.d.ts +0 -7
  331. package/types/cli/templates/__scalar/__model__/__model__.document.d.ts +0 -7
  332. package/types/cli/templates/app/akan.config.d.ts +0 -6
  333. package/types/cli/templates/app/env/env.client.d.ts +0 -6
  334. package/types/cli/templates/app/env/env.client.type.d.ts +0 -6
  335. package/types/cli/templates/app/env/env.server.d.ts +0 -6
  336. package/types/cli/templates/app/lib/___appName__/__appName__.dictionary.d.ts +0 -7
  337. package/types/cli/templates/app/lib/___appName__/__appName__.service.d.ts +0 -7
  338. package/types/cli/templates/app/lib/___appName__/__appName__.signal.d.ts +0 -7
  339. package/types/cli/templates/app/lib/___appName__/__appName__.store.d.ts +0 -7
  340. package/types/cli/templates/app/lib/option.d.ts +0 -6
  341. package/types/cli/templates/app/main.d.ts +0 -6
  342. package/types/cli/templates/app/page/_index.d.ts +0 -9
  343. package/types/cli/templates/app/page/_layout.d.ts +0 -11
  344. package/types/cli/templates/client.d.ts +0 -4
  345. package/types/cli/templates/crudPages/[__model__Id]/edit/page.d.ts +0 -11
  346. package/types/cli/templates/crudPages/[__model__Id]/page.d.ts +0 -11
  347. package/types/cli/templates/crudPages/new/page.d.ts +0 -11
  348. package/types/cli/templates/crudPages/page.d.ts +0 -11
  349. package/types/cli/templates/crudSinglePage/page.d.ts +0 -11
  350. package/types/cli/templates/env/_env.server.type.d.ts +0 -7
  351. package/types/cli/templates/facetIndex/index.d.ts +0 -13
  352. package/types/cli/templates/facetIndex.d.ts +0 -1
  353. package/types/cli/templates/index.d.ts +0 -6
  354. package/types/cli/templates/lib/__lib/lib.constant.d.ts +0 -4
  355. package/types/cli/templates/lib/__lib/lib.dictionary.d.ts +0 -4
  356. package/types/cli/templates/lib/__lib/lib.document.d.ts +0 -4
  357. package/types/cli/templates/lib/__lib/lib.service.d.ts +0 -4
  358. package/types/cli/templates/lib/__lib/lib.signal.d.ts +0 -4
  359. package/types/cli/templates/lib/__lib/lib.store.d.ts +0 -4
  360. package/types/cli/templates/lib/cnst.d.ts +0 -4
  361. package/types/cli/templates/lib/db.d.ts +0 -4
  362. package/types/cli/templates/lib/dict.d.ts +0 -4
  363. package/types/cli/templates/lib/sig.d.ts +0 -4
  364. package/types/cli/templates/lib/srv.d.ts +0 -4
  365. package/types/cli/templates/lib/st.d.ts +0 -4
  366. package/types/cli/templates/lib/useClient.d.ts +0 -4
  367. package/types/cli/templates/lib/useServer.d.ts +0 -4
  368. package/types/cli/templates/libRoot/akan.config.d.ts +0 -5
  369. package/types/cli/templates/libRoot/base/baseLogic.d.ts +0 -5
  370. package/types/cli/templates/libRoot/base/index.d.ts +0 -5
  371. package/types/cli/templates/libRoot/base.d.ts +0 -1
  372. package/types/cli/templates/libRoot/common/commonLogic.d.ts +0 -5
  373. package/types/cli/templates/libRoot/common/index.d.ts +0 -5
  374. package/types/cli/templates/libRoot/common.d.ts +0 -1
  375. package/types/cli/templates/libRoot/lib/___libName__/__libName__.dictionary.d.ts +0 -6
  376. package/types/cli/templates/libRoot/lib/___libName__/__libName__.service.d.ts +0 -6
  377. package/types/cli/templates/libRoot/lib/___libName__/__libName__.store.d.ts +0 -6
  378. package/types/cli/templates/libRoot/lib/option.d.ts +0 -6
  379. package/types/cli/templates/libRoot/srvkit/backendLogic.d.ts +0 -5
  380. package/types/cli/templates/libRoot/srvkit/index.d.ts +0 -5
  381. package/types/cli/templates/libRoot/srvkit.d.ts +0 -1
  382. package/types/cli/templates/libRoot/ui/index.d.ts +0 -5
  383. package/types/cli/templates/libRoot/ui.d.ts +0 -1
  384. package/types/cli/templates/libRoot/webkit/frontendLogic.d.ts +0 -5
  385. package/types/cli/templates/libRoot/webkit/index.d.ts +0 -5
  386. package/types/cli/templates/libRoot/webkit.d.ts +0 -1
  387. package/types/cli/templates/module/__Model__.Template.d.ts +0 -11
  388. package/types/cli/templates/module/__Model__.Unit.d.ts +0 -11
  389. package/types/cli/templates/module/__Model__.Util.d.ts +0 -11
  390. package/types/cli/templates/module/__Model__.View.d.ts +0 -11
  391. package/types/cli/templates/module/__Model__.Zone.d.ts +0 -11
  392. package/types/cli/templates/module/__model__.constant.d.ts +0 -8
  393. package/types/cli/templates/module/__model__.dictionary.d.ts +0 -8
  394. package/types/cli/templates/module/__model__.document.d.ts +0 -8
  395. package/types/cli/templates/module/__model__.service.d.ts +0 -8
  396. package/types/cli/templates/module/__model__.signal.d.ts +0 -9
  397. package/types/cli/templates/module/__model__.store.d.ts +0 -8
  398. package/types/cli/templates/moduleRoot/index.d.ts +0 -11
  399. package/types/cli/templates/moduleRoot.d.ts +0 -1
  400. package/types/cli/templates/server.d.ts +0 -4
  401. package/types/cli/templates.d.ts +0 -1
  402. package/types/cli/testHelpers.d.ts +0 -64
  403. package/types/cli/workspace/workspace.command.d.ts +0 -7
  404. package/types/cli/workspace/workspace.runner.d.ts +0 -14
  405. package/types/cli/workspace/workspace.script.d.ts +0 -29
  406. package/types/cli.d.ts +0 -1
  407. package/types/devkit/aiEditor.d.ts +0 -50
  408. package/types/devkit/akanApp/akanApp.host.d.ts +0 -16
  409. package/types/devkit/akanApp/index.d.ts +0 -1
  410. package/types/devkit/akanApp.d.ts +0 -1
  411. package/types/devkit/akanConfig/akanConfig.d.ts +0 -36
  412. package/types/devkit/akanConfig/index.d.ts +0 -2
  413. package/types/devkit/akanConfig.d.ts +0 -1
  414. package/types/devkit/applicationBuildReporter.d.ts +0 -25
  415. package/types/devkit/applicationBuildRunner.d.ts +0 -29
  416. package/types/devkit/applicationReleasePackager.d.ts +0 -17
  417. package/types/devkit/artifact/implicitRootLayout.d.ts +0 -17
  418. package/types/devkit/artifact/index.d.ts +0 -1
  419. package/types/devkit/artifact/routeSeedIndex.d.ts +0 -38
  420. package/types/devkit/artifact.d.ts +0 -1
  421. package/types/devkit/auth.d.ts +0 -9
  422. package/types/devkit/builder.d.ts +0 -18
  423. package/types/devkit/capacitor.base.config.d.ts +0 -3
  424. package/types/devkit/capacitorApp.d.ts +0 -58
  425. package/types/devkit/commandDecorators/argMeta.d.ts +0 -68
  426. package/types/devkit/commandDecorators/command.d.ts +0 -2
  427. package/types/devkit/commandDecorators/commandBuilder.d.ts +0 -60
  428. package/types/devkit/commandDecorators/commandMeta.d.ts +0 -2
  429. package/types/devkit/commandDecorators/dependencyBuilder.d.ts +0 -22
  430. package/types/devkit/commandDecorators/helpFormatter.d.ts +0 -3
  431. package/types/devkit/commandDecorators/index.d.ts +0 -8
  432. package/types/devkit/commandDecorators/targetMeta.d.ts +0 -21
  433. package/types/devkit/commandDecorators/types.d.ts +0 -8
  434. package/types/devkit/commandDecorators.d.ts +0 -1
  435. package/types/devkit/constants.d.ts +0 -25
  436. package/types/devkit/createTunnel.d.ts +0 -8
  437. package/types/devkit/dependencyScanner.d.ts +0 -33
  438. package/types/devkit/executors.d.ts +0 -320
  439. package/types/devkit/extractDeps.d.ts +0 -7
  440. package/types/devkit/fileEditor.d.ts +0 -16
  441. package/types/devkit/fileSys.d.ts +0 -12
  442. package/types/devkit/frontendBuild/allRoutesBuilder.d.ts +0 -18
  443. package/types/devkit/frontendBuild/clientBuildTypes.d.ts +0 -107
  444. package/types/devkit/frontendBuild/clientEntriesBundler.d.ts +0 -12
  445. package/types/devkit/frontendBuild/clientEntryDiscovery.d.ts +0 -19
  446. package/types/devkit/frontendBuild/csrArtifactBuilder.d.ts +0 -16
  447. package/types/devkit/frontendBuild/cssCompiler.d.ts +0 -25
  448. package/types/devkit/frontendBuild/cssImportResolver.d.ts +0 -9
  449. package/types/devkit/frontendBuild/fontOptimizer.d.ts +0 -14
  450. package/types/devkit/frontendBuild/hmrChangeClassifier.d.ts +0 -5
  451. package/types/devkit/frontendBuild/hmrWatcher.d.ts +0 -21
  452. package/types/devkit/frontendBuild/index.d.ts +0 -18
  453. package/types/devkit/frontendBuild/pagesBundleBuilder.d.ts +0 -28
  454. package/types/devkit/frontendBuild/pagesEntrySourceGenerator.d.ts +0 -9
  455. package/types/devkit/frontendBuild/precompressArtifacts.d.ts +0 -7
  456. package/types/devkit/frontendBuild/routeClientBuilder.d.ts +0 -50
  457. package/types/devkit/frontendBuild/routesManifestArtifactSerializer.d.ts +0 -12
  458. package/types/devkit/frontendBuild/ssrBaseArtifactBuilder.d.ts +0 -16
  459. package/types/devkit/frontendBuild/vendorSpecifiers.d.ts +0 -2
  460. package/types/devkit/frontendBuild/watchRootResolver.d.ts +0 -6
  461. package/types/devkit/frontendBuild.d.ts +0 -1
  462. package/types/devkit/getCredentials.d.ts +0 -12
  463. package/types/devkit/getDirname.d.ts +0 -1
  464. package/types/devkit/getModelFileData.d.ts +0 -16
  465. package/types/devkit/getRelatedCnsts.d.ts +0 -53
  466. package/types/devkit/guideline.d.ts +0 -19
  467. package/types/devkit/incrementalBuilder/incrementalBuilder.host.d.ts +0 -30
  468. package/types/devkit/incrementalBuilder/incrementalBuilder.proc.d.ts +0 -1
  469. package/types/devkit/incrementalBuilder/index.d.ts +0 -1
  470. package/types/devkit/incrementalBuilder.d.ts +0 -1
  471. package/types/devkit/index.d.ts +0 -36
  472. package/types/devkit/linter.d.ts +0 -108
  473. package/types/devkit/mobile/index.d.ts +0 -1
  474. package/types/devkit/mobile/mobileTarget.d.ts +0 -14
  475. package/types/devkit/mobile.d.ts +0 -1
  476. package/types/devkit/prompter.d.ts +0 -15
  477. package/types/devkit/scanInfo.d.ts +0 -82
  478. package/types/devkit/selectModel.d.ts +0 -1
  479. package/types/devkit/spinner.d.ts +0 -20
  480. package/types/devkit/src/capacitorApp.d.ts +0 -39
  481. package/types/devkit/sshTunnel.d.ts +0 -14
  482. package/types/devkit/streamAi.d.ts +0 -6
  483. package/types/devkit/transforms/barrelAnalyzer.d.ts +0 -27
  484. package/types/devkit/transforms/barrelImportsPlugin.d.ts +0 -26
  485. package/types/devkit/transforms/externalizeFrameworkPlugin.d.ts +0 -49
  486. package/types/devkit/transforms/index.d.ts +0 -5
  487. package/types/devkit/transforms/rscUseClientTransform.d.ts +0 -10
  488. package/types/devkit/transforms/useClientBundlePlugin.d.ts +0 -19
  489. package/types/devkit/transforms.d.ts +0 -1
  490. package/types/devkit/typeChecker.d.ts +0 -62
  491. package/types/devkit/types.d.ts +0 -43
  492. package/types/devkit/ui/MultiScrollList.d.ts +0 -13
  493. package/types/devkit/ui/ScrollList.d.ts +0 -7
  494. package/types/devkit/ui/index.d.ts +0 -2
  495. package/types/devkit/ui.d.ts +0 -1
  496. package/types/devkit/uploadRelease.d.ts +0 -10
  497. package/types/devkit/useStdoutDimensions.d.ts +0 -1
  498. package/types/devkit.d.ts +0 -1
@@ -1,637 +0,0 @@
1
- # Component Rule Instruction for Akan.js Framework
2
-
3
- ## Table of Contents
4
-
5
- 1. [Component Architecture](#component-architecture)
6
- 2. [Component Types](#component-types)
7
- 3. [File Naming Conventions](#file-naming-conventions)
8
- 4. [Utility Functions](#utility-functions)
9
- 5. [Best Practices](#best-practices)
10
- 6. [Complete Examples](#complete-examples)
11
-
12
- ---
13
-
14
- ## Component Architecture
15
-
16
- Akan.js framework uses a modular component architecture that separates UI elements by responsibility. Each feature or model in your application should follow a consistent pattern with standardized component types.
17
-
18
- ### Core Structure
19
-
20
- Every component in Akan.js follows this fundamental structure:
21
-
22
- ```tsx
23
- import { clsx } from "akanjs/client";
24
- import { ModelType } from "@your-app/client";
25
-
26
- interface ComponentProps {
27
- className?: string;
28
- // Feature-specific props
29
- }
30
-
31
- export const Component = ({ className, ...props }: ComponentProps) => {
32
- return <div className={clsx("base-classes", className)}>{/* Component content */}</div>;
33
- };
34
- ```
35
-
36
- ### Directory Organization
37
-
38
- Features are organized in a consistent structure:
39
-
40
- ```
41
- {apps,libs}/
42
- └── project-name/
43
- └── lib/
44
- └── feature-name/
45
- ├── FeatureName.Unit.tsx
46
- ├── FeatureName.View.tsx
47
- ├── FeatureName.Template.tsx
48
- ├── FeatureName.Util.tsx
49
- ├── FeatureName.Zone.tsx
50
- ├── featureName.constant.ts
51
- ├── featureName.service.ts
52
- ├── featureName.signal.ts
53
- ├── featureName.store.ts
54
- └── index.ts
55
- ```
56
-
57
- ---
58
-
59
- ## Component Types
60
-
61
- Akan.js components are categorized into five main types, each with a specific responsibility:
62
-
63
- ### 1. Unit Components (\*.Unit.tsx)
64
-
65
- - **Purpose**: Display individual items in lists or cards
66
- - **Responsibility**: Compact display of model data
67
- - **Props**: Model data + navigation/action props
68
- - **Example Usage**: List items, cards, thumbnails
69
-
70
- ```tsx
71
- export const Card = ({ model, href }: ModelProps<"model", ModelType>) => {
72
- return (
73
- <Link href={href} className="rounded-lg shadow-sm hover:shadow-lg">
74
- <div className="p-4">
75
- <h3 className="font-medium">{model.title}</h3>
76
- <p className="opacity-75">{model.description}</p>
77
- </div>
78
- </Link>
79
- );
80
- };
81
- ```
82
-
83
- ### 2. View Components (\*.View.tsx)
84
-
85
- - **Purpose**: Display detailed model information
86
- - **Responsibility**: Comprehensive view of a single model
87
- - **Props**: Full model object and contextual data
88
- - **Example Usage**: Detail pages, modals with complete model information
89
-
90
- ```tsx
91
- export const General = ({ model, className }: { model: ModelType; className?: string }) => {
92
- return (
93
- <div className={clsx("space-y-4 p-4", className)}>
94
- <h1 className="text-2xl font-bold">{model.title}</h1>
95
- <div className="flex gap-2 text-sm opacity-75">
96
- <span>{model.category}</span>
97
- <span>{new Date(model.createdAt).toLocaleDateString()}</span>
98
- </div>
99
- <p className="whitespace-pre-wrap">{model.content}</p>
100
- </div>
101
- );
102
- };
103
- ```
104
-
105
- ### 3. Template Components (\*.Template.tsx)
106
-
107
- - **Purpose**: Create/edit forms for models
108
- - **Responsibility**: Input gathering and form state management
109
- - **Props**: Form state handlers (typically from store)
110
- - **Example Usage**: Create/edit forms, wizards, step-by-step flows
111
-
112
- ```tsx
113
- export const General = () => {
114
- const form = st.use.modelForm();
115
-
116
- return (
117
- <div className="space-y-4">
118
- <div>
119
- <label className="text-sm opacity-75">Title</label>
120
- <Input
121
- value={form.title ?? ""}
122
- onChange={st.do.setTitleOnModel}
123
- placeholder="Enter title"
124
- className="w-full rounded-md p-2"
125
- />
126
- </div>
127
-
128
- <div>
129
- <label className="text-sm opacity-75">Content</label>
130
- <Input.TextArea
131
- value={form.content ?? ""}
132
- onChange={st.do.setContentOnModel}
133
- placeholder="Enter content"
134
- className="h-32 w-full rounded-md p-2"
135
- />
136
- </div>
137
- </div>
138
- );
139
- };
140
- ```
141
-
142
- ### 4. Util Components (\*.Util.tsx)
143
-
144
- - **Purpose**: Utility components specific to a feature
145
- - **Responsibility**: Feature-specific UI helpers, buttons, toolbars
146
- - **Props**: Action handlers, contextual data
147
- - **Example Usage**: Toolbars, statistics, insights, action buttons
148
-
149
- ```tsx
150
- export const Toolbar = ({ model, className }: { model: ModelType; className?: string }) => {
151
- return (
152
- <div className={clsx("flex gap-2", className)}>
153
- <Button onClick={() => st.do.duplicateModel(model.id)}>Duplicate</Button>
154
- <Button variant="danger" onClick={() => st.do.deleteModel(model.id)}>
155
- Delete
156
- </Button>
157
- </div>
158
- );
159
- };
160
-
161
- export const Stats = ({ summary }: { summary: ModelSummary }) => {
162
- return (
163
- <div className="grid grid-cols-3 gap-4">
164
- <div className="bg-base-100 rounded-lg p-3">
165
- <div className="text-sm opacity-75">Total</div>
166
- <div className="text-xl font-medium">{summary.total}</div>
167
- </div>
168
- <div className="bg-base-100 rounded-lg p-3">
169
- <div className="text-sm opacity-75">Active</div>
170
- <div className="text-xl font-medium">{summary.active}</div>
171
- </div>
172
- </div>
173
- );
174
- };
175
- ```
176
-
177
- ### 5. Zone Components (\*.Zone.tsx)
178
-
179
- - **Purpose**: Container components with data loading
180
- - **Responsibility**: Data fetching, layout, and wiring components together
181
- - **Props**: Initialization data, query parameters
182
- - **Example Usage**: Pages, sections, data-driven layout areas
183
-
184
- ```tsx
185
- export const List = ({
186
- init,
187
- query,
188
- className,
189
- }: {
190
- init: ClientInit<"model">;
191
- query?: QueryParams;
192
- className?: string;
193
- }) => {
194
- return (
195
- <Load.Units
196
- init={init}
197
- query={query}
198
- className={className}
199
- renderItem={(model: ModelType) => <Model.Unit.Card key={model.id} model={model} href={`/model/${model.id}`} />}
200
- renderEmpty={() => <div>No items found</div>}
201
- />
202
- );
203
- };
204
-
205
- export const Admin = ({ init, query }: { init: ClientInit<"model">; query?: QueryParams }) => {
206
- return (
207
- <Data.ListContainer
208
- init={init}
209
- query={query}
210
- sliceName="model"
211
- renderItem={Model.Unit.Card}
212
- renderTemplate={Model.Template.General}
213
- renderView={(model: ModelType) => <Model.View.General model={model} />}
214
- columns={["title", "status", "createdAt"]}
215
- actions={(model) => ["edit", "delete", "view"]}
216
- />
217
- );
218
- };
219
- ```
220
-
221
- ---
222
-
223
- ## File Naming Conventions
224
-
225
- Akan.js uses a strict naming convention to maintain consistency:
226
-
227
- - **Model Components**:
228
-
229
- - `{Model}.Unit.tsx` - Card/list item components
230
- - `{Model}.View.tsx` - Detailed view components
231
- - `{Model}.Template.tsx` - Form/edit components
232
- - `{Model}.Util.tsx` - Utility components
233
- - `{Model}.Zone.tsx` - Container components
234
-
235
- - **Model Logic**:
236
-
237
- - `{model}.constant.ts` - Types, GraphQL schema, enums
238
- - `{model}.service.ts` - Business logic and database operations
239
- - `{model}.signal.ts` - Client state management and API calls
240
- - `{model}.store.ts` - Zustand store definitions
241
- - `{model}.dictionary.ts` - i18n strings
242
- - `{model}.document.ts` - Mongoose database schema
243
-
244
- - **UI Components**:
245
- - `ui/**/*.tsx` - Reusable UI components
246
- - `ui/Button.tsx`, `ui/Card.tsx`, etc.
247
-
248
- ---
249
-
250
- ## Utility Functions
251
-
252
- Akan.js provides several utility modules for common frontend tasks:
253
-
254
- ### 1. Cookie Management (`akanjs/client/cookie`)
255
-
256
- ```tsx
257
- import { getCookie, setCookie, removeCookie } from "akanjs/client";
258
-
259
- // Setting cookies
260
- setCookie("session", "token123");
261
-
262
- // Getting cookies
263
- const session = getCookie("session");
264
-
265
- // Authentication helpers
266
- const user = getMe();
267
- ```
268
-
269
- ### 2. Storage Utilities (`akanjs/client/storage`)
270
-
271
- Cross-platform storage that works in both web and mobile:
272
-
273
- ```tsx
274
- import { storage } from "akanjs/client";
275
-
276
- // Store data
277
- await storage.setItem("key", "value");
278
-
279
- // Retrieve data
280
- const value = await storage.getItem("key");
281
-
282
- // Remove data
283
- await storage.removeItem("key");
284
- ```
285
-
286
- ### 3. Device Capabilities (`akanjs/client/device`)
287
-
288
- ```tsx
289
- import { device } from "akanjs/client";
290
-
291
- // Initialize device
292
- await device.init();
293
-
294
- // Haptic feedback
295
- device.vibrate("medium");
296
-
297
- // Keyboard control
298
- device.keyboard.show();
299
- device.keyboard.hide();
300
- ```
301
-
302
- ### 4. Routing (`akanjs/client/router`)
303
-
304
- ```tsx
305
- import { router } from "akanjs/client";
306
-
307
- // Navigation
308
- router.push("/dashboard");
309
- router.replace("/login");
310
- router.back();
311
-
312
- // With query parameters
313
- router.push("/search", { q: "term" });
314
- ```
315
-
316
- ### 5. CSS Utilities (`akanjs/client/types`)
317
-
318
- ```tsx
319
- import { clsx } from "akanjs/client";
320
-
321
- // Combining class names
322
- const className = clsx("base-class", isActive && "active-class", variant === "large" ? "text-lg" : "text-sm");
323
- ```
324
-
325
- ---
326
-
327
- ## Best Practices
328
-
329
- 1. **Separation of Concerns**
330
-
331
- - Keep business logic in signal/store files
332
- - Keep UI rendering in component files
333
- - Use Zone components to wire everything together
334
-
335
- 2. **Component Composition**
336
-
337
- - Break complex UIs into smaller components
338
- - Use composition over inheritance
339
- - Always accept and forward `className` prop
340
-
341
- 3. **Performance**
342
-
343
- - Use `React.memo` for frequently re-rendered components
344
- - Avoid inline function definitions in render methods
345
- - Use useMemo/useCallback for expensive computations
346
-
347
- 4. **Accessibility**
348
-
349
- - Include proper ARIA attributes
350
- - Ensure keyboard navigation works
351
- - Maintain sufficient color contrast
352
-
353
- 5. **Type Safety**
354
-
355
- - Define clear interfaces for all component props
356
- - Leverage TypeScript's discriminated unions where appropriate
357
- - Use model types from constants files
358
-
359
- 6. **State Management**
360
- - Use framework-provided state utilities (signals, stores)
361
- - Keep global state minimal and focused
362
- - Follow the Akan.js state pattern (store + signal)
363
-
364
- ---
365
-
366
- ## Complete Examples
367
-
368
- ### Full Model Module Components
369
-
370
- Here's a complete example of components for a "Product" feature:
371
-
372
- #### Product.Unit.tsx
373
-
374
- ```tsx
375
- import { clsx, ModelProps } from "akanjs/client";
376
- import { cnst } from "@app/client";
377
- import { Image, Link } from "akanjs/ui";
378
-
379
- export const Card = ({ product, href }: ModelProps<"product", cnst.Product>) => {
380
- return (
381
- <Link href={href} className="animate-fadeIn flex rounded-lg shadow-sm duration-300 hover:shadow-lg">
382
- <div className="p-4">
383
- <h3 className="font-medium">{product.name}</h3>
384
- <div className="text-primary">${product.price.toFixed(2)}</div>
385
- {product.image && <Image src={product.image.url} className="h-32 w-full rounded object-cover" />}
386
- <p className="text-sm opacity-75">{product.description}</p>
387
- </div>
388
- </Link>
389
- );
390
- };
391
- ```
392
-
393
- #### Product.View.tsx
394
-
395
- ```tsx
396
- import { clsx } from "akanjs/client";
397
- import { cnst } from "@app/client";
398
- import { Button, Image } from "akanjs/ui";
399
-
400
- interface ProductViewProps {
401
- className?: string;
402
- product: cnst.Product;
403
- }
404
-
405
- export const General = ({ className, product }: ProductViewProps) => {
406
- return (
407
- <div className={clsx("animate-fadeIn space-y-6", className)}>
408
- <div className="flex flex-col gap-6 md:flex-row">
409
- {product.image && (
410
- <div className="w-full md:w-1/2">
411
- <Image src={product.image.url} className="w-full rounded-lg object-cover" />
412
- </div>
413
- )}
414
-
415
- <div className="w-full space-y-4 md:w-1/2">
416
- <h1 className="text-3xl font-bold">{product.name}</h1>
417
- <div className="text-primary text-xl font-medium">${product.price.toFixed(2)}</div>
418
- <p className="whitespace-pre-wrap">{product.description}</p>
419
- <div className="flex gap-2">
420
- <Button variant="primary">Add to Cart</Button>
421
- <Button variant="outline">Save for Later</Button>
422
- </div>
423
- </div>
424
- </div>
425
-
426
- <div>
427
- <h2 className="mb-2 text-xl font-medium">Specifications</h2>
428
- <div className="grid grid-cols-2 gap-2">
429
- {product.specifications.map((spec, idx) => (
430
- <div key={idx} className="flex justify-between border-b p-2">
431
- <span className="font-medium">{spec.name}</span>
432
- <span>{spec.value}</span>
433
- </div>
434
- ))}
435
- </div>
436
- </div>
437
- </div>
438
- );
439
- };
440
- ```
441
-
442
- #### Product.Template.tsx
443
-
444
- ```tsx
445
- "use client";
446
- import { clsx } from "akanjs/client";
447
- import { st } from "@app/client";
448
- import { Button, Input } from "akanjs/ui";
449
- import { Upload } from "@libs/util/ui";
450
- import { AiOutlinePlus } from "react-icons/ai";
451
-
452
- export const General = () => {
453
- const productForm = st.use.productForm();
454
-
455
- return (
456
- <div className="space-y-6">
457
- <div>
458
- <label className="mb-1 block text-sm opacity-75">Product Name</label>
459
- <Input
460
- value={productForm.name ?? ""}
461
- onChange={st.do.setNameOnProduct}
462
- placeholder="Enter product name"
463
- className="w-full rounded-md p-2"
464
- />
465
- </div>
466
-
467
- <div>
468
- <label className="mb-1 block text-sm opacity-75">Price</label>
469
- <Input
470
- type="number"
471
- value={productForm.price?.toString() ?? ""}
472
- onChange={(value) => st.do.setPriceOnProduct(Number(value))}
473
- placeholder="0.00"
474
- className="w-full rounded-md p-2"
475
- />
476
- </div>
477
-
478
- <div>
479
- <label className="mb-1 block text-sm opacity-75">Description</label>
480
- <Input.TextArea
481
- value={productForm.description ?? ""}
482
- onChange={st.do.setDescriptionOnProduct}
483
- placeholder="Product description"
484
- className="h-32 w-full rounded-md p-2"
485
- />
486
- </div>
487
-
488
- <div>
489
- <label className="mb-1 block text-sm opacity-75">Product Image</label>
490
- <Upload.Image
491
- aspectRatio={[1, 1]}
492
- type="crop"
493
- styleType="square"
494
- protoFile={productForm.image}
495
- onRemove={() => st.do.setImageOnProduct(null)}
496
- renderEmpty={() => (
497
- <div className="border-base-200 bg-base-100 flex h-48 w-full items-center justify-center rounded-xl border drop-shadow-xl duration-300 hover:opacity-50">
498
- <div>
499
- <AiOutlinePlus className="text-primary text-6xl font-bold opacity-60" />
500
- <p className="text-base-300 text-center text-xs">Upload Image</p>
501
- </div>
502
- </div>
503
- )}
504
- renderComplete={(file) => (
505
- <div className="h-48 w-full rounded-md">
506
- <Image file={file} className="size-full rounded-md object-cover" />
507
- </div>
508
- )}
509
- onSave={(file) => st.do.uploadImageOnProduct([file] as unknown as FileList)}
510
- />
511
- </div>
512
- </div>
513
- );
514
- };
515
- ```
516
-
517
- #### Product.Util.tsx
518
-
519
- ```tsx
520
- "use client";
521
- import { ModelDashboardProps } from "akanjs/client";
522
- import { cnst, st } from "@app/client";
523
- import { Data } from "akanjs/ui";
524
- import { Button } from "akanjs/ui";
525
-
526
- export const AddToCart = ({ productId, className }: { productId: string; className?: string }) => {
527
- return (
528
- <Button className={clsx("bg-primary text-white", className)} onClick={() => st.do.addToCart(productId)}>
529
- Add to Cart
530
- </Button>
531
- );
532
- };
533
-
534
- export const PriceFilter = ({
535
- onChange,
536
- value,
537
- }: {
538
- onChange: (range: [number, number]) => void;
539
- value: [number, number];
540
- }) => {
541
- return (
542
- <div className="space-y-2">
543
- <div className="flex justify-between text-sm">
544
- <span>Min: ${value[0]}</span>
545
- <span>Max: ${value[1]}</span>
546
- </div>
547
- <div className="flex gap-4">
548
- <input
549
- type="range"
550
- min="0"
551
- max="1000"
552
- value={value[0]}
553
- onChange={(e) => onChange([Number(e.target.value), value[1]])}
554
- className="range range-xs range-primary"
555
- />
556
- <input
557
- type="range"
558
- min="0"
559
- max="1000"
560
- value={value[1]}
561
- onChange={(e) => onChange([value[0], Number(e.target.value)])}
562
- className="range range-xs range-primary"
563
- />
564
- </div>
565
- </div>
566
- );
567
- };
568
- ```
569
-
570
- #### Product.Zone.tsx
571
-
572
- ```tsx
573
- "use client";
574
- import { ModelsProps } from "akanjs/client";
575
- import { ClientInit, ClientView } from "akanjs/signal";
576
- import { cnst, Product } from "@app/client";
577
- import { Data, Load } from "akanjs/ui";
578
-
579
- export const Admin = ({ sliceName = "product", init, query }: ModelsProps<cnst.Product>) => {
580
- return (
581
- <Data.ListContainer
582
- init={init}
583
- query={query}
584
- sliceName={sliceName}
585
- renderItem={Product.Unit.Card}
586
- renderDashboard={Product.Util.Stat}
587
- renderTemplate={Product.Template.General}
588
- renderTitle={(product) => product.name}
589
- renderView={(product) => <Product.View.General product={product} />}
590
- columns={["name", "price", "status", "createdAt"]}
591
- actions={(product) => ["edit", "remove", "view"]}
592
- />
593
- );
594
- };
595
-
596
- export const Catalog = ({
597
- className,
598
- init,
599
- query,
600
- }: {
601
- className?: string;
602
- init: ClientInit<"product", cnst.Product>;
603
- query?: Record<string, any>;
604
- }) => {
605
- return (
606
- <div className={className}>
607
- <div className="flex flex-col gap-6 md:flex-row">
608
- <div className="w-full md:w-1/4">
609
- <Product.Util.Filters />
610
- </div>
611
-
612
- <div className="w-full md:w-3/4">
613
- <Load.Units
614
- init={init}
615
- query={query}
616
- renderItem={(product) => (
617
- <Product.Unit.Card key={product.id} href={`/products/${product.id}`} product={product} />
618
- )}
619
- renderEmpty={() => <div className="p-8 text-center">No products found matching your criteria</div>}
620
- renderList={(products) => (
621
- <div className="grid grid-cols-1 gap-6 md:grid-cols-2 lg:grid-cols-3">
622
- {products.map((product) => (
623
- <Product.Unit.Card key={product.id} href={`/products/${product.id}`} product={product} />
624
- ))}
625
- </div>
626
- )}
627
- />
628
- </div>
629
- </div>
630
- </div>
631
- );
632
- };
633
-
634
- export const View = ({ view }: { view: ClientView<"product", cnst.Product> }) => {
635
- return <Load.View view={view} renderView={(product) => <Product.View.General product={product} />} />;
636
- };
637
- ```