cabloy 5.1.174 → 5.1.176

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 (86) hide show
  1. package/.cabloy-version +1 -1
  2. package/.claude/scheduled_tasks.lock +1 -1
  3. package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +4 -0
  4. package/CHANGELOG.md +25 -0
  5. package/package.json +2 -2
  6. package/repo-docs/.vitepress/config.mjs +7 -0
  7. package/repo-docs/frontend/a-model-under-the-hood.md +11 -0
  8. package/repo-docs/frontend/behavior-guide.md +73 -0
  9. package/repo-docs/frontend/column-configuration-guide.md +254 -0
  10. package/repo-docs/frontend/component-guide.md +2 -29
  11. package/repo-docs/frontend/controller-boundary-guide.md +229 -0
  12. package/repo-docs/frontend/introduction.md +4 -0
  13. package/repo-docs/frontend/page-route-guide.md +6 -0
  14. package/repo-docs/frontend/resource-picker-guide.md +223 -0
  15. package/repo-docs/frontend/rest-resource-source-reading-map.md +37 -21
  16. package/repo-docs/frontend/rest-resource-under-the-hood.md +50 -30
  17. package/repo-docs/frontend/routed-dialog-guide.md +471 -0
  18. package/repo-docs/frontend/router-stack-guide.md +4 -2
  19. package/repo-docs/frontend/router-view-hosts-guide.md +3 -2
  20. package/repo-docs/frontend/ssr-client-only.md +6 -0
  21. package/repo-docs/frontend/table-guide.md +2 -1
  22. package/repo-docs/frontend/table-resource-crud-cookbook.md +1 -0
  23. package/repo-docs/frontend/use-state-data-best-practices.md +26 -0
  24. package/repo-docs/fullstack/a-pay-payment-suite.md +31 -17
  25. package/repo-e2e/specs/cabloy-basic.spec.ts +11 -0
  26. package/repo-e2e/specs/controller-boundary.spec.ts +1 -2
  27. package/test-results/.last-run.json +1 -1
  28. package/vona/packages-cli/cli/package.json +1 -1
  29. package/vona/packages-cli/cli-set-api/package.json +1 -1
  30. package/vona/packages-vona/vona/package.json +1 -1
  31. package/vona/packages-vona/vona-core/package.json +1 -1
  32. package/vona/packages-vona/vona-core/src/lib/utils/util.ts +1 -0
  33. package/vona/packages-vona/vona-mock/package.json +1 -1
  34. package/vona/src/suite/a-training/modules/training-student/test/student.test.ts +1 -1
  35. package/vona/src/suite-vendor/a-cabloy/modules/a-layoutprofile/package.json +1 -1
  36. package/vona/src/suite-vendor/a-cabloy/modules/a-layoutprofile/test/layoutprofile.test.ts +2 -3
  37. package/vona/src/suite-vendor/a-cabloy/package.json +2 -2
  38. package/vona/src/suite-vendor/a-vona/modules/a-core/package.json +1 -1
  39. package/vona/src/suite-vendor/a-vona/modules/a-executor/package.json +1 -1
  40. package/vona/src/suite-vendor/a-vona/modules/a-executor/src/service/executor.ts +6 -1
  41. package/vona/src/suite-vendor/a-vona/package.json +1 -1
  42. package/zova/package.original.json +1 -1
  43. package/zova/packages-zova/zova/package.json +2 -2
  44. package/zova/pnpm-lock.yaml +45 -38
  45. package/zova/src/suite/a-commerce/modules/commerce-catalog/src/page/product/controller.tsx +4 -3
  46. package/zova/src/suite/a-commerce/modules/commerce-member/src/page/address/controller.tsx +4 -3
  47. package/zova/src/suite/a-commerce/modules/commerce-trade/package.json +3 -1
  48. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionAdjustStock/controller.tsx +3 -2
  49. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionRefund/controller.tsx +16 -20
  50. package/zova/src/suite/a-commerce/modules/commerce-trade/src/component/tableCellActionShip/controller.tsx +3 -2
  51. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/cart/controller.tsx +6 -5
  52. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx +5 -4
  53. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/order/controller.tsx +4 -4
  54. package/zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx +1 -1
  55. package/zova/src/suite/a-demo/modules/demo-basic/src/page/controllerBoundary/controller.tsx +2 -2
  56. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionDeleteForce.tsx +4 -4
  57. package/zova/src/suite/a-training/modules/training-student/src/bean/tableCell.actionSummary.tsx +4 -4
  58. package/zova/src/suite/cabloy-basic/modules/basic-app/src/monkey.ts +11 -0
  59. package/zova/src/suite/cabloy-basic/modules/basic-app/src/types/appModal.ts +1 -0
  60. package/zova/src/suite/cabloy-basic/modules/basic-app/test/lib/routedDialogContext.test.ts +60 -0
  61. package/zova/src/suite/cabloy-basic/modules/basic-details/src/bean/tableCell.actionUpdate.tsx +4 -4
  62. package/zova/src/suite/cabloy-basic/modules/basic-details/src/component/actionCreate/controller.tsx +4 -4
  63. package/zova/src/suite/cabloy-basic/modules/basic-metrics/src/page/dashboard/controller.tsx +8 -2
  64. package/zova/src/{suite-vendor/a-zova/modules/a-boundary → suite/cabloy-basic/modules/basic-pay}/package.json +13 -5
  65. package/zova/src/{suite-vendor/a-pay/modules/a-pay → suite/cabloy-basic/modules/basic-pay}/src/.metadata/component/paymentNextAction.ts +2 -2
  66. package/zova/src/suite/cabloy-basic/modules/basic-pay/src/.metadata/index.ts +68 -0
  67. package/zova/src/suite/cabloy-basic/modules/basic-pay/src/.metadata/this.ts +2 -0
  68. package/zova/src/{suite-vendor/a-pay/modules/a-pay → suite/cabloy-basic/modules/basic-pay}/src/component/paymentNextAction/controller.tsx +13 -24
  69. package/zova/src/suite/cabloy-basic/modules/basic-table/src/bean/tableCell.actionUpdate.tsx +4 -4
  70. package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/actionCreate/controller.tsx +4 -4
  71. package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/actionDeleteBulk/controller.tsx +4 -4
  72. package/zova/src/suite/cabloy-basic/package.json +1 -0
  73. package/zova/src/suite-vendor/a-pay/modules/a-pay/package.json +1 -1
  74. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/.metadata/index.ts +4 -46
  75. package/zova/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts +13 -0
  76. package/zova/src/suite-vendor/a-pay/package.json +2 -2
  77. package/zova/src/suite-vendor/a-zova/modules/a-router/package.json +1 -1
  78. package/zova/src/suite-vendor/a-zova/modules/a-router/src/monkey.ts +17 -3
  79. package/zova/src/suite-vendor/a-zova/modules/a-zova/package.json +1 -2
  80. package/zova/src/suite-vendor/a-zova/package.json +3 -4
  81. package/zova/src/suite-vendor/a-zova/modules/a-boundary/LICENSE +0 -21
  82. package/zova/src/suite-vendor/a-zova/modules/a-boundary/src/.metadata/index.ts +0 -26
  83. package/zova/src/suite-vendor/a-zova/modules/a-boundary/src/.metadata/this.ts +0 -2
  84. /package/zova/src/{suite-vendor/a-zova/modules/a-boundary → suite/cabloy-basic/modules/basic-pay}/src/index.ts +0 -0
  85. /package/zova/src/{suite-vendor/a-zova/modules/a-boundary → suite/cabloy-basic/modules/basic-pay}/tsconfig.build.json +0 -0
  86. /package/zova/src/{suite-vendor/a-zova/modules/a-boundary → suite/cabloy-basic/modules/basic-pay}/tsconfig.json +0 -0
@@ -1,6 +1,6 @@
1
1
  # A-Pay Payment Suite
2
2
 
3
- This guide explains the current payment architecture in Cabloy Basic across Vona, Zova, and the Commerce domain.
3
+ This guide explains the current payment architecture shared by Cabloy Basic and Cabloy Start across Vona, Zova, and the Commerce domain.
4
4
 
5
5
  It is a source-oriented architecture guide for:
6
6
 
@@ -50,12 +50,26 @@ zova/src/suite-vendor/a-pay/
50
50
 
51
51
  The general suite/module organization is described in [Suites and Modules](/fullstack/suites-and-modules). The payment suite follows the vendor-suite layout rather than being a complete user-facing page package.
52
52
 
53
- | Module | Vona responsibility | Zova responsibility |
54
- | ------------ | --------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
55
- | `a-pay` | Payment sessions, provider operations, callbacks, webhooks, normalized contracts, audit/outbox boundaries | Payment-session API/model, generated contracts, next-action component, redirect coordinator |
56
- | `pay-mock` | Deterministic development/test provider and simulator webhook path | Mock completion mutation used by the Commerce test surface |
57
- | `pay-paypal` | PayPal API, capture, query, refund, and webhook translation | Provider identity and metadata surface; no PayPal SDK execution in the browser |
58
- | `pay-stripe` | Stripe Checkout, query, refund, and webhook translation | Provider identity and metadata surface; no Stripe SDK execution in the browser |
53
+ The shared suite contains payment-domain state and browser-safe coordination only. Presentation is owned by the active edition:
54
+
55
+ ```text
56
+ zova/src/suite/cabloy-basic/modules/basic-pay/
57
+ └── paymentNextAction # DaisyUI and Tailwind CSS presenter
58
+
59
+ zova/src/suite/cabloy-start/modules/start-pay/
60
+ └── paymentNextAction # Vuetify presenter
61
+ ```
62
+
63
+ Each edition module exposes its own `ZPaymentNextAction` wrapper, while consuming the neutral `IPaymentNextActionProps` contract and `ServicePaymentCoordinator` from `a-pay`.
64
+
65
+ | Module | Vona responsibility | Zova responsibility |
66
+ | ------------ | --------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- |
67
+ | `a-pay` | Payment sessions, provider operations, callbacks, webhooks, normalized contracts, audit/outbox boundaries | Payment-session API/model, generated contracts, normalized next-action input, redirect coordinator |
68
+ | `basic-pay` | — | Cabloy Basic next-action presentation using DaisyUI and Tailwind CSS |
69
+ | `start-pay` | — | Cabloy Start next-action presentation using Vuetify |
70
+ | `pay-mock` | Deterministic development/test provider and simulator webhook path | Mock completion mutation used by the Commerce test surface |
71
+ | `pay-paypal` | PayPal API, capture, query, refund, and webhook translation | Provider identity and metadata surface; no PayPal SDK execution in the browser |
72
+ | `pay-stripe` | Stripe Checkout, query, refund, and webhook translation | Provider identity and metadata surface; no Stripe SDK execution in the browser |
59
73
 
60
74
  The actual Web payment page is owned by the Commerce consumer, not by `zova-module-a-pay`:
61
75
 
@@ -143,7 +157,7 @@ The following flow is source-confirmed by the current Commerce and A-Pay impleme
143
157
  6. Commerce navigates to an authenticated Commerce payment route with the payment-session and order identifiers. Callback continuation remains server-selected and allowlisted; do not derive it from provider or browser input.
144
158
  7. The customer starts the session. Zova calls `POST /api/pay/payment-session/{id}/start`; A-Pay claims a provider operation with a stable idempotency key before making the external provider call.
145
159
  8. The provider adapter returns a normalized snapshot and optional `nextAction`. Redirect-capable providers normally return `requires_action` with a redirect action.
146
- 9. Zova renders the generic next-action component. On the client, the redirect coordinator uses `window.location.assign(...)`; it does not call a provider SDK or decide whether the order is paid.
160
+ 9. Zova renders the edition-owned next-action presenter: `ZPaymentNextAction` from `basic-pay` in Cabloy Basic or from `start-pay` in Cabloy Start. On the client, the shared redirect coordinator uses `window.location.assign(...)`; it does not call a provider SDK or decide whether the order is paid.
147
161
  10. The provider returns through the server callback route, or sends a webhook to the public webhook route. A return callback can request confirmation or reconciliation, but cannot assert success.
148
162
  11. A-Pay verifies provider webhook input using the selected server-side client and the raw request body, then correlates provider, client, environment, amount, currency, and identifiers with the persisted session.
149
163
  12. Verified facts are deduplicated and applied to payment state. The state transition, audit entry, and `payment.outcome.v1` outbox record are written durably.
@@ -212,9 +226,9 @@ Read the frontend in Zova’s own roles first:
212
226
  | Zova role | Current A-Pay responsibility |
213
227
  | -------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
214
228
  | `ModelPaymentSession` | Model-owned query and mutation state for `view`, `start`, and `reconcile`, including invalidation after mutations |
215
- | `ControllerPaymentNextAction` | Component-controller behavior for redirect, pending, completed, and embedded action rendering |
229
+ | `IPaymentNextActionProps` | Shared neutral input contract for edition-owned next-action presenters |
216
230
  | `ServicePaymentCoordinator` | Client-only execution of a normalized redirect action |
217
- | `ZPaymentNextAction` | Metadata-backed public component wrapper for the action controller |
231
+ | `basic-pay` / `start-pay` | Edition-owned `ControllerPaymentNextAction` and `ZPaymentNextAction` presentation wrappers |
218
232
  | Commerce payment page controller | Route state, start/reconcile decisions, settlement polling, and order navigation |
219
233
 
220
234
  This is not page-local Vue fetching rewritten with classes. The model bean owns remote query/mutation state; the controller owns interaction and lifecycle decisions; the service bean owns reusable browser-side behavior; the render/component wrapper exposes the controller to consumers.
@@ -223,10 +237,10 @@ The core frontend reading path is:
223
237
 
224
238
  1. `zova/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts`
225
239
  2. `zova/src/suite-vendor/a-pay/modules/a-pay/src/model/paymentSession.ts`
226
- 3. `zova/src/suite-vendor/a-pay/modules/a-pay/src/api/paymentSession.ts`
227
- 4. `zova/src/suite-vendor/a-pay/modules/a-pay/src/apiSchema/paymentSession.ts`
240
+ 3. `zova/src/suite-vendor/a-pay/modules/a-pay/src/api/payPaymentSession.ts`
241
+ 4. `zova/src/suite-vendor/a-pay/modules/a-pay/src/apiSchema/payPaymentSession.ts`
228
242
  5. `zova/src/suite-vendor/a-pay/modules/a-pay/src/service/paymentCoordinator.ts`
229
- 6. `zova/src/suite-vendor/a-pay/modules/a-pay/src/component/paymentNextAction/controller.tsx`
243
+ 6. `zova/src/suite/cabloy-basic/modules/basic-pay/src/component/paymentNextAction/controller.tsx` or `zova/src/suite/cabloy-start/modules/start-pay/src/component/paymentNextAction/controller.tsx`
230
244
  7. `zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx`
231
245
 
232
246
  When a consumer uses `controllerRef` on `ZPaymentNextAction`, it receives the Zova component controller instance. It is not a generic DOM or Vue component reference.
@@ -235,7 +249,7 @@ When a consumer uses `controllerRef` on `ZPaymentNextAction`, it receives the Zo
235
249
 
236
250
  - Keep payment-session query/mutation state in `ModelPaymentSession`.
237
251
  - Consume generated API types and schemas; do not hand-patch generated files.
238
- - Pass the normalized `nextAction` to the generic action component instead of adding provider-specific branches to Commerce pages.
252
+ - Pass the normalized `nextAction` and shared `IPaymentNextActionProps` to the active edition's action component instead of adding provider-specific branches to Commerce pages.
239
253
  - Execute redirects only in the browser.
240
254
  - Keep mock simulator controls limited to mock sessions and development/test surfaces.
241
255
  - Treat payment-session terminal state and Commerce order settlement as separate observations.
@@ -303,10 +317,10 @@ For frontend contracts and consumption:
303
317
 
304
318
  1. `zova/src/suite-vendor/a-pay/modules/a-pay/src/types/payment.ts`
305
319
  2. `zova/src/suite-vendor/a-pay/modules/a-pay/src/model/paymentSession.ts`
306
- 3. `zova/src/suite-vendor/a-pay/modules/a-pay/src/api/paymentSession.ts`
307
- 4. `zova/src/suite-vendor/a-pay/modules/a-pay/src/apiSchema/paymentSession.ts`
320
+ 3. `zova/src/suite-vendor/a-pay/modules/a-pay/src/api/payPaymentSession.ts`
321
+ 4. `zova/src/suite-vendor/a-pay/modules/a-pay/src/apiSchema/payPaymentSession.ts`
308
322
  5. `zova/src/suite-vendor/a-pay/modules/a-pay/src/service/paymentCoordinator.ts`
309
- 6. `zova/src/suite-vendor/a-pay/modules/a-pay/src/component/paymentNextAction/controller.tsx`
323
+ 6. `zova/src/suite/cabloy-basic/modules/basic-pay/src/component/paymentNextAction/controller.tsx` or `zova/src/suite/cabloy-start/modules/start-pay/src/component/paymentNextAction/controller.tsx`
310
324
  7. `zova/src/suite/a-commerce/modules/commerce-trade/src/routes.ts`
311
325
  8. `zova/src/suite/a-commerce/modules/commerce-trade/src/page/checkout/controller.tsx`
312
326
  9. `zova/src/suite/a-commerce/modules/commerce-trade/src/page/payment/controller.tsx`
@@ -916,6 +916,17 @@ test(
916
916
  await expect(selectionStatus).toHaveText('Selected 2 items');
917
917
  await expect(rowFor(selectedNames[0])).toHaveAttribute('aria-selected', 'true');
918
918
  await expect(rowFor(selectedNames[1])).toHaveAttribute('aria-selected', 'true');
919
+
920
+ const errorDialog = page.getByRole('dialog').filter({
921
+ hasText: 'Bulk deletion temporarily unavailable',
922
+ });
923
+ await expect(errorDialog).toBeVisible();
924
+ await expect(errorDialog.getByRole('button', { name: 'Close', exact: true })).toBeVisible();
925
+ await errorDialog.getByRole('button', { name: 'Close', exact: true }).click();
926
+ await expect(errorDialog).toHaveCount(0);
927
+ await expect(deleteBulk).toBeEnabled();
928
+ await expect(deleteBulk).not.toHaveAttribute('aria-busy', 'true');
929
+ await expect(deleteBulk.locator('.loading.loading-spinner')).toHaveCount(0);
919
930
  } finally {
920
931
  await page.unroute(bulkDeleteRoute, bulkDeleteFailureHandler);
921
932
  }
@@ -155,10 +155,9 @@ test(
155
155
  const ready = overrideHost.getByText('Override Controller boundary probe ready', {
156
156
  exact: true,
157
157
  });
158
- const initialOverrideLoading = loading.waitFor({ state: 'visible' });
158
+ const initialOverrideLoading = expect(loading).toHaveText('Override loading mode: inline');
159
159
  await page.getByRole('button', { name: 'Mount override failing probe', exact: true }).click();
160
160
  await initialOverrideLoading;
161
- await expect(loading).toHaveText('Override loading mode: inline');
162
161
  await expect(error).toHaveText(
163
162
  'Override legacy error: Override Controller boundary probe initialization failed',
164
163
  );
@@ -1,4 +1,4 @@
1
1
  {
2
- "status": "failed",
2
+ "status": "passed",
3
3
  "failedTests": []
4
4
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-cli",
3
- "version": "1.1.149",
3
+ "version": "1.1.150",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona cli",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-cli-set-api",
3
- "version": "1.1.147",
3
+ "version": "1.1.148",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona cli-set-api",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona",
3
- "version": "5.1.93",
3
+ "version": "5.1.94",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "Vona is an intuitive, elegant and powerful Node.js framework for rapidly developing enterprise applications of any size",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-core",
3
- "version": "5.1.38",
3
+ "version": "5.1.39",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona",
6
6
  "keywords": [
@@ -183,6 +183,7 @@ export class AppUtil extends BeanSimple {
183
183
  createError(data, returnObject?: boolean) {
184
184
  const error = returnObject ? ({} as any) : new Error();
185
185
  error.code = data.code !== undefined ? data.code : 500;
186
+ if (data.status !== undefined) error.status = data.status;
186
187
  if (data.message && typeof data.message === 'object') {
187
188
  error.message = JSON.stringify(data.message, null, 2);
188
189
  } else {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-mock",
3
- "version": "6.1.38",
3
+ "version": "6.1.39",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona mock",
6
6
  "keywords": [
@@ -541,7 +541,7 @@ describe('student.test.ts', { concurrency: false }, () => {
541
541
  const deleted = await app.bean.executor.performAction(
542
542
  'post',
543
543
  '/training/student/bulk/delete',
544
- { body: { ids: [studentId, studentId, '__missing-student__'] } },
544
+ { body: { ids: [studentId, studentId, '-1'] } },
545
545
  );
546
546
  assert.equal(deleted, null);
547
547
  assert.equal(
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-layoutprofile",
3
- "version": "5.0.1",
3
+ "version": "5.0.2",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "Vona Module"
@@ -4,6 +4,7 @@ import { catchError } from '@cabloy/utils';
4
4
  import assert from 'node:assert';
5
5
  import { randomUUID } from 'node:crypto';
6
6
  import { describe, it } from 'node:test';
7
+ import { isDeepStrictEqual } from 'node:util';
7
8
  import { app } from 'vona-mock';
8
9
 
9
10
  import type { ILayoutProfile } from '../src/types/layoutprofile.ts';
@@ -200,9 +201,7 @@ describe('layoutprofile.test.ts', { concurrency: false }, () => {
200
201
  });
201
202
  });
202
203
  assert.equal(persisted.length, 1);
203
- assert.ok(
204
- profiles.some(profile => JSON.stringify(profile) === JSON.stringify(persisted[0].profile)),
205
- );
204
+ assert.ok(profiles.some(profile => isDeepStrictEqual(profile, persisted[0].profile)));
206
205
 
207
206
  const loaded = await app.bean.executor.mockCtx(async () => {
208
207
  return await performAs(fixture.token, 'get', `${actionPath}/load`, {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-suite-a-cabloy",
3
- "version": "5.1.53",
3
+ "version": "5.1.54",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "author": "",
@@ -8,7 +8,7 @@
8
8
  "type": "module",
9
9
  "dependencies": {
10
10
  "vona-module-a-cabloy": "workspace:^",
11
- "vona-module-a-layoutprofile": "^5.0.1",
11
+ "vona-module-a-layoutprofile": "^5.0.2",
12
12
  "vona-module-a-markdown": "^5.0.3",
13
13
  "vona-module-a-rbac": "^5.0.6",
14
14
  "vona-module-a-socket": "workspace:^",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-core",
3
- "version": "5.1.52",
3
+ "version": "5.1.53",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-module-a-executor",
3
- "version": "5.1.16",
3
+ "version": "5.1.17",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "keywords": [
@@ -64,10 +64,15 @@ export class ServiceExecutor extends BeanBase {
64
64
  throw app.util.createError(ctx.body);
65
65
  }
66
66
  if (ctx.body && typeof ctx.body === 'object') {
67
- throw app.util.createError(ctx.body);
67
+ throw app.util.createError({
68
+ ...ctx.body,
69
+ status: ctx.status,
70
+ code: (ctx.body as { code?: unknown }).code ?? ctx.status,
71
+ });
68
72
  }
69
73
  throw app.util.createError({
70
74
  code: ctx.status,
75
+ status: ctx.status,
71
76
  message: ctx.message,
72
77
  });
73
78
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-suite-a-vona",
3
- "version": "5.1.86",
3
+ "version": "5.1.87",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "",
6
6
  "author": "",
@@ -74,7 +74,7 @@
74
74
  "zova": "workspace:^"
75
75
  },
76
76
  "devDependencies": {
77
- "@cabloy/lint": "^5.1.33",
77
+ "@cabloy/lint": "^5.1.35",
78
78
  "@cabloy/openapi-typescript": "^7.9.2",
79
79
  "@quasar/app-vite": "npm:@cabloy/quasar-app-vite@^2.5.10",
80
80
  "@types/node": "^22.19.17",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova",
3
- "version": "5.1.163",
3
+ "version": "5.1.164",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -46,7 +46,7 @@
46
46
  },
47
47
  "dependencies": {
48
48
  "zova-core": "^5.1.90",
49
- "zova-suite-a-zova": "^5.1.162"
49
+ "zova-suite-a-zova": "^5.1.163"
50
50
  },
51
51
  "devDependencies": {
52
52
  "clean-package": "^2.2.0",
@@ -77,7 +77,7 @@ importers:
77
77
  version: 10.6.0(postcss@8.5.28)
78
78
  axios:
79
79
  specifier: ^1.18.1
80
- version: 1.20.0
80
+ version: 1.20.0(supports-color@10.2.2)
81
81
  compression:
82
82
  specifier: ^1.8.1
83
83
  version: 1.8.2
@@ -153,9 +153,6 @@ importers:
153
153
  zova-module-a-behaviors:
154
154
  specifier: workspace:^
155
155
  version: link:src/suite-vendor/a-zova/modules/a-behaviors
156
- zova-module-a-boundary:
157
- specifier: workspace:^
158
- version: link:src/suite-vendor/a-zova/modules/a-boundary
159
156
  zova-module-a-command:
160
157
  specifier: workspace:^
161
158
  version: link:src/suite-vendor/a-zova/modules/a-command
@@ -273,6 +270,9 @@ importers:
273
270
  zova-module-basic-pageentry:
274
271
  specifier: workspace:^
275
272
  version: link:src/suite/cabloy-basic/modules/basic-pageentry
273
+ zova-module-basic-pay:
274
+ specifier: workspace:^
275
+ version: link:src/suite/cabloy-basic/modules/basic-pay
276
276
  zova-module-basic-resource:
277
277
  specifier: workspace:^
278
278
  version: link:src/suite/cabloy-basic/modules/basic-resource
@@ -369,10 +369,10 @@ importers:
369
369
  devDependencies:
370
370
  '@cabloy/cli':
371
371
  specifier: ^3.1.29
372
- version: 3.1.29(vue@3.5.42(typescript@5.9.3))
372
+ version: 3.1.29(supports-color@10.2.2)(vue@3.5.42(typescript@5.9.3))
373
373
  '@cabloy/lint':
374
- specifier: ^5.1.33
375
- version: 5.1.33(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))
374
+ specifier: ^5.1.35
375
+ version: 5.1.35(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))
376
376
  '@cabloy/openapi-typescript':
377
377
  specifier: ^7.9.2
378
378
  version: 7.9.2(typescript@5.9.3)
@@ -444,7 +444,7 @@ importers:
444
444
  dependencies:
445
445
  '@cabloy/cli':
446
446
  specifier: ^3.1.29
447
- version: 3.1.29(vue@3.5.42(typescript@5.9.3))
447
+ version: 3.1.29(supports-color@10.2.2)(vue@3.5.42(typescript@5.9.3))
448
448
  '@cabloy/process-helper':
449
449
  specifier: ^3.1.8
450
450
  version: 3.1.8
@@ -478,7 +478,7 @@ importers:
478
478
  version: 7.29.7(@babel/core@7.29.7)
479
479
  '@cabloy/cli':
480
480
  specifier: ^3.1.29
481
- version: 3.1.29(vue@3.5.42(typescript@5.9.3))
481
+ version: 3.1.29(supports-color@10.2.2)(vue@3.5.42(typescript@5.9.3))
482
482
  '@cabloy/extend':
483
483
  specifier: ^3.2.8
484
484
  version: 3.2.8
@@ -876,7 +876,7 @@ importers:
876
876
  specifier: ^5.1.90
877
877
  version: link:../zova-core
878
878
  zova-suite-a-zova:
879
- specifier: ^5.1.162
879
+ specifier: ^5.1.163
880
880
  version: link:../../src/suite-vendor/a-zova
881
881
  devDependencies:
882
882
  clean-package:
@@ -1019,7 +1019,7 @@ importers:
1019
1019
  src/suite-vendor/a-pay:
1020
1020
  dependencies:
1021
1021
  zova-module-a-pay:
1022
- specifier: ^5.0.7
1022
+ specifier: ^5.0.8
1023
1023
  version: link:modules/a-pay
1024
1024
  zova-module-pay-mock:
1025
1025
  specifier: ^5.0.5
@@ -1084,9 +1084,6 @@ importers:
1084
1084
  zova-module-a-behaviors:
1085
1085
  specifier: ^5.1.22
1086
1086
  version: link:modules/a-behaviors
1087
- zova-module-a-boundary:
1088
- specifier: ^5.1.22
1089
- version: link:modules/a-boundary
1090
1087
  zova-module-a-command:
1091
1088
  specifier: ^5.1.35
1092
1089
  version: link:modules/a-command
@@ -1115,7 +1112,7 @@ importers:
1115
1112
  specifier: ^5.1.54
1116
1113
  version: link:modules/a-openapi
1117
1114
  zova-module-a-router:
1118
- specifier: ^5.1.38
1115
+ specifier: ^5.1.39
1119
1116
  version: link:modules/a-router
1120
1117
  zova-module-a-routerstack:
1121
1118
  specifier: ^5.1.29
@@ -1142,7 +1139,7 @@ importers:
1142
1139
  specifier: ^5.1.37
1143
1140
  version: link:modules/a-zod
1144
1141
  zova-module-a-zova:
1145
- specifier: ^5.1.105
1142
+ specifier: ^5.1.106
1146
1143
  version: link:modules/a-zova
1147
1144
 
1148
1145
  src/suite-vendor/a-zova/modules/a-api:
@@ -1194,15 +1191,6 @@ importers:
1194
1191
  specifier: ^6.1.3
1195
1192
  version: 6.1.3
1196
1193
 
1197
- src/suite-vendor/a-zova/modules/a-boundary:
1198
- devDependencies:
1199
- clean-package:
1200
- specifier: ^2.2.0
1201
- version: 2.2.0
1202
- rimraf:
1203
- specifier: ^6.1.3
1204
- version: 6.1.3
1205
-
1206
1194
  src/suite-vendor/a-zova/modules/a-command:
1207
1195
  devDependencies:
1208
1196
  clean-package:
@@ -1216,7 +1204,7 @@ importers:
1216
1204
  dependencies:
1217
1205
  axios:
1218
1206
  specifier: ^1.18.1
1219
- version: 1.20.0
1207
+ version: 1.20.0(supports-color@10.2.2)
1220
1208
  devDependencies:
1221
1209
  clean-package:
1222
1210
  specifier: ^2.2.0
@@ -1489,7 +1477,7 @@ importers:
1489
1477
  devDependencies:
1490
1478
  '@cabloy/cli':
1491
1479
  specifier: ^3.1.29
1492
- version: 3.1.29(vue@3.5.42(typescript@5.9.3))
1480
+ version: 3.1.29(supports-color@10.2.2)(vue@3.5.42(typescript@5.9.3))
1493
1481
  '@types/luxon':
1494
1482
  specifier: ^3.7.1
1495
1483
  version: 3.7.5
@@ -1593,6 +1581,9 @@ importers:
1593
1581
  zova-module-a-pay:
1594
1582
  specifier: workspace:^
1595
1583
  version: link:../../../../suite-vendor/a-pay/modules/a-pay
1584
+ zova-module-basic-pay:
1585
+ specifier: workspace:^
1586
+ version: link:../../../cabloy-basic/modules/basic-pay
1596
1587
  zova-module-pay-mock:
1597
1588
  specifier: workspace:^
1598
1589
  version: link:../../../../suite-vendor/a-pay/modules/pay-mock
@@ -1895,6 +1886,9 @@ importers:
1895
1886
  zova-module-basic-pageentry:
1896
1887
  specifier: ^5.0.7
1897
1888
  version: link:modules/basic-pageentry
1889
+ zova-module-basic-pay:
1890
+ specifier: ^5.0.0
1891
+ version: link:modules/basic-pay
1898
1892
  zova-module-basic-resource:
1899
1893
  specifier: ^5.0.0
1900
1894
  version: link:modules/basic-resource
@@ -2103,6 +2097,19 @@ importers:
2103
2097
  specifier: ^6.1.3
2104
2098
  version: 6.1.3
2105
2099
 
2100
+ src/suite/cabloy-basic/modules/basic-pay:
2101
+ dependencies:
2102
+ zova-module-a-pay:
2103
+ specifier: workspace:^
2104
+ version: link:../../../../suite-vendor/a-pay/modules/a-pay
2105
+ devDependencies:
2106
+ clean-package:
2107
+ specifier: ^2.2.0
2108
+ version: 2.2.0
2109
+ rimraf:
2110
+ specifier: ^6.1.3
2111
+ version: 6.1.3
2112
+
2106
2113
  src/suite/cabloy-basic/modules/basic-resource:
2107
2114
  devDependencies:
2108
2115
  clean-package:
@@ -2362,8 +2369,8 @@ packages:
2362
2369
  '@cabloy/json5@1.1.9':
2363
2370
  resolution: {integrity: sha512-jV0WqPaTuLOw5UvFWOVD/1HNaWHKABs8Xd652C7jq7vhKPZsKzBy5de+Az4kd3jgn4JxaPLJgVTID/svynAzFA==}
2364
2371
 
2365
- '@cabloy/lint@5.1.33':
2366
- resolution: {integrity: sha512-x02EcUc5Wk0yFuofcb4xdz/P68l/yCJYyxB2TNPMNHEh3FAYto2z8WrKNZmLLEaJxI5TVNP4s44vP/LWh4A7Eg==}
2372
+ '@cabloy/lint@5.1.35':
2373
+ resolution: {integrity: sha512-aWrGyzwYI3ZFgIxuilA0pov18cKcyAmIe3slTgokrNfv8I4xTl2JXxcEPoR+/gk1/qB3N+ESA8199LR6wBBAMA==}
2367
2374
  peerDependencies:
2368
2375
  oxfmt: '>=0.62.0'
2369
2376
  oxlint: '>=1.77.0'
@@ -8844,7 +8851,7 @@ snapshots:
8844
8851
 
8845
8852
  '@bufbuild/protobuf@2.15.0': {}
8846
8853
 
8847
- '@cabloy/cli@3.1.29(vue@3.5.42(typescript@5.9.3))':
8854
+ '@cabloy/cli@3.1.29(supports-color@10.2.2)(vue@3.5.42(typescript@5.9.3))':
8848
8855
  dependencies:
8849
8856
  '@babel/parser': 7.29.8
8850
8857
  '@cabloy/module-glob': 5.3.18
@@ -8853,7 +8860,7 @@ snapshots:
8853
8860
  '@cabloy/utils': 2.1.27
8854
8861
  '@cabloy/word-utils': link:packages-utils/word-utils
8855
8862
  '@npmcli/config': 10.12.0
8856
- '@zhennann/common-bin': 4.0.1
8863
+ '@zhennann/common-bin': 4.0.1(supports-color@10.2.2)
8857
8864
  '@zhennann/ejs': 3.0.1
8858
8865
  boxen: 4.2.0
8859
8866
  chalk: 3.0.0
@@ -8891,7 +8898,7 @@ snapshots:
8891
8898
  dependencies:
8892
8899
  json5: 2.2.3
8893
8900
 
8894
- '@cabloy/lint@5.1.33(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))':
8901
+ '@cabloy/lint@5.1.35(@typescript-eslint/eslint-plugin@8.70.0(@typescript-eslint/parser@8.70.0(eslint@10.10.0(jiti@2.7.0))(supports-color@10.2.2)(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(@typescript-eslint/typescript-estree@8.70.0(typescript@5.9.3))(@typescript-eslint/utils@8.70.0(eslint@10.10.0(jiti@2.7.0))(typescript@5.9.3))(eslint@10.10.0(jiti@2.7.0))(oxfmt@0.62.0)(oxlint@1.82.0)(supports-color@10.2.2)(typescript@5.9.3)(vue-eslint-parser@10.4.1(eslint@10.10.0(jiti@2.7.0)))':
8895
8902
  dependencies:
8896
8903
  '@e18e/eslint-plugin': 0.2.0(eslint@10.10.0(jiti@2.7.0))(oxlint@1.82.0)
8897
8904
  '@eslint/json': 1.2.0
@@ -11041,7 +11048,7 @@ snapshots:
11041
11048
 
11042
11049
  '@vue/shared@3.5.13': {}
11043
11050
 
11044
- '@zhennann/common-bin@4.0.1':
11051
+ '@zhennann/common-bin@4.0.1(supports-color@10.2.2)':
11045
11052
  dependencies:
11046
11053
  chalk: 4.1.2
11047
11054
  change-case: 4.1.2
@@ -11075,7 +11082,7 @@ snapshots:
11075
11082
 
11076
11083
  acorn@8.18.0: {}
11077
11084
 
11078
- agent-base@6.0.2:
11085
+ agent-base@6.0.2(supports-color@10.2.2):
11079
11086
  dependencies:
11080
11087
  debug: 4.4.3(supports-color@10.2.2)
11081
11088
  transitivePeerDependencies:
@@ -11183,11 +11190,11 @@ snapshots:
11183
11190
  dependencies:
11184
11191
  possible-typed-array-names: 1.1.0
11185
11192
 
11186
- axios@1.20.0:
11193
+ axios@1.20.0(supports-color@10.2.2):
11187
11194
  dependencies:
11188
11195
  follow-redirects: 1.16.0
11189
11196
  form-data: 4.0.6
11190
- https-proxy-agent: 5.0.1
11197
+ https-proxy-agent: 5.0.1(supports-color@10.2.2)
11191
11198
  proxy-from-env: 2.1.0
11192
11199
  transitivePeerDependencies:
11193
11200
  - debug
@@ -12582,9 +12589,9 @@ snapshots:
12582
12589
  statuses: 2.0.2
12583
12590
  toidentifier: 1.0.1
12584
12591
 
12585
- https-proxy-agent@5.0.1:
12592
+ https-proxy-agent@5.0.1(supports-color@10.2.2):
12586
12593
  dependencies:
12587
- agent-base: 6.0.2
12594
+ agent-base: 6.0.2(supports-color@10.2.2)
12588
12595
  debug: 4.4.3(supports-color@10.2.2)
12589
12596
  transitivePeerDependencies:
12590
12597
  - supports-color
@@ -5,6 +5,7 @@ import { z } from 'zod';
5
5
  import { BeanControllerPageBase, Use } from 'zova';
6
6
  import { Controller } from 'zova-module-a-bean';
7
7
  import { $QueryEnsureLoaded } from 'zova-module-a-model';
8
+ import { ZButton } from 'zova-module-basic-button';
8
9
  import { ZMarkdownHtml } from 'zova-module-basic-markdown';
9
10
  import { ZPage } from 'zova-module-home-base';
10
11
 
@@ -88,12 +89,12 @@ export class ControllerPageProduct extends BeanControllerPageBase {
88
89
  <span class="badge badge-success">
89
90
  {this.scope.locale.AvailableCount(sku.available)}
90
91
  </span>
91
- <button
92
+ <ZButton
92
93
  class="btn btn-primary btn-sm"
93
- onClick={() => this.addItem(String(sku.id))}
94
+ onPerform={() => this.addItem(String(sku.id))}
94
95
  >
95
96
  {this.scope.locale.AddToCart()}
96
- </button>
97
+ </ZButton>
97
98
  </div>
98
99
  ))}
99
100
  </div>
@@ -7,6 +7,7 @@ import { BeanControllerPageBase, Use } from 'zova';
7
7
  import { Controller } from 'zova-module-a-bean';
8
8
  import { ZForm } from 'zova-module-a-form';
9
9
  import { $QueryEnsureLoaded } from 'zova-module-a-model';
10
+ import { ZButton } from 'zova-module-basic-button';
10
11
  import { ZPage } from 'zova-module-home-base';
11
12
 
12
13
  import type {
@@ -127,12 +128,12 @@ export class ControllerPageAddress extends BeanControllerPageBase {
127
128
  <button class="btn btn-outline btn-sm" onClick={() => this.edit(item)}>
128
129
  {this.scope.locale.EditAddress()}
129
130
  </button>
130
- <button
131
+ <ZButton
131
132
  class="btn btn-error btn-outline btn-sm"
132
- onClick={() => this.delete(item)}
133
+ onPerform={() => this.delete(item)}
133
134
  >
134
135
  {this.scope.locale.DeleteAddress()}
135
- </button>
136
+ </ZButton>
136
137
  </div>
137
138
  </div>
138
139
  <p>{item.addressLine1}</p>