cabloy 5.1.134 → 5.1.136

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 (185) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/skills/cabloy-backend-scaffold/SKILL.md +9 -0
  3. package/.claude/skills/cabloy-zova-source-reading/SKILL.md +24 -1
  4. package/.claude/skills/cabloy-zova-source-reading/references/analysis-modes.md +12 -0
  5. package/.claude/skills/cabloy-zova-source-reading/references/core-reading-paths.md +28 -0
  6. package/.github/workflows/playwright-e2e.yml +2 -2
  7. package/.github/workflows/vona-test-pg.yml +1 -1
  8. package/.github/workflows/vona-test-sqlite3.yml +1 -1
  9. package/CHANGELOG.md +38 -0
  10. package/CLAUDE.md +1 -0
  11. package/cabloy-docs/.vitepress/config.mjs +7 -0
  12. package/cabloy-docs/backend/markdown-guide.md +189 -0
  13. package/cabloy-docs/frontend/component-guide.md +6 -0
  14. package/cabloy-docs/frontend/css-in-js-guide.md +6 -0
  15. package/cabloy-docs/frontend/markdown-guide.md +258 -0
  16. package/cabloy-docs/frontend/page-guide.md +48 -0
  17. package/cabloy-docs/frontend/page-params-guide.md +4 -2
  18. package/cabloy-docs/frontend/page-route-guide.md +2 -2
  19. package/cabloy-docs/frontend/zova-router-under-the-hood.md +2 -0
  20. package/cabloy-docs/frontend/zova-source-reading-map.md +53 -9
  21. package/cabloy-docs/fullstack/a-pay-payment-suite.md +333 -0
  22. package/cabloy-docs/fullstack/payment-sandbox-configuration.md +285 -0
  23. package/e2e/specs/a-commerce/commerce.spec.ts +503 -47
  24. package/e2e/specs/cabloy-basic/basic.spec.ts +30 -0
  25. package/package.json +1 -1
  26. package/vona/env/.env +2 -0
  27. package/vona/packages-cli/cli/package.json +1 -1
  28. package/vona/packages-cli/cli-set-api/cli/templates/init/error/boilerplate/config/errors.ts +6 -1
  29. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudBasic/boilerplate/src/entity/{{resourceName}}.tsx_ +2 -0
  30. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/boilerplate/src/entity/{{resourceName}}.tsx_ +2 -0
  31. package/vona/packages-cli/cli-set-api/package.json +1 -1
  32. package/vona/packages-utils/localeutil/package.json +1 -1
  33. package/vona/packages-utils/localeutil/src/util.ts +1 -1
  34. package/vona/packages-vona/vona/package.json +1 -1
  35. package/vona/packages-vona/vona-core/package.json +1 -1
  36. package/vona/packages-vona/vona-mock/package.json +1 -1
  37. package/vona/patches/{zova-core@5.1.82.patch → zova-core@5.1.84.patch} +2 -2
  38. package/vona/pnpm-lock.yaml +826 -270
  39. package/vona/pnpm-workspace.yaml +1 -1
  40. package/vona/src/suite/a-commerce/modules/commerce-catalog/package.json +1 -1
  41. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +99 -1
  42. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.index.ts +1 -0
  43. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.version.ts +19 -0
  44. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +3 -0
  45. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +3 -0
  46. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/controller/product.ts +3 -3
  47. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productContentUpdate.tsx +14 -0
  48. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productContentView.tsx +19 -0
  49. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productCreate.tsx +48 -3
  50. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productPublicDetail.tsx +15 -0
  51. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productUpdate.tsx +48 -3
  52. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productView.tsx +52 -3
  53. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/productContent.tsx +36 -0
  54. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/model/product.ts +6 -0
  55. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/model/productContent.ts +22 -0
  56. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/product.ts +82 -6
  57. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/productContent.test.ts +271 -0
  58. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/productPresentation.test.ts +81 -2
  59. package/vona/src/suite/a-commerce/modules/commerce-payment/package.json +4 -1
  60. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/payScene.commerceOrder.ts +32 -15
  61. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +8 -2
  62. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/.metadata/index.ts +8 -2
  63. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/.metadata/locales.ts +18 -0
  64. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/bean/ssrMenu.home.ts +3 -1
  65. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/config/locale/en-us.ts +3 -0
  66. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/config/locale/zh-cn.ts +3 -0
  67. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/index.ts +1 -0
  68. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/checkout.ts +13 -2
  69. package/vona/src/suite/a-commerce/modules/commerce-trade/src/lib/providerReference.ts +18 -0
  70. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +43 -8
  71. package/vona/src/suite/a-commerce/modules/commerce-trade/test/paymentOutcome.test.ts +74 -0
  72. package/vona/src/suite/a-commerce/modules/commerce-trade/test/providerReference.test.ts +33 -0
  73. package/vona/src/suite/a-commerce/modules/commerce-trade/test/refundLifecycle.test.ts +73 -0
  74. package/vona/src/suite/a-commerce/modules/commerce-trade/test/reservationExpiry.test.ts +2 -0
  75. package/vona/src/suite/a-home/modules/home-user/src/.metadata/index.ts +30 -0
  76. package/vona/src/suite/a-home/modules/home-user/src/bean/meta.version.ts +7 -2
  77. package/vona/src/suite/a-home/modules/home-user/src/config/locale/en-us.ts +4 -1
  78. package/vona/src/suite/a-home/modules/home-user/src/config/locale/zh-cn.ts +4 -1
  79. package/vona/src/suite/a-home/modules/home-user/src/config/roles.ts +4 -4
  80. package/vona/src/suite/a-home/modules/home-user/src/entity/role.ts +2 -2
  81. package/vona/src/suite/a-home/modules/home-user/src/entity/user.ts +8 -1
  82. package/vona/src/suite/a-home/modules/home-user/src/service/userAdapter.ts +6 -2
  83. package/vona/src/suite/a-home/modules/home-user/test/passportTest.test.ts +1 -0
  84. package/vona/src/suite/a-home/modules/home-user/test/role.test.ts +4 -4
  85. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/package.json +64 -0
  86. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/.metadata/index.ts +54 -0
  87. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/.metadata/this.ts +2 -0
  88. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/bean/bean.markdown.ts +137 -0
  89. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/index.ts +1 -0
  90. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/tsconfig.build.json +11 -0
  91. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/tsconfig.json +7 -0
  92. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  93. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/bean/bean.ssr.ts +17 -0
  94. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/lib/beanSsrSiteBase.ts +11 -3
  95. package/vona/src/suite-vendor/a-cabloy/package.json +2 -1
  96. package/vona/src/suite-vendor/a-cabloy/tsconfig.json +3 -0
  97. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  98. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.version.ts +1 -0
  99. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/providerOperation.tsx +8 -1
  100. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/lib/index.ts +1 -0
  101. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/lib/providerOperationFailure.ts +8 -0
  102. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/providerOperation.ts +187 -29
  103. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts +4 -0
  104. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  105. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +1 -1
  106. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/bean/payProvider.paypal.ts +0 -6
  107. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/index.ts +1 -0
  108. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +2 -1
  109. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/bean/payProvider.stripe.ts +458 -22
  110. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/index.ts +1 -0
  111. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/lib/stripeGateway.ts +85 -0
  112. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/types/index.ts +2 -0
  113. package/vona/src/suite-vendor/a-pay/package.json +5 -5
  114. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  115. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  116. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +1 -0
  117. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  118. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/bean.passport.ts +14 -0
  119. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/guard.passport.ts +4 -0
  120. package/vona/src/suite-vendor/a-vona/modules/a-user/src/types/role.ts +3 -2
  121. package/vona/src/suite-vendor/a-vona/modules/a-user/src/types/user.ts +4 -0
  122. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  123. package/zova/packages-utils/logger/package.json +2 -2
  124. package/zova/packages-utils/zova-jsx/package.json +2 -2
  125. package/zova/packages-zova/zova/package.json +3 -3
  126. package/zova/packages-zova/zova-core/package.json +3 -3
  127. package/zova/packages-zova/zova-core/src/core/sys/resource.ts +1 -1
  128. package/zova/packages-zova/zova-core/src/core/sys/util.ts +8 -0
  129. package/zova/pnpm-lock.yaml +570 -11
  130. package/zova/src/front/config/config/config.cabloyCommerce.ts +0 -6
  131. package/zova/src/suite/a-commerce/modules/commerce-catalog/package.json +3 -1
  132. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/schemas.ts +236 -36
  133. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/types.ts +4962 -2402
  134. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +1 -0
  135. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +1 -0
  136. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/page/product/controller.tsx +8 -3
  137. package/zova/src/suite/a-commerce/modules/commerce-member/src/.metadata/index.ts +6 -7
  138. package/zova/src/suite/a-commerce/modules/commerce-member/src/page/address/controller.tsx +1 -3
  139. package/zova/src/suite/a-commerce/modules/commerce-member/src/routes.ts +2 -3
  140. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +13 -20
  141. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/cart/controller.tsx +3 -9
  142. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx +9 -11
  143. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/order/controller.tsx +0 -1
  144. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/orders/controller.tsx +6 -4
  145. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +78 -17
  146. package/zova/src/suite/a-commerce/modules/commerce-trade/src/routes.ts +10 -13
  147. package/zova/src/suite/a-home/modules/home-api/mock/passport.fake.ts +3 -3
  148. package/zova/src/suite/a-home/modules/home-api/src/.metadata/index.ts +31 -1
  149. package/zova/src/suite/a-home/modules/home-api/src/api/homeBaseSiteCatalog.ts +24 -0
  150. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/schemas.ts +329 -17
  151. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/types.ts +5866 -1829
  152. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/homeBaseSiteCatalog.ts +13 -0
  153. package/zova/src/suite/a-home/modules/home-base/src/component/page/controller.tsx +1 -0
  154. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.header.tsx +0 -1
  155. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/detail.ts +1 -0
  156. package/zova/src/suite/cabloy-basic/modules/basic-markdown/package.json +61 -0
  157. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/component/formFieldMarkdown.ts +36 -0
  158. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/component/markdownHtml.ts +36 -0
  159. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/index.ts +147 -0
  160. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/this.ts +2 -0
  161. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/controller.tsx +111 -0
  162. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/render.tsx +40 -0
  163. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/style.ts +13 -0
  164. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/markdownHtml/controller.tsx +17 -0
  165. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/markdownHtml/render.tsx +9 -0
  166. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/markdownHtml/style.ts +13 -0
  167. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/index.ts +1 -0
  168. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/lib/richTextContentStyle.ts +142 -0
  169. package/zova/src/suite/cabloy-basic/modules/basic-markdown/tsconfig.build.json +13 -0
  170. package/zova/src/suite/cabloy-basic/modules/basic-markdown/tsconfig.json +5 -0
  171. package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx +25 -3
  172. package/zova/src/suite/cabloy-basic/modules/basic-page/src/types/page.ts +1 -0
  173. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/types/pageEntry.ts +1 -0
  174. package/zova/src/suite/cabloy-basic/package.json +1 -0
  175. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  176. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +7 -0
  177. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  178. package/zova/src/suite-vendor/a-zova/modules/a-logger/package.json +2 -2
  179. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
  180. package/zova/src/suite-vendor/a-zova/modules/a-router/src/bean/sys.router.ts +3 -2
  181. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  182. package/zova/src/suite-vendor/a-zova/modules/a-ssr/test/lib/ssrProfile.test.ts +88 -0
  183. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  184. package/zova/src/suite-vendor/a-zova/package.json +5 -5
  185. package/.claude/scheduled_tasks.lock +0 -1
@@ -0,0 +1,13 @@
1
+ import type { IApiSchemaOptions } from 'zova-module-a-api';
2
+
3
+ import { BeanBase } from 'zova';
4
+ import { ApiSchema } from 'zova-module-a-api';
5
+
6
+ import { ApiApiHomeBaseSiteCatalogselectPath } from '../api/homeBaseSiteCatalog.js';
7
+
8
+ @ApiSchema()
9
+ export class ApiSchemaHomeBaseSiteCatalog extends BeanBase {
10
+ select(options?: IApiSchemaOptions) {
11
+ return this.$sdk.createApiSchemas(ApiApiHomeBaseSiteCatalogselectPath, 'get', options);
12
+ }
13
+ }
@@ -12,6 +12,7 @@ export class ControllerPage extends BeanControllerBase {
12
12
  protected async __init__() {
13
13
  this.cPage = this.$style({
14
14
  padding: '16px',
15
+ height: '100%',
15
16
  });
16
17
  }
17
18
 
@@ -29,7 +29,6 @@ export class RenderHeader extends BeanRenderBase {
29
29
  <ul class="menu menu-horizontal">
30
30
  {this.$$r.$$renderLocale.render()}
31
31
  {this.$$r.$$renderTheme.renderThemeDark()}
32
- {this.$ssr.profileOptions.useCookie && this.$$r.$$renderTheme.renderThemeName()}
33
32
  </ul>
34
33
  </div>
35
34
  </div>
@@ -1,6 +1,7 @@
1
1
  import { IDetailScope } from 'zova-module-a-openapi';
2
2
  import 'zova-module-a-form';
3
3
  import 'zova-module-a-openapi';
4
+
4
5
  import type { ServiceDetail } from '../service/detail.jsx';
5
6
 
6
7
  declare module 'zova-module-a-openapi' {
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "zova-module-basic-markdown",
3
+ "version": "5.0.0",
4
+ "description": "",
5
+ "keywords": [
6
+ "Zova Module"
7
+ ],
8
+ "author": "",
9
+ "files": [
10
+ "mock",
11
+ "dist",
12
+ "src",
13
+ "icons",
14
+ "assets"
15
+ ],
16
+ "type": "module",
17
+ "exports": {
18
+ ".": {
19
+ "types": [
20
+ "./src/index.ts",
21
+ "./dist/index.d.ts"
22
+ ],
23
+ "import": "./src/index.ts",
24
+ "default": "./dist/index.js"
25
+ },
26
+ "./*": "./*"
27
+ },
28
+ "scripts": {
29
+ "clean": "rimraf dist tsconfig.build.tsbuildinfo",
30
+ "tsc:publish": "npm run clean && node ../../../../../packages-cli/cli/src/bin/zova.ts :bin:buildModule --sourcemap && tsc -p tsconfig.build.json",
31
+ "prepublishOnly": "npm run tsc:publish",
32
+ "prepack": "clean-package",
33
+ "postpack": "clean-package restore"
34
+ },
35
+ "dependencies": {
36
+ "@tiptap/core": "^3.30.0",
37
+ "@tiptap/extension-highlight": "^3.30.0",
38
+ "@tiptap/extension-image": "^3.30.0",
39
+ "@tiptap/extension-list": "^3.30.0",
40
+ "@tiptap/extension-table": "^3.30.0",
41
+ "@tiptap/markdown": "^3.30.0",
42
+ "@tiptap/starter-kit": "^3.30.0",
43
+ "@tiptap/vue-3": "^3.30.0"
44
+ },
45
+ "devDependencies": {
46
+ "clean-package": "^2.2.0",
47
+ "rimraf": "^6.1.3"
48
+ },
49
+ "clean-package": {
50
+ "indent": 2,
51
+ "replace": {
52
+ "exports.\\..types": "./dist/index.d.ts"
53
+ },
54
+ "remove": [
55
+ "clean-package",
56
+ "devDependencies",
57
+ "exports.\\..import"
58
+ ]
59
+ },
60
+ "title": "basic-markdown"
61
+ }
@@ -0,0 +1,36 @@
1
+ import type { TypeControllerInnerProps } from 'zova';
2
+
3
+ import { defineComponent } from 'vue';
4
+ import { prepareComponentOptions, useController } from 'zova';
5
+
6
+ import type { ControllerFormFieldMarkdownProps } from '../../component/formFieldMarkdown/controller.jsx';
7
+
8
+ import { ControllerFormFieldMarkdown } from '../../component/formFieldMarkdown/controller.jsx';
9
+ import { RenderFormFieldMarkdown } from '../../component/formFieldMarkdown/render.jsx';
10
+ import { StyleFormFieldMarkdown } from '../../component/formFieldMarkdown/style.js';
11
+ export type ZFormFieldMarkdownProps = {
12
+ controllerRef?: (ref: ControllerFormFieldMarkdown) => void;
13
+ } & ControllerFormFieldMarkdownProps;
14
+
15
+ type ControllerInnerProps = TypeControllerInnerProps<
16
+ ControllerFormFieldMarkdownProps,
17
+ keyof typeof ControllerFormFieldMarkdown.$propsDefault
18
+ >;
19
+ declare module 'zova-module-basic-markdown' {
20
+ export interface ControllerFormFieldMarkdown {
21
+ $props: ControllerInnerProps;
22
+ }
23
+ }
24
+ declare module 'zova-module-basic-markdown' {
25
+ export interface StyleFormFieldMarkdown extends ControllerFormFieldMarkdown {}
26
+ export interface RenderFormFieldMarkdown extends StyleFormFieldMarkdown {}
27
+ }
28
+ export const ZFormFieldMarkdown = defineComponent((_props: ZFormFieldMarkdownProps) => {
29
+ useController(ControllerFormFieldMarkdown, RenderFormFieldMarkdown, StyleFormFieldMarkdown);
30
+ return () => {};
31
+ }, prepareComponentOptions(ControllerFormFieldMarkdown.$componentOptions));
32
+ declare module 'zova-module-a-bean' {
33
+ export interface IVonaComponentRecord {
34
+ 'basic-markdown:formFieldMarkdown': ControllerFormFieldMarkdownProps;
35
+ }
36
+ }
@@ -0,0 +1,36 @@
1
+ import type { TypeControllerInnerProps } from 'zova';
2
+
3
+ import { defineComponent } from 'vue';
4
+ import { prepareComponentOptions, useController } from 'zova';
5
+
6
+ import type { ControllerMarkdownHtmlProps } from '../../component/markdownHtml/controller.jsx';
7
+
8
+ import { ControllerMarkdownHtml } from '../../component/markdownHtml/controller.jsx';
9
+ import { RenderMarkdownHtml } from '../../component/markdownHtml/render.jsx';
10
+ import { StyleMarkdownHtml } from '../../component/markdownHtml/style.js';
11
+ export type ZMarkdownHtmlProps = {
12
+ controllerRef?: (ref: ControllerMarkdownHtml) => void;
13
+ } & ControllerMarkdownHtmlProps;
14
+
15
+ type ControllerInnerProps = TypeControllerInnerProps<
16
+ ControllerMarkdownHtmlProps,
17
+ keyof typeof ControllerMarkdownHtml.$propsDefault
18
+ >;
19
+ declare module 'zova-module-basic-markdown' {
20
+ export interface ControllerMarkdownHtml {
21
+ $props: ControllerInnerProps;
22
+ }
23
+ }
24
+ declare module 'zova-module-basic-markdown' {
25
+ export interface StyleMarkdownHtml extends ControllerMarkdownHtml {}
26
+ export interface RenderMarkdownHtml extends StyleMarkdownHtml {}
27
+ }
28
+ export const ZMarkdownHtml = defineComponent((_props: ZMarkdownHtmlProps) => {
29
+ useController(ControllerMarkdownHtml, RenderMarkdownHtml, StyleMarkdownHtml);
30
+ return () => {};
31
+ }, prepareComponentOptions(ControllerMarkdownHtml.$componentOptions));
32
+ declare module 'zova-module-a-bean' {
33
+ export interface IVonaComponentRecord {
34
+ 'basic-markdown:markdownHtml': ControllerMarkdownHtmlProps;
35
+ }
36
+ }
@@ -0,0 +1,147 @@
1
+ // eslint-disable
2
+ /** controller: begin */
3
+ export * from '../component/formFieldMarkdown/controller.jsx';
4
+ export * from '../component/markdownHtml/controller.jsx';
5
+
6
+ import 'zova';
7
+ declare module 'zova' {
8
+
9
+
10
+ }
11
+ declare module 'zova-module-basic-markdown' {
12
+
13
+ export interface ControllerFormFieldMarkdown {
14
+ /** @internal */
15
+ get scope(): ScopeModuleBasicMarkdown;
16
+ }
17
+
18
+ export interface ControllerMarkdownHtml {
19
+ /** @internal */
20
+ get scope(): ScopeModuleBasicMarkdown;
21
+ }
22
+ }
23
+ /** controller: end */
24
+ /** controller: begin */
25
+ import { ControllerFormFieldMarkdown } from '../component/formFieldMarkdown/controller.jsx';
26
+ import { ControllerMarkdownHtml } from '../component/markdownHtml/controller.jsx';
27
+ import 'zova';
28
+ declare module 'zova' {
29
+ export interface IBeanRecordLocal {
30
+ 'basic-markdown.controller.formFieldMarkdown': ControllerFormFieldMarkdown;
31
+ 'basic-markdown.controller.markdownHtml': ControllerMarkdownHtml;
32
+ }
33
+ }
34
+ /** controller: end */
35
+
36
+ /** components: begin */
37
+ export * from './component/formFieldMarkdown.js';
38
+ import { ZFormFieldMarkdown } from './component/formFieldMarkdown.js';
39
+ export * from './component/markdownHtml.js';
40
+ import { ZMarkdownHtml } from './component/markdownHtml.js';
41
+ export const components = {
42
+ 'formFieldMarkdown': ZFormFieldMarkdown,
43
+ 'markdownHtml': ZMarkdownHtml,
44
+ };
45
+ import 'zova';
46
+ declare module 'zova' {
47
+ export interface IComponentRecord {
48
+ 'basic-markdown:formFieldMarkdown': ControllerFormFieldMarkdown;
49
+ 'basic-markdown:markdownHtml': ControllerMarkdownHtml;
50
+ }
51
+ export interface IZovaComponentRecord {
52
+ 'basic-markdown:formFieldMarkdown': typeof ZFormFieldMarkdown;
53
+ 'basic-markdown:markdownHtml': typeof ZMarkdownHtml;
54
+ }
55
+ }
56
+ /** components: end */
57
+ /** render: begin */
58
+ export * from '../component/formFieldMarkdown/render.jsx';
59
+ export * from '../component/markdownHtml/render.jsx';
60
+
61
+ import 'zova';
62
+ declare module 'zova' {
63
+
64
+
65
+ }
66
+ declare module 'zova-module-basic-markdown' {
67
+
68
+ export interface RenderFormFieldMarkdown {
69
+ /** @internal */
70
+ get scope(): ScopeModuleBasicMarkdown;
71
+ }
72
+
73
+ export interface RenderMarkdownHtml {
74
+ /** @internal */
75
+ get scope(): ScopeModuleBasicMarkdown;
76
+ }
77
+ }
78
+ /** render: end */
79
+ /** render: begin */
80
+ import { RenderFormFieldMarkdown } from '../component/formFieldMarkdown/render.jsx';
81
+ import { RenderMarkdownHtml } from '../component/markdownHtml/render.jsx';
82
+ import 'zova';
83
+ declare module 'zova' {
84
+ export interface IBeanRecordLocal {
85
+ 'basic-markdown.render.formFieldMarkdown': RenderFormFieldMarkdown;
86
+ 'basic-markdown.render.markdownHtml': RenderMarkdownHtml;
87
+ }
88
+ }
89
+ /** render: end */
90
+ /** style: begin */
91
+ export * from '../component/formFieldMarkdown/style.js';
92
+ export * from '../component/markdownHtml/style.js';
93
+
94
+ import 'zova';
95
+ declare module 'zova' {
96
+
97
+
98
+ }
99
+ declare module 'zova-module-basic-markdown' {
100
+
101
+ export interface StyleFormFieldMarkdown {
102
+ /** @internal */
103
+ get scope(): ScopeModuleBasicMarkdown;
104
+ }
105
+
106
+ export interface StyleMarkdownHtml {
107
+ /** @internal */
108
+ get scope(): ScopeModuleBasicMarkdown;
109
+ }
110
+ }
111
+ /** style: end */
112
+ /** style: begin */
113
+ import { StyleFormFieldMarkdown } from '../component/formFieldMarkdown/style.js';
114
+ import { StyleMarkdownHtml } from '../component/markdownHtml/style.js';
115
+ import 'zova';
116
+ declare module 'zova' {
117
+ export interface IBeanRecordLocal {
118
+ 'basic-markdown.style.formFieldMarkdown': StyleFormFieldMarkdown;
119
+ 'basic-markdown.style.markdownHtml': StyleMarkdownHtml;
120
+ }
121
+ }
122
+ /** style: end */
123
+ /** scope: begin */
124
+ import { BeanScopeBase, type BeanScopeUtil } from 'zova';
125
+ import { Scope } from 'zova-module-a-bean';
126
+
127
+ @Scope()
128
+ export class ScopeModuleBasicMarkdown extends BeanScopeBase {}
129
+
130
+ export interface ScopeModuleBasicMarkdown {
131
+ util: BeanScopeUtil;
132
+ }
133
+
134
+ import 'zova';
135
+ declare module 'zova' {
136
+ export interface IBeanScopeRecord {
137
+ 'basic-markdown': ScopeModuleBasicMarkdown;
138
+ }
139
+
140
+
141
+
142
+
143
+
144
+
145
+ }
146
+
147
+ /** scope: end */
@@ -0,0 +1,2 @@
1
+ export const __ThisModule__ = 'basic-markdown';
2
+ export { ScopeModuleBasicMarkdown as ScopeModule } from './index.js';
@@ -0,0 +1,111 @@
1
+ import type { IComponentOptions } from 'zova';
2
+ import type {
3
+ ControllerFormField,
4
+ IFormFieldComponentOptions,
5
+ IFormFieldRenderContextPropsBucket,
6
+ } from 'zova-module-a-form';
7
+ import type { IResourceFormFieldOptionsBase } from 'zova-module-a-openapi';
8
+
9
+ import { Highlight } from '@tiptap/extension-highlight';
10
+ import { Image } from '@tiptap/extension-image';
11
+ import { TaskItem, TaskList } from '@tiptap/extension-list';
12
+ import { TableKit } from '@tiptap/extension-table';
13
+ import { Markdown } from '@tiptap/markdown';
14
+ import StarterKit from '@tiptap/starter-kit';
15
+ import { Editor } from '@tiptap/vue-3';
16
+ import { BeanControllerBase } from 'zova';
17
+ import { Controller } from 'zova-module-a-bean';
18
+
19
+ declare module 'zova-module-a-openapi' {
20
+ export interface IResourceFormFieldRecord {
21
+ 'basic-markdown:formFieldMarkdown'?: IResourceFormFieldMarkdownOptions;
22
+ }
23
+ }
24
+
25
+ export interface IResourceFormFieldMarkdownOptions extends IResourceFormFieldOptionsBase {}
26
+
27
+ export interface ControllerFormFieldMarkdownProps extends IFormFieldComponentOptions {
28
+ options?: IResourceFormFieldMarkdownOptions;
29
+ }
30
+
31
+ @Controller()
32
+ export class ControllerFormFieldMarkdown extends BeanControllerBase {
33
+ static $propsDefault = {};
34
+ static $componentOptions: IComponentOptions = { inheritAttrs: false, deepExtendDefault: true };
35
+
36
+ editor?: Editor;
37
+ value = '';
38
+ readonly = false;
39
+ private _syncing = false;
40
+ private _setValue?: (value: string, disableNotifyChanged?: boolean) => void;
41
+ private _handleBlur?: () => void;
42
+
43
+ protected async __init__() {
44
+ this.$controllerMounted(() => {
45
+ this.editor = new Editor({
46
+ extensions: [
47
+ Markdown,
48
+ StarterKit,
49
+ TaskList,
50
+ TaskItem.configure({ nested: true }),
51
+ Image,
52
+ TableKit,
53
+ Highlight,
54
+ ],
55
+ content: this.value,
56
+ contentType: 'markdown',
57
+ editable: !this.readonly,
58
+ editorProps: {
59
+ attributes: {
60
+ class: 'min-h-96 p-4 outline-none',
61
+ },
62
+ },
63
+ onUpdate: ({ editor }) => {
64
+ if (this._syncing) return;
65
+ this._setValue?.(editor.getMarkdown());
66
+ },
67
+ onBlur: () => {
68
+ this._handleBlur?.();
69
+ },
70
+ });
71
+ this.$watch(
72
+ () => this.value,
73
+ value => {
74
+ if (!this.editor || this.editor.getMarkdown() === value) return;
75
+ this._syncing = true;
76
+ this.editor.commands.setContent(value, { contentType: 'markdown' });
77
+ this._syncing = false;
78
+ },
79
+ );
80
+ this.$watch(
81
+ () => this.readonly,
82
+ readonly => {
83
+ this.editor?.setEditable(!readonly);
84
+ },
85
+ );
86
+ });
87
+ }
88
+
89
+ protected __dispose__() {
90
+ this.editor?.destroy();
91
+ }
92
+
93
+ public bindFormField(
94
+ propsBucket: IFormFieldRenderContextPropsBucket,
95
+ formField: ControllerFormField,
96
+ ) {
97
+ const value = propsBucket.value ?? '';
98
+ const readonly = propsBucket.readonly ?? false;
99
+ if (this.value !== value) this.value = value;
100
+ if (this.readonly !== readonly) this.readonly = readonly;
101
+ if (this._setValue && this._handleBlur) return;
102
+ this._setValue = (value, disableNotifyChanged) => {
103
+ if (this.readonly) return;
104
+ formField.setValue(value, disableNotifyChanged);
105
+ };
106
+ this._handleBlur = () => {
107
+ if (this.readonly) return;
108
+ formField.handleBlur();
109
+ };
110
+ }
111
+ }
@@ -0,0 +1,40 @@
1
+ import { EditorContent } from '@tiptap/vue-3';
2
+ import { BeanRenderBase, ClientOnly } from 'zova';
3
+ import { Render } from 'zova-module-a-bean';
4
+ import { ZFormField } from 'zova-module-a-form';
5
+
6
+ @Render()
7
+ export class RenderFormFieldMarkdown extends BeanRenderBase {
8
+ public render() {
9
+ return (
10
+ <ZFormField
11
+ {...this.$props}
12
+ slotDefault={({ propsBucket, props }, $$formField) => {
13
+ this.bindFormField(propsBucket, $$formField);
14
+ return (
15
+ <div class={props.class}>
16
+ <div
17
+ class={[
18
+ 'rounded-box border border-base-300 bg-base-100',
19
+ !$$formField.field.state.meta.isValid && 'border-error',
20
+ ]}
21
+ onClick={() => {
22
+ if (!this.readonly) {
23
+ this.editor?.commands.focus();
24
+ }
25
+ }}
26
+ >
27
+ <ClientOnly
28
+ v-slots={{
29
+ default: () => <EditorContent editor={this.editor} class={this.cMarkdown} />,
30
+ placeholder: () => <div class="min-h-96 p-4" aria-hidden="true"></div>,
31
+ }}
32
+ ></ClientOnly>
33
+ </div>
34
+ </div>
35
+ );
36
+ }}
37
+ ></ZFormField>
38
+ );
39
+ }
40
+ }
@@ -0,0 +1,13 @@
1
+ import { BeanStyleBase } from 'zova';
2
+ import { Style } from 'zova-module-a-bean';
3
+
4
+ import { richTextContentStyle } from '../../lib/richTextContentStyle.js';
5
+
6
+ @Style()
7
+ export class StyleFormFieldMarkdown extends BeanStyleBase {
8
+ cMarkdown: string;
9
+
10
+ protected async __init__() {
11
+ this.cMarkdown = this.$style(richTextContentStyle());
12
+ }
13
+ }
@@ -0,0 +1,17 @@
1
+ import type { IComponentOptions } from 'zova';
2
+
3
+ import { BeanControllerBase } from 'zova';
4
+ import { Controller } from 'zova-module-a-bean';
5
+
6
+ export interface ControllerMarkdownHtmlProps {
7
+ class?: string;
8
+ html?: string;
9
+ }
10
+
11
+ @Controller()
12
+ export class ControllerMarkdownHtml extends BeanControllerBase {
13
+ static $propsDefault = {};
14
+ static $componentOptions: IComponentOptions = { inheritAttrs: false, deepExtendDefault: true };
15
+
16
+ protected async __init__() {}
17
+ }
@@ -0,0 +1,9 @@
1
+ import { BeanRenderBase } from 'zova';
2
+ import { Render } from 'zova-module-a-bean';
3
+
4
+ @Render()
5
+ export class RenderMarkdownHtml extends BeanRenderBase {
6
+ public render() {
7
+ return <div class={[this.$props.class, this.cMarkdown]} innerHTML={this.$props.html}></div>;
8
+ }
9
+ }
@@ -0,0 +1,13 @@
1
+ import { BeanStyleBase } from 'zova';
2
+ import { Style } from 'zova-module-a-bean';
3
+
4
+ import { richTextContentStyle } from '../../lib/richTextContentStyle.js';
5
+
6
+ @Style()
7
+ export class StyleMarkdownHtml extends BeanStyleBase {
8
+ cMarkdown: string;
9
+
10
+ protected async __init__() {
11
+ this.cMarkdown = this.$style(richTextContentStyle());
12
+ }
13
+ }
@@ -0,0 +1 @@
1
+ export * from './.metadata/index.js';
@@ -0,0 +1,142 @@
1
+ import type { NestedCSSProperties } from 'typestyle/lib/types.js';
2
+
3
+ export function richTextContentStyle(): NestedCSSProperties {
4
+ return {
5
+ color: 'var(--color-base-content)',
6
+ lineHeight: 1.65,
7
+ overflowWrap: 'anywhere',
8
+ $nest: {
9
+ '& > :first-child, & > :first-child > :first-child': {
10
+ marginTop: 0,
11
+ },
12
+ '& > :last-child, & > :first-child > :last-child': {
13
+ marginBottom: 0,
14
+ },
15
+ '& h1, & h2, & h3, & h4, & h5, & h6': {
16
+ fontWeight: 700,
17
+ lineHeight: 1.25,
18
+ margin: '1.5rem 0 0.75rem',
19
+ },
20
+ '& h1': {
21
+ fontSize: '1.875rem',
22
+ },
23
+ '& h2': {
24
+ fontSize: '1.5rem',
25
+ },
26
+ '& h3': {
27
+ fontSize: '1.25rem',
28
+ },
29
+ '& h4': {
30
+ fontSize: '1.125rem',
31
+ },
32
+ '& h5, & h6': {
33
+ fontSize: '1rem',
34
+ },
35
+ '& p': {
36
+ margin: '0.75rem 0',
37
+ },
38
+ '& ul, & ol': {
39
+ margin: '0.75rem 0',
40
+ paddingInlineStart: '1.5rem',
41
+ },
42
+ '& ul': {
43
+ listStyleType: 'disc',
44
+ },
45
+ '& ol': {
46
+ listStyleType: 'decimal',
47
+ },
48
+ '& li + li': {
49
+ marginTop: '0.25rem',
50
+ },
51
+ '& li > ul, & li > ol': {
52
+ margin: '0.25rem 0',
53
+ },
54
+ '& ul[data-type="taskList"]': {
55
+ listStyle: 'none',
56
+ paddingInlineStart: 0,
57
+ },
58
+ '& ul[data-type="taskList"] li': {
59
+ alignItems: 'flex-start',
60
+ display: 'flex',
61
+ gap: '0.5rem',
62
+ },
63
+ '& ul[data-type="taskList"] li > label': {
64
+ lineHeight: 1.65,
65
+ paddingTop: '0.2rem',
66
+ },
67
+ '& ul[data-type="taskList"] li > div': {
68
+ flex: 1,
69
+ minWidth: 0,
70
+ },
71
+ '& ul[data-type="taskList"] li > div > p': {
72
+ margin: 0,
73
+ },
74
+ '& blockquote': {
75
+ borderInlineStart: '0.25rem solid var(--color-base-300)',
76
+ color: 'color-mix(in srgb, var(--color-base-content) 75%, transparent)',
77
+ margin: '1rem 0',
78
+ paddingInlineStart: '1rem',
79
+ },
80
+ '& code': {
81
+ background: 'var(--color-base-200)',
82
+ borderRadius: 'var(--radius-box)',
83
+ fontFamily: 'ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace',
84
+ fontSize: '0.875em',
85
+ padding: '0.125rem 0.25rem',
86
+ },
87
+ '& pre': {
88
+ background: 'var(--color-base-200)',
89
+ borderRadius: 'var(--radius-box)',
90
+ lineHeight: 1.5,
91
+ margin: '1rem 0',
92
+ overflowX: 'auto',
93
+ padding: '1rem',
94
+ },
95
+ '& pre code': {
96
+ background: 'transparent',
97
+ borderRadius: 0,
98
+ fontSize: '0.875rem',
99
+ padding: 0,
100
+ },
101
+ '& mark': {
102
+ background: 'color-mix(in srgb, var(--color-primary) 30%, transparent)',
103
+ borderRadius: '0.125rem',
104
+ color: 'inherit',
105
+ padding: '0.125rem 0.25rem',
106
+ },
107
+ '& a': {
108
+ color: 'var(--color-primary)',
109
+ textDecoration: 'underline',
110
+ textUnderlineOffset: '0.125rem',
111
+ },
112
+ '& img': {
113
+ borderRadius: 'var(--radius-box)',
114
+ display: 'block',
115
+ height: 'auto',
116
+ margin: '1rem 0',
117
+ maxWidth: '100%',
118
+ },
119
+ '& hr': {
120
+ border: 0,
121
+ borderTop: '1px solid var(--color-base-300)',
122
+ margin: '1.5rem 0',
123
+ },
124
+ '& table': {
125
+ borderCollapse: 'collapse',
126
+ margin: '1rem 0',
127
+ width: '100%',
128
+ },
129
+ '& th, & td': {
130
+ border: '1px solid var(--color-base-300)',
131
+ minWidth: '8rem',
132
+ padding: '0.5rem 0.75rem',
133
+ textAlign: 'start',
134
+ verticalAlign: 'top',
135
+ },
136
+ '& th': {
137
+ background: 'var(--color-base-200)',
138
+ fontWeight: 600,
139
+ },
140
+ },
141
+ };
142
+ }