cabloy 5.1.247 → 5.1.249
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 +1 -1
- package/.vscode/settings.json +1 -2
- package/CHANGELOG.md +27 -0
- package/package.json +1 -7
- package/repo-docs/frontend/column-configuration-guide.md +3 -1
- package/repo-docs/frontend/table-guide.md +27 -2
- package/repo-e2e/specs/a-commerce.spec.ts +32 -0
- package/repo-e2e/specs/cabloy-basic.spec.ts +1236 -0
- package/vona/package.original.json +1 -7
- package/vona/pnpm-lock.yaml +139 -1011
- package/zova/package.original.json +0 -6
- package/zova/packages-cli/cli/package.json +2 -2
- package/zova/packages-cli/cli-set-front/package.json +2 -2
- package/zova/packages-utils/zova-vite/package.json +1 -1
- package/zova/packages-utils/zova-vite/src/teleports.ts +7 -0
- package/zova/packages-utils/zova-vite/test/teleports.test.ts +114 -0
- package/zova/packages-zova/zova/package.json +2 -2
- package/zova/pnpm-lock.yaml +6 -958
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/controller.tsx +267 -0
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/render.header.tsx +42 -10
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/render.locale.tsx +10 -5
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/render.tabs.tsx +97 -11
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/render.theme.tsx +19 -10
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/render.user.tsx +11 -0
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/component/layoutAdmin/style.ts +128 -0
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/config/locale/en-us.ts +6 -0
- package/zova/src/suite/a-home/modules/home-layoutadmin/src/config/locale/zh-cn.ts +6 -0
- package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/component/layoutWeb.ts +10 -8
- package/zova/src/suite/a-home/modules/home-layoutweb/src/.metadata/index.ts +25 -0
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/controller.tsx +83 -0
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.header.tsx +37 -8
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.locale.tsx +25 -8
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.tabs.tsx +3 -1
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.theme.tsx +10 -5
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/render.user.tsx +64 -21
- package/zova/src/suite/a-home/modules/home-layoutweb/src/component/layoutWeb/style.ts +42 -0
- package/zova/src/suite/a-home/modules/home-layoutweb/src/config/locale/en-us.ts +4 -0
- package/zova/src/suite/a-home/modules/home-layoutweb/src/config/locale/zh-cn.ts +4 -0
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/rowOperations/controller.tsx +2 -1
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/table/controller.tsx +6 -10
- package/zova/src/suite/cabloy-basic/modules/basic-table/src/component/table/render.tsx +9 -6
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssr.ts +17 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/lib/ssrProfile.ts +15 -0
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/src/types/ssr.ts +1 -0
- package/zova/src/suite-vendor/a-zova/modules/a-ssr/test/lib/ssrProfile.test.ts +23 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/package.json +1 -1
- package/zova/src/suite-vendor/a-zova/modules/a-ssrserver/src/service/ssrHandler.ts +11 -11
- package/zova/src/suite-vendor/a-zova/package.json +3 -3
- package/vona/.textlintrc.json +0 -19
|
@@ -31,7 +31,6 @@
|
|
|
31
31
|
"format:fix": "oxfmt --write",
|
|
32
32
|
"lint": "oxlint",
|
|
33
33
|
"lint:fix": "oxlint --fix",
|
|
34
|
-
"docs:fix": "textlint --fix ./packages-docs/**/*.md",
|
|
35
34
|
"dev:ssr:admin": "npm run prerun && quasar dev --mode ssr --flavor admin",
|
|
36
35
|
"build:ssr:admin": "npm run prerun && quasar build --mode ssr --flavor admin",
|
|
37
36
|
"preview:ssr:admin": "concurrently \"node ./dist-mock/index.js\" \"node ./dist/ssr-admin/index.js\"",
|
|
@@ -89,11 +88,6 @@
|
|
|
89
88
|
"vite": "^8.3.4",
|
|
90
89
|
"vite-plugin-fake-server-turbo": "^3.0.18",
|
|
91
90
|
"zova-vite": "workspace:^",
|
|
92
|
-
"textlint": "^15.7.0",
|
|
93
|
-
"textlint-rule-en-no-mixed-period": "^3.0.2",
|
|
94
|
-
"textlint-rule-ja-no-mixed-period": "^3.0.2",
|
|
95
|
-
"textlint-rule-ja-space-between-half-and-full-width": "^2.4.2",
|
|
96
|
-
"textlint-rule-period-in-list-item": "^1.0.1",
|
|
97
91
|
"oxfmt": "^0.74.0",
|
|
98
92
|
"oxlint": "^1.89.0"
|
|
99
93
|
},
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.123",
|
|
4
4
|
"gitHead": "6f675a8cc46d596142c591c28a40cc4d82fcc6cc",
|
|
5
5
|
"description": "zova cli",
|
|
6
6
|
"keywords": [
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"@cabloy/process-helper": "^3.1.9",
|
|
45
45
|
"fs-extra": "^11.3.5",
|
|
46
46
|
"semver": "^7.6.2",
|
|
47
|
-
"zova-cli-set-front": "^1.2.
|
|
47
|
+
"zova-cli-set-front": "^1.2.121"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"clean-package": "^2.2.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova-cli-set-front",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.121",
|
|
4
4
|
"gitHead": "6f675a8cc46d596142c591c28a40cc4d82fcc6cc",
|
|
5
5
|
"description": "zova cli-set-front",
|
|
6
6
|
"keywords": [
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
"vite": "^8.3.4",
|
|
71
71
|
"yaml": "^2.8.3",
|
|
72
72
|
"zova-openapi": "^1.1.17",
|
|
73
|
-
"zova-vite": "^1.1.
|
|
73
|
+
"zova-vite": "^1.1.52"
|
|
74
74
|
},
|
|
75
75
|
"devDependencies": {
|
|
76
76
|
"clean-package": "^2.2.0",
|
|
@@ -5,6 +5,13 @@ export function collectTeleports(html, teleports) {
|
|
|
5
5
|
export function renderTeleports(teleports) {
|
|
6
6
|
if (!teleports) return '';
|
|
7
7
|
return Object.entries(teleports).reduce((all, [key, value]) => {
|
|
8
|
+
// This serializer creates dedicated containers, not arbitrary CSS selector targets.
|
|
9
|
+
const target = /^#[a-z_][\w-]*/i.exec(key);
|
|
10
|
+
if (!target || target[0] !== key) {
|
|
11
|
+
throw new Error(
|
|
12
|
+
`Unsupported SSR Teleport target ${JSON.stringify(key)}. Only simple #id targets are supported (ASCII letter or underscore first, then letters, digits, underscores, or hyphens). Use a dedicated Teleport container, not body.`,
|
|
13
|
+
);
|
|
14
|
+
}
|
|
8
15
|
return `${all}<div id="${key.slice(1)}">${value}</div>`;
|
|
9
16
|
}, '');
|
|
10
17
|
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { createSSRApp, h, Teleport } from '@cabloy/vue-runtime-dom';
|
|
2
|
+
import { renderToString } from '@cabloy/vue-server-renderer';
|
|
3
|
+
import assert from 'node:assert/strict';
|
|
4
|
+
import { test } from 'node:test';
|
|
5
|
+
|
|
6
|
+
import { collectTeleports, renderTeleports } from '../src/teleports.ts';
|
|
7
|
+
|
|
8
|
+
const anchors = '<!--teleport start anchor--><!--teleport anchor-->';
|
|
9
|
+
|
|
10
|
+
async function renderTeleport(to: string, disabled: boolean) {
|
|
11
|
+
const context: { teleports?: Record<string, string> } = {};
|
|
12
|
+
const app = createSSRApp({
|
|
13
|
+
render: () => h('main', [h(Teleport, { to, disabled }, h('span', 'action'))]),
|
|
14
|
+
});
|
|
15
|
+
const html = await renderToString(app, context);
|
|
16
|
+
assert.ok(context.teleports);
|
|
17
|
+
return { html, teleports: context.teleports };
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
function assertUnsupportedTarget(target: string, fragment = '') {
|
|
21
|
+
assert.throws(
|
|
22
|
+
() => renderTeleports({ [target]: fragment }),
|
|
23
|
+
error => {
|
|
24
|
+
assert.ok(error instanceof Error);
|
|
25
|
+
assert.ok(error.message.includes(JSON.stringify(target)));
|
|
26
|
+
assert.match(error.message, /simple #id/);
|
|
27
|
+
assert.match(error.message, /dedicated.*container/i);
|
|
28
|
+
return true;
|
|
29
|
+
},
|
|
30
|
+
);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
test('empty Teleport maps produce no containers', () => {
|
|
34
|
+
assert.equal(renderTeleports(undefined), '');
|
|
35
|
+
assert.equal(renderTeleports(null), '');
|
|
36
|
+
assert.equal(renderTeleports({}), '');
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('simple ID targets retain empty fragments, anchors, and entry order', () => {
|
|
40
|
+
const teleports = {
|
|
41
|
+
'#modal-root': '<p>first & second</p>',
|
|
42
|
+
'#v-0': anchors,
|
|
43
|
+
'#v-0-0': '',
|
|
44
|
+
'#_overlay2': '<span>last</span>',
|
|
45
|
+
};
|
|
46
|
+
assert.equal(
|
|
47
|
+
renderTeleports(teleports),
|
|
48
|
+
'<div id="modal-root"><p>first & second</p></div>' +
|
|
49
|
+
`<div id="v-0">${anchors}</div>` +
|
|
50
|
+
'<div id="v-0-0"></div><div id="_overlay2"><span>last</span></div>',
|
|
51
|
+
);
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
test('unsupported selectors and unsafe IDs fail even with empty fragments', () => {
|
|
55
|
+
const targets = [
|
|
56
|
+
'body',
|
|
57
|
+
'head',
|
|
58
|
+
'html',
|
|
59
|
+
'.modal',
|
|
60
|
+
'[data-modal]',
|
|
61
|
+
'',
|
|
62
|
+
'#',
|
|
63
|
+
'#1modal',
|
|
64
|
+
'#modal .child',
|
|
65
|
+
'#modal>span',
|
|
66
|
+
'#modal,#other',
|
|
67
|
+
'#modal.active',
|
|
68
|
+
'#modal:focus',
|
|
69
|
+
'#modal[open]',
|
|
70
|
+
'#modal\\:child',
|
|
71
|
+
'#modal" data-other="value',
|
|
72
|
+
"#modal'",
|
|
73
|
+
'#modal><span>',
|
|
74
|
+
'#modal&',
|
|
75
|
+
' #modal',
|
|
76
|
+
'#modal ',
|
|
77
|
+
'#modal\n',
|
|
78
|
+
'#modal\r\n',
|
|
79
|
+
`#modal${String.fromCharCode(0x2028)}`,
|
|
80
|
+
];
|
|
81
|
+
for (const target of targets) assertUnsupportedTarget(target);
|
|
82
|
+
assertUnsupportedTarget('body', anchors);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
test('collectTeleports inserts supported fragments and propagates unsupported targets', () => {
|
|
86
|
+
const html = '<body>\n <!--app-teleports-->\n</body>';
|
|
87
|
+
assert.equal(
|
|
88
|
+
collectTeleports(html, { '#modal-root': anchors }),
|
|
89
|
+
`<body><div id="modal-root">${anchors}</div>\n</body>`,
|
|
90
|
+
);
|
|
91
|
+
assert.throws(() => collectTeleports(html, { body: anchors }), /simple #id/);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
test('real SSR enabled and disabled Teleports preserve their complete target fragments', async () => {
|
|
95
|
+
for (const disabled of [false, true]) {
|
|
96
|
+
const { html, teleports } = await renderTeleport('#modal-root', disabled);
|
|
97
|
+
assert.equal(
|
|
98
|
+
teleports['#modal-root'],
|
|
99
|
+
`<!--teleport start anchor-->${disabled ? '' : '<span>action</span>'}<!--teleport anchor-->`,
|
|
100
|
+
);
|
|
101
|
+
assert.equal(html.includes('<span>action</span>'), disabled);
|
|
102
|
+
assert.equal(
|
|
103
|
+
renderTeleports(teleports),
|
|
104
|
+
`<div id="modal-root">${teleports['#modal-root']}</div>`,
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
|
|
109
|
+
test('real SSR disabled body Teleport is rejected instead of becoming an unrelated ID', async () => {
|
|
110
|
+
const { html, teleports } = await renderTeleport('body', true);
|
|
111
|
+
assert.ok(html.includes('<span>action</span>'));
|
|
112
|
+
assert.equal(teleports.body, anchors);
|
|
113
|
+
assert.throws(() => renderTeleports(teleports), /Unsupported SSR Teleport target "body"/);
|
|
114
|
+
});
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zova",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.179",
|
|
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.95",
|
|
49
|
-
"zova-suite-a-zova": "^5.1.
|
|
49
|
+
"zova-suite-a-zova": "^5.1.178"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"clean-package": "^2.2.0",
|