@shwfed/config 2.3.28 → 2.3.29

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 (127) hide show
  1. package/dist/mcp.mjs +3124 -1268
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{config-fvkC2rB8.js → config-6IiXCmyu.js} +1 -1
  4. package/dist/preview/assets/{config--PcXQV_r.js → config-BJzUh1_G.js} +1 -1
  5. package/dist/preview/assets/{config-B5avpKJE.js → config-Bl80ye-i.js} +1 -1
  6. package/dist/preview/assets/{config-DDfTl9Cs.js → config-CZOeZ8ty.js} +1 -1
  7. package/dist/preview/assets/{config-CJHPt8Gx.js → config-DaZD4ZSa.js} +1 -1
  8. package/dist/preview/assets/{config-CNo3isHa.js → config-DhsbcNzx.js} +1 -1
  9. package/dist/preview/assets/{config-5KVDXgUF.js → config-Diuyh0Ex.js} +1 -1
  10. package/dist/preview/assets/{config-D0_1yZdF.js → config-aK67Rsw5.js} +1 -1
  11. package/dist/preview/assets/{config-CQHS6cZe.js → config-rpX_Mc6I.js} +1 -1
  12. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-RM-qDh0R.js → definition.vue_vue_type_script_setup_true_lang-C_jU8d47.js} +1 -1
  13. package/dist/preview/assets/{index-a2QwAots.css → index-2eQR4s3q.css} +1 -1
  14. package/dist/preview/assets/index-DEF3_MKr.js +659 -0
  15. package/dist/preview/assets/index-Df-thth9.js +1 -0
  16. package/dist/preview/assets/{runtime-Dr_10emf.js → runtime-3p1K6te5.js} +1 -1
  17. package/dist/preview/assets/{runtime-C_XX6a0C.js → runtime-BcLnafic.js} +1 -1
  18. package/dist/preview/assets/{runtime-CtqwtTE_.js → runtime-CSaV-359.js} +1 -1
  19. package/dist/preview/assets/{runtime-CCbyrqQT.js → runtime-CjR8Vi5N.js} +1 -1
  20. package/dist/preview/assets/{runtime-BGTWf-O7.js → runtime-D_fJCKX_.js} +1 -1
  21. package/dist/preview/assets/{runtime-BPjZQmcY.js → runtime-DpeCgGEG.js} +1 -1
  22. package/dist/preview/assets/{runtime-DcrzodsN.js → runtime-K2a1x0TJ.js} +1 -1
  23. package/dist/preview/assets/{runtime-Dy4ZmQ-n.js → runtime-g9Zu3VNQ.js} +1 -1
  24. package/dist/preview/assets/{runtime-Bq3fmxeF.js → runtime-jTnh_6Dm.js} +1 -1
  25. package/dist/preview/index.html +2 -2
  26. package/dist/runtime/components/block-layout-editor/index.d.vue.ts +10 -2
  27. package/dist/runtime/components/block-layout-editor/index.vue +44 -8
  28. package/dist/runtime/components/block-layout-editor/index.vue.d.ts +10 -2
  29. package/dist/runtime/components/config/config.vue +35 -0
  30. package/dist/runtime/components/config/use-editor.d.ts +11 -1
  31. package/dist/runtime/components/config/use-editor.js +27 -1
  32. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/config.d.vue.ts +163 -0
  33. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/config.vue +745 -0
  34. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/config.vue.d.ts +163 -0
  35. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/runtime.d.vue.ts +8 -0
  36. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/runtime.vue +383 -0
  37. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/runtime.vue.d.ts +8 -0
  38. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/schema.d.ts +264 -0
  39. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.multi/schema.js +183 -0
  40. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/config.d.vue.ts +163 -0
  41. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/config.vue +745 -0
  42. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/config.vue.d.ts +163 -0
  43. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/runtime.d.vue.ts +8 -0
  44. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/runtime.vue +402 -0
  45. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/runtime.vue.d.ts +8 -0
  46. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/schema.d.ts +264 -0
  47. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.combobox.single/schema.js +209 -0
  48. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +129 -0
  49. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.vue +618 -0
  50. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +129 -0
  51. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/runtime.d.vue.ts +8 -0
  52. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/runtime.vue +501 -0
  53. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/runtime.vue.d.ts +8 -0
  54. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/schema.d.ts +99 -0
  55. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/schema.js +133 -0
  56. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +127 -0
  57. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.vue +550 -0
  58. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +127 -0
  59. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/runtime.d.vue.ts +8 -0
  60. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/runtime.vue +496 -0
  61. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/runtime.vue.d.ts +8 -0
  62. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/schema.d.ts +96 -0
  63. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/schema.js +125 -0
  64. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.d.vue.ts +133 -0
  65. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.vue +605 -0
  66. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.vue.d.ts +133 -0
  67. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/runtime.d.vue.ts +8 -0
  68. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/runtime.vue +401 -0
  69. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/runtime.vue.d.ts +8 -0
  70. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/schema.d.ts +102 -0
  71. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/schema.js +142 -0
  72. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.d.vue.ts +131 -0
  73. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.vue +560 -0
  74. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.vue.d.ts +131 -0
  75. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/runtime.d.vue.ts +8 -0
  76. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/runtime.vue +395 -0
  77. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/runtime.vue.d.ts +8 -0
  78. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/schema.d.ts +96 -0
  79. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/schema.js +118 -0
  80. package/dist/runtime/components/form/fields/2026-05-28/tree-combobox-shared.d.ts +35 -0
  81. package/dist/runtime/components/form/fields/2026-05-28/tree-combobox-shared.js +31 -0
  82. package/dist/runtime/components/form/unit-config.vue +45 -1
  83. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +183 -0
  84. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue +931 -0
  85. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +183 -0
  86. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/runtime.d.vue.ts +9 -0
  87. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/runtime.vue +463 -0
  88. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/runtime.vue.d.ts +9 -0
  89. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/schema.d.ts +283 -0
  90. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/schema.js +275 -0
  91. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +183 -0
  92. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue +931 -0
  93. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +183 -0
  94. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/runtime.d.vue.ts +9 -0
  95. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/runtime.vue +414 -0
  96. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/runtime.vue.d.ts +9 -0
  97. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/schema.d.ts +283 -0
  98. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/schema.js +275 -0
  99. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +133 -0
  100. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue +632 -0
  101. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +133 -0
  102. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/runtime.d.vue.ts +9 -0
  103. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/runtime.vue +461 -0
  104. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/runtime.vue.d.ts +9 -0
  105. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +93 -0
  106. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/schema.js +161 -0
  107. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +131 -0
  108. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue +563 -0
  109. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +131 -0
  110. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/runtime.d.vue.ts +9 -0
  111. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/runtime.vue +443 -0
  112. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/runtime.vue.d.ts +9 -0
  113. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/schema.d.ts +90 -0
  114. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/schema.js +153 -0
  115. package/dist/runtime/components/table/columns/2026-05-28/tree-combobox-shared.d.ts +35 -0
  116. package/dist/runtime/components/table/columns/2026-05-28/tree-combobox-shared.js +31 -0
  117. package/dist/runtime/components/table/config.vue +1 -30
  118. package/dist/runtime/components/ui/command/CommandItem.d.vue.ts +7 -0
  119. package/dist/runtime/components/ui/command/CommandItem.vue +13 -4
  120. package/dist/runtime/components/ui/command/CommandItem.vue.d.ts +7 -0
  121. package/dist/runtime/share/clipboard.d.ts +26 -0
  122. package/dist/runtime/share/clipboard.js +82 -0
  123. package/dist/runtime/share/layout.d.ts +4 -0
  124. package/dist/runtime/share/layout.js +35 -0
  125. package/package.json +1 -1
  126. package/dist/preview/assets/index-DNd8J9Zv.js +0 -643
  127. package/dist/preview/assets/index-DrIMqXAa.js +0 -1
@@ -0,0 +1,560 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { ExpressionEditor } from "../../../../ui/expression-editor";
4
+ import DerivedValueEditor from "../../../DerivedValueEditor.vue";
5
+ import { Field, FieldLabel } from "../../../../ui/field";
6
+ import { InputGroup, InputGroupInput } from "../../../../ui/input-group";
7
+ import { Locale as LocaleField } from "../../../../ui/locale";
8
+ import { Markdown } from "../../../../ui/markdown";
9
+ import { Switch } from "../../../../ui/switch";
10
+ import { getStructFieldDescription, getStructFieldTitle } from "../../../schema";
11
+ import { DataSource } from "../../../../table/schema";
12
+ import { schema } from "./schema";
13
+ defineOptions({ name: "ShwfedTreeSingleFieldConfig" });
14
+ const value = defineModel({ type: null, ...{ required: true } });
15
+ const fieldSchema = schema(() => {
16
+ });
17
+ const fieldTitle = (f) => getStructFieldTitle(fieldSchema, f) ?? f;
18
+ const fieldDescription = (f) => getStructFieldDescription(fieldSchema, f);
19
+ const dataSourceSchema = DataSource(() => {
20
+ });
21
+ const dataSourceFieldTitle = (f) => getStructFieldTitle(dataSourceSchema, f) ?? f;
22
+ const dataSourceFieldDescription = (f) => getStructFieldDescription(dataSourceSchema, f);
23
+ const filterSchema = fieldSchema.fields.filter.from;
24
+ const filterFieldTitle = (f) => getStructFieldTitle(filterSchema, f) ?? f;
25
+ const filterFieldDescription = (f) => getStructFieldDescription(filterSchema, f);
26
+ const nodeExtraVars = {
27
+ node: {
28
+ type: "dyn",
29
+ label: "\u5F53\u524D\u8282\u70B9",
30
+ description: "\u7531 `\u6570\u636E` \u8868\u8FBE\u5F0F\u8FD4\u56DE\u7684\u6BCF\u4E00\u9879\uFF1B\u7C7B\u578B\u5728\u914D\u7F6E\u65F6\u672A\u77E5\uFF08`dyn`\uFF09"
31
+ }
32
+ };
33
+ const jsonExtraVars = {
34
+ json: {
35
+ type: "optional<dyn>",
36
+ label: "HTTP \u54CD\u5E94\u4F53",
37
+ description: "\u5DF2\u89E3\u6790\u7684 JSON \u54CD\u5E94\uFF1B\u672A\u914D\u7F6E `request` \u65F6\u4E3A `none`"
38
+ }
39
+ };
40
+ const bindingText = computed({
41
+ get: () => value.value.binding ?? "",
42
+ set: (next) => {
43
+ const trimmed = next.trim();
44
+ if (trimmed.length === 0) {
45
+ const { binding: _omit, ...rest } = value.value;
46
+ value.value = rest;
47
+ } else {
48
+ value.value = { ...value.value, binding: trimmed };
49
+ }
50
+ }
51
+ });
52
+ function setDataSourceData(next) {
53
+ value.value = {
54
+ ...value.value,
55
+ dataSource: { ...value.value.dataSource, data: next }
56
+ };
57
+ }
58
+ function setDataSourceRequest(next) {
59
+ const trimmed = next.trim();
60
+ if (trimmed.length === 0) {
61
+ const { request: _omit, ...rest } = value.value.dataSource;
62
+ value.value = { ...value.value, dataSource: rest };
63
+ } else {
64
+ value.value = {
65
+ ...value.value,
66
+ dataSource: { ...value.value.dataSource, request: next }
67
+ };
68
+ }
69
+ }
70
+ function setOptionalExpression(key, next) {
71
+ if (next.length === 0) {
72
+ const { [key]: _omit, ...rest } = value.value;
73
+ value.value = rest;
74
+ } else {
75
+ value.value = { ...value.value, [key]: next };
76
+ }
77
+ }
78
+ const filter = computed(() => value.value.filter);
79
+ function setFilterEnabled(next) {
80
+ if (next) {
81
+ value.value = {
82
+ ...value.value,
83
+ filter: { ...value.value.filter ?? {}, enabled: true }
84
+ };
85
+ } else {
86
+ const { filter: _omit, ...rest } = value.value;
87
+ value.value = rest;
88
+ }
89
+ }
90
+ function setFilterLabel(label) {
91
+ const cur = value.value.filter;
92
+ if (!cur) return;
93
+ const isEmpty = !label || label.every((l) => l.message.trim().length === 0);
94
+ if (isEmpty) {
95
+ const { label: _omit, ...rest } = cur;
96
+ value.value = { ...value.value, filter: rest };
97
+ } else {
98
+ value.value = { ...value.value, filter: { ...cur, label } };
99
+ }
100
+ }
101
+ function setFilterKeywords(next) {
102
+ const cur = value.value.filter;
103
+ if (!cur) return;
104
+ if (next.length === 0) {
105
+ const { keywords: _omit, ...rest } = cur;
106
+ value.value = { ...value.value, filter: rest };
107
+ } else {
108
+ value.value = { ...value.value, filter: { ...cur, keywords: next } };
109
+ }
110
+ }
111
+ </script>
112
+
113
+ <template>
114
+ <div class="flex flex-col gap-3">
115
+ <!-- Row 1: 内部名称 + 绑定路径 -->
116
+ <div class="grid grid-cols-2 gap-3">
117
+ <Field orientation="vertical">
118
+ <FieldLabel class="text-xs text-zinc-500">
119
+ <template
120
+ v-if="fieldDescription('displayName')"
121
+ #tooltip
122
+ >
123
+ <Markdown
124
+ :source="fieldDescription('displayName')"
125
+ block
126
+ class="prose prose-sm prose-zinc"
127
+ />
128
+ </template>
129
+ {{ fieldTitle("displayName") }}
130
+ </FieldLabel>
131
+ <InputGroup>
132
+ <InputGroupInput
133
+ :model-value="value.displayName ?? ''"
134
+ placeholder="例:所属部门"
135
+ @update:model-value="(v) => {
136
+ const s = String(v ?? '');
137
+ value = { ...value, displayName: s.length > 0 ? s : void 0 };
138
+ }"
139
+ />
140
+ </InputGroup>
141
+ </Field>
142
+
143
+ <Field orientation="vertical">
144
+ <FieldLabel class="text-xs text-zinc-500">
145
+ <template
146
+ v-if="fieldDescription('binding')"
147
+ #tooltip
148
+ >
149
+ <Markdown
150
+ :source="fieldDescription('binding')"
151
+ block
152
+ class="prose prose-sm prose-zinc"
153
+ />
154
+ </template>
155
+ {{ fieldTitle("binding") }}
156
+ </FieldLabel>
157
+ <InputGroup>
158
+ <InputGroupInput
159
+ v-model="bindingText"
160
+ placeholder="例:user.departmentId"
161
+ class="font-mono"
162
+ />
163
+ </InputGroup>
164
+ </Field>
165
+ </div>
166
+
167
+ <!-- Row 2: 标签 + 提示 -->
168
+ <div class="grid grid-cols-2 gap-3">
169
+ <Field orientation="vertical">
170
+ <FieldLabel class="text-xs text-zinc-500">
171
+ <template
172
+ v-if="fieldDescription('label')"
173
+ #tooltip
174
+ >
175
+ <Markdown
176
+ :source="fieldDescription('label')"
177
+ block
178
+ class="prose prose-sm prose-zinc"
179
+ />
180
+ </template>
181
+ {{ fieldTitle("label") }}
182
+ </FieldLabel>
183
+ <LocaleField
184
+ translate-hint="form field label"
185
+ :model-value="value.label"
186
+ @update:model-value="(v) => value = { ...value, label: v }"
187
+ />
188
+ </Field>
189
+
190
+ <Field orientation="vertical">
191
+ <FieldLabel class="text-xs text-zinc-500">
192
+ <template
193
+ v-if="fieldDescription('tooltip')"
194
+ #tooltip
195
+ >
196
+ <Markdown
197
+ :source="fieldDescription('tooltip')"
198
+ block
199
+ class="prose prose-sm prose-zinc"
200
+ />
201
+ </template>
202
+ {{ fieldTitle("tooltip") }}
203
+ </FieldLabel>
204
+ <LocaleField
205
+ markdown
206
+ translate-hint="form field tooltip"
207
+ :model-value="value.tooltip"
208
+ @update:model-value="(v) => value = { ...value, tooltip: v }"
209
+ />
210
+ </Field>
211
+ </div>
212
+
213
+ <!-- 数据源: request (optional) + data -->
214
+ <h3 class="text-xs font-medium text-zinc-500">
215
+ {{ fieldTitle("dataSource") }}
216
+ </h3>
217
+
218
+ <Field orientation="vertical">
219
+ <FieldLabel class="text-xs text-zinc-500">
220
+ <template
221
+ v-if="dataSourceFieldDescription('request')"
222
+ #tooltip
223
+ >
224
+ <Markdown
225
+ :source="dataSourceFieldDescription('request')"
226
+ block
227
+ class="prose prose-sm prose-zinc"
228
+ />
229
+ </template>
230
+ {{ dataSourceFieldTitle("request") }}
231
+ </FieldLabel>
232
+ <ExpressionEditor
233
+ :model-value="value.dataSource.request ?? ''"
234
+ placeholder="如 http.get('/api/departments/tree')"
235
+ result-type="HttpRequest"
236
+ multiline
237
+ class="min-h-20"
238
+ @update:model-value="setDataSourceRequest"
239
+ />
240
+ </Field>
241
+
242
+ <Field orientation="vertical">
243
+ <FieldLabel class="text-xs text-zinc-500">
244
+ <template
245
+ v-if="dataSourceFieldDescription('data')"
246
+ #tooltip
247
+ >
248
+ <Markdown
249
+ :source="dataSourceFieldDescription('data')"
250
+ block
251
+ class="prose prose-sm prose-zinc"
252
+ />
253
+ </template>
254
+ {{ dataSourceFieldTitle("data") }}
255
+ </FieldLabel>
256
+ <ExpressionEditor
257
+ :model-value="value.dataSource.data"
258
+ placeholder="如 json.?value.roots.orValue([])"
259
+ result-type="list"
260
+ :extra-vars="jsonExtraVars"
261
+ @update:model-value="setDataSourceData"
262
+ />
263
+ </Field>
264
+
265
+ <!-- 节点表达式 -->
266
+ <h3 class="text-xs font-medium text-zinc-500">
267
+ 节点
268
+ </h3>
269
+
270
+ <div class="grid grid-cols-2 gap-3">
271
+ <Field orientation="vertical">
272
+ <FieldLabel class="text-xs text-zinc-500">
273
+ <template
274
+ v-if="fieldDescription('nodeKey')"
275
+ #tooltip
276
+ >
277
+ <Markdown
278
+ :source="fieldDescription('nodeKey')"
279
+ block
280
+ class="prose prose-sm prose-zinc"
281
+ />
282
+ </template>
283
+ {{ fieldTitle("nodeKey") }}
284
+ </FieldLabel>
285
+ <ExpressionEditor
286
+ :model-value="value.nodeKey"
287
+ placeholder="例:string(node.id)"
288
+ :result-type="['string', 'number', 'dyn']"
289
+ :extra-vars="nodeExtraVars"
290
+ class="min-h-10"
291
+ @update:model-value="(v) => value = { ...value, nodeKey: v }"
292
+ />
293
+ </Field>
294
+
295
+ <Field orientation="vertical">
296
+ <FieldLabel class="text-xs text-zinc-500">
297
+ <template
298
+ v-if="fieldDescription('nodeChildren')"
299
+ #tooltip
300
+ >
301
+ <Markdown
302
+ :source="fieldDescription('nodeChildren')"
303
+ block
304
+ class="prose prose-sm prose-zinc"
305
+ />
306
+ </template>
307
+ {{ fieldTitle("nodeChildren") }}
308
+ </FieldLabel>
309
+ <ExpressionEditor
310
+ :model-value="value.nodeChildren"
311
+ placeholder="例:has(node.children) ? node.children : null"
312
+ result-type="list"
313
+ :extra-vars="nodeExtraVars"
314
+ class="min-h-10"
315
+ @update:model-value="(v) => value = { ...value, nodeChildren: v }"
316
+ />
317
+ </Field>
318
+ </div>
319
+
320
+ <div class="grid grid-cols-2 gap-3">
321
+ <Field orientation="vertical">
322
+ <FieldLabel class="text-xs text-zinc-500">
323
+ <template
324
+ v-if="fieldDescription('nodeLabel')"
325
+ #tooltip
326
+ >
327
+ <Markdown
328
+ :source="fieldDescription('nodeLabel')"
329
+ block
330
+ class="prose prose-sm prose-zinc"
331
+ />
332
+ </template>
333
+ {{ fieldTitle("nodeLabel") }}
334
+ </FieldLabel>
335
+ <LocaleField
336
+ markdown
337
+ translate-hint="tree node label"
338
+ :model-value="value.nodeLabel"
339
+ @update:model-value="(v) => value = { ...value, nodeLabel: v }"
340
+ />
341
+ </Field>
342
+
343
+ <Field orientation="vertical">
344
+ <FieldLabel class="text-xs text-zinc-500">
345
+ <template
346
+ v-if="fieldDescription('nodeTooltip')"
347
+ #tooltip
348
+ >
349
+ <Markdown
350
+ :source="fieldDescription('nodeTooltip')"
351
+ block
352
+ class="prose prose-sm prose-zinc"
353
+ />
354
+ </template>
355
+ {{ fieldTitle("nodeTooltip") }}
356
+ </FieldLabel>
357
+ <LocaleField
358
+ markdown
359
+ translate-hint="tree node tooltip"
360
+ :model-value="value.nodeTooltip"
361
+ @update:model-value="(v) => value = { ...value, nodeTooltip: v }"
362
+ />
363
+ </Field>
364
+ </div>
365
+
366
+ <!-- 行为: 节点可选条件 + 默认全部展开 -->
367
+ <div class="grid grid-cols-2 gap-3">
368
+ <Field orientation="vertical">
369
+ <FieldLabel class="text-xs text-zinc-500">
370
+ <template
371
+ v-if="fieldDescription('nodeSelectable')"
372
+ #tooltip
373
+ >
374
+ <Markdown
375
+ :source="fieldDescription('nodeSelectable')"
376
+ block
377
+ class="prose prose-sm prose-zinc"
378
+ />
379
+ </template>
380
+ {{ fieldTitle("nodeSelectable") }}
381
+ </FieldLabel>
382
+ <ExpressionEditor
383
+ :model-value="value.nodeSelectable ?? ''"
384
+ placeholder="例:node.kind == 'leaf'"
385
+ result-type="bool"
386
+ :extra-vars="nodeExtraVars"
387
+ class="min-h-10"
388
+ @update:model-value="(v) => setOptionalExpression('nodeSelectable', v)"
389
+ />
390
+ </Field>
391
+
392
+ <Field orientation="vertical">
393
+ <FieldLabel class="text-xs text-zinc-500">
394
+ <template
395
+ v-if="fieldDescription('expandAll')"
396
+ #tooltip
397
+ >
398
+ <Markdown
399
+ :source="fieldDescription('expandAll')"
400
+ block
401
+ class="prose prose-sm prose-zinc"
402
+ />
403
+ </template>
404
+ {{ fieldTitle("expandAll") }}
405
+ </FieldLabel>
406
+ <div>
407
+ <Switch
408
+ :model-value="value.expandAll ?? false"
409
+ @update:model-value="(v) => value = { ...value, expandAll: v }"
410
+ />
411
+ </div>
412
+ </Field>
413
+ </div>
414
+
415
+ <!-- 过滤 (collapsible optional): toggle inlined with the section heading -->
416
+ <div class="flex items-center gap-2">
417
+ <h3 class="text-xs font-medium text-zinc-500">
418
+ {{ fieldTitle("filter") }}
419
+ </h3>
420
+ <Switch
421
+ size="sm"
422
+ :model-value="filter?.enabled ?? false"
423
+ :aria-label="filterFieldTitle('enabled')"
424
+ @update:model-value="setFilterEnabled"
425
+ />
426
+ </div>
427
+
428
+ <div
429
+ v-if="filter?.enabled"
430
+ class="grid grid-cols-2 gap-3"
431
+ >
432
+ <Field orientation="vertical">
433
+ <FieldLabel class="text-xs text-zinc-500">
434
+ <template
435
+ v-if="filterFieldDescription('label')"
436
+ #tooltip
437
+ >
438
+ <Markdown
439
+ :source="filterFieldDescription('label')"
440
+ block
441
+ class="prose prose-sm prose-zinc"
442
+ />
443
+ </template>
444
+ {{ filterFieldTitle("label") }}
445
+ </FieldLabel>
446
+ <LocaleField
447
+ translate-hint="tree filter input label"
448
+ :model-value="filter.label"
449
+ @update:model-value="setFilterLabel"
450
+ />
451
+ </Field>
452
+
453
+ <Field orientation="vertical">
454
+ <FieldLabel class="text-xs text-zinc-500">
455
+ <template
456
+ v-if="filterFieldDescription('keywords')"
457
+ #tooltip
458
+ >
459
+ <Markdown
460
+ :source="filterFieldDescription('keywords')"
461
+ block
462
+ class="prose prose-sm prose-zinc"
463
+ />
464
+ </template>
465
+ {{ filterFieldTitle("keywords") }}
466
+ </FieldLabel>
467
+ <ExpressionEditor
468
+ :model-value="filter.keywords ?? ''"
469
+ placeholder="例:[node.code, node.alias]"
470
+ result-type="list"
471
+ :extra-vars="nodeExtraVars"
472
+ class="min-h-10"
473
+ @update:model-value="setFilterKeywords"
474
+ />
475
+ </Field>
476
+ </div>
477
+
478
+ <!-- 通用:隐藏 / 禁用 / 只读 + 派生值 — conventionally last -->
479
+ <div class="grid grid-cols-3 gap-3">
480
+ <Field orientation="vertical">
481
+ <FieldLabel class="text-xs text-zinc-500">
482
+ <template #tooltip>
483
+ <Markdown
484
+ :source="fieldDescription('hidden') ?? '\u8FD4\u56DE `true` \u65F6\u5B57\u6BB5\u5728\u6240\u6709\u5E03\u5C40\u4E2D\u90FD\u4E0D\u6E32\u67D3'"
485
+ block
486
+ class="prose prose-sm prose-zinc"
487
+ />
488
+ </template>
489
+ {{ fieldTitle("hidden") }}
490
+ </FieldLabel>
491
+ <ExpressionEditor
492
+ :model-value="value.hidden ?? ''"
493
+ placeholder="例:form.role == 'guest'"
494
+ result-type="bool"
495
+ class="min-h-10"
496
+ @update:model-value="(v) => setOptionalExpression('hidden', v)"
497
+ />
498
+ </Field>
499
+
500
+ <Field orientation="vertical">
501
+ <FieldLabel class="text-xs text-zinc-500">
502
+ <template #tooltip>
503
+ <Markdown
504
+ :source="fieldDescription('disabled') ?? '\u8FD4\u56DE `true` \u65F6\u4ECD\u6E32\u67D3\u4F46\u4E0D\u53EF\u52FE\u9009'"
505
+ block
506
+ class="prose prose-sm prose-zinc"
507
+ />
508
+ </template>
509
+ {{ fieldTitle("disabled") }}
510
+ </FieldLabel>
511
+ <ExpressionEditor
512
+ :model-value="value.disabled ?? ''"
513
+ placeholder="例:form.status == 'locked'"
514
+ result-type="bool"
515
+ class="min-h-10"
516
+ @update:model-value="(v) => setOptionalExpression('disabled', v)"
517
+ />
518
+ </Field>
519
+
520
+ <Field orientation="vertical">
521
+ <FieldLabel class="text-xs text-zinc-500">
522
+ <template #tooltip>
523
+ <Markdown
524
+ :source="fieldDescription('readonly') ?? '\u8FD4\u56DE `true` \u65F6\u4EC5\u4EE5\u7EAF\u6587\u672C\u5C55\u793A\u5F53\u524D\u5DF2\u52FE\u9009\u8282\u70B9\u7684\u6807\u7B7E'"
525
+ block
526
+ class="prose prose-sm prose-zinc"
527
+ />
528
+ </template>
529
+ {{ fieldTitle("readonly") }}
530
+ </FieldLabel>
531
+ <ExpressionEditor
532
+ :model-value="value.readonly ?? ''"
533
+ placeholder="例:form.id != null"
534
+ result-type="bool"
535
+ class="min-h-10"
536
+ @update:model-value="(v) => setOptionalExpression('readonly', v)"
537
+ />
538
+ </Field>
539
+ </div>
540
+
541
+ <Field orientation="vertical">
542
+ <FieldLabel class="text-xs text-zinc-500">
543
+ <template #tooltip>
544
+ <Markdown
545
+ :source="fieldDescription('derived')"
546
+ block
547
+ class="prose prose-sm prose-zinc"
548
+ />
549
+ </template>
550
+ {{ fieldTitle("derived") }}
551
+ </FieldLabel>
552
+ <DerivedValueEditor
553
+ :model-value="value.derived"
554
+ result-type="dyn"
555
+ placeholder="例:form.defaultDepartmentIds"
556
+ @update:model-value="(v) => value = { ...value, derived: v }"
557
+ />
558
+ </Field>
559
+ </div>
560
+ </template>
@@ -0,0 +1,131 @@
1
+ import { type Value } from './schema.js';
2
+ type __VLS_ModelProps = {
3
+ modelValue: Value;
4
+ };
5
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
6
+ "update:modelValue": (value: {
7
+ readonly filter?: {
8
+ readonly label?: readonly [{
9
+ readonly locale: "zh";
10
+ readonly message: string;
11
+ }, ...{
12
+ readonly locale: "en" | "ja" | "ko";
13
+ readonly message: string;
14
+ }[]] | undefined;
15
+ readonly enabled: boolean;
16
+ readonly keywords?: string | undefined;
17
+ } | undefined;
18
+ readonly label?: readonly [{
19
+ readonly locale: "zh";
20
+ readonly message: string;
21
+ }, ...{
22
+ readonly locale: "en" | "ja" | "ko";
23
+ readonly message: string;
24
+ }[]] | undefined;
25
+ readonly disabled?: string | undefined;
26
+ readonly type: "com.shwfed.form.field.tree.single";
27
+ readonly id: string;
28
+ readonly hidden?: string | undefined;
29
+ readonly tooltip?: readonly [{
30
+ readonly locale: "zh";
31
+ readonly message: string;
32
+ }, ...{
33
+ readonly locale: "en" | "ja" | "ko";
34
+ readonly message: string;
35
+ }[]] | undefined;
36
+ readonly displayName?: string | undefined;
37
+ readonly compatibilityDate: "2026-05-28";
38
+ readonly readonly?: string | undefined;
39
+ readonly binding?: string | undefined;
40
+ readonly derived?: {
41
+ readonly mode: "formula" | "prefill";
42
+ readonly expression: string;
43
+ } | undefined;
44
+ readonly dataSource: {
45
+ readonly data: string;
46
+ readonly request?: string | undefined;
47
+ };
48
+ readonly nodeKey: string;
49
+ readonly nodeChildren: string;
50
+ readonly nodeLabel: readonly [{
51
+ readonly locale: "zh";
52
+ readonly message: string;
53
+ }, ...{
54
+ readonly locale: "en" | "ja" | "ko";
55
+ readonly message: string;
56
+ }[]];
57
+ readonly expandAll: boolean;
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
+ }) => any;
67
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
68
+ "onUpdate:modelValue"?: ((value: {
69
+ readonly filter?: {
70
+ readonly label?: readonly [{
71
+ readonly locale: "zh";
72
+ readonly message: string;
73
+ }, ...{
74
+ readonly locale: "en" | "ja" | "ko";
75
+ readonly message: string;
76
+ }[]] | undefined;
77
+ readonly enabled: boolean;
78
+ readonly keywords?: string | undefined;
79
+ } | undefined;
80
+ readonly label?: readonly [{
81
+ readonly locale: "zh";
82
+ readonly message: string;
83
+ }, ...{
84
+ readonly locale: "en" | "ja" | "ko";
85
+ readonly message: string;
86
+ }[]] | undefined;
87
+ readonly disabled?: string | undefined;
88
+ readonly type: "com.shwfed.form.field.tree.single";
89
+ readonly id: string;
90
+ readonly hidden?: string | undefined;
91
+ readonly tooltip?: readonly [{
92
+ readonly locale: "zh";
93
+ readonly message: string;
94
+ }, ...{
95
+ readonly locale: "en" | "ja" | "ko";
96
+ readonly message: string;
97
+ }[]] | undefined;
98
+ readonly displayName?: string | undefined;
99
+ readonly compatibilityDate: "2026-05-28";
100
+ readonly readonly?: string | undefined;
101
+ readonly binding?: string | undefined;
102
+ readonly derived?: {
103
+ readonly mode: "formula" | "prefill";
104
+ readonly expression: string;
105
+ } | undefined;
106
+ readonly dataSource: {
107
+ readonly data: string;
108
+ readonly request?: string | undefined;
109
+ };
110
+ readonly nodeKey: string;
111
+ readonly nodeChildren: string;
112
+ readonly nodeLabel: readonly [{
113
+ readonly locale: "zh";
114
+ readonly message: string;
115
+ }, ...{
116
+ readonly locale: "en" | "ja" | "ko";
117
+ readonly message: string;
118
+ }[]];
119
+ readonly expandAll: boolean;
120
+ readonly nodeTooltip?: readonly [{
121
+ readonly locale: "zh";
122
+ readonly message: string;
123
+ }, ...{
124
+ readonly locale: "en" | "ja" | "ko";
125
+ readonly message: string;
126
+ }[]] | undefined;
127
+ readonly nodeSelectable?: string | undefined;
128
+ }) => any) | undefined;
129
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
130
+ declare const _default: typeof __VLS_export;
131
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import type { Value } from './schema.js';
2
+ type __VLS_Props = {
3
+ fieldId: string;
4
+ config: Value;
5
+ };
6
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
7
+ declare const _default: typeof __VLS_export;
8
+ export default _default;