Skip to content
Snippets Groups Projects
Modal.vue 1.05 KiB
<script setup lang="ts">
const title = defineProp<string>('title', { required: true })
const open = defineModel<boolean>({ required: true })
</script>

<template>
  <Teleport to="body">
    <Transition mode="out-in">
      <div v-if="open" @click.exact.stop="open = false" class="funkwhale overlay">
        <div @click.stop class="funkwhale modal" :class="$slots.alert && 'has-alert'" >
          <h2>
            {{ title }}
            <FwButton icon="bi-x-lg" color="secondary" variant="ghost" @click="open = false" />
          </h2>

          <div class="modal-content">
            <Transition>
              <div v-if="$slots.alert" class="alert-container">
                <div>
                  <slot name="alert" />
                </div>
              </div>
            </Transition>

            <slot />
          </div>
          <div v-if="$slots.actions" class="modal-actions">
            <slot name="actions" />
          </div>
        </div>
      </div>
    </Transition>
  </Teleport>
</template>

<style lang="scss">
@import './style.scss'
</style>