{"version":3,"file":"image-viewer.vue2.mjs","sources":["../../../../../packages/components/image-viewer/src/image-viewer.vue"],"sourcesContent":["<script lang=\"ts\">\nimport { defineComponent as __MACROS_defineComponent } from \"vue\";\nexport default /*#__PURE__*/ __MACROS_defineComponent({\n  name: 'ElImageViewer'\n});\n</script>\n<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')\"></i>\n            <el-icon @click=\"toggleMode\">\n              <component :is=\"mode.icon\" />\n            </el-icon>\n            <i :class=\"ns.e('actions__divider')\"></i>\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\" setup>\nimport {\n  computed,\n  ref,\n  onMounted,\n  watch,\n  nextTick,\n  effectScope,\n  markRaw\n} from 'vue'\nimport { useEventListener, isNumber } from '@vueuse/core'\nimport { throttle } from 'lodash-unified'\nimport ElIcon from '@element-ultra/components/icon'\nimport { useNamespace, useZIndex } from '@element-ultra/hooks'\nimport { EVENT_CODE } from '@element-ultra/shared'\nimport { isFirefox } from '@element-ultra/utils'\nimport {\n  Close,\n  ArrowLeft,\n  ArrowRight,\n  ZoomOut,\n  ZoomIn,\n  RefreshLeft,\n  RefreshRight,\n  Maximum,\n  ScaleToOriginal\n} from 'icon-ultra'\nimport {\n  imageViewerProps,\n  imageViewerEmits,\n  type ImageViewerAction\n} from './image-viewer'\n\nimport type { CSSProperties } from 'vue'\n\nconst Mode = {\n  CONTAIN: {\n    name: 'contain',\n    icon: markRaw(Maximum)\n  },\n  ORIGINAL: {\n    name: 'original',\n    icon: markRaw(ScaleToOriginal)\n  }\n}\n\nconst mousewheelEventName = isFirefox() ? 'DOMMouseScroll' : 'mousewheel'\n\n\n\nconst props = defineProps(imageViewerProps)\nconst emit = defineEmits(imageViewerEmits)\n\nconst ns = useNamespace('image-viewer')\nconst { nextZIndex } = useZIndex()\nconst wrapper = ref<HTMLDivElement>()\nconst imgRefs = ref<any[]>([])\n\nconst scopeEventListener = effectScope()\n\nconst loading = ref(true)\nconst index = ref(props.initialIndex)\nconst mode = ref(Mode.CONTAIN)\nconst transform = ref({\n  scale: 1,\n  deg: 0,\n  offsetX: 0,\n  offsetY: 0,\n  enableTransition: false\n})\n\nconst isSingle = computed(() => {\n  const { urlList } = props\n  return urlList.length <= 1\n})\n\nconst isFirst = computed(() => {\n  return index.value === 0\n})\n\nconst isLast = computed(() => {\n  return index.value === props.urlList.length - 1\n})\n\nconst currentImg = computed(() => {\n  return props.urlList[index.value]\n})\n\nconst 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\nconst computedZIndex = computed(() => {\n  return isNumber(props.zIndex) ? props.zIndex : nextZIndex()\n})\n\nfunction hide() {\n  unregisterEventListener()\n  emit('close')\n}\n\nfunction 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\nfunction unregisterEventListener() {\n  scopeEventListener.stop()\n}\n\nfunction handleImgLoad() {\n  loading.value = false\n}\n\nfunction handleImgError(e: Event) {\n  loading.value = false\n  ;(e.target as HTMLImageElement).alt = '加载失败'\n}\n\nfunction 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(document, 'mousemove', dragHandler)\n  useEventListener(document, 'mouseup', () => {\n    removeMousemove()\n  })\n\n  e.preventDefault()\n}\n\nfunction reset() {\n  transform.value = {\n    scale: 1,\n    deg: 0,\n    offsetX: 0,\n    offsetY: 0,\n    enableTransition: false\n  }\n}\n\nfunction 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\nfunction prev() {\n  if (isFirst.value && !props.infinite) return\n  const len = props.urlList.length\n  index.value = (index.value - 1 + len) % len\n}\n\nfunction next() {\n  if (isLast.value && !props.infinite) return\n  const len = props.urlList.length\n  index.value = (index.value + 1) % len\n}\n\nfunction 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 = 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 = 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\nwatch(currentImg, () => {\n  nextTick(() => {\n    const $img = imgRefs.value[0]\n    if (!$img?.complete) {\n      loading.value = true\n    }\n  })\n})\n\nwatch(index, val => {\n  reset()\n  emit('switch', val)\n})\n\nonMounted(() => {\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</script>\n"],"names":["__MACROS_defineComponent","index"],"mappings":"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"}