{"version":3,"file":"image-viewer2.mjs","sources":["../../../../../../packages/components/image-viewer/src/image-viewer.vue"],"sourcesContent":["<template>\n  <teleport to=\"body\" :disabled=\"!teleported\">\n    <transition name=\"viewer-fade\" appear>\n      <div\n        ref=\"wrapper\"\n        :tabindex=\"-1\"\n        :class=\"ns.e('wrapper')\"\n        :style=\"{ zIndex: computedZIndex }\"\n      >\n        <div :class=\"ns.e('mask')\" @click.self=\"hideOnClickModal && hide()\" />\n\n        <!-- CLOSE -->\n        <span :class=\"[ns.e('btn'), ns.e('close')]\" @click=\"hide\">\n          <el-icon><close /></el-icon>\n        </span>\n\n        <!-- ARROW -->\n        <template v-if=\"!isSingle\">\n          <span\n            :class=\"[\n              ns.e('btn'),\n              ns.e('prev'),\n              ns.is('disabled', !infinite && isFirst),\n            ]\"\n            @click=\"prev\"\n          >\n            <el-icon><arrow-left /></el-icon>\n          </span>\n          <span\n            :class=\"[\n              ns.e('btn'),\n              ns.e('next'),\n              ns.is('disabled', !infinite && isLast),\n            ]\"\n            @click=\"next\"\n          >\n            <el-icon><arrow-right /></el-icon>\n          </span>\n        </template>\n        <!-- ACTIONS -->\n        <div :class=\"[ns.e('btn'), ns.e('actions')]\">\n          <div :class=\"ns.e('actions__inner')\">\n            <el-icon @click=\"handleActions('zoomOut')\">\n              <zoom-out />\n            </el-icon>\n            <el-icon @click=\"handleActions('zoomIn')\">\n              <zoom-in />\n            </el-icon>\n            <i :class=\"ns.e('actions__divider')\" />\n            <el-icon @click=\"toggleMode\">\n              <component :is=\"mode.icon\" />\n            </el-icon>\n            <i :class=\"ns.e('actions__divider')\" />\n            <el-icon @click=\"handleActions('anticlockwise')\">\n              <refresh-left />\n            </el-icon>\n            <el-icon @click=\"handleActions('clockwise')\">\n              <refresh-right />\n            </el-icon>\n          </div>\n        </div>\n        <!-- CANVAS -->\n        <div :class=\"ns.e('canvas')\">\n          <img\n            v-for=\"(url, i) in urlList\"\n            v-show=\"i === index\"\n            :ref=\"(el) => (imgRefs[i] = el)\"\n            :key=\"url\"\n            :src=\"url\"\n            :style=\"imgStyle\"\n            :class=\"ns.e('img')\"\n            @load=\"handleImgLoad\"\n            @error=\"handleImgError\"\n            @mousedown=\"handleMouseDown\"\n          />\n        </div>\n        <slot />\n      </div>\n    </transition>\n  </teleport>\n</template>\n\n<script lang=\"ts\">\nimport {\n  computed,\n  defineComponent,\n  effectScope,\n  markRaw,\n  nextTick,\n  onMounted,\n  ref,\n  watch,\n} from 'vue'\nimport { isNumber, useEventListener } from '@vueuse/core'\nimport { throttle } from 'lodash-unified'\nimport ElIcon from '@element-plus/components/icon'\nimport { useLocale, useNamespace, useZIndex } from '@element-plus/hooks'\nimport { EVENT_CODE } from '@element-plus/constants'\nimport { isFirefox } from '@element-plus/utils'\nimport {\n  ArrowLeft,\n  ArrowRight,\n  Close,\n  FullScreen,\n  RefreshLeft,\n  RefreshRight,\n  ScaleToOriginal,\n  ZoomIn,\n  ZoomOut,\n} from '@element-plus/icons-vue'\nimport { imageViewerEmits, imageViewerProps } from './image-viewer'\n\nimport type { CSSProperties } from 'vue'\n\nconst Mode = {\n  CONTAIN: {\n    name: 'contain',\n    icon: markRaw(FullScreen),\n  },\n  ORIGINAL: {\n    name: 'original',\n    icon: markRaw(ScaleToOriginal),\n  },\n}\n\nconst mousewheelEventName = isFirefox() ? 'DOMMouseScroll' : 'mousewheel'\nexport type ImageViewerAction =\n  | 'zoomIn'\n  | 'zoomOut'\n  | 'clockwise'\n  | 'anticlockwise'\n\nexport default defineComponent({\n  name: 'ElImageViewer',\n  components: {\n    ElIcon,\n    Close,\n    ArrowLeft,\n    ArrowRight,\n    ZoomOut,\n    ZoomIn,\n    RefreshLeft,\n    RefreshRight,\n  },\n  props: imageViewerProps,\n  emits: imageViewerEmits,\n\n  setup(props, { emit }) {\n    const { t } = useLocale()\n    const ns = useNamespace('image-viewer')\n    const { nextZIndex } = useZIndex()\n    const wrapper = ref<HTMLDivElement>()\n    const imgRefs = ref<any[]>([])\n\n    const scopeEventListener = effectScope()\n\n    const loading = ref(true)\n    const index = ref(props.initialIndex)\n    const mode = ref(Mode.CONTAIN)\n    const transform = ref({\n      scale: 1,\n      deg: 0,\n      offsetX: 0,\n      offsetY: 0,\n      enableTransition: false,\n    })\n\n    const isSingle = computed(() => {\n      const { urlList } = props\n      return urlList.length <= 1\n    })\n\n    const isFirst = computed(() => {\n      return index.value === 0\n    })\n\n    const isLast = computed(() => {\n      return index.value === props.urlList.length - 1\n    })\n\n    const currentImg = computed(() => {\n      return props.urlList[index.value]\n    })\n\n    const imgStyle = computed(() => {\n      const { scale, deg, offsetX, offsetY, enableTransition } = transform.value\n      let translateX = offsetX / scale\n      let translateY = offsetY / scale\n\n      switch (deg % 360) {\n        case 90:\n        case -270:\n          ;[translateX, translateY] = [translateY, -translateX]\n          break\n        case 180:\n        case -180:\n          ;[translateX, translateY] = [-translateX, -translateY]\n          break\n        case 270:\n        case -90:\n          ;[translateX, translateY] = [-translateY, translateX]\n          break\n      }\n\n      const style: CSSProperties = {\n        transform: `scale(${scale}) rotate(${deg}deg) translate(${translateX}px, ${translateY}px)`,\n        transition: enableTransition ? 'transform .3s' : '',\n      }\n      if (mode.value.name === Mode.CONTAIN.name) {\n        style.maxWidth = style.maxHeight = '100%'\n      }\n      return style\n    })\n\n    const computedZIndex = computed(() => {\n      return isNumber(props.zIndex) ? props.zIndex : nextZIndex()\n    })\n\n    function hide() {\n      unregisterEventListener()\n      emit('close')\n    }\n\n    function registerEventListener() {\n      const keydownHandler = throttle((e: KeyboardEvent) => {\n        switch (e.code) {\n          // ESC\n          case EVENT_CODE.esc:\n            hide()\n            break\n          // SPACE\n          case EVENT_CODE.space:\n            toggleMode()\n            break\n          // LEFT_ARROW\n          case EVENT_CODE.left:\n            prev()\n            break\n          // UP_ARROW\n          case EVENT_CODE.up:\n            handleActions('zoomIn')\n            break\n          // RIGHT_ARROW\n          case EVENT_CODE.right:\n            next()\n            break\n          // DOWN_ARROW\n          case EVENT_CODE.down:\n            handleActions('zoomOut')\n            break\n        }\n      })\n      const mousewheelHandler = throttle(\n        (e: WheelEvent | any /* TODO: wheelDelta is deprecated */) => {\n          const delta = e.wheelDelta ? e.wheelDelta : -e.detail\n          if (delta > 0) {\n            handleActions('zoomIn', {\n              zoomRate: 1.2,\n              enableTransition: false,\n            })\n          } else {\n            handleActions('zoomOut', {\n              zoomRate: 1.2,\n              enableTransition: false,\n            })\n          }\n        }\n      )\n\n      scopeEventListener.run(() => {\n        useEventListener(document, 'keydown', keydownHandler)\n        useEventListener(document, mousewheelEventName, mousewheelHandler)\n      })\n    }\n\n    function unregisterEventListener() {\n      scopeEventListener.stop()\n    }\n\n    function handleImgLoad() {\n      loading.value = false\n    }\n\n    function handleImgError(e: Event) {\n      loading.value = false\n      ;(e.target as HTMLImageElement).alt = t('el.image.error')\n    }\n\n    function handleMouseDown(e: MouseEvent) {\n      if (loading.value || e.button !== 0 || !wrapper.value) return\n      transform.value.enableTransition = false\n\n      const { offsetX, offsetY } = transform.value\n      const startX = e.pageX\n      const startY = e.pageY\n\n      const dragHandler = throttle((ev: MouseEvent) => {\n        transform.value = {\n          ...transform.value,\n          offsetX: offsetX + ev.pageX - startX,\n          offsetY: offsetY + ev.pageY - startY,\n        }\n      })\n      const removeMousemove = useEventListener(\n        document,\n        'mousemove',\n        dragHandler\n      )\n      useEventListener(document, 'mouseup', () => {\n        removeMousemove()\n      })\n\n      e.preventDefault()\n    }\n\n    function reset() {\n      transform.value = {\n        scale: 1,\n        deg: 0,\n        offsetX: 0,\n        offsetY: 0,\n        enableTransition: false,\n      }\n    }\n\n    function toggleMode() {\n      if (loading.value) return\n\n      const modeNames = Object.keys(Mode)\n      const modeValues = Object.values(Mode)\n      const currentMode = mode.value.name\n      const index = modeValues.findIndex((i) => i.name === currentMode)\n      const nextIndex = (index + 1) % modeNames.length\n      mode.value = Mode[modeNames[nextIndex]]\n      reset()\n    }\n\n    function prev() {\n      if (isFirst.value && !props.infinite) return\n      const len = props.urlList.length\n      index.value = (index.value - 1 + len) % len\n    }\n\n    function next() {\n      if (isLast.value && !props.infinite) return\n      const len = props.urlList.length\n      index.value = (index.value + 1) % len\n    }\n\n    function handleActions(action: ImageViewerAction, options = {}) {\n      if (loading.value) return\n      const { zoomRate, rotateDeg, enableTransition } = {\n        zoomRate: 1.4,\n        rotateDeg: 90,\n        enableTransition: true,\n        ...options,\n      }\n      switch (action) {\n        case 'zoomOut':\n          if (transform.value.scale > 0.2) {\n            transform.value.scale = Number.parseFloat(\n              (transform.value.scale / zoomRate).toFixed(3)\n            )\n          }\n          break\n        case 'zoomIn':\n          if (transform.value.scale < 7) {\n            transform.value.scale = Number.parseFloat(\n              (transform.value.scale * zoomRate).toFixed(3)\n            )\n          }\n          break\n        case 'clockwise':\n          transform.value.deg += rotateDeg\n          break\n        case 'anticlockwise':\n          transform.value.deg -= rotateDeg\n          break\n      }\n      transform.value.enableTransition = enableTransition\n    }\n\n    watch(currentImg, () => {\n      nextTick(() => {\n        const $img = imgRefs.value[0]\n        if (!$img?.complete) {\n          loading.value = true\n        }\n      })\n    })\n\n    watch(index, (val) => {\n      reset()\n      emit('switch', val)\n    })\n\n    onMounted(() => {\n      registerEventListener()\n      // add tabindex then wrapper can be focusable via Javascript\n      // focus wrapper so arrow key can't cause inner scroll behavior underneath\n      wrapper.value?.focus?.()\n    })\n\n    return {\n      index,\n      wrapper,\n      imgRefs,\n      isSingle,\n      isFirst,\n      isLast,\n      currentImg,\n      imgStyle,\n      mode,\n      computedZIndex,\n      handleActions,\n      prev,\n      next,\n      hide,\n      toggleMode,\n      handleImgLoad,\n      handleImgError,\n      handleMouseDown,\n      ns,\n    }\n  },\n})\n</script>\n"],"names":["_resolveComponent","_openBlock","_createBlock","_Teleport","_createVNode","_Transition","_withCtx","_createElementVNode","_normalizeClass","_normalizeStyle","_withModifiers","_createCommentVNode","_createElementBlock","_Fragment","_resolveDynamicComponent","_renderList","_withDirectives","_vShow","_renderSlot"],"mappings":"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"}