@veltra/desktop 1.1.15 → 1.1.18

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 (284) hide show
  1. package/dist/components/action/action-group.vue.d.ts +2 -2
  2. package/dist/components/action/action-group.vue_vue_type_script_setup_true_lang.js.map +1 -1
  3. package/dist/components/action/action.js.map +1 -1
  4. package/dist/components/action/action.vue.d.ts +2 -2
  5. package/dist/components/action/style2.css +0 -4
  6. package/dist/components/auto-complete/auto-complete.js.map +1 -1
  7. package/dist/components/auto-complete/style.js +1 -1
  8. package/dist/components/auto-complete/use-keyboard.js.map +1 -1
  9. package/dist/components/auto-complete/use-suggestions.js.map +1 -1
  10. package/dist/components/badge/badge.js +1 -1
  11. package/dist/components/badge/badge.js.map +1 -1
  12. package/dist/components/batch-edit/batch-edit-form.js.map +1 -1
  13. package/dist/components/batch-edit/batch-edit-list.js.map +1 -1
  14. package/dist/components/batch-edit/batch-edit.js.map +1 -1
  15. package/dist/components/batch-edit/helper.js.map +1 -1
  16. package/dist/components/batch-edit/style.js +1 -1
  17. package/dist/components/batch-edit/use-edit.js.map +1 -1
  18. package/dist/components/breadcrumb/breadcrumb.js.map +1 -1
  19. package/dist/components/button/button-group.js.map +1 -1
  20. package/dist/components/button/button.js.map +1 -1
  21. package/dist/components/calendar/calendar.js.map +1 -1
  22. package/dist/components/calendar/utils.js.map +1 -1
  23. package/dist/components/card/card-action.js.map +1 -1
  24. package/dist/components/card/card-content.js.map +1 -1
  25. package/dist/components/card/card-cover.js.map +1 -1
  26. package/dist/components/card/card-header.js.map +1 -1
  27. package/dist/components/card/card.js.map +1 -1
  28. package/dist/components/cascade/cascade-panel-item.js.map +1 -1
  29. package/dist/components/cascade/cascade.js.map +1 -1
  30. package/dist/components/cascade/cascade.vue.d.ts +6 -6
  31. package/dist/components/cascade/node.js.map +1 -1
  32. package/dist/components/cascade/use-check.js.map +1 -1
  33. package/dist/components/cascade/use-data-map.js.map +1 -1
  34. package/dist/components/cascade/use-select.js +1 -1
  35. package/dist/components/cascade/use-select.js.map +1 -1
  36. package/dist/components/check-tag/check-tag.js.map +1 -1
  37. package/dist/components/checkbox/checkbox-button.js.map +1 -1
  38. package/dist/components/checkbox/checkbox-button.vue.d.ts +1 -1
  39. package/dist/components/checkbox/checkbox.js.map +1 -1
  40. package/dist/components/checkbox/style.js +1 -1
  41. package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
  42. package/dist/components/code-editor/code-editor.js.map +1 -1
  43. package/dist/components/collapse/collapse-item.js.map +1 -1
  44. package/dist/components/collapse/collapse.js.map +1 -1
  45. package/dist/components/condition-editor/components/condition-group.js +138 -103
  46. package/dist/components/condition-editor/components/condition-group.js.map +1 -1
  47. package/dist/components/condition-editor/components/condition-row.js +146 -95
  48. package/dist/components/condition-editor/components/condition-row.js.map +1 -1
  49. package/dist/components/condition-editor/condition-editor.js +18 -40
  50. package/dist/components/condition-editor/condition-editor.js.map +1 -1
  51. package/dist/components/condition-editor/condition-editor.vue.d.ts +0 -2
  52. package/dist/components/condition-editor/core/evaluator.d.ts +22 -0
  53. package/dist/components/condition-editor/core/evaluator.js +111 -50
  54. package/dist/components/condition-editor/core/evaluator.js.map +1 -1
  55. package/dist/components/condition-editor/core/operators.js.map +1 -1
  56. package/dist/components/condition-editor/index.d.ts +2 -1
  57. package/dist/components/condition-editor/style2.css +159 -82
  58. package/dist/components/context-menu/api.js.map +1 -1
  59. package/dist/components/context-menu/context-menu-item.js.map +1 -1
  60. package/dist/components/context-menu/context-menu.js.map +1 -1
  61. package/dist/components/context-menu/style.js +1 -1
  62. package/dist/components/date-panel/date-panel.js.map +1 -1
  63. package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
  64. package/dist/components/date-panel/headers/day.js.map +1 -1
  65. package/dist/components/date-panel/headers/month.js.map +1 -1
  66. package/dist/components/date-panel/headers/year.js.map +1 -1
  67. package/dist/components/date-panel/panels/day.js.map +1 -1
  68. package/dist/components/date-panel/panels/month.js.map +1 -1
  69. package/dist/components/date-panel/panels/year.js.map +1 -1
  70. package/dist/components/date-panel/use-date-select.js.map +1 -1
  71. package/dist/components/date-panel/use-panel-date.js.map +1 -1
  72. package/dist/components/date-panel/use-panel.js.map +1 -1
  73. package/dist/components/date-picker/date-picker.js.map +1 -1
  74. package/dist/components/date-picker/date-picker.vue.d.ts +1 -1
  75. package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
  76. package/dist/components/date-range-picker/date-range-picker.vue.d.ts +1 -1
  77. package/dist/components/dialog/dialog.js.map +1 -1
  78. package/dist/components/dialog/style.js +2 -2
  79. package/dist/components/dialog/use-maximum.js.map +1 -1
  80. package/dist/components/drawer/drawer.js.map +1 -1
  81. package/dist/components/drawer/style.js +1 -1
  82. package/dist/components/dropdown/dropdown.js +1 -0
  83. package/dist/components/dropdown/dropdown.js.map +1 -1
  84. package/dist/components/dropdown/style.js +1 -1
  85. package/dist/components/empty/empty.js.map +1 -1
  86. package/dist/components/expression-editor/components/path-preview.js.map +1 -1
  87. package/dist/components/expression-editor/components/variable-picker.js.map +1 -1
  88. package/dist/components/expression-editor/core/chip.js.map +1 -1
  89. package/dist/components/expression-editor/core/editor.js.map +1 -1
  90. package/dist/components/expression-editor/core/mention.js.map +1 -1
  91. package/dist/components/expression-editor/core/model.js.map +1 -1
  92. package/dist/components/expression-editor/di.js.map +1 -1
  93. package/dist/components/expression-editor/expression-editor.js.map +1 -1
  94. package/dist/components/file-picker/file-picker.js.map +1 -1
  95. package/dist/components/file-picker/helper.js.map +1 -1
  96. package/dist/components/file-viewer/file-viewer.js.map +1 -1
  97. package/dist/components/file-viewer/helper.js.map +1 -1
  98. package/dist/components/file-viewer/previewers/docx-previewer.js.map +1 -1
  99. package/dist/components/file-viewer/previewers/image-previewer.js.map +1 -1
  100. package/dist/components/file-viewer/previewers/pdf-previewer.js.map +1 -1
  101. package/dist/components/file-viewer/previewers/pdf-viewport-scroll.js.map +1 -1
  102. package/dist/components/file-viewer/previewers/pdf-zoom-bridge.js.map +1 -1
  103. package/dist/components/file-viewer/previewers/sheet-previewer.js.map +1 -1
  104. package/dist/components/file-viewer/previewers/text-previewer.js.map +1 -1
  105. package/dist/components/file-viewer/previewers/video-previewer.js.map +1 -1
  106. package/dist/components/float-button/float-button.js.map +1 -1
  107. package/dist/components/form/dynamic-form-model.js.map +1 -1
  108. package/dist/components/form/form-model.js.map +1 -1
  109. package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/components/form/helper.js.map +1 -1
  111. package/dist/components/form/use-node-interceptor.js.map +1 -1
  112. package/dist/components/form-item/form-item.js.map +1 -1
  113. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +2 -1
  114. package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
  115. package/dist/components/gantt-chart/gantt-chart.js.map +1 -1
  116. package/dist/components/grid/breakpoint.js.map +1 -1
  117. package/dist/components/grid/grid-item.js.map +1 -1
  118. package/dist/components/grid/grid.js.map +1 -1
  119. package/dist/components/grid/use-responsive.js.map +1 -1
  120. package/dist/components/grid-input/grid-input.js.map +1 -1
  121. package/dist/components/group-input/group-input.js.map +1 -1
  122. package/dist/components/group-input/use-group-items.js.map +1 -1
  123. package/dist/components/icon/icon.js.map +1 -1
  124. package/dist/components/index.d.ts +1 -0
  125. package/dist/components/index.js +4 -0
  126. package/dist/components/input/input.vue.d.ts +2 -2
  127. package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
  128. package/dist/components/input/style.js +1 -1
  129. package/dist/components/kbd/kbd.js.map +1 -1
  130. package/dist/components/layout/layout-resizer.js.map +1 -1
  131. package/dist/components/layout/layout.js.map +1 -1
  132. package/dist/components/list/list-item.js.map +1 -1
  133. package/dist/components/list/list.js.map +1 -1
  134. package/dist/components/loading/directive.js.map +1 -1
  135. package/dist/components/loading/loading.js.map +1 -1
  136. package/dist/components/loading/style.js +1 -1
  137. package/dist/components/menu/helper.js.map +1 -1
  138. package/dist/components/menu/menu-item-collapsed.js.map +1 -1
  139. package/dist/components/menu/menu-item.js.map +1 -1
  140. package/dist/components/menu/menu-sub-collapsed.js.map +1 -1
  141. package/dist/components/menu/menu-sub.js.map +1 -1
  142. package/dist/components/menu/menu.js.map +1 -1
  143. package/dist/components/menu/use-menu-item.js.map +1 -1
  144. package/dist/components/menu/walk-menu-path.js.map +1 -1
  145. package/dist/components/message/helper.js.map +1 -1
  146. package/dist/components/message/message-box.js.map +1 -1
  147. package/dist/components/message/message.js.map +1 -1
  148. package/dist/components/message/message2.js.map +1 -1
  149. package/dist/components/message-confirm/message-confirm.js.map +1 -1
  150. package/dist/components/message-confirm/message-confirm2.js.map +1 -1
  151. package/dist/components/multi-select/multi-select-option.js.map +1 -1
  152. package/dist/components/multi-select/multi-select.js.map +1 -1
  153. package/dist/components/multi-select/multi-select.vue.d.ts +2 -2
  154. package/dist/components/multi-select/style.js +1 -1
  155. package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
  156. package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +5 -5
  157. package/dist/components/multi-tree-select/style.js +1 -1
  158. package/dist/components/node-render/node-render.js.map +1 -1
  159. package/dist/components/notification/index.js.map +1 -1
  160. package/dist/components/notification/notification.js.map +1 -1
  161. package/dist/components/notification/notification.vue.d.ts +1 -1
  162. package/dist/components/number/number.js.map +1 -1
  163. package/dist/components/number-input/number-input.js.map +1 -1
  164. package/dist/components/number-input/number-input.vue.d.ts +2 -2
  165. package/dist/components/number-range-input/number-range-input.js.map +1 -1
  166. package/dist/components/paginator/paginator.js.map +1 -1
  167. package/dist/components/palette/color-transform.js.map +1 -1
  168. package/dist/components/palette/palette-alpha.js.map +1 -1
  169. package/dist/components/palette/palette-color-switch.js.map +1 -1
  170. package/dist/components/palette/palette-hue.js.map +1 -1
  171. package/dist/components/palette/palette-sv.js.map +1 -1
  172. package/dist/components/palette/palette.js.map +1 -1
  173. package/dist/components/palette/use-hsv.js.map +1 -1
  174. package/dist/components/password-input/password-input.js.map +1 -1
  175. package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
  176. package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
  177. package/dist/components/progress/progress.js.map +1 -1
  178. package/dist/components/progress-nodes/progress-nodes.js.map +1 -1
  179. package/dist/components/radio/radio.js.map +1 -1
  180. package/dist/components/radio/style.js +1 -1
  181. package/dist/components/radio-group/radio-group.js.map +1 -1
  182. package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
  183. package/dist/components/rich-text-editor/toolbar.js.map +1 -1
  184. package/dist/components/scroll/scroll-bar.js +2 -0
  185. package/dist/components/scroll/scroll-bar.js.map +1 -1
  186. package/dist/components/scroll/scroll.js.map +1 -1
  187. package/dist/components/select/select.js.map +1 -1
  188. package/dist/components/select/select.vue.d.ts +2 -2
  189. package/dist/components/select/use-keyboard.js.map +1 -1
  190. package/dist/components/select/use-options.js.map +1 -1
  191. package/dist/components/slider/slider-thumb.js.map +1 -1
  192. package/dist/components/slider/slider.js +1 -1
  193. package/dist/components/slider/slider.js.map +1 -1
  194. package/dist/components/slider/use-slider.js.map +1 -1
  195. package/dist/components/steps/steps.js.map +1 -1
  196. package/dist/components/steps/steps.vue.d.ts +3 -3
  197. package/dist/components/switch/switch.js.map +1 -1
  198. package/dist/components/table/di.js.map +1 -1
  199. package/dist/components/table/node/col.js.map +1 -1
  200. package/dist/components/table/node/row.js.map +1 -1
  201. package/dist/components/table/table-body.js.map +1 -1
  202. package/dist/components/table/table-cell.js.map +1 -1
  203. package/dist/components/table/table-foot.js.map +1 -1
  204. package/dist/components/table/table-head.js.map +1 -1
  205. package/dist/components/table/table-row.js.map +1 -1
  206. package/dist/components/table/table.js.map +1 -1
  207. package/dist/components/table/use-check.js.map +1 -1
  208. package/dist/components/table/use-col-resize.js.map +1 -1
  209. package/dist/components/table/use-columns.js.map +1 -1
  210. package/dist/components/table/use-fixed-columns.js.map +1 -1
  211. package/dist/components/table/use-rows.js.map +1 -1
  212. package/dist/components/table/use-table.js.map +1 -1
  213. package/dist/components/table-editor/table-editor.js.map +1 -1
  214. package/dist/components/tabs/style.js +1 -1
  215. package/dist/components/tabs/tabs-horizontal.js.map +1 -1
  216. package/dist/components/tabs/tabs-horizontal.vue.d.ts +1 -1
  217. package/dist/components/tabs/tabs-vertical.js.map +1 -1
  218. package/dist/components/tabs/tabs.js.map +1 -1
  219. package/dist/components/tabs/tabs.vue.d.ts +1 -1
  220. package/dist/components/tabs/use-tabs-bar.js.map +1 -1
  221. package/dist/components/tag/tag.js.map +1 -1
  222. package/dist/components/text/text.js.map +1 -1
  223. package/dist/components/textarea/style.js +1 -1
  224. package/dist/components/textarea/textarea.js.map +1 -1
  225. package/dist/components/textarea/textarea.vue.d.ts +2 -2
  226. package/dist/components/textarea/utils.js.map +1 -1
  227. package/dist/components/theme/schema.js.map +1 -1
  228. package/dist/components/theme/theme.js.map +1 -1
  229. package/dist/components/tip/tip.js.map +1 -1
  230. package/dist/components/tip/tip.vue.d.ts +1 -1
  231. package/dist/components/tip/use-nest.js.map +1 -1
  232. package/dist/components/tree/tree-node.js.map +1 -1
  233. package/dist/components/tree/tree-node2.js.map +1 -1
  234. package/dist/components/tree/tree.js.map +1 -1
  235. package/dist/components/tree/tree.vue.d.ts +1 -1
  236. package/dist/components/tree/use-check.js.map +1 -1
  237. package/dist/components/tree/use-filter.js.map +1 -1
  238. package/dist/components/tree/use-select.js.map +1 -1
  239. package/dist/components/tree/use-tree-nodes.js.map +1 -1
  240. package/dist/components/tree-select/tree-select.js.map +1 -1
  241. package/dist/components/tree-select/tree-select.vue.d.ts +5 -5
  242. package/dist/components/watermark/watermark.js.map +1 -1
  243. package/dist/index.d.ts +4 -3
  244. package/dist/index.js +2 -1
  245. package/dist/install.js.map +1 -1
  246. package/dist/types/batch-edit.d.ts +2 -2
  247. package/dist/types/condition-editor.d.ts +21 -9
  248. package/dist/types/index.d.ts +2 -2
  249. package/package.json +13 -16
  250. package/src/components/action/style.scss +0 -6
  251. package/src/components/auto-complete/style.scss +0 -1
  252. package/src/components/auto-complete/style.ts +1 -1
  253. package/src/components/badge/badge.vue +1 -1
  254. package/src/components/batch-edit/style.ts +1 -1
  255. package/src/components/button/style.scss +1 -1
  256. package/src/components/cascade/use-select.ts +8 -6
  257. package/src/components/checkbox/style.ts +1 -1
  258. package/src/components/collapse/__test__/collapse.test.ts +3 -3
  259. package/src/components/condition-editor/components/condition-group.vue +118 -87
  260. package/src/components/condition-editor/components/condition-row.vue +137 -89
  261. package/src/components/condition-editor/condition-editor.vue +19 -48
  262. package/src/components/condition-editor/core/evaluator.ts +143 -57
  263. package/src/components/condition-editor/index.ts +6 -0
  264. package/src/components/condition-editor/style.scss +189 -102
  265. package/src/components/context-menu/style.ts +1 -1
  266. package/src/components/dialog/style.ts +2 -2
  267. package/src/components/drawer/style.ts +1 -1
  268. package/src/components/dropdown/style.ts +1 -1
  269. package/src/components/expression-editor/style.scss +1 -1
  270. package/src/components/form-item/form-item.vue +4 -9
  271. package/src/components/input/style.ts +1 -1
  272. package/src/components/loading/style.ts +1 -1
  273. package/src/components/menu/style.scss +1 -1
  274. package/src/components/message/style.scss +1 -1
  275. package/src/components/multi-select/style.ts +1 -1
  276. package/src/components/multi-tree-select/style.ts +1 -1
  277. package/src/components/number-input/__test__/number-input.test.ts +1 -1
  278. package/src/components/radio/style.ts +1 -1
  279. package/src/components/slider/slider.vue +1 -1
  280. package/src/components/table/di.ts +1 -1
  281. package/src/components/tabs/style.ts +1 -1
  282. package/src/components/textarea/style.ts +1 -1
  283. package/src/types/batch-edit.ts +2 -2
  284. package/src/types/condition-editor.ts +22 -8
@@ -1,98 +1,188 @@
1
1
  @use 'pkg:@veltra/styles/mixins' as m;
2
2
  @use 'pkg:@veltra/styles/functions' as fn;
3
- @use 'pkg:@veltra/styles/vars';
4
3
 
5
4
  $root-name: condition-editor;
5
+ $connector-width: 56px;
6
6
 
7
7
  @include m.b($root-name) {
8
- // ─── 条件分组 ────────────────────────────────────
8
+ font-size: 13px;
9
+ color: fn.use-var(text-color, main);
10
+
11
+ // ─── 分组(根 / 嵌套) ─────────────────────────────
9
12
  @include m.e(group) {
10
- // 外层不需额外边框
13
+ position: relative;
14
+ background-color: fn.use-var(bg-color, top);
15
+ border: 1px solid fn.use-var(border, muted-color);
16
+ border-radius: fn.use-var(radius, default);
17
+ padding: 12px;
18
+
19
+ @include m.m(nested) {
20
+ background-color: fn.use-var(bg-color, middle);
21
+ border-left: 3px solid fn.use-var(color, primary, light-7);
22
+ }
23
+
24
+ & + & {
25
+ margin-top: 8px;
26
+ }
11
27
  }
12
28
 
13
- @include m.e(group-header) {
29
+ @include m.e(group-list) {
30
+ list-style: none;
31
+ margin: 0;
32
+ padding: 0;
14
33
  display: flex;
15
- align-items: center;
34
+ flex-direction: column;
16
35
  gap: 6px;
17
- margin-bottom: 4px;
18
36
  }
19
37
 
20
- @include m.e(group-body) {
21
- border-left: 2px solid fn.use-var(border, muted-color);
22
- margin-left: 8px;
23
- padding-left: 10px;
24
- }
25
-
26
- @include m.e(group-actions) {
38
+ @include m.e(group-item) {
27
39
  display: flex;
28
- gap: 10px;
29
- padding: 2px 0;
40
+ align-items: flex-start;
41
+ gap: 8px;
30
42
  }
31
43
 
32
- @include m.e(group-result) {
33
- font-size: 11px;
34
- font-weight: 600;
44
+ @include m.e(group-item-body) {
45
+ flex: 1;
46
+ min-width: 0;
47
+ }
35
48
 
36
- &--pass {
37
- color: fn.use-var(color, success);
38
- }
49
+ @include m.e(group-empty) {
50
+ display: flex;
51
+ align-items: center;
52
+ justify-content: center;
53
+ padding: 8px;
54
+ color: fn.use-var(text-color, assist);
55
+ font-size: 12px;
56
+ }
39
57
 
40
- &--fail {
41
- color: fn.use-var(color, danger);
42
- }
58
+ @include m.e(group-empty-tip) {
59
+ opacity: 0.7;
43
60
  }
44
61
 
45
- // ─── AND/OR 标签 ──────────────────────────────────
46
- @include m.e(logic-tag) {
47
- display: inline-block;
48
- padding: 1px 8px;
62
+ // ─── 连接符 chip ──────────────────────────────────
63
+ @include m.e(connector) {
64
+ flex-shrink: 0;
65
+ width: $connector-width;
66
+ height: 28px;
67
+ display: inline-flex;
68
+ align-items: center;
69
+ justify-content: center;
70
+ margin-top: 2px;
49
71
  border-radius: fn.use-var(radius, small);
50
72
  font-size: 11px;
51
73
  font-weight: 600;
74
+ letter-spacing: 0.5px;
52
75
  cursor: pointer;
53
76
  user-select: none;
54
- transition: background-color 0.12s ease;
77
+ transition:
78
+ background-color 0.15s ease,
79
+ color 0.15s ease,
80
+ transform 0.15s ease;
55
81
 
56
- &--and {
57
- background-color: fn.use-var(color, primary, light-9);
82
+ @include m.m(and) {
58
83
  color: fn.use-var(color, primary);
84
+ background-color: fn.use-var(color, primary, light-9);
59
85
 
60
86
  &:hover {
61
87
  background-color: fn.use-var(color, primary, light-8);
62
88
  }
63
89
  }
64
90
 
65
- &--or {
91
+ @include m.m(or) {
92
+ color: fn.use-var(color, warning, dark-2);
66
93
  background-color: fn.use-var(color, warning, light-9);
67
- color: fn.use-var(color, warning);
68
94
 
69
95
  &:hover {
70
96
  background-color: fn.use-var(color, warning, light-8);
71
97
  }
72
98
  }
99
+
100
+ &:focus-visible {
101
+ outline: 2px solid fn.use-var(color, primary);
102
+ outline-offset: 1px;
103
+ }
73
104
  }
74
105
 
75
- // ─── 条件行 ──────────────────────────────────────
76
- @include m.e(row) {
106
+ @include m.e(connector-placeholder) {
107
+ flex-shrink: 0;
108
+ width: $connector-width;
109
+ height: 28px;
110
+ display: inline-flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ margin-top: 2px;
114
+ border-radius: fn.use-var(radius, small);
115
+ font-size: 11px;
116
+ font-weight: 600;
117
+ letter-spacing: 0.5px;
118
+ color: fn.use-var(text-color, assist);
119
+ background-color: transparent;
120
+ user-select: none;
121
+ }
122
+
123
+ // ─── 操作区 ───────────────────────────────────────
124
+ @include m.e(group-actions) {
77
125
  display: flex;
126
+ flex-wrap: wrap;
78
127
  gap: 4px;
128
+ margin-top: 8px;
129
+ padding-left: calc(#{$connector-width} + 8px);
130
+ }
131
+
132
+ @include m.e(action-btn) {
133
+ display: inline-flex;
134
+ align-items: center;
135
+ gap: 4px;
136
+ height: 26px;
137
+ padding: 0 8px;
138
+ border: none;
139
+ border-radius: fn.use-var(radius, small);
140
+ background-color: transparent;
141
+ color: fn.use-var(color, primary);
142
+ font-size: 12px;
143
+ cursor: pointer;
144
+ transition:
145
+ background-color 0.15s ease,
146
+ color 0.15s ease;
147
+
148
+ &:hover {
149
+ background-color: fn.use-var(color, primary, light-9);
150
+ }
151
+
152
+ &:disabled {
153
+ cursor: not-allowed;
154
+ opacity: 0.5;
155
+ }
156
+
157
+ @include m.m(danger) {
158
+ color: fn.use-var(color, danger);
159
+
160
+ &:hover {
161
+ background-color: fn.use-var(color, danger, light-9);
162
+ }
163
+ }
164
+ }
165
+
166
+ // ─── 条件行 ───────────────────────────────────────
167
+ @include m.e(row) {
168
+ display: flex;
169
+ gap: 6px;
79
170
  align-items: center;
80
- margin-bottom: 3px;
81
171
  }
82
172
 
83
173
  @include m.e(field) {
84
- width: 90px;
174
+ width: 140px;
85
175
  flex-shrink: 0;
86
176
  }
87
177
 
88
178
  @include m.e(operator) {
89
- width: 80px;
179
+ width: 110px;
90
180
  flex-shrink: 0;
91
181
  }
92
182
 
93
183
  @include m.e(value) {
94
184
  flex: 1;
95
- min-width: 0;
185
+ min-width: 120px;
96
186
  display: flex;
97
187
  align-items: center;
98
188
  }
@@ -100,24 +190,29 @@ $root-name: condition-editor;
100
190
  @include m.e(value-input) {
101
191
  width: 100%;
102
192
  height: 28px;
103
- padding: 0 8px;
193
+ padding: 0 10px;
104
194
  border: 1px solid fn.use-var(border, muted-color);
105
195
  border-radius: fn.use-var(radius, small);
106
- font-size: 12px;
196
+ font-size: 13px;
107
197
  color: fn.use-var(text-color, main);
108
198
  background-color: fn.use-var(bg-color, top);
109
199
  outline: none;
110
- transition: border-color 0.12s ease;
200
+ transition: border-color 0.15s ease;
111
201
 
112
202
  &::placeholder {
113
203
  color: fn.use-var(text-color, placeholder);
114
204
  }
115
205
 
206
+ &:hover {
207
+ border-color: fn.use-var(color, primary, light-5);
208
+ }
209
+
116
210
  &:focus {
117
211
  border-color: fn.use-var(color, primary);
118
212
  }
119
213
 
120
- &:disabled {
214
+ &:disabled,
215
+ &:read-only {
121
216
  background-color: fn.use-var(color, disabled);
122
217
  cursor: not-allowed;
123
218
  }
@@ -126,37 +221,43 @@ $root-name: condition-editor;
126
221
  @include m.e(value-empty) {
127
222
  font-size: 12px;
128
223
  color: fn.use-var(text-color, assist);
224
+ padding: 0 8px;
129
225
  }
130
226
 
131
- // ─── 变量 chip ──────────────────────────────────
227
+ // ─── 变量 chip ───────────────────────────────────
132
228
  @include m.e(value-chip) {
133
229
  display: inline-flex;
134
230
  align-items: center;
135
231
  gap: 4px;
136
- padding: 0 8px;
137
- height: 22px;
232
+ max-width: 100%;
233
+ padding: 0 8px 0 10px;
234
+ height: 24px;
138
235
  font-size: 12px;
139
236
  color: fn.use-var(color, primary);
140
237
  background-color: fn.use-var(color, primary, light-9);
238
+ border: 1px solid fn.use-var(color, primary, light-7);
141
239
  border-radius: 999px;
142
240
  cursor: pointer;
143
241
  user-select: none;
144
242
  transition:
145
- background-color 0.12s ease,
146
- box-shadow 0.12s ease;
243
+ background-color 0.15s ease,
244
+ border-color 0.15s ease;
147
245
 
148
246
  &:hover {
149
247
  background-color: fn.use-var(color, primary, light-8);
248
+ border-color: fn.use-var(color, primary, light-5);
249
+ }
150
250
 
151
- .#{vars.$namespace}#{$root-name}__value-chip-close {
152
- opacity: 1;
153
- max-width: 14px;
154
- margin-left: 2px;
155
- }
251
+ &:focus-visible {
252
+ outline: 2px solid fn.use-var(color, primary);
253
+ outline-offset: 1px;
156
254
  }
157
255
  }
158
256
 
159
257
  @include m.e(value-chip-label) {
258
+ overflow: hidden;
259
+ text-overflow: ellipsis;
260
+ white-space: nowrap;
160
261
  pointer-events: none;
161
262
  }
162
263
 
@@ -165,83 +266,69 @@ $root-name: condition-editor;
165
266
  align-items: center;
166
267
  justify-content: center;
167
268
  width: 14px;
168
- max-width: 0;
169
- margin-left: 0;
170
- overflow: hidden;
171
- font-size: 14px;
269
+ height: 14px;
270
+ font-size: 10px;
172
271
  line-height: 1;
173
- color: fn.use-var(color, primary);
174
- opacity: 0;
272
+ color: inherit;
273
+ opacity: 0.7;
274
+ border-radius: 50%;
175
275
  transition:
176
- opacity 0.12s ease,
177
- max-width 0.12s ease,
178
- margin-left 0.12s ease;
276
+ opacity 0.15s ease,
277
+ background-color 0.15s ease;
179
278
 
180
279
  &:hover {
181
- transform: scale(1.1);
280
+ opacity: 1;
281
+ background-color: fn.use-var(color, primary, light-7);
182
282
  }
183
283
  }
184
284
 
185
- // ─── 删除按钮 ────────────────────────────────────
285
+ // ─── 删除按钮 ──────────────────────────────────────
186
286
  @include m.e(row-delete) {
187
287
  flex-shrink: 0;
188
- width: 16px;
189
- text-align: center;
190
- font-size: 15px;
288
+ width: 26px;
289
+ height: 26px;
290
+ display: inline-flex;
291
+ align-items: center;
292
+ justify-content: center;
293
+ border: none;
294
+ background-color: transparent;
191
295
  color: fn.use-var(text-color, assist);
296
+ border-radius: fn.use-var(radius, small);
192
297
  cursor: pointer;
193
- transition: color 0.12s ease;
298
+ font-size: 14px;
299
+ transition:
300
+ color 0.15s ease,
301
+ background-color 0.15s ease;
194
302
 
195
303
  &:hover {
196
304
  color: fn.use-var(color, danger);
305
+ background-color: fn.use-var(color, danger, light-9);
197
306
  }
198
- }
199
-
200
- // ─── 结果指示 ────────────────────────────────────
201
- @include m.e(result) {
202
- flex-shrink: 0;
203
- width: 16px;
204
- text-align: center;
205
- font-size: 11px;
206
- font-weight: 600;
207
-
208
- &--pass {
209
- color: fn.use-var(color, success);
210
- }
211
-
212
- &--fail {
213
- color: fn.use-var(color, danger);
214
- }
215
-
216
- &--none {
217
- color: fn.use-var(text-color, assist);
218
- }
219
- }
220
307
 
221
- // ─── 添加按钮 ────────────────────────────────────
222
- @include m.e(add-btn) {
223
- font-size: 11px;
224
- color: fn.use-var(color, primary);
225
- cursor: pointer;
226
- transition: color 0.12s ease;
227
-
228
- &:hover {
229
- color: fn.use-var(color, primary, dark-2);
308
+ &:disabled {
309
+ cursor: not-allowed;
310
+ opacity: 0.4;
230
311
  }
231
312
  }
232
313
 
233
- // ─── 状态 ──────────────────────────────────────
314
+ // ─── 状态 ──────────────────────────────────────────
234
315
  @include m.is(disabled) {
235
316
  cursor: not-allowed;
236
317
 
237
- @include m.bem($root-name, logic-tag) {
318
+ @include m.bem($root-name, connector) {
238
319
  cursor: not-allowed;
239
320
  opacity: 0.6;
240
321
  }
241
322
 
242
- @include m.bem($root-name, add-btn) {
323
+ @include m.bem($root-name, action-btn) {
243
324
  cursor: not-allowed;
244
325
  opacity: 0.6;
245
326
  }
246
327
  }
328
+
329
+ @include m.is(readonly) {
330
+ @include m.bem($root-name, connector) {
331
+ cursor: default;
332
+ }
333
+ }
247
334
  }
@@ -1,4 +1,4 @@
1
1
  import '@veltra/directives/ripple/style.js'
2
2
  import '../icon/style'
3
- import '@veltra/styles/anime/zoom-in.scss'
3
+ import '@veltra/styles/transitions/zoom-in.scss'
4
4
  import './style.scss'
@@ -1,5 +1,5 @@
1
1
  import '../icon/style'
2
2
  import '../scroll/style'
3
- import '@veltra/styles/anime/fade.scss'
4
- import '@veltra/styles/anime/spring.scss'
3
+ import '@veltra/styles/transitions/fade.scss'
4
+ import '@veltra/styles/transitions/spring.scss'
5
5
  import './style.scss'
@@ -1,3 +1,3 @@
1
1
  import '../icon/style'
2
- import '@veltra/styles/anime/fade.scss'
2
+ import '@veltra/styles/transitions/fade.scss'
3
3
  import './style.scss'
@@ -1,2 +1,2 @@
1
- import '@veltra/styles/anime/slide.scss'
1
+ import '@veltra/styles/transitions/slide.scss'
2
2
  import './style.scss'
@@ -106,7 +106,7 @@ $root-name: expression-editor;
106
106
  );
107
107
  box-shadow: 0 1px 4px fn.use-var(shadow, color);
108
108
 
109
- .#{vars.$namespace}#{$root-name}__chip-close {
109
+ .#{vars.$namespace}-#{$root-name}__chip-close {
110
110
  opacity: 1;
111
111
  max-width: 14px;
112
112
  margin-left: 2px;
@@ -43,13 +43,9 @@ import { UGridItem } from '../grid'
43
43
  import { UTip } from '../tip'
44
44
  import { formItemCls as cls } from './helper'
45
45
 
46
- defineOptions({
47
- name: 'FormItem'
48
- })
46
+ defineOptions({ name: 'FormItem' })
49
47
 
50
- const props = withDefaults(defineProps<FormItemProps>(), {
51
- readonly: undefined
52
- })
48
+ const props = withDefaults(defineProps<FormItemProps>(), { readonly: undefined })
53
49
 
54
50
  defineSlots<{
55
51
  /** 标签插槽 */
@@ -80,9 +76,8 @@ const labelStyles = computed<CSSProperties>(() => {
80
76
 
81
77
  /** 错误提示 */
82
78
  const errorTips = computed<string | undefined>(() => {
83
- if (props.field) {
84
- return formProps?.model?.errors.get(props.field)?.[0]
85
- }
79
+ if (!props.field) return undefined
80
+ return formProps?.model?.errors.get(props.field)?.[0]
86
81
  })
87
82
 
88
83
  /** 字段是否必须 */
@@ -1,3 +1,3 @@
1
1
  import '../icon/style'
2
- import '@veltra/styles/anime/zoom-in.scss'
2
+ import '@veltra/styles/transitions/zoom-in.scss'
3
3
  import './style.scss'
@@ -1,2 +1,2 @@
1
- import '@veltra/styles/anime/fade.scss'
1
+ import '@veltra/styles/transitions/fade.scss'
2
2
  import './style.scss'
@@ -149,7 +149,7 @@ $collapsed-menu: collapsed-menu;
149
149
  border-left: 1px solid color-mix(in srgb, #{fn.use-var(border, color)} 52%, transparent);
150
150
 
151
151
  @supports selector(:has(*)) {
152
- &:has(.#{vars.$namespace}menu__item.is-active) {
152
+ &:has(.#{vars.$namespace}-menu__item.is-active) {
153
153
  border-left-color: fn.use-var(color, primary);
154
154
  }
155
155
  }
@@ -1,6 +1,6 @@
1
1
  @use 'pkg:@veltra/styles/mixins' as m;
2
2
  @use 'pkg:@veltra/styles/functions' as fn;
3
- @use 'pkg:@veltra/styles/vars';
3
+ @use 'pkg:@veltra/styles/vars' as vars;
4
4
 
5
5
  // 方便拼接
6
6
  $root-name: message;
@@ -6,5 +6,5 @@ import '../dropdown/style'
6
6
  import '../tag/style'
7
7
  import '../empty/style'
8
8
  import '@veltra/directives/ripple/style.js'
9
- import '@veltra/styles/anime/zoom-in.scss'
9
+ import '@veltra/styles/transitions/zoom-in.scss'
10
10
  import './style.scss'
@@ -5,5 +5,5 @@ import '../tag/style'
5
5
  import '../checkbox/style'
6
6
  import '../input/style'
7
7
  import '../button/style'
8
- import '@veltra/styles/anime/zoom-in.scss'
8
+ import '@veltra/styles/transitions/zoom-in.scss'
9
9
  import './style.scss'
@@ -1,4 +1,4 @@
1
- // @vitest-environment happy-dom
1
+ import { describe, expect, it } from 'vitest'
2
2
  import { createApp, h, nextTick, ref } from 'vue'
3
3
 
4
4
  import UNumberInput from '../number-input.vue'
@@ -1,2 +1,2 @@
1
- import '@veltra/styles/anime/zoom-in.scss'
1
+ import '@veltra/styles/transitions/zoom-in.scss'
2
2
  import './style.scss'
@@ -119,7 +119,7 @@ watch(
119
119
  [offset1, offset2],
120
120
  userAction((v) => {
121
121
  if (props.range) {
122
- emit('update:modelValue', v.map(sliderOffset2Value).sort() as T)
122
+ emit('update:modelValue', v.map(sliderOffset2Value).toSorted() as T)
123
123
  } else {
124
124
  emit('update:modelValue', sliderOffset2Value(v[0]) as T)
125
125
  }
@@ -1,4 +1,4 @@
1
- import type { VirtualItem } from '@veltra/compositions'
1
+ import type { VirtualItem } from '@cat-kit/fe'
2
2
  import type { BEM } from '@veltra/utils'
3
3
  import type { ComputedRef, InjectionKey, ShallowRef, Slots } from 'vue'
4
4
 
@@ -1,5 +1,5 @@
1
1
  import '../scroll/style'
2
2
  import '../icon/style'
3
3
  import '@veltra/directives/ripple/style.js'
4
- import '@veltra/styles/anime/fade.scss'
4
+ import '@veltra/styles/transitions/fade.scss'
5
5
  import './style.scss'
@@ -1,3 +1,3 @@
1
1
  import '../icon/style'
2
- import '@veltra/styles/anime/zoom-in.scss'
2
+ import '@veltra/styles/transitions/zoom-in.scss'
3
3
  import './style.scss'
@@ -37,7 +37,7 @@ export interface BatchEditProps<Model extends IFormModel = IFormModel> extends T
37
37
  /** label的宽度 */
38
38
  labelWidth?: string | number
39
39
  /** 删除方法 */
40
- deleteMethod?: (data: Record<string, any>[]) => Promise<any> | any
40
+ deleteMethod?: (data: Record<string, any>[]) => any
41
41
  /**
42
42
  * 保存方法
43
43
  * @description 这个方法旨在快编时生效
@@ -50,7 +50,7 @@ export interface BatchEditProps<Model extends IFormModel = IFormModel> extends T
50
50
  actionType: 'create' | 'update',
51
51
  /** 父级数据 */
52
52
  parentData?: Record<string, any>
53
- ) => Promise<any> | any
53
+ ) => any
54
54
 
55
55
  /**
56
56
  * 可用功能,不穿则对功能没有任何限制
@@ -2,6 +2,7 @@ import type { ComponentSize, DeconstructValue } from '@veltra/utils'
2
2
 
3
3
  import type { VariableItem } from './expression-editor'
4
4
 
5
+ /** 字段定义 */
5
6
  export interface ConditionField {
6
7
  label: string
7
8
  value: string
@@ -9,31 +10,45 @@ export interface ConditionField {
9
10
  enumOptions?: { label: string; value: string }[]
10
11
  }
11
12
 
13
+ /** 条件右侧值:常量或变量引用 */
12
14
  export type ConditionValue =
13
15
  | { kind: 'constant'; value: string }
14
16
  | { kind: 'variable'; name: string }
15
17
 
16
- export interface ConditionItem {
18
+ /** 单行条件叶子节点 */
19
+ export interface ConditionLeaf {
20
+ type: 'condition'
17
21
  field: string
18
22
  operator: string
19
23
  value: ConditionValue
20
- _result?: boolean
21
24
  }
22
25
 
26
+ /** 行间逻辑连接符 */
27
+ export type ConditionConnector = 'and' | 'or'
28
+
29
+ /** 条件组节点 —— 与叶子节点通过 children 统一编排 */
23
30
  export interface ConditionGroup {
24
- logic: 'and' | 'or'
25
- conditions: ConditionItem[]
26
- groups: ConditionGroup[]
27
- _result?: boolean
31
+ type: 'group'
32
+ children: ConditionNode[]
33
+ /**
34
+ * 子项之间的连接符
35
+ *
36
+ * - `connectors[i]` 用于 `children[i]` 与 `children[i + 1]` 之间
37
+ * - 长度应等于 `children.length - 1`;缺失项默认为 `and`
38
+ */
39
+ connectors: ConditionConnector[]
28
40
  }
29
41
 
42
+ /** 树节点:叶子或分组 */
43
+ export type ConditionNode = ConditionLeaf | ConditionGroup
44
+
45
+ /** 顶层表达式 = 根分组 */
30
46
  export type ConditionExpression = ConditionGroup
31
47
 
32
48
  export interface ConditionEditorProps {
33
49
  modelValue?: ConditionExpression
34
50
  fields?: ConditionField[]
35
51
  variables?: VariableItem[]
36
- data?: Record<string, unknown>
37
52
  size?: ComponentSize
38
53
  disabled?: boolean
39
54
  readonly?: boolean
@@ -41,7 +56,6 @@ export interface ConditionEditorProps {
41
56
 
42
57
  export interface ConditionEditorEmits {
43
58
  (e: 'update:modelValue', value: ConditionExpression): void
44
- (e: 'evaluate', results: ConditionExpression): void
45
59
  }
46
60
 
47
61
  export interface _ConditionEditorExposed {}