{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createViewer } from \"@open-file-viewer/core\";\nimport type {\n  FileViewer,\n  PreviewOptions,\n  PreviewPlugin,\n  PreviewSource,\n  PreviewTheme,\n  PreviewToolbarRenderContext\n} from \"@open-file-viewer/core\";\nimport {\n  defineComponent,\n  h,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  render,\n  Teleport,\n  watch,\n  type PropType,\n} from \"vue\";\n\nexport const OpenFileViewer = defineComponent({\n  name: \"OpenFileViewer\",\n  props: {\n    file: {\n      type: [String, Blob, ArrayBuffer, File] as PropType<PreviewSource>,\n      required: false\n    },\n    files: {\n      type: Array as PropType<PreviewOptions[\"files\"]>,\n      default: undefined\n    },\n    initialIndex: Number,\n    fileName: String,\n    mimeType: String,\n    width: {\n      type: [String, Number],\n      default: \"100%\"\n    },\n    height: {\n      type: [String, Number],\n      default: \"600px\"\n    },\n    fit: {\n      type: String as () => PreviewOptions[\"fit\"],\n      default: \"contain\"\n    },\n    zoom: {\n      type: Number as PropType<PreviewOptions[\"zoom\"]>,\n      default: 1\n    },\n    plugins: {\n      type: Array as () => PreviewPlugin[],\n      default: () => []\n    },\n    toolbar: {\n      type: [Boolean, Object] as PropType<PreviewOptions[\"toolbar\"]>,\n      default: false\n    },\n    theme: {\n      type: String as PropType<PreviewOptions[\"theme\"]>,\n      default: \"light\"\n    },\n    fallback: {\n      type: String as PropType<PreviewOptions[\"fallback\"]>,\n      default: \"inline\"\n    },\n    locale: String as PropType<PreviewOptions[\"locale\"]>,\n    messages: Object as PropType<PreviewOptions[\"messages\"]>,\n    renderFallback: Function as PropType<PreviewOptions[\"renderFallback\"]>,\n    className: String,\n    onLoad: Function as PropType<PreviewOptions[\"onLoad\"]>,\n    onError: Function as PropType<PreviewOptions[\"onError\"]>,\n    onUnsupported: Function as PropType<PreviewOptions[\"onUnsupported\"]>\n  },\n  emits: {\n    load: (_file: unknown) => true,\n    error: (_error: Error, _file?: unknown) => true,\n    unsupported: (_file: unknown) => true\n  },\n  setup(props, { emit, slots }) {\n    const containerRef = ref<HTMLElement | null>(null);\n    const toolbarTarget = ref<HTMLElement | null>(null);\n    const toolbarContext = ref<PreviewToolbarRenderContext | null>(null);\n    let viewer: FileViewer | null = null;\n    let toolbarMount: HTMLElement | null = null;\n\n    const mount = () => {\n      if (!containerRef.value) {\n        return;\n      }\n      if (toolbarMount) {\n        toolbarMount = null;\n      }\n      toolbarTarget.value = null;\n      toolbarContext.value = null;\n      viewer?.destroy();\n      viewer = createViewer({\n        container: containerRef.value,\n        file: props.file,\n        files: props.files,\n        initialIndex: props.initialIndex,\n        fileName: props.fileName,\n        mimeType: props.mimeType,\n        width: props.width,\n        height: props.height,\n        fit: props.fit,\n        zoom: props.zoom,\n        plugins: props.plugins,\n        toolbar: slots.toolbar\n          ? {\n              ...(typeof props.toolbar === \"object\" ? props.toolbar : {}),\n              render(ctx) {\n                toolbarContext.value = ctx;\n                if (toolbarMount) {\n                  return toolbarMount;\n                }\n                toolbarMount = document.createElement(\"div\");\n                toolbarMount.className = \"ofv-vue-toolbar\";\n                toolbarTarget.value = toolbarMount;\n                return toolbarMount;\n              }\n            }\n          : props.toolbar,\n        theme: props.theme,\n        fallback: props.fallback,\n        locale: props.locale,\n        messages: props.messages,\n        renderFallback: props.renderFallback,\n        className: props.className,\n        onLoad(file) {\n          props.onLoad?.(file);\n          if (!props.onLoad) {\n            emit(\"load\", file);\n          }\n        },\n        onError(error, file) {\n          props.onError?.(error, file);\n          if (!props.onError) {\n            emit(\"error\", error, file);\n          }\n        },\n        onUnsupported(file) {\n          props.onUnsupported?.(file);\n          if (!props.onUnsupported) {\n            emit(\"unsupported\", file);\n          }\n        }\n      });\n    };\n\n    watch(\n      () => [\n        props.file,\n        props.files,\n        props.initialIndex,\n        props.fileName,\n        props.mimeType,\n        props.width,\n        props.height,\n        props.fit,\n        props.zoom,\n        props.plugins,\n        props.fallback,\n        props.locale,\n        props.messages,\n        props.renderFallback,\n        props.toolbar,\n        props.theme,\n        props.className,\n        props.onLoad,\n        props.onError,\n        props.onUnsupported\n      ],\n      mount,\n      { immediate: false }\n    );\n\n    onMounted(mount);\n\n    onBeforeUnmount(() => {\n      if (toolbarMount) {\n        toolbarMount = null;\n      }\n      toolbarTarget.value = null;\n      toolbarContext.value = null;\n      viewer?.destroy();\n      viewer = null;\n    });\n\n    return () => [\n      h(\"div\", { ref: containerRef, class: props.className }),\n      toolbarTarget.value && toolbarContext.value\n        ? h(Teleport, { to: toolbarTarget.value }, [\n            h(\"div\", { class: \"ofv-vue-toolbar-content\" }, slots.toolbar?.(toolbarContext.value))\n          ])\n        : null\n    ];\n  }\n});\n\nexport type { FileViewer, PreviewOptions, PreviewPlugin, PreviewSource, PreviewTheme, PreviewToolbarRenderContext };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAA6B;AAS7B,iBAUO;AAEA,IAAM,qBAAiB,4BAAgB;AAAA,EAC5C,MAAM;AAAA,EACN,OAAO;AAAA,IACL,MAAM;AAAA,MACJ,MAAM,CAAC,QAAQ,MAAM,aAAa,IAAI;AAAA,MACtC,UAAU;AAAA,IACZ;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,cAAc;AAAA,IACd,UAAU;AAAA,IACV,UAAU;AAAA,IACV,OAAO;AAAA,MACL,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,MACN,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,IACA,KAAK;AAAA,MACH,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,SAAS;AAAA,MACP,MAAM;AAAA,MACN,SAAS,MAAM,CAAC;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,MACP,MAAM,CAAC,SAAS,MAAM;AAAA,MACtB,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,gBAAgB;AAAA,IAChB,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,eAAe;AAAA,EACjB;AAAA,EACA,OAAO;AAAA,IACL,MAAM,CAAC,UAAmB;AAAA,IAC1B,OAAO,CAAC,QAAe,UAAoB;AAAA,IAC3C,aAAa,CAAC,UAAmB;AAAA,EACnC;AAAA,EACA,MAAM,OAAO,EAAE,MAAM,MAAM,GAAG;AAC5B,UAAM,mBAAe,gBAAwB,IAAI;AACjD,UAAM,oBAAgB,gBAAwB,IAAI;AAClD,UAAM,qBAAiB,gBAAwC,IAAI;AACnE,QAAI,SAA4B;AAChC,QAAI,eAAmC;AAEvC,UAAM,QAAQ,MAAM;AAClB,UAAI,CAAC,aAAa,OAAO;AACvB;AAAA,MACF;AACA,UAAI,cAAc;AAChB,uBAAe;AAAA,MACjB;AACA,oBAAc,QAAQ;AACtB,qBAAe,QAAQ;AACvB,cAAQ,QAAQ;AAChB,mBAAS,0BAAa;AAAA,QACpB,WAAW,aAAa;AAAA,QACxB,MAAM,MAAM;AAAA,QACZ,OAAO,MAAM;AAAA,QACb,cAAc,MAAM;AAAA,QACpB,UAAU,MAAM;AAAA,QAChB,UAAU,MAAM;AAAA,QAChB,OAAO,MAAM;AAAA,QACb,QAAQ,MAAM;AAAA,QACd,KAAK,MAAM;AAAA,QACX,MAAM,MAAM;AAAA,QACZ,SAAS,MAAM;AAAA,QACf,SAAS,MAAM,UACX;AAAA,UACE,GAAI,OAAO,MAAM,YAAY,WAAW,MAAM,UAAU,CAAC;AAAA,UACzD,OAAO,KAAK;AACV,2BAAe,QAAQ;AACvB,gBAAI,cAAc;AAChB,qBAAO;AAAA,YACT;AACA,2BAAe,SAAS,cAAc,KAAK;AAC3C,yBAAa,YAAY;AACzB,0BAAc,QAAQ;AACtB,mBAAO;AAAA,UACT;AAAA,QACF,IACA,MAAM;AAAA,QACV,OAAO,MAAM;AAAA,QACb,UAAU,MAAM;AAAA,QAChB,QAAQ,MAAM;AAAA,QACd,UAAU,MAAM;AAAA,QAChB,gBAAgB,MAAM;AAAA,QACtB,WAAW,MAAM;AAAA,QACjB,OAAO,MAAM;AACX,gBAAM,SAAS,IAAI;AACnB,cAAI,CAAC,MAAM,QAAQ;AACjB,iBAAK,QAAQ,IAAI;AAAA,UACnB;AAAA,QACF;AAAA,QACA,QAAQ,OAAO,MAAM;AACnB,gBAAM,UAAU,OAAO,IAAI;AAC3B,cAAI,CAAC,MAAM,SAAS;AAClB,iBAAK,SAAS,OAAO,IAAI;AAAA,UAC3B;AAAA,QACF;AAAA,QACA,cAAc,MAAM;AAClB,gBAAM,gBAAgB,IAAI;AAC1B,cAAI,CAAC,MAAM,eAAe;AACxB,iBAAK,eAAe,IAAI;AAAA,UAC1B;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAEA;AAAA,MACE,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,MACA,EAAE,WAAW,MAAM;AAAA,IACrB;AAEA,8BAAU,KAAK;AAEf,oCAAgB,MAAM;AACpB,UAAI,cAAc;AAChB,uBAAe;AAAA,MACjB;AACA,oBAAc,QAAQ;AACtB,qBAAe,QAAQ;AACvB,cAAQ,QAAQ;AAChB,eAAS;AAAA,IACX,CAAC;AAED,WAAO,MAAM;AAAA,UACX,cAAE,OAAO,EAAE,KAAK,cAAc,OAAO,MAAM,UAAU,CAAC;AAAA,MACtD,cAAc,SAAS,eAAe,YAClC,cAAE,qBAAU,EAAE,IAAI,cAAc,MAAM,GAAG;AAAA,YACvC,cAAE,OAAO,EAAE,OAAO,0BAA0B,GAAG,MAAM,UAAU,eAAe,KAAK,CAAC;AAAA,MACtF,CAAC,IACD;AAAA,IACN;AAAA,EACF;AACF,CAAC;","names":[]}