@veltra/desktop 1.6.5 → 1.7.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 (112) hide show
  1. package/dist/components/action/style2.css +1 -1
  2. package/dist/components/auto-complete/style2.css +1 -1
  3. package/dist/components/badge/style2.css +1 -1
  4. package/dist/components/batch-edit/style2.css +1 -1
  5. package/dist/components/breadcrumb/style2.css +1 -1
  6. package/dist/components/button/style2.css +1 -1
  7. package/dist/components/calendar/style2.css +1 -1
  8. package/dist/components/card/style2.css +1 -1
  9. package/dist/components/cascade/style2.css +1 -1
  10. package/dist/components/check-tag/style2.css +1 -1
  11. package/dist/components/checkbox/style2.css +1 -1
  12. package/dist/components/checkbox-group/style2.css +1 -1
  13. package/dist/components/code-editor/style2.css +1 -1
  14. package/dist/components/collapse/style2.css +1 -1
  15. package/dist/components/condition-editor/style2.css +1 -1
  16. package/dist/components/contextmenu/style2.css +1 -1
  17. package/dist/components/date-panel/style2.css +1 -1
  18. package/dist/components/date-picker/style2.css +1 -1
  19. package/dist/components/date-range-picker/style2.css +1 -1
  20. package/dist/components/dialog/style2.css +1 -1
  21. package/dist/components/drawer/style2.css +1 -1
  22. package/dist/components/dropdown/style2.css +1 -1
  23. package/dist/components/dual-nav/style2.css +1 -1
  24. package/dist/components/empty/style2.css +1 -1
  25. package/dist/components/expression-editor/core/chip.js +1 -0
  26. package/dist/components/expression-editor/core/chip.js.map +1 -1
  27. package/dist/components/expression-editor/style2.css +1 -1
  28. package/dist/components/file-picker/style2.css +1 -1
  29. package/dist/components/file-viewer/style2.css +3 -3
  30. package/dist/components/float-button/style2.css +1 -1
  31. package/dist/components/form/style2.css +1 -1
  32. package/dist/components/form-item/style2.css +1 -1
  33. package/dist/components/gantt-chart/style2.css +1 -1
  34. package/dist/components/grid/style2.css +1 -1
  35. package/dist/components/grid-input/style2.css +1 -1
  36. package/dist/components/group-input/style2.css +1 -1
  37. package/dist/components/group-nav/style2.css +1 -1
  38. package/dist/components/icon/style2.css +1 -1
  39. package/dist/components/index.d.ts +2 -1
  40. package/dist/components/index.js +3 -1
  41. package/dist/components/index.js.map +1 -1
  42. package/dist/components/input/style2.css +1 -1
  43. package/dist/components/kbd/style2.css +1 -1
  44. package/dist/components/layout/style2.css +1 -1
  45. package/dist/components/list/style2.css +1 -1
  46. package/dist/components/loading/style2.css +1 -1
  47. package/dist/components/message/style2.css +1 -1
  48. package/dist/components/message-confirm/style2.css +1 -1
  49. package/dist/components/multi-select/style2.css +1 -1
  50. package/dist/components/multi-tree-select/style2.css +1 -1
  51. package/dist/components/nav/style2.css +1 -1
  52. package/dist/components/node-render/style2.css +1 -1
  53. package/dist/components/notification/style2.css +1 -1
  54. package/dist/components/number/style2.css +1 -1
  55. package/dist/components/number-input/style2.css +1 -1
  56. package/dist/components/number-range-input/style2.css +1 -1
  57. package/dist/components/paginator/style2.css +1 -1
  58. package/dist/components/palette/style2.css +1 -1
  59. package/dist/components/password-input/style2.css +1 -1
  60. package/dist/components/pop-confirm/style2.css +1 -1
  61. package/dist/components/progress/style2.css +1 -1
  62. package/dist/components/progress-nodes/style2.css +1 -1
  63. package/dist/components/radio/style2.css +1 -1
  64. package/dist/components/radio-group/style2.css +4 -13
  65. package/dist/components/rich-text-editor/style2.css +1 -1
  66. package/dist/components/scroll/style2.css +1 -1
  67. package/dist/components/segment/segment.js +98 -0
  68. package/dist/components/segment/segment.js.map +1 -0
  69. package/dist/components/segment/style.d.ts +1 -0
  70. package/dist/components/segment/style.js +1 -0
  71. package/dist/components/segment/style2.css +113 -0
  72. package/dist/components/select/select.js +12 -6
  73. package/dist/components/select/select.js.map +1 -1
  74. package/dist/components/select/style2.css +1 -1
  75. package/dist/components/slider/style2.css +1 -1
  76. package/dist/components/steps/style2.css +1 -1
  77. package/dist/components/switch/style2.css +1 -1
  78. package/dist/components/table/style2.css +1 -1
  79. package/dist/components/table-editor/style2.css +1 -1
  80. package/dist/components/tabs/style2.css +1 -1
  81. package/dist/components/tag/style2.css +1 -1
  82. package/dist/components/text/style2.css +1 -1
  83. package/dist/components/textarea/style2.css +1 -1
  84. package/dist/components/theme/style2.css +1 -1
  85. package/dist/components/theme/theme.js +2 -1
  86. package/dist/components/theme/theme.js.map +1 -1
  87. package/dist/components/tip/style2.css +1 -1
  88. package/dist/components/tree/style2.css +1 -1
  89. package/dist/components/tree-select/style2.css +1 -1
  90. package/dist/components/watermark/style2.css +1 -1
  91. package/dist/index.d.ts +20 -18
  92. package/dist/index.js +19 -18
  93. package/dist/style.js +1 -0
  94. package/dist/types/index.d.ts +2 -1
  95. package/dist/types/segment.d.ts +41 -0
  96. package/package.json +6 -6
  97. package/src/components/expression-editor/core/chip.ts +2 -0
  98. package/src/components/file-viewer/style.scss +11 -11
  99. package/src/components/index.ts +2 -0
  100. package/src/components/radio-group/__test__/radio-group.test.ts +113 -0
  101. package/src/components/radio-group/style.scss +4 -15
  102. package/src/components/segment/__test__/segment.test.ts +264 -0
  103. package/src/components/segment/index.ts +1 -0
  104. package/src/components/segment/segment.vue +77 -0
  105. package/src/components/segment/style.scss +92 -0
  106. package/src/components/segment/style.ts +1 -0
  107. package/src/components/select/__test__/select.test.ts +36 -0
  108. package/src/components/select/select.vue +18 -12
  109. package/src/components/theme/theme.vue +6 -1
  110. package/src/style.ts +1 -0
  111. package/src/types/index.ts +1 -0
  112. package/src/types/segment.ts +42 -0
@@ -12,7 +12,6 @@
12
12
  :min-width="minWidth"
13
13
  :width="width"
14
14
  @keydown="handleKeydown"
15
- @update:visible="handleDropdownVisible"
16
15
  @mouseenter="hovered = true"
17
16
  @mouseleave="hovered = false"
18
17
  >
@@ -200,6 +199,9 @@ const { queryString, options, allOptions, temOptionsToCreatedOptions, clearCreat
200
199
 
201
200
  const dropdownVisible = shallowRef(false)
202
201
 
202
+ /** 选中临时选项后待转正标记:面板关闭后再落定,避免关闭动画期间列表恢复全量导致面板变长 */
203
+ let pendingTempPromote = false
204
+
203
205
  /**
204
206
  * 是否处于查询态:决定触发输入框显示查询串还是选中标签。
205
207
  * 与面板可见状态解耦 —— 选择后立即退出查询态,
@@ -341,8 +343,17 @@ watch([scrollRef, virtualEnabled], ([scroll, virtualEnabled]) => {
341
343
  }
342
344
  })
343
345
 
346
+ /** 落定待转正的临时选项(面板 DOM 已卸载,列表恢复全量用户不可见) */
347
+ function promotePendingTemp() {
348
+ if (!pendingTempPromote) return
349
+ pendingTempPromote = false
350
+ temOptionsToCreatedOptions()
351
+ }
352
+
344
353
  watch(dropdownVisible, (visible) => {
345
354
  if (visible) {
355
+ // 关闭动画期间被重新打开时补一次转正,保证已选临时项落到完整列表
356
+ promotePendingTemp()
346
357
  // 面板展开后进入查询态并聚焦输入框,可以立即输入查询
347
358
  if (filterable.value) {
348
359
  queryString.value = ''
@@ -350,17 +361,13 @@ watch(dropdownVisible, (visible) => {
350
361
  nextTick(() => inputRef.value?.el?.focus())
351
362
  }
352
363
  } else {
364
+ // 面板完全关闭(动画结束、DOM 卸载)后才清空查询串并转正,关闭动画期间列表保持过滤态
353
365
  querying.value = false
354
366
  queryString.value = ''
367
+ promotePendingTemp()
355
368
  }
356
369
  })
357
370
 
358
- const handleDropdownVisible = (visible: boolean) => {
359
- if (!visible) {
360
- queryString.value = ''
361
- }
362
- }
363
-
364
371
  /** 单选:用户动作内 O(1) 写入值与文案,跳过 modelValue 回显的 O(n) 查找 */
365
372
  const handleSelect = userAction((option: Record<string, any>, _index: number) => {
366
373
  const value = option?.[valueKey.value]
@@ -370,13 +377,12 @@ const handleSelect = userAction((option: Record<string, any>, _index: number) =>
370
377
  setLabel(option?.[labelKey.value])
371
378
  emit('change', option)
372
379
  if (option.__isTemp) {
373
- // 转正后列表同步重建为完整源(临时项置顶索引失效),必须按 value 重定位
374
- temOptionsToCreatedOptions()
380
+ // 转正延迟到面板关闭后:动画期间保持过滤列表,避免列表瞬间恢复全量导致面板变长闪烁
381
+ pendingTempPromote = true
375
382
  }
376
- // 立即退出查询态,输入框同步恢复显示选中标签
383
+ // 立即退出查询态,输入框同步恢复显示选中标签;查询串保留至面板关闭,避免关闭动画期间列表恢复全量
377
384
  querying.value = false
378
- queryString.value = ''
379
- // 按当前列表定位高亮,避免创建项转正后仍停留在点击时的临时索引(通常为 0)
385
+ // 按当前列表定位高亮(临时项尚未转正,仍在过滤列表中,通常为 0)
380
386
  currentIndex.value = options.value.findIndex((item) => o(item).get(valueKey.value) === value)
381
387
  if (currentIndex.value >= 0) {
382
388
  selected.value = options.value[currentIndex.value]
@@ -234,7 +234,9 @@ watch(
234
234
  (theme) => {
235
235
  if (!props.theme && theme === editorTheme.value) return
236
236
 
237
- const nextTheme = props.theme ? theme : new UITheme(createThemeSnapshot(theme.theme))
237
+ const nextTheme = props.theme
238
+ ? theme
239
+ : new UITheme(createThemeSnapshot(theme.theme), { series: theme.series })
238
240
 
239
241
  editorTheme.value = nextTheme
240
242
  baselineTheme.value = createThemeSnapshot(nextTheme.theme)
@@ -415,6 +417,9 @@ function applySnapshot(snapshot: Theme, label?: string) {
415
417
  }
416
418
 
417
419
  function applyPreset(type: 'light' | 'dark') {
420
+ if (editorTheme.value) {
421
+ editorTheme.value.series = type
422
+ }
418
423
  applySnapshot(
419
424
  type === 'dark' ? darkPreset : lightPreset,
420
425
  type === 'dark' ? '深色预设' : '浅色预设'
package/src/style.ts CHANGED
@@ -60,6 +60,7 @@ import './components/radio/style'
60
60
  import './components/rich-text-editor/style'
61
61
  import './components/scroll/style'
62
62
  import './components/select/style'
63
+ import './components/segment/style'
63
64
  import './components/slider/style'
64
65
  import './components/steps/style'
65
66
  import './components/switch/style'
@@ -81,3 +81,4 @@ export * from './steps'
81
81
  export * from './rich-text-editor'
82
82
  export * from './file-viewer'
83
83
  export * from './collapse'
84
+ export * from './segment'
@@ -0,0 +1,42 @@
1
+ import type { DeconstructValue, FormComponentProps } from '@veltra/utils'
2
+
3
+ /** 分段单选选项 */
4
+ export type SegmentItem = Record<string, any>
5
+
6
+ /** 分段单选组件属性 */
7
+ export interface SegmentProps extends FormComponentProps {
8
+ /** 绑定值 */
9
+ modelValue?: any
10
+ /** 选项列表 */
11
+ items: SegmentItem[]
12
+ /**
13
+ * 选项值 key
14
+ * @default 'value'
15
+ */
16
+ valueKey?: string
17
+ /**
18
+ * 选项标签 key
19
+ * @default 'label'
20
+ */
21
+ labelKey?: string
22
+ /** 是否禁用整组 */
23
+ disabled?: boolean
24
+ /** 禁用的选项判断函数 */
25
+ disabledItem?: (item: SegmentItem) => boolean
26
+ /** 是否撑满容器宽度 */
27
+ block?: boolean
28
+ }
29
+
30
+ /** 分段单选组件事件 */
31
+ export interface SegmentEmits {
32
+ /** 绑定值更新 */
33
+ (e: 'update:modelValue', modelValue: any): void
34
+ /** 选中项切换事件 */
35
+ (e: 'change', item: SegmentItem): void
36
+ }
37
+
38
+ /** 分段单选组件暴露的属性和方法(组件内部使用) */
39
+ export interface _SegmentExposed {}
40
+
41
+ /** 分段单选组件暴露的属性和方法(组件外部使用, 引用的值会被自动解构) */
42
+ export type SegmentExposed = DeconstructValue<_SegmentExposed>