cabloy 5.1.164 → 5.1.165

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.
package/.cabloy-version CHANGED
@@ -1 +1 @@
1
- 5.1.164
1
+ 5.1.165
@@ -0,0 +1 @@
1
+ {"sessionId":"ca46c3da-f068-490d-8585-52645b0c5e32","pid":48025,"procStart":"Wed Sep 9 23:18:11 2026","acquiredAt":1789174622732}
package/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.1.165
4
+
5
+ ### Features
6
+
7
+ - Align bulk actions and component attributes.
8
+ - Update functionality.
9
+
3
10
  ## 5.1.164
4
11
 
5
12
  ### Features
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cabloy",
3
- "version": "5.1.164",
3
+ "version": "5.1.165",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A Node.js fullstack framework",
6
6
  "keywords": [
@@ -133,6 +133,28 @@ For an atomic multi-ID Resource command, have the command DTO validate its reque
133
133
 
134
134
  `a-rbac` exposes `this.bean.rbacResourceBulk.entries(...)` for the reusable integrity and authorization sequence. Pass the facade a fresh, ordinary instance-scoped loader (rather than a cache-backed lookup) from the domain transaction. It preserves the requested order, invokes `checkEntries(...)` only after complete normal-scoped loading, and emits localized `a-rbac` scoped errors for invalid ID lists and absent entries.
135
135
 
136
+ A canonical Resource bulk-delete controller shape is:
137
+
138
+ ```typescript
139
+ @Web.post('bulk/delete')
140
+ @Api.body(z.null())
141
+ @Core.transaction()
142
+ @Passport.rbac({ dataScope: true, actionInherit: 'delete' })
143
+ async deleteBulk(
144
+ @Arg.body() command: DtoRecordDeleteBulk,
145
+ @Arg.rbacScopeCurrent() rbacScopeCurrent: IRbacScopeAccess,
146
+ ) {
147
+ const entries = await this.bean.rbacResourceBulk.entries(
148
+ command.ids,
149
+ ids => this.scope.model.record.select({ where: rbacScopeCurrent.where({ id: ids }) }),
150
+ rbacScopeCurrent,
151
+ );
152
+ await this.scope.service.record.deleteBulk(entries.map(entry => entry.id));
153
+ }
154
+ ```
155
+
156
+ The DTO must require `ids` and declare an operation-appropriate maximum. This controller shape makes `POST <resource>/bulk/delete` compatible with the generic Resource mutation surface while keeping the data-scope preflight and delete in one transaction. A frontend table may hide or disable a selected action as a usability aid, but it must never replace this server-side validation.
157
+
136
158
  A representative list shape is:
137
159
 
138
160
  ```typescript
@@ -1,9 +1,11 @@
1
1
  # Backend Metadata to Frontend Table Actions
2
2
 
3
- This page explains one of the most practical fullstack contract chains in Cabloy Basic:
3
+ This page explains one of the most practical fullstack contract chains in Cabloy:
4
4
 
5
5
  > backend field and row metadata can drive visible frontend table actions, while frontend action resources and generated contract consumers stay aligned with that backend truth.
6
6
 
7
+ The contract model is shared by Cabloy Basic and Cabloy Start. The rendering adapter is edition-specific: the examples below use Basic resource names where they illustrate the general mechanism; Start list pages use `start-page`, `start-table`, `start-commands`, and Vuetify.
8
+
7
9
  This page sits between the pure direction guides:
8
10
 
9
11
  - [Backend OpenAPI to Frontend SDK](/fullstack/openapi-to-sdk)
@@ -300,6 +302,39 @@ This is the same contract idea at a different UI level:
300
302
  - backend or shared page metadata chooses the action resource identity
301
303
  - frontend runtime resolves that identity to a visible action implementation
302
304
 
305
+ ### Cabloy Start selected-resource actions
306
+
307
+ A selected-resource action adds a page-owned selection payload to this same contract. A Training Student list can declare the Start render resources directly in its backend DTO metadata:
308
+
309
+ ```tsx
310
+ ZovaRender.block('start-page:blockToolbarBulk', {
311
+ actions: [
312
+ ZovaRender.tableActionBulk('start-table:actionCreate'),
313
+ ZovaRender.tableActionBulk('start-table:actionDeleteBulk', {
314
+ requiresSelection: true,
315
+ selectedMaxIds: 100,
316
+ }),
317
+ ],
318
+ });
319
+ ```
320
+
321
+ The metadata remains declarative. `start-page:blockPage` owns the normalized selected IDs and currently loaded selected-row snapshots; `start-page:blockTable` bridges that state to Vuetify `VDataTableServer` with page-local checkbox selection. Therefore a page change retains earlier selections, while a new resource, fixed query, submitted/reset filter, sort, page-size change, or successful selected mutation clears the relevant selection.
322
+
323
+ `start-page:blockToolbarBulk` adds the Start **Select**/**Done** mode and selected-count status. It supplies runtime `dynamicSelection` and `dynamicDisabled` props to action resources without overwriting authored `disabled` metadata. Selection-required actions are unavailable when the selection is empty, incomplete, exceeds its declared/default limit, or fails the projected frontend permission check for any selected row.
324
+
325
+ `start-table:actionDeleteBulk` confirms the operation and delegates to `start-commands:deleteBulk`. The command uses the existing `rest-resource.model.resource` owner and calls its generated-resource mutation with `{ ids }`; it clears only successfully deleted IDs after the mutation resolves. A cancel or failed request preserves selection. Browser-side eligibility is only a UX projection: the backend controller remains authoritative.
326
+
327
+ For a Resource bulk delete, expose the canonical endpoint as `POST <resource>/bulk/delete` with a request DTO whose `ids` array is required and bounded. In a `@Core.transaction()` controller action, pass the requested IDs and an ordinary active-instance model loader to `this.bean.rbacResourceBulk.entries(...)`, then mutate only the returned entries. This rejects malformed or normalized-duplicate identities, requires complete scoped resolution, checks every entry through the current data scope, and prevents partial deletion. Missing, soft-deleted, or other-instance rows are uniformly absent; do not issue cross-instance probes merely to distinguish them.
328
+
329
+ After adding or changing a Start action resource, regenerate its Zova metadata and run the paired Admin reverse chain from the repository root:
330
+
331
+ ```bash
332
+ npm run build:zova:admin
333
+ npm run deps:vona
334
+ ```
335
+
336
+ Regenerate generated OpenAPI consumers only after the backend contract output contains the canonical operation; do not hand-edit generated consumers. Build the Web flavor too only when the affected action is consumed by Web.
337
+
303
338
  ## Step 7A: Detail actions follow the same contract idea inside details blocks
304
339
 
305
340
  The same contract model also appears in resource details tables.
@@ -545,7 +545,9 @@ test(
545
545
  name: 'Select all rows on this page',
546
546
  exact: true,
547
547
  });
548
- const selectionStatus = page.getByRole('status').filter({ hasText: /^Selected \d+ items$/ });
548
+ const selectionStatus = page
549
+ .getByRole('status')
550
+ .filter({ hasText: /^Selected (?:\d+ items|one item)$/ });
549
551
  const select = page.getByRole('button', { name: 'Select', exact: true });
550
552
  const done = page.getByRole('button', { name: 'Done', exact: true });
551
553
  const create = page.getByRole('button', { name: 'Create', exact: true });
@@ -597,7 +599,7 @@ test(
597
599
 
598
600
  await rowCheckboxFor(visibleFixtureNames[0]).check();
599
601
  await expect(rowFor(visibleFixtureNames[0])).toHaveAttribute('aria-selected', 'true');
600
- await expect(selectionStatus).toHaveText('Selected 1 items');
602
+ await expect(selectionStatus).toHaveText('Selected one item');
601
603
  await expect(allPageCheckbox).toHaveAttribute('aria-checked', 'mixed');
602
604
  await expect(allPageCheckbox).toHaveJSProperty('indeterminate', true);
603
605
 
@@ -629,7 +631,7 @@ test(
629
631
  await expect(rowFor(visibleFixtureNames[0])).toHaveCount(1);
630
632
  await expect(allPageCheckbox).toBeChecked();
631
633
  await allPageCheckbox.uncheck();
632
- await expect(selectionStatus).toHaveText('Selected 1 items');
634
+ await expect(selectionStatus).toHaveText('Selected one item');
633
635
 
634
636
  await rowCheckboxFor(visibleFixtureNames[9]).check();
635
637
  await expect(selectionStatus).toHaveText('Selected 2 items');
@@ -639,7 +641,7 @@ test(
639
641
  await expect(rowFor(visibleFixtureNames[9])).toHaveAttribute('aria-selected', 'false');
640
642
 
641
643
  await rowCheckboxFor(visibleFixtureNames[9]).check();
642
- await expect(selectionStatus).toHaveText('Selected 1 items');
644
+ await expect(selectionStatus).toHaveText('Selected one item');
643
645
  await page.getByRole('button', { name: 'Reset', exact: true }).click();
644
646
  await expect(page.getByLabel('Student Name')).toHaveValue('');
645
647
  await expect(selectionStatus).toHaveText('Selected 0 items');
@@ -648,7 +650,7 @@ test(
648
650
  await expect(rowFor(visibleFixtureNames[0])).toHaveCount(1);
649
651
 
650
652
  await rowCheckboxFor(visibleFixtureNames[0]).check();
651
- await expect(selectionStatus).toHaveText('Selected 1 items');
653
+ await expect(selectionStatus).toHaveText('Selected one item');
652
654
  const nameSort = page.getByRole('button', { name: 'Sort by name', exact: true });
653
655
  const sortResponse = waitForStudentSelect(page);
654
656
  await nameSort.click();
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-cli",
3
- "version": "1.1.146",
3
+ "version": "1.1.147",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona cli",
6
6
  "keywords": [
@@ -53,17 +53,17 @@ export class Controller<%=argv.resourceNameCapitalize%> extends BeanBase {
53
53
  await this.scope.service.<%=argv.resourceName%>.update(id, <%=argv.resourceName%>);
54
54
  }
55
55
 
56
- @Web.post('bulk/delete', { summary: $locale('BulkDelete') })
57
- @Api.body(z.null())
58
- @Passport.systemAdmin()
59
- async deleteBulk(@Arg.body() command: Dto<%=argv.resourceNameCapitalize%>DeleteBulk): Promise<void> {
60
- await this.scope.service.<%=argv.resourceName%>.deleteBulk(command.ids);
61
- }
62
-
63
56
  @Web.delete(':id', { summary: $locale('<%=argv.resourceNameCapitalize%>Delete') })
64
57
  @Api.body(z.null())
65
58
  @Passport.systemAdmin()
66
59
  async delete(@Arg.param('id', v.tableIdentity()) id: TableIdentity): Promise<void> {
67
60
  await this.scope.service.<%=argv.resourceName%>.delete(id);
68
61
  }
62
+
63
+ @Web.post('bulk/delete', { summary: $locale('BulkDelete') })
64
+ @Api.body(z.null())
65
+ @Passport.systemAdmin()
66
+ async deleteBulk(@Arg.body() command: Dto<%=argv.resourceNameCapitalize%>DeleteBulk): Promise<void> {
67
+ await this.scope.service.<%=argv.resourceName%>.deleteBulk(command.ids);
68
+ }
69
69
  }
@@ -1,5 +1,6 @@
1
1
  import type { TableIdentity } from 'table-identity';
2
2
  import type { IQueryParams } from 'vona-module-a-orm';
3
+ import type { IRbacScopeAccess } from 'vona-module-a-rbac';
3
4
  import type { IDecoratorControllerOptions } from 'vona-module-a-web';
4
5
 
5
6
  import { BeanBase } from 'vona';
@@ -53,17 +54,29 @@ export class Controller<%=argv.resourceNameCapitalize%> extends BeanBase {
53
54
  await this.scope.service.<%=argv.resourceName%>.update(id, <%=argv.resourceName%>);
54
55
  }
55
56
 
56
- @Web.post('bulk/delete', { summary: $locale('BulkDelete') })
57
- @Api.body(z.null())
58
- @Passport.rbac()
59
- async deleteBulk(@Arg.body() command: Dto<%=argv.resourceNameCapitalize%>DeleteBulk): Promise<void> {
60
- await this.scope.service.<%=argv.resourceName%>.deleteBulk(command.ids);
61
- }
62
-
63
57
  @Web.delete(':id', { summary: $locale('<%=argv.resourceNameCapitalize%>Delete') })
64
58
  @Api.body(z.null())
65
59
  @Passport.rbac()
66
60
  async delete(@Arg.param('id', v.tableIdentity()) id: TableIdentity): Promise<void> {
67
61
  await this.scope.service.<%=argv.resourceName%>.delete(id);
68
62
  }
63
+
64
+ @Web.post('bulk/delete', { summary: $locale('BulkDelete') })
65
+ @Api.body(z.null())
66
+ @Passport.rbac({ actionInherit: 'delete' })
67
+ async deleteBulk(
68
+ @Arg.body() command: Dto<%=argv.resourceNameCapitalize%>DeleteBulk,
69
+ @Arg.rbacScopeCurrent() rbacScopeCurrent: IRbacScopeAccess,
70
+ ): Promise<void> {
71
+ const entries = await this.bean.rbacResourceBulk.entries(
72
+ command.ids,
73
+ async ids => {
74
+ return await this.scope.model.<%=argv.resourceName%>.select({
75
+ where: rbacScopeCurrent.where({ id: ids }),
76
+ });
77
+ },
78
+ rbacScopeCurrent,
79
+ );
80
+ await this.scope.service.<%=argv.resourceName%>.deleteBulk(entries.map(entry => entry.id));
81
+ }
69
82
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-cli-set-api",
3
- "version": "1.1.144",
3
+ "version": "1.1.145",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona cli-set-api",
6
6
  "keywords": [
@@ -564,8 +564,8 @@ importers:
564
564
  specifier: npm:@cabloy/zod@4.3.8
565
565
  version: '@cabloy/zod@4.3.8'
566
566
  zova:
567
- specifier: ^5.1.156
568
- version: 5.1.156(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
567
+ specifier: ^5.1.157
568
+ version: 5.1.157(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
569
569
  zova-jsx:
570
570
  specifier: ^1.1.88
571
571
  version: 1.1.88(typescript@5.9.3)
@@ -579,8 +579,8 @@ importers:
579
579
  specifier: ^5.1.26
580
580
  version: 5.1.26
581
581
  zova-module-a-command:
582
- specifier: ^5.1.34
583
- version: 5.1.34
582
+ specifier: ^5.1.35
583
+ version: 5.1.35
584
584
  zova-module-a-form:
585
585
  specifier: ^5.1.51
586
586
  version: 5.1.51(vue@3.5.39(typescript@5.9.3))
@@ -594,8 +594,8 @@ importers:
594
594
  specifier: ^5.1.36
595
595
  version: 5.1.36(vue@3.5.39(typescript@5.9.3))
596
596
  zova-module-a-openapi:
597
- specifier: ^5.1.52
598
- version: 5.1.52
597
+ specifier: ^5.1.53
598
+ version: 5.1.53
599
599
  zova-module-a-pay:
600
600
  specifier: ^5.0.7
601
601
  version: 5.0.7
@@ -612,14 +612,14 @@ importers:
612
612
  specifier: ^5.1.35
613
613
  version: 5.1.35
614
614
  zova-module-a-table:
615
- specifier: ^5.1.39
616
- version: 5.1.39(vue@3.5.39(typescript@5.9.3))
615
+ specifier: ^5.1.40
616
+ version: 5.1.40(vue@3.5.39(typescript@5.9.3))
617
617
  zova-module-pay-mock:
618
618
  specifier: ^5.0.5
619
619
  version: 5.0.5
620
620
  zova-module-rest-resource:
621
- specifier: ^5.1.50
622
- version: 5.1.50
621
+ specifier: ^5.1.51
622
+ version: 5.1.51
623
623
 
624
624
  .zova-rest/cabloy-basic-web:
625
625
  dependencies:
@@ -1619,7 +1619,7 @@ importers:
1619
1619
  specifier: ^5.0.3
1620
1620
  version: link:modules/a-markdown
1621
1621
  vona-module-a-rbac:
1622
- specifier: ^5.0.5
1622
+ specifier: ^5.0.6
1623
1623
  version: link:modules/a-rbac
1624
1624
  vona-module-a-socket:
1625
1625
  specifier: workspace:^
@@ -8983,6 +8983,9 @@ packages:
8983
8983
  zova-module-a-command@5.1.34:
8984
8984
  resolution: {integrity: sha512-kVXLKvLdQB7XwvnEuYsGClfFqf6z/1uw7QNRNYzxiyij1cvKj7f/j7u5Hg4YfN91bNYwGEJGxPcXcFoUY1DKqg==}
8985
8985
 
8986
+ zova-module-a-command@5.1.35:
8987
+ resolution: {integrity: sha512-Ckxfigexk8HEput1lBRpxwEAU2i9ocjaeilQoulEJ2QCRXrDJb1b+hvu95teR+omUdFNT4qGtCI0/oLm+jNVzg==}
8988
+
8986
8989
  zova-module-a-fetch@5.1.25:
8987
8990
  resolution: {integrity: sha512-kbMB/jIynN0dhivEZLLaY+ic9mU0rZJBeyjXwzAiWuOS330YsxipasxBZhACJD8s29RmLC9EQajI+vVLoBEveQ==}
8988
8991
 
@@ -9007,6 +9010,9 @@ packages:
9007
9010
  zova-module-a-openapi@5.1.52:
9008
9011
  resolution: {integrity: sha512-pUbyEI2tiJ2tEih/qFvfYYR/yqnWZnK0QqyCNfgkD2Nvn4EY+iyIHISLZhVtWDJbYMXcqfXlxvb8Ltvm+GD/PA==}
9009
9012
 
9013
+ zova-module-a-openapi@5.1.53:
9014
+ resolution: {integrity: sha512-vNCIbQGA9WeeC1BXsJPzdpuJANSrCZEwZq2uSSuugyw/CJ7JkJwGFvwYhEeU7YPcWd2+I0J7zNNbgOHlhnO0Xw==}
9015
+
9010
9016
  zova-module-a-pay@5.0.7:
9011
9017
  resolution: {integrity: sha512-LHIArspqUeT3aQ+b8AvxrkYOV9nFnfjTWoQ/zQNliQhy1EllooVFB+AhRY58rhmh4ru/xbem+4Wjuptl9FdU+Q==}
9012
9018
 
@@ -9034,6 +9040,9 @@ packages:
9034
9040
  zova-module-a-table@5.1.39:
9035
9041
  resolution: {integrity: sha512-MhYYlOIFJ32m61xtDCnIHfWf/g17g2HvEL7zRd5k1As7+or/9FPe9DbmFpHvjk7vp/Yba6oTqV0D5GbueJt/OA==}
9036
9042
 
9043
+ zova-module-a-table@5.1.40:
9044
+ resolution: {integrity: sha512-R/vVUMVYt6lEno45fMfwyy+luQz+l0e2er9IfvorSlZ55kgnZOZj5lXGUCiYYBPgPwxJz3p42hHr7HZZpVu9sQ==}
9045
+
9037
9046
  zova-module-a-zod@5.1.37:
9038
9047
  resolution: {integrity: sha512-rXHN9rKbum9w3gDSnC/pIusG2d2FGJOcIauf8jrbT96f+Olk4Q3iV3t2V92mxiLCh9kMvBJPfcOgJFW7pRB5Fw==}
9039
9048
 
@@ -9046,12 +9055,21 @@ packages:
9046
9055
  zova-module-rest-resource@5.1.50:
9047
9056
  resolution: {integrity: sha512-BZp4W9j4DhuQt9mk/jlquRFemzTBHe8saNtV/EUT6smAVj+7Li8AYkeaDUofKbssouqbOxHoFb0Qrlmd+1kZOw==}
9048
9057
 
9058
+ zova-module-rest-resource@5.1.51:
9059
+ resolution: {integrity: sha512-rZy8oaQvtcXmqepkE+OWsXt0MUbBuL+NdY099FuG1eYrtl/nB5WMyvmtFVF5d5NRaz6q+otysFuyo8Q93aHfwA==}
9060
+
9049
9061
  zova-suite-a-zova@5.1.155:
9050
9062
  resolution: {integrity: sha512-w4+mlwOJ3DF+Bl9N1hkZBbgNW0UouP3/Xaw8PtiNEpmmr/ScWj+/+l85RTr/q9F+Qw/hjDCWTLwy4GBukTiBag==}
9051
9063
 
9064
+ zova-suite-a-zova@5.1.156:
9065
+ resolution: {integrity: sha512-vL1y+uJz7jtE3VrnNWH3gEGcAz3dupQzk32+eaMa9RoXpUS/Q8StoM1oJKxrDLZ56NbgL6WXMpM2Rqzfoy2Vvw==}
9066
+
9052
9067
  zova@5.1.156:
9053
9068
  resolution: {integrity: sha512-LawJuQhiR+M+BdFkLYEz1wLz0zQa2IuZFAR0Vtq/dcNMX1Jus9g2iem/guNbavgeNP8aXRa+P4vCnaFynnWC/w==}
9054
9069
 
9070
+ zova@5.1.157:
9071
+ resolution: {integrity: sha512-MjRcmPJKeRywh6ay1CLPx8yiNJZ3AH1tl6hlUaWT2lxQ0CpcrpQD2MC9tXuqnY0yimUsJwmurhoZFezJRj4xvw==}
9072
+
9055
9073
  zwitch@1.0.5:
9056
9074
  resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
9057
9075
 
@@ -15383,6 +15401,8 @@ snapshots:
15383
15401
 
15384
15402
  zova-module-a-command@5.1.34: {}
15385
15403
 
15404
+ zova-module-a-command@5.1.35: {}
15405
+
15386
15406
  zova-module-a-fetch@5.1.25:
15387
15407
  dependencies:
15388
15408
  axios: 1.18.1
@@ -15426,6 +15446,12 @@ snapshots:
15426
15446
  openapi3-ts: 4.6.0
15427
15447
  typestyle: 2.4.0
15428
15448
 
15449
+ zova-module-a-openapi@5.1.53:
15450
+ dependencies:
15451
+ '@cabloy/json-schema-to-zod': 2.6.5
15452
+ openapi3-ts: 4.6.0
15453
+ typestyle: 2.4.0
15454
+
15429
15455
  zova-module-a-pay@5.0.7: {}
15430
15456
 
15431
15457
  zova-module-a-router@5.1.34: {}
@@ -15460,6 +15486,13 @@ snapshots:
15460
15486
  transitivePeerDependencies:
15461
15487
  - vue
15462
15488
 
15489
+ zova-module-a-table@5.1.40(vue@3.5.39(typescript@5.9.3)):
15490
+ dependencies:
15491
+ '@tanstack/table-core': 8.21.3
15492
+ '@tanstack/vue-table': 8.21.3(vue@3.5.39(typescript@5.9.3))
15493
+ transitivePeerDependencies:
15494
+ - vue
15495
+
15463
15496
  zova-module-a-zod@5.1.37:
15464
15497
  dependencies:
15465
15498
  '@cabloy/zod-errors-custom': link:packages-utils/zod-errors-custom
@@ -15487,6 +15520,8 @@ snapshots:
15487
15520
 
15488
15521
  zova-module-rest-resource@5.1.50: {}
15489
15522
 
15523
+ zova-module-rest-resource@5.1.51: {}
15524
+
15490
15525
  zova-suite-a-zova@5.1.155(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15491
15526
  dependencies:
15492
15527
  zova-module-a-api: 5.1.22
@@ -15521,6 +15556,40 @@ snapshots:
15521
15556
  - typescript
15522
15557
  - vue
15523
15558
 
15559
+ zova-suite-a-zova@5.1.156(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15560
+ dependencies:
15561
+ zova-module-a-api: 5.1.22
15562
+ zova-module-a-app: 5.1.26
15563
+ zova-module-a-bean: 5.1.33
15564
+ zova-module-a-behavior: 5.1.26
15565
+ zova-module-a-behaviors: 5.1.22
15566
+ zova-module-a-boundary: 5.1.22
15567
+ zova-module-a-command: 5.1.35
15568
+ zova-module-a-fetch: 5.1.25
15569
+ zova-module-a-form: 5.1.51(vue@3.5.39(typescript@5.9.3))
15570
+ zova-module-a-icon: 5.1.27
15571
+ zova-module-a-interceptor: 5.1.31
15572
+ zova-module-a-logger: 5.1.28
15573
+ zova-module-a-meta: 5.1.22
15574
+ zova-module-a-model: 5.1.36(vue@3.5.39(typescript@5.9.3))
15575
+ zova-module-a-openapi: 5.1.53
15576
+ zova-module-a-router: 5.1.34
15577
+ zova-module-a-routerstack: 5.1.27
15578
+ zova-module-a-routertabs: 5.1.34
15579
+ zova-module-a-ssr: 5.1.38
15580
+ zova-module-a-ssrhmr: 5.1.23
15581
+ zova-module-a-ssrserver: 5.1.26
15582
+ zova-module-a-style: 5.1.35
15583
+ zova-module-a-table: 5.1.40(vue@3.5.39(typescript@5.9.3))
15584
+ zova-module-a-zod: 5.1.37
15585
+ zova-module-a-zova: 5.1.103(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15586
+ transitivePeerDependencies:
15587
+ - '@vue/composition-api'
15588
+ - debug
15589
+ - supports-color
15590
+ - typescript
15591
+ - vue
15592
+
15524
15593
  zova@5.1.156(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15525
15594
  dependencies:
15526
15595
  zova-core: 5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3)
@@ -15532,6 +15601,17 @@ snapshots:
15532
15601
  - typescript
15533
15602
  - vue
15534
15603
 
15604
+ zova@5.1.157(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15605
+ dependencies:
15606
+ zova-core: 5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3)
15607
+ zova-suite-a-zova: 5.1.156(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15608
+ transitivePeerDependencies:
15609
+ - '@vue/composition-api'
15610
+ - debug
15611
+ - supports-color
15612
+ - typescript
15613
+ - vue
15614
+
15535
15615
  zwitch@1.0.5: {}
15536
15616
 
15537
15617
  zwitch@2.0.4: {}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-jsx",
3
- "version": "1.1.88",
3
+ "version": "1.1.89",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "Zova JSX",
6
6
  "keywords": [
@@ -50,7 +50,7 @@
50
50
  "@cabloy/word-utils": "^2.1.14",
51
51
  "typestyle": "^2.4.0",
52
52
  "vue": "^3.5.38",
53
- "zova-core": "^5.1.88"
53
+ "zova-core": "^5.1.89"
54
54
  },
55
55
  "devDependencies": {
56
56
  "clean-package": "^2.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova",
3
- "version": "5.1.157",
3
+ "version": "5.1.158",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -45,8 +45,8 @@
45
45
  "postpack": "clean-package restore"
46
46
  },
47
47
  "dependencies": {
48
- "zova-core": "^5.1.88",
49
- "zova-suite-a-zova": "^5.1.156"
48
+ "zova-core": "^5.1.89",
49
+ "zova-suite-a-zova": "^5.1.157"
50
50
  },
51
51
  "devDependencies": {
52
52
  "clean-package": "^2.2.0",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-core",
3
- "version": "5.1.88",
3
+ "version": "5.1.89",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "A vue3 framework with ioc",
6
6
  "keywords": [
@@ -14,28 +14,34 @@ declare module 'vue' {
14
14
  }
15
15
 
16
16
  export interface IComponentIntrinsicAttributes {
17
- class?: unknown;
18
- style?: unknown;
17
+ 'class'?: unknown;
18
+ 'style'?: unknown;
19
19
  // need not provide onClick/onXXX
20
20
  // onClick?: (e: MouseEvent) => void;
21
- nativeOnClick?: (e: MouseEvent) => void;
22
- nativeOnDblclick?: (e: MouseEvent) => void;
23
- nativeOnMouseenter?: (e: MouseEvent) => void;
24
- nativeOnMouseleave?: (e: MouseEvent) => void;
25
- nativeOnMouseover?: (e: MouseEvent) => void;
26
- nativeOnMouseout?: (e: MouseEvent) => void;
27
- nativeOnMousedown?: (e: MouseEvent) => void;
28
- nativeOnMouseup?: (e: MouseEvent) => void;
29
- nativeOnKeydown?: (e: KeyboardEvent) => void;
30
- nativeOnKeyup?: (e: KeyboardEvent) => void;
31
- nativeOnFocus?: (e: FocusEvent) => void;
32
- nativeOnBlur?: (e: FocusEvent) => void;
33
- nativeOnChange?: (e: Event) => void;
34
- nativeOnInput?: (e: Event) => void;
35
- nativeOnSubmit?: (e: Event) => void;
36
- nativeOnScroll?: (e: Event) => void;
37
- nativeOnWheel?: (e: WheelEvent) => void;
38
- nativeOnContextmenu?: (e: MouseEvent) => void;
21
+ 'nativeOnClick'?: (e: MouseEvent) => void;
22
+ 'nativeOnDblclick'?: (e: MouseEvent) => void;
23
+ 'nativeOnMouseenter'?: (e: MouseEvent) => void;
24
+ 'nativeOnMouseleave'?: (e: MouseEvent) => void;
25
+ 'nativeOnMouseover'?: (e: MouseEvent) => void;
26
+ 'nativeOnMouseout'?: (e: MouseEvent) => void;
27
+ 'nativeOnMousedown'?: (e: MouseEvent) => void;
28
+ 'nativeOnMouseup'?: (e: MouseEvent) => void;
29
+ 'nativeOnKeydown'?: (e: KeyboardEvent) => void;
30
+ 'nativeOnKeyup'?: (e: KeyboardEvent) => void;
31
+ 'nativeOnFocus'?: (e: FocusEvent) => void;
32
+ 'nativeOnBlur'?: (e: FocusEvent) => void;
33
+ 'nativeOnChange'?: (e: Event) => void;
34
+ 'nativeOnInput'?: (e: Event) => void;
35
+ 'nativeOnSubmit'?: (e: Event) => void;
36
+ 'nativeOnScroll'?: (e: Event) => void;
37
+ 'nativeOnWheel'?: (e: WheelEvent) => void;
38
+ 'nativeOnContextmenu'?: (e: MouseEvent) => void;
39
+ 'role'?: string;
40
+ 'title'?: string;
41
+ 'aria-atomic'?: boolean | 'true' | 'false';
42
+ 'aria-describedby'?: string;
43
+ 'aria-label'?: string;
44
+ 'aria-live'?: 'off' | 'assertive' | 'polite';
39
45
  }
40
46
 
41
47
  declare module 'vue/jsx-runtime' {
@@ -449,7 +449,7 @@ importers:
449
449
  specifier: ^7.6.2
450
450
  version: 7.8.5
451
451
  zova-cli-set-front:
452
- specifier: ^1.2.104
452
+ specifier: ^1.2.105
453
453
  version: link:../cli-set-front
454
454
  devDependencies:
455
455
  clean-package:
@@ -870,7 +870,7 @@ importers:
870
870
  specifier: ^5.1.88
871
871
  version: link:../zova-core
872
872
  zova-suite-a-zova:
873
- specifier: ^5.1.155
873
+ specifier: ^5.1.156
874
874
  version: link:../../src/suite-vendor/a-zova
875
875
  devDependencies:
876
876
  clean-package:
@@ -977,7 +977,7 @@ importers:
977
977
  specifier: ^5.0.1
978
978
  version: link:modules/a-rbac
979
979
  zova-module-rest-resource:
980
- specifier: ^5.1.50
980
+ specifier: ^5.1.51
981
981
  version: link:modules/rest-resource
982
982
 
983
983
  src/suite-vendor/a-cabloy/modules/a-rbac:
@@ -1070,7 +1070,7 @@ importers:
1070
1070
  specifier: ^5.1.22
1071
1071
  version: link:modules/a-boundary
1072
1072
  zova-module-a-command:
1073
- specifier: ^5.1.34
1073
+ specifier: ^5.1.35
1074
1074
  version: link:modules/a-command
1075
1075
  zova-module-a-fetch:
1076
1076
  specifier: ^5.1.25
@@ -1094,7 +1094,7 @@ importers:
1094
1094
  specifier: ^5.1.36
1095
1095
  version: link:modules/a-model
1096
1096
  zova-module-a-openapi:
1097
- specifier: ^5.1.52
1097
+ specifier: ^5.1.53
1098
1098
  version: link:modules/a-openapi
1099
1099
  zova-module-a-router:
1100
1100
  specifier: ^5.1.34
@@ -1118,7 +1118,7 @@ importers:
1118
1118
  specifier: ^5.1.35
1119
1119
  version: link:modules/a-style
1120
1120
  zova-module-a-table:
1121
- specifier: ^5.1.39
1121
+ specifier: ^5.1.40
1122
1122
  version: link:modules/a-table
1123
1123
  zova-module-a-zod:
1124
1124
  specifier: ^5.1.37
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-module-a-zova",
3
- "version": "5.1.103",
3
+ "version": "5.1.104",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "zova",
6
6
  "keywords": [
@@ -43,7 +43,7 @@
43
43
  "@cabloy/word-utils": "^2.1.14",
44
44
  "defu": "^6.1.7",
45
45
  "luxon": "^3.7.2",
46
- "zova-jsx": "^1.1.88"
46
+ "zova-jsx": "^1.1.89"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@cabloy/cli": "^3.1.29",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zova-suite-a-zova",
3
- "version": "5.1.156",
3
+ "version": "5.1.157",
4
4
  "gitHead": "2c5c19284bab738e492856189acb6fad74b8a7b7",
5
5
  "description": "zova",
6
6
  "license": "MIT",
@@ -32,7 +32,7 @@
32
32
  "zova-module-a-style": "^5.1.35",
33
33
  "zova-module-a-table": "^5.1.40",
34
34
  "zova-module-a-zod": "^5.1.37",
35
- "zova-module-a-zova": "^5.1.103"
35
+ "zova-module-a-zova": "^5.1.104"
36
36
  },
37
37
  "title": "a-zova"
38
38
  }