cabloy 5.1.65 → 5.1.67

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 (340) hide show
  1. package/.claude/skills/cabloy-resource-field-update/SKILL.md +6 -0
  2. package/CHANGELOG.md +55 -0
  3. package/cabloy-docs/.vitepress/config.mjs +1 -1
  4. package/cabloy-docs/backend/crud-workflow.md +33 -0
  5. package/cabloy-docs/backend/master-detail-workflow.md +149 -0
  6. package/cabloy-docs/frontend/bean-scene-authoring.md +1 -1
  7. package/cabloy-docs/frontend/cli.md +12 -1
  8. package/cabloy-docs/frontend/command-scene-authoring.md +12 -1
  9. package/cabloy-docs/frontend/component-guide.md +10 -0
  10. package/cabloy-docs/frontend/permission-formscene-action-visibility-guide.md +69 -7
  11. package/cabloy-docs/frontend/table-cell-cookbook.md +10 -0
  12. package/cabloy-docs/fullstack/backend-metadata-to-frontend-table-actions.md +83 -2
  13. package/cabloy-docs/reference/bean-scene-boilerplates.md +9 -4
  14. package/package.json +1 -1
  15. package/vona/packages-cli/cabloy-cli/package.json +1 -1
  16. package/vona/packages-cli/cabloy-cli/src/lib/local.helper.ts +38 -0
  17. package/vona/packages-cli/cli/package.json +1 -1
  18. package/vona/packages-cli/cli-set-api/cli/templates/create/module/boilerplate/_package.json +1 -1
  19. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoBaseName%>.tsx_ +18 -0
  20. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoMutateName%>.tsx_ +17 -0
  21. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoResItemName%>.tsx_ +60 -0
  22. package/vona/packages-cli/cli-set-api/cli/templates/tools/masterDetail/boilerplate/dto/<%=argv.detailDtoViewName%>.tsx_ +17 -0
  23. package/vona/packages-cli/cli-set-api/package.json +2 -2
  24. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.bean.ts +2 -6
  25. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.module.ts +3 -6
  26. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.suite.ts +1 -1
  27. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.create.test.ts +2 -6
  28. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.asset.ts +2 -6
  29. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.config.ts +2 -6
  30. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.constant.ts +2 -6
  31. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.error.ts +2 -6
  32. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.lib.ts +2 -6
  33. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.locale.ts +2 -6
  34. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.main.ts +2 -6
  35. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.monkey.ts +2 -6
  36. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.static.ts +2 -6
  37. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.init.types.ts +2 -6
  38. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crud.ts +2 -6
  39. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crudBasic.ts +2 -6
  40. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.crudStart.ts +2 -6
  41. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.masterDetail.ts +699 -0
  42. package/vona/packages-cli/cli-set-api/src/lib/bean/cli.tools.metadata.ts +1 -2
  43. package/vona/packages-cli/cli-set-api/src/lib/beans.ts +2 -0
  44. package/vona/packages-cli/cli-set-api/src/lib/command/tools.masterDetail.ts +78 -0
  45. package/vona/packages-cli/cli-set-api/src/lib/commands.ts +2 -0
  46. package/vona/packages-vona/vona/package.json +1 -1
  47. package/vona/packages-vona/vona-core/package.json +1 -1
  48. package/vona/packages-vona/vona-core/src/lib/mappedClass/type.ts +1 -0
  49. package/vona/packages-vona/vona-core/src/lib/mappedClass/utils.ts +36 -14
  50. package/vona/packages-vona/vona-mock/package.json +1 -1
  51. package/vona/pnpm-lock.yaml +35 -11
  52. package/vona/src/suite/a-demo/modules/demo-basic/package.json +1 -1
  53. package/vona/src/suite/a-home/modules/home-base/package.json +1 -1
  54. package/vona/src/suite/a-home/modules/home-index/package.json +1 -1
  55. package/vona/src/suite/a-home/modules/home-user/package.json +1 -1
  56. package/vona/src/suite/a-training/modules/training-record/package.json +1 -1
  57. package/vona/src/suite/a-training/modules/training-record/src/.metadata/index.ts +232 -3
  58. package/vona/src/suite/a-training/modules/training-record/src/bean/ssrMenu.record.ts +29 -0
  59. package/vona/src/suite/a-training/modules/training-record/src/config/locale/en-us.ts +9 -1
  60. package/vona/src/suite/a-training/modules/training-record/src/config/locale/zh-cn.ts +9 -1
  61. package/vona/src/suite/a-training/modules/training-record/src/controller/record.ts +59 -0
  62. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectBase.tsx +18 -0
  63. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectMutate.tsx +17 -0
  64. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectResItem.tsx +60 -0
  65. package/vona/src/suite/a-training/modules/training-record/src/dto/detailRecordSubjectView.tsx +17 -0
  66. package/vona/src/suite/a-training/modules/training-record/src/dto/recordCreate.tsx +45 -0
  67. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectReq.tsx +38 -0
  68. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectRes.tsx +11 -0
  69. package/vona/src/suite/a-training/modules/training-record/src/dto/recordSelectResItem.tsx +39 -0
  70. package/vona/src/suite/a-training/modules/training-record/src/dto/recordUpdate.tsx +45 -0
  71. package/vona/src/suite/a-training/modules/training-record/src/dto/recordView.tsx +42 -0
  72. package/vona/src/suite/a-training/modules/training-record/src/entity/record.tsx +23 -6
  73. package/vona/src/suite/a-training/modules/training-record/src/model/record.ts +15 -2
  74. package/vona/src/suite/a-training/modules/training-record/src/service/record.ts +50 -0
  75. package/vona/src/suite/a-training/modules/training-record/test/record.test.ts +138 -0
  76. package/vona/src/suite/a-training/modules/training-recordsubject/package.json +53 -0
  77. package/vona/src/suite/a-training/modules/training-recordsubject/src/.metadata/index.ts +198 -0
  78. package/vona/src/suite/a-training/modules/training-recordsubject/src/.metadata/locales.ts +18 -0
  79. package/vona/src/suite/a-training/modules/training-recordsubject/src/.metadata/this.ts +2 -0
  80. package/vona/src/suite/a-training/modules/training-recordsubject/src/bean/meta.index.ts +12 -0
  81. package/vona/src/suite/a-training/modules/training-recordsubject/src/bean/meta.version.ts +21 -0
  82. package/vona/src/suite/a-training/modules/training-recordsubject/src/config/locale/en-us.ts +9 -0
  83. package/vona/src/suite/a-training/modules/training-recordsubject/src/config/locale/zh-cn.ts +9 -0
  84. package/vona/src/suite/a-training/modules/training-recordsubject/src/entity/subject.tsx +42 -0
  85. package/vona/src/suite/a-training/modules/training-recordsubject/src/index.ts +2 -0
  86. package/vona/src/suite/a-training/modules/training-recordsubject/src/model/subject.ts +10 -0
  87. package/vona/src/suite/a-training/modules/training-recordsubject/tsconfig.build.json +11 -0
  88. package/vona/src/suite/a-training/modules/training-recordsubject/tsconfig.json +7 -0
  89. package/vona/src/suite/a-training/modules/training-student/package.json +1 -1
  90. package/vona/src/suite/a-training/modules/training-student/src/config/locale/en-us.ts +8 -1
  91. package/vona/src/suite/a-training/modules/training-student/src/config/locale/zh-cn.ts +8 -1
  92. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordBase.tsx +17 -2
  93. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordMutate.tsx +12 -17
  94. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordResItem.tsx +26 -5
  95. package/vona/src/suite/a-training/modules/training-student/src/dto/detailRecordView.tsx +12 -14
  96. package/vona/src/suite/a-training/modules/training-student/src/dto/studentCreate.tsx +6 -4
  97. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSelectReq.tsx +3 -6
  98. package/vona/src/suite/a-training/modules/training-student/src/dto/studentSummary.tsx +1 -1
  99. package/vona/src/suite/a-training/modules/training-student/src/dto/studentUpdate.tsx +14 -1
  100. package/vona/src/suite/a-training/modules/training-student/src/dto/studentView.tsx +14 -1
  101. package/vona/src/suite/a-training/modules/training-student/src/entity/student.tsx +2 -4
  102. package/vona/src/suite/a-training/modules/training-student/src/service/student.ts +22 -5
  103. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +69 -15
  104. package/vona/src/suite/a-training/package.json +1 -0
  105. package/vona/src/suite/a-training/tsconfig.json +3 -0
  106. package/vona/src/suite/cabloy-basic/modules/basic-siteadmin/package.json +1 -1
  107. package/vona/src/suite/cabloy-basic/modules/basic-siteweb/package.json +1 -1
  108. package/vona/src/suite-vendor/a-auth/modules/a-auth/package.json +2 -2
  109. package/vona/src/suite-vendor/a-auth/modules/auth-oauth/package.json +2 -2
  110. package/vona/src/suite-vendor/a-auth/modules/auth-simple/package.json +2 -2
  111. package/vona/src/suite-vendor/a-auth/package.json +2 -2
  112. package/vona/src/suite-vendor/a-cabloy/modules/a-cabloy/package.json +2 -2
  113. package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +2 -2
  114. package/vona/src/suite-vendor/a-cabloy/modules/a-datasource/package.json +2 -2
  115. package/vona/src/suite-vendor/a-cabloy/modules/a-socket/package.json +2 -2
  116. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +2 -2
  117. package/vona/src/suite-vendor/a-cabloy/modules/a-ssrhmr/package.json +2 -2
  118. package/vona/src/suite-vendor/a-cabloy/modules/a-status/package.json +2 -2
  119. package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
  120. package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +2 -2
  121. package/vona/src/suite-vendor/a-captcha/modules/captcha-simple/package.json +2 -2
  122. package/vona/src/suite-vendor/a-captcha/package.json +1 -1
  123. package/vona/src/suite-vendor/a-paypal/modules/a-paypal/package.json +2 -2
  124. package/vona/src/suite-vendor/a-paypal/package.json +1 -1
  125. package/vona/src/suite-vendor/a-vona/modules/a-aspect/package.json +2 -2
  126. package/vona/src/suite-vendor/a-vona/modules/a-aspectutils/package.json +2 -2
  127. package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +2 -2
  128. package/vona/src/suite-vendor/a-vona/modules/a-beanmutate/package.json +2 -2
  129. package/vona/src/suite-vendor/a-vona/modules/a-body/package.json +2 -2
  130. package/vona/src/suite-vendor/a-vona/modules/a-broadcast/package.json +2 -2
  131. package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +2 -2
  132. package/vona/src/suite-vendor/a-vona/modules/a-caching/package.json +2 -2
  133. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +2 -2
  134. package/vona/src/suite-vendor/a-vona/modules/a-election/package.json +2 -2
  135. package/vona/src/suite-vendor/a-vona/modules/a-error/package.json +2 -2
  136. package/vona/src/suite-vendor/a-vona/modules/a-event/package.json +2 -2
  137. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +2 -2
  138. package/vona/src/suite-vendor/a-vona/modules/a-hmr/package.json +2 -2
  139. package/vona/src/suite-vendor/a-vona/modules/a-hmrbase/package.json +2 -2
  140. package/vona/src/suite-vendor/a-vona/modules/a-index/package.json +2 -2
  141. package/vona/src/suite-vendor/a-vona/modules/a-instance/package.json +2 -2
  142. package/vona/src/suite-vendor/a-vona/modules/a-jwt/package.json +2 -2
  143. package/vona/src/suite-vendor/a-vona/modules/a-locale/package.json +2 -2
  144. package/vona/src/suite-vendor/a-vona/modules/a-logger/package.json +2 -2
  145. package/vona/src/suite-vendor/a-vona/modules/a-mail/package.json +2 -2
  146. package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +2 -2
  147. package/vona/src/suite-vendor/a-vona/modules/a-menu/package.json +2 -2
  148. package/vona/src/suite-vendor/a-vona/modules/a-meta/package.json +2 -2
  149. package/vona/src/suite-vendor/a-vona/modules/a-onion/package.json +2 -2
  150. package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +2 -2
  151. package/vona/src/suite-vendor/a-vona/modules/a-openapischema/package.json +2 -2
  152. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/package.json +2 -2
  153. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/const/decorator.ts +3 -1
  154. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/schema/makeSchemaLikes.ts +21 -17
  155. package/vona/src/suite-vendor/a-vona/modules/a-openapiutils/src/lib/utils.ts +44 -2
  156. package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +2 -2
  157. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +6 -2
  158. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +13 -4
  159. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/utils.ts +1 -1
  160. package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +37 -16
  161. package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +2 -2
  162. package/vona/src/suite-vendor/a-vona/modules/a-ormutils/package.json +2 -2
  163. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +2 -2
  164. package/vona/src/suite-vendor/a-vona/modules/a-play/package.json +2 -2
  165. package/vona/src/suite-vendor/a-vona/modules/a-printtip/package.json +2 -2
  166. package/vona/src/suite-vendor/a-vona/modules/a-queue/package.json +2 -2
  167. package/vona/src/suite-vendor/a-vona/modules/a-redis/package.json +2 -2
  168. package/vona/src/suite-vendor/a-vona/modules/a-redlock/package.json +2 -2
  169. package/vona/src/suite-vendor/a-vona/modules/a-runtime/package.json +2 -2
  170. package/vona/src/suite-vendor/a-vona/modules/a-schedule/package.json +2 -2
  171. package/vona/src/suite-vendor/a-vona/modules/a-security/package.json +2 -2
  172. package/vona/src/suite-vendor/a-vona/modules/a-serialization/package.json +2 -2
  173. package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +2 -2
  174. package/vona/src/suite-vendor/a-vona/modules/a-static/package.json +2 -2
  175. package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +2 -2
  176. package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +2 -2
  177. package/vona/src/suite-vendor/a-vona/modules/a-upload/package.json +2 -2
  178. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +2 -2
  179. package/vona/src/suite-vendor/a-vona/modules/a-validation/package.json +2 -2
  180. package/vona/src/suite-vendor/a-vona/modules/a-version/package.json +2 -2
  181. package/vona/src/suite-vendor/a-vona/modules/a-vona/package.json +2 -2
  182. package/vona/src/suite-vendor/a-vona/modules/a-web/package.json +2 -2
  183. package/vona/src/suite-vendor/a-vona/modules/a-web/src/lib/decorator/bean.ts +26 -5
  184. package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +2 -2
  185. package/vona/src/suite-vendor/a-vona/modules/a-zod/package.json +2 -2
  186. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  187. package/zova/packages-cli/cli/package.json +3 -3
  188. package/zova/packages-cli/cli-set-front/cli/templates/create/component/boilerplateDetailsActionBulk/controller.tsx_ +31 -0
  189. package/zova/packages-cli/cli-set-front/cli/templates/create/module/boilerplate/_package.json +1 -1
  190. package/zova/packages-cli/cli-set-front/cli/templates/rest/component.ts +21 -0
  191. package/zova/packages-cli/cli-set-front/cli/templates/rest/render.ts +4 -0
  192. package/zova/packages-cli/cli-set-front/package.json +3 -3
  193. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.bean.ts +2 -6
  194. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.mock.ts +2 -6
  195. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.module.ts +3 -6
  196. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.create.suite.ts +1 -1
  197. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.asset.ts +2 -6
  198. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.config.ts +2 -6
  199. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.constant.ts +2 -6
  200. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.error.ts +2 -6
  201. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.icon.ts +2 -6
  202. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.lib.ts +2 -6
  203. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.locale.ts +2 -6
  204. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.main.ts +2 -6
  205. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.mainSys.ts +2 -6
  206. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.monkey.ts +2 -6
  207. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.monkeySys.ts +2 -6
  208. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.init.types.ts +2 -6
  209. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.config.ts +1 -4
  210. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.openapi.generate.ts +2 -2
  211. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.anotherRender.ts +2 -6
  212. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.anotherStyle.ts +2 -6
  213. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentEmits.ts +2 -6
  214. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentGeneric.ts +2 -6
  215. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentModel.ts +2 -6
  216. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentProps.ts +2 -6
  217. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.componentSlots.ts +2 -6
  218. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.firstRender.ts +2 -6
  219. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.firstStyle.ts +2 -6
  220. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.pageParams.ts +2 -6
  221. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.pageQuery.ts +2 -6
  222. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.refactor.renameComponent.ts +2 -6
  223. package/zova/packages-cli/cli-set-front/src/lib/bean/cli.tools.metadata.ts +1 -2
  224. package/zova/packages-cli/cli-set-front/src/lib/common/cliCreateComponent.ts +2 -6
  225. package/zova/packages-cli/cli-set-front/src/lib/common/cliCreatePage.ts +2 -6
  226. package/zova/packages-zova/zova/package.json +2 -2
  227. package/zova/pnpm-lock.yaml +695 -791
  228. package/zova/src/suite/a-demo/modules/demo-basic/package.json +1 -1
  229. package/zova/src/suite/a-demo/modules/demo-todo/package.json +1 -1
  230. package/zova/src/suite/a-devui/modules/devui-adapter/package.json +1 -1
  231. package/zova/src/suite/a-home/modules/home-api/package.json +1 -1
  232. package/zova/src/suite/a-home/modules/home-base/package.json +1 -1
  233. package/zova/src/suite/a-home/modules/home-icon/package.json +1 -1
  234. package/zova/src/suite/a-home/modules/home-indexadmin/package.json +1 -1
  235. package/zova/src/suite/a-home/modules/home-indexweb/package.json +1 -1
  236. package/zova/src/suite/a-home/modules/home-layoutadmin/package.json +1 -1
  237. package/zova/src/suite/a-home/modules/home-layoutempty/package.json +1 -1
  238. package/zova/src/suite/a-home/modules/home-layoutweb/package.json +1 -1
  239. package/zova/src/suite/a-home/modules/home-login/package.json +1 -1
  240. package/zova/src/suite/a-home/modules/home-passport/package.json +1 -1
  241. package/zova/src/suite/a-home/modules/home-theme/package.json +1 -1
  242. package/zova/src/suite/a-training/modules/training-student/package.json +3 -2
  243. package/zova/src/suite/cabloy-basic/modules/basic-adapter/package.json +1 -1
  244. package/zova/src/suite/cabloy-basic/modules/basic-app/package.json +1 -1
  245. package/zova/src/suite/cabloy-basic/modules/basic-app/src/bean/behavior.appModal.tsx +131 -13
  246. package/zova/src/suite/cabloy-basic/modules/basic-app/src/config/config.ts +15 -0
  247. package/zova/src/suite/cabloy-basic/modules/basic-app/src/service/appModal.ts +23 -5
  248. package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +30 -4
  249. package/zova/src/suite/cabloy-basic/modules/basic-captcha/package.json +1 -1
  250. package/zova/src/suite/cabloy-basic/modules/basic-commands/package.json +1 -1
  251. package/zova/src/suite/cabloy-basic/modules/basic-commandssync/package.json +1 -1
  252. package/zova/src/suite/cabloy-basic/modules/basic-currency/package.json +1 -1
  253. package/zova/src/suite/cabloy-basic/modules/basic-date/package.json +1 -1
  254. package/zova/src/suite/cabloy-basic/modules/basic-details/package.json +7 -2
  255. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/component/blockForm.ts +31 -0
  256. package/zova/src/suite/cabloy-basic/modules/basic-details/src/.metadata/index.ts +149 -2
  257. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/command.delete.tsx +47 -0
  258. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionDelete.tsx +52 -0
  259. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionOperationsRow.tsx +44 -6
  260. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionUpdate.tsx +73 -0
  261. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionView.tsx +64 -0
  262. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.lineNumber.tsx +30 -0
  263. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/actionCreate/controller.tsx +29 -5
  264. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockDetails/controller.tsx +28 -12
  265. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockForm/controller.tsx +53 -0
  266. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockTable/controller.tsx +7 -2
  267. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/blockToolbarBulk/controller.tsx +3 -1
  268. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/formFieldDetails/controller.tsx +24 -12
  269. package/zova/src/suite/cabloy-basic/modules/basic-details/src/config/locale/en-us.ts +4 -0
  270. package/zova/src/suite/cabloy-basic/modules/basic-details/src/config/locale/zh-cn.ts +4 -0
  271. package/zova/src/suite/cabloy-basic/modules/basic-details/src/index.ts +1 -0
  272. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/index.ts +1 -0
  273. package/zova/src/suite/cabloy-basic/modules/basic-details/src/lib/utils.ts +12 -0
  274. package/zova/src/suite/cabloy-basic/modules/basic-details/src/service/detail.tsx +172 -0
  275. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/detail.ts +18 -0
  276. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/details.ts +11 -0
  277. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/dialogForm.ts +22 -0
  278. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/index.ts +2 -0
  279. package/zova/src/suite/cabloy-basic/modules/basic-form/package.json +1 -1
  280. package/zova/src/suite/cabloy-basic/modules/basic-input/package.json +1 -1
  281. package/zova/src/suite/cabloy-basic/modules/basic-page/package.json +1 -1
  282. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/package.json +1 -1
  283. package/zova/src/suite/cabloy-basic/modules/basic-resource/package.json +52 -0
  284. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/component/formFieldResourcePicker.ts +31 -0
  285. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/index.ts +103 -0
  286. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/.metadata/this.ts +2 -0
  287. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/bean/tableCell.resourcePicker.tsx +46 -0
  288. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/component/formFieldResourcePicker/controller.tsx +157 -0
  289. package/zova/src/suite/cabloy-basic/modules/basic-resource/src/index.ts +1 -0
  290. package/zova/src/suite/cabloy-basic/modules/basic-resource/tsconfig.build.json +13 -0
  291. package/zova/src/suite/cabloy-basic/modules/basic-resource/tsconfig.json +5 -0
  292. package/zova/src/suite/cabloy-basic/modules/basic-select/package.json +1 -1
  293. package/zova/src/suite/cabloy-basic/modules/basic-table/package.json +1 -1
  294. package/zova/src/suite/cabloy-basic/modules/basic-text/package.json +1 -1
  295. package/zova/src/suite/cabloy-basic/package.json +1 -0
  296. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +2 -2
  297. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/page/entry/controller.tsx +1 -2
  298. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  299. package/zova/src/suite-vendor/a-zova/modules/a-api/package.json +2 -2
  300. package/zova/src/suite-vendor/a-zova/modules/a-app/package.json +2 -2
  301. package/zova/src/suite-vendor/a-zova/modules/a-bean/package.json +2 -2
  302. package/zova/src/suite-vendor/a-zova/modules/a-behavior/package.json +2 -2
  303. package/zova/src/suite-vendor/a-zova/modules/a-behaviors/package.json +2 -2
  304. package/zova/src/suite-vendor/a-zova/modules/a-boundary/package.json +2 -2
  305. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/command/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  306. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandBulk/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  307. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandDetailsRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +20 -0
  308. package/zova/src/suite-vendor/a-zova/modules/a-command/cli/commandRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +6 -1
  309. package/zova/src/suite-vendor/a-zova/modules/a-command/package.json +4 -3
  310. package/zova/src/suite-vendor/a-zova/modules/a-command/src/types/command.ts +2 -0
  311. package/zova/src/suite-vendor/a-zova/modules/a-fetch/package.json +2 -2
  312. package/zova/src/suite-vendor/a-zova/modules/a-form/package.json +2 -2
  313. package/zova/src/suite-vendor/a-zova/modules/a-form/src/component/form/controller.tsx +1 -0
  314. package/zova/src/suite-vendor/a-zova/modules/a-icon/package.json +2 -2
  315. package/zova/src/suite-vendor/a-zova/modules/a-interceptor/package.json +2 -2
  316. package/zova/src/suite-vendor/a-zova/modules/a-logger/package.json +2 -2
  317. package/zova/src/suite-vendor/a-zova/modules/a-meta/package.json +2 -2
  318. package/zova/src/suite-vendor/a-zova/modules/a-model/package.json +2 -2
  319. package/zova/src/suite-vendor/a-zova/modules/a-model/src/bean/bean.model/bean.model.useQuery.ts +2 -1
  320. package/zova/src/suite-vendor/a-zova/modules/a-openapi/package.json +3 -3
  321. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/lib/schema.ts +20 -4
  322. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/model/sdk.ts +4 -0
  323. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/action.ts +2 -1
  324. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/detail.ts +10 -0
  325. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/details.ts +4 -1
  326. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/detail/index.ts +1 -0
  327. package/zova/src/suite-vendor/a-zova/modules/a-openapi/src/types/rest.ts +2 -0
  328. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +2 -2
  329. package/zova/src/suite-vendor/a-zova/modules/a-routerstack/package.json +2 -2
  330. package/zova/src/suite-vendor/a-zova/modules/a-routertabs/package.json +2 -2
  331. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +2 -2
  332. package/zova/src/suite-vendor/a-zova/modules/a-ssrhmr/package.json +2 -2
  333. package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +2 -2
  334. package/zova/src/suite-vendor/a-zova/modules/a-style/package.json +2 -2
  335. package/zova/src/suite-vendor/a-zova/modules/a-table/cli/detailsActionRow/boilerplate/{{sceneName}}.{{beanName}}.tsx_ +24 -0
  336. package/zova/src/suite-vendor/a-zova/modules/a-table/package.json +4 -3
  337. package/zova/src/suite-vendor/a-zova/modules/a-table/src/component/table/controller.tsx +5 -3
  338. package/zova/src/suite-vendor/a-zova/modules/a-zod/package.json +2 -2
  339. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +3 -3
  340. package/zova/src/suite-vendor/a-zova/package.json +26 -26
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -30,7 +30,7 @@
30
30
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
31
  "prepublishOnly": "npm run tsc:publish",
32
32
  "prepack": "clean-package",
33
- "postpack": "clean-package restore && npm run clean"
33
+ "postpack": "clean-package restore"
34
34
  },
35
35
  "devDependencies": {
36
36
  "clean-package": "^2.2.0",
@@ -32,7 +32,7 @@
32
32
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
33
33
  "prepublishOnly": "npm run tsc:publish",
34
34
  "prepack": "clean-package",
35
- "postpack": "clean-package restore && npm run clean"
35
+ "postpack": "clean-package restore"
36
36
  },
37
37
  "devDependencies": {
38
38
  "clean-package": "^2.2.0",
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -30,7 +30,7 @@
30
30
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
31
  "prepublishOnly": "npm run tsc:publish",
32
32
  "prepack": "clean-package",
33
- "postpack": "clean-package restore && npm run clean"
33
+ "postpack": "clean-package restore"
34
34
  },
35
35
  "devDependencies": {
36
36
  "clean-package": "^2.2.0",
@@ -30,7 +30,7 @@
30
30
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
31
  "prepublishOnly": "npm run tsc:publish",
32
32
  "prepack": "clean-package",
33
- "postpack": "clean-package restore && npm run clean"
33
+ "postpack": "clean-package restore"
34
34
  },
35
35
  "dependencies": {},
36
36
  "devDependencies": {
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "dependencies": {},
37
37
  "devDependencies": {
@@ -30,7 +30,7 @@
30
30
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
31
  "prepublishOnly": "npm run tsc:publish",
32
32
  "prepack": "clean-package",
33
- "postpack": "clean-package restore && npm run clean"
33
+ "postpack": "clean-package restore"
34
34
  },
35
35
  "dependencies": {},
36
36
  "devDependencies": {
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "dependencies": {},
37
37
  "devDependencies": {
@@ -11,7 +11,8 @@
11
11
  "dist",
12
12
  "src",
13
13
  "icons",
14
- "assets"
14
+ "assets",
15
+ "cli"
15
16
  ],
16
17
  "type": "module",
17
18
  "exports": {
@@ -30,7 +31,7 @@
30
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
32
  "prepublishOnly": "npm run tsc:publish",
32
33
  "prepack": "clean-package",
33
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
34
35
  },
35
36
  "dependencies": {},
36
37
  "devDependencies": {
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -30,7 +30,7 @@
30
30
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
31
  "prepublishOnly": "npm run tsc:publish",
32
32
  "prepack": "clean-package",
33
- "postpack": "clean-package restore && npm run clean"
33
+ "postpack": "clean-package restore"
34
34
  },
35
35
  "dependencies": {},
36
36
  "devDependencies": {
@@ -10,7 +10,10 @@ import {
10
10
  IModalAlertOptions,
11
11
  IModalConfirmOptionsInner,
12
12
  IModalDialogOptions,
13
+ IModalDialogRenderContext,
14
+ IModalDialogRenderOptions,
13
15
  IModalItem,
16
+ IModalMessageOptions,
14
17
  IModalPromptOptionsInner,
15
18
  ModalType,
16
19
  } from '../types/appModal.js';
@@ -27,7 +30,8 @@ interface IRenderDialogBaseOptions {
27
30
  iconName?: keyof IIconRecord;
28
31
  title: string;
29
32
  body?: VNode;
30
- actions: VNode;
33
+ actions?: VNode;
34
+ showCloseButton?: boolean;
31
35
  onClose: () => void;
32
36
  }
33
37
 
@@ -37,6 +41,51 @@ export class BehaviorAppModal extends BeanBehaviorBase<
37
41
  IBehaviorPropsInputAppModal,
38
42
  IBehaviorPropsOutputAppModal
39
43
  > {
44
+ private _windowKeydownHandler?: (event: KeyboardEvent) => void;
45
+
46
+ protected async __init__() {
47
+ if (!process.env.CLIENT) return;
48
+ this._windowKeydownHandler = event => {
49
+ if (event.key !== 'Escape' || event.defaultPrevented) return;
50
+ const modalItems = this.$appModal.modalItems;
51
+ if (modalItems.length === 0) return;
52
+ const modalItem = modalItems[modalItems.length - 1];
53
+ if (!modalItem) return;
54
+ const dialogOptions = this._prepareDialogOptions(modalItem.type, modalItem.dialogOptions);
55
+ if (!dialogOptions.closeOnEscape) return;
56
+ event.preventDefault();
57
+ event.stopPropagation();
58
+ this._closeModalByEscape(modalItem);
59
+ };
60
+ window.addEventListener('keydown', this._windowKeydownHandler);
61
+ }
62
+
63
+ protected __dispose__() {
64
+ if (this._windowKeydownHandler) {
65
+ window.removeEventListener('keydown', this._windowKeydownHandler);
66
+ }
67
+ }
68
+
69
+ private _closeModalByEscape(modalItem: IModalItem) {
70
+ if (modalItem.type === 'alert') {
71
+ this.$appModal.close(modalItem.id);
72
+ return;
73
+ }
74
+ if (modalItem.type === 'confirm') {
75
+ const options = modalItem.options as IModalConfirmOptionsInner | undefined;
76
+ this.$appModal.close(modalItem.id);
77
+ options?.onCallback?.(false);
78
+ return;
79
+ }
80
+ if (modalItem.type === 'prompt') {
81
+ const options = modalItem.options as IModalPromptOptionsInner | undefined;
82
+ this.$appModal.close(modalItem.id);
83
+ options?.onCallback?.(undefined);
84
+ return;
85
+ }
86
+ this.$appModal.close(modalItem.id);
87
+ }
88
+
40
89
  protected render(
41
90
  _props: IBehaviorPropsInputAppModal,
42
91
  next: NextBehavior<IBehaviorPropsOutputAppModal>,
@@ -58,7 +107,8 @@ export class BehaviorAppModal extends BeanBehaviorBase<
58
107
  private _renderAppModal(modalItem: IModalItem) {
59
108
  if (modalItem.type === 'alert') return this._renderAppModalAlert(modalItem);
60
109
  if (modalItem.type === 'confirm') return this._renderAppModalConfirm(modalItem);
61
- return this._renderAppModalPrompt(modalItem);
110
+ if (modalItem.type === 'prompt') return this._renderAppModalPrompt(modalItem);
111
+ return this._renderAppModalDialog(modalItem);
62
112
  }
63
113
 
64
114
  private _renderAppModalAlert(modalItem: IModalItem) {
@@ -85,6 +135,7 @@ export class BehaviorAppModal extends BeanBehaviorBase<
85
135
  {this.scope.locale.Close()}
86
136
  </button>
87
137
  ),
138
+ showCloseButton: dialogOptions.showCloseButton,
88
139
  onClose: () => {
89
140
  this.$appModal.close(modalItem.id);
90
141
  },
@@ -127,6 +178,7 @@ export class BehaviorAppModal extends BeanBehaviorBase<
127
178
  </button>
128
179
  </>
129
180
  ),
181
+ showCloseButton: dialogOptions.showCloseButton,
130
182
  onClose: () => {
131
183
  this.$appModal.close(modalItem.id);
132
184
  options?.onCallback?.(false);
@@ -189,6 +241,7 @@ export class BehaviorAppModal extends BeanBehaviorBase<
189
241
  </button>
190
242
  </>
191
243
  ),
244
+ showCloseButton: dialogOptions.showCloseButton,
192
245
  onClose: () => {
193
246
  this.$appModal.close(modalItem.id);
194
247
  options?.onCallback?.(undefined);
@@ -196,6 +249,25 @@ export class BehaviorAppModal extends BeanBehaviorBase<
196
249
  });
197
250
  }
198
251
 
252
+ private _renderAppModalDialog(modalItem: IModalItem) {
253
+ const options = modalItem.options as IModalDialogRenderOptions | undefined;
254
+ const dialogOptions = this._prepareDialogOptions(modalItem.type, modalItem.dialogOptions);
255
+ const dialog = this._createDialogRenderContext(modalItem);
256
+ const title = options?.title ?? this.sys.env.APP_TITLE ?? '';
257
+ return this._renderDialogBase({
258
+ modalItem,
259
+ dialogOptions,
260
+ iconName: options?.icon,
261
+ title,
262
+ body: options?.slotDefault?.(dialog),
263
+ actions: options?.slotActions?.(dialog),
264
+ showCloseButton: dialogOptions.showCloseButton,
265
+ onClose: () => {
266
+ this.$appModal.close(modalItem.id);
267
+ },
268
+ });
269
+ }
270
+
199
271
  private _renderDialogBase({
200
272
  modalItem,
201
273
  dialogOptions,
@@ -203,6 +275,7 @@ export class BehaviorAppModal extends BeanBehaviorBase<
203
275
  title,
204
276
  body,
205
277
  actions,
278
+ showCloseButton,
206
279
  onClose,
207
280
  }: IRenderDialogBaseOptions) {
208
281
  const style = this._dialogStyle(dialogOptions);
@@ -216,38 +289,83 @@ export class BehaviorAppModal extends BeanBehaviorBase<
216
289
  }
217
290
  }}
218
291
  ></div>
219
- <div class="card bg-base-100 shadow-2xl relative w-full" style={style}>
220
- <div class="card-body gap-4">
221
- <div class="flex items-start gap-3">
292
+ <div
293
+ class="card bg-base-100 shadow-2xl relative w-full max-h-[calc(100vh-2rem)]"
294
+ style={style}
295
+ >
296
+ <div class="card-body flex max-h-full min-h-0 flex-col gap-4">
297
+ <div class="flex items-start gap-3 shrink-0">
222
298
  {!!iconName && (
223
299
  <ZIcon class="text-primary mt-1 shrink-0" name={iconName} width={24}></ZIcon>
224
300
  )}
225
301
  <div class="flex-1 min-w-0">
226
302
  <h3 class="card-title">{title}</h3>
227
- {!!body && <div class="mt-2">{body}</div>}
228
303
  </div>
304
+ {!!showCloseButton && (
305
+ <button
306
+ type="button"
307
+ class="btn btn-ghost btn-sm btn-circle shrink-0 transition-colors hover:bg-base-300"
308
+ onClick={() => {
309
+ onClose();
310
+ }}
311
+ >
312
+ <ZIcon name="::close" width={18} height={18}></ZIcon>
313
+ </button>
314
+ )}
229
315
  </div>
230
- <div class="card-actions justify-end">{actions}</div>
316
+ {!!body && <div class="min-h-0 flex-1 overflow-y-auto p-2">{body}</div>}
317
+ {!!actions && <div class="card-actions justify-end shrink-0">{actions}</div>}
231
318
  </div>
232
319
  </div>
233
320
  </div>
234
321
  );
235
322
  }
236
323
 
237
- private _prepareDialogOptions(type: ModalType, dialogOptions?: IModalDialogOptions) {
238
- const defaults = this.scope.config.model[type].default;
324
+ private _createDialogRenderContext(modalItem: IModalItem): IModalDialogRenderContext {
239
325
  return {
326
+ id: modalItem.id,
327
+ close: () => {
328
+ this.$appModal.close(modalItem.id);
329
+ },
330
+ };
331
+ }
332
+
333
+ private _prepareDialogOptions(
334
+ type: ModalType,
335
+ dialogOptions?: IModalDialogOptions | IModalMessageOptions,
336
+ ) {
337
+ const defaults = this.scope.config.model[type].default as
338
+ | IModalDialogOptions
339
+ | IModalMessageOptions;
340
+ const options = {
240
341
  maxWidth: dialogOptions?.maxWidth ?? defaults.maxWidth,
342
+ maxHeight: dialogOptions?.maxHeight ?? defaults.maxHeight,
241
343
  closeOnBackdrop: dialogOptions?.closeOnBackdrop ?? defaults.closeOnBackdrop,
344
+ closeOnEscape: dialogOptions?.closeOnEscape ?? defaults.closeOnEscape,
345
+ showCloseButton: false,
346
+ };
347
+ if (type !== 'dialog') return options;
348
+ const defaultsDialog = defaults as IModalDialogOptions;
349
+ return {
350
+ ...options,
351
+ showCloseButton:
352
+ (dialogOptions as IModalDialogOptions | undefined)?.showCloseButton ??
353
+ defaultsDialog.showCloseButton ??
354
+ false,
242
355
  };
243
356
  }
244
357
 
245
358
  private _dialogStyle(dialogOptions: IModalDialogOptions) {
359
+ const style = {} as Record<string, string>;
246
360
  const maxWidth = dialogOptions.maxWidth;
247
- if (!maxWidth) return undefined;
248
- return {
249
- maxWidth: typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth,
250
- };
361
+ const maxHeight = dialogOptions.maxHeight;
362
+ if (maxWidth) {
363
+ style.maxWidth = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth;
364
+ }
365
+ if (maxHeight) {
366
+ style.maxHeight = typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;
367
+ }
368
+ return Object.keys(style).length > 0 ? style : undefined;
251
369
  }
252
370
 
253
371
  private _getButtonClass(type: AlertType, primary?: boolean) {
@@ -14,6 +14,8 @@ export const config = (_sys: ZovaSys) => {
14
14
  default: {
15
15
  maxWidth: 360,
16
16
  closeOnBackdrop: true,
17
+ closeOnEscape: true,
18
+ showCloseButton: false,
17
19
  },
18
20
  },
19
21
  confirm: {
@@ -23,6 +25,8 @@ export const config = (_sys: ZovaSys) => {
23
25
  default: {
24
26
  maxWidth: 360,
25
27
  closeOnBackdrop: true,
28
+ closeOnEscape: true,
29
+ showCloseButton: false,
26
30
  },
27
31
  },
28
32
  prompt: {
@@ -32,6 +36,17 @@ export const config = (_sys: ZovaSys) => {
32
36
  default: {
33
37
  maxWidth: 360,
34
38
  closeOnBackdrop: true,
39
+ closeOnEscape: true,
40
+ showCloseButton: false,
41
+ },
42
+ },
43
+ dialog: {
44
+ default: {
45
+ maxWidth: 640,
46
+ maxHeight: 'calc(100vh - 2rem)',
47
+ closeOnBackdrop: false,
48
+ closeOnEscape: true,
49
+ showCloseButton: true,
35
50
  },
36
51
  },
37
52
  },
@@ -6,7 +6,9 @@ import {
6
6
  IModalAlertOptions,
7
7
  IModalConfirmOptions,
8
8
  IModalDialogOptions,
9
+ IModalDialogRenderOptions,
9
10
  IModalItem,
11
+ IModalMessageOptions,
10
12
  IModalPromptOptions,
11
13
  } from '../types/appModal.js';
12
14
 
@@ -21,7 +23,7 @@ export class ServiceAppModal extends BeanBase {
21
23
  return ++this.modalItemIdCounter;
22
24
  }
23
25
 
24
- public alert(options?: IModalAlertOptions, dialogOptions?: IModalDialogOptions) {
26
+ public alert(options?: IModalAlertOptions, dialogOptions?: IModalMessageOptions) {
25
27
  const id = this.newModalItemId();
26
28
  const modalItem: IModalItem = {
27
29
  id,
@@ -35,7 +37,7 @@ export class ServiceAppModal extends BeanBase {
35
37
 
36
38
  public confirm(
37
39
  options?: IModalConfirmOptions,
38
- dialogOptions?: IModalDialogOptions,
40
+ dialogOptions?: IModalMessageOptions,
39
41
  ): Promise<boolean> {
40
42
  return new Promise(resolve => {
41
43
  const id = this.newModalItemId();
@@ -56,7 +58,7 @@ export class ServiceAppModal extends BeanBase {
56
58
 
57
59
  public prompt(
58
60
  options?: IModalPromptOptions,
59
- dialogOptions?: IModalDialogOptions,
61
+ dialogOptions?: IModalMessageOptions,
60
62
  ): Promise<string | undefined> {
61
63
  return new Promise(resolve => {
62
64
  const id = this.newModalItemId();
@@ -75,10 +77,26 @@ export class ServiceAppModal extends BeanBase {
75
77
  });
76
78
  }
77
79
 
80
+ public dialog(options?: IModalDialogRenderOptions, dialogOptions?: IModalDialogOptions) {
81
+ const id = this.newModalItemId();
82
+ const modalItem: IModalItem = {
83
+ id,
84
+ type: 'dialog',
85
+ options,
86
+ dialogOptions,
87
+ };
88
+ this.modalItems.push(modalItem);
89
+ return new AppModalItem(this, modalItem);
90
+ }
91
+
78
92
  public close(id: number) {
79
- const [index] = this.findModalItem(id);
80
- if (index === -1) return;
93
+ const [index, modalItem] = this.findModalItem(id);
94
+ if (index === -1 || !modalItem) return;
81
95
  this.modalItems.splice(index, 1);
96
+ if (modalItem.type === 'dialog') {
97
+ const options = modalItem.options as IModalDialogRenderOptions | undefined;
98
+ options?.onClose?.();
99
+ }
82
100
  }
83
101
 
84
102
  protected findModalItem(id: number): [number, IModalItem | undefined] {
@@ -1,13 +1,35 @@
1
+ import type { VNode } from 'vue';
1
2
  import type { IIconRecord } from 'zova-module-a-icon';
2
3
 
3
4
  import type { ServiceAppModal } from '../service/appModal.js';
4
5
 
5
- export type ModalType = 'alert' | 'confirm' | 'prompt';
6
+ export type ModalType = 'alert' | 'confirm' | 'prompt' | 'dialog';
6
7
  export type AlertType = 'success' | 'info' | 'warning' | 'error';
7
8
 
8
- export interface IModalDialogOptions {
9
+ export interface IModalBaseOptions {
9
10
  maxWidth?: number | string;
11
+ maxHeight?: number | string;
10
12
  closeOnBackdrop?: boolean;
13
+ closeOnEscape?: boolean;
14
+ }
15
+
16
+ export interface IModalDialogOptions extends IModalBaseOptions {
17
+ showCloseButton?: boolean;
18
+ }
19
+
20
+ export interface IModalMessageOptions extends IModalBaseOptions {}
21
+
22
+ export interface IModalDialogRenderContext {
23
+ id: number;
24
+ close: () => void;
25
+ }
26
+
27
+ export interface IModalDialogRenderOptions {
28
+ icon?: keyof IIconRecord;
29
+ title?: string;
30
+ slotDefault?: (dialog: IModalDialogRenderContext) => VNode;
31
+ slotActions?: (dialog: IModalDialogRenderContext) => VNode;
32
+ onClose?: () => void;
11
33
  }
12
34
 
13
35
  export interface IModalAlertOptions {
@@ -41,8 +63,12 @@ export interface IModalPromptOptionsInner extends IModalPromptOptions {
41
63
  export interface IModalItem {
42
64
  id: number;
43
65
  type: ModalType;
44
- options?: IModalAlertOptions | IModalConfirmOptionsInner | IModalPromptOptionsInner;
45
- dialogOptions?: IModalDialogOptions;
66
+ options?:
67
+ | IModalAlertOptions
68
+ | IModalConfirmOptionsInner
69
+ | IModalPromptOptionsInner
70
+ | IModalDialogRenderOptions;
71
+ dialogOptions?: IModalDialogOptions | IModalMessageOptions;
46
72
  }
47
73
 
48
74
  declare module 'zova' {
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "dependencies": {},
37
37
  "devDependencies": {
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "dependencies": {},
37
37
  "devDependencies": {
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "dependencies": {
37
37
  "@zhennann/currency": "^2.0.4"
@@ -31,7 +31,7 @@
31
31
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
32
32
  "prepublishOnly": "npm run tsc:publish",
33
33
  "prepack": "clean-package",
34
- "postpack": "clean-package restore && npm run clean"
34
+ "postpack": "clean-package restore"
35
35
  },
36
36
  "devDependencies": {
37
37
  "clean-package": "^2.2.0",
@@ -30,7 +30,7 @@
30
30
  "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
31
  "prepublishOnly": "npm run tsc:publish",
32
32
  "prepack": "clean-package",
33
- "postpack": "clean-package restore && npm run clean"
33
+ "postpack": "clean-package restore"
34
34
  },
35
35
  "dependencies": {},
36
36
  "devDependencies": {
@@ -48,5 +48,10 @@
48
48
  "exports.\\..import"
49
49
  ]
50
50
  },
51
- "title": "basic-details"
51
+ "title": "basic-details",
52
+ "zovaModule": {
53
+ "dependencies": {
54
+ "basic-app": "5.0.0"
55
+ }
56
+ }
52
57
  }