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,34 @@
1
+ import { describe, expect, it } from 'vitest'
2
+ import { fieldRowsToRecord, recordToFieldRows } from '../record-field'
3
+
4
+ describe('record field helpers', () => {
5
+ it('converts records to key-value rows', () => {
6
+ expect(recordToFieldRows({ name: 'Alice', age: 18 })).toEqual([
7
+ { key: 'name', value: 'Alice' },
8
+ { key: 'age', value: 18 }
9
+ ])
10
+ })
11
+
12
+ it('returns empty rows for non-record values', () => {
13
+ expect(recordToFieldRows(undefined)).toEqual([])
14
+ expect(recordToFieldRows([])).toEqual([])
15
+ })
16
+
17
+ it('converts key-value rows to records', () => {
18
+ expect(
19
+ fieldRowsToRecord([
20
+ { key: ' name ', value: 'Alice' },
21
+ { key: '', value: 'ignored' },
22
+ { key: 'age', value: 18 }
23
+ ])
24
+ ).toEqual({
25
+ name: 'Alice',
26
+ age: 18
27
+ })
28
+ })
29
+
30
+ it('returns undefined for empty records', () => {
31
+ expect(fieldRowsToRecord([])).toBeUndefined()
32
+ expect(fieldRowsToRecord([{ key: '', value: 'ignored' }])).toBeUndefined()
33
+ })
34
+ })
@@ -0,0 +1,67 @@
1
+ import type { ComponentConfig, ComponentReplaceGroup } from '../component-configs/types'
2
+ import { EDITOR_ID_FIELD, cloneSchemaValue, stripRuntimeMetaDeep } from './editor-schema'
3
+
4
+ const COMMON_REPLACE_KEYS = ['name', 'label', 'labelPosition', 'span', 'offset', 'offsetRight', 'layoutCfg', 'visible', 'disabled', 'static']
5
+
6
+ const REPLACE_GROUP_KEYS: Record<ComponentReplaceGroup, string[]> = {
7
+ placeholder: ['placeholder', 'clearable', 'startPlaceholder', 'endPlaceholder'],
8
+ lengthLimit: ['maxlength', 'showWordLimit'],
9
+ options: ['options', 'optionSource', 'props'],
10
+ numeric: ['min', 'max', 'step', 'precision', 'stepStrictly'],
11
+ date: ['_type', 'format', 'valueFormat', 'rangeSeparator', 'rangeSeperator', 'editable', 'unlinkPanels'],
12
+ upload: ['mode', 'multiple', 'tips', 'limit', 'limitSize', 'accept', 'joinValues', 'joinValuesField', 'valueField', 'idMode'],
13
+ icon: ['iconSources', 'clearable'],
14
+ collection: ['idField', 'defaultValue', 'minLength', 'maxLength']
15
+ }
16
+
17
+ const hasOwn = (value: Record<string, any>, key: string) => Object.prototype.hasOwnProperty.call(value, key)
18
+
19
+ const copyKeys = (target: Record<string, any>, source: Record<string, any>, keys: string[]) => {
20
+ keys.forEach((key) => {
21
+ if (hasOwn(source, key)) {
22
+ target[key] = cloneSchemaValue(source[key])
23
+ }
24
+ })
25
+ }
26
+
27
+ const getSharedGroups = (sourceConfig: ComponentConfig, targetConfig: ComponentConfig) => {
28
+ const sourceGroups = new Set(sourceConfig.replace?.groups || [])
29
+ return (targetConfig.replace?.groups || []).filter((group) => sourceGroups.has(group))
30
+ }
31
+
32
+ export const isReplaceableComponentConfig = (config: ComponentConfig | undefined) => {
33
+ return Boolean(config && config.editorKind !== 'container')
34
+ }
35
+
36
+ export const createReplacementNode = (params: { source: Record<string, any>; sourceConfig: ComponentConfig; targetConfig: ComponentConfig }) => {
37
+ const { source, sourceConfig, targetConfig } = params
38
+ const next = cloneSchemaValue(targetConfig.scaffold) as Record<string, any>
39
+
40
+ copyKeys(next, source, COMMON_REPLACE_KEYS)
41
+ getSharedGroups(sourceConfig, targetConfig).forEach((group) => {
42
+ copyKeys(next, source, REPLACE_GROUP_KEYS[group])
43
+ })
44
+ copyKeys(next, source, sourceConfig.replace?.keep || [])
45
+ copyKeys(next, source, targetConfig.replace?.keep || [])
46
+
47
+ const migrated = targetConfig.replace?.migrate?.({
48
+ source,
49
+ targetScaffold: cloneSchemaValue(targetConfig.scaffold),
50
+ sourceConfig,
51
+ targetConfig
52
+ })
53
+ if (migrated && typeof migrated === 'object') {
54
+ Object.assign(next, migrated)
55
+ }
56
+
57
+ ;[...(sourceConfig.replace?.drop || []), ...(targetConfig.replace?.drop || [])].forEach((key) => {
58
+ delete next[key]
59
+ })
60
+
61
+ if (hasOwn(source, EDITOR_ID_FIELD)) {
62
+ next[EDITOR_ID_FIELD] = source[EDITOR_ID_FIELD]
63
+ }
64
+
65
+ delete next.id
66
+ return stripRuntimeMetaDeep(next)
67
+ }
@@ -0,0 +1,374 @@
1
+ export const EDITOR_ID_FIELD = '__editorId'
2
+
3
+ export type EditorId = string | number
4
+ export type EditorPath = Array<string | number>
5
+ export type EditorSchemaNode = Record<string, any>
6
+
7
+ export interface EditorTreeResult {
8
+ items: EditorSchemaNode[]
9
+ changed: boolean
10
+ }
11
+
12
+ export const EDITOR_CHILD_KEYS = ['body', 'items']
13
+
14
+ const getEditorChildKeys = (item: EditorSchemaNode): string[] => {
15
+ return EDITOR_CHILD_KEYS.filter((key) => Array.isArray(item?.[key]))
16
+ }
17
+
18
+ export const getEditorId = (item: any): EditorId | undefined => {
19
+ return item?.[EDITOR_ID_FIELD] ?? item?._id
20
+ }
21
+
22
+ export const cloneSchemaValue = <T>(value: T): T => {
23
+ return JSON.parse(JSON.stringify(value))
24
+ }
25
+
26
+ export const stripRuntimeMetaDeep = <T>(value: T): T => {
27
+ if (Array.isArray(value)) {
28
+ return value.map((item) => stripRuntimeMetaDeep(item)) as T
29
+ }
30
+ if (!value || typeof value !== 'object') return value
31
+
32
+ const { _id, ...rest } = value as Record<string, any>
33
+ const next: Record<string, any> = {}
34
+ Object.entries(rest).forEach(([key, itemValue]) => {
35
+ next[key] = stripRuntimeMetaDeep(itemValue)
36
+ })
37
+ return next as T
38
+ }
39
+
40
+ export const stripEditorMetaDeep = <T>(value: T): T => {
41
+ if (Array.isArray(value)) {
42
+ return value.map((item) => stripEditorMetaDeep(item)) as T
43
+ }
44
+ if (!value || typeof value !== 'object') return value
45
+
46
+ const { [EDITOR_ID_FIELD]: _editorId, _id, ...rest } = value as Record<string, any>
47
+ const next: Record<string, any> = {}
48
+ Object.entries(rest).forEach(([key, itemValue]) => {
49
+ next[key] = stripEditorMetaDeep(itemValue)
50
+ })
51
+ return next as T
52
+ }
53
+
54
+ export const ensureEditorId = (item: any, createEditorId: () => EditorId) => {
55
+ if (!item || typeof item !== 'object') return item
56
+ if (item[EDITOR_ID_FIELD]) return item
57
+ return {
58
+ ...item,
59
+ [EDITOR_ID_FIELD]: createEditorId()
60
+ }
61
+ }
62
+
63
+ export const normalizeEditorIds = (items: EditorSchemaNode[] = [], createEditorId: () => EditorId): EditorTreeResult => {
64
+ let changed = false
65
+ const nextItems = items.map((item) => {
66
+ let nextItem = ensureEditorId(item, createEditorId)
67
+ if (nextItem !== item) changed = true
68
+
69
+ getEditorChildKeys(nextItem).forEach((childKey) => {
70
+ const normalizedBody = normalizeEditorIds(nextItem[childKey], createEditorId)
71
+ if (normalizedBody.changed) {
72
+ nextItem = {
73
+ ...nextItem,
74
+ [childKey]: normalizedBody.items
75
+ }
76
+ changed = true
77
+ }
78
+ })
79
+
80
+ return nextItem
81
+ })
82
+
83
+ return { items: nextItems, changed }
84
+ }
85
+
86
+ export const updateByEditorId = (
87
+ items: EditorSchemaNode[] = [],
88
+ editorId: EditorId | undefined,
89
+ nextNode: EditorSchemaNode
90
+ ): EditorTreeResult => {
91
+ if (editorId === undefined) return { items, changed: false }
92
+
93
+ let changed = false
94
+ const nextItems = items.map((item) => {
95
+ if (getEditorId(item) === editorId) {
96
+ changed = true
97
+ return nextNode
98
+ }
99
+
100
+ for (const childKey of getEditorChildKeys(item)) {
101
+ const updatedBody = updateByEditorId(item[childKey], editorId, nextNode)
102
+ if (updatedBody.changed) {
103
+ changed = true
104
+ return {
105
+ ...item,
106
+ [childKey]: updatedBody.items
107
+ }
108
+ }
109
+ }
110
+
111
+ return item
112
+ })
113
+
114
+ return { items: nextItems, changed }
115
+ }
116
+
117
+ export const findByEditorId = (items: EditorSchemaNode[] = [], editorId: EditorId | undefined): EditorSchemaNode | undefined => {
118
+ if (editorId === undefined) return undefined
119
+
120
+ for (const item of items) {
121
+ if (getEditorId(item) === editorId) return item
122
+
123
+ for (const childKey of getEditorChildKeys(item)) {
124
+ const result = findByEditorId(item[childKey], editorId)
125
+ if (result) return result
126
+ }
127
+ }
128
+ }
129
+
130
+ export const preserveUneditedChildCollections = (
131
+ previousNode: EditorSchemaNode | undefined,
132
+ nextNode: EditorSchemaNode,
133
+ editedKeys: Set<string>
134
+ ) => {
135
+ if (!previousNode) return nextNode
136
+
137
+ let result = nextNode
138
+ getEditorChildKeys(previousNode).forEach((childKey) => {
139
+ if (editedKeys.has(childKey)) return
140
+ result = {
141
+ ...result,
142
+ [childKey]: previousNode[childKey]
143
+ }
144
+ })
145
+ return result
146
+ }
147
+
148
+ export const removeByEditorId = (items: EditorSchemaNode[] = [], editorId: EditorId | undefined): EditorTreeResult => {
149
+ if (editorId === undefined) return { items, changed: false }
150
+
151
+ let changed = false
152
+ const nextItems: EditorSchemaNode[] = []
153
+ items.forEach((item) => {
154
+ if (getEditorId(item) === editorId) {
155
+ changed = true
156
+ return
157
+ }
158
+
159
+ for (const childKey of getEditorChildKeys(item)) {
160
+ const updatedBody = removeByEditorId(item[childKey], editorId)
161
+ if (updatedBody.changed) {
162
+ changed = true
163
+ nextItems.push({
164
+ ...item,
165
+ [childKey]: updatedBody.items
166
+ })
167
+ return
168
+ }
169
+ }
170
+
171
+ nextItems.push(item)
172
+ })
173
+
174
+ return { items: changed ? nextItems : items, changed }
175
+ }
176
+
177
+ export const insertAfterEditorId = (
178
+ items: EditorSchemaNode[] = [],
179
+ editorId: EditorId | undefined,
180
+ nextNode: EditorSchemaNode
181
+ ): EditorTreeResult => {
182
+ if (editorId === undefined) return { items, changed: false }
183
+
184
+ let changed = false
185
+ const nextItems: EditorSchemaNode[] = []
186
+ items.forEach((item) => {
187
+ nextItems.push(item)
188
+ if (getEditorId(item) === editorId) {
189
+ nextItems.push(nextNode)
190
+ changed = true
191
+ return
192
+ }
193
+
194
+ for (const childKey of getEditorChildKeys(item)) {
195
+ const updatedBody = insertAfterEditorId(item[childKey], editorId, nextNode)
196
+ if (updatedBody.changed) {
197
+ nextItems[nextItems.length - 1] = {
198
+ ...item,
199
+ [childKey]: updatedBody.items
200
+ }
201
+ changed = true
202
+ break
203
+ }
204
+ }
205
+ })
206
+
207
+ return { items: changed ? nextItems : items, changed }
208
+ }
209
+
210
+ export const assignNewEditorIdsDeep = (
211
+ item: EditorSchemaNode,
212
+ createEditorId: () => EditorId
213
+ ): EditorSchemaNode => {
214
+ const nextItem = stripRuntimeMetaDeep(cloneSchemaValue(item)) as EditorSchemaNode
215
+ nextItem[EDITOR_ID_FIELD] = createEditorId()
216
+
217
+ getEditorChildKeys(nextItem).forEach((childKey) => {
218
+ nextItem[childKey] = nextItem[childKey].map((child) => assignNewEditorIdsDeep(child, createEditorId))
219
+ })
220
+
221
+ return nextItem
222
+ }
223
+
224
+ export const moveItem = (items: EditorSchemaNode[] = [], oldIndex: number, newIndex: number): EditorTreeResult => {
225
+ if (oldIndex === newIndex || oldIndex < 0 || newIndex < 0 || oldIndex >= items.length || newIndex >= items.length) {
226
+ return { items, changed: false }
227
+ }
228
+
229
+ const nextItems = [...items]
230
+ const [movedItem] = nextItems.splice(oldIndex, 1)
231
+ nextItems.splice(newIndex, 0, movedItem)
232
+ return { items: nextItems, changed: true }
233
+ }
234
+
235
+ export const getArrayByEditorPath = (items: EditorSchemaNode[] = [], path: EditorPath = []): EditorSchemaNode[] | undefined => {
236
+ if (path.length === 0) return items
237
+
238
+ let current: any = items
239
+ for (const segment of path) {
240
+ if (Array.isArray(current) && typeof segment === 'number') {
241
+ current = current[segment]
242
+ continue
243
+ }
244
+ if (current && typeof current === 'object' && typeof segment === 'string') {
245
+ current = current[segment]
246
+ continue
247
+ }
248
+ return undefined
249
+ }
250
+
251
+ return Array.isArray(current) ? current : undefined
252
+ }
253
+
254
+ const updateArrayByEditorPath = (
255
+ items: EditorSchemaNode[],
256
+ path: EditorPath,
257
+ updater: (target: EditorSchemaNode[]) => EditorSchemaNode[] | undefined
258
+ ): EditorTreeResult => {
259
+ if (path.length === 0) {
260
+ const nextItems = updater(items)
261
+ return nextItems ? { items: nextItems, changed: true } : { items, changed: false }
262
+ }
263
+
264
+ const [head, nextSegment, ...rest] = path
265
+ if (typeof head !== 'number' || typeof nextSegment !== 'string') {
266
+ return { items, changed: false }
267
+ }
268
+
269
+ const item = items[head]
270
+ if (!item) return { items, changed: false }
271
+
272
+ const childValue = item[nextSegment]
273
+ if (!Array.isArray(childValue)) return { items, changed: false }
274
+
275
+ const updatedChild = updateArrayByEditorPath(childValue, rest, updater)
276
+ if (!updatedChild.changed) return { items, changed: false }
277
+
278
+ const nextItems = [...items]
279
+ nextItems[head] = {
280
+ ...item,
281
+ [nextSegment]: updatedChild.items
282
+ }
283
+ return { items: nextItems, changed: true }
284
+ }
285
+
286
+ export const insertAtEditorPath = (
287
+ items: EditorSchemaNode[] = [],
288
+ containerPath: EditorPath = [],
289
+ index: number,
290
+ nextNode: EditorSchemaNode
291
+ ): EditorTreeResult => {
292
+ return updateArrayByEditorPath(items, containerPath, (target) => {
293
+ const nextItems = [...target]
294
+ const safeIndex = Math.max(0, Math.min(index, nextItems.length))
295
+ nextItems.splice(safeIndex, 0, nextNode)
296
+ return nextItems
297
+ })
298
+ }
299
+
300
+ export const moveWithinEditorPath = (
301
+ items: EditorSchemaNode[] = [],
302
+ containerPath: EditorPath = [],
303
+ oldIndex: number,
304
+ newIndex: number
305
+ ): EditorTreeResult => {
306
+ return updateArrayByEditorPath(items, containerPath, (target) => {
307
+ const moved = moveItem(target, oldIndex, newIndex)
308
+ return moved.changed ? moved.items : undefined
309
+ })
310
+ }
311
+
312
+ export const moveAcrossEditorPaths = (
313
+ items: EditorSchemaNode[] = [],
314
+ fromContainerPath: EditorPath = [],
315
+ fromIndex: number,
316
+ toContainerPath: EditorPath = [],
317
+ toIndex: number
318
+ ): EditorTreeResult => {
319
+ const source = getArrayByEditorPath(items, fromContainerPath)
320
+ const movingItem = source?.[fromIndex]
321
+ if (!movingItem) return { items, changed: false }
322
+ if (isEditorPathPrefix([...fromContainerPath, fromIndex], toContainerPath)) {
323
+ return { items, changed: false }
324
+ }
325
+
326
+ let changed = false
327
+ const removed = updateArrayByEditorPath(items, fromContainerPath, (target) => {
328
+ if (fromIndex < 0 || fromIndex >= target.length) return undefined
329
+ const nextItems = [...target]
330
+ nextItems.splice(fromIndex, 1)
331
+ changed = true
332
+ return nextItems
333
+ })
334
+ if (!removed.changed) return { items, changed: false }
335
+
336
+ const sameContainer = JSON.stringify(fromContainerPath) === JSON.stringify(toContainerPath)
337
+ const safeToIndex = sameContainer && toIndex > fromIndex ? toIndex - 1 : toIndex
338
+ const adjustedToContainerPath = adjustContainerPathAfterRemoval(toContainerPath, fromContainerPath, fromIndex)
339
+ const inserted = insertAtEditorPath(removed.items, adjustedToContainerPath, safeToIndex, movingItem)
340
+ if (!inserted.changed) return { items, changed: false }
341
+ return { items: inserted.items, changed: changed && inserted.changed }
342
+ }
343
+
344
+ const adjustContainerPathAfterRemoval = (targetPath: EditorPath, sourceContainerPath: EditorPath, sourceIndex: number): EditorPath => {
345
+ if (!isEditorPathPrefix(sourceContainerPath, targetPath)) return targetPath
346
+ const shiftedIndexPosition = sourceContainerPath.length
347
+ const shiftedIndex = targetPath[shiftedIndexPosition]
348
+ if (typeof shiftedIndex !== 'number' || shiftedIndex <= sourceIndex) return targetPath
349
+
350
+ const nextPath = [...targetPath]
351
+ nextPath[shiftedIndexPosition] = shiftedIndex - 1
352
+ return nextPath
353
+ }
354
+
355
+ const isEditorPathPrefix = (prefix: EditorPath, path: EditorPath): boolean => {
356
+ if (prefix.length > path.length) return false
357
+ return prefix.every((segment, index) => segment === path[index])
358
+ }
359
+
360
+ export const getByEditorPath = (items: EditorSchemaNode[] = [], path: EditorPath = []): EditorSchemaNode | undefined => {
361
+ let current: any = items
362
+ for (const segment of path) {
363
+ if (Array.isArray(current) && typeof segment === 'number') {
364
+ current = current[segment]
365
+ continue
366
+ }
367
+ if (current && typeof current === 'object' && typeof segment === 'string') {
368
+ current = current[segment]
369
+ continue
370
+ }
371
+ return undefined
372
+ }
373
+ return current && !Array.isArray(current) && typeof current === 'object' ? current : undefined
374
+ }
@@ -0,0 +1,40 @@
1
+ export const DEFAULT_FORM_ITEM_CUSTOM_WIDTH = 240
2
+
3
+ export const isFullFormItemControlWidth = (value: unknown) => {
4
+ return value === undefined || value === null || value === '' || value === '100%'
5
+ }
6
+
7
+ export const normalizeCustomFormItemControlWidth = (value: unknown, fallback = DEFAULT_FORM_ITEM_CUSTOM_WIDTH) => {
8
+ const numericValue = typeof value === 'string' ? Number.parseFloat(value) : Number(value)
9
+ if (!Number.isFinite(numericValue) || numericValue <= 0) return fallback
10
+ return Math.round(numericValue)
11
+ }
12
+
13
+ export const formatCustomFormItemControlWidth = (value: unknown, fallback = DEFAULT_FORM_ITEM_CUSTOM_WIDTH) => {
14
+ return `${normalizeCustomFormItemControlWidth(value, fallback)}px`
15
+ }
16
+
17
+ const cleanRecord = (value: Record<string, any> | undefined) => {
18
+ if (!value || typeof value !== 'object') return undefined
19
+ const next = Object.entries(value).reduce<Record<string, any>>((result, [key, itemValue]) => {
20
+ if (itemValue !== undefined && itemValue !== null && itemValue !== '') {
21
+ result[key] = itemValue
22
+ }
23
+ return result
24
+ }, {})
25
+ return Object.keys(next).length > 0 ? next : undefined
26
+ }
27
+
28
+ export const setFormItemControlWidth = (item: Record<string, any>, width: unknown) => {
29
+ if (isFullFormItemControlWidth(width)) {
30
+ const style = { ...(item.style || {}) }
31
+ delete style.width
32
+ item.style = cleanRecord(style)
33
+ return
34
+ }
35
+
36
+ item.style = {
37
+ ...(item.style || {}),
38
+ width: formatCustomFormItemControlWidth(width)
39
+ }
40
+ }
@@ -0,0 +1,81 @@
1
+ import type { OptionItem } from 'xkit-ui'
2
+
3
+ export interface EditorDictRecord {
4
+ code: string
5
+ label: string
6
+ options: OptionItem[]
7
+ }
8
+
9
+ const STORAGE_KEY = 'xkit-editor:dict-center'
10
+
11
+ const defaultDicts: EditorDictRecord[] = [
12
+ {
13
+ code: 'GENDER',
14
+ label: '性别',
15
+ options: [
16
+ { label: '男', value: '1' },
17
+ { label: '女', value: '0' }
18
+ ]
19
+ },
20
+ {
21
+ code: 'SYS_STATUS',
22
+ label: '系统状态',
23
+ options: [
24
+ { label: '启用', value: '1' },
25
+ { label: '停用', value: '0' }
26
+ ]
27
+ },
28
+ {
29
+ code: 'GRADE',
30
+ label: '年级',
31
+ options: [
32
+ { label: '一年级', value: 'grade-1' },
33
+ { label: '二年级', value: 'grade-2' },
34
+ { label: '三年级', value: 'grade-3' }
35
+ ]
36
+ }
37
+ ]
38
+
39
+ const canUseStorage = () => typeof window !== 'undefined' && Boolean(window.localStorage)
40
+
41
+ const normalizeDicts = (value: unknown): EditorDictRecord[] => {
42
+ if (!Array.isArray(value)) return []
43
+ return value
44
+ .filter((item) => item && typeof item === 'object')
45
+ .map((item: any) => ({
46
+ code: String(item.code || '').trim(),
47
+ label: String(item.label || item.code || '').trim(),
48
+ options: Array.isArray(item.options) ? item.options : []
49
+ }))
50
+ .filter((item) => item.code)
51
+ }
52
+
53
+ export const ensureEditorLocalDicts = () => {
54
+ if (!canUseStorage()) return defaultDicts
55
+ const raw = window.localStorage.getItem(STORAGE_KEY)
56
+ if (raw) {
57
+ try {
58
+ const parsed = normalizeDicts(JSON.parse(raw))
59
+ if (parsed.length > 0) return parsed
60
+ } catch {
61
+ // ignore malformed cache and reset below
62
+ }
63
+ }
64
+ window.localStorage.setItem(STORAGE_KEY, JSON.stringify(defaultDicts))
65
+ return defaultDicts
66
+ }
67
+
68
+ export const listEditorLocalDicts = () => ensureEditorLocalDicts()
69
+
70
+ export const saveEditorLocalDicts = (dicts: EditorDictRecord[]) => {
71
+ const next = normalizeDicts(dicts)
72
+ if (canUseStorage()) {
73
+ window.localStorage.setItem(STORAGE_KEY, JSON.stringify(next))
74
+ }
75
+ return next
76
+ }
77
+
78
+ export const loadEditorLocalDictOptions = async (code: string) => {
79
+ const dict = ensureEditorLocalDicts().find((item) => item.code === code)
80
+ return dict?.options || []
81
+ }
@@ -0,0 +1,30 @@
1
+ export interface RecordFieldRow {
2
+ key?: string
3
+ value?: any
4
+ }
5
+
6
+ const isPlainRecord = (value: unknown): value is Record<string, any> => {
7
+ return Boolean(value) && typeof value === 'object' && !Array.isArray(value)
8
+ }
9
+
10
+ export const recordToFieldRows = (value: unknown): RecordFieldRow[] => {
11
+ if (!isPlainRecord(value)) return []
12
+ return Object.entries(value).map(([key, itemValue]) => ({
13
+ key,
14
+ value: itemValue
15
+ }))
16
+ }
17
+
18
+ export const fieldRowsToRecord = (rows: unknown): Record<string, any> | undefined => {
19
+ if (!Array.isArray(rows)) return undefined
20
+
21
+ const record: Record<string, any> = {}
22
+ rows.forEach((row) => {
23
+ if (!isPlainRecord(row)) return
24
+ const key = typeof row.key === 'string' ? row.key.trim() : ''
25
+ if (!key) return
26
+ record[key] = row.value
27
+ })
28
+
29
+ return Object.keys(record).length > 0 ? record : undefined
30
+ }