@shwfed/config 2.12.15 → 2.12.17

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 (99) 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/blocks/2026-05-06/com.shwfed.block.form/config.d.vue.ts +2 -2
  4. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/config.vue.d.ts +2 -2
  5. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/runtime.d.vue.ts +4 -4
  6. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/runtime.vue.d.ts +4 -4
  7. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.form/schema.d.ts +1 -1
  8. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.d.vue.ts +2 -2
  9. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/config.vue.d.ts +2 -2
  10. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.d.vue.ts +2 -2
  11. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/runtime.vue.d.ts +2 -2
  12. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +2 -2
  13. package/dist/runtime/components/config/index.d.vue.ts +2 -2
  14. package/dist/runtime/components/config/index.vue.d.ts +2 -2
  15. package/dist/runtime/components/config/use-editor.js +9 -0
  16. package/dist/runtime/components/config/utils/linkage.d.ts +29 -0
  17. package/dist/runtime/components/config/utils/linkage.js +57 -0
  18. package/dist/runtime/components/config/utils/validation-error.d.ts +1 -0
  19. package/dist/runtime/components/config/utils/validation-error.js +1 -1
  20. package/dist/runtime/components/form/FormUnitRenderer.vue +76 -23
  21. package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.combobox.single/config.d.vue.ts +2 -2
  22. package/dist/runtime/components/form/fields/2026-04-24/com.shwfed.form.field.combobox.single/config.vue.d.ts +2 -2
  23. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.d.vue.ts +6 -6
  24. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.vue.d.ts +6 -6
  25. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.d.vue.ts +8 -8
  26. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.vue.d.ts +8 -8
  27. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.d.vue.ts +2 -2
  28. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.vue.d.ts +2 -2
  29. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.combobox.single.remote/config.d.vue.ts +2 -2
  30. package/dist/runtime/components/form/fields/2026-05-13/com.shwfed.form.field.combobox.single.remote/config.vue.d.ts +2 -2
  31. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.d.vue.ts +6 -6
  32. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.vue.d.ts +6 -6
  33. package/dist/runtime/components/form/fields/2026-05-25/com.shwfed.form.field.combobox.multi/config.d.vue.ts +2 -2
  34. package/dist/runtime/components/form/fields/2026-05-25/com.shwfed.form.field.combobox.multi/config.vue.d.ts +2 -2
  35. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/config.d.vue.ts +2 -2
  36. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/config.vue.d.ts +2 -2
  37. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/config.d.vue.ts +2 -2
  38. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/config.vue.d.ts +2 -2
  39. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/config.d.vue.ts +2 -2
  40. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.multi/config.vue.d.ts +2 -2
  41. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/config.d.vue.ts +2 -2
  42. package/dist/runtime/components/form/fields/2026-06-14/com.shwfed.form.field.combobox.single/config.vue.d.ts +2 -2
  43. package/dist/runtime/components/form/schema.d.ts +2 -2
  44. package/dist/runtime/components/sidebar/use-editor.js +6 -0
  45. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  46. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  47. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +6 -6
  48. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +6 -6
  49. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +4 -4
  50. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +4 -4
  51. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  52. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  53. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +6 -6
  54. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +6 -6
  55. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +4 -4
  56. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +4 -4
  57. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.d.vue.ts +6 -6
  58. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.vue.d.ts +6 -6
  59. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +22 -22
  60. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +22 -22
  61. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.d.vue.ts +6 -6
  62. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.vue.d.ts +6 -6
  63. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +22 -22
  64. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +22 -22
  65. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  66. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  67. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  68. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  69. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +8 -8
  70. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +8 -8
  71. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +8 -8
  72. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +8 -8
  73. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  74. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  75. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  76. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  77. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +8 -8
  78. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +8 -8
  79. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +8 -8
  80. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +8 -8
  81. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  82. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  83. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  84. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  85. package/dist/runtime/components/table/schema.d.ts +3 -3
  86. package/dist/runtime/components/ui/date-picker/DatePickerInput.d.vue.ts +1 -1
  87. package/dist/runtime/components/ui/date-picker/DatePickerInput.vue.d.ts +1 -1
  88. package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.d.vue.ts +1 -1
  89. package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.vue.d.ts +1 -1
  90. package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.d.vue.ts +1 -1
  91. package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.vue.d.ts +1 -1
  92. package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.d.vue.ts +2 -2
  93. package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.vue.d.ts +2 -2
  94. package/dist/runtime/share/layout.js +2 -2
  95. package/dist/runtime/share/slot-renderer.vue +6 -1
  96. package/dist/runtime/share/viewport.d.ts +16 -0
  97. package/dist/runtime/share/viewport.js +11 -0
  98. package/dist/runtime/utils/cel.js +6 -1
  99. 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.17",
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)) }"
@@ -19,6 +19,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
19
19
  readonly displayName?: string | undefined;
20
20
  readonly kind: "shwfed.component.form";
21
21
  readonly fields: readonly any[];
22
+ readonly readonly?: string | undefined;
22
23
  readonly layouts: readonly {
23
24
  readonly name: string;
24
25
  readonly layout: {
@@ -36,7 +37,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
36
37
  };
37
38
  readonly media?: string | undefined;
38
39
  }[];
39
- readonly readonly?: string | undefined;
40
40
  };
41
41
  readonly type: "com.shwfed.block.form";
42
42
  readonly id: string;
@@ -54,6 +54,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
54
54
  readonly displayName?: string | undefined;
55
55
  readonly kind: "shwfed.component.form";
56
56
  readonly fields: readonly any[];
57
+ readonly readonly?: string | undefined;
57
58
  readonly layouts: readonly {
58
59
  readonly name: string;
59
60
  readonly layout: {
@@ -71,7 +72,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
71
72
  };
72
73
  readonly media?: string | undefined;
73
74
  }[];
74
- readonly readonly?: string | undefined;
75
75
  };
76
76
  readonly type: "com.shwfed.block.form";
77
77
  readonly id: string;
@@ -19,6 +19,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
19
19
  readonly displayName?: string | undefined;
20
20
  readonly kind: "shwfed.component.form";
21
21
  readonly fields: readonly any[];
22
+ readonly readonly?: string | undefined;
22
23
  readonly layouts: readonly {
23
24
  readonly name: string;
24
25
  readonly layout: {
@@ -36,7 +37,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
36
37
  };
37
38
  readonly media?: string | undefined;
38
39
  }[];
39
- readonly readonly?: string | undefined;
40
40
  };
41
41
  readonly type: "com.shwfed.block.form";
42
42
  readonly id: string;
@@ -54,6 +54,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
54
54
  readonly displayName?: string | undefined;
55
55
  readonly kind: "shwfed.component.form";
56
56
  readonly fields: readonly any[];
57
+ readonly readonly?: string | undefined;
57
58
  readonly layouts: readonly {
58
59
  readonly name: string;
59
60
  readonly layout: {
@@ -71,7 +72,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
71
72
  };
72
73
  readonly media?: string | undefined;
73
74
  }[];
74
- readonly readonly?: string | undefined;
75
75
  };
76
76
  readonly type: "com.shwfed.block.form";
77
77
  readonly id: string;
@@ -10,6 +10,7 @@ type __VLS_ModelProps = {
10
10
  };
11
11
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
12
12
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
+ "update:modelValue": (value: FormState) => any;
13
14
  "update:block": (value: {
14
15
  readonly form: {
15
16
  readonly style?: string | undefined;
@@ -21,6 +22,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
21
22
  readonly displayName?: string | undefined;
22
23
  readonly kind: "shwfed.component.form";
23
24
  readonly fields: readonly any[];
25
+ readonly readonly?: string | undefined;
24
26
  readonly layouts: readonly {
25
27
  readonly name: string;
26
28
  readonly layout: {
@@ -38,14 +40,13 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
38
40
  };
39
41
  readonly media?: string | undefined;
40
42
  }[];
41
- readonly readonly?: string | undefined;
42
43
  };
43
44
  readonly type: "com.shwfed.block.form";
44
45
  readonly id: string;
45
46
  readonly compatibilityDate: "2026-05-06";
46
47
  }) => any;
47
- "update:modelValue": (value: FormState) => any;
48
48
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
49
+ "onUpdate:modelValue"?: ((value: FormState) => any) | undefined;
49
50
  "onUpdate:block"?: ((value: {
50
51
  readonly form: {
51
52
  readonly style?: string | undefined;
@@ -57,6 +58,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
57
58
  readonly displayName?: string | undefined;
58
59
  readonly kind: "shwfed.component.form";
59
60
  readonly fields: readonly any[];
61
+ readonly readonly?: string | undefined;
60
62
  readonly layouts: readonly {
61
63
  readonly name: string;
62
64
  readonly layout: {
@@ -74,13 +76,11 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
74
76
  };
75
77
  readonly media?: string | undefined;
76
78
  }[];
77
- readonly readonly?: string | undefined;
78
79
  };
79
80
  readonly type: "com.shwfed.block.form";
80
81
  readonly id: string;
81
82
  readonly compatibilityDate: "2026-05-06";
82
83
  }) => any) | undefined;
83
- "onUpdate:modelValue"?: ((value: FormState) => any) | undefined;
84
84
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
85
85
  declare const _default: typeof __VLS_export;
86
86
  export default _default;
@@ -10,6 +10,7 @@ type __VLS_ModelProps = {
10
10
  };
11
11
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
12
12
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
13
+ "update:modelValue": (value: FormState) => any;
13
14
  "update:block": (value: {
14
15
  readonly form: {
15
16
  readonly style?: string | undefined;
@@ -21,6 +22,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
21
22
  readonly displayName?: string | undefined;
22
23
  readonly kind: "shwfed.component.form";
23
24
  readonly fields: readonly any[];
25
+ readonly readonly?: string | undefined;
24
26
  readonly layouts: readonly {
25
27
  readonly name: string;
26
28
  readonly layout: {
@@ -38,14 +40,13 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
38
40
  };
39
41
  readonly media?: string | undefined;
40
42
  }[];
41
- readonly readonly?: string | undefined;
42
43
  };
43
44
  readonly type: "com.shwfed.block.form";
44
45
  readonly id: string;
45
46
  readonly compatibilityDate: "2026-05-06";
46
47
  }) => any;
47
- "update:modelValue": (value: FormState) => any;
48
48
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
49
+ "onUpdate:modelValue"?: ((value: FormState) => any) | undefined;
49
50
  "onUpdate:block"?: ((value: {
50
51
  readonly form: {
51
52
  readonly style?: string | undefined;
@@ -57,6 +58,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
57
58
  readonly displayName?: string | undefined;
58
59
  readonly kind: "shwfed.component.form";
59
60
  readonly fields: readonly any[];
61
+ readonly readonly?: string | undefined;
60
62
  readonly layouts: readonly {
61
63
  readonly name: string;
62
64
  readonly layout: {
@@ -74,13 +76,11 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
74
76
  };
75
77
  readonly media?: string | undefined;
76
78
  }[];
77
- readonly readonly?: string | undefined;
78
79
  };
79
80
  readonly type: "com.shwfed.block.form";
80
81
  readonly id: string;
81
82
  readonly compatibilityDate: "2026-05-06";
82
83
  }) => any) | undefined;
83
- "onUpdate:modelValue"?: ((value: FormState) => any) | undefined;
84
84
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
85
85
  declare const _default: typeof __VLS_export;
86
86
  export default _default;
@@ -31,6 +31,7 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
31
31
  readonly displayName?: string | undefined;
32
32
  readonly kind: "shwfed.component.form";
33
33
  readonly fields: readonly any[];
34
+ readonly readonly?: string | undefined;
34
35
  readonly layouts: readonly {
35
36
  readonly name: string;
36
37
  readonly layout: {
@@ -48,7 +49,6 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
48
49
  };
49
50
  readonly media?: string | undefined;
50
51
  }[];
51
- readonly readonly?: string | undefined;
52
52
  }, Schema.Struct<{
53
53
  fields: Schema.Array$<Schema.Schema<any, any, never>>;
54
54
  layouts: Schema.refine<readonly {
@@ -111,6 +111,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
111
111
  readonly displayName?: string | undefined;
112
112
  readonly kind: "shwfed.component.form";
113
113
  readonly fields: readonly any[];
114
+ readonly readonly?: string | undefined;
114
115
  readonly layouts: readonly {
115
116
  readonly name: string;
116
117
  readonly layout: {
@@ -128,7 +129,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
128
129
  };
129
130
  readonly media?: string | undefined;
130
131
  }[];
131
- readonly readonly?: string | undefined;
132
132
  } | undefined;
133
133
  readonly dataSource?: {
134
134
  readonly data: string;
@@ -359,6 +359,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
359
359
  readonly displayName?: string | undefined;
360
360
  readonly kind: "shwfed.component.form";
361
361
  readonly fields: readonly any[];
362
+ readonly readonly?: string | undefined;
362
363
  readonly layouts: readonly {
363
364
  readonly name: string;
364
365
  readonly layout: {
@@ -376,7 +377,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
376
377
  };
377
378
  readonly media?: string | undefined;
378
379
  }[];
379
- readonly readonly?: string | undefined;
380
380
  } | undefined;
381
381
  readonly dataSource?: {
382
382
  readonly data: string;
@@ -111,6 +111,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
111
111
  readonly displayName?: string | undefined;
112
112
  readonly kind: "shwfed.component.form";
113
113
  readonly fields: readonly any[];
114
+ readonly readonly?: string | undefined;
114
115
  readonly layouts: readonly {
115
116
  readonly name: string;
116
117
  readonly layout: {
@@ -128,7 +129,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
128
129
  };
129
130
  readonly media?: string | undefined;
130
131
  }[];
131
- readonly readonly?: string | undefined;
132
132
  } | undefined;
133
133
  readonly dataSource?: {
134
134
  readonly data: string;
@@ -359,6 +359,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
359
359
  readonly displayName?: string | undefined;
360
360
  readonly kind: "shwfed.component.form";
361
361
  readonly fields: readonly any[];
362
+ readonly readonly?: string | undefined;
362
363
  readonly layouts: readonly {
363
364
  readonly name: string;
364
365
  readonly layout: {
@@ -376,7 +377,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
376
377
  };
377
378
  readonly media?: string | undefined;
378
379
  }[];
379
- readonly readonly?: string | undefined;
380
380
  } | undefined;
381
381
  readonly dataSource?: {
382
382
  readonly data: string;
@@ -106,6 +106,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
106
106
  readonly displayName?: string | undefined;
107
107
  readonly kind: "shwfed.component.form";
108
108
  readonly fields: readonly any[];
109
+ readonly readonly?: string | undefined;
109
110
  readonly layouts: readonly {
110
111
  readonly name: string;
111
112
  readonly layout: {
@@ -123,7 +124,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
123
124
  };
124
125
  readonly media?: string | undefined;
125
126
  }[];
126
- readonly readonly?: string | undefined;
127
127
  } | undefined;
128
128
  readonly dataSource?: {
129
129
  readonly data: string;
@@ -354,6 +354,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
354
354
  readonly displayName?: string | undefined;
355
355
  readonly kind: "shwfed.component.form";
356
356
  readonly fields: readonly any[];
357
+ readonly readonly?: string | undefined;
357
358
  readonly layouts: readonly {
358
359
  readonly name: string;
359
360
  readonly layout: {
@@ -371,7 +372,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
371
372
  };
372
373
  readonly media?: string | undefined;
373
374
  }[];
374
- readonly readonly?: string | undefined;
375
375
  } | undefined;
376
376
  readonly dataSource?: {
377
377
  readonly data: string;
@@ -106,6 +106,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
106
106
  readonly displayName?: string | undefined;
107
107
  readonly kind: "shwfed.component.form";
108
108
  readonly fields: readonly any[];
109
+ readonly readonly?: string | undefined;
109
110
  readonly layouts: readonly {
110
111
  readonly name: string;
111
112
  readonly layout: {
@@ -123,7 +124,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
123
124
  };
124
125
  readonly media?: string | undefined;
125
126
  }[];
126
- readonly readonly?: string | undefined;
127
127
  } | undefined;
128
128
  readonly dataSource?: {
129
129
  readonly data: string;
@@ -354,6 +354,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
354
354
  readonly displayName?: string | undefined;
355
355
  readonly kind: "shwfed.component.form";
356
356
  readonly fields: readonly any[];
357
+ readonly readonly?: string | undefined;
357
358
  readonly layouts: readonly {
358
359
  readonly name: string;
359
360
  readonly layout: {
@@ -371,7 +372,6 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {},
371
372
  };
372
373
  readonly media?: string | undefined;
373
374
  }[];
374
- readonly readonly?: string | undefined;
375
375
  } | undefined;
376
376
  readonly dataSource?: {
377
377
  readonly data: string;
@@ -124,6 +124,7 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
124
124
  readonly displayName?: string | undefined;
125
125
  readonly kind: "shwfed.component.form";
126
126
  readonly fields: readonly any[];
127
+ readonly readonly?: string | undefined;
127
128
  readonly layouts: readonly {
128
129
  readonly name: string;
129
130
  readonly layout: {
@@ -141,7 +142,6 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
141
142
  };
142
143
  readonly media?: string | undefined;
143
144
  }[];
144
- readonly readonly?: string | undefined;
145
145
  } | undefined;
146
146
  readonly dataSource?: {
147
147
  readonly data: string;
@@ -572,6 +572,7 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
572
572
  readonly displayName?: string | undefined;
573
573
  readonly kind: "shwfed.component.form";
574
574
  readonly fields: readonly any[];
575
+ readonly readonly?: string | undefined;
575
576
  readonly layouts: readonly {
576
577
  readonly name: string;
577
578
  readonly layout: {
@@ -589,7 +590,6 @@ export declare function schema(configure: (env: Environment) => void, _blockRef:
589
590
  };
590
591
  readonly media?: string | undefined;
591
592
  }[];
592
- readonly readonly?: string | undefined;
593
593
  }, Schema.Struct<{
594
594
  fields: Schema.Array$<Schema.Schema<any, any, never>>;
595
595
  layouts: Schema.refine<readonly {
@@ -11,7 +11,6 @@ type __VLS_ModelProps = {
11
11
  };
12
12
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
13
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
- "select-version": (version: string) => any;
15
14
  "update:config": (value: Readonly<{
16
15
  kind: "shwfed.component.page";
17
16
  title?: import("../../share/locale.js").LocaleValue;
@@ -25,8 +24,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
25
24
  }>[];
26
25
  }>;
27
26
  }> | null | undefined) => any;
27
+ "select-version": (version: string) => any;
28
28
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
29
- "onSelect-version"?: ((version: string) => any) | undefined;
30
29
  "onUpdate:config"?: ((value: Readonly<{
31
30
  kind: "shwfed.component.page";
32
31
  title?: import("../../share/locale.js").LocaleValue;
@@ -40,6 +39,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
40
39
  }>[];
41
40
  }>;
42
41
  }> | null | undefined) => any) | undefined;
42
+ "onSelect-version"?: ((version: string) => any) | undefined;
43
43
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
44
44
  declare const _default: typeof __VLS_export;
45
45
  export default _default;
@@ -11,7 +11,6 @@ type __VLS_ModelProps = {
11
11
  };
12
12
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
13
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
- "select-version": (version: string) => any;
15
14
  "update:config": (value: Readonly<{
16
15
  kind: "shwfed.component.page";
17
16
  title?: import("../../share/locale.js").LocaleValue;
@@ -25,8 +24,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
25
24
  }>[];
26
25
  }>;
27
26
  }> | null | undefined) => any;
27
+ "select-version": (version: string) => any;
28
28
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
29
- "onSelect-version"?: ((version: string) => any) | undefined;
30
29
  "onUpdate:config"?: ((value: Readonly<{
31
30
  kind: "shwfed.component.page";
32
31
  title?: import("../../share/locale.js").LocaleValue;
@@ -40,6 +39,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {},
40
39
  }>[];
41
40
  }>;
42
41
  }> | null | undefined) => any) | undefined;
42
+ "onSelect-version"?: ((version: string) => any) | undefined;
43
43
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
44
44
  declare const _default: typeof __VLS_export;
45
45
  export default _default;
@@ -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;