cabloy 5.1.159 → 5.1.160

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 (41) hide show
  1. package/.cabloy-version +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/package.json +1 -1
  4. package/repo-docs/.vitepress/config.mjs +11 -0
  5. package/repo-docs/backend/department-management.md +98 -0
  6. package/repo-docs/backend/menu-authorization.md +124 -0
  7. package/repo-docs/backend/rbac-authorization.md +117 -0
  8. package/repo-docs/backend/resource-field-update.md +2 -2
  9. package/repo-docs/backend/role-management.md +92 -0
  10. package/repo-docs/backend/shared-rbac-architecture.md +339 -0
  11. package/repo-docs/backend/user-management.md +92 -0
  12. package/repo-docs/frontend/model-resource-owner-pattern.md +2 -0
  13. package/repo-docs/frontend/permission-formscene-action-visibility-guide.md +5 -3
  14. package/repo-docs/frontend/table-action-visibility-permission-flow-guide.md +2 -0
  15. package/repo-docs/frontend/table-guide.md +75 -22
  16. package/repo-docs/frontend/table-resource-crud-cookbook.md +25 -4
  17. package/repo-docs/frontend/zova-table-source-reading-map.md +54 -19
  18. package/repo-docs/frontend/zova-table-under-the-hood.md +70 -39
  19. package/test-results/.last-run.json +20 -2
  20. package/test-results/a-commerce-ATP-ADDR-01-aut-11dea-ss-through-Web-self-service/error-context.md +238 -0
  21. package/test-results/a-commerce-ATP-SPC-01-Coup-ef380-mantic-Admin-field-controls/error-context.md +240 -0
  22. package/test-results/a-commerce-ATP-SPC-02-Cate-9f120-on-and-publication-controls/error-context.md +238 -0
  23. package/test-results/a-commerce-ATP-SPC-02-Prod-5f92a-on-and-publication-controls/error-context.md +238 -0
  24. package/test-results/a-commerce-ATP-SPC-02-SKU--2e61e-ency-and-lifecycle-controls/error-context.md +238 -0
  25. package/test-results/a-commerce-ATP-SPC-04-Stoc-fa895--readonly-and-mutation-free/error-context.md +235 -0
  26. package/test-results/a-commerce-ATP-SPC-05-syst-fb406-e-without-mutation-controls/error-context.md +238 -0
  27. package/test-results/a-commerce-Commerce-sessio-4e963-ie-selects-raw-server-theme/error-context.md +226 -0
  28. package/test-results/a-commerce-Commerce-theme--062fe--without-hydration-mismatch/error-context.md +229 -0
  29. package/test-results/a-commerce-PayPal-browser--8672c-t-or-open-an-awaiting-order/error-context.md +238 -0
  30. package/test-results/a-commerce-Payment-callbac-f56c2--reconciles-after-hydration/error-context.md +238 -0
  31. package/test-results/a-commerce-Payment-cancell-3fc74-ified-provider-confirmation/error-context.md +238 -0
  32. package/test-results/a-commerce-Phase-50-60-aut-71d61--observes-operator-shipment/error-context.md +238 -0
  33. package/test-results/a-commerce-Phase-60-custom-407cd-ecutes-a-whole-order-refund/error-context.md +238 -0
  34. package/test-results/cabloy-basic-ATP-BASIC-TAB-e7253-and-pins-configured-columns/error-context.md +240 -0
  35. package/test-results/markdown-ATP-SPC-02-Produc-9d5c2-link-toolbar-edits-Markdown/error-context.md +211 -0
  36. package/test-results/markdown-ATP-SPC-02-Produc-9d6ea-t-editor-and-saves-Markdown/error-context.md +238 -0
  37. package/vona/packages-cli/cli/package.json +1 -1
  38. package/vona/packages-cli/cli-set-api/cli/templates/tools/crudStart/boilerplate/src/entity/{{resourceName}}.tsx_ +1 -1
  39. package/vona/packages-cli/cli-set-api/package.json +1 -1
  40. package/vona/pnpm-lock.yaml +97 -11
  41. package/zova/pnpm-lock.yaml +16 -16
@@ -0,0 +1,238 @@
1
+ # Instructions
2
+
3
+ - Following Playwright test failed.
4
+ - Explain why, be concise, respect Playwright best practices.
5
+ - Provide a snippet of code with the fix, if possible.
6
+
7
+ # Test info
8
+
9
+ - Name: markdown.spec.ts >> ATP-SPC-02: Product Content opens the rich-text editor and saves Markdown
10
+ - Location: repo-e2e/specs/markdown.spec.ts:209:1
11
+
12
+ # Error details
13
+
14
+ ```
15
+ Error: expect(locator).toBeVisible() failed
16
+
17
+ Locator: locator('[contenteditable="true"]')
18
+ Expected: visible
19
+ Timeout: 5000ms
20
+ Error: element(s) not found
21
+
22
+ Call log:
23
+ - Expect "toBeVisible" with timeout 5000ms
24
+ - waiting for locator('[contenteditable="true"]')
25
+
26
+ ```
27
+
28
+ ```yaml
29
+ - text: 403 Access denied.
30
+ - button "Go Home"
31
+ ```
32
+
33
+ # Test source
34
+
35
+ ```ts
36
+ 185 | expect(webConsoleErrors).toEqual([]);
37
+ 186 | } finally {
38
+ 187 | if (skuId && headers) {
39
+ 188 | const response = await adminPage.request.delete(`${skuActionPath}/${skuId}`, { headers });
40
+ 189 | expect(response.ok()).toBeTruthy();
41
+ 190 | }
42
+ 191 | if (productId && headers) {
43
+ 192 | const response = await adminPage.request.delete(`${productActionPath}/${productId}`, {
44
+ 193 | headers,
45
+ 194 | });
46
+ 195 | expect(response.ok()).toBeTruthy();
47
+ 196 | }
48
+ 197 | if (categoryId && headers) {
49
+ 198 | const response = await adminPage.request.delete(`${categoryActionPath}/${categoryId}`, {
50
+ 199 | headers,
51
+ 200 | });
52
+ 201 | expect(response.ok()).toBeTruthy();
53
+ 202 | }
54
+ 203 | await webContext.close().catch(() => {});
55
+ 204 | await adminContext.close().catch(() => {});
56
+ 205 | }
57
+ 206 | },
58
+ 207 | );
59
+ 208 |
60
+ 209 | test(
61
+ 210 | 'ATP-SPC-02: Product Content opens the rich-text editor and saves Markdown',
62
+ 211 | { tag: ['@admin', '@flow', '@product'] },
63
+ 212 | async ({ browser }, testInfo) => {
64
+ 213 | test.setTimeout(60_000);
65
+ 214 | const suffix = `${testInfo.workerIndex}-${testInfo.parallelIndex ?? testInfo.retry}-${Date.now()}`;
66
+ 215 | const categoryName = `E2E Product Content Category ${suffix}`;
67
+ 216 | const productTitle = `E2E Product Content ${suffix}`;
68
+ 217 | const markdown = `# Product content ${suffix}
69
+ 218 |
70
+ 219 | - First benefit
71
+ 220 | - Second benefit
72
+ 221 |
73
+ 222 | - [ ] Open task
74
+ 223 | - [x] Completed task
75
+ 224 |
76
+ 225 | > Product quote
77
+ 226 |
78
+ 227 | \`\`\`ts
79
+ 228 | const product = '${suffix}';
80
+ 229 | \`\`\`
81
+ 230 |
82
+ 231 | ==highlighted text==
83
+ 232 |
84
+ 233 |
85
+ 234 | | Feature | Value |
86
+ 235 | | -------- | ------- |
87
+ 236 | | Material | Durable |`;
88
+ 237 | const adminContext = await browser.newContext();
89
+ 238 | const adminPage = await adminContext.newPage();
90
+ 239 | const adminPageErrors = collectPageErrors(adminPage);
91
+ 240 | const adminConsoleErrors = collectConsoleErrors(adminPage);
92
+ 241 | const productListPath = '/commerce-admin/rest/resource/commerce-catalog%3Aproduct';
93
+ 242 | const categoryActionPath = '/api/commerce/catalog/category';
94
+ 243 | const productActionPath = '/api/commerce/catalog/product';
95
+ 244 | let categoryId: number | string | undefined;
96
+ 245 | let productId: number | string | undefined;
97
+ 246 | let headers: { Authorization: string } | undefined;
98
+ 247 | try {
99
+ 248 | await adminPage.setViewportSize({ width: 1440, height: 900 });
100
+ 249 | await login(adminPage, '/commerce-admin/', 'admin', '123456', 'commerceAdmin');
101
+ 250 | const accessToken = (await adminContext.cookies()).find(
102
+ 251 | cookie => cookie.name === 'token',
103
+ 252 | )?.value;
104
+ 253 | expect(accessToken).toBeTruthy();
105
+ 254 | headers = { Authorization: `Bearer ${accessToken}` };
106
+ 255 |
107
+ 256 | const categoryResponse = await adminPage.request.post(categoryActionPath, {
108
+ 257 | data: { name: categoryName, published: false },
109
+ 258 | headers,
110
+ 259 | });
111
+ 260 | expect(categoryResponse.ok()).toBeTruthy();
112
+ 261 | categoryId = (await categoryResponse.json()).data;
113
+ 262 | expectTableIdentity(categoryId);
114
+ 263 |
115
+ 264 | const productResponse = await adminPage.request.post(productActionPath, {
116
+ 265 | data: {
117
+ 266 | categoryId,
118
+ 267 | title: productTitle,
119
+ 268 | published: false,
120
+ 269 | productContentForm: { descriptionMarkdown: markdown },
121
+ 270 | },
122
+ 271 | headers,
123
+ 272 | });
124
+ 273 | expect(productResponse.ok()).toBeTruthy();
125
+ 274 | productId = (await productResponse.json()).data;
126
+ 275 | expectTableIdentity(productId);
127
+ 276 |
128
+ 277 | await adminPage.goto(`${productListPath}/${productId}/edit`, { waitUntil: 'load' });
129
+ 278 | await expect(adminPage.locator('html')).toHaveAttribute(
130
+ 279 | 'data-zova-hydrated',
131
+ 280 | 'commerceAdmin',
132
+ 281 | );
133
+ 282 | expect(adminPageErrors).toEqual([]);
134
+ 283 | expect(adminConsoleErrors).toEqual([]);
135
+ 284 | const editor = adminPage.locator('[contenteditable="true"]');
136
+ > 285 | await expect(editor).toBeVisible();
137
+ | ^ Error: expect(locator).toBeVisible() failed
138
+ 286 | const toolbar = adminPage.getByRole('toolbar', { name: 'Markdown toolbar' });
139
+ 287 | await expect(toolbar).toBeVisible();
140
+ 288 | const undoButton = toolbar.getByRole('button', { name: 'Undo' });
141
+ 289 | await expect(toolbar.getByRole('combobox', { name: 'Code block language' })).toHaveCount(0);
142
+ 290 | const codeBlockToolbar = adminPage.getByRole('toolbar', { name: 'Code block language' });
143
+ 291 | await expect(codeBlockToolbar).toBeHidden();
144
+ 292 | await expect(toolbar.getByRole('button', { name: 'Bold' })).toHaveAttribute('type', 'button');
145
+ 293 | await expect(undoButton).toBeEnabled();
146
+ 294 | const insertTableButton = toolbar.getByRole('button', { name: 'Insert table' });
147
+ 295 | await expect(insertTableButton).toHaveAttribute('type', 'button');
148
+ 296 | await expect(insertTableButton).toHaveAttribute('aria-haspopup', 'grid');
149
+ 297 | await expect(insertTableButton).toHaveAttribute('aria-expanded', 'false');
150
+ 298 | await insertTableButton.click();
151
+ 299 | const tablePickerDialog = adminPage.locator('#markdown-table-size-picker');
152
+ 300 | const tablePicker = tablePickerDialog.locator('[role="grid"]');
153
+ 301 | await expect(tablePickerDialog).toBeVisible();
154
+ 302 | await expect(tablePicker).toHaveCount(1);
155
+ 303 | await expect(insertTableButton).toHaveAttribute('aria-expanded', 'true');
156
+ 304 | await expect(editor.locator('table')).toHaveCount(1);
157
+ 305 | const tablePickerCell = tablePicker.locator('[data-table-picker-cell="2-3"]');
158
+ 306 | await tablePickerCell.hover();
159
+ 307 | await expect(tablePickerDialog.locator('[aria-live="polite"]')).toHaveText(
160
+ 308 | 'Selected table size: 2 × 3',
161
+ 309 | );
162
+ 310 | await expect(tablePicker.locator('[aria-selected="true"]')).toHaveCount(6);
163
+ 311 | await expect(tablePicker.locator('[aria-selected="false"]').first()).toBeVisible();
164
+ 312 | await tablePickerCell.click();
165
+ 313 | await expect(tablePickerDialog).toHaveCount(0);
166
+ 314 | await expect(insertTableButton).toHaveAttribute('aria-expanded', 'false');
167
+ 315 | await expect(editor.locator('table')).toHaveCount(2);
168
+ 316 | await expect(editor.locator('table').last().locator('th')).toHaveCount(3);
169
+ 317 | await expect(editor.locator('table').last().locator('td')).toHaveCount(3);
170
+ 318 | const editorSurface = editor.locator('..');
171
+ 319 | await editor.locator('h1').click();
172
+ 320 | await expect(editorSurface).not.toHaveClass(/\bprose\b/);
173
+ 321 | const editorSurfaceClass = await editorSurface.getAttribute('class');
174
+ 322 | expect(editorSurfaceClass?.trim()).toBeTruthy();
175
+ 323 | await expect(editor).toBeFocused();
176
+ 324 | await expect(editor.locator('h1')).toHaveText(`Product content ${suffix}`);
177
+ 325 | await expect(editor.locator('ul:not([data-type="taskList"])')).toHaveCount(1);
178
+ 326 | await expect(editor.locator('blockquote')).toHaveText('Product quote');
179
+ 327 | const codeBlock = editor.locator('pre code');
180
+ 328 | const codeBlockLanguage = codeBlockToolbar.getByRole('combobox', {
181
+ 329 | name: 'Code block language',
182
+ 330 | });
183
+ 331 | await expect(codeBlockToolbar).toBeHidden();
184
+ 332 | await expect(codeBlock).toHaveClass(/\blanguage-ts\b/);
185
+ 333 | await expect(codeBlock).toHaveText(`const product = '${suffix}';`);
186
+ 334 | await expect(codeBlock.locator('span[class*="hljs-"]')).not.toHaveCount(0);
187
+ 335 | await codeBlock.click();
188
+ 336 | await expect(codeBlockToolbar).toBeVisible();
189
+ 337 | await expect(codeBlockLanguage).toBeEnabled();
190
+ 338 | await expect(codeBlockLanguage).toHaveValue('typescript');
191
+ 339 | await codeBlockLanguage.selectOption('python');
192
+ 340 | await expect(codeBlock).toHaveClass(/\blanguage-python\b/);
193
+ 341 | await expect(codeBlock.locator('span[class*="hljs-"]')).not.toHaveCount(0);
194
+ 342 | await editor.locator('h1').click();
195
+ 343 | await expect(codeBlockToolbar).toBeHidden();
196
+ 344 | await expect(editor.locator('mark')).toHaveText('highlighted text');
197
+ 345 | await expect(editor.locator('table th')).toHaveCount(5);
198
+ 346 | await expect(editor.locator('table td')).toHaveCount(5);
199
+ 347 | await expect(editor.locator('h1')).toHaveCSS('font-weight', '700');
200
+ 348 | await expect(editor.locator('ul:not([data-type="taskList"])')).toHaveCSS(
201
+ 349 | 'list-style-type',
202
+ 350 | 'disc',
203
+ 351 | );
204
+ 352 | await expect(editor.locator('ul[data-type="taskList"]')).toHaveCount(1);
205
+ 353 | await expect(editor.locator('input[type="checkbox"]')).toHaveCount(2);
206
+ 354 | await expect(editor.locator('input[type="checkbox"]').nth(0)).not.toBeChecked();
207
+ 355 | await expect(editor.locator('input[type="checkbox"]').nth(1)).toBeChecked();
208
+ 356 | await expect(editor.locator('blockquote')).toHaveCSS('border-left-width', '4px');
209
+ 357 | await expect(editor.locator('pre')).toHaveCSS('overflow-x', 'auto');
210
+ 358 | await expect(editor.locator('table th').first()).toHaveCSS('font-weight', '600');
211
+ 359 | await editor.locator('h1').selectText();
212
+ 360 | const boldButton = toolbar.getByRole('button', { name: 'Bold' });
213
+ 361 | await boldButton.click();
214
+ 362 | await expect(boldButton).toHaveAttribute('aria-pressed', 'true');
215
+ 363 | await undoButton.click();
216
+ 364 | await expect(boldButton).toHaveAttribute('aria-pressed', 'false');
217
+ 365 | await expect(toolbar.getByRole('button', { name: 'Redo' })).toBeEnabled();
218
+ 366 |
219
+ 367 | const tableToolbar = adminPage.getByRole('toolbar', { name: 'Table toolbar' });
220
+ 368 | const insertedTable = editor.locator('table').last();
221
+ 369 | await editor.locator('h1').click();
222
+ 370 | await expect(tableToolbar).toBeHidden();
223
+ 371 | await insertedTable.locator('td').first().click();
224
+ 372 | expect(adminPageErrors).toEqual([]);
225
+ 373 | expect(adminConsoleErrors).toEqual([]);
226
+ 374 | await expect(tableToolbar).toBeVisible();
227
+ 375 | expect(adminPageErrors).toEqual([]);
228
+ 376 | expect(adminConsoleErrors).toEqual([]);
229
+ 377 | await expect(tableToolbar.getByRole('button', { name: 'Add row before' })).toHaveAttribute(
230
+ 378 | 'type',
231
+ 379 | 'button',
232
+ 380 | );
233
+ 381 | await tableToolbar.getByRole('button', { name: 'Add row before' }).click();
234
+ 382 | await expect(insertedTable.locator('td')).toHaveCount(6);
235
+ 383 | expect(adminPageErrors).toEqual([]);
236
+ 384 | await tableToolbar.getByRole('button', { name: 'Delete row' }).click();
237
+ 385 | await expect(insertedTable.locator('td')).toHaveCount(3);
238
+ ```
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-cli",
3
- "version": "1.1.144",
3
+ "version": "1.1.145",
4
4
  "gitHead": "a79189b882c17af5911573896a781bbb0046d37d",
5
5
  "description": "vona cli",
6
6
  "keywords": [
@@ -11,7 +11,7 @@ export interface IEntityOptions<%=argv.resourceNameCapitalize%> extends IDecorat
11
11
  @Entity<IEntityOptions<%=argv.resourceNameCapitalize%>>('<%=argv.moduleResourceName%>', {
12
12
  openapi: { title: $locale('<%=argv.resourceNameCapitalize%>') },
13
13
  fields: {
14
- id: $makeMetadata(ZovaRender.order(1, 'core'), ZovaRender.column({ width: 50, fixed: 'left' })),
14
+ id: $makeMetadata(ZovaRender.order(1, 'core'), ZovaRender.column({ width: 70, fixed: 'left' })),
15
15
  iid: $makeMetadata(ZovaRender.visible(false)),
16
16
  deleted: $makeMetadata(ZovaRender.visible(false)),
17
17
  createdAt: $makeMetadata(
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vona-cli-set-api",
3
- "version": "1.1.142",
3
+ "version": "1.1.143",
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.155
568
- version: 5.1.155(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
567
+ specifier: ^5.1.156
568
+ version: 5.1.156(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)
@@ -582,8 +582,8 @@ importers:
582
582
  specifier: ^5.1.34
583
583
  version: 5.1.34
584
584
  zova-module-a-form:
585
- specifier: ^5.1.50
586
- version: 5.1.50(vue@3.5.39(typescript@5.9.3))
585
+ specifier: ^5.1.51
586
+ version: 5.1.51(vue@3.5.39(typescript@5.9.3))
587
587
  zova-module-a-icon:
588
588
  specifier: ^5.1.27
589
589
  version: 5.1.27
@@ -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.51
598
- version: 5.1.51
597
+ specifier: ^5.1.52
598
+ version: 5.1.52
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.38
616
- version: 5.1.38(vue@3.5.39(typescript@5.9.3))
615
+ specifier: ^5.1.39
616
+ version: 5.1.39(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.49
622
- version: 5.1.49
621
+ specifier: ^5.1.50
622
+ version: 5.1.50
623
623
 
624
624
  .zova-rest/cabloy-basic-web:
625
625
  dependencies:
@@ -1613,7 +1613,7 @@ importers:
1613
1613
  specifier: ^5.0.3
1614
1614
  version: link:modules/a-markdown
1615
1615
  vona-module-a-rbac:
1616
- specifier: ^5.0.4
1616
+ specifier: ^5.0.5
1617
1617
  version: link:modules/a-rbac
1618
1618
  vona-module-a-socket:
1619
1619
  specifier: workspace:^
@@ -8986,6 +8986,9 @@ packages:
8986
8986
  zova-module-a-form@5.1.50:
8987
8987
  resolution: {integrity: sha512-pfC9pL9SDO7HI7453oTyWbplBBTG+yz31K7Q6ERkSr3YnSPWl5gub93DL4cRPObnotDzrDDb+LWU9JuAdmHmQw==}
8988
8988
 
8989
+ zova-module-a-form@5.1.51:
8990
+ resolution: {integrity: sha512-/UlaorIX2SpN/ozGsXMaklfNuS64as322jD3+0wlfj9FVyhV1nz0wEBpYSGgsiX+KFLJicwpNqAz/kMI7WfvUw==}
8991
+
8989
8992
  zova-module-a-icon@5.1.27:
8990
8993
  resolution: {integrity: sha512-KAvHkK6YsN2H5iQgl2IBQHIvvFDnfzPCxDzuQyTnAiCgSczD/UFO6bLZqWVT2m/qfsmJXMzWAWHPdU02J3ANZQ==}
8991
8994
 
@@ -9010,6 +9013,9 @@ packages:
9010
9013
  zova-module-a-openapi@5.1.51:
9011
9014
  resolution: {integrity: sha512-7oi32wKEnpnVhrC5jS5rv1pDan/NjZbj4rj9sUiGvwXU5pwG5O6XiiA/IHoyLVhHu4EkeE4ldYow9sQVKDquMw==}
9012
9015
 
9016
+ zova-module-a-openapi@5.1.52:
9017
+ resolution: {integrity: sha512-pUbyEI2tiJ2tEih/qFvfYYR/yqnWZnK0QqyCNfgkD2Nvn4EY+iyIHISLZhVtWDJbYMXcqfXlxvb8Ltvm+GD/PA==}
9018
+
9013
9019
  zova-module-a-pay@5.0.7:
9014
9020
  resolution: {integrity: sha512-LHIArspqUeT3aQ+b8AvxrkYOV9nFnfjTWoQ/zQNliQhy1EllooVFB+AhRY58rhmh4ru/xbem+4Wjuptl9FdU+Q==}
9015
9021
 
@@ -9037,6 +9043,9 @@ packages:
9037
9043
  zova-module-a-table@5.1.38:
9038
9044
  resolution: {integrity: sha512-q4URU+D1CbGtKAOhFnujaSMV1Py5twil3eI6lRz3bFL0p79Lr+hNyjqaLpLKoBAnHKRSW/XHy/LvCYGMJ1C89w==}
9039
9045
 
9046
+ zova-module-a-table@5.1.39:
9047
+ resolution: {integrity: sha512-MhYYlOIFJ32m61xtDCnIHfWf/g17g2HvEL7zRd5k1As7+or/9FPe9DbmFpHvjk7vp/Yba6oTqV0D5GbueJt/OA==}
9048
+
9040
9049
  zova-module-a-zod@5.1.37:
9041
9050
  resolution: {integrity: sha512-rXHN9rKbum9w3gDSnC/pIusG2d2FGJOcIauf8jrbT96f+Olk4Q3iV3t2V92mxiLCh9kMvBJPfcOgJFW7pRB5Fw==}
9042
9051
 
@@ -9055,18 +9064,27 @@ packages:
9055
9064
  zova-module-rest-resource@5.1.49:
9056
9065
  resolution: {integrity: sha512-tLf3BLov4GnV1QPivvLro6T2sNdriDZ8vZMsghuUN7dl+PRCG2pI0q9hBCrqe2faRSIcVUXowwnEbEynmaM7Zg==}
9057
9066
 
9067
+ zova-module-rest-resource@5.1.50:
9068
+ resolution: {integrity: sha512-BZp4W9j4DhuQt9mk/jlquRFemzTBHe8saNtV/EUT6smAVj+7Li8AYkeaDUofKbssouqbOxHoFb0Qrlmd+1kZOw==}
9069
+
9058
9070
  zova-suite-a-zova@5.1.153:
9059
9071
  resolution: {integrity: sha512-Q7R6GL5O/Tlqk4cnFYumMR2eeCwAqfnTtFrYQuuQMpz7BmYhAPmMmJQWF2reHlRjG6B4dbOPZ5pxl1iWagY7PA==}
9060
9072
 
9061
9073
  zova-suite-a-zova@5.1.154:
9062
9074
  resolution: {integrity: sha512-ii1qFxaBNc4PpNSj+sKgiH0Ryefr4KE0Gb5M8o2Df0hoe8//3uM7QK02GyQDKAK+bu6Q+7mwBZFW8hcD8TrEYw==}
9063
9075
 
9076
+ zova-suite-a-zova@5.1.155:
9077
+ resolution: {integrity: sha512-w4+mlwOJ3DF+Bl9N1hkZBbgNW0UouP3/Xaw8PtiNEpmmr/ScWj+/+l85RTr/q9F+Qw/hjDCWTLwy4GBukTiBag==}
9078
+
9064
9079
  zova@5.1.154:
9065
9080
  resolution: {integrity: sha512-QF0f+wwLeuf18hsmZj1/3G/AQ9cNQYMKZiCoBBsTDh7oIhaxsmI5wxtjo59HiOEkk5ZmWPHqwjA4iepTLoKqeg==}
9066
9081
 
9067
9082
  zova@5.1.155:
9068
9083
  resolution: {integrity: sha512-TbaG8D/s/ML5gGBoaLeW92bjYyDd+8AU+Vw3y3cQopOtnthGLMiLnssKmzUOavyOiVGb25tyNAqgAWrGz4z/vQ==}
9069
9084
 
9085
+ zova@5.1.156:
9086
+ resolution: {integrity: sha512-LawJuQhiR+M+BdFkLYEz1wLz0zQa2IuZFAR0Vtq/dcNMX1Jus9g2iem/guNbavgeNP8aXRa+P4vCnaFynnWC/w==}
9087
+
9070
9088
  zwitch@1.0.5:
9071
9089
  resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==}
9072
9090
 
@@ -15421,6 +15439,14 @@ snapshots:
15421
15439
  - '@vue/composition-api'
15422
15440
  - vue
15423
15441
 
15442
+ zova-module-a-form@5.1.51(vue@3.5.39(typescript@5.9.3)):
15443
+ dependencies:
15444
+ '@tanstack/vue-form': 1.33.2(vue@3.5.39(typescript@5.9.3))
15445
+ '@tanstack/vue-store': 0.11.0(vue@3.5.39(typescript@5.9.3))
15446
+ transitivePeerDependencies:
15447
+ - '@vue/composition-api'
15448
+ - vue
15449
+
15424
15450
  zova-module-a-icon@5.1.27: {}
15425
15451
 
15426
15452
  zova-module-a-interceptor@5.1.31: {}
@@ -15467,6 +15493,12 @@ snapshots:
15467
15493
  openapi3-ts: 4.6.0
15468
15494
  typestyle: 2.4.0
15469
15495
 
15496
+ zova-module-a-openapi@5.1.52:
15497
+ dependencies:
15498
+ '@cabloy/json-schema-to-zod': 2.6.5
15499
+ openapi3-ts: 4.6.0
15500
+ typestyle: 2.4.0
15501
+
15470
15502
  zova-module-a-pay@5.0.7: {}
15471
15503
 
15472
15504
  zova-module-a-router@5.1.34: {}
@@ -15501,6 +15533,13 @@ snapshots:
15501
15533
  transitivePeerDependencies:
15502
15534
  - vue
15503
15535
 
15536
+ zova-module-a-table@5.1.39(vue@3.5.39(typescript@5.9.3)):
15537
+ dependencies:
15538
+ '@tanstack/table-core': 8.21.3
15539
+ '@tanstack/vue-table': 8.21.3(vue@3.5.39(typescript@5.9.3))
15540
+ transitivePeerDependencies:
15541
+ - vue
15542
+
15504
15543
  zova-module-a-zod@5.1.37:
15505
15544
  dependencies:
15506
15545
  '@cabloy/zod-errors-custom': link:packages-utils/zod-errors-custom
@@ -15532,6 +15571,8 @@ snapshots:
15532
15571
 
15533
15572
  zova-module-rest-resource@5.1.49: {}
15534
15573
 
15574
+ zova-module-rest-resource@5.1.50: {}
15575
+
15535
15576
  zova-suite-a-zova@5.1.153(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15536
15577
  dependencies:
15537
15578
  zova-module-a-api: 5.1.22
@@ -15600,6 +15641,40 @@ snapshots:
15600
15641
  - typescript
15601
15642
  - vue
15602
15643
 
15644
+ zova-suite-a-zova@5.1.155(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15645
+ dependencies:
15646
+ zova-module-a-api: 5.1.22
15647
+ zova-module-a-app: 5.1.26
15648
+ zova-module-a-bean: 5.1.33
15649
+ zova-module-a-behavior: 5.1.26
15650
+ zova-module-a-behaviors: 5.1.22
15651
+ zova-module-a-boundary: 5.1.22
15652
+ zova-module-a-command: 5.1.34
15653
+ zova-module-a-fetch: 5.1.25
15654
+ zova-module-a-form: 5.1.51(vue@3.5.39(typescript@5.9.3))
15655
+ zova-module-a-icon: 5.1.27
15656
+ zova-module-a-interceptor: 5.1.31
15657
+ zova-module-a-logger: 5.1.28
15658
+ zova-module-a-meta: 5.1.22
15659
+ zova-module-a-model: 5.1.36(vue@3.5.39(typescript@5.9.3))
15660
+ zova-module-a-openapi: 5.1.52
15661
+ zova-module-a-router: 5.1.34
15662
+ zova-module-a-routerstack: 5.1.27
15663
+ zova-module-a-routertabs: 5.1.34
15664
+ zova-module-a-ssr: 5.1.38
15665
+ zova-module-a-ssrhmr: 5.1.23
15666
+ zova-module-a-ssrserver: 5.1.26
15667
+ zova-module-a-style: 5.1.35
15668
+ zova-module-a-table: 5.1.39(vue@3.5.39(typescript@5.9.3))
15669
+ zova-module-a-zod: 5.1.37
15670
+ zova-module-a-zova: 5.1.103(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15671
+ transitivePeerDependencies:
15672
+ - '@vue/composition-api'
15673
+ - debug
15674
+ - supports-color
15675
+ - typescript
15676
+ - vue
15677
+
15603
15678
  zova@5.1.154(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15604
15679
  dependencies:
15605
15680
  zova-core: 5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3)
@@ -15622,6 +15697,17 @@ snapshots:
15622
15697
  - typescript
15623
15698
  - vue
15624
15699
 
15700
+ zova@5.1.156(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3)):
15701
+ dependencies:
15702
+ zova-core: 5.1.88(patch_hash=144450bd7a567a6067e5857c0cf4c780981b7e90bc48745c09e1696a9b6f1b97)(typescript@5.9.3)
15703
+ zova-suite-a-zova: 5.1.155(typescript@5.9.3)(vue@3.5.39(typescript@5.9.3))
15704
+ transitivePeerDependencies:
15705
+ - '@vue/composition-api'
15706
+ - debug
15707
+ - supports-color
15708
+ - typescript
15709
+ - vue
15710
+
15625
15711
  zwitch@1.0.5: {}
15626
15712
 
15627
15713
  zwitch@2.0.4: {}
@@ -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.102
452
+ specifier: ^1.2.104
453
453
  version: link:../cli-set-front
454
454
  devDependencies:
455
455
  clean-package:
@@ -558,7 +558,7 @@ importers:
558
558
  specifier: ^1.1.17
559
559
  version: link:../../packages-utils/zova-openapi
560
560
  zova-vite:
561
- specifier: ^1.1.44
561
+ specifier: ^1.1.45
562
562
  version: link:../../packages-utils/zova-vite
563
563
  devDependencies:
564
564
  clean-package:
@@ -761,8 +761,8 @@ importers:
761
761
  specifier: ^7.28.6
762
762
  version: 7.29.7(@babel/core@7.29.7)
763
763
  '@cabloy/dotenv':
764
- specifier: ^1.2.8
765
- version: 1.2.8
764
+ specifier: ^1.2.9
765
+ version: 1.2.9
766
766
  '@cabloy/extend':
767
767
  specifier: ^3.2.8
768
768
  version: 3.2.8
@@ -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.154
873
+ specifier: ^5.1.155
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.49
980
+ specifier: ^5.1.50
981
981
  version: link:modules/rest-resource
982
982
 
983
983
  src/suite-vendor/a-cabloy/modules/a-rbac:
@@ -1076,7 +1076,7 @@ importers:
1076
1076
  specifier: ^5.1.25
1077
1077
  version: link:modules/a-fetch
1078
1078
  zova-module-a-form:
1079
- specifier: ^5.1.50
1079
+ specifier: ^5.1.51
1080
1080
  version: link:modules/a-form
1081
1081
  zova-module-a-icon:
1082
1082
  specifier: ^5.1.27
@@ -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.51
1097
+ specifier: ^5.1.52
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.38
1121
+ specifier: ^5.1.39
1122
1122
  version: link:modules/a-table
1123
1123
  zova-module-a-zod:
1124
1124
  specifier: ^5.1.37
@@ -2311,8 +2311,8 @@ packages:
2311
2311
  '@cabloy/deps@1.1.8':
2312
2312
  resolution: {integrity: sha512-CWaVGSwPI5qLSuRF+WmB+1CwbRe9+PR+nkUmKc9/Dj7sB75qPXLTYACn23T/jIylbDbWCL82LoOa455Vgseyeg==}
2313
2313
 
2314
- '@cabloy/dotenv@1.2.8':
2315
- resolution: {integrity: sha512-1Xn0IsfMVWSZW0Gi7MBGbW6JL8kD7GN/B199RbDlIIy3PbSTdbKF2Gh/NIR2FNCChD1kQaG0FW/mR1tKgMNxbg==}
2314
+ '@cabloy/dotenv@1.2.9':
2315
+ resolution: {integrity: sha512-iR7KWj1YI2SiTjlcSMnZ/wYw/PMcgAJRvOHdWDrwehY8YOuG6uKPTez1hTCR4kfrhiBnZwM/acZvmqjflx18GA==}
2316
2316
 
2317
2317
  '@cabloy/extend@3.2.8':
2318
2318
  resolution: {integrity: sha512-BrXYUtlC1kFY33hNxL/hEaS7wW8TsOuu22k0VCEtzg2iw+USkb4BqONth5Uv2pJcIlDMeWx8A8aUIRF3WQ2ckQ==}
@@ -5138,8 +5138,8 @@ packages:
5138
5138
  capital-case@1.0.4:
5139
5139
  resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==}
5140
5140
 
5141
- cascade-extend@2.2.8:
5142
- resolution: {integrity: sha512-cs8DkxDoYv0YSFnbZyn/xaaodKgp+iV9xv8IeAWpYRyM5vxIXGKS8Ej0jLwneFFYTaF7juIjOlktOjEidDZURA==}
5141
+ cascade-extend@2.2.9:
5142
+ resolution: {integrity: sha512-YevoTZSywFhLNnHWh9GSzHgrwAJmsDzR0sQeOZ8BG5NlwF8MyH0457ocLVyGgB/m9rTHmRXJkzzvPuDcjpTtfQ==}
5143
5143
 
5144
5144
  ccount@1.1.0:
5145
5145
  resolution: {integrity: sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==}
@@ -8834,9 +8834,9 @@ snapshots:
8834
8834
 
8835
8835
  '@cabloy/deps@1.1.8': {}
8836
8836
 
8837
- '@cabloy/dotenv@1.2.8':
8837
+ '@cabloy/dotenv@1.2.9':
8838
8838
  dependencies:
8839
- cascade-extend: 2.2.8
8839
+ cascade-extend: 2.2.9
8840
8840
  dotenv: 16.6.1
8841
8841
  dotenv-expand: 11.0.7
8842
8842
  globby: 16.2.0
@@ -11389,7 +11389,7 @@ snapshots:
11389
11389
  tslib: 2.8.1
11390
11390
  upper-case-first: 2.0.2
11391
11391
 
11392
- cascade-extend@2.2.8:
11392
+ cascade-extend@2.2.9:
11393
11393
  dependencies:
11394
11394
  '@cabloy/extend': 3.2.8
11395
11395