@shwfed/config 2.12.15 → 2.12.16

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 (29) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/runtime/components/actions/components/group.vue +1 -0
  3. package/dist/runtime/components/config/use-editor.js +9 -0
  4. package/dist/runtime/components/config/utils/linkage.d.ts +29 -0
  5. package/dist/runtime/components/config/utils/linkage.js +57 -0
  6. package/dist/runtime/components/config/utils/validation-error.d.ts +1 -0
  7. package/dist/runtime/components/config/utils/validation-error.js +1 -1
  8. package/dist/runtime/components/form/FormUnitRenderer.vue +6 -1
  9. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.d.vue.ts +18 -18
  10. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.vue.d.ts +18 -18
  11. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +18 -18
  12. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +18 -18
  13. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +18 -18
  14. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +18 -18
  15. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +18 -18
  16. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +18 -18
  17. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +18 -18
  18. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +18 -18
  19. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.d.vue.ts +18 -18
  20. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.vue.d.ts +18 -18
  21. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.d.vue.ts +18 -18
  22. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.vue.d.ts +18 -18
  23. package/dist/runtime/components/sidebar/use-editor.js +6 -0
  24. package/dist/runtime/share/layout.js +2 -2
  25. package/dist/runtime/share/slot-renderer.vue +6 -1
  26. package/dist/runtime/share/viewport.d.ts +16 -0
  27. package/dist/runtime/share/viewport.js +11 -0
  28. package/dist/runtime/utils/cel.js +6 -1
  29. package/package.json +1 -1
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "shwfed",
3
3
  "configKey": "shwfed",
4
- "version": "2.12.15",
4
+ "version": "2.12.16",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
@@ -406,6 +406,7 @@ async function runButton(buttonId) {
406
406
 
407
407
  <ButtonGroup
408
408
  v-for="group in groupedItems"
409
+ v-show="renderedChildCount(group) > 0"
409
410
  :key="group.id"
410
411
  class="actions-group"
411
412
  :style="{ '--ag-grow': String(renderedChildCount(group)) }"
@@ -6,6 +6,7 @@ import { readClip, reidFragment, writeClip } from "../../share/clipboard.js";
6
6
  import { PageConfig } from "./schema.js";
7
7
  import { BLOCKS, findBlock } from "./utils/resolve.js";
8
8
  import { formatValidationError } from "./utils/validation-error.js";
9
+ import { findDanglingLinkages, formatDanglingLinkages } from "./utils/linkage.js";
9
10
  import { createExpressionValidityRegistry, provideExpressionValidity } from "../ui/expression-editor/index.js";
10
11
  function deepClone(value) {
11
12
  return JSON.parse(JSON.stringify(value));
@@ -384,6 +385,14 @@ export function useConfigEditor(model, options = {}) {
384
385
  validationError.value = "\u5B58\u5728\u65E0\u6548\u7684\u8DE8\u5C42\u4F5C\u7528\u57DF\u5F15\u7528\uFF0C\u8BF7\u4FEE\u6B63\u6807\u7EA2\u7684\u8868\u8FBE\u5F0F\u540E\u518D\u4FDD\u5B58";
385
386
  return;
386
387
  }
388
+ const dangling = findDanglingLinkages(decoded);
389
+ if (dangling.length > 0) {
390
+ validationError.value = formatDanglingLinkages(dangling, decoded, (i) => {
391
+ const b = topSlotEditor.blocks.value[i];
392
+ return b ? topSlotEditor.getBlockLabel(b) : void 0;
393
+ });
394
+ return;
395
+ }
387
396
  validationError.value = null;
388
397
  model.value = decoded;
389
398
  baseline.value = deepClone(decoded);
@@ -0,0 +1,29 @@
1
+ export type LinkageKind = 'operation' | 'step' | 'scope';
2
+ export type DanglingLinkage = Readonly<{
3
+ kind: LinkageKind;
4
+ /** The referenced uuid that is not defined anywhere in the tree. */
5
+ id: string;
6
+ /**
7
+ * Property path from the config root to the offending reference
8
+ * (`['slot','blocks',0,'actions','buttons',1,'params','rows',2,'value']`).
9
+ * Fed to `describePath` for the breadcrumb — the same one the schema decoder
10
+ * renders — so the message pins the exact field, not just the top block.
11
+ */
12
+ path: ReadonlyArray<PropertyKey>;
13
+ }>;
14
+ /**
15
+ * Find every linkage in `config` whose target uuid is not defined anywhere in
16
+ * the tree. `PAGE_TARGET_ID` (the singleton page target sentinel) is always
17
+ * valid — it names the outermost page, which carries no stored id. Each result
18
+ * carries the property path from the config root to the offending reference, so
19
+ * the caller can render a field-level breadcrumb (see `describePath`).
20
+ */
21
+ export declare function findDanglingLinkages(config: unknown): DanglingLinkage[];
22
+ /**
23
+ * One-line save-footer message for a non-empty dangling list. Renders the
24
+ * breadcrumb to the first offending reference (`「表单 › 确定 › value」`) via the
25
+ * shared `describePath`, tagged with its kind, with a trailing count when more
26
+ * remain. `rootData` is the decoded config the paths index into; `blockLabelAt`
27
+ * gives the nicest label for a top-level block (the host's `getBlockLabel`).
28
+ */
29
+ export declare function formatDanglingLinkages(dangling: ReadonlyArray<DanglingLinkage>, rootData: unknown, blockLabelAt: (index: number) => string | undefined): string;
@@ -0,0 +1,57 @@
1
+ import { PAGE_TARGET_ID } from "../../../share/page-target.js";
2
+ import { scanScopeRefs } from "../../ui/expression-editor/scope-refs.js";
3
+ import { scanStepRefs } from "../../ui/expression-editor/step-refs.js";
4
+ import { describePath } from "./validation-error.js";
5
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
6
+ function isObject(v) {
7
+ return v !== null && typeof v === "object" && !Array.isArray(v);
8
+ }
9
+ function collectDefinedIds(node, into) {
10
+ if (Array.isArray(node)) {
11
+ for (const v of node) collectDefinedIds(v, into);
12
+ return;
13
+ }
14
+ if (!isObject(node)) return;
15
+ for (const [k, v] of Object.entries(node)) {
16
+ if (k === "id" && typeof v === "string" && UUID_RE.test(v)) into.add(v);
17
+ collectDefinedIds(v, into);
18
+ }
19
+ }
20
+ function collectRefs(node, path, into) {
21
+ if (Array.isArray(node)) {
22
+ node.forEach((v, i) => collectRefs(v, [...path, i], into));
23
+ return;
24
+ }
25
+ if (!isObject(node)) {
26
+ if (typeof node === "string") {
27
+ for (const r of scanStepRefs(node)) into.push({ kind: "step", id: r.id, path });
28
+ for (const r of scanScopeRefs(node)) into.push({ kind: "scope", id: r.id, path });
29
+ }
30
+ return;
31
+ }
32
+ if (typeof node.target === "string" && typeof node.operation === "string" && UUID_RE.test(node.target)) {
33
+ into.push({ kind: "operation", id: node.target, path: [...path, "target"] });
34
+ }
35
+ for (const [k, v] of Object.entries(node)) collectRefs(v, [...path, k], into);
36
+ }
37
+ export function findDanglingLinkages(config) {
38
+ const defined = /* @__PURE__ */ new Set();
39
+ collectDefinedIds(config, defined);
40
+ const refs = [];
41
+ collectRefs(config, [], refs);
42
+ return refs.filter((r) => r.id !== PAGE_TARGET_ID && !defined.has(r.id));
43
+ }
44
+ const KIND_LABEL = {
45
+ operation: "\u89E6\u53D1\u64CD\u4F5C",
46
+ step: "\u6B65\u9AA4\u5F15\u7528",
47
+ scope: "\u8DE8\u5C42\u4F5C\u7528\u57DF\u5F15\u7528"
48
+ };
49
+ export function formatDanglingLinkages(dangling, rootData, blockLabelAt) {
50
+ const first = dangling[0];
51
+ if (!first) return "";
52
+ const kind = KIND_LABEL[first.kind];
53
+ const segs = describePath(first.path, rootData, blockLabelAt);
54
+ const where = segs.length > 0 ? `\u300C${segs.join(" \u203A ")}\u300D\u7684${kind}` : kind;
55
+ const suffix = dangling.length > 1 ? `\uFF08\u8FD8\u6709 ${dangling.length - 1} \u4E2A\uFF09` : "";
56
+ return `${where}\u5F15\u7528\u4E86\u5DF2\u5931\u6548\u7684\u8D44\u6E90\uFF08\u6765\u6E90\u4E0D\u5B58\u5728\u4E8E\u5F53\u524D\u914D\u7F6E\u4E2D\uFF09\uFF0C\u8BF7\u4FEE\u6B63\u540E\u518D\u4FDD\u5B58${suffix}`;
57
+ }
@@ -1 +1,2 @@
1
+ export declare function describePath(path: ReadonlyArray<PropertyKey>, rootData: unknown, blockLabelAt: (index: number) => string | undefined): string[];
1
2
  export declare function formatValidationError(err: unknown, blockLabelAt: (index: number) => string | undefined, rootData?: unknown): string;
@@ -19,7 +19,7 @@ function nodeLabel(node) {
19
19
  if (!isObject(node)) return void 0;
20
20
  return localeText(node.label) ?? localeText(node.title) ?? (typeof node.displayName === "string" && node.displayName.trim() ? node.displayName.trim() : void 0) ?? (typeof node.type === "string" ? node.type : void 0);
21
21
  }
22
- function describePath(path, rootData, blockLabelAt) {
22
+ export function describePath(path, rootData, blockLabelAt) {
23
23
  const segs = [];
24
24
  let node = rootData;
25
25
  let labeledTopBlock = false;
@@ -2,6 +2,7 @@
2
2
  import { computed } from "vue";
3
3
  import { DEFAULT_GAP } from "./schema";
4
4
  import { findField } from "./utils/resolve";
5
+ import { useViewportRevision } from "../../share/viewport";
5
6
  defineOptions({ name: "ShwfedFormUnitRenderer" });
6
7
  const props = defineProps({
7
8
  unit: { type: Object, required: true },
@@ -19,7 +20,11 @@ function pickLayout(sets) {
19
20
  }
20
21
  return sets[sets.length - 1];
21
22
  }
22
- const activeLayout = computed(() => pickLayout(props.unit.layouts));
23
+ const viewportRevision = useViewportRevision();
24
+ const activeLayout = computed(() => {
25
+ void viewportRevision.value;
26
+ return pickLayout(props.unit.layouts);
27
+ });
23
28
  const warnedMissing = /* @__PURE__ */ new Set();
24
29
  const placedFields = computed(() => {
25
30
  const layout = activeLayout.value?.layout;
@@ -56,6 +56,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
56
56
  readonly message: string;
57
57
  }[]];
58
58
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
59
+ readonly nodeTooltip?: readonly [{
60
+ readonly locale: "zh";
61
+ readonly message: string;
62
+ }, ...{
63
+ readonly locale: "en" | "ja" | "ko";
64
+ readonly message: string;
65
+ }[]] | undefined;
66
+ readonly nodeSelectable?: string | undefined;
67
+ readonly expandAll: boolean;
59
68
  readonly validations?: readonly {
60
69
  readonly message: readonly [{
61
70
  readonly locale: "zh";
@@ -67,15 +76,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
67
76
  readonly warning?: boolean | undefined;
68
77
  readonly when: string;
69
78
  }[] | undefined;
70
- readonly nodeTooltip?: readonly [{
71
- readonly locale: "zh";
72
- readonly message: string;
73
- }, ...{
74
- readonly locale: "en" | "ja" | "ko";
75
- readonly message: string;
76
- }[]] | undefined;
77
- readonly nodeSelectable?: string | undefined;
78
- readonly expandAll: boolean;
79
79
  }) => any;
80
80
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
81
81
  "onUpdate:modelValue"?: ((value: {
@@ -131,6 +131,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
131
131
  readonly message: string;
132
132
  }[]];
133
133
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
134
+ readonly nodeTooltip?: readonly [{
135
+ readonly locale: "zh";
136
+ readonly message: string;
137
+ }, ...{
138
+ readonly locale: "en" | "ja" | "ko";
139
+ readonly message: string;
140
+ }[]] | undefined;
141
+ readonly nodeSelectable?: string | undefined;
142
+ readonly expandAll: boolean;
134
143
  readonly validations?: readonly {
135
144
  readonly message: readonly [{
136
145
  readonly locale: "zh";
@@ -142,15 +151,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
142
151
  readonly warning?: boolean | undefined;
143
152
  readonly when: string;
144
153
  }[] | undefined;
145
- readonly nodeTooltip?: readonly [{
146
- readonly locale: "zh";
147
- readonly message: string;
148
- }, ...{
149
- readonly locale: "en" | "ja" | "ko";
150
- readonly message: string;
151
- }[]] | undefined;
152
- readonly nodeSelectable?: string | undefined;
153
- readonly expandAll: boolean;
154
154
  }) => any) | undefined;
155
155
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
156
156
  declare const _default: typeof __VLS_export;
@@ -56,6 +56,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
56
56
  readonly message: string;
57
57
  }[]];
58
58
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
59
+ readonly nodeTooltip?: readonly [{
60
+ readonly locale: "zh";
61
+ readonly message: string;
62
+ }, ...{
63
+ readonly locale: "en" | "ja" | "ko";
64
+ readonly message: string;
65
+ }[]] | undefined;
66
+ readonly nodeSelectable?: string | undefined;
67
+ readonly expandAll: boolean;
59
68
  readonly validations?: readonly {
60
69
  readonly message: readonly [{
61
70
  readonly locale: "zh";
@@ -67,15 +76,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
67
76
  readonly warning?: boolean | undefined;
68
77
  readonly when: string;
69
78
  }[] | undefined;
70
- readonly nodeTooltip?: readonly [{
71
- readonly locale: "zh";
72
- readonly message: string;
73
- }, ...{
74
- readonly locale: "en" | "ja" | "ko";
75
- readonly message: string;
76
- }[]] | undefined;
77
- readonly nodeSelectable?: string | undefined;
78
- readonly expandAll: boolean;
79
79
  }) => any;
80
80
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
81
81
  "onUpdate:modelValue"?: ((value: {
@@ -131,6 +131,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
131
131
  readonly message: string;
132
132
  }[]];
133
133
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
134
+ readonly nodeTooltip?: readonly [{
135
+ readonly locale: "zh";
136
+ readonly message: string;
137
+ }, ...{
138
+ readonly locale: "en" | "ja" | "ko";
139
+ readonly message: string;
140
+ }[]] | undefined;
141
+ readonly nodeSelectable?: string | undefined;
142
+ readonly expandAll: boolean;
134
143
  readonly validations?: readonly {
135
144
  readonly message: readonly [{
136
145
  readonly locale: "zh";
@@ -142,15 +151,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
142
151
  readonly warning?: boolean | undefined;
143
152
  readonly when: string;
144
153
  }[] | undefined;
145
- readonly nodeTooltip?: readonly [{
146
- readonly locale: "zh";
147
- readonly message: string;
148
- }, ...{
149
- readonly locale: "en" | "ja" | "ko";
150
- readonly message: string;
151
- }[]] | undefined;
152
- readonly nodeSelectable?: string | undefined;
153
- readonly expandAll: boolean;
154
154
  }) => any) | undefined;
155
155
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
156
156
  declare const _default: typeof __VLS_export;
@@ -53,6 +53,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
53
53
  readonly message: string;
54
54
  }[]];
55
55
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
56
+ readonly nodeTooltip?: readonly [{
57
+ readonly locale: "zh";
58
+ readonly message: string;
59
+ }, ...{
60
+ readonly locale: "en" | "ja" | "ko";
61
+ readonly message: string;
62
+ }[]] | undefined;
63
+ readonly nodeSelectable?: string | undefined;
64
+ readonly expandAll: boolean;
56
65
  readonly validations?: readonly {
57
66
  readonly message: readonly [{
58
67
  readonly locale: "zh";
@@ -64,15 +73,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
64
73
  readonly warning?: boolean | undefined;
65
74
  readonly when: string;
66
75
  }[] | undefined;
67
- readonly nodeTooltip?: readonly [{
68
- readonly locale: "zh";
69
- readonly message: string;
70
- }, ...{
71
- readonly locale: "en" | "ja" | "ko";
72
- readonly message: string;
73
- }[]] | undefined;
74
- readonly nodeSelectable?: string | undefined;
75
- readonly expandAll: boolean;
76
76
  }) => any;
77
77
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
78
78
  "onUpdate:modelValue"?: ((value: {
@@ -125,6 +125,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
125
125
  readonly message: string;
126
126
  }[]];
127
127
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
128
+ readonly nodeTooltip?: readonly [{
129
+ readonly locale: "zh";
130
+ readonly message: string;
131
+ }, ...{
132
+ readonly locale: "en" | "ja" | "ko";
133
+ readonly message: string;
134
+ }[]] | undefined;
135
+ readonly nodeSelectable?: string | undefined;
136
+ readonly expandAll: boolean;
128
137
  readonly validations?: readonly {
129
138
  readonly message: readonly [{
130
139
  readonly locale: "zh";
@@ -136,15 +145,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
136
145
  readonly warning?: boolean | undefined;
137
146
  readonly when: string;
138
147
  }[] | undefined;
139
- readonly nodeTooltip?: readonly [{
140
- readonly locale: "zh";
141
- readonly message: string;
142
- }, ...{
143
- readonly locale: "en" | "ja" | "ko";
144
- readonly message: string;
145
- }[]] | undefined;
146
- readonly nodeSelectable?: string | undefined;
147
- readonly expandAll: boolean;
148
148
  }) => any) | undefined;
149
149
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
150
150
  declare const _default: typeof __VLS_export;
@@ -53,6 +53,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
53
53
  readonly message: string;
54
54
  }[]];
55
55
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
56
+ readonly nodeTooltip?: readonly [{
57
+ readonly locale: "zh";
58
+ readonly message: string;
59
+ }, ...{
60
+ readonly locale: "en" | "ja" | "ko";
61
+ readonly message: string;
62
+ }[]] | undefined;
63
+ readonly nodeSelectable?: string | undefined;
64
+ readonly expandAll: boolean;
56
65
  readonly validations?: readonly {
57
66
  readonly message: readonly [{
58
67
  readonly locale: "zh";
@@ -64,15 +73,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
64
73
  readonly warning?: boolean | undefined;
65
74
  readonly when: string;
66
75
  }[] | undefined;
67
- readonly nodeTooltip?: readonly [{
68
- readonly locale: "zh";
69
- readonly message: string;
70
- }, ...{
71
- readonly locale: "en" | "ja" | "ko";
72
- readonly message: string;
73
- }[]] | undefined;
74
- readonly nodeSelectable?: string | undefined;
75
- readonly expandAll: boolean;
76
76
  }) => any;
77
77
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
78
78
  "onUpdate:modelValue"?: ((value: {
@@ -125,6 +125,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
125
125
  readonly message: string;
126
126
  }[]];
127
127
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
128
+ readonly nodeTooltip?: readonly [{
129
+ readonly locale: "zh";
130
+ readonly message: string;
131
+ }, ...{
132
+ readonly locale: "en" | "ja" | "ko";
133
+ readonly message: string;
134
+ }[]] | undefined;
135
+ readonly nodeSelectable?: string | undefined;
136
+ readonly expandAll: boolean;
128
137
  readonly validations?: readonly {
129
138
  readonly message: readonly [{
130
139
  readonly locale: "zh";
@@ -136,15 +145,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
136
145
  readonly warning?: boolean | undefined;
137
146
  readonly when: string;
138
147
  }[] | undefined;
139
- readonly nodeTooltip?: readonly [{
140
- readonly locale: "zh";
141
- readonly message: string;
142
- }, ...{
143
- readonly locale: "en" | "ja" | "ko";
144
- readonly message: string;
145
- }[]] | undefined;
146
- readonly nodeSelectable?: string | undefined;
147
- readonly expandAll: boolean;
148
148
  }) => any) | undefined;
149
149
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
150
150
  declare const _default: typeof __VLS_export;
@@ -52,6 +52,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
52
52
  readonly locale: "en" | "ja" | "ko";
53
53
  readonly message: string;
54
54
  }[]];
55
+ readonly nodeTooltip?: readonly [{
56
+ readonly locale: "zh";
57
+ readonly message: string;
58
+ }, ...{
59
+ readonly locale: "en" | "ja" | "ko";
60
+ readonly message: string;
61
+ }[]] | undefined;
62
+ readonly nodeSelectable?: string | undefined;
63
+ readonly expandAll: boolean;
55
64
  readonly validations?: readonly {
56
65
  readonly message: readonly [{
57
66
  readonly locale: "zh";
@@ -63,15 +72,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
63
72
  readonly warning?: boolean | undefined;
64
73
  readonly when: string;
65
74
  }[] | undefined;
66
- readonly nodeTooltip?: readonly [{
67
- readonly locale: "zh";
68
- readonly message: string;
69
- }, ...{
70
- readonly locale: "en" | "ja" | "ko";
71
- readonly message: string;
72
- }[]] | undefined;
73
- readonly nodeSelectable?: string | undefined;
74
- readonly expandAll: boolean;
75
75
  }) => any;
76
76
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
77
77
  "onUpdate:modelValue"?: ((value: {
@@ -123,6 +123,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
123
123
  readonly locale: "en" | "ja" | "ko";
124
124
  readonly message: string;
125
125
  }[]];
126
+ readonly nodeTooltip?: readonly [{
127
+ readonly locale: "zh";
128
+ readonly message: string;
129
+ }, ...{
130
+ readonly locale: "en" | "ja" | "ko";
131
+ readonly message: string;
132
+ }[]] | undefined;
133
+ readonly nodeSelectable?: string | undefined;
134
+ readonly expandAll: boolean;
126
135
  readonly validations?: readonly {
127
136
  readonly message: readonly [{
128
137
  readonly locale: "zh";
@@ -134,15 +143,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
134
143
  readonly warning?: boolean | undefined;
135
144
  readonly when: string;
136
145
  }[] | undefined;
137
- readonly nodeTooltip?: readonly [{
138
- readonly locale: "zh";
139
- readonly message: string;
140
- }, ...{
141
- readonly locale: "en" | "ja" | "ko";
142
- readonly message: string;
143
- }[]] | undefined;
144
- readonly nodeSelectable?: string | undefined;
145
- readonly expandAll: boolean;
146
146
  }) => any) | undefined;
147
147
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
148
148
  declare const _default: typeof __VLS_export;
@@ -52,6 +52,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
52
52
  readonly locale: "en" | "ja" | "ko";
53
53
  readonly message: string;
54
54
  }[]];
55
+ readonly nodeTooltip?: readonly [{
56
+ readonly locale: "zh";
57
+ readonly message: string;
58
+ }, ...{
59
+ readonly locale: "en" | "ja" | "ko";
60
+ readonly message: string;
61
+ }[]] | undefined;
62
+ readonly nodeSelectable?: string | undefined;
63
+ readonly expandAll: boolean;
55
64
  readonly validations?: readonly {
56
65
  readonly message: readonly [{
57
66
  readonly locale: "zh";
@@ -63,15 +72,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
63
72
  readonly warning?: boolean | undefined;
64
73
  readonly when: string;
65
74
  }[] | undefined;
66
- readonly nodeTooltip?: readonly [{
67
- readonly locale: "zh";
68
- readonly message: string;
69
- }, ...{
70
- readonly locale: "en" | "ja" | "ko";
71
- readonly message: string;
72
- }[]] | undefined;
73
- readonly nodeSelectable?: string | undefined;
74
- readonly expandAll: boolean;
75
75
  }) => any;
76
76
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
77
77
  "onUpdate:modelValue"?: ((value: {
@@ -123,6 +123,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
123
123
  readonly locale: "en" | "ja" | "ko";
124
124
  readonly message: string;
125
125
  }[]];
126
+ readonly nodeTooltip?: readonly [{
127
+ readonly locale: "zh";
128
+ readonly message: string;
129
+ }, ...{
130
+ readonly locale: "en" | "ja" | "ko";
131
+ readonly message: string;
132
+ }[]] | undefined;
133
+ readonly nodeSelectable?: string | undefined;
134
+ readonly expandAll: boolean;
126
135
  readonly validations?: readonly {
127
136
  readonly message: readonly [{
128
137
  readonly locale: "zh";
@@ -134,15 +143,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
134
143
  readonly warning?: boolean | undefined;
135
144
  readonly when: string;
136
145
  }[] | undefined;
137
- readonly nodeTooltip?: readonly [{
138
- readonly locale: "zh";
139
- readonly message: string;
140
- }, ...{
141
- readonly locale: "en" | "ja" | "ko";
142
- readonly message: string;
143
- }[]] | undefined;
144
- readonly nodeSelectable?: string | undefined;
145
- readonly expandAll: boolean;
146
146
  }) => any) | undefined;
147
147
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
148
148
  declare const _default: typeof __VLS_export;
@@ -54,6 +54,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
54
54
  readonly message: string;
55
55
  }[]];
56
56
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
57
+ readonly nodeTooltip?: readonly [{
58
+ readonly locale: "zh";
59
+ readonly message: string;
60
+ }, ...{
61
+ readonly locale: "en" | "ja" | "ko";
62
+ readonly message: string;
63
+ }[]] | undefined;
64
+ readonly nodeSelectable?: string | undefined;
65
+ readonly expandAll: boolean;
57
66
  readonly validations?: readonly {
58
67
  readonly message: readonly [{
59
68
  readonly locale: "zh";
@@ -65,15 +74,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
65
74
  readonly warning?: boolean | undefined;
66
75
  readonly when: string;
67
76
  }[] | undefined;
68
- readonly nodeTooltip?: readonly [{
69
- readonly locale: "zh";
70
- readonly message: string;
71
- }, ...{
72
- readonly locale: "en" | "ja" | "ko";
73
- readonly message: string;
74
- }[]] | undefined;
75
- readonly nodeSelectable?: string | undefined;
76
- readonly expandAll: boolean;
77
77
  }) => any;
78
78
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
79
79
  "onUpdate:modelValue"?: ((value: {
@@ -127,6 +127,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
127
127
  readonly message: string;
128
128
  }[]];
129
129
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
130
+ readonly nodeTooltip?: readonly [{
131
+ readonly locale: "zh";
132
+ readonly message: string;
133
+ }, ...{
134
+ readonly locale: "en" | "ja" | "ko";
135
+ readonly message: string;
136
+ }[]] | undefined;
137
+ readonly nodeSelectable?: string | undefined;
138
+ readonly expandAll: boolean;
130
139
  readonly validations?: readonly {
131
140
  readonly message: readonly [{
132
141
  readonly locale: "zh";
@@ -138,15 +147,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
138
147
  readonly warning?: boolean | undefined;
139
148
  readonly when: string;
140
149
  }[] | undefined;
141
- readonly nodeTooltip?: readonly [{
142
- readonly locale: "zh";
143
- readonly message: string;
144
- }, ...{
145
- readonly locale: "en" | "ja" | "ko";
146
- readonly message: string;
147
- }[]] | undefined;
148
- readonly nodeSelectable?: string | undefined;
149
- readonly expandAll: boolean;
150
150
  }) => any) | undefined;
151
151
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
152
152
  declare const _default: typeof __VLS_export;
@@ -54,6 +54,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
54
54
  readonly message: string;
55
55
  }[]];
56
56
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
57
+ readonly nodeTooltip?: readonly [{
58
+ readonly locale: "zh";
59
+ readonly message: string;
60
+ }, ...{
61
+ readonly locale: "en" | "ja" | "ko";
62
+ readonly message: string;
63
+ }[]] | undefined;
64
+ readonly nodeSelectable?: string | undefined;
65
+ readonly expandAll: boolean;
57
66
  readonly validations?: readonly {
58
67
  readonly message: readonly [{
59
68
  readonly locale: "zh";
@@ -65,15 +74,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
65
74
  readonly warning?: boolean | undefined;
66
75
  readonly when: string;
67
76
  }[] | undefined;
68
- readonly nodeTooltip?: readonly [{
69
- readonly locale: "zh";
70
- readonly message: string;
71
- }, ...{
72
- readonly locale: "en" | "ja" | "ko";
73
- readonly message: string;
74
- }[]] | undefined;
75
- readonly nodeSelectable?: string | undefined;
76
- readonly expandAll: boolean;
77
77
  }) => any;
78
78
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
79
79
  "onUpdate:modelValue"?: ((value: {
@@ -127,6 +127,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
127
127
  readonly message: string;
128
128
  }[]];
129
129
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
130
+ readonly nodeTooltip?: readonly [{
131
+ readonly locale: "zh";
132
+ readonly message: string;
133
+ }, ...{
134
+ readonly locale: "en" | "ja" | "ko";
135
+ readonly message: string;
136
+ }[]] | undefined;
137
+ readonly nodeSelectable?: string | undefined;
138
+ readonly expandAll: boolean;
130
139
  readonly validations?: readonly {
131
140
  readonly message: readonly [{
132
141
  readonly locale: "zh";
@@ -138,15 +147,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
138
147
  readonly warning?: boolean | undefined;
139
148
  readonly when: string;
140
149
  }[] | undefined;
141
- readonly nodeTooltip?: readonly [{
142
- readonly locale: "zh";
143
- readonly message: string;
144
- }, ...{
145
- readonly locale: "en" | "ja" | "ko";
146
- readonly message: string;
147
- }[]] | undefined;
148
- readonly nodeSelectable?: string | undefined;
149
- readonly expandAll: boolean;
150
150
  }) => any) | undefined;
151
151
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
152
152
  declare const _default: typeof __VLS_export;
@@ -53,6 +53,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
53
53
  readonly locale: "en" | "ja" | "ko";
54
54
  readonly message: string;
55
55
  }[]];
56
+ readonly nodeTooltip?: readonly [{
57
+ readonly locale: "zh";
58
+ readonly message: string;
59
+ }, ...{
60
+ readonly locale: "en" | "ja" | "ko";
61
+ readonly message: string;
62
+ }[]] | undefined;
63
+ readonly nodeSelectable?: string | undefined;
64
+ readonly expandAll: boolean;
56
65
  readonly validations?: readonly {
57
66
  readonly message: readonly [{
58
67
  readonly locale: "zh";
@@ -64,15 +73,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
64
73
  readonly warning?: boolean | undefined;
65
74
  readonly when: string;
66
75
  }[] | undefined;
67
- readonly nodeTooltip?: readonly [{
68
- readonly locale: "zh";
69
- readonly message: string;
70
- }, ...{
71
- readonly locale: "en" | "ja" | "ko";
72
- readonly message: string;
73
- }[]] | undefined;
74
- readonly nodeSelectable?: string | undefined;
75
- readonly expandAll: boolean;
76
76
  }) => any;
77
77
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
78
78
  "onUpdate:modelValue"?: ((value: {
@@ -125,6 +125,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
125
125
  readonly locale: "en" | "ja" | "ko";
126
126
  readonly message: string;
127
127
  }[]];
128
+ readonly nodeTooltip?: readonly [{
129
+ readonly locale: "zh";
130
+ readonly message: string;
131
+ }, ...{
132
+ readonly locale: "en" | "ja" | "ko";
133
+ readonly message: string;
134
+ }[]] | undefined;
135
+ readonly nodeSelectable?: string | undefined;
136
+ readonly expandAll: boolean;
128
137
  readonly validations?: readonly {
129
138
  readonly message: readonly [{
130
139
  readonly locale: "zh";
@@ -136,15 +145,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
136
145
  readonly warning?: boolean | undefined;
137
146
  readonly when: string;
138
147
  }[] | undefined;
139
- readonly nodeTooltip?: readonly [{
140
- readonly locale: "zh";
141
- readonly message: string;
142
- }, ...{
143
- readonly locale: "en" | "ja" | "ko";
144
- readonly message: string;
145
- }[]] | undefined;
146
- readonly nodeSelectable?: string | undefined;
147
- readonly expandAll: boolean;
148
148
  }) => any) | undefined;
149
149
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
150
150
  declare const _default: typeof __VLS_export;
@@ -53,6 +53,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
53
53
  readonly locale: "en" | "ja" | "ko";
54
54
  readonly message: string;
55
55
  }[]];
56
+ readonly nodeTooltip?: readonly [{
57
+ readonly locale: "zh";
58
+ readonly message: string;
59
+ }, ...{
60
+ readonly locale: "en" | "ja" | "ko";
61
+ readonly message: string;
62
+ }[]] | undefined;
63
+ readonly nodeSelectable?: string | undefined;
64
+ readonly expandAll: boolean;
56
65
  readonly validations?: readonly {
57
66
  readonly message: readonly [{
58
67
  readonly locale: "zh";
@@ -64,15 +73,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
64
73
  readonly warning?: boolean | undefined;
65
74
  readonly when: string;
66
75
  }[] | undefined;
67
- readonly nodeTooltip?: readonly [{
68
- readonly locale: "zh";
69
- readonly message: string;
70
- }, ...{
71
- readonly locale: "en" | "ja" | "ko";
72
- readonly message: string;
73
- }[]] | undefined;
74
- readonly nodeSelectable?: string | undefined;
75
- readonly expandAll: boolean;
76
76
  }) => any;
77
77
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
78
78
  "onUpdate:modelValue"?: ((value: {
@@ -125,6 +125,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
125
125
  readonly locale: "en" | "ja" | "ko";
126
126
  readonly message: string;
127
127
  }[]];
128
+ readonly nodeTooltip?: readonly [{
129
+ readonly locale: "zh";
130
+ readonly message: string;
131
+ }, ...{
132
+ readonly locale: "en" | "ja" | "ko";
133
+ readonly message: string;
134
+ }[]] | undefined;
135
+ readonly nodeSelectable?: string | undefined;
136
+ readonly expandAll: boolean;
128
137
  readonly validations?: readonly {
129
138
  readonly message: readonly [{
130
139
  readonly locale: "zh";
@@ -136,15 +145,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
136
145
  readonly warning?: boolean | undefined;
137
146
  readonly when: string;
138
147
  }[] | undefined;
139
- readonly nodeTooltip?: readonly [{
140
- readonly locale: "zh";
141
- readonly message: string;
142
- }, ...{
143
- readonly locale: "en" | "ja" | "ko";
144
- readonly message: string;
145
- }[]] | undefined;
146
- readonly nodeSelectable?: string | undefined;
147
- readonly expandAll: boolean;
148
148
  }) => any) | undefined;
149
149
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
150
150
  declare const _default: typeof __VLS_export;
@@ -56,6 +56,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
56
56
  readonly message: string;
57
57
  }[]];
58
58
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
59
+ readonly nodeTooltip?: readonly [{
60
+ readonly locale: "zh";
61
+ readonly message: string;
62
+ }, ...{
63
+ readonly locale: "en" | "ja" | "ko";
64
+ readonly message: string;
65
+ }[]] | undefined;
66
+ readonly nodeSelectable?: string | undefined;
67
+ readonly expandAll: boolean;
59
68
  readonly validations?: readonly {
60
69
  readonly message: readonly [{
61
70
  readonly locale: "zh";
@@ -67,15 +76,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
67
76
  readonly warning?: boolean | undefined;
68
77
  readonly when: string;
69
78
  }[] | undefined;
70
- readonly nodeTooltip?: readonly [{
71
- readonly locale: "zh";
72
- readonly message: string;
73
- }, ...{
74
- readonly locale: "en" | "ja" | "ko";
75
- readonly message: string;
76
- }[]] | undefined;
77
- readonly nodeSelectable?: string | undefined;
78
- readonly expandAll: boolean;
79
79
  }) => any;
80
80
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
81
81
  "onUpdate:modelValue"?: ((value: {
@@ -131,6 +131,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
131
131
  readonly message: string;
132
132
  }[]];
133
133
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
134
+ readonly nodeTooltip?: readonly [{
135
+ readonly locale: "zh";
136
+ readonly message: string;
137
+ }, ...{
138
+ readonly locale: "en" | "ja" | "ko";
139
+ readonly message: string;
140
+ }[]] | undefined;
141
+ readonly nodeSelectable?: string | undefined;
142
+ readonly expandAll: boolean;
134
143
  readonly validations?: readonly {
135
144
  readonly message: readonly [{
136
145
  readonly locale: "zh";
@@ -142,15 +151,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
142
151
  readonly warning?: boolean | undefined;
143
152
  readonly when: string;
144
153
  }[] | undefined;
145
- readonly nodeTooltip?: readonly [{
146
- readonly locale: "zh";
147
- readonly message: string;
148
- }, ...{
149
- readonly locale: "en" | "ja" | "ko";
150
- readonly message: string;
151
- }[]] | undefined;
152
- readonly nodeSelectable?: string | undefined;
153
- readonly expandAll: boolean;
154
154
  }) => any) | undefined;
155
155
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
156
156
  declare const _default: typeof __VLS_export;
@@ -56,6 +56,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
56
56
  readonly message: string;
57
57
  }[]];
58
58
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
59
+ readonly nodeTooltip?: readonly [{
60
+ readonly locale: "zh";
61
+ readonly message: string;
62
+ }, ...{
63
+ readonly locale: "en" | "ja" | "ko";
64
+ readonly message: string;
65
+ }[]] | undefined;
66
+ readonly nodeSelectable?: string | undefined;
67
+ readonly expandAll: boolean;
59
68
  readonly validations?: readonly {
60
69
  readonly message: readonly [{
61
70
  readonly locale: "zh";
@@ -67,15 +76,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
67
76
  readonly warning?: boolean | undefined;
68
77
  readonly when: string;
69
78
  }[] | undefined;
70
- readonly nodeTooltip?: readonly [{
71
- readonly locale: "zh";
72
- readonly message: string;
73
- }, ...{
74
- readonly locale: "en" | "ja" | "ko";
75
- readonly message: string;
76
- }[]] | undefined;
77
- readonly nodeSelectable?: string | undefined;
78
- readonly expandAll: boolean;
79
79
  }) => any;
80
80
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
81
81
  "onUpdate:modelValue"?: ((value: {
@@ -131,6 +131,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
131
131
  readonly message: string;
132
132
  }[]];
133
133
  readonly cascade: "independent" | "cascade-down" | "cascade-both";
134
+ readonly nodeTooltip?: readonly [{
135
+ readonly locale: "zh";
136
+ readonly message: string;
137
+ }, ...{
138
+ readonly locale: "en" | "ja" | "ko";
139
+ readonly message: string;
140
+ }[]] | undefined;
141
+ readonly nodeSelectable?: string | undefined;
142
+ readonly expandAll: boolean;
134
143
  readonly validations?: readonly {
135
144
  readonly message: readonly [{
136
145
  readonly locale: "zh";
@@ -142,15 +151,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
142
151
  readonly warning?: boolean | undefined;
143
152
  readonly when: string;
144
153
  }[] | undefined;
145
- readonly nodeTooltip?: readonly [{
146
- readonly locale: "zh";
147
- readonly message: string;
148
- }, ...{
149
- readonly locale: "en" | "ja" | "ko";
150
- readonly message: string;
151
- }[]] | undefined;
152
- readonly nodeSelectable?: string | undefined;
153
- readonly expandAll: boolean;
154
154
  }) => any) | undefined;
155
155
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
156
156
  declare const _default: typeof __VLS_export;
@@ -55,6 +55,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
55
55
  readonly locale: "en" | "ja" | "ko";
56
56
  readonly message: string;
57
57
  }[]];
58
+ readonly nodeTooltip?: readonly [{
59
+ readonly locale: "zh";
60
+ readonly message: string;
61
+ }, ...{
62
+ readonly locale: "en" | "ja" | "ko";
63
+ readonly message: string;
64
+ }[]] | undefined;
65
+ readonly nodeSelectable?: string | undefined;
66
+ readonly expandAll: boolean;
58
67
  readonly validations?: readonly {
59
68
  readonly message: readonly [{
60
69
  readonly locale: "zh";
@@ -66,15 +75,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
66
75
  readonly warning?: boolean | undefined;
67
76
  readonly when: string;
68
77
  }[] | undefined;
69
- readonly nodeTooltip?: readonly [{
70
- readonly locale: "zh";
71
- readonly message: string;
72
- }, ...{
73
- readonly locale: "en" | "ja" | "ko";
74
- readonly message: string;
75
- }[]] | undefined;
76
- readonly nodeSelectable?: string | undefined;
77
- readonly expandAll: boolean;
78
78
  }) => any;
79
79
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
80
80
  "onUpdate:modelValue"?: ((value: {
@@ -129,6 +129,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
129
129
  readonly locale: "en" | "ja" | "ko";
130
130
  readonly message: string;
131
131
  }[]];
132
+ readonly nodeTooltip?: readonly [{
133
+ readonly locale: "zh";
134
+ readonly message: string;
135
+ }, ...{
136
+ readonly locale: "en" | "ja" | "ko";
137
+ readonly message: string;
138
+ }[]] | undefined;
139
+ readonly nodeSelectable?: string | undefined;
140
+ readonly expandAll: boolean;
132
141
  readonly validations?: readonly {
133
142
  readonly message: readonly [{
134
143
  readonly locale: "zh";
@@ -140,15 +149,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
140
149
  readonly warning?: boolean | undefined;
141
150
  readonly when: string;
142
151
  }[] | undefined;
143
- readonly nodeTooltip?: readonly [{
144
- readonly locale: "zh";
145
- readonly message: string;
146
- }, ...{
147
- readonly locale: "en" | "ja" | "ko";
148
- readonly message: string;
149
- }[]] | undefined;
150
- readonly nodeSelectable?: string | undefined;
151
- readonly expandAll: boolean;
152
152
  }) => any) | undefined;
153
153
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
154
154
  declare const _default: typeof __VLS_export;
@@ -55,6 +55,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
55
55
  readonly locale: "en" | "ja" | "ko";
56
56
  readonly message: string;
57
57
  }[]];
58
+ readonly nodeTooltip?: readonly [{
59
+ readonly locale: "zh";
60
+ readonly message: string;
61
+ }, ...{
62
+ readonly locale: "en" | "ja" | "ko";
63
+ readonly message: string;
64
+ }[]] | undefined;
65
+ readonly nodeSelectable?: string | undefined;
66
+ readonly expandAll: boolean;
58
67
  readonly validations?: readonly {
59
68
  readonly message: readonly [{
60
69
  readonly locale: "zh";
@@ -66,15 +75,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
66
75
  readonly warning?: boolean | undefined;
67
76
  readonly when: string;
68
77
  }[] | undefined;
69
- readonly nodeTooltip?: readonly [{
70
- readonly locale: "zh";
71
- readonly message: string;
72
- }, ...{
73
- readonly locale: "en" | "ja" | "ko";
74
- readonly message: string;
75
- }[]] | undefined;
76
- readonly nodeSelectable?: string | undefined;
77
- readonly expandAll: boolean;
78
78
  }) => any;
79
79
  }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
80
80
  "onUpdate:modelValue"?: ((value: {
@@ -129,6 +129,15 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
129
129
  readonly locale: "en" | "ja" | "ko";
130
130
  readonly message: string;
131
131
  }[]];
132
+ readonly nodeTooltip?: readonly [{
133
+ readonly locale: "zh";
134
+ readonly message: string;
135
+ }, ...{
136
+ readonly locale: "en" | "ja" | "ko";
137
+ readonly message: string;
138
+ }[]] | undefined;
139
+ readonly nodeSelectable?: string | undefined;
140
+ readonly expandAll: boolean;
132
141
  readonly validations?: readonly {
133
142
  readonly message: readonly [{
134
143
  readonly locale: "zh";
@@ -140,15 +149,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
140
149
  readonly warning?: boolean | undefined;
141
150
  readonly when: string;
142
151
  }[] | undefined;
143
- readonly nodeTooltip?: readonly [{
144
- readonly locale: "zh";
145
- readonly message: string;
146
- }, ...{
147
- readonly locale: "en" | "ja" | "ko";
148
- readonly message: string;
149
- }[]] | undefined;
150
- readonly nodeSelectable?: string | undefined;
151
- readonly expandAll: boolean;
152
152
  }) => any) | undefined;
153
153
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
154
154
  declare const _default: typeof __VLS_export;
@@ -1,6 +1,7 @@
1
1
  import { Schema } from "effect";
2
2
  import { computed, ref, watch } from "vue";
3
3
  import { formatValidationError } from "../config/utils/validation-error.js";
4
+ import { findDanglingLinkages, formatDanglingLinkages } from "../config/utils/linkage.js";
4
5
  import { createExpressionValidityRegistry, provideExpressionValidity } from "../ui/expression-editor/index.js";
5
6
  import { SidebarConfig } from "./schema.js";
6
7
  function deepClone(value) {
@@ -25,6 +26,11 @@ export function useSidebarEditor(model, options = {}) {
25
26
  validationError.value = "\u5B58\u5728\u65E0\u6548\u7684\u8DE8\u5C42\u4F5C\u7528\u57DF\u5F15\u7528\uFF0C\u8BF7\u4FEE\u6B63\u6807\u7EA2\u7684\u8868\u8FBE\u5F0F\u540E\u518D\u4FDD\u5B58";
26
27
  return;
27
28
  }
29
+ const dangling = findDanglingLinkages(decoded);
30
+ if (dangling.length > 0) {
31
+ validationError.value = formatDanglingLinkages(dangling, decoded, () => void 0);
32
+ return;
33
+ }
28
34
  validationError.value = null;
29
35
  model.value = decoded;
30
36
  baseline.value = deepClone(decoded);
@@ -59,7 +59,7 @@ function configureMedia(configure) {
59
59
  return (env) => {
60
60
  env.registerFunction(
61
61
  "media(string): bool",
62
- (_self, q) => typeof window !== "undefined" && window.matchMedia(q).matches,
62
+ (q) => typeof window !== "undefined" && window.matchMedia(q).matches,
63
63
  { description: "\u5339\u914D CSS \u5A92\u4F53\u67E5\u8BE2\uFF0C\u7B49\u4EF7\u4E8E `window.matchMedia(q).matches`\uFF1BSSR \u4E0A\u4E0B\u6587\u8FD4\u56DE `false`" }
64
64
  );
65
65
  configure(env);
@@ -76,7 +76,7 @@ export function LayoutSet(configure) {
76
76
  resultType: "bool"
77
77
  }).annotations({
78
78
  title: "\u5339\u914D\u6761\u4EF6",
79
- description: "\u8FD4\u56DE `bool` \u7684 CEL \u8868\u8FBE\u5F0F\uFF0C\u6302\u8F7D\u65F6\u4E00\u6B21\u6027\u6C42\u503C\uFF1B\u7A7A\u8868\u793A\u65E0\u6761\u4EF6\u5339\u914D\u3002\u53EF\u7528 `media('(min-width: 1024px)')` \u5305\u88C5 CSS \u5A92\u4F53\u67E5\u8BE2\u3002"
79
+ description: "\u8FD4\u56DE `bool` \u7684 CEL \u8868\u8FBE\u5F0F\uFF1B\u968F\u89C6\u53E3\u53D8\u5316\u4E0E\u6240\u5F15\u7528\u7684\u54CD\u5E94\u5F0F\u6570\u636E\u81EA\u52A8\u91CD\u65B0\u6C42\u503C\uFF0C\u7A7A\u8868\u793A\u65E0\u6761\u4EF6\u5339\u914D\u3002\u53EF\u7528 `media('(min-width: 1024px)')` \u5305\u88C5 CSS \u5A92\u4F53\u67E5\u8BE2\u3002"
80
80
  })),
81
81
  layout: Layout
82
82
  }).annotations({
@@ -4,6 +4,7 @@ import { computed } from "vue";
4
4
  import { cel as _rawCel } from "../utils/cel";
5
5
  import { celBindings, injectCELContext } from "../utils/cel-context";
6
6
  import { DEFAULT_GAP } from "./layout";
7
+ import { useViewportRevision } from "./viewport";
7
8
  defineOptions({ name: "ShwfedSlotRenderer" });
8
9
  const props = defineProps({
9
10
  slotValue: { type: Object, required: true },
@@ -25,7 +26,11 @@ function pickLayout(sets) {
25
26
  }
26
27
  return sets[sets.length - 1];
27
28
  }
28
- const activeLayout = computed(() => pickLayout(props.slotValue.layouts));
29
+ const viewportRevision = useViewportRevision();
30
+ const activeLayout = computed(() => {
31
+ void viewportRevision.value;
32
+ return pickLayout(props.slotValue.layouts);
33
+ });
29
34
  const warnedMissing = /* @__PURE__ */ new Set();
30
35
  const placedBlocks = computed(() => {
31
36
  const layout = activeLayout.value?.layout;
@@ -0,0 +1,16 @@
1
+ import type { Ref } from 'vue';
2
+ /**
3
+ * A reactive counter that increments on any viewport change (resize /
4
+ * orientation). Read its `.value` inside a `computed` to make that computed
5
+ * re-evaluate when the viewport changes.
6
+ *
7
+ * This is the reactive dependency a `media('…')` CEL query otherwise lacks:
8
+ * `window.matchMedia(q).matches` is a one-shot, untracked read, so a layout
9
+ * gated on `media('(max-width: 900px)')` would be frozen at its mount-time
10
+ * value and never re-select when the window is resized (or DevTools docked).
11
+ * Touching this ref inside the selection `computed` closes that gap.
12
+ *
13
+ * SSR-safe and self-cleaning: `useEventListener` no-ops without a `window` and
14
+ * detaches automatically when the owning component's effect scope disposes.
15
+ */
16
+ export declare function useViewportRevision(): Ref<number>;
@@ -0,0 +1,11 @@
1
+ import { ref } from "vue";
2
+ import { useEventListener } from "@vueuse/core";
3
+ export function useViewportRevision() {
4
+ const revision = ref(0);
5
+ const bump = () => {
6
+ revision.value++;
7
+ };
8
+ useEventListener("resize", bump, { passive: true });
9
+ useEventListener("orientationchange", bump, { passive: true });
10
+ return revision;
11
+ }
@@ -22,7 +22,12 @@ function unwrapCelValue(value) {
22
22
  const env = new Environment({ unlistedVariablesAreDyn: true });
23
23
  env.registerFunction(
24
24
  "media(string): bool",
25
- (_self, q) => typeof window !== "undefined" && window.matchMedia(q).matches
25
+ // Global (non-method) function: the evaluator passes the CEL argument as the
26
+ // first parameter (no receiver/`self` prepended — that shape is method-only,
27
+ // as in `list<number>.sum()` below). A leading `_self` here would bind the
28
+ // query string to `_self` and the AST node to `q`, so `matchMedia` would
29
+ // stringify the AST and never match — the "media always false" bug.
30
+ (q) => typeof window !== "undefined" && window.matchMedia(q).matches
26
31
  );
27
32
  env.registerFunction(
28
33
  "list<number>.sum(): number",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shwfed/config",
3
- "version": "2.12.15",
3
+ "version": "2.12.16",
4
4
  "description": "Configurable UI for SHWFED",
5
5
  "type": "module",
6
6
  "publishConfig": {