{"version":3,"file":"Preview.cjs","sources":["../../../../../../packages/vue-components/vc-image/src/Preview.tsx"],"sourcesContent":["import type { MouseEventHandler, WheelEventHandler } from '@antdv/types';\nimport type { ImgHTMLAttributes, PropType, VNode } from 'vue';\nimport { addEventListenerWrap, classNames, getOffset, KeyCode, warning } from '@antdv/utils';\nimport {\n  cloneVNode,\n  computed,\n  defineComponent,\n  onMounted,\n  onUnmounted,\n  reactive,\n  shallowRef,\n  watch,\n} from 'vue';\nimport Dialog from '../../vc-dialog/src/DialogWrap';\nimport { dialogPropTypes, type IDialogChildProps } from '../../vc-dialog/src/IDialogPropTypes';\nimport { imageContext } from './context';\nimport getFixScaleEleTransPosition from './getFixScaleEleTransPosition';\n\nimport useFrameSetState from './hooks/useFrameSetState';\n\nexport interface PreviewProps extends Omit<IDialogChildProps, 'onClose' | 'mask'> {\n  onClose?: (e: Element) => void;\n  src?: string;\n  alt?: string;\n  rootClassName?: string;\n  icons?: {\n    rotateLeft?: VNode;\n    rotateRight?: VNode;\n    zoomIn?: VNode;\n    zoomOut?: VNode;\n    close?: VNode;\n    left?: VNode;\n    right?: VNode;\n    flipX?: VNode;\n    flipY?: VNode;\n  };\n  imgCommonProps?: ImgHTMLAttributes;\n}\n\nconst initialPosition = {\n  x: 0,\n  y: 0,\n};\nexport const previewProps = {\n  ...dialogPropTypes(),\n  src: String,\n  alt: String,\n  rootClassName: String,\n  icons: {\n    type: Object as PropType<PreviewProps['icons']>,\n    default: () => ({} as PreviewProps['icons']),\n  },\n  imgCommonProps: {\n    type: Object as PropType<PreviewProps['imgCommonProps']>,\n    default: () => ({}),\n  },\n};\nconst Preview = defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'Preview',\n  inheritAttrs: false,\n  props: previewProps,\n  emits: ['close', 'afterClose'],\n  setup(props, { emit, attrs }) {\n    const { rotateLeft, rotateRight, zoomIn, zoomOut, close, left, right, flipX, flipY } = reactive(\n      props.icons,\n    );\n\n    const scale = shallowRef(1);\n    const rotate = shallowRef(0);\n    const flip = reactive({ x: 1, y: 1 });\n    const [position, setPosition] = useFrameSetState<{\n      x: number;\n      y: number;\n    }>(initialPosition);\n\n    const onClose = () => emit('close');\n    const imgRef = shallowRef<HTMLImageElement>();\n    const originPositionRef = reactive<{\n      originX: number;\n      originY: number;\n      deltaX: number;\n      deltaY: number;\n    }>({\n      originX: 0,\n      originY: 0,\n      deltaX: 0,\n      deltaY: 0,\n    });\n    const isMoving = shallowRef(false);\n    const groupContext = imageContext.inject();\n    const { previewUrls, current, isPreviewGroup, setCurrent } = groupContext;\n    const previewGroupCount = computed(() => previewUrls.value.size);\n    const previewUrlsKeys = computed(() => Array.from(previewUrls.value.keys()));\n    const currentPreviewIndex = computed(() => previewUrlsKeys.value.indexOf(current.value));\n    const combinationSrc = computed(() => {\n      return isPreviewGroup.value ? previewUrls.value.get(current.value) : props.src;\n    });\n    const showLeftOrRightSwitches = computed(\n      () => isPreviewGroup.value && previewGroupCount.value > 1,\n    );\n    const lastWheelZoomDirection = shallowRef({ wheelDirection: 0 });\n\n    const onAfterClose = () => {\n      scale.value = 1;\n      rotate.value = 0;\n      flip.x = 1;\n      flip.y = 1;\n      setPosition(initialPosition);\n      emit('afterClose');\n    };\n\n    const onZoomIn = (isWheel?: boolean) => {\n      if (!isWheel)\n        scale.value++;\n      else\n        scale.value += 0.5;\n\n      setPosition(initialPosition);\n    };\n    const onZoomOut = (isWheel?: boolean) => {\n      if (scale.value > 1) {\n        if (!isWheel)\n          scale.value--;\n        else\n          scale.value -= 0.5;\n      }\n      setPosition(initialPosition);\n    };\n\n    const onRotateRight = () => {\n      rotate.value += 90;\n    };\n\n    const onRotateLeft = () => {\n      rotate.value -= 90;\n    };\n\n    const onFlipX = () => {\n      flip.x = -flip.x;\n    };\n\n    const onFlipY = () => {\n      flip.y = -flip.y;\n    };\n\n    const onSwitchLeft: MouseEventHandler = (event) => {\n      event.preventDefault();\n      // Without this mask close will abnormal\n      event.stopPropagation();\n      if (currentPreviewIndex.value > 0)\n        setCurrent(previewUrlsKeys.value[currentPreviewIndex.value - 1]);\n    };\n\n    const onSwitchRight: MouseEventHandler = (event) => {\n      event.preventDefault();\n      // Without this mask close will abnormal\n      event.stopPropagation();\n      if (currentPreviewIndex.value < previewGroupCount.value - 1)\n        setCurrent(previewUrlsKeys.value[currentPreviewIndex.value + 1]);\n    };\n\n    const wrapClassName = classNames({\n      [`${props.prefixCls}-moving`]: isMoving.value,\n    });\n    const toolClassName = `${props.prefixCls}-operations-operation`;\n    const iconClassName = `${props.prefixCls}-operations-icon`;\n    const tools = [\n      {\n        icon: close,\n        onClick: onClose,\n        type: 'close',\n      },\n      {\n        icon: zoomIn,\n        onClick: () => onZoomIn(),\n        type: 'zoomIn',\n      },\n      {\n        icon: zoomOut,\n        onClick: () => onZoomOut(),\n        type: 'zoomOut',\n        disabled: computed(() => scale.value === 1),\n      },\n      {\n        icon: rotateRight,\n        onClick: onRotateRight,\n        type: 'rotateRight',\n      },\n      {\n        icon: rotateLeft,\n        onClick: onRotateLeft,\n        type: 'rotateLeft',\n      },\n      {\n        icon: flipX,\n        onClick: onFlipX,\n        type: 'flipX',\n      },\n      {\n        icon: flipY,\n        onClick: onFlipY,\n        type: 'flipY',\n      },\n    ];\n\n    const onMouseUp: MouseEventHandler = () => {\n      if (props.visible && isMoving.value) {\n        const width = imgRef.value.offsetWidth * scale.value;\n        const height = imgRef.value.offsetHeight * scale.value;\n        const { left, top } = getOffset(imgRef.value);\n        const isRotate = rotate.value % 180 !== 0;\n\n        isMoving.value = false;\n\n        const fixState = getFixScaleEleTransPosition(\n          isRotate ? height : width,\n          isRotate ? width : height,\n          left,\n          top,\n        );\n        if (fixState)\n          setPosition({ ...fixState });\n      }\n    };\n\n    const onMouseDown: MouseEventHandler = (event) => {\n      // Only allow main button\n      if (event.button !== 0) return;\n      event.preventDefault();\n      // Without this mask close will abnormal\n      event.stopPropagation();\n      originPositionRef.deltaX = event.pageX - position.x;\n      originPositionRef.deltaY = event.pageY - position.y;\n      originPositionRef.originX = position.x;\n      originPositionRef.originY = position.y;\n      isMoving.value = true;\n    };\n\n    const onMouseMove: MouseEventHandler = (event) => {\n      if (props.visible && isMoving.value) {\n        setPosition({\n          x: event.pageX - originPositionRef.deltaX,\n          y: event.pageY - originPositionRef.deltaY,\n        });\n      }\n    };\n\n    const onWheelMove: WheelEventHandler = (event) => {\n      if (!props.visible) return;\n      event.preventDefault();\n      const wheelDirection = event.deltaY;\n      lastWheelZoomDirection.value = { wheelDirection };\n    };\n\n    const onKeyDown = (event: KeyboardEvent) => {\n      if (!props.visible || !showLeftOrRightSwitches.value) return;\n\n      event.preventDefault();\n      if (event.keyCode === KeyCode.LEFT) {\n        if (currentPreviewIndex.value > 0)\n          setCurrent(previewUrlsKeys.value[currentPreviewIndex.value - 1]);\n      } else if (event.keyCode === KeyCode.RIGHT) {\n        if (currentPreviewIndex.value < previewGroupCount.value - 1)\n          setCurrent(previewUrlsKeys.value[currentPreviewIndex.value + 1]);\n      }\n    };\n\n    const onDoubleClick = () => {\n      if (props.visible) {\n        if (scale.value !== 1)\n          scale.value = 1;\n\n        if (position.x !== initialPosition.x || position.y !== initialPosition.y)\n          setPosition(initialPosition);\n      }\n    };\n\n    let removeListeners = () => {};\n    onMounted(() => {\n      watch(\n        [() => props.visible, isMoving],\n        () => {\n          removeListeners();\n          let onTopMouseUpListener: { remove: any };\n          let onTopMouseMoveListener: { remove: any };\n\n          const onMouseUpListener = addEventListenerWrap(window, 'mouseup', onMouseUp, false);\n          const onMouseMoveListener = addEventListenerWrap(window, 'mousemove', onMouseMove, false);\n          const onScrollWheelListener = addEventListenerWrap(window, 'wheel', onWheelMove, {\n            passive: false,\n          });\n          const onKeyDownListener = addEventListenerWrap(window, 'keydown', onKeyDown, false);\n\n          try {\n            // Resolve if in iframe lost event\n            /* istanbul ignore next */\n            if (window.top !== window.self) {\n              onTopMouseUpListener = addEventListenerWrap(window.top, 'mouseup', onMouseUp, false);\n              onTopMouseMoveListener = addEventListenerWrap(\n                window.top,\n                'mousemove',\n                onMouseMove,\n                false,\n              );\n            }\n          } catch (error) {\n            /* istanbul ignore next */\n            warning(false, `[vc-image] ${error}`);\n          }\n\n          removeListeners = () => {\n            onMouseUpListener.remove();\n            onMouseMoveListener.remove();\n            onScrollWheelListener.remove();\n            onKeyDownListener.remove();\n\n            /* istanbul ignore next */\n            if (onTopMouseUpListener) onTopMouseUpListener.remove();\n            /* istanbul ignore next */\n            if (onTopMouseMoveListener) onTopMouseMoveListener.remove();\n          };\n        },\n        { flush: 'post', immediate: true },\n      );\n      watch([lastWheelZoomDirection], () => {\n        const { wheelDirection } = lastWheelZoomDirection.value;\n        if (wheelDirection > 0)\n          onZoomOut(true);\n        else if (wheelDirection < 0)\n          onZoomIn(true);\n      });\n    });\n    onUnmounted(() => {\n      removeListeners();\n    });\n\n    return () => {\n      const { visible, prefixCls, rootClassName, imgCommonProps } = props;\n      return (\n        <Dialog\n          {...attrs}\n          transitionName={props.transitionName}\n          maskTransitionName={props.maskTransitionName}\n          closable={false}\n          keyboard\n          prefixCls={prefixCls}\n          onClose={onClose}\n          afterClose={onAfterClose}\n          visible={visible}\n          wrapClassName={wrapClassName}\n          rootClassName={rootClassName}\n          getContainer={props.getContainer}\n        >\n          <div class={[`${props.prefixCls}-operations-wrapper`, rootClassName]}>\n            <ul class={`${props.prefixCls}-operations`}>\n              {tools.map(({ icon: IconType, onClick, type, disabled }) => (\n                <li\n                  class={classNames(toolClassName, {\n                    [`${props.prefixCls}-operations-operation-disabled`]:\n                      disabled && disabled?.value,\n                  })}\n                  onClick={onClick}\n                  key={type}\n                >\n                  {cloneVNode(IconType, { class: iconClassName })}\n                </li>\n              ))}\n            </ul>\n          </div>\n          <div\n            class={`${props.prefixCls}-img-wrapper`}\n            style={{\n              transform: `translate3d(${position.x}px, ${position.y}px, 0)`,\n            }}\n          >\n            <img\n              {...imgCommonProps}\n              onMousedown={onMouseDown}\n              onDblclick={onDoubleClick}\n              ref={imgRef}\n              class={`${props.prefixCls}-img`}\n              src={combinationSrc.value}\n              alt={props.alt}\n              style={{\n                transform: `scale3d(${flip.x * scale.value}, ${flip.y * scale.value}, 1) rotate(${\n                  rotate.value\n                }deg)`,\n              }}\n            />\n          </div>\n          {showLeftOrRightSwitches.value && (\n            <div\n              class={classNames(`${props.prefixCls}-switch-left`, {\n                [`${props.prefixCls}-switch-left-disabled`]: currentPreviewIndex.value <= 0,\n              })}\n              onClick={onSwitchLeft}\n            >\n              {left}\n            </div>\n          )}\n          {showLeftOrRightSwitches.value && (\n            <div\n              class={classNames(`${props.prefixCls}-switch-right`, {\n                [`${props.prefixCls}-switch-right-disabled`]:\n                  currentPreviewIndex.value >= previewGroupCount.value - 1,\n              })}\n              onClick={onSwitchRight}\n            >\n              {right}\n            </div>\n          )}\n        </Dialog>\n      );\n    };\n  },\n});\n\nexport default Preview;\n"],"names":["initialPosition","x","y","previewProps","dialogPropTypes","src","String","alt","rootClassName","icons","type","Object","default","imgCommonProps","Preview","defineComponent","compatConfig","MODE","name","inheritAttrs","props","emits","setup","emit","attrs","rotateLeft","rotateRight","zoomIn","zoomOut","close","left","right","flipX","flipY","reactive","scale","shallowRef","rotate","flip","position","setPosition","useFrameSetState","onClose","imgRef","originPositionRef","originX","originY","deltaX","deltaY","isMoving","groupContext","imageContext","inject","previewUrls","current","isPreviewGroup","setCurrent","previewGroupCount","computed","value","size","previewUrlsKeys","Array","from","keys","currentPreviewIndex","indexOf","combinationSrc","get","showLeftOrRightSwitches","lastWheelZoomDirection","wheelDirection","onAfterClose","onZoomIn","isWheel","onZoomOut","onRotateRight","onRotateLeft","onFlipX","onFlipY","onSwitchLeft","event","preventDefault","stopPropagation","onSwitchRight","wrapClassName","classNames","prefixCls","toolClassName","iconClassName","tools","icon","onClick","disabled","onMouseUp","visible","width","offsetWidth","height","offsetHeight","top","getOffset","isRotate","fixState","getFixScaleEleTransPosition","onMouseDown","button","pageX","pageY","onMouseMove","onWheelMove","onKeyDown","keyCode","KeyCode","LEFT","RIGHT","onDoubleClick","removeListeners","onMounted","watch","onTopMouseUpListener","onTopMouseMoveListener","onMouseUpListener","addEventListenerWrap","window","onMouseMoveListener","onScrollWheelListener","passive","onKeyDownListener","self","error","warning","remove","flush","immediate","onUnmounted","_createVNode","Dialog","transitionName","maskTransitionName","getContainer","map","IconType","cloneVNode","class","transform"],"mappings":"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"}