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