@veltra/desktop 1.1.0 → 1.1.2
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/action-group.vue.d.ts +2 -2
- package/dist/components/action/action.vue.d.ts +1 -1
- package/dist/components/auto-complete/auto-complete.js +3 -2
- package/dist/components/auto-complete/auto-complete.js.map +1 -1
- package/dist/components/auto-complete/style2.css +2 -2
- package/dist/components/button/button.vue.d.ts +1 -1
- package/dist/components/cascade/cascade.js +3 -2
- package/dist/components/cascade/cascade.js.map +1 -1
- package/dist/components/cascade/cascade.vue.d.ts +3 -3
- package/dist/components/cascade/style2.css +1 -1
- package/dist/components/checkbox/checkbox-button.js +3 -2
- package/dist/components/checkbox/checkbox-button.js.map +1 -1
- package/dist/components/checkbox/checkbox.js +3 -2
- package/dist/components/checkbox/checkbox.js.map +1 -1
- package/dist/components/checkbox/style2.css +2 -2
- package/dist/components/checkbox-group/checkbox-group.js +3 -2
- package/dist/components/checkbox-group/checkbox-group.js.map +1 -1
- package/dist/components/code-editor/code-editor.js +3 -2
- package/dist/components/code-editor/code-editor.js.map +1 -1
- package/dist/components/code-editor/style2.css +1 -1
- package/dist/components/collapse/collapse-item.js +10 -35
- package/dist/components/collapse/collapse-item.js.map +1 -1
- package/dist/components/collapse/collapse.js +4 -2
- package/dist/components/collapse/collapse.js.map +1 -1
- package/dist/components/collapse/collapse.vue.d.ts +1 -1
- package/dist/components/collapse/di.js +1 -0
- package/dist/components/collapse/di.js.map +1 -1
- package/dist/components/date-panel/date-panel.vue.d.ts +1 -1
- package/dist/components/date-picker/date-picker.js +3 -2
- package/dist/components/date-picker/date-picker.js.map +1 -1
- package/dist/components/date-range-picker/date-range-picker.js +3 -2
- package/dist/components/date-range-picker/date-range-picker.js.map +1 -1
- package/dist/components/date-range-picker/style2.css +1 -1
- package/dist/components/expression-editor/expression-editor.js +3 -2
- package/dist/components/expression-editor/expression-editor.js.map +1 -1
- package/dist/components/expression-editor/style2.css +5 -5
- package/dist/components/form/form.js.map +1 -1
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js +2 -2
- package/dist/components/form/form.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form-item/form-item.js.map +1 -1
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/form-item/form-item.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/form-item/style2.css +0 -1
- package/dist/components/grid-input/style2.css +3 -3
- package/dist/components/group-input/group-input.js +3 -2
- package/dist/components/group-input/group-input.js.map +1 -1
- package/dist/components/input/input.js.map +1 -1
- package/dist/components/input/input.vue.d.ts +2 -2
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js +3 -2
- package/dist/components/input/input.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/components/input/style2.css +1 -1
- package/dist/components/menu/di.js +1 -0
- package/dist/components/menu/di.js.map +1 -1
- package/dist/components/menu/menu-sub.js +7 -15
- package/dist/components/menu/menu-sub.js.map +1 -1
- package/dist/components/menu/menu.js +8 -2
- package/dist/components/menu/menu.js.map +1 -1
- package/dist/components/multi-select/multi-select.js +3 -2
- package/dist/components/multi-select/multi-select.js.map +1 -1
- package/dist/components/multi-select/style2.css +2 -2
- package/dist/components/multi-tree-select/multi-tree-select.js +3 -2
- package/dist/components/multi-tree-select/multi-tree-select.js.map +1 -1
- package/dist/components/multi-tree-select/multi-tree-select.vue.d.ts +2 -2
- package/dist/components/multi-tree-select/style2.css +2 -2
- package/dist/components/notification/notification.vue.d.ts +1 -1
- package/dist/components/number-input/number-input.js +3 -2
- package/dist/components/number-input/number-input.js.map +1 -1
- package/dist/components/number-input/number-input.vue.d.ts +2 -2
- package/dist/components/number-range-input/number-range-input.js +3 -2
- package/dist/components/number-range-input/number-range-input.js.map +1 -1
- package/dist/components/palette/palette.js +3 -2
- package/dist/components/palette/palette.js.map +1 -1
- package/dist/components/password-input/password-input.js +4 -3
- package/dist/components/password-input/password-input.js.map +1 -1
- package/dist/components/pop-confirm/pop-confirm.js +3 -2
- package/dist/components/pop-confirm/pop-confirm.js.map +1 -1
- package/dist/components/pop-confirm/pop-confirm.vue.d.ts +1 -1
- package/dist/components/radio/radio.js +3 -2
- package/dist/components/radio/radio.js.map +1 -1
- package/dist/components/radio/style2.css +1 -1
- package/dist/components/radio-group/radio-group.js +3 -2
- package/dist/components/radio-group/radio-group.js.map +1 -1
- package/dist/components/radio-group/style2.css +1 -1
- package/dist/components/rich-text-editor/rich-text-editor.js +3 -2
- package/dist/components/rich-text-editor/rich-text-editor.js.map +1 -1
- package/dist/components/rich-text-editor/style2.css +5 -5
- package/dist/components/select/select.js +4 -3
- package/dist/components/select/select.js.map +1 -1
- package/dist/components/slider/slider.js +3 -2
- package/dist/components/slider/slider.js.map +1 -1
- package/dist/components/switch/style2.css +1 -1
- package/dist/components/switch/switch.js +3 -2
- package/dist/components/switch/switch.js.map +1 -1
- package/dist/components/tabs/tabs-horizontal.vue.d.ts +3 -3
- package/dist/components/tabs/tabs-vertical.vue.d.ts +2 -2
- package/dist/components/tabs/tabs.vue.d.ts +3 -3
- package/dist/components/tag/tag.js +3 -2
- package/dist/components/tag/tag.js.map +1 -1
- package/dist/components/textarea/style2.css +1 -1
- package/dist/components/textarea/textarea.js +3 -2
- package/dist/components/textarea/textarea.js.map +1 -1
- package/dist/components/textarea/textarea.vue.d.ts +2 -2
- package/dist/components/tip/tip.vue.d.ts +1 -1
- package/dist/components/tree/tree.js +3 -2
- package/dist/components/tree/tree.js.map +1 -1
- package/dist/components/tree-select/tree-select.js +3 -2
- package/dist/components/tree-select/tree-select.js.map +1 -1
- package/dist/components/tree-select/tree-select.vue.d.ts +2 -2
- package/dist/utils/form-context.js +17 -0
- package/dist/utils/form-context.js.map +1 -0
- package/package.json +11 -11
- package/src/components/auto-complete/auto-complete.vue +3 -2
- package/src/components/auto-complete/style.scss +2 -2
- package/src/components/cascade/cascade.vue +3 -2
- package/src/components/cascade/style.scss +1 -1
- package/src/components/checkbox/checkbox-button.vue +3 -2
- package/src/components/checkbox/checkbox.vue +3 -2
- package/src/components/checkbox/style.scss +2 -2
- package/src/components/checkbox-group/checkbox-group.vue +3 -2
- package/src/components/code-editor/code-editor.vue +3 -2
- package/src/components/code-editor/style.scss +1 -1
- package/src/components/collapse/collapse-item.vue +11 -49
- package/src/components/collapse/collapse.vue +7 -2
- package/src/components/collapse/di.ts +2 -1
- package/src/components/collapse/style.scss +1 -1
- package/src/components/date-picker/date-picker.vue +3 -2
- package/src/components/date-range-picker/date-range-picker.vue +3 -2
- package/src/components/date-range-picker/style.scss +1 -1
- package/src/components/expression-editor/expression-editor.vue +3 -2
- package/src/components/expression-editor/style.scss +5 -5
- package/src/components/form/form.vue +2 -2
- package/src/components/form-item/form-item.vue +3 -2
- package/src/components/form-item/style.scss +0 -1
- package/src/components/grid-input/style.scss +1 -1
- package/src/components/group-input/group-input.vue +3 -2
- package/src/components/input/input.vue +3 -2
- package/src/components/input/style.scss +1 -1
- package/src/components/menu/di.ts +2 -1
- package/src/components/menu/menu-sub.vue +6 -9
- package/src/components/menu/menu.vue +11 -2
- package/src/components/multi-select/multi-select.vue +3 -2
- package/src/components/multi-select/style.scss +2 -2
- package/src/components/multi-tree-select/multi-tree-select.vue +3 -2
- package/src/components/multi-tree-select/style.scss +2 -2
- package/src/components/number-input/number-input.vue +3 -2
- package/src/components/number-range-input/number-range-input.vue +3 -2
- package/src/components/palette/palette.vue +3 -2
- package/src/components/password-input/password-input.vue +4 -3
- package/src/components/pop-confirm/pop-confirm.vue +3 -2
- package/src/components/radio/radio.vue +3 -2
- package/src/components/radio/style.scss +1 -1
- package/src/components/radio-group/radio-group.vue +3 -2
- package/src/components/radio-group/style.scss +1 -1
- package/src/components/rich-text-editor/rich-text-editor.vue +3 -2
- package/src/components/rich-text-editor/style.scss +5 -5
- package/src/components/select/select.vue +4 -3
- package/src/components/slider/slider.vue +3 -2
- package/src/components/switch/style.scss +1 -1
- package/src/components/switch/switch.vue +3 -2
- package/src/components/tag/tag.vue +3 -2
- package/src/components/textarea/style.scss +1 -1
- package/src/components/textarea/textarea.vue +3 -2
- package/src/components/tree/tree.vue +3 -2
- package/src/components/tree-select/tree-select.vue +3 -2
- package/src/utils/form-context.ts +24 -0
- package/dist/components/menu/use-menu-transition.js +0 -71
- package/dist/components/menu/use-menu-transition.js.map +0 -1
- package/src/components/menu/use-menu-transition.ts +0 -69
|
@@ -24,11 +24,11 @@
|
|
|
24
24
|
|
|
25
25
|
<!-- @vue-ignore -->
|
|
26
26
|
<transition
|
|
27
|
-
@enter="enter"
|
|
28
|
-
@after-enter="afterEnter"
|
|
29
|
-
@leave="
|
|
30
|
-
@
|
|
31
|
-
@after-leave="afterLeave"
|
|
27
|
+
@enter="(el: Element) => expandTransition.enter(el as HTMLElement)"
|
|
28
|
+
@after-enter="(el: Element) => expandTransition.afterEnter(el as HTMLElement)"
|
|
29
|
+
@before-leave="(el: Element) => expandTransition.beforeLeave(el as HTMLElement)"
|
|
30
|
+
@leave="(el: Element) => expandTransition.leave(el as HTMLElement)"
|
|
31
|
+
@after-leave="(el: Element) => expandTransition.afterLeave(el as HTMLElement)"
|
|
32
32
|
>
|
|
33
33
|
<ul :class="cls.e('sub-list')" v-show="expanded">
|
|
34
34
|
<template v-for="(child, index) of menu.children!" :key="getKey(index, parentKey)">
|
|
@@ -51,15 +51,12 @@ import { MenuDIKey } from './di'
|
|
|
51
51
|
import { getKey } from './helper'
|
|
52
52
|
import UMenuIcon from './menu-icon.vue'
|
|
53
53
|
import UMenuItem from './menu-item.vue'
|
|
54
|
-
import { useMenuTransition } from './use-menu-transition'
|
|
55
54
|
|
|
56
55
|
defineOptions({ name: 'MenuSub' })
|
|
57
56
|
|
|
58
57
|
const props = defineProps<{ menu: MenuItem; parentKey: string; depth: number }>()
|
|
59
58
|
|
|
60
|
-
const { cls, expandedPath, menuProps } = inject(MenuDIKey)!
|
|
61
|
-
|
|
62
|
-
const { enter, afterEnter, beforeLeave, leave, afterLeave } = useMenuTransition()
|
|
59
|
+
const { cls, expandedPath, menuProps, expandTransition } = inject(MenuDIKey)!
|
|
63
60
|
|
|
64
61
|
const expanded = computed(() => expandedPath.has(props.menu.path))
|
|
65
62
|
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
|
|
35
35
|
<script lang="ts" setup>
|
|
36
36
|
import { useFallbackProps } from '@veltra/compositions'
|
|
37
|
-
import { bem } from '@veltra/utils'
|
|
37
|
+
import { bem, ExpandTransition } from '@veltra/utils'
|
|
38
38
|
import { computed, provide, shallowReactive, watch } from 'vue'
|
|
39
39
|
|
|
40
40
|
import type { MenuEmits, MenuProps, ComponentSize } from '../../types'
|
|
@@ -66,6 +66,14 @@ const menuCls = computed(() => {
|
|
|
66
66
|
return props.collapsed ? collapsedCls : cls
|
|
67
67
|
})
|
|
68
68
|
|
|
69
|
+
const expandTransition = new ExpandTransition({
|
|
70
|
+
enterTransition:
|
|
71
|
+
'height 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-top 0.25s cubic-bezier(0.4, 0, 0.2, 1), padding-bottom 0.25s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.18s cubic-bezier(0.4, 0, 0.2, 1)',
|
|
72
|
+
leaveTransition:
|
|
73
|
+
'height 0.2s cubic-bezier(0.4, 0, 1, 1), padding-top 0.2s cubic-bezier(0.4, 0, 1, 1), padding-bottom 0.2s cubic-bezier(0.4, 0, 1, 1), opacity 0.12s cubic-bezier(0.4, 0, 1, 1)',
|
|
74
|
+
opacity: true
|
|
75
|
+
})
|
|
76
|
+
|
|
69
77
|
const { size } = useFallbackProps([props], {
|
|
70
78
|
size: 'default' as ComponentSize
|
|
71
79
|
})
|
|
@@ -98,6 +106,7 @@ provide(MenuDIKey, {
|
|
|
98
106
|
menuProps: props,
|
|
99
107
|
menuEmit: emit,
|
|
100
108
|
expandedPath,
|
|
101
|
-
size
|
|
109
|
+
size,
|
|
110
|
+
expandTransition
|
|
102
111
|
})
|
|
103
112
|
</script>
|
|
@@ -140,7 +140,7 @@
|
|
|
140
140
|
|
|
141
141
|
<script lang="ts" setup>
|
|
142
142
|
import { o as chainObj } from '@cat-kit/core'
|
|
143
|
-
import {
|
|
143
|
+
import { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
|
|
144
144
|
import { ArrowDown, Close, Search } from '@veltra/icons/normal'
|
|
145
145
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
146
146
|
import { computed, shallowRef, shallowReactive, watch, provide } from 'vue'
|
|
@@ -151,6 +151,7 @@ import type {
|
|
|
151
151
|
ScrollExposed,
|
|
152
152
|
DropdownExposed
|
|
153
153
|
} from '../../types'
|
|
154
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
154
155
|
import { UCheckbox } from '../checkbox'
|
|
155
156
|
import { UDropdown } from '../dropdown'
|
|
156
157
|
import { UEmpty } from '../empty'
|
|
@@ -179,7 +180,7 @@ const emit = defineEmits<MultiSelectEmits>()
|
|
|
179
180
|
|
|
180
181
|
const cls = bem('multi-select')
|
|
181
182
|
|
|
182
|
-
const { formProps } =
|
|
183
|
+
const { formProps } = injectFormContext()
|
|
183
184
|
|
|
184
185
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
185
186
|
size: 'default',
|
|
@@ -8,7 +8,7 @@ $root-name: multi-select;
|
|
|
8
8
|
@include m.b($root-name) {
|
|
9
9
|
width: 100%;
|
|
10
10
|
line-height: 1;
|
|
11
|
-
border: fn.use-var(border);
|
|
11
|
+
border: fn.use-var(border-muted);
|
|
12
12
|
box-shadow: fn.use-var(shadow, emboss);
|
|
13
13
|
transition: border-color 0.25s ease, box-shadow 0.25s ease;
|
|
14
14
|
overflow: hidden;
|
|
@@ -137,7 +137,7 @@ $root-name: multi-select;
|
|
|
137
137
|
}
|
|
138
138
|
|
|
139
139
|
@include m.bem(tag) {
|
|
140
|
-
border: fn.use-var(border);
|
|
140
|
+
border: fn.use-var(border-muted);
|
|
141
141
|
}
|
|
142
142
|
}
|
|
143
143
|
|
|
@@ -96,13 +96,14 @@
|
|
|
96
96
|
|
|
97
97
|
<script lang="ts" setup>
|
|
98
98
|
import { dfs, o } from '@cat-kit/core'
|
|
99
|
-
import {
|
|
99
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
100
100
|
import { ArrowDown, Close, Search } from '@veltra/icons/normal'
|
|
101
101
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
102
102
|
import { computed, nextTick, shallowRef, watch } from 'vue'
|
|
103
103
|
|
|
104
104
|
import type { MultiTreeSelectProps, MultiTreeSelectEmits, TreeExposed } from '../../types'
|
|
105
105
|
import type { DropdownExposed } from '../../types'
|
|
106
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
106
107
|
import { UButton } from '../button'
|
|
107
108
|
import { UCheckbox } from '../checkbox'
|
|
108
109
|
import { UDropdown } from '../dropdown'
|
|
@@ -161,7 +162,7 @@ const hovered = shallowRef(false)
|
|
|
161
162
|
|
|
162
163
|
const tags = shallowRef<Record<string, any>[]>([])
|
|
163
164
|
|
|
164
|
-
const { formProps } =
|
|
165
|
+
const { formProps } = injectFormContext()
|
|
165
166
|
|
|
166
167
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
|
|
167
168
|
|
|
@@ -7,7 +7,7 @@ $root-name: multi-tree-select;
|
|
|
7
7
|
|
|
8
8
|
@include m.b($root-name) {
|
|
9
9
|
width: 100%;
|
|
10
|
-
border: fn.use-var(border);
|
|
10
|
+
border: fn.use-var(border-muted);
|
|
11
11
|
box-shadow: fn.use-var(shadow, emboss);
|
|
12
12
|
transition: border-color 0.25s ease, box-shadow 0.25s ease;
|
|
13
13
|
overflow: hidden;
|
|
@@ -45,7 +45,7 @@ $root-name: multi-tree-select;
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
@include m.bem(tag) {
|
|
48
|
-
border: fn.use-var(border);
|
|
48
|
+
border: fn.use-var(border-muted);
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
|
|
@@ -63,13 +63,14 @@
|
|
|
63
63
|
|
|
64
64
|
<script lang="ts" setup>
|
|
65
65
|
import { $n, n, o, isUndef } from '@cat-kit/core'
|
|
66
|
-
import {
|
|
66
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
67
67
|
import { vRipple } from '@veltra/directives'
|
|
68
68
|
import { ArrowDown, ArrowUp, Close } from '@veltra/icons/normal'
|
|
69
69
|
import { bem, FORM_EMPTY_CONTENT, Tween } from '@veltra/utils'
|
|
70
70
|
import { computed, shallowRef, watch } from 'vue'
|
|
71
71
|
|
|
72
72
|
import type { NumberInputEmits, NumberInputProps, InputExposed } from '../../types'
|
|
73
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
73
74
|
import { UIcon } from '../icon'
|
|
74
75
|
import { UInput } from '../input'
|
|
75
76
|
|
|
@@ -90,7 +91,7 @@ const slots = defineSlots<{
|
|
|
90
91
|
suffix?: () => any
|
|
91
92
|
}>()
|
|
92
93
|
|
|
93
|
-
const { formProps } =
|
|
94
|
+
const { formProps } = injectFormContext()
|
|
94
95
|
|
|
95
96
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
96
97
|
size: 'default',
|
|
@@ -28,11 +28,12 @@
|
|
|
28
28
|
|
|
29
29
|
<script lang="ts" setup>
|
|
30
30
|
import { n, $n, o } from '@cat-kit/core'
|
|
31
|
-
import {
|
|
31
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
32
32
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
33
33
|
import { computed, getCurrentInstance, nextTick, onMounted, watch } from 'vue'
|
|
34
34
|
|
|
35
35
|
import type { NumberRangeInputEmits, NumberRangeInputProps, NumberRangeTuple } from '../../types'
|
|
36
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
36
37
|
import { UNumberInput } from '../number-input'
|
|
37
38
|
|
|
38
39
|
defineOptions({
|
|
@@ -58,7 +59,7 @@ function splitBound(): boolean {
|
|
|
58
59
|
return 'start' in p || 'onUpdate:start' in p || 'end' in p || 'onUpdate:end' in p
|
|
59
60
|
}
|
|
60
61
|
|
|
61
|
-
const { formProps } =
|
|
62
|
+
const { formProps } = injectFormContext()
|
|
62
63
|
|
|
63
64
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
64
65
|
size: 'default',
|
|
@@ -24,11 +24,12 @@
|
|
|
24
24
|
</template>
|
|
25
25
|
|
|
26
26
|
<script lang="ts" setup>
|
|
27
|
-
import {
|
|
27
|
+
import { useFormFallbackProps, useUserAction } from '@veltra/compositions'
|
|
28
28
|
import { bem } from '@veltra/utils'
|
|
29
29
|
import { computed, provide, shallowRef, useTemplateRef, watch } from 'vue'
|
|
30
30
|
|
|
31
31
|
import type { PaletteProps } from '../../types'
|
|
32
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
32
33
|
import { UTip } from '../tip'
|
|
33
34
|
import { HSV2RGB, RGB2HEX, HEX2RGBA, RGB2HSV } from './color-transform'
|
|
34
35
|
import { PaletteDIKey } from './di'
|
|
@@ -47,7 +48,7 @@ const props = withDefaults(defineProps<PaletteProps>(), {
|
|
|
47
48
|
readonly: undefined
|
|
48
49
|
})
|
|
49
50
|
|
|
50
|
-
const { formProps } =
|
|
51
|
+
const { formProps } = injectFormContext()
|
|
51
52
|
|
|
52
53
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
|
|
53
54
|
|
|
@@ -27,12 +27,13 @@
|
|
|
27
27
|
|
|
28
28
|
<script lang="ts" setup>
|
|
29
29
|
import { o } from '@cat-kit/core'
|
|
30
|
-
import {
|
|
30
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
31
31
|
import { Hide, View } from '@veltra/icons/normal'
|
|
32
32
|
import { bem } from '@veltra/utils'
|
|
33
33
|
import { computed, nextTick, shallowRef } from 'vue'
|
|
34
34
|
|
|
35
35
|
import type { PasswordInputProps } from '../../types'
|
|
36
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
36
37
|
import { UIcon } from '../icon'
|
|
37
38
|
import { UInput } from '../input'
|
|
38
39
|
|
|
@@ -41,7 +42,7 @@ defineOptions({
|
|
|
41
42
|
})
|
|
42
43
|
|
|
43
44
|
const props = withDefaults(defineProps<PasswordInputProps>(), {
|
|
44
|
-
clearable:
|
|
45
|
+
clearable: false,
|
|
45
46
|
disabled: undefined,
|
|
46
47
|
readonly: undefined
|
|
47
48
|
})
|
|
@@ -50,7 +51,7 @@ const slots = defineSlots<{
|
|
|
50
51
|
prefix?: () => any
|
|
51
52
|
}>()
|
|
52
53
|
|
|
53
|
-
const { formProps } =
|
|
54
|
+
const { formProps } = injectFormContext()
|
|
54
55
|
|
|
55
56
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
56
57
|
size: 'default',
|
|
@@ -32,12 +32,13 @@
|
|
|
32
32
|
</template>
|
|
33
33
|
|
|
34
34
|
<script lang="ts" setup>
|
|
35
|
-
import {
|
|
35
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
36
36
|
import { QuestionFilled } from '@veltra/icons/normal'
|
|
37
37
|
import { bem } from '@veltra/utils'
|
|
38
38
|
import { ref } from 'vue'
|
|
39
39
|
|
|
40
40
|
import type { PopConfirmProps, PopConfirmEmits } from '../../types'
|
|
41
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
41
42
|
import { UButton } from '../button'
|
|
42
43
|
import { UIcon } from '../icon'
|
|
43
44
|
import { UTip } from '../tip'
|
|
@@ -61,7 +62,7 @@ const cls = bem('pop-confirm')
|
|
|
61
62
|
|
|
62
63
|
const visible = ref(false)
|
|
63
64
|
|
|
64
|
-
const { formProps } =
|
|
65
|
+
const { formProps } = injectFormContext()
|
|
65
66
|
|
|
66
67
|
const { size } = useFormFallbackProps([formProps ?? {}], {
|
|
67
68
|
size: 'default'
|
|
@@ -23,11 +23,12 @@
|
|
|
23
23
|
</template>
|
|
24
24
|
|
|
25
25
|
<script lang="ts" setup>
|
|
26
|
-
import {
|
|
26
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
27
27
|
import { bem } from '@veltra/utils'
|
|
28
28
|
import { computed } from 'vue'
|
|
29
29
|
|
|
30
30
|
import type { RadioProps, RadioEmits } from '../../types'
|
|
31
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
31
32
|
|
|
32
33
|
defineOptions({
|
|
33
34
|
name: 'Radio'
|
|
@@ -43,7 +44,7 @@ defineEmits<RadioEmits>()
|
|
|
43
44
|
|
|
44
45
|
const cls = bem('radio')
|
|
45
46
|
|
|
46
|
-
const { formProps } =
|
|
47
|
+
const { formProps } = injectFormContext()
|
|
47
48
|
|
|
48
49
|
const { size, disabled } = useFormFallbackProps([formProps ?? {}, props], {
|
|
49
50
|
size: 'default',
|
|
@@ -63,7 +63,7 @@ $root-name: radio;
|
|
|
63
63
|
color: fn.use-var(text-color, disabled);
|
|
64
64
|
cursor: not-allowed;
|
|
65
65
|
@include m.bem($root-name, button) {
|
|
66
|
-
border-color: fn.use-var(border, color);
|
|
66
|
+
border-color: fn.use-var(border, muted-color);
|
|
67
67
|
background-color: fn.use-var(color, disabled);
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -19,10 +19,11 @@
|
|
|
19
19
|
</template>
|
|
20
20
|
|
|
21
21
|
<script lang="ts" setup>
|
|
22
|
-
import {
|
|
22
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
23
23
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
24
24
|
|
|
25
25
|
import type { RadioGroupProps, RadioGroupEmits } from '../../types'
|
|
26
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
26
27
|
import URadio from '../radio/radio.vue'
|
|
27
28
|
|
|
28
29
|
defineOptions({
|
|
@@ -40,7 +41,7 @@ const model = defineModel<any>()
|
|
|
40
41
|
|
|
41
42
|
const emit = defineEmits<RadioGroupEmits>()
|
|
42
43
|
|
|
43
|
-
const { formProps } =
|
|
44
|
+
const { formProps } = injectFormContext()
|
|
44
45
|
|
|
45
46
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
46
47
|
size: 'default',
|
|
@@ -77,12 +77,13 @@ import { LinkNode, AutoLinkNode } from '@lexical/link'
|
|
|
77
77
|
import { ListNode, ListItemNode, registerList } from '@lexical/list'
|
|
78
78
|
import { registerRichText } from '@lexical/rich-text'
|
|
79
79
|
import { HeadingNode, QuoteNode } from '@lexical/rich-text'
|
|
80
|
-
import {
|
|
80
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
81
81
|
import { bem } from '@veltra/utils'
|
|
82
82
|
import { createEditor, $getRoot, $createParagraphNode, type LexicalEditor } from 'lexical'
|
|
83
83
|
import { computed, onBeforeUnmount, onMounted, ref, shallowRef, useTemplateRef, watch } from 'vue'
|
|
84
84
|
|
|
85
85
|
import type { RichTextEditorProps } from '../../types'
|
|
86
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
86
87
|
import Toolbar from './toolbar.vue'
|
|
87
88
|
|
|
88
89
|
const props = withDefaults(defineProps<RichTextEditorProps>(), {
|
|
@@ -97,7 +98,7 @@ const model = defineModel<string>()
|
|
|
97
98
|
|
|
98
99
|
const cls = bem('rich-text-editor')
|
|
99
100
|
|
|
100
|
-
const { formProps } =
|
|
101
|
+
const { formProps } = injectFormContext()
|
|
101
102
|
|
|
102
103
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
|
|
103
104
|
|
|
@@ -6,7 +6,7 @@ $root-name: rich-text-editor;
|
|
|
6
6
|
|
|
7
7
|
@include m.b($root-name) {
|
|
8
8
|
width: 100%;
|
|
9
|
-
border: 1px solid fn.use-var(border-color);
|
|
9
|
+
border: 1px solid fn.use-var(border, muted-color);
|
|
10
10
|
border-radius: fn.use-var(radius, default);
|
|
11
11
|
background-color: fn.use-var(color, bg);
|
|
12
12
|
transition: border-color 0.25s ease;
|
|
@@ -101,7 +101,7 @@ $root-name: rich-text-editor;
|
|
|
101
101
|
appearance: none;
|
|
102
102
|
padding: 2px 24px 2px 8px;
|
|
103
103
|
height: 28px;
|
|
104
|
-
border: 1px solid fn.use-var(border-color);
|
|
104
|
+
border: 1px solid fn.use-var(border, muted-color);
|
|
105
105
|
border-radius: 4px;
|
|
106
106
|
background-color: transparent;
|
|
107
107
|
color: fn.use-var(text-color);
|
|
@@ -171,17 +171,17 @@ $root-name: rich-text-editor;
|
|
|
171
171
|
|
|
172
172
|
@include m.is(disabled) {
|
|
173
173
|
background-color: fn.use-var(color, disabled);
|
|
174
|
-
border-color: fn.use-var(border-color);
|
|
174
|
+
border-color: fn.use-var(border, muted-color);
|
|
175
175
|
cursor: not-allowed;
|
|
176
176
|
|
|
177
177
|
&:hover {
|
|
178
|
-
border-color: fn.use-var(border-color);
|
|
178
|
+
border-color: fn.use-var(border, muted-color);
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
|
|
182
182
|
@include m.is(readonly) {
|
|
183
183
|
&:hover {
|
|
184
|
-
border-color: fn.use-var(border-color);
|
|
184
|
+
border-color: fn.use-var(border, muted-color);
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
187
|
}
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
|
|
116
116
|
<script lang="ts" setup>
|
|
117
117
|
import { o } from '@cat-kit/core'
|
|
118
|
-
import {
|
|
118
|
+
import { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
|
|
119
119
|
import { vFocus } from '@veltra/directives'
|
|
120
120
|
import { ArrowDown, Search } from '@veltra/icons/normal'
|
|
121
121
|
import { bem, FORM_EMPTY_CONTENT, scrollIntoContainerView, withUnit } from '@veltra/utils'
|
|
@@ -128,6 +128,7 @@ import type {
|
|
|
128
128
|
DropdownExposed,
|
|
129
129
|
ScrollExposed
|
|
130
130
|
} from '../../types'
|
|
131
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
131
132
|
import { UDropdown } from '../dropdown'
|
|
132
133
|
import { UEmpty } from '../empty'
|
|
133
134
|
import { UIcon } from '../icon'
|
|
@@ -160,7 +161,7 @@ const cls = bem('select')
|
|
|
160
161
|
|
|
161
162
|
const optionClass = cls.e('option')
|
|
162
163
|
|
|
163
|
-
const { formProps } =
|
|
164
|
+
const { formProps } = injectFormContext()
|
|
164
165
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
165
166
|
size: 'default',
|
|
166
167
|
disabled: false,
|
|
@@ -174,7 +175,7 @@ const selected = shallowRef<Record<string, any>>()
|
|
|
174
175
|
const displayedValue = computed(() => {
|
|
175
176
|
if (label.value) return label.value
|
|
176
177
|
|
|
177
|
-
return selected.value ? o(selected.value).get(props.labelKey) : String(props.modelValue)
|
|
178
|
+
return selected.value ? o(selected.value).get(props.labelKey) : String(props.modelValue ?? '')
|
|
178
179
|
})
|
|
179
180
|
|
|
180
181
|
const dropdownRef = shallowRef<DropdownExposed>()
|
|
@@ -20,11 +20,12 @@
|
|
|
20
20
|
</template>
|
|
21
21
|
|
|
22
22
|
<script lang="ts" setup generic="T extends number | [number, number]">
|
|
23
|
-
import {
|
|
23
|
+
import { useFormFallbackProps, useUserAction } from '@veltra/compositions'
|
|
24
24
|
import { bem } from '@veltra/utils'
|
|
25
25
|
import { computed, provide, watch } from 'vue'
|
|
26
26
|
|
|
27
27
|
import type { SliderProps, SliderEmits } from '../../types'
|
|
28
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
28
29
|
import { sliderContextKey } from './di'
|
|
29
30
|
import SliderThumb from './slider-thumb.vue'
|
|
30
31
|
import { useSlider } from './use-slider'
|
|
@@ -44,7 +45,7 @@ const emit = defineEmits<SliderEmits<T>>()
|
|
|
44
45
|
|
|
45
46
|
const cls = bem('slider')
|
|
46
47
|
|
|
47
|
-
const { formProps } =
|
|
48
|
+
const { formProps } = injectFormContext()
|
|
48
49
|
|
|
49
50
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
|
|
50
51
|
|
|
@@ -57,7 +57,7 @@ $root-name: switch;
|
|
|
57
57
|
align-items: center;
|
|
58
58
|
border-radius: 100px;
|
|
59
59
|
background-color: fn.use-var(bg-color, bottom);
|
|
60
|
-
border: 1px solid fn.use-var(border, color);
|
|
60
|
+
border: 1px solid fn.use-var(border, muted-color);
|
|
61
61
|
transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
|
|
62
62
|
padding: 2px;
|
|
63
63
|
flex-shrink: 0;
|
|
@@ -23,11 +23,12 @@
|
|
|
23
23
|
</template>
|
|
24
24
|
|
|
25
25
|
<script lang="ts" setup>
|
|
26
|
-
import {
|
|
26
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
27
27
|
import { bem } from '@veltra/utils'
|
|
28
28
|
import { computed } from 'vue'
|
|
29
29
|
|
|
30
30
|
import type { SwitchEmits, SwitchProps, _SwitchExposed } from '../../types'
|
|
31
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
31
32
|
|
|
32
33
|
defineOptions({
|
|
33
34
|
name: 'Switch'
|
|
@@ -44,7 +45,7 @@ const model = defineModel<boolean>()
|
|
|
44
45
|
|
|
45
46
|
const cls = bem('switch')
|
|
46
47
|
|
|
47
|
-
const { formProps } =
|
|
48
|
+
const { formProps } = injectFormContext()
|
|
48
49
|
|
|
49
50
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
|
|
50
51
|
|
|
@@ -11,12 +11,13 @@
|
|
|
11
11
|
</template>
|
|
12
12
|
|
|
13
13
|
<script lang="ts" setup>
|
|
14
|
-
import {
|
|
14
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
15
15
|
import { Close } from '@veltra/icons/normal'
|
|
16
16
|
import { bem } from '@veltra/utils'
|
|
17
17
|
import { computed } from 'vue'
|
|
18
18
|
|
|
19
19
|
import type { TagEmits, TagProps } from '../../types'
|
|
20
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
20
21
|
import { UIcon } from '../icon'
|
|
21
22
|
|
|
22
23
|
defineOptions({
|
|
@@ -29,7 +30,7 @@ const props = defineProps<TagProps>()
|
|
|
29
30
|
|
|
30
31
|
const emit = defineEmits<TagEmits>()
|
|
31
32
|
|
|
32
|
-
const { formProps } =
|
|
33
|
+
const { formProps } = injectFormContext()
|
|
33
34
|
const { size } = useFormFallbackProps([formProps ?? {}, props], {
|
|
34
35
|
size: 'default'
|
|
35
36
|
})
|
|
@@ -7,7 +7,7 @@ $root-name: textarea;
|
|
|
7
7
|
@include m.b($root-name) {
|
|
8
8
|
position: relative;
|
|
9
9
|
width: 100%;
|
|
10
|
-
border: fn.use-var(border);
|
|
10
|
+
border: fn.use-var(border-muted);
|
|
11
11
|
box-shadow: fn.use-var(shadow, emboss);
|
|
12
12
|
transition: border-color 0.25s ease, box-shadow 0.25s ease;
|
|
13
13
|
overflow: hidden;
|
|
@@ -40,12 +40,13 @@
|
|
|
40
40
|
</template>
|
|
41
41
|
|
|
42
42
|
<script lang="ts" setup>
|
|
43
|
-
import { useFocus,
|
|
43
|
+
import { useFocus, useFormFallbackProps } from '@veltra/compositions'
|
|
44
44
|
import { Close } from '@veltra/icons/normal'
|
|
45
45
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
46
46
|
import { computed, ref, shallowRef, watch } from 'vue'
|
|
47
47
|
|
|
48
48
|
import type { TextareaProps, TextareaEmits, ComponentSize } from '../../types'
|
|
49
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
49
50
|
import { UIcon } from '../icon'
|
|
50
51
|
import { calcTextareaHeight } from './utils'
|
|
51
52
|
|
|
@@ -64,7 +65,7 @@ const props = withDefaults(defineProps<TextareaProps>(), {
|
|
|
64
65
|
|
|
65
66
|
const cls = bem('textarea')
|
|
66
67
|
|
|
67
|
-
const { formProps } =
|
|
68
|
+
const { formProps } = injectFormContext()
|
|
68
69
|
|
|
69
70
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props], {
|
|
70
71
|
size: 'default' as ComponentSize,
|
|
@@ -31,12 +31,13 @@
|
|
|
31
31
|
</template>
|
|
32
32
|
|
|
33
33
|
<script lang="ts" setup>
|
|
34
|
-
import {
|
|
34
|
+
import { useFormFallbackProps, useVirtualizer } from '@veltra/compositions'
|
|
35
35
|
import { bem, nextFrame, scrollIntoContainerView } from '@veltra/utils'
|
|
36
36
|
import { computed, provide, shallowRef, useSlots, watch, watchEffect, type VNode } from 'vue'
|
|
37
37
|
|
|
38
38
|
import type { TreeProps, TreeEmit, _TreeExposed } from '../../types'
|
|
39
39
|
import type { ScrollExposed } from '../../types'
|
|
40
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
40
41
|
import { UEmpty } from '../empty'
|
|
41
42
|
import { UScroll } from '../scroll'
|
|
42
43
|
import { TreeDIKey, type TreeConText, type TreeSlotsScope } from './di'
|
|
@@ -63,7 +64,7 @@ const emit = defineEmits<TreeEmit>()
|
|
|
63
64
|
|
|
64
65
|
const cls = bem('tree')
|
|
65
66
|
|
|
66
|
-
const { formProps } =
|
|
67
|
+
const { formProps } = injectFormContext()
|
|
67
68
|
|
|
68
69
|
const { size } = useFormFallbackProps([formProps ?? {}, props], {
|
|
69
70
|
size: 'default'
|
|
@@ -60,12 +60,13 @@
|
|
|
60
60
|
|
|
61
61
|
<script lang="ts" setup>
|
|
62
62
|
import { dfs, o } from '@cat-kit/core'
|
|
63
|
-
import {
|
|
63
|
+
import { useFormFallbackProps } from '@veltra/compositions'
|
|
64
64
|
import { ArrowDown, Search } from '@veltra/icons/normal'
|
|
65
65
|
import { bem, FORM_EMPTY_CONTENT } from '@veltra/utils'
|
|
66
66
|
import { computed, nextTick, shallowRef, watch } from 'vue'
|
|
67
67
|
|
|
68
68
|
import type { TreeSelectProps, TreeSelectEmits, TreeExposed } from '../../types'
|
|
69
|
+
import { injectFormContext } from '../../utils/form-context'
|
|
69
70
|
import { UDropdown } from '../dropdown'
|
|
70
71
|
import { UIcon } from '../icon'
|
|
71
72
|
import { UInput } from '../input'
|
|
@@ -122,7 +123,7 @@ const model = defineModel<string | number>()
|
|
|
122
123
|
|
|
123
124
|
const label = shallowRef<string>()
|
|
124
125
|
|
|
125
|
-
const { formProps } =
|
|
126
|
+
const { formProps } = injectFormContext()
|
|
126
127
|
|
|
127
128
|
const { size, disabled, readonly } = useFormFallbackProps([formProps ?? {}, props])
|
|
128
129
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type InjectionKey, inject, provide } from 'vue'
|
|
2
|
+
|
|
3
|
+
import type { FormProps } from '../types/form'
|
|
4
|
+
|
|
5
|
+
type DIContext = {
|
|
6
|
+
/** 表单属性 */
|
|
7
|
+
formProps: FormProps
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const FormComponentDIKey: InjectionKey<DIContext> = Symbol('FormComponentDIKey')
|
|
11
|
+
|
|
12
|
+
export function provideFormContext(props: FormProps): void {
|
|
13
|
+
if (props) {
|
|
14
|
+
return provide(FormComponentDIKey, { formProps: props })
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function injectFormContext(): {
|
|
19
|
+
/** 是否在表单中 */
|
|
20
|
+
inForm: boolean
|
|
21
|
+
} & Partial<DIContext> {
|
|
22
|
+
const context = inject(FormComponentDIKey, undefined) || {}
|
|
23
|
+
return { inForm: !!context, ...context }
|
|
24
|
+
}
|