mirror of
https://github.com/ArthurDanjou/ui.git
synced 2026-01-15 04:29:37 +01:00
30 lines
715 B
Vue
30 lines
715 B
Vue
<script setup lang="ts">
|
|
import { computed } from 'vue'
|
|
import { useOverlay, type Overlay } from '../composables/useOverlay'
|
|
|
|
const { overlays, unMount, close } = useOverlay()
|
|
|
|
const mountedOverlays = computed(() => overlays.filter((overlay: Overlay) => overlay.isMounted))
|
|
|
|
const onAfterLeave = (id: symbol) => {
|
|
close(id)
|
|
unMount(id)
|
|
}
|
|
|
|
const onClose = (id: symbol, value: any) => {
|
|
close(id, value)
|
|
}
|
|
</script>
|
|
|
|
<template>
|
|
<component
|
|
:is="overlay.component"
|
|
v-for="overlay in mountedOverlays"
|
|
:key="overlay.id"
|
|
v-bind="overlay.props"
|
|
v-model:open="overlay.modelValue"
|
|
@close="(value:any) => onClose(overlay.id, value)"
|
|
@after:leave="onAfterLeave(overlay.id)"
|
|
/>
|
|
</template>
|