@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.
- package/dist/components/action/style2.css +1 -1
- package/dist/components/auto-complete/style2.css +1 -1
- package/dist/components/badge/style2.css +1 -1
- package/dist/components/batch-edit/style2.css +1 -1
- package/dist/components/breadcrumb/style2.css +1 -1
- package/dist/components/button/style2.css +1 -1
- package/dist/components/calendar/style2.css +1 -1
- package/dist/components/card/style2.css +1 -1
- package/dist/components/cascade/style2.css +1 -1
- package/dist/components/check-tag/style2.css +1 -1
- package/dist/components/checkbox/style2.css +1 -1
- package/dist/components/checkbox-group/style2.css +1 -1
- package/dist/components/code-editor/style2.css +1 -1
- package/dist/components/collapse/style2.css +1 -1
- package/dist/components/condition-editor/style2.css +1 -1
- package/dist/components/contextmenu/style2.css +1 -1
- package/dist/components/date-panel/style2.css +1 -1
- package/dist/components/date-picker/style2.css +1 -1
- package/dist/components/date-range-picker/style2.css +1 -1
- package/dist/components/dialog/style2.css +1 -1
- package/dist/components/drawer/style2.css +1 -1
- package/dist/components/dropdown/style2.css +1 -1
- package/dist/components/dual-nav/style2.css +1 -1
- package/dist/components/empty/style2.css +1 -1
- package/dist/components/expression-editor/core/chip.js +1 -0
- package/dist/components/expression-editor/core/chip.js.map +1 -1
- package/dist/components/expression-editor/style2.css +1 -1
- package/dist/components/file-picker/style2.css +1 -1
- package/dist/components/file-viewer/style2.css +3 -3
- package/dist/components/float-button/style2.css +1 -1
- package/dist/components/form/style2.css +1 -1
- package/dist/components/form-item/style2.css +1 -1
- package/dist/components/gantt-chart/style2.css +1 -1
- package/dist/components/grid/style2.css +1 -1
- package/dist/components/grid-input/style2.css +1 -1
- package/dist/components/group-input/style2.css +1 -1
- package/dist/components/group-nav/style2.css +1 -1
- package/dist/components/icon/style2.css +1 -1
- package/dist/components/index.d.ts +2 -1
- package/dist/components/index.js +3 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/input/style2.css +1 -1
- package/dist/components/kbd/style2.css +1 -1
- package/dist/components/layout/style2.css +1 -1
- package/dist/components/list/style2.css +1 -1
- package/dist/components/loading/style2.css +1 -1
- package/dist/components/message/style2.css +1 -1
- package/dist/components/message-confirm/style2.css +1 -1
- package/dist/components/multi-select/style2.css +1 -1
- package/dist/components/multi-tree-select/style2.css +1 -1
- package/dist/components/nav/style2.css +1 -1
- package/dist/components/node-render/style2.css +1 -1
- package/dist/components/notification/style2.css +1 -1
- package/dist/components/number/style2.css +1 -1
- package/dist/components/number-input/style2.css +1 -1
- package/dist/components/number-range-input/style2.css +1 -1
- package/dist/components/paginator/style2.css +1 -1
- package/dist/components/palette/style2.css +1 -1
- package/dist/components/password-input/style2.css +1 -1
- package/dist/components/pop-confirm/style2.css +1 -1
- package/dist/components/progress/style2.css +1 -1
- package/dist/components/progress-nodes/style2.css +1 -1
- package/dist/components/radio/style2.css +1 -1
- package/dist/components/radio-group/style2.css +4 -13
- package/dist/components/rich-text-editor/style2.css +1 -1
- package/dist/components/scroll/style2.css +1 -1
- package/dist/components/segment/segment.js +98 -0
- package/dist/components/segment/segment.js.map +1 -0
- package/dist/components/segment/style.d.ts +1 -0
- package/dist/components/segment/style.js +1 -0
- package/dist/components/segment/style2.css +113 -0
- package/dist/components/select/select.js +12 -6
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/select/style2.css +1 -1
- package/dist/components/slider/style2.css +1 -1
- package/dist/components/steps/style2.css +1 -1
- package/dist/components/switch/style2.css +1 -1
- package/dist/components/table/style2.css +1 -1
- package/dist/components/table-editor/style2.css +1 -1
- package/dist/components/tabs/style2.css +1 -1
- package/dist/components/tag/style2.css +1 -1
- package/dist/components/text/style2.css +1 -1
- package/dist/components/textarea/style2.css +1 -1
- package/dist/components/theme/style2.css +1 -1
- package/dist/components/theme/theme.js +2 -1
- package/dist/components/theme/theme.js.map +1 -1
- package/dist/components/tip/style2.css +1 -1
- package/dist/components/tree/style2.css +1 -1
- package/dist/components/tree-select/style2.css +1 -1
- package/dist/components/watermark/style2.css +1 -1
- package/dist/index.d.ts +20 -18
- package/dist/index.js +19 -18
- package/dist/style.js +1 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/segment.d.ts +41 -0
- package/package.json +6 -6
- package/src/components/expression-editor/core/chip.ts +2 -0
- package/src/components/file-viewer/style.scss +11 -11
- package/src/components/index.ts +2 -0
- package/src/components/radio-group/__test__/radio-group.test.ts +113 -0
- package/src/components/radio-group/style.scss +4 -15
- package/src/components/segment/__test__/segment.test.ts +264 -0
- package/src/components/segment/index.ts +1 -0
- package/src/components/segment/segment.vue +77 -0
- package/src/components/segment/style.scss +92 -0
- package/src/components/segment/style.ts +1 -0
- package/src/components/select/__test__/select.test.ts +36 -0
- package/src/components/select/select.vue +18 -12
- package/src/components/theme/theme.vue +6 -1
- package/src/style.ts +1 -0
- package/src/types/index.ts +1 -0
- 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
|
-
//
|
|
374
|
-
|
|
380
|
+
// 转正延迟到面板关闭后:动画期间保持过滤列表,避免列表瞬间恢复全量导致面板变长闪烁
|
|
381
|
+
pendingTempPromote = true
|
|
375
382
|
}
|
|
376
|
-
//
|
|
383
|
+
// 立即退出查询态,输入框同步恢复显示选中标签;查询串保留至面板关闭,避免关闭动画期间列表恢复全量
|
|
377
384
|
querying.value = false
|
|
378
|
-
|
|
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
|
|
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'
|
package/src/types/index.ts
CHANGED
|
@@ -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>
|