{"version":3,"file":"viewer.mjs","sources":["../../../../../../packages/components/viewer/src/viewer.vue"],"sourcesContent":["<template>\n  <div\n    class=\"image-viewer\"\n    :class=\"ns.b()\"\n    :style=\"{ width: props.width + 'px', height: props.height + 'px' }\"\n  >\n    <div @click.stop @wheel.prevent=\"handleWheel\" @mousedown=\"handleMouseDown\">\n      <div :style=\"imageContainerStyle\">\n        <div :style=\"imageStyle\" :class=\"ns.e('img')\">\n          <slot />\n        </div>\n      </div>\n      <div :class=\"[ns.e(`controls-${controlsPosition}`), ns.e('controls')]\">\n        <lt-icon class=\"icon\" title=\"缩小\" @click=\"zoomOut\">\n          <ZoomOut />\n        </lt-icon>\n        <lt-icon title=\"放大\" @click=\"zoomIn\">\n          <ZoomIn />\n        </lt-icon>\n        <lt-icon title=\"全屏\" @click=\"toggleFullScreen\">\n          <FullScreen />\n        </lt-icon>\n        <lt-icon title=\"向左旋转\" @click=\"rotateLeft\">\n          <RefreshLeft />\n        </lt-icon>\n        <lt-icon title=\"向右旋转\" @click=\"rotateRight\">\n          <RefreshRight />\n        </lt-icon>\n        <lt-icon title=\"还原\" @click=\"reset\"><ScaleToOriginal /></lt-icon>\n      </div>\n    </div>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, onMounted, onUnmounted, ref } from 'vue'\nimport { useNamespace } from '@lit-element/hooks'\nimport {\n  FullScreen,\n  RefreshLeft,\n  RefreshRight,\n  ScaleToOriginal,\n  ZoomIn,\n  ZoomOut,\n} from '@inte-cloud/icons-vue'\nimport { viewerProps } from './viewer'\n\ndefineOptions({\n  name: 'LtViewer',\n})\n\nconst ns = useNamespace('viewer')\nconst props = defineProps(viewerProps)\n\nconst scale = ref<number>(1)\nconst rotation = ref<number>(0)\nconst flip = ref<boolean>(false)\nconst isDragging = ref<boolean>(false)\nconst dragStartX = ref<number>(0)\nconst dragStartY = ref<number>(0)\nconst translateX = ref<number>(0)\nconst translateY = ref<number>(0)\n\nconst zoomIn = () => {\n  if (scale.value < props.maxScale) {\n    scale.value += 0.1\n  }\n}\n\nconst zoomOut = () => {\n  if (scale.value > props.minScale) {\n    scale.value -= 0.1\n  }\n}\n\nconst rotateLeft = () => {\n  rotation.value -= 90\n}\n\nconst rotateRight = () => {\n  rotation.value += 90\n}\n\nconst toggleFullScreen = () => {\n  const imgElement = document.querySelector('.image-viewer img')\n  if (imgElement) {\n    if (document.fullscreenElement) {\n      document.exitFullscreen()\n    } else {\n      imgElement.requestFullscreen()\n    }\n  }\n}\n\nconst reset = () => {\n  scale.value = 1\n  rotation.value = 0\n  flip.value = false\n  translateX.value = 0\n  translateY.value = 0\n}\n\nconst imageStyle = computed(() => ({\n  transform: `scale(${scale.value}) rotate(${rotation.value}deg) ${\n    flip.value ? 'scaleX(-1)' : ''\n  }`,\n}))\n\nconst imageContainerStyle = computed(() => ({\n  transform: `translate(${translateX.value}px, ${translateY.value}px)`,\n}))\n\nconst handleWheel = (event: any) => {\n  if (event.deltaY > 0) {\n    zoomOut()\n  } else {\n    zoomIn()\n  }\n}\n\nconst handleMouseDown = (event: any) => {\n  isDragging.value = true\n  dragStartX.value = event.clientX - translateX.value\n  dragStartY.value = event.clientY - translateY.value\n  document.addEventListener('mousemove', handleMouseMove)\n  document.addEventListener('mouseup', handleMouseUp)\n}\n\nconst handleMouseMove = (event: any) => {\n  if (isDragging.value) {\n    translateX.value = event.clientX - dragStartX.value\n    translateY.value = event.clientY - dragStartY.value\n  }\n}\n\nconst handleMouseUp = () => {\n  isDragging.value = false\n  document.removeEventListener('mousemove', handleMouseMove)\n  document.removeEventListener('mouseup', handleMouseUp)\n}\n\nonMounted(() => {\n  // 添加被动事件监听器\n  window.addEventListener('scroll', handleScroll)\n})\n\nonUnmounted(() => {\n  // 移除事件监听器\n  window.removeEventListener('scroll', handleScroll)\n})\n\nconst handleScroll = () => {\n  // 处理滚动事件\n  console.log('Scrolling...')\n}\ndefineExpose({\n  reset,\n})\n</script>\n"],"names":[],"mappings":"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"}