Skip to content

Commit 7af2d30

Browse files
Merge branch 'dev'
2 parents b488e86 + 8def7bf commit 7af2d30

File tree

3 files changed

+65
-21
lines changed

3 files changed

+65
-21
lines changed

Diff for: packages/devui-vue/devui/select/src/select.scss

+49-14
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ $select-item-min-height: 36px;
3939

4040
.#{$devui-prefix}-tag {
4141
margin: 4px 0 4px 4px;
42+
4243
.#{$devui-prefix}-tag__item.#{$devui-prefix}-tag--md {
4344
height: 18px;
4445
line-height: 16px;
@@ -51,6 +52,7 @@ $select-item-min-height: 36px;
5152

5253
&--sm {
5354
font-size: $devui-font-size-sm;
55+
5456
.#{$devui-prefix}-tag {
5557
margin: 2px 0 2px 4px;
5658

@@ -151,6 +153,7 @@ $select-item-min-height: 36px;
151153
flex-wrap: wrap;
152154
padding-right: 28px;
153155
cursor: pointer;
156+
154157
.#{$devui-prefix}-select__multiple--input {
155158
display: flex;
156159
max-width: 100%;
@@ -330,20 +333,6 @@ $select-item-min-height: 36px;
330333
}
331334
}
332335

333-
.fade-enter-active,
334-
.fade-leave-active {
335-
transform: scale3d(0, 1, 0, 0.9999) translate3d(0, 1, 0, 0);
336-
transform-origin: 0 0%;
337-
opacity: 1;
338-
transition: transform, opacity $transition-base-time ease-out;
339-
}
340-
341-
.fade-enter-from,
342-
.fade-leave-to {
343-
transform: scale3d(0, 1, 0, 0) translate3d(0, 1, 0, -4px);
344-
opacity: 0;
345-
transition: transform, opacity $transition-base-time ease-in;
346-
}
347336
.#{$devui-prefix}-select__dropdown--empty {
348337
text-align: center;
349338
font-size: $select-item-font-size;
@@ -377,3 +366,49 @@ $select-item-min-height: 36px;
377366
color: $devui-aide-text;
378367
}
379368
}
369+
370+
.fade {
371+
&-bottom {
372+
&-enter-from,
373+
&-leave-to {
374+
opacity: 0.8;
375+
transform: scaleY(0.8) translateY(-4px);
376+
}
377+
378+
&-enter-to,
379+
&-leave-from {
380+
opacity: 1;
381+
transform: scaleY(0.9999) translateY(0);
382+
}
383+
384+
&-enter-active {
385+
transition: transform 0.2s cubic-bezier(0.16, 0.75, 0.5, 1), opacity 0.2s cubic-bezier(0.16, 0.75, 0.5, 1);
386+
}
387+
388+
&-leave-active {
389+
transition: transform 0.2s cubic-bezier(0.5, 0, 0.84, 0.25), opacity 0.2s cubic-bezier(0.5, 0, 0.84, 0.25);
390+
}
391+
}
392+
393+
&-top {
394+
&-enter-from,
395+
&-leave-to {
396+
opacity: 0.8;
397+
transform: scaleY(0.8) translateY(4px);
398+
}
399+
400+
&-enter-to,
401+
&-leave-from {
402+
opacity: 1;
403+
transform: scaleY(0.9999) translateY(0);
404+
}
405+
406+
&-enter-active {
407+
transition: transform 0.2s cubic-bezier(0.16, 0.75, 0.5, 1), opacity 0.2s cubic-bezier(0.16, 0.75, 0.5, 1);
408+
}
409+
410+
&-leave-active {
411+
transition: transform 0.2s cubic-bezier(0.5, 0, 0.84, 0.25), opacity 0.2s cubic-bezier(0.5, 0, 0.84, 0.25);
412+
}
413+
}
414+
}

Diff for: packages/devui-vue/devui/select/src/select.tsx

+15-6
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
withModifiers,
1313
onUnmounted,
1414
nextTick,
15+
computed
1516
} from 'vue';
1617
import type { SetupContext } from 'vue';
1718
import useSelect from './use-select';
@@ -72,9 +73,18 @@ export default defineComponent({
7273
const dropdownEmptyCls = ns.em('dropdown', 'empty');
7374
ctx.expose({ focus, blur, toggleChange });
7475
const isRender = ref<boolean>(false);
76+
const currentPosition = ref('bottom');
7577
const position = ref<Placement[]>(['bottom-start', 'top-start']);
7678
const dropdownWidth = ref('0');
7779

80+
const handlePositionChange = (pos: string) => {
81+
currentPosition.value = pos.split('-')[0] === 'top' ? 'top' : 'bottom';
82+
};
83+
const styles = computed(() => ({
84+
transformOrigin: currentPosition.value === 'top' ? '0% 100%' : '0% 0%',
85+
'z-index': 'var(--devui-z-index-dropdown, 1052)'
86+
}));
87+
7888
const updateDropdownWidth = () => {
7989
dropdownWidth.value = originRef?.value?.clientWidth ? originRef.value.clientWidth + 'px' : '100%';
8090
};
@@ -134,19 +144,18 @@ export default defineComponent({
134144
}, ['stop'])}>
135145
<SelectContent ref={selectRef}></SelectContent>
136146
<Teleport to="body">
137-
<Transition name="fade">
147+
<Transition name={`fade-${currentPosition.value}`}>
138148
<FlexibleOverlay
149+
v-show={isOpen.value}
139150
v-model={isRender.value}
140151
ref={dropdownRef}
141152
origin={originRef.value}
142153
align="start"
143154
offset={4}
144155
position={position.value}
145-
style={{
146-
visibility: isOpen.value ? 'visible' : 'hidden',
147-
'z-index': isOpen.value ? 'var(--devui-z-index-dropdown, 1052)' : -1,
148-
}}>
149-
<div class={dropdownCls} style={{ width: `${dropdownWidth.value}`, visibility: isOpen.value ? 'visible' : 'hidden' }}>
156+
onPositionChange={handlePositionChange}
157+
style={styles.value}>
158+
<div class={dropdownCls} style={{ width: `${dropdownWidth.value}` }}>
150159
<ul class={listCls} v-show={!isLoading.value} ref={dropdownContainer}>
151160
{isShowCreateOption.value && (
152161
<Option value={filterQuery.value} name={filterQuery.value} create>

Diff for: packages/devui-vue/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-devui",
3-
"version": "1.6.3-markdown.3",
3+
"version": "1.6.3-select.0",
44
"license": "MIT",
55
"description": "DevUI components based on Vite and Vue3",
66
"keywords": [

0 commit comments

Comments
 (0)