Overlay Provider
Demo
Component
vue
<script lang="ts">
</script>
<script setup lang="ts">
import type { Overlay } from '@/ui/composables/useOverlay'
import { useOverlay } from '@/ui/composables/useOverlay'
import { computed } from 'vue'
const { overlays, unMount, close } = useOverlay()
const mountedOverlays = computed(() => overlays.filter((overlay: Overlay) => overlay.isMounted))
function onAfterLeave(id: symbol) {
close(id)
unMount(id)
}
function 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>vue
<script lang="ts">
</script>
<script setup lang="ts">
import type { Overlay } from '@/ui/composables/useOverlay'
import { useOverlay } from '@/ui/composables/useOverlay'
import { computed } from 'vue'
const { overlays, unMount, close } = useOverlay()
const mountedOverlays = computed(() => overlays.filter((overlay: Overlay) => overlay.isMounted))
function onAfterLeave(id: symbol) {
close(id)
unMount(id)
}
function 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>Theme
ts
export default {}View Nuxt UI theme
ts
export default {}Test
To test this component, you can use the following test file:
ts
import { expect, it } from 'vitest'
// No tests for this component
it('passes', () => {
expect(true).toBe(true)
})ts
import { expect, it } from 'vitest'
// No tests for this component
it('passes', () => {
expect(true).toBe(true)
})