{"version":3,"file":"index.vue2.mjs","sources":["../../../../../../packages/preview/supports/msg-preview/index.vue"],"sourcesContent":["<script lang='ts' setup>\nimport {ref, watch} from 'vue'\nimport MsgReader from '@kenjiuno/msgreader'\nimport type {FieldsData} from '@kenjiuno/msgreader'\nimport type {PreviewProps} from '../../preview.interface'\nimport {getFileRenderByFile, getFileRenderByUrl} from '../../utils/utils'\n\nconst props = withDefaults(\n  defineProps<PreviewProps>(),\n  {\n    url: () => null,\n    file: () => null,\n  },\n)\nconst emit = defineEmits<{\n  rendered: []\n  error: [error: Error]\n}>()\n\nconst msgData = ref<FieldsData | null>(null)\n\nfunction parseMsgBuffer(buffer: ArrayBuffer): void {\n  try {\n    const reader = new MsgReader(buffer)\n    msgData.value = reader.getFileData()\n    emit('rendered')\n  } catch (e) {\n    emit('error', e instanceof Error ? e : new Error('Failed to parse MSG file'))\n  }\n}\n\nwatch(\n  () => props.file,\n  (file) => {\n    if (file) {\n      getFileRenderByFile(file).then((render) => {\n        parseMsgBuffer(render as ArrayBuffer)\n      }).catch((e: Error) => {\n        emit('error', e)\n      })\n    }\n  },\n  {immediate: true},\n)\n\nwatch(\n  () => props.url,\n  (url) => {\n    if (url && !props.file) {\n      getFileRenderByUrl(url).then((render) => {\n        parseMsgBuffer(render as ArrayBuffer)\n      }).catch((e: Error) => {\n        emit('error', e)\n      })\n    }\n  },\n  {immediate: true},\n)\n\nfunction formatRecipients(recipients?: FieldsData[]): string {\n  if (!recipients || recipients.length === 0) return ''\n  return recipients.map(r => {\n    const name = r.name || ''\n    const email = r.email || r.smtpAddress || ''\n    if (name && email) return `${name} <${email}>`\n    return name || email\n  }).join('; ')\n}\n\nfunction formatDate(dateStr?: string): string {\n  if (!dateStr) return ''\n  try {\n    const date = new Date(dateStr)\n    return date.toLocaleString()\n  } catch {\n    return dateStr\n  }\n}\n</script>\n\n<template>\n  <div v-if=\"msgData\" class=\"msg-preview\">\n    <div class=\"msg-header\">\n      <h2 class=\"msg-subject\">{{ msgData.subject || '(No Subject)' }}</h2>\n      <div class=\"msg-meta\">\n        <div v-if=\"msgData.senderName || msgData.senderEmail\" class=\"msg-field\">\n          <span class=\"msg-label\">From</span>\n          <span class=\"msg-value\">\n            {{ msgData.senderName }}\n            <span v-if=\"msgData.senderEmail\" class=\"msg-email\">&lt;{{ msgData.senderEmail }}&gt;</span>\n          </span>\n        </div>\n        <div v-if=\"msgData.recipients && msgData.recipients.length\" class=\"msg-field\">\n          <span class=\"msg-label\">To</span>\n          <span class=\"msg-value\">{{ formatRecipients(msgData.recipients) }}</span>\n        </div>\n        <div v-if=\"msgData.clientSubmitTime || msgData.messageDeliveryTime\" class=\"msg-field\">\n          <span class=\"msg-label\">Date</span>\n          <span class=\"msg-value\">{{ formatDate(msgData.clientSubmitTime || msgData.messageDeliveryTime) }}</span>\n        </div>\n        <div v-if=\"msgData.attachments && msgData.attachments.length\" class=\"msg-field\">\n          <span class=\"msg-label\">Attachments</span>\n          <span class=\"msg-value msg-attachments\">\n            <span v-for=\"(att, i) in msgData.attachments\" :key=\"i\" class=\"msg-attachment-tag\">\n              {{ att.fileName || att.name || 'attachment' }}\n            </span>\n          </span>\n        </div>\n      </div>\n    </div>\n    <div class=\"msg-body\">\n      <div v-if=\"msgData.bodyHtml\" class=\"msg-body-html\" v-html=\"msgData.bodyHtml\" />\n      <pre v-else-if=\"msgData.body\" class=\"msg-body-text\">{{ msgData.body }}</pre>\n      <div v-else class=\"msg-body-empty\">No content</div>\n    </div>\n  </div>\n</template>\n\n<style scoped lang='scss'>\n.msg-preview {\n  width: 100%;\n  height: 100%;\n  overflow: auto;\n  background: #fff;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n  color: #333;\n}\n\n.msg-header {\n  padding: 24px 24px 16px;\n  border-bottom: 1px solid #e8ecf0;\n}\n\n.msg-subject {\n  margin: 0 0 16px;\n  font-size: 20px;\n  font-weight: 600;\n  color: #1a1a1a;\n  line-height: 1.4;\n}\n\n.msg-meta {\n  display: flex;\n  flex-direction: column;\n  gap: 8px;\n}\n\n.msg-field {\n  display: flex;\n  align-items: baseline;\n  gap: 12px;\n  font-size: 14px;\n  line-height: 1.5;\n}\n\n.msg-label {\n  flex-shrink: 0;\n  min-width: 80px;\n  color: #8b9dc3;\n  font-weight: 500;\n}\n\n.msg-value {\n  color: #333;\n  word-break: break-word;\n}\n\n.msg-email {\n  color: #667eea;\n}\n\n.msg-attachments {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 6px;\n}\n\n.msg-attachment-tag {\n  display: inline-block;\n  padding: 2px 10px;\n  background: #f0f4ff;\n  border-radius: 4px;\n  font-size: 12px;\n  color: #667eea;\n}\n\n.msg-body {\n  padding: 24px;\n}\n\n.msg-body-html {\n  line-height: 1.6;\n  word-break: break-word;\n}\n\n.msg-body-text {\n  margin: 0;\n  white-space: pre-wrap;\n  word-break: break-word;\n  font-family: inherit;\n  font-size: 14px;\n  line-height: 1.6;\n}\n\n.msg-body-empty {\n  color: #999;\n  font-style: italic;\n  text-align: center;\n  padding: 40px 0;\n}\n</style>"],"names":["props","__props","emit","__emit","msgData","ref","parseMsgBuffer","buffer","reader","MsgReader","watch","file","getFileRenderByFile","render","url","getFileRenderByUrl","formatRecipients","recipients","r","name","email","formatDate","dateStr","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4","_hoisted_5","_cache","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_Fragment","att","i","_hoisted_14","_hoisted_16","_hoisted_17"],"mappings":"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"}