@shwfed/config 2.10.4 → 2.10.5

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 (162) hide show
  1. package/dist/mcp.mjs +1574 -1315
  2. package/dist/module.json +1 -1
  3. package/dist/preview/assets/{FieldGroup.vue_vue_type_script_setup_true_lang-DIjsktfi.js → FieldGroup.vue_vue_type_script_setup_true_lang-D-COryaS.js} +1 -1
  4. package/dist/preview/assets/{badge-Cr6_n00S.js → badge-Sb01O_E2.js} +1 -1
  5. package/dist/preview/assets/{config-B2rtOFE1.js → config-99L3dMcP.js} +1 -1
  6. package/dist/preview/assets/{config-DF4u2WzQ.js → config-BgJWNJ-L.js} +1 -1
  7. package/dist/preview/assets/{config-CwbWyadd.js → config-BjSI3yTw.js} +1 -1
  8. package/dist/preview/assets/{config-Bu-ffrDi.js → config-BzMW9qCl.js} +1 -1
  9. package/dist/preview/assets/{config-BjUIO7Ps.js → config-CEM0BCax.js} +1 -1
  10. package/dist/preview/assets/{config-CSauYxAG.js → config-CtKXZjQl.js} +1 -1
  11. package/dist/preview/assets/{config-CNY70agP.js → config-CyRpAiSg.js} +1 -1
  12. package/dist/preview/assets/{config-CrA5lAMB.js → config-Cz3VQcLY.js} +1 -1
  13. package/dist/preview/assets/{config-hXHOfKvD.js → config-D6BiWm3q.js} +1 -1
  14. package/dist/preview/assets/{config-DpcMlGoM.js → config-DA1Knc1V.js} +1 -1
  15. package/dist/preview/assets/{config-Dx9AeOjb.js → config-DGBuMIqU.js} +1 -1
  16. package/dist/preview/assets/{config-1VGYa1Zb.js → config-DK0wxXG_.js} +1 -1
  17. package/dist/preview/assets/{config-BemROLz0.js → config-Du8kzY9H.js} +1 -1
  18. package/dist/preview/assets/{config-DTDFg08z.js → config-n4AGAnL-.js} +1 -1
  19. package/dist/preview/assets/{definition.vue_vue_type_script_setup_true_lang-v2AaUd8i.js → definition.vue_vue_type_script_setup_true_lang-BtOF0dda.js} +1 -1
  20. package/dist/preview/assets/{index-BzWZj-hV.js → index-BOnw60vg.js} +1 -1
  21. package/dist/preview/assets/index-BZlqSG2R.js +763 -0
  22. package/dist/preview/assets/index-D3Az3yzR.css +1 -0
  23. package/dist/preview/assets/index-Rj5bF6fM.js +1 -0
  24. package/dist/preview/assets/{item-B_QcL62I.js → item-D7avZRKo.js} +1 -1
  25. package/dist/preview/assets/{runtime-BbiAwZZ9.js → runtime-BWlX7BAG.js} +1 -1
  26. package/dist/preview/assets/{runtime-DUMSbsqb.js → runtime-Bek88ifk.js} +1 -1
  27. package/dist/preview/assets/{runtime-hClBh8tp.js → runtime-C9kOkTYc.js} +1 -1
  28. package/dist/preview/assets/{runtime-BRg0jxiK.js → runtime-CSrgcLuC.js} +1 -1
  29. package/dist/preview/assets/{runtime-CKoLdM68.js → runtime-CWTz9Iy4.js} +1 -1
  30. package/dist/preview/assets/{runtime-Cfup01hl.js → runtime-D-HZWcV-.js} +1 -1
  31. package/dist/preview/assets/{runtime-D-MaRCSg.js → runtime-DMsPs0Pz.js} +1 -1
  32. package/dist/preview/assets/{runtime-Cu_C4Joj.js → runtime-DOqVHcvv.js} +1 -1
  33. package/dist/preview/assets/{runtime-CZ6uHCIE.js → runtime-Dhl0NpTL.js} +1 -1
  34. package/dist/preview/assets/{runtime-Cd79TXff.js → runtime-Dxb1-gUN.js} +1 -1
  35. package/dist/preview/assets/{schema-meta-BACRMkVo.js → schema-meta-DXS0vi6v.js} +1 -1
  36. package/dist/preview/index.html +2 -2
  37. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.d.ts +1 -0
  38. package/dist/runtime/components/config/blocks/2026-05-06/com.shwfed.block.table/schema.js +5 -1
  39. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/config.d.vue.ts +223 -0
  40. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/config.vue +496 -0
  41. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/config.vue.d.ts +223 -0
  42. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/node-actions.d.vue.ts +10 -0
  43. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/node-actions.vue +25 -0
  44. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/node-actions.vue.d.ts +10 -0
  45. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/runtime.d.vue.ts +228 -0
  46. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/runtime.vue +355 -0
  47. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/runtime.vue.d.ts +228 -0
  48. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/schema.d.ts +227 -0
  49. package/dist/runtime/components/config/blocks/2026-06-17/com.shwfed.block.tree.single/schema.js +130 -0
  50. package/dist/runtime/components/config/utils/resolve.d.ts +16 -0
  51. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.d.vue.ts +4 -4
  52. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.daterange/config.vue.d.ts +4 -4
  53. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.d.vue.ts +6 -6
  54. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.datetimerange/config.vue.d.ts +6 -6
  55. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.d.vue.ts +2 -2
  56. package/dist/runtime/components/form/fields/2026-04-27/com.shwfed.form.field.timerange/config.vue.d.ts +2 -2
  57. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
  58. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
  59. package/dist/runtime/components/form/fields/2026-05-23/com.shwfed.form.field.tree.multi/schema.js +2 -1
  60. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.d.vue.ts +4 -4
  61. package/dist/runtime/components/form/fields/2026-05-24/com.shwfed.form.field.monthrange/config.vue.d.ts +4 -4
  62. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
  63. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
  64. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.multi/schema.js +2 -1
  65. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
  66. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
  67. package/dist/runtime/components/form/fields/2026-05-26/com.shwfed.form.field.tree.combobox.single/schema.js +2 -1
  68. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.d.vue.ts +22 -22
  69. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/config.vue.d.ts +22 -22
  70. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.multi/schema.js +2 -1
  71. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.d.vue.ts +22 -22
  72. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/config.vue.d.ts +22 -22
  73. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.combobox.single/schema.js +2 -1
  74. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.d.vue.ts +22 -22
  75. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/config.vue.d.ts +22 -22
  76. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.multi/schema.js +2 -1
  77. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.d.vue.ts +22 -22
  78. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/config.vue.d.ts +22 -22
  79. package/dist/runtime/components/form/fields/2026-05-28/com.shwfed.form.field.tree.single/schema.js +2 -1
  80. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.select/runtime.vue +3 -3
  81. package/dist/runtime/components/table/columns/2026-04-14/com.shwfed.table.column.text/runtime.vue +54 -2
  82. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  83. package/dist/runtime/components/table/columns/2026-05-20/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  84. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.d.vue.ts +4 -4
  85. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-remote/config.vue.d.ts +4 -4
  86. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.d.vue.ts +4 -4
  87. package/dist/runtime/components/table/columns/2026-05-24/com.shwfed.table.column.combobox-single.remote.options-static/config.vue.d.ts +4 -4
  88. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  89. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  90. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.d.vue.ts +4 -4
  91. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-remote/config.vue.d.ts +4 -4
  92. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.d.vue.ts +4 -4
  93. package/dist/runtime/components/table/columns/2026-05-25/com.shwfed.table.column.combobox-multi.remote.options-static/config.vue.d.ts +4 -4
  94. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.d.vue.ts +2 -2
  95. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi/config.vue.d.ts +2 -2
  96. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.d.vue.ts +4 -4
  97. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-multi.remote/config.vue.d.ts +4 -4
  98. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.d.vue.ts +2 -2
  99. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single/config.vue.d.ts +2 -2
  100. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.d.vue.ts +4 -4
  101. package/dist/runtime/components/table/columns/2026-05-26/com.shwfed.table.column.combobox-single.remote/config.vue.d.ts +4 -4
  102. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  103. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  104. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -1
  105. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  106. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  107. package/dist/runtime/components/table/columns/2026-05-27/com.shwfed.table.column.tree-combobox-single/schema.js +2 -1
  108. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.d.vue.ts +4 -4
  109. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-multi/config.vue.d.ts +4 -4
  110. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.d.vue.ts +4 -4
  111. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.combobox-single/config.vue.d.ts +4 -4
  112. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  113. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  114. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -1
  115. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  116. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  117. package/dist/runtime/components/table/columns/2026-05-28/com.shwfed.table.column.tree-combobox-single/schema.js +2 -1
  118. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.d.vue.ts +4 -4
  119. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-multi/config.vue.d.ts +4 -4
  120. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.d.vue.ts +4 -4
  121. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.combobox-single/config.vue.d.ts +4 -4
  122. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.d.vue.ts +2 -2
  123. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/config.vue.d.ts +2 -2
  124. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-multi/schema.js +2 -1
  125. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.d.vue.ts +2 -2
  126. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/config.vue.d.ts +2 -2
  127. package/dist/runtime/components/table/columns/2026-06-14/com.shwfed.table.column.tree-combobox-single/schema.js +2 -1
  128. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.d.vue.ts +10 -0
  129. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue +543 -0
  130. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/config.vue.d.ts +10 -0
  131. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.d.vue.ts +9 -0
  132. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.vue +110 -0
  133. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/runtime.vue.d.ts +9 -0
  134. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.d.ts +76 -0
  135. package/dist/runtime/components/table/columns/2026-06-17/com.shwfed.table.column.date-input/schema.js +89 -0
  136. package/dist/runtime/components/ui/date-picker/DatePickerInput.d.vue.ts +1 -1
  137. package/dist/runtime/components/ui/date-picker/DatePickerInput.vue.d.ts +1 -1
  138. package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.d.vue.ts +1 -1
  139. package/dist/runtime/components/ui/date-picker/DatePickerTimeInput.vue.d.ts +1 -1
  140. package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.d.vue.ts +1 -1
  141. package/dist/runtime/components/ui/date-range-picker/DateRangePickerInput.vue.d.ts +1 -1
  142. package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.d.vue.ts +2 -2
  143. package/dist/runtime/components/ui/date-range-picker/DateRangePickerTimeInput.vue.d.ts +2 -2
  144. package/dist/runtime/components/ui/tree/Tree.d.vue.ts +13 -0
  145. package/dist/runtime/components/ui/tree/Tree.vue +8 -1
  146. package/dist/runtime/components/ui/tree/Tree.vue.d.ts +13 -0
  147. package/dist/runtime/components/ui/tree/TreeNode.d.vue.ts +2 -0
  148. package/dist/runtime/components/ui/tree/TreeNode.vue +5 -2
  149. package/dist/runtime/components/ui/tree/TreeNode.vue.d.ts +2 -0
  150. package/dist/runtime/share/slot-renderer.d.vue.ts +5 -0
  151. package/dist/runtime/share/slot-renderer.vue +43 -28
  152. package/dist/runtime/share/slot-renderer.vue.d.ts +5 -0
  153. package/dist/runtime/share/tree-node-var.d.ts +25 -0
  154. package/dist/runtime/share/tree-node-var.js +10 -0
  155. package/dist/runtime/vendor/cel-js/CLAUDE.md +1 -1
  156. package/dist/runtime/vendor/cel-js/PROMPT.md +6 -0
  157. package/dist/runtime/vendor/cel-js/lib/http-builtins.d.ts +0 -14
  158. package/dist/runtime/vendor/cel-js/lib/http-builtins.js +17 -0
  159. package/package.json +1 -1
  160. package/dist/preview/assets/index-BDbNnENM.js +0 -1
  161. package/dist/preview/assets/index-ButPJaOR.css +0 -1
  162. package/dist/preview/assets/index-E3_P6Fhz.js +0 -761
@@ -0,0 +1,496 @@
1
+ <script setup>
2
+ import { computed, inject, onBeforeUnmount, ref, watch } from "vue";
3
+ import { Icon } from "@iconify/vue";
4
+ import { ExpressionEditor } from "../../../../ui/expression-editor";
5
+ import { Field, FieldLabel } from "../../../../ui/field";
6
+ import { Locale as LocaleField } from "../../../../ui/locale";
7
+ import { Markdown } from "../../../../ui/markdown";
8
+ import { ScrollArea } from "../../../../ui/scroll-area";
9
+ import { Switch } from "../../../../ui/switch";
10
+ import { DataSource } from "../../../../table/schema";
11
+ import ActionsConfigEditor from "../../../../actions/config.vue";
12
+ import { getStructFieldDescription, getStructFieldTitle } from "../../../../actions/schema";
13
+ import { registerNodeVariableIfAbsent } from "../../../../../share/tree-node-var";
14
+ import { provideEventAncestor } from "../../../../../share/event-bus";
15
+ import { BREADCRUMB_EXTENSION_KEY } from "../../../breadcrumb-extension";
16
+ import { metadata, schema } from "./schema";
17
+ defineOptions({ name: "ShwfedBlockTreeSingleConfig" });
18
+ const value = defineModel({ type: null, ...{ required: true } });
19
+ const blockSchema = schema(() => {
20
+ });
21
+ const fieldTitle = (f) => getStructFieldTitle(blockSchema, f) ?? f;
22
+ const fieldDescription = (f) => getStructFieldDescription(blockSchema, f);
23
+ const dataSourceSchema = DataSource(() => {
24
+ });
25
+ const dataSourceFieldTitle = (f) => getStructFieldTitle(dataSourceSchema, f) ?? f;
26
+ const dataSourceFieldDescription = (f) => getStructFieldDescription(dataSourceSchema, f);
27
+ const filterSchema = blockSchema.fields.filter.from;
28
+ const filterFieldTitle = (f) => getStructFieldTitle(filterSchema, f) ?? f;
29
+ const filterFieldDescription = (f) => getStructFieldDescription(filterSchema, f);
30
+ const nodeExtraVars = {
31
+ node: {
32
+ type: "dyn",
33
+ label: "\u5F53\u524D\u8282\u70B9",
34
+ 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"
35
+ }
36
+ };
37
+ const jsonExtraVars = {
38
+ json: {
39
+ type: "optional<dyn>",
40
+ label: "HTTP \u54CD\u5E94\u4F53",
41
+ description: "\u5DF2\u89E3\u6790\u7684 JSON \u54CD\u5E94\uFF1B\u672A\u914D\u7F6E `request` \u65F6\u4E3A `none`"
42
+ }
43
+ };
44
+ const nodeActionsConfigure = (env) => {
45
+ registerNodeVariableIfAbsent(env, { label: "\u5F53\u524D\u8282\u70B9", description: "\u5F53\u524D\u6811\u8282\u70B9\u7684\u5B8C\u6574\u6570\u636E" });
46
+ };
47
+ function setDataSourceData(next) {
48
+ value.value = {
49
+ ...value.value,
50
+ dataSource: { ...value.value.dataSource, data: next }
51
+ };
52
+ }
53
+ function setDataSourceRequest(next) {
54
+ const trimmed = next.trim();
55
+ if (trimmed.length === 0) {
56
+ const { request: _omit, ...rest } = value.value.dataSource;
57
+ value.value = { ...value.value, dataSource: rest };
58
+ } else {
59
+ value.value = {
60
+ ...value.value,
61
+ dataSource: { ...value.value.dataSource, request: next }
62
+ };
63
+ }
64
+ }
65
+ function setOptionalExpression(key, next) {
66
+ if (next.length === 0) {
67
+ const { [key]: _omit, ...rest } = value.value;
68
+ value.value = rest;
69
+ } else {
70
+ value.value = { ...value.value, [key]: next };
71
+ }
72
+ }
73
+ const filter = computed(() => value.value.filter);
74
+ function setFilterEnabled(next) {
75
+ if (next) {
76
+ value.value = {
77
+ ...value.value,
78
+ filter: { ...value.value.filter ?? {}, enabled: true }
79
+ };
80
+ } else {
81
+ const { filter: _omit, ...rest } = value.value;
82
+ value.value = rest;
83
+ }
84
+ }
85
+ function setFilterLabel(label) {
86
+ const cur = value.value.filter;
87
+ if (!cur) return;
88
+ const isEmpty = !label || label.every((l) => l.message.trim().length === 0);
89
+ if (isEmpty) {
90
+ const { label: _omit, ...rest } = cur;
91
+ value.value = { ...value.value, filter: rest };
92
+ } else {
93
+ value.value = { ...value.value, filter: { ...cur, label } };
94
+ }
95
+ }
96
+ function setFilterKeywords(next) {
97
+ const cur = value.value.filter;
98
+ if (!cur) return;
99
+ if (next.length === 0) {
100
+ const { keywords: _omit, ...rest } = cur;
101
+ value.value = { ...value.value, filter: rest };
102
+ } else {
103
+ value.value = { ...value.value, filter: { ...cur, keywords: next } };
104
+ }
105
+ }
106
+ const nodeActions = computed({
107
+ get: () => value.value.nodeActions,
108
+ set: (next) => {
109
+ value.value = { ...value.value, nodeActions: next };
110
+ }
111
+ });
112
+ const treeEventAncestor = computed(() => ({
113
+ instanceId: value.value.id,
114
+ typeName: metadata.name,
115
+ typeIcon: metadata.icon,
116
+ operations: metadata.operations
117
+ }));
118
+ provideEventAncestor(treeEventAncestor);
119
+ const selected = ref("general");
120
+ const isDrilled = computed(() => selected.value === "actions");
121
+ function selectGeneral() {
122
+ selected.value = "general";
123
+ }
124
+ function selectActions() {
125
+ selected.value = "actions";
126
+ }
127
+ const breadcrumbExt = inject(BREADCRUMB_EXTENSION_KEY, null);
128
+ if (breadcrumbExt) {
129
+ const crumb = breadcrumbExt.add();
130
+ watch(
131
+ selected,
132
+ (s) => {
133
+ if (s === "actions") {
134
+ crumb.label.value = "\u8282\u70B9\u64CD\u4F5C";
135
+ crumb.back.value = selectGeneral;
136
+ } else {
137
+ crumb.label.value = null;
138
+ crumb.back.value = null;
139
+ }
140
+ },
141
+ { immediate: true }
142
+ );
143
+ onBeforeUnmount(() => crumb.dispose());
144
+ }
145
+ </script>
146
+
147
+ <template>
148
+ <div class="flex min-h-128 gap-6">
149
+ <div
150
+ v-if="!isDrilled"
151
+ class="flex w-48 shrink-0 flex-col"
152
+ >
153
+ <div class="flex flex-col gap-1">
154
+ <div
155
+ class="row pl-2"
156
+ :class="[
157
+ selected === 'general' ? 'bg-[color-mix(in_srgb,var(--primary)_10%,white)] text-(--primary)' : 'text-zinc-600 hover:bg-zinc-50'
158
+ ]"
159
+ @click.stop="selectGeneral()"
160
+ >
161
+ <Icon
162
+ icon="fluent:settings-20-regular"
163
+ class="size-4 shrink-0"
164
+ />
165
+ <span class="flex-1 truncate">通用配置</span>
166
+ </div>
167
+
168
+ <div
169
+ class="row pl-2"
170
+ :class="[
171
+ selected === 'actions' ? 'bg-[color-mix(in_srgb,var(--primary)_10%,white)] text-(--primary)' : 'text-zinc-600 hover:bg-zinc-50'
172
+ ]"
173
+ @click.stop="selectActions()"
174
+ >
175
+ <Icon
176
+ icon="fluent:cursor-click-20-regular"
177
+ class="size-4 shrink-0"
178
+ />
179
+ <span class="flex-1 truncate">节点操作</span>
180
+ </div>
181
+ </div>
182
+ </div>
183
+
184
+ <div class="flex flex-1 flex-col">
185
+ <ScrollArea class="flex-1">
186
+ <div
187
+ v-if="selected === 'general'"
188
+ class="flex flex-col gap-3"
189
+ >
190
+ <!-- 数据源: request (optional) + data -->
191
+ <h3 class="text-xs font-medium text-zinc-500">
192
+ {{ fieldTitle("dataSource") }}
193
+ </h3>
194
+
195
+ <Field orientation="vertical">
196
+ <FieldLabel class="text-xs text-zinc-500">
197
+ <template
198
+ v-if="dataSourceFieldDescription('request')"
199
+ #tooltip
200
+ >
201
+ <Markdown
202
+ :source="dataSourceFieldDescription('request')"
203
+ block
204
+ class="prose prose-sm prose-zinc"
205
+ />
206
+ </template>
207
+ {{ dataSourceFieldTitle("request") }}
208
+ </FieldLabel>
209
+ <ExpressionEditor
210
+ :model-value="value.dataSource.request ?? ''"
211
+ placeholder="如 http.get('/api/departments/tree')"
212
+ result-type="HttpRequest"
213
+ multiline
214
+ class="min-h-20"
215
+ @update:model-value="setDataSourceRequest"
216
+ />
217
+ </Field>
218
+
219
+ <Field orientation="vertical">
220
+ <FieldLabel class="text-xs text-zinc-500">
221
+ <template
222
+ v-if="dataSourceFieldDescription('data')"
223
+ #tooltip
224
+ >
225
+ <Markdown
226
+ :source="dataSourceFieldDescription('data')"
227
+ block
228
+ class="prose prose-sm prose-zinc"
229
+ />
230
+ </template>
231
+ {{ dataSourceFieldTitle("data") }}
232
+ </FieldLabel>
233
+ <ExpressionEditor
234
+ :model-value="value.dataSource.data"
235
+ placeholder="如 json.?value.roots.orValue([])"
236
+ result-type="list"
237
+ :extra-vars="jsonExtraVars"
238
+ @update:model-value="setDataSourceData"
239
+ />
240
+ </Field>
241
+
242
+ <!-- 节点表达式 -->
243
+ <h3 class="text-xs font-medium text-zinc-500">
244
+ 节点
245
+ </h3>
246
+
247
+ <div class="grid grid-cols-2 gap-3">
248
+ <Field orientation="vertical">
249
+ <FieldLabel class="text-xs text-zinc-500">
250
+ <template
251
+ v-if="fieldDescription('nodeKey')"
252
+ #tooltip
253
+ >
254
+ <Markdown
255
+ :source="fieldDescription('nodeKey')"
256
+ block
257
+ class="prose prose-sm prose-zinc"
258
+ />
259
+ </template>
260
+ {{ fieldTitle("nodeKey") }}
261
+ </FieldLabel>
262
+ <ExpressionEditor
263
+ :model-value="value.nodeKey"
264
+ placeholder="例:string(node.id)"
265
+ :result-type="['string', 'number', 'dyn']"
266
+ :extra-vars="nodeExtraVars"
267
+ class="min-h-10"
268
+ @update:model-value="(v) => value = { ...value, nodeKey: v }"
269
+ />
270
+ </Field>
271
+
272
+ <Field orientation="vertical">
273
+ <FieldLabel class="text-xs text-zinc-500">
274
+ <template
275
+ v-if="fieldDescription('nodeChildren')"
276
+ #tooltip
277
+ >
278
+ <Markdown
279
+ :source="fieldDescription('nodeChildren')"
280
+ block
281
+ class="prose prose-sm prose-zinc"
282
+ />
283
+ </template>
284
+ {{ fieldTitle("nodeChildren") }}
285
+ </FieldLabel>
286
+ <ExpressionEditor
287
+ :model-value="value.nodeChildren"
288
+ placeholder="例:has(node.children) ? node.children : null"
289
+ result-type="list"
290
+ :extra-vars="nodeExtraVars"
291
+ class="min-h-10"
292
+ @update:model-value="(v) => value = { ...value, nodeChildren: v }"
293
+ />
294
+ </Field>
295
+ </div>
296
+
297
+ <div class="grid grid-cols-2 gap-3">
298
+ <Field orientation="vertical">
299
+ <FieldLabel class="text-xs text-zinc-500">
300
+ <template
301
+ v-if="fieldDescription('nodeLabel')"
302
+ #tooltip
303
+ >
304
+ <Markdown
305
+ :source="fieldDescription('nodeLabel')"
306
+ block
307
+ class="prose prose-sm prose-zinc"
308
+ />
309
+ </template>
310
+ {{ fieldTitle("nodeLabel") }}
311
+ </FieldLabel>
312
+ <LocaleField
313
+ markdown
314
+ translate-hint="tree node label"
315
+ :model-value="value.nodeLabel"
316
+ @update:model-value="(v) => value = { ...value, nodeLabel: v }"
317
+ />
318
+ </Field>
319
+
320
+ <Field orientation="vertical">
321
+ <FieldLabel class="text-xs text-zinc-500">
322
+ <template
323
+ v-if="fieldDescription('nodeTooltip')"
324
+ #tooltip
325
+ >
326
+ <Markdown
327
+ :source="fieldDescription('nodeTooltip')"
328
+ block
329
+ class="prose prose-sm prose-zinc"
330
+ />
331
+ </template>
332
+ {{ fieldTitle("nodeTooltip") }}
333
+ </FieldLabel>
334
+ <LocaleField
335
+ markdown
336
+ translate-hint="tree node tooltip"
337
+ :model-value="value.nodeTooltip"
338
+ @update:model-value="(v) => value = { ...value, nodeTooltip: v }"
339
+ />
340
+ </Field>
341
+ </div>
342
+
343
+ <!-- 行为: 节点可选条件 + 默认全部展开 -->
344
+ <div class="grid grid-cols-2 gap-3">
345
+ <Field orientation="vertical">
346
+ <FieldLabel class="text-xs text-zinc-500">
347
+ <template
348
+ v-if="fieldDescription('nodeSelectable')"
349
+ #tooltip
350
+ >
351
+ <Markdown
352
+ :source="fieldDescription('nodeSelectable')"
353
+ block
354
+ class="prose prose-sm prose-zinc"
355
+ />
356
+ </template>
357
+ {{ fieldTitle("nodeSelectable") }}
358
+ </FieldLabel>
359
+ <ExpressionEditor
360
+ :model-value="value.nodeSelectable ?? ''"
361
+ placeholder="例:node.kind == 'leaf'"
362
+ result-type="bool"
363
+ :extra-vars="nodeExtraVars"
364
+ class="min-h-10"
365
+ @update:model-value="(v) => setOptionalExpression('nodeSelectable', v)"
366
+ />
367
+ </Field>
368
+
369
+ <Field orientation="vertical">
370
+ <FieldLabel class="text-xs text-zinc-500">
371
+ <template
372
+ v-if="fieldDescription('expandAll')"
373
+ #tooltip
374
+ >
375
+ <Markdown
376
+ :source="fieldDescription('expandAll')"
377
+ block
378
+ class="prose prose-sm prose-zinc"
379
+ />
380
+ </template>
381
+ {{ fieldTitle("expandAll") }}
382
+ </FieldLabel>
383
+ <div>
384
+ <Switch
385
+ :model-value="value.expandAll ?? false"
386
+ @update:model-value="(v) => value = { ...value, expandAll: v }"
387
+ />
388
+ </div>
389
+ </Field>
390
+ </div>
391
+
392
+ <!-- 外观: 块级样式表达式 -->
393
+ <h3 class="text-xs font-medium text-zinc-500">
394
+ 外观
395
+ </h3>
396
+
397
+ <Field orientation="vertical">
398
+ <FieldLabel class="text-xs text-zinc-500">
399
+ <template
400
+ v-if="fieldDescription('style')"
401
+ #tooltip
402
+ >
403
+ <Markdown
404
+ :source="fieldDescription('style')"
405
+ block
406
+ class="prose prose-sm prose-zinc"
407
+ />
408
+ </template>
409
+ {{ fieldTitle("style") }}
410
+ </FieldLabel>
411
+ <ExpressionEditor
412
+ :model-value="value.style ?? ''"
413
+ placeholder="返回 CSS 字符串或样式对象的表达式,如 'max-height: 24rem'"
414
+ multiline
415
+ class="min-h-16"
416
+ @update:model-value="(v) => setOptionalExpression('style', v)"
417
+ />
418
+ </Field>
419
+
420
+ <!-- 过滤 (collapsible optional) -->
421
+ <div class="flex items-center gap-2">
422
+ <h3 class="text-xs font-medium text-zinc-500">
423
+ {{ fieldTitle("filter") }}
424
+ </h3>
425
+ <Switch
426
+ size="sm"
427
+ :model-value="filter?.enabled ?? false"
428
+ :aria-label="filterFieldTitle('enabled')"
429
+ @update:model-value="setFilterEnabled"
430
+ />
431
+ </div>
432
+
433
+ <div
434
+ v-if="filter?.enabled"
435
+ class="grid grid-cols-2 gap-3"
436
+ >
437
+ <Field orientation="vertical">
438
+ <FieldLabel class="text-xs text-zinc-500">
439
+ <template
440
+ v-if="filterFieldDescription('label')"
441
+ #tooltip
442
+ >
443
+ <Markdown
444
+ :source="filterFieldDescription('label')"
445
+ block
446
+ class="prose prose-sm prose-zinc"
447
+ />
448
+ </template>
449
+ {{ filterFieldTitle("label") }}
450
+ </FieldLabel>
451
+ <LocaleField
452
+ translate-hint="tree filter input label"
453
+ :model-value="filter.label"
454
+ @update:model-value="setFilterLabel"
455
+ />
456
+ </Field>
457
+
458
+ <Field orientation="vertical">
459
+ <FieldLabel class="text-xs text-zinc-500">
460
+ <template
461
+ v-if="filterFieldDescription('keywords')"
462
+ #tooltip
463
+ >
464
+ <Markdown
465
+ :source="filterFieldDescription('keywords')"
466
+ block
467
+ class="prose prose-sm prose-zinc"
468
+ />
469
+ </template>
470
+ {{ filterFieldTitle("keywords") }}
471
+ </FieldLabel>
472
+ <ExpressionEditor
473
+ :model-value="filter.keywords ?? ''"
474
+ placeholder="例:[node.code, node.alias]"
475
+ result-type="list"
476
+ :extra-vars="nodeExtraVars"
477
+ class="min-h-10"
478
+ @update:model-value="setFilterKeywords"
479
+ />
480
+ </Field>
481
+ </div>
482
+ </div>
483
+
484
+ <ActionsConfigEditor
485
+ v-else
486
+ v-model="nodeActions"
487
+ :configure="nodeActionsConfigure"
488
+ />
489
+ </ScrollArea>
490
+ </div>
491
+ </div>
492
+ </template>
493
+
494
+ <style scoped>
495
+ .row{align-items:center;border-radius:.25rem;cursor:pointer;display:flex;font-size:.875rem;font-weight:500;gap:.375rem;padding-block:.375rem;padding-right:.5rem;position:relative;transition:background-color .1s ease;-webkit-user-select:none;-moz-user-select:none;user-select:none}
496
+ </style>