fix(Popover): improve hover mode on touch devices

This commit is contained in:
Benjamin Canac
2024-03-04 11:47:34 +01:00
parent b74bf9f666
commit b50fbcf760

View File

@@ -7,7 +7,8 @@
:disabled="disabled" :disabled="disabled"
:class="ui.trigger" :class="ui.trigger"
role="button" role="button"
@mouseover="onMouseOver" @mouseenter="onMouseEnter"
@touchstart.prevent="onTouchStart"
> >
<slot :open="open" :close="close"> <slot :open="open" :close="close">
<button :disabled="disabled"> <button :disabled="disabled">
@@ -20,7 +21,7 @@
<div v-if="open" :class="[ui.overlay.base, ui.overlay.background]" /> <div v-if="open" :class="[ui.overlay.base, ui.overlay.background]" />
</Transition> </Transition>
<div v-if="open" ref="container" :class="[ui.container, ui.width]" :style="containerStyle" @mouseover="onMouseOver"> <div v-if="open" ref="container" :class="[ui.container, ui.width]" :style="containerStyle">
<Transition appear v-bind="ui.transition"> <Transition appear v-bind="ui.transition">
<div> <div>
<div v-if="popper.arrow" data-popper-arrow :class="Object.values(ui.arrow)" /> <div v-if="popper.arrow" data-popper-arrow :class="Object.values(ui.arrow)" />
@@ -153,7 +154,19 @@ export default defineComponent({
} }
}) })
function onMouseOver () { function onTouchStart () {
if (!popoverApi.value) {
return
}
if (popoverApi.value.popoverState === 0) {
popoverApi.value.closePopover()
} else {
popoverApi.value.togglePopover()
}
}
function onMouseEnter () {
if (props.mode !== 'hover' || !popoverApi.value) { if (props.mode !== 'hover' || !popoverApi.value) {
return return
} }
@@ -223,7 +236,8 @@ export default defineComponent({
trigger, trigger,
container, container,
containerStyle, containerStyle,
onMouseOver, onTouchStart,
onMouseEnter,
onMouseLeave onMouseLeave
} }
} }