{"version":3,"file":"JEditor.vue2.cjs","sources":["../../../../src/components/atoms/JEditor.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed, onMounted, onUnmounted } from 'vue'\nimport { MdEditor } from 'md-editor-v3'\nimport 'md-editor-v3/lib/style.css'\n\nconst props = withDefaults(\n  defineProps<{\n    /** 마크다운 내용 (v-model) */\n    modelValue?: string\n    /** 플레이스홀더 텍스트 */\n    placeholder?: string\n    /** 비활성화 상태 */\n    disabled?: boolean\n    /** 읽기 전용 상태 */\n    readonly?: boolean\n    /** 에디터 높이 */\n    height?: string | number\n    /** 테마 (light/dark) - 설정하지 않으면 자동으로 다크모드 감지 */\n    theme?: 'light' | 'dark'\n    /** 추가 CSS 클래스 */\n    class?: string\n  }>(),\n  {\n    modelValue: '',\n    placeholder: '마크다운을 입력하세요...',\n    disabled: false,\n    readonly: false,\n    height: '300px',\n  },\n)\n\nconst emit = defineEmits<{\n  'update:modelValue': [value: string]\n  'change': [value: string]\n  'save': [value: string]\n}>()\n\n// 다크모드 상태\nconst isDarkMode = ref(false)\n\n// 다크모드 감지 함수\nconst detectDarkMode = () => {\n  isDarkMode.value = document.documentElement.classList.contains('dark')\n}\n\n// 현재 테마 계산 (props.theme이 있으면 그것 사용, 없으면 자동 감지)\nconst currentTheme = computed(() => {\n  if (props.theme) {\n    return props.theme\n  }\n  return isDarkMode.value ? 'dark' : 'light'\n})\n\n// MutationObserver로 다크모드 변경 감지\nlet darkModeObserver: MutationObserver | null = null\n\nonMounted(() => {\n  // 초기 다크모드 상태 감지\n  detectDarkMode()\n  \n  // MutationObserver로 class 변경 감지\n  darkModeObserver = new MutationObserver(() => {\n    detectDarkMode()\n  })\n  \n  darkModeObserver.observe(document.documentElement, {\n    attributes: true,\n    attributeFilter: ['class'],\n  })\n})\n\nonUnmounted(() => {\n  if (darkModeObserver) {\n    darkModeObserver.disconnect()\n  }\n})\n\nconst handleChange = (value: string) => {\n  emit('update:modelValue', value)\n  emit('change', value)\n}\n\nconst handleSave = (value: string) => {\n  emit('save', value)\n}\n</script>\n\n<template>\n  <div :class=\"['j-editor-wrapper', props.class]\">\n    <MdEditor\n      :model-value=\"modelValue\"\n      :placeholder=\"placeholder\"\n      :disabled=\"disabled\"\n      :read-only=\"readonly\"\n      :editor-class-name=\"'j-editor'\"\n      :preview-class-name=\"'j-editor-preview'\"\n      :style=\"{ height: typeof height === 'number' ? `${height}px` : height }\"\n      :theme=\"currentTheme\"\n      language=\"en-US\"\n      @update:model-value=\"handleChange\"\n      @on-save=\"handleSave\"\n    />\n  </div>\n</template>\n\n<style scoped>\n.j-editor-wrapper {\n  @apply w-full h-full;\n}\n</style>\n"],"names":["props","__props","emit","__emit","isDarkMode","ref","detectDarkMode","currentTheme","computed","darkModeObserver","onMounted","onUnmounted","handleChange","value","handleSave","_createElementBlock","_normalizeClass","_createVNode","_unref","MdEditor","_normalizeStyle"],"mappings":"+jBAKA,MAAMA,EAAQC,EA0BRC,EAAOC,EAOPC,EAAaC,EAAAA,IAAI,EAAK,EAGtBC,EAAiB,IAAM,CAC3BF,EAAW,MAAQ,SAAS,gBAAgB,UAAU,SAAS,MAAM,CACvE,EAGMG,EAAeC,EAAAA,SAAS,IACxBR,EAAM,MACDA,EAAM,MAERI,EAAW,MAAQ,OAAS,OACpC,EAGD,IAAIK,EAA4C,KAEhDC,EAAAA,UAAU,IAAM,CAEdJ,EAAA,EAGAG,EAAmB,IAAI,iBAAiB,IAAM,CAC5CH,EAAA,CACF,CAAC,EAEDG,EAAiB,QAAQ,SAAS,gBAAiB,CACjD,WAAY,GACZ,gBAAiB,CAAC,OAAO,CAAA,CAC1B,CACH,CAAC,EAEDE,EAAAA,YAAY,IAAM,CACZF,GACFA,EAAiB,WAAA,CAErB,CAAC,EAED,MAAMG,EAAgBC,GAAkB,CACtCX,EAAK,oBAAqBW,CAAK,EAC/BX,EAAK,SAAUW,CAAK,CACtB,EAEMC,EAAcD,GAAkB,CACpCX,EAAK,OAAQW,CAAK,CACpB,8BAIEE,EAAAA,mBAcM,MAAA,CAdA,MAAKC,EAAAA,eAAA,CAAA,mBAAuBhB,EAAM,KAAK,CAAA,CAAA,GAC3CiB,cAYEC,EAAAA,MAAAC,EAAAA,QAAA,EAAA,CAXC,cAAalB,EAAA,WACb,YAAaA,EAAA,YACb,SAAUA,EAAA,SACV,YAAWA,EAAA,SACX,oBAAmB,WACnB,qBAAoB,mBACpB,MAAKmB,EAAAA,eAAA,CAAA,OAAA,OAAmBnB,EAAA,QAAM,SAAA,GAAmBA,EAAA,MAAM,KAAOA,EAAA,OAAM,EACpE,MAAOM,EAAA,MACR,SAAS,QACR,sBAAoBK,EACpB,SAASE,CAAA"}