cabloy 5.1.135 → 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 (183) 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 +31 -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/pnpm-lock.yaml +791 -398
  38. package/vona/src/suite/a-commerce/modules/commerce-catalog/package.json +1 -1
  39. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/.metadata/index.ts +99 -1
  40. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.index.ts +1 -0
  41. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/bean/meta.version.ts +19 -0
  42. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +3 -0
  43. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +3 -0
  44. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/controller/product.ts +3 -3
  45. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productContentUpdate.tsx +14 -0
  46. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productContentView.tsx +19 -0
  47. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productCreate.tsx +48 -3
  48. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productPublicDetail.tsx +15 -0
  49. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productUpdate.tsx +48 -3
  50. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/dto/productView.tsx +52 -3
  51. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/entity/productContent.tsx +36 -0
  52. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/model/product.ts +6 -0
  53. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/model/productContent.ts +22 -0
  54. package/vona/src/suite/a-commerce/modules/commerce-catalog/src/service/product.ts +82 -6
  55. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/productContent.test.ts +271 -0
  56. package/vona/src/suite/a-commerce/modules/commerce-catalog/test/productPresentation.test.ts +81 -2
  57. package/vona/src/suite/a-commerce/modules/commerce-payment/package.json +4 -1
  58. package/vona/src/suite/a-commerce/modules/commerce-payment/src/bean/payScene.commerceOrder.ts +32 -15
  59. package/vona/src/suite/a-commerce/modules/commerce-payment/test/paymentAttempt.test.ts +8 -2
  60. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/.metadata/index.ts +8 -2
  61. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/.metadata/locales.ts +18 -0
  62. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/bean/ssrMenu.home.ts +3 -1
  63. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/config/locale/en-us.ts +3 -0
  64. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/config/locale/zh-cn.ts +3 -0
  65. package/vona/src/suite/a-commerce/modules/commerce-siteweb/src/index.ts +1 -0
  66. package/vona/src/suite/a-commerce/modules/commerce-trade/src/controller/checkout.ts +13 -2
  67. package/vona/src/suite/a-commerce/modules/commerce-trade/src/lib/providerReference.ts +18 -0
  68. package/vona/src/suite/a-commerce/modules/commerce-trade/src/service/order.ts +43 -8
  69. package/vona/src/suite/a-commerce/modules/commerce-trade/test/paymentOutcome.test.ts +74 -0
  70. package/vona/src/suite/a-commerce/modules/commerce-trade/test/providerReference.test.ts +33 -0
  71. package/vona/src/suite/a-commerce/modules/commerce-trade/test/refundLifecycle.test.ts +73 -0
  72. package/vona/src/suite/a-commerce/modules/commerce-trade/test/reservationExpiry.test.ts +2 -0
  73. package/vona/src/suite/a-home/modules/home-user/src/.metadata/index.ts +30 -0
  74. package/vona/src/suite/a-home/modules/home-user/src/bean/meta.version.ts +7 -2
  75. package/vona/src/suite/a-home/modules/home-user/src/config/locale/en-us.ts +4 -1
  76. package/vona/src/suite/a-home/modules/home-user/src/config/locale/zh-cn.ts +4 -1
  77. package/vona/src/suite/a-home/modules/home-user/src/config/roles.ts +4 -4
  78. package/vona/src/suite/a-home/modules/home-user/src/entity/role.ts +2 -2
  79. package/vona/src/suite/a-home/modules/home-user/src/entity/user.ts +8 -1
  80. package/vona/src/suite/a-home/modules/home-user/src/service/userAdapter.ts +6 -2
  81. package/vona/src/suite/a-home/modules/home-user/test/passportTest.test.ts +1 -0
  82. package/vona/src/suite/a-home/modules/home-user/test/role.test.ts +4 -4
  83. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/package.json +64 -0
  84. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/.metadata/index.ts +54 -0
  85. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/.metadata/this.ts +2 -0
  86. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/bean/bean.markdown.ts +137 -0
  87. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/src/index.ts +1 -0
  88. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/tsconfig.build.json +11 -0
  89. package/vona/src/suite-vendor/a-cabloy/modules/a-markdown/tsconfig.json +7 -0
  90. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/package.json +1 -1
  91. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/bean/bean.ssr.ts +17 -0
  92. package/vona/src/suite-vendor/a-cabloy/modules/a-ssr/src/lib/beanSsrSiteBase.ts +11 -3
  93. package/vona/src/suite-vendor/a-cabloy/package.json +2 -1
  94. package/vona/src/suite-vendor/a-cabloy/tsconfig.json +3 -0
  95. package/vona/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  96. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/bean/meta.version.ts +1 -0
  97. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/entity/providerOperation.tsx +8 -1
  98. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/lib/index.ts +1 -0
  99. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/lib/providerOperationFailure.ts +8 -0
  100. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/service/providerOperation.ts +187 -29
  101. package/vona/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts +4 -0
  102. package/vona/src/suite-vendor/a-pay/modules/pay-mock/package.json +1 -1
  103. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/package.json +1 -1
  104. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/bean/payProvider.paypal.ts +0 -6
  105. package/vona/src/suite-vendor/a-pay/modules/pay-paypal/src/index.ts +1 -0
  106. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/package.json +2 -1
  107. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/bean/payProvider.stripe.ts +458 -22
  108. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/index.ts +1 -0
  109. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/lib/stripeGateway.ts +85 -0
  110. package/vona/src/suite-vendor/a-pay/modules/pay-stripe/src/types/index.ts +2 -0
  111. package/vona/src/suite-vendor/a-pay/package.json +5 -5
  112. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  113. package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
  114. package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +1 -0
  115. package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
  116. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/bean.passport.ts +14 -0
  117. package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/guard.passport.ts +4 -0
  118. package/vona/src/suite-vendor/a-vona/modules/a-user/src/types/role.ts +3 -2
  119. package/vona/src/suite-vendor/a-vona/modules/a-user/src/types/user.ts +4 -0
  120. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  121. package/zova/packages-utils/logger/package.json +2 -2
  122. package/zova/packages-utils/zova-jsx/package.json +2 -2
  123. package/zova/packages-zova/zova/package.json +3 -3
  124. package/zova/packages-zova/zova-core/package.json +3 -3
  125. package/zova/packages-zova/zova-core/src/core/sys/resource.ts +1 -1
  126. package/zova/packages-zova/zova-core/src/core/sys/util.ts +8 -0
  127. package/zova/pnpm-lock.yaml +573 -14
  128. package/zova/src/front/config/config/config.cabloyCommerce.ts +0 -6
  129. package/zova/src/suite/a-commerce/modules/commerce-catalog/package.json +3 -1
  130. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/schemas.ts +236 -36
  131. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/api/openapi/types.ts +4962 -2402
  132. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/en-us.ts +1 -0
  133. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/config/locale/zh-cn.ts +1 -0
  134. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/page/product/controller.tsx +8 -3
  135. package/zova/src/suite/a-commerce/modules/commerce-member/src/.metadata/index.ts +6 -7
  136. package/zova/src/suite/a-commerce/modules/commerce-member/src/page/address/controller.tsx +1 -3
  137. package/zova/src/suite/a-commerce/modules/commerce-member/src/routes.ts +2 -3
  138. package/zova/src/suite/a-commerce/modules/commerce-trade/src/.metadata/index.ts +13 -20
  139. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/cart/controller.tsx +3 -9
  140. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx +9 -11
  141. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/order/controller.tsx +0 -1
  142. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/orders/controller.tsx +6 -4
  143. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +78 -17
  144. package/zova/src/suite/a-commerce/modules/commerce-trade/src/routes.ts +10 -13
  145. package/zova/src/suite/a-home/modules/home-api/mock/passport.fake.ts +3 -3
  146. package/zova/src/suite/a-home/modules/home-api/src/.metadata/index.ts +31 -1
  147. package/zova/src/suite/a-home/modules/home-api/src/api/homeBaseSiteCatalog.ts +24 -0
  148. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/schemas.ts +329 -17
  149. package/zova/src/suite/a-home/modules/home-api/src/api/openapi/types.ts +5866 -1829
  150. package/zova/src/suite/a-home/modules/home-api/src/apiSchema/homeBaseSiteCatalog.ts +13 -0
  151. package/zova/src/suite/a-home/modules/home-base/src/component/page/controller.tsx +1 -0
  152. package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.header.tsx +0 -1
  153. package/zova/src/suite/cabloy-basic/modules/basic-details/src/types/detail.ts +1 -0
  154. package/zova/src/suite/cabloy-basic/modules/basic-markdown/package.json +61 -0
  155. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/component/formFieldMarkdown.ts +36 -0
  156. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/component/markdownHtml.ts +36 -0
  157. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/index.ts +147 -0
  158. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/.metadata/this.ts +2 -0
  159. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/controller.tsx +111 -0
  160. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/render.tsx +40 -0
  161. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/formFieldMarkdown/style.ts +13 -0
  162. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/markdownHtml/controller.tsx +17 -0
  163. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/markdownHtml/render.tsx +9 -0
  164. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/component/markdownHtml/style.ts +13 -0
  165. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/index.ts +1 -0
  166. package/zova/src/suite/cabloy-basic/modules/basic-markdown/src/lib/richTextContentStyle.ts +142 -0
  167. package/zova/src/suite/cabloy-basic/modules/basic-markdown/tsconfig.build.json +13 -0
  168. package/zova/src/suite/cabloy-basic/modules/basic-markdown/tsconfig.json +5 -0
  169. package/zova/src/suite/cabloy-basic/modules/basic-page/src/component/blockPage/controller.tsx +25 -3
  170. package/zova/src/suite/cabloy-basic/modules/basic-page/src/types/page.ts +1 -0
  171. package/zova/src/suite/cabloy-basic/modules/basic-pageentry/src/types/pageEntry.ts +1 -0
  172. package/zova/src/suite/cabloy-basic/package.json +1 -0
  173. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/package.json +1 -1
  174. package/zova/src/suite-vendor/a-cabloy/modules/rest-resource/src/model/resource.ts +7 -0
  175. package/zova/src/suite-vendor/a-cabloy/package.json +2 -2
  176. package/zova/src/suite-vendor/a-zova/modules/a-logger/package.json +2 -2
  177. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
  178. package/zova/src/suite-vendor/a-zova/modules/a-router/src/bean/sys.router.ts +3 -2
  179. package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
  180. package/zova/src/suite-vendor/a-zova/modules/a-ssr/test/lib/ssrProfile.test.ts +88 -0
  181. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +2 -2
  182. package/zova/src/suite-vendor/a-zova/package.json +5 -5
  183. 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
+ }