xkit-editor 2.0.0-alpha.0

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 (479) hide show
  1. package/lib/index.d.ts +2 -0
  2. package/lib/packages/editor/env.d.ts +7 -0
  3. package/lib/packages/editor/src/component-configs/__tests__/config.test.d.ts +2 -0
  4. package/lib/packages/editor/src/component-configs/__tests__/config.test.d.ts.map +1 -0
  5. package/lib/packages/editor/src/component-configs/__tests__/group.test.d.ts +2 -0
  6. package/lib/packages/editor/src/component-configs/__tests__/group.test.d.ts.map +1 -0
  7. package/lib/packages/editor/src/component-configs/cascader.d.ts +3 -0
  8. package/lib/packages/editor/src/component-configs/cascader.d.ts.map +1 -0
  9. package/lib/packages/editor/src/component-configs/checkbox.d.ts +4 -0
  10. package/lib/packages/editor/src/component-configs/checkbox.d.ts.map +1 -0
  11. package/lib/packages/editor/src/component-configs/common-props.d.ts +16 -0
  12. package/lib/packages/editor/src/component-configs/common-props.d.ts.map +1 -0
  13. package/lib/packages/editor/src/component-configs/date-picker.d.ts +3 -0
  14. package/lib/packages/editor/src/component-configs/date-picker.d.ts.map +1 -0
  15. package/lib/packages/editor/src/component-configs/date-range-picker.d.ts +4 -0
  16. package/lib/packages/editor/src/component-configs/date-range-picker.d.ts.map +1 -0
  17. package/lib/packages/editor/src/component-configs/group.d.ts +3 -0
  18. package/lib/packages/editor/src/component-configs/group.d.ts.map +1 -0
  19. package/lib/packages/editor/src/component-configs/icon-select.d.ts +3 -0
  20. package/lib/packages/editor/src/component-configs/icon-select.d.ts.map +1 -0
  21. package/lib/packages/editor/src/component-configs/input-array.d.ts +4 -0
  22. package/lib/packages/editor/src/component-configs/input-array.d.ts.map +1 -0
  23. package/lib/packages/editor/src/component-configs/input-number-range.d.ts +3 -0
  24. package/lib/packages/editor/src/component-configs/input-number-range.d.ts.map +1 -0
  25. package/lib/packages/editor/src/component-configs/input-number.d.ts +3 -0
  26. package/lib/packages/editor/src/component-configs/input-number.d.ts.map +1 -0
  27. package/lib/packages/editor/src/component-configs/input-table.d.ts +3 -0
  28. package/lib/packages/editor/src/component-configs/input-table.d.ts.map +1 -0
  29. package/lib/packages/editor/src/component-configs/input-upload.d.ts +3 -0
  30. package/lib/packages/editor/src/component-configs/input-upload.d.ts.map +1 -0
  31. package/lib/packages/editor/src/component-configs/input.d.ts +3 -0
  32. package/lib/packages/editor/src/component-configs/input.d.ts.map +1 -0
  33. package/lib/packages/editor/src/component-configs/layout-sections.d.ts +11 -0
  34. package/lib/packages/editor/src/component-configs/layout-sections.d.ts.map +1 -0
  35. package/lib/packages/editor/src/component-configs/options-config.d.ts +3 -0
  36. package/lib/packages/editor/src/component-configs/options-config.d.ts.map +1 -0
  37. package/lib/packages/editor/src/component-configs/radio.d.ts +3 -0
  38. package/lib/packages/editor/src/component-configs/radio.d.ts.map +1 -0
  39. package/lib/packages/editor/src/component-configs/select.d.ts +3 -0
  40. package/lib/packages/editor/src/component-configs/select.d.ts.map +1 -0
  41. package/lib/packages/editor/src/component-configs/switch.d.ts +3 -0
  42. package/lib/packages/editor/src/component-configs/switch.d.ts.map +1 -0
  43. package/lib/packages/editor/src/component-configs/textarea.d.ts +3 -0
  44. package/lib/packages/editor/src/component-configs/textarea.d.ts.map +1 -0
  45. package/lib/packages/editor/src/component-configs/types.d.ts +33 -0
  46. package/lib/packages/editor/src/component-configs/types.d.ts.map +1 -0
  47. package/lib/packages/editor/src/components/condition-editor.vue.d.ts +19 -0
  48. package/lib/packages/editor/src/components/condition-editor.vue.d.ts.map +1 -0
  49. package/lib/packages/editor/src/components/design-renderers/input-array-design.vue.d.ts +17 -0
  50. package/lib/packages/editor/src/components/design-renderers/input-array-design.vue.d.ts.map +1 -0
  51. package/lib/packages/editor/src/components/design-renderers/input-table-design.vue.d.ts +15 -0
  52. package/lib/packages/editor/src/components/design-renderers/input-table-design.vue.d.ts.map +1 -0
  53. package/lib/packages/editor/src/components/form-item-layout-editor.vue.d.ts +14 -0
  54. package/lib/packages/editor/src/components/form-item-layout-editor.vue.d.ts.map +1 -0
  55. package/lib/packages/editor/src/components/form-item-span-editor.vue.d.ts +18 -0
  56. package/lib/packages/editor/src/components/form-item-span-editor.vue.d.ts.map +1 -0
  57. package/lib/packages/editor/src/components/form-layout-editor.vue.d.ts +21 -0
  58. package/lib/packages/editor/src/components/form-layout-editor.vue.d.ts.map +1 -0
  59. package/lib/packages/editor/src/components/group-title-color-select.vue.d.ts +10 -0
  60. package/lib/packages/editor/src/components/group-title-color-select.vue.d.ts.map +1 -0
  61. package/lib/packages/editor/src/components/group-title-style-picker.vue.d.ts +10 -0
  62. package/lib/packages/editor/src/components/group-title-style-picker.vue.d.ts.map +1 -0
  63. package/lib/packages/editor/src/components/input-number-range-binding-editor.vue.d.ts +25 -0
  64. package/lib/packages/editor/src/components/input-number-range-binding-editor.vue.d.ts.map +1 -0
  65. package/lib/packages/editor/src/components/input-table-default-rows-editor.vue.d.ts +11 -0
  66. package/lib/packages/editor/src/components/input-table-default-rows-editor.vue.d.ts.map +1 -0
  67. package/lib/packages/editor/src/components/input-table-operation-editor.vue.d.ts +11 -0
  68. package/lib/packages/editor/src/components/input-table-operation-editor.vue.d.ts.map +1 -0
  69. package/lib/packages/editor/src/components/json-code-editor.vue.d.ts +18 -0
  70. package/lib/packages/editor/src/components/json-code-editor.vue.d.ts.map +1 -0
  71. package/lib/packages/editor/src/components/object-section-editor.vue.d.ts +23 -0
  72. package/lib/packages/editor/src/components/object-section-editor.vue.d.ts.map +1 -0
  73. package/lib/packages/editor/src/components/options/default-dict-options-panel.vue.d.ts +10 -0
  74. package/lib/packages/editor/src/components/options/default-dict-options-panel.vue.d.ts.map +1 -0
  75. package/lib/packages/editor/src/components/options/options-editor.vue.d.ts +12 -0
  76. package/lib/packages/editor/src/components/options/options-editor.vue.d.ts.map +1 -0
  77. package/lib/packages/editor/src/components/validation-rules-editor.vue.d.ts +12 -0
  78. package/lib/packages/editor/src/components/validation-rules-editor.vue.d.ts.map +1 -0
  79. package/lib/packages/editor/src/config.d.ts +8 -0
  80. package/lib/packages/editor/src/config.d.ts.map +1 -0
  81. package/lib/packages/editor/src/editor-item-wrapper.vue.d.ts +39 -0
  82. package/lib/packages/editor/src/editor-item-wrapper.vue.d.ts.map +1 -0
  83. package/lib/packages/editor/src/group-title-styles.d.ts +9 -0
  84. package/lib/packages/editor/src/group-title-styles.d.ts.map +1 -0
  85. package/lib/packages/editor/src/index.d.ts +7 -0
  86. package/lib/packages/editor/src/index.d.ts.map +1 -0
  87. package/lib/packages/editor/src/option-sources.d.ts +10 -0
  88. package/lib/packages/editor/src/option-sources.d.ts.map +1 -0
  89. package/lib/packages/editor/src/root-configs.d.ts +12 -0
  90. package/lib/packages/editor/src/root-configs.d.ts.map +1 -0
  91. package/lib/packages/editor/src/shims-vue.d.ts +5 -0
  92. package/lib/packages/editor/src/utils/__tests__/component-replace.test.d.ts +2 -0
  93. package/lib/packages/editor/src/utils/__tests__/component-replace.test.d.ts.map +1 -0
  94. package/lib/packages/editor/src/utils/__tests__/editor-schema.test.d.ts +2 -0
  95. package/lib/packages/editor/src/utils/__tests__/editor-schema.test.d.ts.map +1 -0
  96. package/lib/packages/editor/src/utils/__tests__/form-item-width.test.d.ts +2 -0
  97. package/lib/packages/editor/src/utils/__tests__/form-item-width.test.d.ts.map +1 -0
  98. package/lib/packages/editor/src/utils/__tests__/group-drag-path.test.d.ts +2 -0
  99. package/lib/packages/editor/src/utils/__tests__/group-drag-path.test.d.ts.map +1 -0
  100. package/lib/packages/editor/src/utils/__tests__/record-field.test.d.ts +2 -0
  101. package/lib/packages/editor/src/utils/__tests__/record-field.test.d.ts.map +1 -0
  102. package/lib/packages/editor/src/utils/component-replace.d.ts +8 -0
  103. package/lib/packages/editor/src/utils/component-replace.d.ts.map +1 -0
  104. package/lib/packages/editor/src/utils/editor-schema.d.ts +28 -0
  105. package/lib/packages/editor/src/utils/editor-schema.d.ts.map +1 -0
  106. package/lib/packages/editor/src/utils/form-item-width.d.ts +6 -0
  107. package/lib/packages/editor/src/utils/form-item-width.d.ts.map +1 -0
  108. package/lib/packages/editor/src/utils/local-dict-center.d.ts +11 -0
  109. package/lib/packages/editor/src/utils/local-dict-center.d.ts.map +1 -0
  110. package/lib/packages/editor/src/utils/record-field.d.ts +7 -0
  111. package/lib/packages/editor/src/utils/record-field.d.ts.map +1 -0
  112. package/lib/packages/editor/src/validation-rules.d.ts +10 -0
  113. package/lib/packages/editor/src/validation-rules.d.ts.map +1 -0
  114. package/lib/packages/editor/src/x-editor.vue.d.ts +107 -0
  115. package/lib/packages/editor/src/x-editor.vue.d.ts.map +1 -0
  116. package/lib/packages/ui/src/assets/icon-add-circle-fill.vue.d.ts +3 -0
  117. package/lib/packages/ui/src/assets/icon-add-circle-fill.vue.d.ts.map +1 -0
  118. package/lib/packages/ui/src/assets/icon-close-line.vue.d.ts +3 -0
  119. package/lib/packages/ui/src/assets/icon-close-line.vue.d.ts.map +1 -0
  120. package/lib/packages/ui/src/assets/icon-drag.vue.d.ts +3 -0
  121. package/lib/packages/ui/src/assets/icon-drag.vue.d.ts.map +1 -0
  122. package/lib/packages/ui/src/assets/icon-minus-circle.vue.d.ts +3 -0
  123. package/lib/packages/ui/src/assets/icon-minus-circle.vue.d.ts.map +1 -0
  124. package/lib/packages/ui/src/components/_public/form-item-cols.vue.d.ts +17 -0
  125. package/lib/packages/ui/src/components/_public/form-item-cols.vue.d.ts.map +1 -0
  126. package/lib/packages/ui/src/components/button/type.d.ts +85 -0
  127. package/lib/packages/ui/src/components/button/type.d.ts.map +1 -0
  128. package/lib/packages/ui/src/components/cascader/index.vue.d.ts +66 -0
  129. package/lib/packages/ui/src/components/cascader/index.vue.d.ts.map +1 -0
  130. package/lib/packages/ui/src/components/cascader/type.d.ts +125 -0
  131. package/lib/packages/ui/src/components/cascader/type.d.ts.map +1 -0
  132. package/lib/packages/ui/src/components/checkbox/index.vue.d.ts +30 -0
  133. package/lib/packages/ui/src/components/checkbox/index.vue.d.ts.map +1 -0
  134. package/lib/packages/ui/src/components/checkbox/type.d.ts +36 -0
  135. package/lib/packages/ui/src/components/checkbox/type.d.ts.map +1 -0
  136. package/lib/packages/ui/src/components/checkboxes/index.vue.d.ts +42 -0
  137. package/lib/packages/ui/src/components/checkboxes/index.vue.d.ts.map +1 -0
  138. package/lib/packages/ui/src/components/checkboxes/type.d.ts +56 -0
  139. package/lib/packages/ui/src/components/checkboxes/type.d.ts.map +1 -0
  140. package/lib/packages/ui/src/components/component/index.d.ts +7 -0
  141. package/lib/packages/ui/src/components/component/index.d.ts.map +1 -0
  142. package/lib/packages/ui/src/components/condition-builder/condition-node.vue.d.ts +32 -0
  143. package/lib/packages/ui/src/components/condition-builder/condition-node.vue.d.ts.map +1 -0
  144. package/lib/packages/ui/src/components/condition-builder/group-bracket.vue.d.ts +19 -0
  145. package/lib/packages/ui/src/components/condition-builder/group-bracket.vue.d.ts.map +1 -0
  146. package/lib/packages/ui/src/components/condition-builder/group-indent.vue.d.ts +19 -0
  147. package/lib/packages/ui/src/components/condition-builder/group-indent.vue.d.ts.map +1 -0
  148. package/lib/packages/ui/src/components/condition-builder/index.vue.d.ts +160 -0
  149. package/lib/packages/ui/src/components/condition-builder/index.vue.d.ts.map +1 -0
  150. package/lib/packages/ui/src/components/condition-builder/type.d.ts +88 -0
  151. package/lib/packages/ui/src/components/condition-builder/type.d.ts.map +1 -0
  152. package/lib/packages/ui/src/components/crud/action-type.d.ts +80 -0
  153. package/lib/packages/ui/src/components/crud/action-type.d.ts.map +1 -0
  154. package/lib/packages/ui/src/components/crud/index.vue.d.ts +78 -0
  155. package/lib/packages/ui/src/components/crud/index.vue.d.ts.map +1 -0
  156. package/lib/packages/ui/src/components/crud/multi-action.vue.d.ts +8 -0
  157. package/lib/packages/ui/src/components/crud/multi-action.vue.d.ts.map +1 -0
  158. package/lib/packages/ui/src/components/crud/single-action.vue.d.ts +7 -0
  159. package/lib/packages/ui/src/components/crud/single-action.vue.d.ts.map +1 -0
  160. package/lib/packages/ui/src/components/crud/type.d.ts +171 -0
  161. package/lib/packages/ui/src/components/crud/type.d.ts.map +1 -0
  162. package/lib/packages/ui/src/components/crud-form/index.vue.d.ts +22 -0
  163. package/lib/packages/ui/src/components/crud-form/index.vue.d.ts.map +1 -0
  164. package/lib/packages/ui/src/components/crud-form/type.d.ts +65 -0
  165. package/lib/packages/ui/src/components/crud-form/type.d.ts.map +1 -0
  166. package/lib/packages/ui/src/components/date-picker/index.vue.d.ts +35 -0
  167. package/lib/packages/ui/src/components/date-picker/index.vue.d.ts.map +1 -0
  168. package/lib/packages/ui/src/components/date-picker/type.d.ts +139 -0
  169. package/lib/packages/ui/src/components/date-picker/type.d.ts.map +1 -0
  170. package/lib/packages/ui/src/components/date-range-picker/index.vue.d.ts +15 -0
  171. package/lib/packages/ui/src/components/date-range-picker/index.vue.d.ts.map +1 -0
  172. package/lib/packages/ui/src/components/date-range-picker/type.d.ts +137 -0
  173. package/lib/packages/ui/src/components/date-range-picker/type.d.ts.map +1 -0
  174. package/lib/packages/ui/src/components/date-range-picker-v2/index.vue.d.ts +22 -0
  175. package/lib/packages/ui/src/components/date-range-picker-v2/index.vue.d.ts.map +1 -0
  176. package/lib/packages/ui/src/components/date-range-picker-v2/type.d.ts +37 -0
  177. package/lib/packages/ui/src/components/date-range-picker-v2/type.d.ts.map +1 -0
  178. package/lib/packages/ui/src/components/description/index.vue.d.ts +28 -0
  179. package/lib/packages/ui/src/components/description/index.vue.d.ts.map +1 -0
  180. package/lib/packages/ui/src/components/description/type.d.ts +120 -0
  181. package/lib/packages/ui/src/components/description/type.d.ts.map +1 -0
  182. package/lib/packages/ui/src/components/dialog/type.d.ts +100 -0
  183. package/lib/packages/ui/src/components/dialog/type.d.ts.map +1 -0
  184. package/lib/packages/ui/src/components/dropdown/type.d.ts +62 -0
  185. package/lib/packages/ui/src/components/dropdown/type.d.ts.map +1 -0
  186. package/lib/packages/ui/src/components/ellipsis/index.vue.d.ts +34 -0
  187. package/lib/packages/ui/src/components/ellipsis/index.vue.d.ts.map +1 -0
  188. package/lib/packages/ui/src/components/ellipsis/type.d.ts +26 -0
  189. package/lib/packages/ui/src/components/ellipsis/type.d.ts.map +1 -0
  190. package/lib/packages/ui/src/components/event-menu/index.vue.d.ts +25 -0
  191. package/lib/packages/ui/src/components/event-menu/index.vue.d.ts.map +1 -0
  192. package/lib/packages/ui/src/components/form/form-item.type.d.ts +304 -0
  193. package/lib/packages/ui/src/components/form/form-item.type.d.ts.map +1 -0
  194. package/lib/packages/ui/src/components/form/form-item.vue.d.ts +50 -0
  195. package/lib/packages/ui/src/components/form/form-item.vue.d.ts.map +1 -0
  196. package/lib/packages/ui/src/components/form/form-layout-renderer.vue.d.ts +71 -0
  197. package/lib/packages/ui/src/components/form/form-layout-renderer.vue.d.ts.map +1 -0
  198. package/lib/packages/ui/src/components/form/index.vue.d.ts +220 -0
  199. package/lib/packages/ui/src/components/form/index.vue.d.ts.map +1 -0
  200. package/lib/packages/ui/src/components/form/query-form.d.ts +4 -0
  201. package/lib/packages/ui/src/components/form/query-form.d.ts.map +1 -0
  202. package/lib/packages/ui/src/components/form/type.d.ts +312 -0
  203. package/lib/packages/ui/src/components/form/type.d.ts.map +1 -0
  204. package/lib/packages/ui/src/components/group/group-item.vue.d.ts +9 -0
  205. package/lib/packages/ui/src/components/group/group-item.vue.d.ts.map +1 -0
  206. package/lib/packages/ui/src/components/group/index.vue.d.ts +24 -0
  207. package/lib/packages/ui/src/components/group/index.vue.d.ts.map +1 -0
  208. package/lib/packages/ui/src/components/group/type.d.ts +119 -0
  209. package/lib/packages/ui/src/components/group/type.d.ts.map +1 -0
  210. package/lib/packages/ui/src/components/icon-select/__tests__/icon-sources.test.d.ts +2 -0
  211. package/lib/packages/ui/src/components/icon-select/__tests__/icon-sources.test.d.ts.map +1 -0
  212. package/lib/packages/ui/src/components/icon-select/icon-parser.vue.d.ts +41 -0
  213. package/lib/packages/ui/src/components/icon-select/icon-parser.vue.d.ts.map +1 -0
  214. package/lib/packages/ui/src/components/icon-select/icon-sources.d.ts +22 -0
  215. package/lib/packages/ui/src/components/icon-select/icon-sources.d.ts.map +1 -0
  216. package/lib/packages/ui/src/components/icon-select/index.vue.d.ts +15 -0
  217. package/lib/packages/ui/src/components/icon-select/index.vue.d.ts.map +1 -0
  218. package/lib/packages/ui/src/components/icon-select/type.d.ts +24 -0
  219. package/lib/packages/ui/src/components/icon-select/type.d.ts.map +1 -0
  220. package/lib/packages/ui/src/components/index.d.ts +107 -0
  221. package/lib/packages/ui/src/components/index.d.ts.map +1 -0
  222. package/lib/packages/ui/src/components/input/index.vue.d.ts +20 -0
  223. package/lib/packages/ui/src/components/input/index.vue.d.ts.map +1 -0
  224. package/lib/packages/ui/src/components/input/type.d.ts +121 -0
  225. package/lib/packages/ui/src/components/input/type.d.ts.map +1 -0
  226. package/lib/packages/ui/src/components/input-array/__tests__/layout.test.d.ts +2 -0
  227. package/lib/packages/ui/src/components/input-array/__tests__/layout.test.d.ts.map +1 -0
  228. package/lib/packages/ui/src/components/input-array/index.vue.d.ts +28 -0
  229. package/lib/packages/ui/src/components/input-array/index.vue.d.ts.map +1 -0
  230. package/lib/packages/ui/src/components/input-array/layout.d.ts +11 -0
  231. package/lib/packages/ui/src/components/input-array/layout.d.ts.map +1 -0
  232. package/lib/packages/ui/src/components/input-array/type.d.ts +89 -0
  233. package/lib/packages/ui/src/components/input-array/type.d.ts.map +1 -0
  234. package/lib/packages/ui/src/components/input-collapse/index.vue.d.ts +7 -0
  235. package/lib/packages/ui/src/components/input-collapse/index.vue.d.ts.map +1 -0
  236. package/lib/packages/ui/src/components/input-collapse/type.d.ts +50 -0
  237. package/lib/packages/ui/src/components/input-collapse/type.d.ts.map +1 -0
  238. package/lib/packages/ui/src/components/input-linked/index.vue.d.ts +13 -0
  239. package/lib/packages/ui/src/components/input-linked/index.vue.d.ts.map +1 -0
  240. package/lib/packages/ui/src/components/input-linked/type.d.ts +32 -0
  241. package/lib/packages/ui/src/components/input-linked/type.d.ts.map +1 -0
  242. package/lib/packages/ui/src/components/input-number/index.vue.d.ts +29 -0
  243. package/lib/packages/ui/src/components/input-number/index.vue.d.ts.map +1 -0
  244. package/lib/packages/ui/src/components/input-number/type.d.ts +57 -0
  245. package/lib/packages/ui/src/components/input-number/type.d.ts.map +1 -0
  246. package/lib/packages/ui/src/components/input-number-range/index.vue.d.ts +28 -0
  247. package/lib/packages/ui/src/components/input-number-range/index.vue.d.ts.map +1 -0
  248. package/lib/packages/ui/src/components/input-number-range/type.d.ts +49 -0
  249. package/lib/packages/ui/src/components/input-number-range/type.d.ts.map +1 -0
  250. package/lib/packages/ui/src/components/input-table/index.vue.d.ts +25 -0
  251. package/lib/packages/ui/src/components/input-table/index.vue.d.ts.map +1 -0
  252. package/lib/packages/ui/src/components/input-table/type.d.ts +37 -0
  253. package/lib/packages/ui/src/components/input-table/type.d.ts.map +1 -0
  254. package/lib/packages/ui/src/components/input-upload/index.vue.d.ts +11 -0
  255. package/lib/packages/ui/src/components/input-upload/index.vue.d.ts.map +1 -0
  256. package/lib/packages/ui/src/components/input-upload/type.d.ts +59 -0
  257. package/lib/packages/ui/src/components/input-upload/type.d.ts.map +1 -0
  258. package/lib/packages/ui/src/components/json/index.vue.d.ts +10 -0
  259. package/lib/packages/ui/src/components/json/index.vue.d.ts.map +1 -0
  260. package/lib/packages/ui/src/components/link/index.vue.d.ts +21 -0
  261. package/lib/packages/ui/src/components/link/index.vue.d.ts.map +1 -0
  262. package/lib/packages/ui/src/components/link/type.d.ts +28 -0
  263. package/lib/packages/ui/src/components/link/type.d.ts.map +1 -0
  264. package/lib/packages/ui/src/components/radios/index.vue.d.ts +42 -0
  265. package/lib/packages/ui/src/components/radios/index.vue.d.ts.map +1 -0
  266. package/lib/packages/ui/src/components/radios/type.d.ts +36 -0
  267. package/lib/packages/ui/src/components/radios/type.d.ts.map +1 -0
  268. package/lib/packages/ui/src/components/search-bar/index.vue.d.ts +37 -0
  269. package/lib/packages/ui/src/components/search-bar/index.vue.d.ts.map +1 -0
  270. package/lib/packages/ui/src/components/select/index.vue.d.ts +48 -0
  271. package/lib/packages/ui/src/components/select/index.vue.d.ts.map +1 -0
  272. package/lib/packages/ui/src/components/select/type.d.ts +222 -0
  273. package/lib/packages/ui/src/components/select/type.d.ts.map +1 -0
  274. package/lib/packages/ui/src/components/static/options-viewer.vue.d.ts +16 -0
  275. package/lib/packages/ui/src/components/static/options-viewer.vue.d.ts.map +1 -0
  276. package/lib/packages/ui/src/components/static/rich-text-viewer.vue.d.ts +8 -0
  277. package/lib/packages/ui/src/components/static/rich-text-viewer.vue.d.ts.map +1 -0
  278. package/lib/packages/ui/src/components/static/textarea-viewer.vue.d.ts +6 -0
  279. package/lib/packages/ui/src/components/static/textarea-viewer.vue.d.ts.map +1 -0
  280. package/lib/packages/ui/src/components/switch/index.vue.d.ts +38 -0
  281. package/lib/packages/ui/src/components/switch/index.vue.d.ts.map +1 -0
  282. package/lib/packages/ui/src/components/switch/type.d.ts +72 -0
  283. package/lib/packages/ui/src/components/switch/type.d.ts.map +1 -0
  284. package/lib/packages/ui/src/components/table/index.vue.d.ts +1317 -0
  285. package/lib/packages/ui/src/components/table/index.vue.d.ts.map +1 -0
  286. package/lib/packages/ui/src/components/table/table-column.vue.d.ts +44 -0
  287. package/lib/packages/ui/src/components/table/table-column.vue.d.ts.map +1 -0
  288. package/lib/packages/ui/src/components/table/type.d.ts +306 -0
  289. package/lib/packages/ui/src/components/table/type.d.ts.map +1 -0
  290. package/lib/packages/ui/src/components/table-select/const.d.ts +14 -0
  291. package/lib/packages/ui/src/components/table-select/const.d.ts.map +1 -0
  292. package/lib/packages/ui/src/components/table-select/index.vue.d.ts +21871 -0
  293. package/lib/packages/ui/src/components/table-select/index.vue.d.ts.map +1 -0
  294. package/lib/packages/ui/src/components/table-select/table-selector-main.vue.d.ts +4795 -0
  295. package/lib/packages/ui/src/components/table-select/table-selector-main.vue.d.ts.map +1 -0
  296. package/lib/packages/ui/src/components/table-select/type.d.ts +71 -0
  297. package/lib/packages/ui/src/components/table-select/type.d.ts.map +1 -0
  298. package/lib/packages/ui/src/components/tabs/index.vue.d.ts +6 -0
  299. package/lib/packages/ui/src/components/tabs/index.vue.d.ts.map +1 -0
  300. package/lib/packages/ui/src/components/tabs/type.d.ts +23 -0
  301. package/lib/packages/ui/src/components/tabs/type.d.ts.map +1 -0
  302. package/lib/packages/ui/src/components/text/index.vue.d.ts +7 -0
  303. package/lib/packages/ui/src/components/text/index.vue.d.ts.map +1 -0
  304. package/lib/packages/ui/src/components/text/type.d.ts +7 -0
  305. package/lib/packages/ui/src/components/text/type.d.ts.map +1 -0
  306. package/lib/packages/ui/src/components/textarea/type.d.ts +79 -0
  307. package/lib/packages/ui/src/components/textarea/type.d.ts.map +1 -0
  308. package/lib/packages/ui/src/components/toolbar/index.vue.d.ts +15 -0
  309. package/lib/packages/ui/src/components/toolbar/index.vue.d.ts.map +1 -0
  310. package/lib/packages/ui/src/components/transitions/TransitionHeight.vue.d.ts +30 -0
  311. package/lib/packages/ui/src/components/transitions/TransitionHeight.vue.d.ts.map +1 -0
  312. package/lib/packages/ui/src/components/tree/index.vue.d.ts +17 -0
  313. package/lib/packages/ui/src/components/tree/index.vue.d.ts.map +1 -0
  314. package/lib/packages/ui/src/components/tree/tree-node.vue.d.ts +8 -0
  315. package/lib/packages/ui/src/components/tree/tree-node.vue.d.ts.map +1 -0
  316. package/lib/packages/ui/src/components/tree/tree-state.d.ts +35 -0
  317. package/lib/packages/ui/src/components/tree/tree-state.d.ts.map +1 -0
  318. package/lib/packages/ui/src/components/tree/type.d.ts +50 -0
  319. package/lib/packages/ui/src/components/tree/type.d.ts.map +1 -0
  320. package/lib/packages/ui/src/components/tree-select/index.vue.d.ts +94 -0
  321. package/lib/packages/ui/src/components/tree-select/index.vue.d.ts.map +1 -0
  322. package/lib/packages/ui/src/components/tree-select/type.d.ts +156 -0
  323. package/lib/packages/ui/src/components/tree-select/type.d.ts.map +1 -0
  324. package/lib/packages/ui/src/components/tree-select-crud/index.vue.d.ts +3102 -0
  325. package/lib/packages/ui/src/components/tree-select-crud/index.vue.d.ts.map +1 -0
  326. package/lib/packages/ui/src/components/tree-select-crud/type.d.ts +88 -0
  327. package/lib/packages/ui/src/components/tree-select-crud/type.d.ts.map +1 -0
  328. package/lib/packages/ui/src/components/upload/index.vue.d.ts +54 -0
  329. package/lib/packages/ui/src/components/upload/index.vue.d.ts.map +1 -0
  330. package/lib/packages/ui/src/composables/__tests__/use-option-static.test.d.ts +2 -0
  331. package/lib/packages/ui/src/composables/__tests__/use-option-static.test.d.ts.map +1 -0
  332. package/lib/packages/ui/src/composables/index.d.ts +3 -0
  333. package/lib/packages/ui/src/composables/index.d.ts.map +1 -0
  334. package/lib/packages/ui/src/composables/use-action.d.ts +21 -0
  335. package/lib/packages/ui/src/composables/use-action.d.ts.map +1 -0
  336. package/lib/packages/ui/src/composables/use-component.d.ts +74 -0
  337. package/lib/packages/ui/src/composables/use-component.d.ts.map +1 -0
  338. package/lib/packages/ui/src/composables/use-config.d.ts +76 -0
  339. package/lib/packages/ui/src/composables/use-config.d.ts.map +1 -0
  340. package/lib/packages/ui/src/composables/use-draggable.d.ts +22 -0
  341. package/lib/packages/ui/src/composables/use-draggable.d.ts.map +1 -0
  342. package/lib/packages/ui/src/composables/use-input-array.d.ts +45 -0
  343. package/lib/packages/ui/src/composables/use-input-array.d.ts.map +1 -0
  344. package/lib/packages/ui/src/composables/use-label.d.ts +2 -0
  345. package/lib/packages/ui/src/composables/use-label.d.ts.map +1 -0
  346. package/lib/packages/ui/src/composables/use-loading.d.ts +6 -0
  347. package/lib/packages/ui/src/composables/use-loading.d.ts.map +1 -0
  348. package/lib/packages/ui/src/composables/use-option-static.d.ts +51 -0
  349. package/lib/packages/ui/src/composables/use-option-static.d.ts.map +1 -0
  350. package/lib/packages/ui/src/composables/use-options.d.ts +66 -0
  351. package/lib/packages/ui/src/composables/use-options.d.ts.map +1 -0
  352. package/lib/packages/ui/src/composables/use-paging.d.ts +134 -0
  353. package/lib/packages/ui/src/composables/use-paging.d.ts.map +1 -0
  354. package/lib/packages/ui/src/composables/use-scaffold.d.ts +54 -0
  355. package/lib/packages/ui/src/composables/use-scaffold.d.ts.map +1 -0
  356. package/lib/packages/ui/src/composables/use-toggle.d.ts +11 -0
  357. package/lib/packages/ui/src/composables/use-toggle.d.ts.map +1 -0
  358. package/lib/packages/ui/src/composables/use-tree-static-path.d.ts +45 -0
  359. package/lib/packages/ui/src/composables/use-tree-static-path.d.ts.map +1 -0
  360. package/lib/packages/ui/src/composables/use-visible.d.ts +11 -0
  361. package/lib/packages/ui/src/composables/use-visible.d.ts.map +1 -0
  362. package/lib/packages/ui/src/config/layout.d.ts +9 -0
  363. package/lib/packages/ui/src/config/layout.d.ts.map +1 -0
  364. package/lib/packages/ui/src/constants/injection.d.ts +11 -0
  365. package/lib/packages/ui/src/constants/injection.d.ts.map +1 -0
  366. package/lib/packages/ui/src/directives/highlight.d.ts +7 -0
  367. package/lib/packages/ui/src/directives/highlight.d.ts.map +1 -0
  368. package/lib/packages/ui/src/directives/index.d.ts +2 -0
  369. package/lib/packages/ui/src/directives/index.d.ts.map +1 -0
  370. package/lib/packages/ui/src/index.d.ts +59 -0
  371. package/lib/packages/ui/src/index.d.ts.map +1 -0
  372. package/lib/packages/ui/src/types/api.d.ts +8 -0
  373. package/lib/packages/ui/src/types/api.d.ts.map +1 -0
  374. package/lib/packages/ui/src/types/base.d.ts +306 -0
  375. package/lib/packages/ui/src/types/base.d.ts.map +1 -0
  376. package/lib/packages/ui/src/types/form.d.ts +82 -0
  377. package/lib/packages/ui/src/types/form.d.ts.map +1 -0
  378. package/lib/packages/ui/src/types/index.d.ts +6 -0
  379. package/lib/packages/ui/src/types/index.d.ts.map +1 -0
  380. package/lib/packages/ui/src/types/option.d.ts +115 -0
  381. package/lib/packages/ui/src/types/option.d.ts.map +1 -0
  382. package/lib/packages/ui/src/types/pagination.d.ts +35 -0
  383. package/lib/packages/ui/src/types/pagination.d.ts.map +1 -0
  384. package/lib/packages/ui/src/types/table.d.ts +34 -0
  385. package/lib/packages/ui/src/types/table.d.ts.map +1 -0
  386. package/lib/packages/ui/src/types/util.d.ts +6 -0
  387. package/lib/packages/ui/src/types/util.d.ts.map +1 -0
  388. package/lib/packages/ui/src/utils/__tests__/condition.test.d.ts +2 -0
  389. package/lib/packages/ui/src/utils/__tests__/condition.test.d.ts.map +1 -0
  390. package/lib/packages/ui/src/utils/__tests__/editor-container.test.d.ts +2 -0
  391. package/lib/packages/ui/src/utils/__tests__/editor-container.test.d.ts.map +1 -0
  392. package/lib/packages/ui/src/utils/__tests__/form.test.d.ts +2 -0
  393. package/lib/packages/ui/src/utils/__tests__/form.test.d.ts.map +1 -0
  394. package/lib/packages/ui/src/utils/__tests__/tree.test.d.ts +2 -0
  395. package/lib/packages/ui/src/utils/__tests__/tree.test.d.ts.map +1 -0
  396. package/lib/packages/ui/src/utils/common.d.ts +13 -0
  397. package/lib/packages/ui/src/utils/common.d.ts.map +1 -0
  398. package/lib/packages/ui/src/utils/computed-state-manager.d.ts +3 -0
  399. package/lib/packages/ui/src/utils/computed-state-manager.d.ts.map +1 -0
  400. package/lib/packages/ui/src/utils/condition.d.ts +4 -0
  401. package/lib/packages/ui/src/utils/condition.d.ts.map +1 -0
  402. package/lib/packages/ui/src/utils/editor-container.d.ts +25 -0
  403. package/lib/packages/ui/src/utils/editor-container.d.ts.map +1 -0
  404. package/lib/packages/ui/src/utils/form-item.d.ts +23 -0
  405. package/lib/packages/ui/src/utils/form-item.d.ts.map +1 -0
  406. package/lib/packages/ui/src/utils/form.d.ts +75 -0
  407. package/lib/packages/ui/src/utils/form.d.ts.map +1 -0
  408. package/lib/packages/ui/src/utils/id.d.ts +24 -0
  409. package/lib/packages/ui/src/utils/id.d.ts.map +1 -0
  410. package/lib/packages/ui/src/utils/options.d.ts +14 -0
  411. package/lib/packages/ui/src/utils/options.d.ts.map +1 -0
  412. package/lib/packages/ui/src/utils/reactive.d.ts +13 -0
  413. package/lib/packages/ui/src/utils/reactive.d.ts.map +1 -0
  414. package/lib/packages/ui/src/utils/style.d.ts +5 -0
  415. package/lib/packages/ui/src/utils/style.d.ts.map +1 -0
  416. package/lib/packages/ui/src/utils/tree.d.ts +51 -0
  417. package/lib/packages/ui/src/utils/tree.d.ts.map +1 -0
  418. package/lib/xkit-editor.css +2 -0
  419. package/lib/xkit-editor.js +78741 -0
  420. package/lib/xkit-editor.umd.cjs +99 -0
  421. package/package.json +50 -0
  422. package/src/component-configs/__tests__/config.test.ts +288 -0
  423. package/src/component-configs/__tests__/group.test.ts +104 -0
  424. package/src/component-configs/cascader.ts +20 -0
  425. package/src/component-configs/checkbox.ts +43 -0
  426. package/src/component-configs/common-props.ts +130 -0
  427. package/src/component-configs/date-picker.ts +153 -0
  428. package/src/component-configs/date-range-picker.ts +185 -0
  429. package/src/component-configs/group.ts +196 -0
  430. package/src/component-configs/icon-select.ts +56 -0
  431. package/src/component-configs/input-array.ts +184 -0
  432. package/src/component-configs/input-number-range.ts +143 -0
  433. package/src/component-configs/input-number.ts +111 -0
  434. package/src/component-configs/input-table.ts +191 -0
  435. package/src/component-configs/input-upload.ts +123 -0
  436. package/src/component-configs/input.ts +48 -0
  437. package/src/component-configs/layout-sections.ts +546 -0
  438. package/src/component-configs/options-config.ts +12 -0
  439. package/src/component-configs/radio.ts +26 -0
  440. package/src/component-configs/select.ts +42 -0
  441. package/src/component-configs/switch.ts +19 -0
  442. package/src/component-configs/textarea.ts +84 -0
  443. package/src/component-configs/types.ts +37 -0
  444. package/src/components/condition-editor.vue +641 -0
  445. package/src/components/design-renderers/input-array-design.vue +283 -0
  446. package/src/components/design-renderers/input-table-design.vue +311 -0
  447. package/src/components/form-item-layout-editor.vue +291 -0
  448. package/src/components/form-item-span-editor.vue +328 -0
  449. package/src/components/form-layout-editor.vue +263 -0
  450. package/src/components/group-title-color-select.vue +75 -0
  451. package/src/components/group-title-style-picker.vue +125 -0
  452. package/src/components/input-number-range-binding-editor.vue +226 -0
  453. package/src/components/input-table-default-rows-editor.vue +147 -0
  454. package/src/components/input-table-operation-editor.vue +168 -0
  455. package/src/components/json-code-editor.vue +219 -0
  456. package/src/components/object-section-editor.vue +342 -0
  457. package/src/components/options/default-dict-options-panel.vue +197 -0
  458. package/src/components/options/options-editor.vue +161 -0
  459. package/src/components/table-columns-editor.vue +353 -0
  460. package/src/components/validation-rules-editor.vue +321 -0
  461. package/src/config.ts +51 -0
  462. package/src/editor-item-wrapper.vue +254 -0
  463. package/src/group-title-styles.ts +82 -0
  464. package/src/index.ts +6 -0
  465. package/src/option-sources.ts +45 -0
  466. package/src/root-configs.ts +278 -0
  467. package/src/shims-vue.d.ts +5 -0
  468. package/src/utils/__tests__/component-replace.test.ts +129 -0
  469. package/src/utils/__tests__/editor-schema.test.ts +429 -0
  470. package/src/utils/__tests__/form-item-width.test.ts +53 -0
  471. package/src/utils/__tests__/group-drag-path.test.ts +84 -0
  472. package/src/utils/__tests__/record-field.test.ts +34 -0
  473. package/src/utils/component-replace.ts +67 -0
  474. package/src/utils/editor-schema.ts +374 -0
  475. package/src/utils/form-item-width.ts +40 -0
  476. package/src/utils/local-dict-center.ts +81 -0
  477. package/src/utils/record-field.ts +30 -0
  478. package/src/validation-rules.ts +104 -0
  479. package/src/x-editor.vue +1300 -0
@@ -0,0 +1,641 @@
1
+ <template>
2
+ <div class="condition-editor">
3
+ <template v-if="inlineVisible">
4
+ <el-select :model-value="currentMode" placeholder="请选择状态" @change="handleModeChange" class="w-full">
5
+ <el-option v-for="option in modeOptions" :key="String(option.value)" :label="option.label" :value="option.value" />
6
+ </el-select>
7
+
8
+ <div v-if="currentMode === CONDITION_MODE" class="condition-actions">
9
+ <el-button type="primary" plain size="small" @click="handleOpen" class="w-full">
10
+ 配置条件
11
+ </el-button>
12
+ <div v-if="Array.isArray(modelValue) && modelValue.length > 0" class="condition-preview">
13
+ 已配置 {{ builderConditionCount }} 条条件
14
+ </div>
15
+ </div>
16
+ </template>
17
+
18
+ <el-dialog v-model="dialogVisible" title="配置显示条件" width="860px" append-to-body>
19
+ <div class="condition-dialog">
20
+ <x-condition-builder
21
+ v-model="builderValue"
22
+ :items="builderItems"
23
+ :init-button-attrs="{ label: '添加条件' }"
24
+ class="condition-builder"
25
+ />
26
+ </div>
27
+ <template #footer>
28
+ <el-button @click="dialogVisible = false">取消</el-button>
29
+ <el-button type="primary" @click="handleSave">确定</el-button>
30
+ </template>
31
+ </el-dialog>
32
+ </div>
33
+ </template>
34
+
35
+ <script setup lang="ts">
36
+ import { computed, inject, ref, unref, watch, type ComputedRef } from 'vue'
37
+ import { dayjs, ElButton, ElDialog, ElOption, ElSelect } from 'element-plus'
38
+ import { XConditionBuilder, genId, type OptionItem, type XConditionNode, type XFormItem } from 'xkit-ui'
39
+ import { listEditorLocalDicts } from '../utils/local-dict-center'
40
+
41
+ type StateKind = 'visible' | 'disabled' | 'static'
42
+ type FieldValueKind = 'number' | 'date' | 'boolean' | 'text' | 'option-single' | 'option-multiple' | 'tree-option'
43
+ type EditorOperator =
44
+ | 'eq'
45
+ | 'neq'
46
+ | 'gt'
47
+ | 'gte'
48
+ | 'lt'
49
+ | 'lte'
50
+ | 'contains'
51
+ | 'not_contains'
52
+ | 'in'
53
+ | 'not_in'
54
+ | 'exists'
55
+ | 'empty'
56
+
57
+ type FieldMeta = {
58
+ label: string
59
+ name: string
60
+ item: XFormItem
61
+ type: string
62
+ valueKind: FieldValueKind
63
+ options?: OptionItem[]
64
+ hasOptions: boolean
65
+ isTree: boolean
66
+ multiple: boolean
67
+ }
68
+
69
+ const CONDITION_MODE = 'condition'
70
+ const unaryOperators = new Set<EditorOperator>(['exists', 'empty'])
71
+ const multiValueOperators = new Set<EditorOperator>(['contains', 'not_contains', 'in', 'not_in'])
72
+
73
+ const props = withDefaults(defineProps<{
74
+ modelValue?: any
75
+ defaultValue?: boolean
76
+ stateKind?: StateKind
77
+ inlineVisible?: boolean
78
+ autoOpenKey?: string | number
79
+ }>(), {
80
+ inlineVisible: true
81
+ })
82
+
83
+ const emit = defineEmits<{
84
+ (e: 'update:modelValue', value: any): void
85
+ }>()
86
+
87
+ const editorContext = inject<ComputedRef<{ form?: { body?: XFormItem[] }; selectedItem?: any }> | null>('x-editor-context', null)
88
+
89
+ const dialogVisible = ref(false)
90
+ const builderValue = ref<XConditionNode | undefined>(undefined)
91
+
92
+ const stateKind = computed<StateKind>(() => props.stateKind ?? (props.defaultValue === true ? 'visible' : 'disabled'))
93
+
94
+ const modeOptions = computed(() => {
95
+ if (stateKind.value === 'visible') {
96
+ return [
97
+ { label: '始终显示', value: true },
98
+ { label: '始终隐藏', value: false },
99
+ { label: '满足条件时显示', value: CONDITION_MODE }
100
+ ]
101
+ }
102
+ if (stateKind.value === 'static') {
103
+ return [
104
+ { label: '默认编辑', value: false },
105
+ { label: '始终只读', value: true },
106
+ { label: '满足条件时只读', value: CONDITION_MODE }
107
+ ]
108
+ }
109
+ return [
110
+ { label: '始终可用', value: false },
111
+ { label: '始终禁用', value: true },
112
+ { label: '满足条件时禁用', value: CONDITION_MODE }
113
+ ]
114
+ })
115
+
116
+ const currentMode = computed(() => {
117
+ if (typeof props.modelValue === 'boolean') return props.modelValue
118
+ if (Array.isArray(props.modelValue)) return CONDITION_MODE
119
+ return props.defaultValue ?? true
120
+ })
121
+
122
+ const collectFormItems = (items: XFormItem[] = []) => {
123
+ const result: XFormItem[] = []
124
+ items.forEach((item) => {
125
+ if (item?.type === 'group' && Array.isArray(item.body)) {
126
+ result.push(...collectFormItems(item.body))
127
+ return
128
+ }
129
+ result.push(item)
130
+ })
131
+ return result
132
+ }
133
+
134
+ const normalizeType = (type: unknown) => String(type || 'input').replace(/^el-/, '').replace(/^x-/, '')
135
+
136
+ const normalizeDictOptions = (options: unknown) => {
137
+ if (typeof options === 'string') return { type: 'dict', code: options }
138
+ if (!options || typeof options !== 'object') return undefined
139
+ const source = options as Record<string, unknown>
140
+ if (source.type === 'dict' && typeof source.code === 'string') {
141
+ return { type: 'dict', code: source.code }
142
+ }
143
+ return undefined
144
+ }
145
+
146
+ const resolveConditionOptions = (item: XFormItem): OptionItem[] | undefined => {
147
+ const options = unref((item as Record<string, any>).options)
148
+ if (Array.isArray(options)) return options
149
+
150
+ const dictOptions = normalizeDictOptions(options)
151
+ if (!dictOptions) return undefined
152
+
153
+ return listEditorLocalDicts().find((dict) => dict.code === dictOptions.code)?.options
154
+ }
155
+
156
+ const hasTreeOptions = (options?: OptionItem[]) => {
157
+ return Boolean(options?.some((option) => Array.isArray(option?.children) && option.children.length > 0))
158
+ }
159
+
160
+ const createFieldMeta = (item: XFormItem): FieldMeta | undefined => {
161
+ if (!item?.name || item.type === 'group') return undefined
162
+ const type = normalizeType(item.type)
163
+ const options = resolveConditionOptions(item)
164
+ const hasOptions = Array.isArray(options)
165
+ const isTree = ['cascader', 'tree-select'].includes(type) || hasTreeOptions(options)
166
+ const multiple = Boolean((item as any).multiple || ['checkboxes'].includes(type))
167
+ let valueKind: FieldValueKind = 'text'
168
+
169
+ if (isTree) {
170
+ valueKind = 'tree-option'
171
+ } else if (hasOptions || ['select', 'radios', 'radio'].includes(type)) {
172
+ valueKind = multiple ? 'option-multiple' : 'option-single'
173
+ } else if (['input-number', 'input-number-range', 'slider'].includes(type)) {
174
+ valueKind = 'number'
175
+ } else if (['date-picker', 'date-range-picker', 'date-range-picker-v2'].includes(type)) {
176
+ valueKind = 'date'
177
+ } else if (['switch', 'checkbox'].includes(type)) {
178
+ valueKind = 'boolean'
179
+ }
180
+
181
+ return {
182
+ label: typeof item.label === 'string' && item.label ? item.label : item.name,
183
+ name: item.name,
184
+ item,
185
+ type,
186
+ valueKind,
187
+ options,
188
+ hasOptions,
189
+ isTree,
190
+ multiple
191
+ }
192
+ }
193
+
194
+ const fieldMetas = computed(() => {
195
+ const items = editorContext?.value?.form?.body ?? []
196
+ const currentName = editorContext?.value?.selectedItem?.name
197
+ const metas = collectFormItems(items)
198
+ .map(createFieldMeta)
199
+ .filter(Boolean) as FieldMeta[]
200
+ const filtered = metas.filter((item) => item.name !== currentName)
201
+ return filtered.length > 0 ? filtered : metas
202
+ })
203
+
204
+ const findFieldMeta = (field?: string) => fieldMetas.value.find((item) => item.name === field)
205
+
206
+ const fieldOptions = computed(() => fieldMetas.value.map((item) => ({ label: item.label, value: item.name })))
207
+
208
+ const operatorOptionsByKind: Record<FieldValueKind, Array<{ label: string; value: EditorOperator }>> = {
209
+ number: [
210
+ { label: '等于', value: 'eq' },
211
+ { label: '不等于', value: 'neq' },
212
+ { label: '大于', value: 'gt' },
213
+ { label: '大于等于', value: 'gte' },
214
+ { label: '小于', value: 'lt' },
215
+ { label: '小于等于', value: 'lte' },
216
+ { label: '有值', value: 'exists' },
217
+ { label: '为空', value: 'empty' }
218
+ ],
219
+ date: [
220
+ { label: '等于', value: 'eq' },
221
+ { label: '不等于', value: 'neq' },
222
+ { label: '晚于', value: 'gt' },
223
+ { label: '不早于', value: 'gte' },
224
+ { label: '早于', value: 'lt' },
225
+ { label: '不晚于', value: 'lte' },
226
+ { label: '有值', value: 'exists' },
227
+ { label: '为空', value: 'empty' }
228
+ ],
229
+ boolean: [
230
+ { label: '等于', value: 'eq' },
231
+ { label: '不等于', value: 'neq' }
232
+ ],
233
+ text: [
234
+ { label: '等于', value: 'eq' },
235
+ { label: '不等于', value: 'neq' },
236
+ { label: '包含', value: 'contains' },
237
+ { label: '不包含', value: 'not_contains' },
238
+ { label: '有值', value: 'exists' },
239
+ { label: '为空', value: 'empty' }
240
+ ],
241
+ 'option-single': [
242
+ { label: '等于', value: 'eq' },
243
+ { label: '不等于', value: 'neq' },
244
+ { label: '属于其中之一', value: 'in' },
245
+ { label: '不属于其中之一', value: 'not_in' },
246
+ { label: '有值', value: 'exists' },
247
+ { label: '为空', value: 'empty' }
248
+ ],
249
+ 'option-multiple': [
250
+ { label: '包含', value: 'contains' },
251
+ { label: '不包含', value: 'not_contains' },
252
+ { label: '属于其中之一', value: 'in' },
253
+ { label: '不属于其中之一', value: 'not_in' },
254
+ { label: '有值', value: 'exists' },
255
+ { label: '为空', value: 'empty' }
256
+ ],
257
+ 'tree-option': [
258
+ { label: '等于', value: 'eq' },
259
+ { label: '不等于', value: 'neq' },
260
+ { label: '包含', value: 'contains' },
261
+ { label: '不包含', value: 'not_contains' },
262
+ { label: '属于其中之一', value: 'in' },
263
+ { label: '不属于其中之一', value: 'not_in' },
264
+ { label: '有值', value: 'exists' },
265
+ { label: '为空', value: 'empty' }
266
+ ]
267
+ }
268
+
269
+ const getOperatorOptions = (row: any) => {
270
+ const meta = findFieldMeta(row.field)
271
+ return meta ? operatorOptionsByKind[meta.valueKind] : []
272
+ }
273
+
274
+ const isMultiValueOperator = (operator?: EditorOperator) => Boolean(operator && multiValueOperators.has(operator))
275
+
276
+ const getValueOptions = (row: any) => findFieldMeta(row.field)?.options ?? []
277
+
278
+ const isValueEditorVisible = (row: any, valueKind: FieldValueKind) => {
279
+ const meta = findFieldMeta(row.field)
280
+ return Boolean(meta && meta.valueKind === valueKind && row.operator && !unaryOperators.has(row.operator))
281
+ }
282
+
283
+ const getDateValueFormat = (meta?: FieldMeta) => {
284
+ const sourceValueFormat = (meta?.item as any)?.valueFormat
285
+ if (typeof sourceValueFormat === 'string' && sourceValueFormat) return sourceValueFormat
286
+
287
+ const pickerType = String((meta?.item as any)?._type || 'date')
288
+ if (['year', 'years', 'yearrange'].includes(pickerType)) return 'YYYY'
289
+ if (['month', 'months', 'monthrange'].includes(pickerType)) return 'YYYY-MM'
290
+ if (['datetime', 'datetimerange'].includes(pickerType)) return 'YYYY-MM-DD HH:mm:ss'
291
+ return 'YYYY-MM-DD'
292
+ }
293
+
294
+ const resetConditionRowValue = (row: any) => {
295
+ row.value = undefined
296
+ }
297
+
298
+ const builderItems = computed<XFormItem[]>(() => [
299
+ {
300
+ name: 'field',
301
+ label: false,
302
+ type: 'select',
303
+ placeholder: '选择字段',
304
+ options: fieldOptions.value,
305
+ style: { width: '180px' },
306
+ pipeOut(value: string, row: any) {
307
+ if (row.field !== value) {
308
+ row.operator = undefined
309
+ resetConditionRowValue(row)
310
+ }
311
+ return value
312
+ }
313
+ },
314
+ {
315
+ name: 'operator',
316
+ label: false,
317
+ type: 'select',
318
+ placeholder: '选择判断',
319
+ options: getOperatorOptions,
320
+ visible: (row: any) => Boolean(row.field),
321
+ style: { width: '150px' },
322
+ pipeOut(value: EditorOperator, row: any) {
323
+ if (row.operator !== value) resetConditionRowValue(row)
324
+ return value
325
+ }
326
+ },
327
+ {
328
+ name: 'value',
329
+ label: false,
330
+ type: 'select',
331
+ placeholder: '选择值',
332
+ options: getValueOptions,
333
+ visible: (row: any) => isValueEditorVisible(row, 'option-single') || isValueEditorVisible(row, 'option-multiple'),
334
+ attrs: (row: any) => ({
335
+ multiple: isMultiValueOperator(row.operator),
336
+ collapseTags: true,
337
+ maxCollapseTags: 10,
338
+ collapseTagsTooltip: true
339
+ }),
340
+ style: { width: '220px' }
341
+ },
342
+ {
343
+ name: 'value',
344
+ label: false,
345
+ type: 'cascader',
346
+ placeholder: '选择值',
347
+ options: getValueOptions,
348
+ visible: (row: any) => isValueEditorVisible(row, 'tree-option'),
349
+ attrs: (row: any) => ({
350
+ multiple: isMultiValueOperator(row.operator),
351
+ collapseTags: true,
352
+ maxCollapseTags: 10,
353
+ collapseTagsTooltip: true
354
+ }),
355
+ style: { width: '240px' }
356
+ },
357
+ {
358
+ name: 'value',
359
+ label: false,
360
+ type: 'input-number',
361
+ placeholder: '输入数值',
362
+ visible: (row: any) => isValueEditorVisible(row, 'number'),
363
+ style: { width: '160px' }
364
+ },
365
+ {
366
+ name: 'value',
367
+ label: false,
368
+ type: 'date-picker',
369
+ placeholder: '选择日期',
370
+ visible: (row: any) => isValueEditorVisible(row, 'date'),
371
+ attrs: (row: any) => {
372
+ const meta = findFieldMeta(row.field)
373
+ return {
374
+ type: (meta?.item as any)?._type,
375
+ valueFormat: getDateValueFormat(meta)
376
+ }
377
+ },
378
+ style: { width: '180px' }
379
+ },
380
+ {
381
+ name: 'value',
382
+ label: false,
383
+ type: 'select',
384
+ placeholder: '选择值',
385
+ options: [
386
+ { label: '是', value: true },
387
+ { label: '否', value: false }
388
+ ],
389
+ visible: (row: any) => isValueEditorVisible(row, 'boolean'),
390
+ style: { width: '140px' }
391
+ },
392
+ {
393
+ name: 'value',
394
+ label: false,
395
+ type: 'input',
396
+ placeholder: '输入内容',
397
+ visible: (row: any) => isValueEditorVisible(row, 'text'),
398
+ style: { width: '220px' }
399
+ }
400
+ ])
401
+
402
+ const createEmptyBuilderValue = (): XConditionNode => ({
403
+ id: genId('cond'),
404
+ level: 0,
405
+ type: 'group',
406
+ data: { relationType: 'and' },
407
+ children: []
408
+ })
409
+
410
+ const toValueList = (value: any) => {
411
+ if (Array.isArray(value)) return value
412
+ if (value === undefined || value === null || value === '') return []
413
+ return [value]
414
+ }
415
+
416
+ const normalizeDateValue = (value: any, field: string): any => {
417
+ const meta = findFieldMeta(field)
418
+ if (meta?.valueKind !== 'date') return value
419
+ const format = getDateValueFormat(meta)
420
+ if (Array.isArray(value)) return value.map((item) => normalizeDateValue(item, field))
421
+ if (value instanceof Date) return dayjs(value).format(format)
422
+ return value
423
+ }
424
+
425
+ const createVarExpression = (field: string) => ['var', `form.${field}`]
426
+
427
+ const buildPositiveExpression = (operator: EditorOperator, left: any[], value: any) => {
428
+ if (operator === 'eq') return ['==', left, value]
429
+ if (operator === 'neq') return ['!=', left, value]
430
+ if (operator === 'gt') return ['>', left, value]
431
+ if (operator === 'gte') return ['>=', left, value]
432
+ if (operator === 'lt') return ['<', left, value]
433
+ if (operator === 'lte') return ['<=', left, value]
434
+ if (operator === 'exists') return ['exists', left]
435
+ if (operator === 'empty') return ['empty', left]
436
+ if (operator === 'in') return ['in', left, toValueList(value)]
437
+ if (operator === 'contains') {
438
+ const values = toValueList(value)
439
+ if (values.length > 1) return ['or', ...values.map((item) => ['includes', left, item])]
440
+ return ['includes', left, values[0]]
441
+ }
442
+ return undefined
443
+ }
444
+
445
+ const isMultipleField = (field: string) => {
446
+ const meta = findFieldMeta(field)
447
+ return Boolean(meta?.multiple || meta?.valueKind === 'option-multiple')
448
+ }
449
+
450
+ const buildAnyIncludesExpression = (left: any[], values: any[]) => {
451
+ if (values.length > 1) return ['or', ...values.map((item) => ['includes', left, item])]
452
+ return ['includes', left, values[0]]
453
+ }
454
+
455
+ const buildExpressionFromCondition = (field: string, operator: EditorOperator, value: any) => {
456
+ const left = createVarExpression(field)
457
+ const normalizedValue = normalizeDateValue(value, field)
458
+ if (operator === 'in' && isMultipleField(field)) return buildAnyIncludesExpression(left, toValueList(normalizedValue))
459
+ if (operator === 'not_in' && isMultipleField(field)) {
460
+ return ['not', buildAnyIncludesExpression(left, toValueList(normalizedValue))]
461
+ }
462
+ if (operator === 'not_in') return ['not', ['in', left, toValueList(normalizedValue)]]
463
+ if (operator === 'not_contains') {
464
+ const values = toValueList(normalizedValue)
465
+ return ['not', buildAnyIncludesExpression(left, values)]
466
+ }
467
+ return buildPositiveExpression(operator, left, normalizedValue)
468
+ }
469
+
470
+ const buildExpressionFromNode = (node?: XConditionNode): any[] | undefined => {
471
+ if (!node) return undefined
472
+ if (node.type === 'group') {
473
+ const relation = node.data?.relationType === 'or' ? 'or' : 'and'
474
+ const children = (node.children || []).map((child) => buildExpressionFromNode(child)).filter(Boolean) as any[]
475
+ if (children.length === 0) return undefined
476
+ return [relation, ...children]
477
+ }
478
+ const field = node.data?.field
479
+ const operator = node.data?.operator as EditorOperator | undefined
480
+ if (!field || !operator) return undefined
481
+ if (multiValueOperators.has(operator) && toValueList(node.data?.value).length === 0) return undefined
482
+ if (!unaryOperators.has(operator) && (node.data?.value === undefined || node.data?.value === null || node.data?.value === '')) {
483
+ return undefined
484
+ }
485
+ return buildExpressionFromCondition(field, operator, node.data?.value)
486
+ }
487
+
488
+ const extractVarPath = (value: any) => {
489
+ if (Array.isArray(value) && value[0] === 'var' && typeof value[1] === 'string') return value[1] as string
490
+ return undefined
491
+ }
492
+
493
+ const stripScopePrefix = (path: string) => {
494
+ const prefixes = ['form.', 'formData.', 'row.', 'rowData.']
495
+ const matched = prefixes.find((prefix) => path.startsWith(prefix))
496
+ return matched ? path.slice(matched.length) : path
497
+ }
498
+
499
+ const createConditionNode = (level: number, fieldPath: string, operator: EditorOperator, value?: any): XConditionNode => ({
500
+ id: genId('cond'),
501
+ level,
502
+ type: 'condition',
503
+ data: {
504
+ field: stripScopePrefix(fieldPath),
505
+ operator,
506
+ value
507
+ }
508
+ })
509
+
510
+ const parseExpressionToNode = (expression: any, level = 0): XConditionNode | undefined => {
511
+ if (!Array.isArray(expression)) return undefined
512
+ const [operator, ...args] = expression
513
+ if (operator === 'and' || operator === 'or') {
514
+ const children = args.map((item) => parseExpressionToNode(item, level + 1)).filter(Boolean) as XConditionNode[]
515
+ return {
516
+ id: genId('cond'),
517
+ level,
518
+ type: 'group',
519
+ data: { relationType: operator },
520
+ children
521
+ }
522
+ }
523
+ if (operator === 'not') {
524
+ const inner = parseExpressionToNode(args[0], level)
525
+ if (!inner || inner.type !== 'condition') return undefined
526
+ if (inner.data?.operator === 'in') inner.data.operator = 'not_in'
527
+ if (inner.data?.operator === 'contains') inner.data.operator = 'not_contains'
528
+ return inner
529
+ }
530
+ if (typeof operator !== 'string') return undefined
531
+ if (operator === 'exists' || operator === 'empty') {
532
+ const fieldPath = extractVarPath(args[0])
533
+ return fieldPath ? createConditionNode(level, fieldPath, operator, undefined) : undefined
534
+ }
535
+ const fieldPath = extractVarPath(args[0])
536
+ if (!fieldPath) return undefined
537
+ if (operator === '==') return createConditionNode(level, fieldPath, 'eq', args[1])
538
+ if (operator === '!=') return createConditionNode(level, fieldPath, 'neq', args[1])
539
+ if (operator === '>') return createConditionNode(level, fieldPath, 'gt', args[1])
540
+ if (operator === '>=') return createConditionNode(level, fieldPath, 'gte', args[1])
541
+ if (operator === '<') return createConditionNode(level, fieldPath, 'lt', args[1])
542
+ if (operator === '<=') return createConditionNode(level, fieldPath, 'lte', args[1])
543
+ if (operator === 'in') return createConditionNode(level, fieldPath, 'in', args[1])
544
+ if (operator === 'includes') return createConditionNode(level, fieldPath, 'contains', args[1])
545
+ return undefined
546
+ }
547
+
548
+ const buildBuilderValue = (expression: any) => {
549
+ const parsed = parseExpressionToNode(expression, 0)
550
+ return parsed?.type === 'group' ? parsed : createEmptyBuilderValue()
551
+ }
552
+
553
+ const builderConditionCount = computed(() => {
554
+ const countExpression = (expression: any): number => {
555
+ if (!Array.isArray(expression)) return 0
556
+ const [operator, ...args] = expression
557
+ if (operator === 'and' || operator === 'or') return args.reduce((sum, item) => sum + countExpression(item), 0)
558
+ if (operator === 'not') return countExpression(args[0])
559
+ return 1
560
+ }
561
+ return Array.isArray(props.modelValue) ? countExpression(props.modelValue) : 0
562
+ })
563
+
564
+ const ensureConditionMode = () => {
565
+ if (!Array.isArray(props.modelValue)) emit('update:modelValue', [])
566
+ }
567
+
568
+ const handleModeChange = (val: any) => {
569
+ if (val === true || val === false) {
570
+ emit('update:modelValue', val)
571
+ return
572
+ }
573
+ ensureConditionMode()
574
+ }
575
+
576
+ const handleOpen = () => {
577
+ ensureConditionMode()
578
+ builderValue.value = buildBuilderValue(props.modelValue)
579
+ dialogVisible.value = true
580
+ }
581
+
582
+ const handleSave = () => {
583
+ const expression = buildExpressionFromNode(builderValue.value)
584
+ emit('update:modelValue', expression ?? [])
585
+ dialogVisible.value = false
586
+ }
587
+
588
+ watch(
589
+ () => props.modelValue,
590
+ (val) => {
591
+ if (dialogVisible.value && Array.isArray(val)) {
592
+ builderValue.value = buildBuilderValue(val)
593
+ }
594
+ }
595
+ )
596
+
597
+ watch(
598
+ () => props.autoOpenKey,
599
+ (key, oldKey) => {
600
+ if (key === undefined || key === oldKey) return
601
+ handleOpen()
602
+ }
603
+ )
604
+
605
+ defineExpose({
606
+ open: handleOpen
607
+ })
608
+ </script>
609
+
610
+ <style scoped>
611
+ .condition-editor {
612
+ width: 100%;
613
+ }
614
+
615
+ .condition-actions {
616
+ margin-top: 8px;
617
+ }
618
+
619
+ .condition-preview {
620
+ margin-top: 4px;
621
+ font-size: 12px;
622
+ color: #606266;
623
+ background: #f8f9fa;
624
+ padding: 4px 8px;
625
+ border-radius: 4px;
626
+ word-break: break-all;
627
+ }
628
+
629
+ .condition-dialog {
630
+ min-height: 220px;
631
+ padding: 16px;
632
+ }
633
+
634
+ .condition-builder {
635
+ min-height: 200px;
636
+ }
637
+
638
+ .w-full {
639
+ width: 100%;
640
+ }
641
+ </style>