{"version":3,"file":"image-preview-item.mjs","sources":["../../../../../../../packages/components/image-preview/src/image-preview-item.tsx"],"sourcesContent":["import {\n  type CSSProperties,\n  type ExtractPropTypes,\n  computed,\n  defineComponent,\n  reactive,\n  ref,\n  watch,\n} from 'vue'\n\nimport {\n  type ComponentInstance,\n  LONG_PRESS_START_TIME,\n  clamp,\n  createNamespace,\n  makeRequiredProp,\n  numericProp,\n  preventDefault,\n  raf,\n} from '@xzx-design/utils'\n\nimport {\n  useEventListener,\n  useExpose,\n  useRect,\n  useTouch,\n} from '@xzx-design/hooks'\n\nimport { Image, Loading, SwipeItem } from '@xzx-design/components'\n\nconst getDistance = (touches: TouchList) =>\n  Math.sqrt(\n    (touches[0].clientX - touches[1].clientX) ** 2 +\n      (touches[0].clientY - touches[1].clientY) ** 2\n  )\n\nconst getCenter = (touches: TouchList) => ({\n  x: (touches[0].clientX + touches[1].clientX) / 2,\n  y: (touches[0].clientY + touches[1].clientY) / 2,\n})\n\nconst bem = createNamespace('image-preview')[1]\n\nconst longImageRatio = 2.6\n\nconst imagePreviewItemProps = {\n  src: String,\n  show: Boolean,\n  active: Number,\n  minZoom: makeRequiredProp(numericProp),\n  maxZoom: makeRequiredProp(numericProp),\n  rootWidth: makeRequiredProp(Number),\n  rootHeight: makeRequiredProp(Number),\n  disableZoom: Boolean,\n  doubleScale: Boolean,\n  closeOnClickImage: Boolean,\n  closeOnClickOverlay: Boolean,\n  vertical: Boolean,\n}\n\nexport type ImagePreviewItemProps = ExtractPropTypes<\n  typeof imagePreviewItemProps\n>\n\nexport default defineComponent({\n  props: imagePreviewItemProps,\n\n  emits: ['scale', 'close', 'longPress'],\n\n  setup(props, { emit, slots }) {\n    const state = reactive({\n      scale: 1,\n      moveX: 0,\n      moveY: 0,\n      moving: false,\n      zooming: false,\n      initializing: false,\n      imageRatio: 0,\n    })\n\n    const touch = useTouch()\n    const imageRef = ref<ComponentInstance>()\n    const swipeItem = ref<ComponentInstance>()\n    const vertical = ref(false)\n    const isLongImage = ref(false)\n\n    let initialMoveY = 0\n\n    const imageStyle = computed(() => {\n      const { scale, moveX, moveY, moving, zooming, initializing } = state\n      const style: CSSProperties = {\n        transitionDuration: zooming || moving || initializing ? '0s' : '.3s',\n      }\n\n      if (scale !== 1 || isLongImage.value) {\n        // use matrix to solve the problem of elements not rendering due to safari optimization\n        style.transform = `matrix(${scale}, 0, 0, ${scale}, ${moveX}, ${moveY})`\n      }\n\n      return style\n    })\n\n    const maxMoveX = computed(() => {\n      if (state.imageRatio) {\n        const { rootWidth, rootHeight } = props\n        const displayWidth = vertical.value\n          ? rootHeight / state.imageRatio\n          : rootWidth\n\n        return Math.max(0, (state.scale * displayWidth - rootWidth) / 2)\n      }\n\n      return 0\n    })\n\n    const maxMoveY = computed(() => {\n      if (state.imageRatio) {\n        const { rootWidth, rootHeight } = props\n        const displayHeight = vertical.value\n          ? rootHeight\n          : rootWidth * state.imageRatio\n\n        return Math.max(0, (state.scale * displayHeight - rootHeight) / 2)\n      }\n\n      return 0\n    })\n\n    const setScale = (scale: number, center?: { x: number; y: number }) => {\n      scale = clamp(scale, +props.minZoom, +props.maxZoom + 1)\n\n      if (scale !== state.scale) {\n        const ratio = scale / state.scale\n        state.scale = scale\n\n        if (center) {\n          const imageRect = useRect(imageRef.value?.$el)\n          const origin = {\n            x: imageRect.width * 0.5,\n            y: imageRect.height * 0.5,\n          }\n          const moveX =\n            state.moveX - (center.x - imageRect.left - origin.x) * (ratio - 1)\n          const moveY =\n            state.moveY - (center.y - imageRect.top - origin.y) * (ratio - 1)\n\n          state.moveX = clamp(moveX, -maxMoveX.value, maxMoveX.value)\n          state.moveY = clamp(moveY, -maxMoveY.value, maxMoveY.value)\n        } else {\n          state.moveX = 0\n          state.moveY = isLongImage.value ? initialMoveY : 0\n        }\n\n        emit('scale', {\n          scale,\n          index: props.active,\n        })\n      }\n    }\n\n    const resetScale = () => {\n      setScale(1)\n    }\n\n    const toggleScale = () => {\n      const scale = state.scale > 1 ? 1 : 2\n\n      setScale(\n        scale,\n        scale === 2 || isLongImage.value\n          ? { x: touch.startX.value, y: touch.startY.value }\n          : undefined\n      )\n    }\n\n    let fingerNum: number\n    let startMoveX: number\n    let startMoveY: number\n    let startScale: number\n    let startDistance: number\n    let lastCenter: { x: number; y: number }\n    let doubleTapTimer: ReturnType<typeof setTimeout> | null\n    let touchStartTime: number\n    let isImageMoved = false\n\n    const onTouchStart = (event: TouchEvent) => {\n      const { touches } = event\n      fingerNum = touches.length\n\n      if (fingerNum === 2 && props.disableZoom) {\n        return\n      }\n\n      const { offsetX } = touch\n\n      touch.start(event)\n\n      startMoveX = state.moveX\n      startMoveY = state.moveY\n      touchStartTime = Date.now()\n\n      // whether the image position is moved after scaling\n      isImageMoved = false\n\n      state.moving = fingerNum === 1 && (state.scale !== 1 || isLongImage.value)\n      state.zooming = fingerNum === 2 && !offsetX.value\n\n      if (state.zooming) {\n        startScale = state.scale\n        startDistance = getDistance(touches)\n      }\n    }\n\n    const onTouchMove = (event: TouchEvent) => {\n      const { touches } = event\n\n      touch.move(event)\n\n      if (state.moving) {\n        const { deltaX, deltaY } = touch\n        const moveX = deltaX.value + startMoveX\n        const moveY = deltaY.value + startMoveY\n\n        // if the image is moved to the edge, no longer trigger move,\n        // allow user to swipe to next image\n        if (\n          (props.vertical\n            ? touch.isVertical() && Math.abs(moveY) > maxMoveY.value\n            : touch.isHorizontal() && Math.abs(moveX) > maxMoveX.value) &&\n          !isImageMoved\n        ) {\n          state.moving = false\n          return\n        }\n\n        isImageMoved = true\n        preventDefault(event, true)\n        state.moveX = clamp(moveX, -maxMoveX.value, maxMoveX.value)\n        state.moveY = clamp(moveY, -maxMoveY.value, maxMoveY.value)\n      }\n\n      if (state.zooming) {\n        preventDefault(event, true)\n\n        if (touches.length === 2) {\n          const distance = getDistance(touches)\n          const scale = (startScale * distance) / startDistance\n          lastCenter = getCenter(touches)\n          setScale(scale, lastCenter)\n        }\n      }\n    }\n\n    const checkClose = (event: TouchEvent) => {\n      const swipeItemEl: HTMLElement = swipeItem.value?.$el\n\n      if (!swipeItemEl) return\n\n      const imageEl = swipeItemEl.firstElementChild\n      const isClickOverlay = event.target === swipeItemEl\n      const isClickImage = imageEl?.contains(event.target as HTMLElement)\n\n      if (!props.closeOnClickImage && isClickImage) return\n      if (!props.closeOnClickOverlay && isClickOverlay) return\n\n      emit('close')\n    }\n\n    const checkTap = (event: TouchEvent) => {\n      if (fingerNum > 1) {\n        return\n      }\n\n      const deltaTime = Date.now() - touchStartTime\n\n      // Same as the default value of iOS double tap timeout\n      const TAP_TIME = 250\n\n      if (touch.isTap.value) {\n        if (deltaTime < TAP_TIME) {\n          // allow double to scale\n          if (props.doubleScale) {\n            // tap or double tap\n            if (doubleTapTimer) {\n              clearTimeout(doubleTapTimer)\n              doubleTapTimer = null\n              toggleScale()\n            } else {\n              doubleTapTimer = setTimeout(() => {\n                checkClose(event)\n                doubleTapTimer = null\n              }, TAP_TIME)\n            }\n          } else {\n            checkClose(event)\n          }\n        }\n        // long press\n        else if (deltaTime > LONG_PRESS_START_TIME) {\n          emit('longPress')\n        }\n      }\n    }\n\n    const onTouchEnd = (event: TouchEvent) => {\n      let stopPropagation = false\n\n      /* istanbul ignore else */\n      if (state.moving || state.zooming) {\n        stopPropagation = true\n\n        if (\n          state.moving &&\n          startMoveX === state.moveX &&\n          startMoveY === state.moveY\n        ) {\n          stopPropagation = false\n        }\n\n        if (!event.touches.length) {\n          if (state.zooming) {\n            state.moveX = clamp(state.moveX, -maxMoveX.value, maxMoveX.value)\n            state.moveY = clamp(state.moveY, -maxMoveY.value, maxMoveY.value)\n            state.zooming = false\n          }\n\n          state.moving = false\n          startMoveX = 0\n          startMoveY = 0\n          startScale = 1\n\n          if (state.scale < 1) {\n            resetScale()\n          }\n\n          const maxZoom = +props.maxZoom\n          if (state.scale > maxZoom) {\n            setScale(maxZoom, lastCenter)\n          }\n        }\n      }\n\n      // eliminate tap delay on safari\n      preventDefault(event, stopPropagation)\n\n      checkTap(event)\n      touch.reset()\n    }\n\n    const resize = () => {\n      const { rootWidth, rootHeight } = props\n      const rootRatio = rootHeight / rootWidth\n      const { imageRatio } = state\n\n      vertical.value =\n        state.imageRatio > rootRatio && imageRatio < longImageRatio\n      isLongImage.value =\n        state.imageRatio > rootRatio && imageRatio >= longImageRatio\n\n      if (isLongImage.value) {\n        initialMoveY = (imageRatio * rootWidth - rootHeight) / 2\n        state.moveY = initialMoveY\n        state.initializing = true\n        raf(() => {\n          state.initializing = false\n        })\n      }\n\n      resetScale()\n    }\n\n    const onLoad = (event: Event) => {\n      const { naturalWidth, naturalHeight } = event.target as HTMLImageElement\n      state.imageRatio = naturalHeight / naturalWidth\n      resize()\n    }\n\n    watch(() => props.active, resetScale)\n    watch(\n      () => props.show,\n      (value) => {\n        if (!value) {\n          resetScale()\n        }\n      }\n    )\n    watch(() => [props.rootWidth, props.rootHeight], resize)\n\n    // useEventListener will set passive to `false` to eliminate the warning of Chrome\n    useEventListener('touchmove', onTouchMove, {\n      target: computed(() => swipeItem.value?.$el),\n    })\n\n    useExpose({ resetScale })\n\n    return () => {\n      const imageSlots = {\n        loading: () => <Loading type=\"spinner\" />,\n      }\n\n      return (\n        <SwipeItem\n          ref={swipeItem}\n          class={bem('swipe-item')}\n          onTouchstartPassive={onTouchStart}\n          onTouchend={onTouchEnd}\n          onTouchcancel={onTouchEnd}\n        >\n          {slots.image ? (\n            <div class={bem('image-wrap')}>\n              {slots.image({\n                src: props.src,\n                onLoad,\n                style: imageStyle.value,\n              })}\n            </div>\n          ) : (\n            <Image\n              v-slots={imageSlots}\n              ref={imageRef}\n              src={props.src}\n              fit=\"contain\"\n              class={bem('image', { vertical: vertical.value })}\n              style={imageStyle.value}\n              onLoad={onLoad}\n            />\n          )}\n        </SwipeItem>\n      )\n    }\n  },\n})\n"],"names":["getDistance","touches","Math","sqrt","clientX","clientY","getCenter","x","y","bem","createNamespace","longImageRatio","imagePreviewItemProps","src","String","show","Boolean","active","Number","minZoom","makeRequiredProp","numericProp","maxZoom","rootWidth","rootHeight","disableZoom","doubleScale","closeOnClickImage","closeOnClickOverlay","vertical","defineComponent","props","emits","setup","emit","slots","state","reactive","scale","moveX","moveY","moving","zooming","initializing","imageRatio","touch","useTouch","imageRef","ref","swipeItem","isLongImage","initialMoveY","imageStyle","computed","style","transitionDuration","value","transform","maxMoveX","displayWidth","max","maxMoveY","displayHeight","setScale","center","clamp","ratio","imageRect","useRect","$el","origin","width","height","left","top","index","resetScale","toggleScale","startX","startY","undefined","fingerNum","startMoveX","startMoveY","startScale","startDistance","lastCenter","doubleTapTimer","touchStartTime","isImageMoved","onTouchStart","event","length","offsetX","start","Date","now","onTouchMove","move","deltaX","deltaY","isVertical","abs","isHorizontal","preventDefault","distance","checkClose","swipeItemEl","imageEl","firstElementChild","isClickOverlay","target","isClickImage","contains","checkTap","deltaTime","TAP_TIME","isTap","clearTimeout","setTimeout","LONG_PRESS_START_TIME","onTouchEnd","stopPropagation","reset","resize","rootRatio","raf","onLoad","naturalWidth","naturalHeight","watch","useEventListener","useExpose","imageSlots","loading","_createVNode","Loading","SwipeItem","default","image","Image"],"mappings":"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"}