@shwfed/config 2.10.0 → 2.10.1

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 (97) hide show
  1. package/dist/mcp.mjs +4125 -3183
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{FieldGroup.vue_vue_type_script_setup_true_lang-CCaOWk_7.js → FieldGroup.vue_vue_type_script_setup_true_lang-CuFusz5A.js} +1 -1
  4. package/dist/preview/assets/{badge-D9_7atSJ.js → badge-D5FPHSix.js} +1 -1
  5. package/dist/preview/assets/{config-B2d8SiPi.js → config-BHPiQ1lB.js} +1 -1
  6. package/dist/preview/assets/{config-DYxMKhCU.js → config-BWC-Zw21.js} +1 -1
  7. package/dist/preview/assets/{config-CNKb25Qo.js → config-Bg94Z7XN.js} +1 -1
  8. package/dist/preview/assets/{config-CQrqVV1U.js → config-BqSL4UAL.js} +1 -1
  9. package/dist/preview/assets/{config-Bk2VSNeu.js → config-CeRBpZbE.js} +1 -1
  10. package/dist/preview/assets/{config-C9WPOoA7.js → config-CfjcFb_E.js} +1 -1
  11. package/dist/preview/assets/{config-DZlaJUlF.js → config-DNUKa3lN.js} +1 -1
  12. package/dist/preview/assets/{config-BLEovXei.js → config-DVjZmomc.js} +1 -1
  13. package/dist/preview/assets/{config-DyPl6K2G.js → config-Djv6EQBY.js} +1 -1
  14. package/dist/preview/assets/{config-DWA385pD.js → config-PNpa6ENz.js} +1 -1
  15. package/dist/preview/assets/{config-C8lCItmz.js → config-ucxtM3wX.js} +1 -1
  16. package/dist/preview/assets/{config-Bf5Vckj3.js → config-urZuasV7.js} +1 -1
  17. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-CFzQ7icU.js → definition.vue_vue_type_script_setup_true_lang-BzryfjdG.js} +1 -1
  18. package/dist/preview/assets/index-BE9O1XgB.js +1 -0
  19. package/dist/preview/assets/{index-CXOEVGFP.js → index-DCRQGu0g.js} +1 -1
  20. package/dist/preview/assets/index-yvElpEK3.js +743 -0
  21. package/dist/preview/assets/{item-DCVX69_o.js → item-CTkdtkvl.js} +1 -1
  22. package/dist/preview/assets/{runtime-r1wbrr4k.js → runtime-3rajYvjp.js} +1 -1
  23. package/dist/preview/assets/{runtime-BNk4EliL.js → runtime-4A3oiig9.js} +1 -1
  24. package/dist/preview/assets/{runtime-Cbc5NH57.js → runtime-BOGZFWxF.js} +1 -1
  25. package/dist/preview/assets/{runtime-BO-KY3T_.js → runtime-BqroTX7H.js} +1 -1
  26. package/dist/preview/assets/{runtime-O6MNC3GA.js → runtime-CBBae0-H.js} +1 -1
  27. package/dist/preview/assets/{runtime-DEWGIyvr.js → runtime-CBuV3vwL.js} +1 -1
  28. package/dist/preview/assets/{runtime-DJ9ElxWB.js → runtime-CI8yzwXd.js} +1 -1
  29. package/dist/preview/assets/{runtime-DSfMvph3.js → runtime-CcyhgOum.js} +1 -1
  30. package/dist/preview/assets/{runtime-BD1A-g1h.js → runtime-CkQ-mNoH.js} +1 -1
  31. package/dist/preview/assets/{runtime-BsNSI1XP.js → runtime-DmxKfudS.js} +1 -1
  32. package/dist/preview/assets/{schema-meta-ovcuERKg.js → schema-meta-BFzIzGiN.js} +1 -1
  33. package/dist/preview/index.html +1 -1
  34. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  35. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.number-input/runtime.vue +16 -3
  36. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch/runtime.vue +5 -1
  37. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.switch.local/runtime.vue +5 -1
  38. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.text-input/runtime.vue +17 -3
  39. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/runtime.vue +5 -1
  40. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/runtime.vue +5 -1
  41. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  42. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/runtime.vue +5 -1
  43. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/runtime.vue +5 -1
  44. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  45. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/runtime.vue +5 -1
  46. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  47. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/runtime.vue +5 -1
  48. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/runtime.vue +5 -1
  49. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/runtime.vue +5 -1
  50. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/runtime.vue +5 -1
  51. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/runtime.vue +5 -1
  52. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/runtime.vue +5 -1
  53. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/runtime.vue +5 -1
  54. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +179 -0
  55. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue +942 -0
  56. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +179 -0
  57. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.d.vue.ts +9 -0
  58. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue +499 -0
  59. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/runtime.vue.d.ts +9 -0
  60. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.d.ts +223 -0
  61. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/schema.js +276 -0
  62. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +179 -0
  63. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue +942 -0
  64. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +179 -0
  65. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.d.vue.ts +9 -0
  66. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue +438 -0
  67. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/runtime.vue.d.ts +9 -0
  68. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.d.ts +223 -0
  69. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/schema.js +276 -0
  70. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +123 -0
  71. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue +646 -0
  72. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +123 -0
  73. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.d.vue.ts +9 -0
  74. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue +500 -0
  75. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/runtime.vue.d.ts +9 -0
  76. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.d.ts +83 -0
  77. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +179 -0
  78. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +121 -0
  79. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue +577 -0
  80. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +121 -0
  81. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.d.vue.ts +9 -0
  82. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue +465 -0
  83. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/runtime.vue.d.ts +9 -0
  84. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.d.ts +80 -0
  85. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +171 -0
  86. package/dist/runtime/components/table/columns/2026-06-14/combobox-migrate.d.ts +18 -0
  87. package/dist/runtime/components/table/columns/2026-06-14/combobox-migrate.js +36 -0
  88. package/dist/runtime/components/table/columns/2026-06-14/tree-combobox-shared.d.ts +35 -0
  89. package/dist/runtime/components/table/columns/2026-06-14/tree-combobox-shared.js +31 -0
  90. package/dist/runtime/components/table/index.d.vue.ts +2 -0
  91. package/dist/runtime/components/table/index.vue +24 -0
  92. package/dist/runtime/components/table/index.vue.d.ts +2 -0
  93. package/dist/runtime/components/table/utils/shared.d.ts +1 -0
  94. package/dist/runtime/components/table/utils/shared.js +7 -13
  95. package/package.json +1 -1
  96. package/dist/preview/assets/index-7BE56IYF.js +0 -739
  97. package/dist/preview/assets/index-Bwv0Yz_L.js +0 -1
@@ -0,0 +1,577 @@
1
+ <script setup>
2
+ import { computed } from "vue";
3
+ import { Icon } from "@iconify/vue";
4
+ import { ExpressionEditor } from "../../../../ui/expression-editor";
5
+ import { Field, FieldLabel } from "../../../../ui/field";
6
+ import {
7
+ InputGroup,
8
+ InputGroupAddon,
9
+ InputGroupButton,
10
+ InputGroupInput,
11
+ InputGroupNumberField
12
+ } from "../../../../ui/input-group";
13
+ import { Locale as LocaleField } from "../../../../ui/locale";
14
+ import { Markdown } from "../../../../ui/markdown";
15
+ import { Separator } from "../../../../ui/separator";
16
+ import { Switch } from "../../../../ui/switch";
17
+ import DerivedValueEditor from "../../../../form/DerivedValueEditor.vue";
18
+ import { DataSource } from "../../../schema";
19
+ import { getStructFieldDescription, getStructFieldTitle } from "../../../utils/schema-meta";
20
+ import { schema } from "./schema";
21
+ defineOptions({ name: "ShwfedTableTreeComboboxSingleRendererConfig" });
22
+ const value = defineModel({ type: null, ...{ required: true } });
23
+ const fieldSchema = schema(() => {
24
+ });
25
+ const fieldTitle = (f) => getStructFieldTitle(fieldSchema, f) ?? f;
26
+ const fieldDescription = (f) => getStructFieldDescription(fieldSchema, f);
27
+ const dataSourceSchema = DataSource(() => {
28
+ });
29
+ const dataSourceFieldTitle = (f) => getStructFieldTitle(dataSourceSchema, f) ?? f;
30
+ const dataSourceFieldDescription = (f) => getStructFieldDescription(dataSourceSchema, f);
31
+ const ROW_VARS = {
32
+ row: { type: "dyn", label: "\u5F53\u524D\u884C\u6570\u636E" },
33
+ index: { type: "number", label: "\u884C\u7D22\u5F15" }
34
+ };
35
+ const ROW_NODE_VARS = {
36
+ ...ROW_VARS,
37
+ node: {
38
+ type: "dyn",
39
+ label: "\u5F53\u524D\u8282\u70B9",
40
+ 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"
41
+ }
42
+ };
43
+ const ROW_JSON_VARS = {
44
+ ...ROW_VARS,
45
+ json: {
46
+ type: "optional<dyn>",
47
+ label: "HTTP \u54CD\u5E94\u4F53",
48
+ description: "\u5DF2\u89E3\u6790\u7684 JSON \u54CD\u5E94\uFF1B\u672A\u914D\u7F6E `request` \u65F6\u4E3A `none`"
49
+ }
50
+ };
51
+ const bindingText = computed({
52
+ get: () => value.value.binding ?? "",
53
+ set: (v) => {
54
+ const trimmed = v.trim();
55
+ if (trimmed === "") {
56
+ const { binding: _omit, ...rest } = value.value;
57
+ value.value = rest;
58
+ } else {
59
+ value.value = { ...value.value, binding: trimmed };
60
+ }
61
+ }
62
+ });
63
+ function setOptionalExpression(key, next) {
64
+ if (next.length === 0) {
65
+ const { [key]: _omit, ...rest } = value.value;
66
+ value.value = rest;
67
+ } else {
68
+ value.value = { ...value.value, [key]: next };
69
+ }
70
+ }
71
+ function setDataSourceData(next) {
72
+ value.value = {
73
+ ...value.value,
74
+ dataSource: { ...value.value.dataSource, data: next }
75
+ };
76
+ }
77
+ function setDataSourceRequest(next) {
78
+ const trimmed = next.trim();
79
+ if (trimmed.length === 0) {
80
+ const { request: _omit, ...rest } = value.value.dataSource;
81
+ value.value = { ...value.value, dataSource: rest };
82
+ } else {
83
+ value.value = {
84
+ ...value.value,
85
+ dataSource: { ...value.value.dataSource, request: next }
86
+ };
87
+ }
88
+ }
89
+ const derivedModel = computed({
90
+ get: () => value.value.derived,
91
+ set: (v) => {
92
+ if (v == null) {
93
+ const { derived: _omit, ...rest } = value.value;
94
+ value.value = rest;
95
+ } else {
96
+ value.value = { ...value.value, derived: v };
97
+ }
98
+ }
99
+ });
100
+ </script>
101
+
102
+ <template>
103
+ <div class="space-y-5">
104
+ <!-- Identity: title + binding + placeholder + size -->
105
+ <div class="grid grid-cols-2 gap-x-6 gap-y-4">
106
+ <Field orientation="vertical">
107
+ <FieldLabel class="text-xs text-zinc-500">
108
+ <template
109
+ v-if="fieldDescription('title')"
110
+ #tooltip
111
+ >
112
+ <Markdown
113
+ :source="fieldDescription('title')"
114
+ block
115
+ class="prose prose-sm prose-zinc"
116
+ />
117
+ </template>
118
+ {{ fieldTitle("title") }}
119
+ </FieldLabel>
120
+ <LocaleField v-model="value.title" />
121
+ </Field>
122
+ <Field orientation="vertical">
123
+ <FieldLabel class="text-xs text-zinc-500">
124
+ <template
125
+ v-if="fieldDescription('tooltip')"
126
+ #tooltip
127
+ >
128
+ <Markdown
129
+ :source="fieldDescription('tooltip')"
130
+ block
131
+ class="prose prose-sm prose-zinc"
132
+ />
133
+ </template>
134
+ {{ fieldTitle("tooltip") }}
135
+ </FieldLabel>
136
+ <LocaleField
137
+ v-model="value.tooltip"
138
+ markdown
139
+ />
140
+ </Field>
141
+ </div>
142
+ <div class="grid grid-cols-2 gap-x-6 gap-y-4">
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
+ <Field orientation="vertical">
166
+ <FieldLabel class="text-xs text-zinc-500">
167
+ <template
168
+ v-if="fieldDescription('placeholder')"
169
+ #tooltip
170
+ >
171
+ <Markdown
172
+ :source="fieldDescription('placeholder')"
173
+ block
174
+ class="prose prose-sm prose-zinc"
175
+ />
176
+ </template>
177
+ {{ fieldTitle("placeholder") }}
178
+ </FieldLabel>
179
+ <LocaleField v-model="value.placeholder" />
180
+ </Field>
181
+ <Field orientation="vertical">
182
+ <FieldLabel class="text-xs text-zinc-500">
183
+ <template
184
+ v-if="fieldDescription('size')"
185
+ #tooltip
186
+ >
187
+ <Markdown
188
+ :source="fieldDescription('size')"
189
+ block
190
+ class="prose prose-sm prose-zinc"
191
+ />
192
+ </template>
193
+ {{ fieldTitle("size") }}
194
+ </FieldLabel>
195
+ <InputGroup>
196
+ <InputGroupNumberField
197
+ :model-value="value.size"
198
+ :disabled="value.grow"
199
+ :min="0"
200
+ @update:model-value="(v) => value = { ...value, size: v }"
201
+ />
202
+ <InputGroupAddon align="inline-end">
203
+ <InputGroupButton
204
+ :variant="value.grow ? 'primary' : 'ghost'"
205
+ size="xs"
206
+ @click="value = { ...value, grow: !value.grow }"
207
+ >
208
+ <Icon :icon="value.grow ? 'fluent:lock-closed-20-regular' : 'fluent:arrow-autofit-width-20-regular'" />
209
+ {{ fieldTitle("grow") }}
210
+ </InputGroupButton>
211
+ </InputGroupAddon>
212
+ </InputGroup>
213
+ </Field>
214
+ </div>
215
+
216
+ <!-- 数据源 -->
217
+ <h3 class="text-xs font-medium text-zinc-500">
218
+ {{ fieldTitle("dataSource") }}
219
+ </h3>
220
+
221
+ <Field orientation="vertical">
222
+ <FieldLabel class="text-xs text-zinc-500">
223
+ <template
224
+ v-if="dataSourceFieldDescription('request')"
225
+ #tooltip
226
+ >
227
+ <Markdown
228
+ :source="dataSourceFieldDescription('request')"
229
+ block
230
+ class="prose prose-sm prose-zinc"
231
+ />
232
+ </template>
233
+ {{ dataSourceFieldTitle("request") }}
234
+ </FieldLabel>
235
+ <ExpressionEditor
236
+ :model-value="value.dataSource.request ?? ''"
237
+ placeholder="如 http.get('/api/departments/tree')"
238
+ result-type="HttpRequest"
239
+ :extra-vars="ROW_VARS"
240
+ multiline
241
+ class="min-h-20"
242
+ @update:model-value="setDataSourceRequest"
243
+ />
244
+ </Field>
245
+
246
+ <Field orientation="vertical">
247
+ <FieldLabel class="text-xs text-zinc-500">
248
+ <template
249
+ v-if="dataSourceFieldDescription('data')"
250
+ #tooltip
251
+ >
252
+ <Markdown
253
+ :source="dataSourceFieldDescription('data')"
254
+ block
255
+ class="prose prose-sm prose-zinc"
256
+ />
257
+ </template>
258
+ {{ dataSourceFieldTitle("data") }}
259
+ </FieldLabel>
260
+ <ExpressionEditor
261
+ :model-value="value.dataSource.data"
262
+ placeholder="如 json.?value.roots.orValue([])"
263
+ result-type="list"
264
+ :extra-vars="ROW_JSON_VARS"
265
+ @update:model-value="setDataSourceData"
266
+ />
267
+ </Field>
268
+
269
+ <!-- 节点 -->
270
+ <h3 class="text-xs font-medium text-zinc-500">
271
+ 节点
272
+ </h3>
273
+
274
+ <div class="grid grid-cols-2 gap-3">
275
+ <Field orientation="vertical">
276
+ <FieldLabel class="text-xs text-zinc-500">
277
+ <template
278
+ v-if="fieldDescription('nodeKey')"
279
+ #tooltip
280
+ >
281
+ <Markdown
282
+ :source="fieldDescription('nodeKey')"
283
+ block
284
+ class="prose prose-sm prose-zinc"
285
+ />
286
+ </template>
287
+ {{ fieldTitle("nodeKey") }}
288
+ </FieldLabel>
289
+ <ExpressionEditor
290
+ :model-value="value.nodeKey"
291
+ placeholder="例:string(node.id)"
292
+ :result-type="['string', 'number', 'dyn']"
293
+ :extra-vars="ROW_NODE_VARS"
294
+ class="min-h-10"
295
+ @update:model-value="(v) => value = { ...value, nodeKey: v }"
296
+ />
297
+ </Field>
298
+
299
+ <Field orientation="vertical">
300
+ <FieldLabel class="text-xs text-zinc-500">
301
+ <template
302
+ v-if="fieldDescription('nodeChildren')"
303
+ #tooltip
304
+ >
305
+ <Markdown
306
+ :source="fieldDescription('nodeChildren')"
307
+ block
308
+ class="prose prose-sm prose-zinc"
309
+ />
310
+ </template>
311
+ {{ fieldTitle("nodeChildren") }}
312
+ </FieldLabel>
313
+ <ExpressionEditor
314
+ :model-value="value.nodeChildren"
315
+ placeholder="例:has(node.children) ? node.children : null"
316
+ result-type="list"
317
+ :extra-vars="ROW_NODE_VARS"
318
+ class="min-h-10"
319
+ @update:model-value="(v) => value = { ...value, nodeChildren: v }"
320
+ />
321
+ </Field>
322
+ </div>
323
+
324
+ <div class="grid grid-cols-2 gap-3">
325
+ <Field orientation="vertical">
326
+ <FieldLabel class="text-xs text-zinc-500">
327
+ <template
328
+ v-if="fieldDescription('nodeLabel')"
329
+ #tooltip
330
+ >
331
+ <Markdown
332
+ :source="fieldDescription('nodeLabel')"
333
+ block
334
+ class="prose prose-sm prose-zinc"
335
+ />
336
+ </template>
337
+ {{ fieldTitle("nodeLabel") }}
338
+ </FieldLabel>
339
+ <ExpressionEditor
340
+ :model-value="value.nodeLabel"
341
+ placeholder="如 node.label"
342
+ result-type="dyn"
343
+ :extra-vars="ROW_NODE_VARS"
344
+ @update:model-value="(v) => value = { ...value, nodeLabel: v }"
345
+ />
346
+ </Field>
347
+
348
+ <Field orientation="vertical">
349
+ <FieldLabel class="text-xs text-zinc-500">
350
+ <template
351
+ v-if="fieldDescription('nodeTooltip')"
352
+ #tooltip
353
+ >
354
+ <Markdown
355
+ :source="fieldDescription('nodeTooltip')"
356
+ block
357
+ class="prose prose-sm prose-zinc"
358
+ />
359
+ </template>
360
+ {{ fieldTitle("nodeTooltip") }}
361
+ </FieldLabel>
362
+ <LocaleField
363
+ markdown
364
+ translate-hint="tree node tooltip"
365
+ :model-value="value.nodeTooltip"
366
+ @update:model-value="(v) => value = { ...value, nodeTooltip: v }"
367
+ />
368
+ </Field>
369
+ </div>
370
+
371
+ <!-- 搜索: 额外关键词(节点作用域,返回字符串列表) -->
372
+ <Field orientation="vertical">
373
+ <FieldLabel class="text-xs text-zinc-500">
374
+ <template
375
+ v-if="fieldDescription('keywords')"
376
+ #tooltip
377
+ >
378
+ <Markdown
379
+ :source="fieldDescription('keywords')"
380
+ block
381
+ class="prose prose-sm prose-zinc"
382
+ />
383
+ </template>
384
+ {{ fieldTitle("keywords") }}
385
+ </FieldLabel>
386
+ <ExpressionEditor
387
+ :model-value="value.keywords ?? ''"
388
+ placeholder="例:[node.code, node.pinyin]"
389
+ result-type="list"
390
+ :extra-vars="ROW_NODE_VARS"
391
+ class="min-h-10"
392
+ @update:model-value="(v) => setOptionalExpression('keywords', v)"
393
+ />
394
+ </Field>
395
+
396
+ <!-- 行为: 节点可选条件 + 默认全部展开 -->
397
+ <div class="grid grid-cols-2 gap-3">
398
+ <Field orientation="vertical">
399
+ <FieldLabel class="text-xs text-zinc-500">
400
+ <template
401
+ v-if="fieldDescription('nodeSelectable')"
402
+ #tooltip
403
+ >
404
+ <Markdown
405
+ :source="fieldDescription('nodeSelectable')"
406
+ block
407
+ class="prose prose-sm prose-zinc"
408
+ />
409
+ </template>
410
+ {{ fieldTitle("nodeSelectable") }}
411
+ </FieldLabel>
412
+ <ExpressionEditor
413
+ :model-value="value.nodeSelectable ?? ''"
414
+ placeholder="例:!has(node.disabled) || !node.disabled"
415
+ result-type="bool"
416
+ :extra-vars="ROW_NODE_VARS"
417
+ class="min-h-10"
418
+ @update:model-value="(v) => setOptionalExpression('nodeSelectable', v)"
419
+ />
420
+ </Field>
421
+
422
+ <Field orientation="vertical">
423
+ <FieldLabel class="text-xs text-zinc-500">
424
+ <template
425
+ v-if="fieldDescription('expandAll')"
426
+ #tooltip
427
+ >
428
+ <Markdown
429
+ :source="fieldDescription('expandAll')"
430
+ block
431
+ class="prose prose-sm prose-zinc"
432
+ />
433
+ </template>
434
+ {{ fieldTitle("expandAll") }}
435
+ </FieldLabel>
436
+ <div>
437
+ <Switch
438
+ :model-value="value.expandAll ?? false"
439
+ @update:model-value="(v) => value = { ...value, expandAll: v }"
440
+ />
441
+ </div>
442
+ </Field>
443
+ </div>
444
+
445
+ <!-- 通用: 隐藏 / 禁用 / 只读 + 派生值 -->
446
+ <div class="grid grid-cols-2 gap-x-6 gap-y-4">
447
+ <Field orientation="vertical">
448
+ <FieldLabel class="text-xs text-zinc-500">
449
+ <template
450
+ v-if="fieldDescription('hidden')"
451
+ #tooltip
452
+ >
453
+ <Markdown
454
+ :source="fieldDescription('hidden')"
455
+ block
456
+ class="prose prose-sm prose-zinc"
457
+ />
458
+ </template>
459
+ {{ fieldTitle("hidden") }}
460
+ </FieldLabel>
461
+ <ExpressionEditor
462
+ :model-value="value.hidden ?? ''"
463
+ placeholder="例:row.archived"
464
+ result-type="bool"
465
+ :extra-vars="ROW_VARS"
466
+ @update:model-value="(v) => setOptionalExpression('hidden', v)"
467
+ />
468
+ </Field>
469
+ <Field orientation="vertical">
470
+ <FieldLabel class="text-xs text-zinc-500">
471
+ <template
472
+ v-if="fieldDescription('disabled')"
473
+ #tooltip
474
+ >
475
+ <Markdown
476
+ :source="fieldDescription('disabled')"
477
+ block
478
+ class="prose prose-sm prose-zinc"
479
+ />
480
+ </template>
481
+ {{ fieldTitle("disabled") }}
482
+ </FieldLabel>
483
+ <ExpressionEditor
484
+ :model-value="value.disabled ?? ''"
485
+ placeholder="例:row.locked"
486
+ result-type="bool"
487
+ :extra-vars="ROW_VARS"
488
+ @update:model-value="(v) => setOptionalExpression('disabled', v)"
489
+ />
490
+ </Field>
491
+ <Field orientation="vertical">
492
+ <FieldLabel class="text-xs text-zinc-500">
493
+ <template
494
+ v-if="fieldDescription('readonly')"
495
+ #tooltip
496
+ >
497
+ <Markdown
498
+ :source="fieldDescription('readonly')"
499
+ block
500
+ class="prose prose-sm prose-zinc"
501
+ />
502
+ </template>
503
+ {{ fieldTitle("readonly") }}
504
+ </FieldLabel>
505
+ <ExpressionEditor
506
+ :model-value="value.readonly ?? ''"
507
+ placeholder="例:row.id != null"
508
+ result-type="bool"
509
+ :extra-vars="ROW_VARS"
510
+ @update:model-value="(v) => setOptionalExpression('readonly', v)"
511
+ />
512
+ </Field>
513
+ <Field
514
+ orientation="vertical"
515
+ class="col-span-2"
516
+ >
517
+ <FieldLabel class="text-xs text-zinc-500">
518
+ <template
519
+ v-if="fieldDescription('derived')"
520
+ #tooltip
521
+ >
522
+ <Markdown
523
+ :source="fieldDescription('derived')"
524
+ block
525
+ class="prose prose-sm prose-zinc"
526
+ />
527
+ </template>
528
+ {{ fieldTitle("derived") }}
529
+ </FieldLabel>
530
+ <DerivedValueEditor
531
+ v-model="derivedModel"
532
+ result-type="dyn"
533
+ placeholder="例:form.defaults[row.kind]"
534
+ />
535
+ </Field>
536
+ </div>
537
+
538
+ <Separator />
539
+ <div class="flex flex-wrap gap-x-8 gap-y-3">
540
+ <Field
541
+ orientation="vertical"
542
+ class="w-full max-w-xs"
543
+ >
544
+ <FieldLabel class="text-xs text-zinc-500">
545
+ <template
546
+ v-if="fieldDescription('enableSorting')"
547
+ #tooltip
548
+ >
549
+ <Markdown
550
+ :source="fieldDescription('enableSorting')"
551
+ block
552
+ class="prose prose-sm prose-zinc"
553
+ />
554
+ </template>
555
+ {{ fieldTitle("enableSorting") }}
556
+ </FieldLabel>
557
+ <InputGroup>
558
+ <InputGroupInput
559
+ :model-value="value.sortKey"
560
+ placeholder="例:created_at"
561
+ @update:model-value="(v) => value = { ...value, sortKey: v || void 0 }"
562
+ />
563
+ <InputGroupAddon align="inline-end">
564
+ <InputGroupButton
565
+ :variant="value.enableSorting ? 'primary' : 'ghost'"
566
+ size="xs"
567
+ @click="value = { ...value, enableSorting: !value.enableSorting }"
568
+ >
569
+ <Icon :icon="value.enableSorting ? 'fluent:arrow-sort-up-16-regular' : 'fluent:arrow-sort-16-regular'" />
570
+ {{ fieldTitle("enableSorting") }}
571
+ </InputGroupButton>
572
+ </InputGroupAddon>
573
+ </InputGroup>
574
+ </Field>
575
+ </div>
576
+ </div>
577
+ </template>
@@ -0,0 +1,121 @@
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 size?: number | undefined;
8
+ readonly disabled?: string | undefined;
9
+ readonly type: "com.shwfed.table.column.tree-combobox-single";
10
+ readonly id: string;
11
+ readonly title: readonly [{
12
+ readonly locale: "zh";
13
+ readonly message: string;
14
+ }, ...{
15
+ readonly locale: "en" | "ja" | "ko";
16
+ readonly message: string;
17
+ }[]];
18
+ readonly hidden?: string | undefined;
19
+ readonly tooltip?: readonly [{
20
+ readonly locale: "zh";
21
+ readonly message: string;
22
+ }, ...{
23
+ readonly locale: "en" | "ja" | "ko";
24
+ readonly message: string;
25
+ }[]] | undefined;
26
+ readonly compatibilityDate: "2026-06-14";
27
+ readonly groupId?: string | undefined;
28
+ readonly placeholder?: readonly [{
29
+ readonly locale: "zh";
30
+ readonly message: string;
31
+ }, ...{
32
+ readonly locale: "en" | "ja" | "ko";
33
+ readonly message: string;
34
+ }[]] | undefined;
35
+ readonly keywords?: string | undefined;
36
+ readonly readonly?: string | undefined;
37
+ readonly grow?: boolean | undefined;
38
+ readonly binding: string;
39
+ readonly derived?: {
40
+ readonly mode: "formula" | "prefill";
41
+ readonly expression: string;
42
+ } | undefined;
43
+ readonly dataSource: {
44
+ readonly data: string;
45
+ readonly request?: string | undefined;
46
+ };
47
+ readonly enableSorting?: boolean | undefined;
48
+ readonly nodeKey: string;
49
+ readonly nodeChildren: string;
50
+ readonly nodeLabel: string;
51
+ readonly nodeTooltip?: readonly [{
52
+ readonly locale: "zh";
53
+ readonly message: string;
54
+ }, ...{
55
+ readonly locale: "en" | "ja" | "ko";
56
+ readonly message: string;
57
+ }[]] | undefined;
58
+ readonly nodeSelectable?: string | undefined;
59
+ readonly expandAll: boolean;
60
+ readonly sortKey?: string | undefined;
61
+ }) => any;
62
+ }, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
63
+ "onUpdate:modelValue"?: ((value: {
64
+ readonly size?: number | undefined;
65
+ readonly disabled?: string | undefined;
66
+ readonly type: "com.shwfed.table.column.tree-combobox-single";
67
+ readonly id: string;
68
+ readonly title: readonly [{
69
+ readonly locale: "zh";
70
+ readonly message: string;
71
+ }, ...{
72
+ readonly locale: "en" | "ja" | "ko";
73
+ readonly message: string;
74
+ }[]];
75
+ readonly hidden?: string | undefined;
76
+ readonly tooltip?: readonly [{
77
+ readonly locale: "zh";
78
+ readonly message: string;
79
+ }, ...{
80
+ readonly locale: "en" | "ja" | "ko";
81
+ readonly message: string;
82
+ }[]] | undefined;
83
+ readonly compatibilityDate: "2026-06-14";
84
+ readonly groupId?: string | undefined;
85
+ readonly placeholder?: readonly [{
86
+ readonly locale: "zh";
87
+ readonly message: string;
88
+ }, ...{
89
+ readonly locale: "en" | "ja" | "ko";
90
+ readonly message: string;
91
+ }[]] | undefined;
92
+ readonly keywords?: string | undefined;
93
+ readonly readonly?: string | undefined;
94
+ readonly grow?: boolean | undefined;
95
+ readonly binding: string;
96
+ readonly derived?: {
97
+ readonly mode: "formula" | "prefill";
98
+ readonly expression: string;
99
+ } | undefined;
100
+ readonly dataSource: {
101
+ readonly data: string;
102
+ readonly request?: string | undefined;
103
+ };
104
+ readonly enableSorting?: boolean | undefined;
105
+ readonly nodeKey: string;
106
+ readonly nodeChildren: string;
107
+ readonly nodeLabel: string;
108
+ readonly nodeTooltip?: readonly [{
109
+ readonly locale: "zh";
110
+ readonly message: string;
111
+ }, ...{
112
+ readonly locale: "en" | "ja" | "ko";
113
+ readonly message: string;
114
+ }[]] | undefined;
115
+ readonly nodeSelectable?: string | undefined;
116
+ readonly expandAll: boolean;
117
+ readonly sortKey?: string | undefined;
118
+ }) => any) | undefined;
119
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
120
+ declare const _default: typeof __VLS_export;
121
+ export default _default;