<template>
  <div v-if="modelValue" class="fixed inset-0 z-50">
    <Transition name="drawer-backdrop">
      <div class="absolute inset-0 bg-black/40" @click="close" />
    </Transition>
    <Transition name="drawer-panel">
      <div class="absolute right-0 top-0 h-full w-full max-w-md bg-white shadow-xl flex flex-col">
        <div class="shrink-0 flex items-center justify-between px-[20px] pt-8 pb-8">
          <h2 class="text-[32px] font-semibold text-primary-500">
            {{ title }}
          </h2>
        </div>
        <div class="min-h-0 flex-1 overflow-y-auto px-[20px] pb-4">
          <slot />
        </div>
      </div>
    </Transition>
  </div>
</template>

<script setup lang="ts">
const props = defineProps<{ modelValue: boolean; title?: string }>()
const emit = defineEmits<{ (e: 'update:modelValue', value: boolean): void }>()

const close = () => emit('update:modelValue', false)
</script>

<style scoped>
.drawer-backdrop-enter-active,
.drawer-backdrop-leave-active {
  transition: opacity 0.2s ease;
}

.drawer-backdrop-enter-from,
.drawer-backdrop-leave-to {
  opacity: 0;
}

.drawer-panel-enter-active,
.drawer-panel-leave-active {
  transition: transform 0.2s ease, opacity 0.2s ease;
}

.drawer-panel-enter-from,
.drawer-panel-leave-to {
  transform: translateX(100%);
  opacity: 0;
}
</style>
