{"file":"Modal-B3LAJDBe.js","mappings":"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","names":["_push","_parent","_","_scopeId","$slots","_ssrRenderSlot","_createBlock","_renderSlot","_createVNode","_unref"],"sources":["../../../../components/Modal.vue"],"sourcesContent":["<script setup>\nimport { ref, onBeforeUnmount, watch } from 'vue';\nimport { motion } from 'motion-v';\nimport { AnimatePresence } from 'motion-v';\n\nconst props = defineProps({\n  title: {\n    type: String,\n    required: false,\n  },\n  type: {\n    type: String,\n    required: false,\n    default: \"default\",\n  },\n  extra_types: {\n    type: Array,\n    required: false,\n    default: [],\n  },\n  isOpen: {\n    type: Boolean,\n    required: false,\n    default: false,\n  },\n  showHeader: {\n    type: Boolean,\n    required: false,\n    default: true,\n  },\n  showClose: {\n    type: Boolean,\n    required: false,\n    default: true,\n  },\n  previousModal: {\n    type: Function,\n    required: false,\n    default: null,\n  },\n});\n\nconst emits = defineEmits([\"close\", \"open\"]);\n\nconst isOpen = ref(props.isOpen);\n\n// props.isOpen 변경 시 내부 ref 동기화 (AnimatePresence가 exit 애니메이션을 감지하도록)\nwatch(() => props.isOpen, (newValue) => {\n  isOpen.value = newValue;\n  if (newValue) {\n    if (process.client) {\n      document.addEventListener('keydown', handleEscapeKey);\n    }\n  } else {\n    if (process.client) {\n      document.removeEventListener('keydown', handleEscapeKey);\n    }\n  }\n}, { immediate: true });\n\nfunction handleEscapeKey(event) {\n  if (event.key === 'Escape' || event.keyCode === 27) {\n    close();\n  }\n}\n\nconst close = () => {\n  // 이전 모달이 있으면 먼저 열기\n  if (props.previousModal) {\n    props.previousModal();\n  }\n  \n  isOpen.value = false;\n  emits('close');\n  if (process.client) {\n    document.removeEventListener('keydown', handleEscapeKey);\n  }\n};\n\nconst open = () => {\n  isOpen.value = true;\n  emits('open');\n  if (process.client) {\n    document.addEventListener('keydown', handleEscapeKey);\n  }\n};\n\nconst isOpened = () => {\n  return isOpen.value;\n};\n\nonBeforeUnmount(() => {\n  if (process.client) {\n    document.removeEventListener('keydown', handleEscapeKey);\n  }\n});\n\ndefineExpose({\n  close,\n  open,\n  isOpened,\n});\n</script>\n\n<template>\n  <Teleport to=\"body\">\n    <AnimatePresence>\n      <div v-if=\"isOpen\" key=\"modal-wrapper\" class=\"modal\" @click=\"close\">\n        <motion.div :class=\"`modal__content modal__type--${props.type} ${props.extra_types.join(' ')}`\" :initial=\"{\n          opacity: 0,\n          scale: 0.7,\n          y: 20\n        }\" :animate=\"{\n          opacity: 1,\n          scale: 1,\n          y: 0,\n          transition: {\n            type: 'spring',\n            stiffness: 400,\n            damping: 20\n          }\n        }\" :exit=\"{\n            opacity: 0,\n            scale: 0.9,\n            y: -10,\n            transition: {\n              duration: 0.15,\n              ease: [0.4, 0, 0.2, 1]\n            }\n          }\" @click.stop>\n          <div class=\"modal__content-header\" v-if=\"props.showHeader && $slots.header\">\n            <slot name=\"header\" :close=\"close\" />\n          </div>\n\n          <div class=\"modal__content-header\" v-else-if=\"props.showHeader && !$slots.header\">\n            <strong class=\"modal__content-title\">{{ title }}</strong>\n            <button type=\"button\" class=\"modal__content-close ico-close\" @click=\"close\" v-if=\"props.showClose\">\n              <span class=\"blind\">닫기</span>\n            </button>\n          </div>\n\n          <slot :close=\"close\" />\n        </motion.div>\n      </div>\n    </AnimatePresence>\n  </Teleport>\n</template>\n\n<style scoped></style>"],"version":3}