{"version":3,"file":"ImageItem.mjs","sources":["../../../../components/image-viewer/base/ImageItem.tsx"],"sourcesContent":["import { ImageErrorIcon } from 'tdesign-icons-vue-next';\nimport { PropType, computed, defineComponent, onMounted, ref, toRefs, watch } from 'vue';\nimport { useConfig, usePrefixClass, useImagePreviewUrl } from '@tdesign/shared-hooks';\nimport { sanitizeSvg } from '@tdesign/shared-utils';\n\nimport { useDrag } from '../hooks';\nimport { TdImageViewerProps } from '../type';\n\nexport default defineComponent({\n  name: 'TImageItem',\n  props: {\n    rotate: Number,\n    scale: Number,\n    mirror: Number,\n    src: [String, Object] as PropType<string | File>,\n    placementSrc: [String, Object] as PropType<string | File>,\n    isSvg: Boolean,\n    imageReferrerpolicy: String as PropType<TdImageViewerProps['imageReferrerpolicy']>,\n  },\n\n  setup(props, { expose }) {\n    const { src, placementSrc, isSvg } = toRefs(props);\n    const classPrefix = usePrefixClass();\n    const error = ref(false);\n    const loaded = ref(false);\n    const { transform, mouseDownHandler, resetTransform } = useDrag({ translateX: 0, translateY: 0 });\n    const { globalConfig } = useConfig('imageViewer');\n    const errorText = globalConfig.value.errorText;\n    const svgElRef = ref<HTMLDivElement>();\n    const modalBoxRef = ref<HTMLDivElement>();\n\n    // --- 向中心缩放的 CSS transition 动画 ---\n    const transitioningClass = `${classPrefix.value}-image-viewer__modal-box--transitioning`;\n    let transitionEndHandler: ((e: TransitionEvent) => void) | null = null;\n    /** 兜底定时器：浏览器可能不触发 transitionend（DOM 移除、动画合并、起止值相同等） */\n    let fallbackTimer: ReturnType<typeof setTimeout> | null = null;\n\n    /** 移除 transition 类名并清理所有监听 */\n    const cleanupTransition = () => {\n      const modalBox = modalBoxRef.value;\n      if (!modalBox) return;\n      if (fallbackTimer) {\n        clearTimeout(fallbackTimer);\n        fallbackTimer = null;\n      }\n      modalBox.classList.remove(transitioningClass);\n      if (transitionEndHandler) {\n        modalBox.removeEventListener('transitionend', transitionEndHandler);\n        transitionEndHandler = null;\n      }\n    };\n\n    /**\n     * 启用 modal-box 的 transition 动画\n     * 流程：清理旧状态 → 强制 reflow → 添加类名 → 设置兜底超时 + transitionend 监听\n     */\n    const enableTransition = () => {\n      const modalBox = modalBoxRef.value;\n      if (!modalBox) return;\n\n      cleanupTransition();\n      modalBox.getBoundingClientRect(); // 强制 reflow，保证移除→添加类名能触发新动画\n      modalBox.classList.add(transitioningClass);\n\n      // 兜底：350ms 后强制清理（transition-duration 一般 ≤ 300ms）\n      fallbackTimer = setTimeout(cleanupTransition, 350);\n\n      const handleTransitionEnd = (e: TransitionEvent) => {\n        if (e.propertyName !== 'transform') return;\n        cleanupTransition();\n      };\n      transitionEndHandler = handleTransitionEnd;\n      modalBox.addEventListener('transitionend', handleTransitionEnd);\n    };\n\n    // 暴露内部状态，供父组件在缩放时读写 transform / 启用过渡动画\n    expose({ modalBoxRef, transform, resetTransform, enableTransition });\n\n    // 双层 transform 架构：\n    // - modal-image（内层）：rotateZ + scale → CSS 自带 transition: all 自动驱动平滑动画\n    // - modal-box（外层）：translate(拖拽位移) + scale(mirror, 1) → 位移和镜像，无 transition 保证拖拽跟手\n    const imgStyle = computed(() => ({\n      transform: `rotateZ(${props.rotate}deg) scale(${props.scale})`,\n      display: !props.placementSrc || loaded.value ? 'block' : 'none',\n    }));\n    const placementImgStyle = computed(() => ({\n      transform: `rotateZ(${props.rotate}deg) scale(${props.scale})`,\n      display: !loaded.value ? 'block' : 'none',\n    }));\n    const boxStyle = computed(() => {\n      const { translateX, translateY } = transform.value;\n      return {\n        transform: `translate(${translateX}px, ${translateY}px) scale(${props.mirror}, 1)`,\n      };\n    });\n\n    const resetStatus = () => {\n      error.value = false;\n      loaded.value = false;\n      if (isSvg.value) {\n        createSvgShadow(mainImagePreviewUrl.value);\n      }\n    };\n\n    const createSvgShadow = async (url: string) => {\n      const response = await fetch(url);\n      if (!response.ok) {\n        error.value = true;\n        throw new Error(`Failed to fetch SVG: ${response.statusText}`);\n      }\n      const svgText = await response.text();\n\n      const safeSvgText = sanitizeSvg(svgText);\n      if (!safeSvgText) {\n        error.value = true;\n        return;\n      }\n\n      const element = svgElRef.value;\n      element.innerHTML = '';\n      element.classList?.add(`${classPrefix.value}-image-viewer__modal-image-svg`);\n      const shadowRoot = element.attachShadow({ mode: 'closed' });\n\n      const container = document.createElement('div');\n\n      container.style.background = 'var(--td-bg-color-container)';\n      container.style.padding = '4px';\n      container.style.borderRadius = '4px';\n      container.style.maxHeight = '100%';\n      container.style.maxWidth = '100%';\n      container.style.boxSizing = 'border-box';\n      container.style.height = 'auto';\n      container.innerHTML = safeSvgText;\n      shadowRoot.appendChild(container);\n\n      const svgElement = container.querySelector('svg');\n      if (svgElement) {\n        const svgViewBox = svgElement.getAttribute('viewBox');\n        if (svgViewBox) {\n          const viewBoxValues = svgViewBox\n            .split(/[\\s,]/)\n            .filter(function (v) {\n              return v;\n            })\n            .map(parseFloat);\n\n          // svg viewbox x(0) and y(1) offset, width(2) and height(3),eg\n          const svgViewBoxWidth = viewBoxValues[2];\n          // const svgViewBoxHeight = viewBoxValues[3];\n          container.style.width = `${svgViewBoxWidth}px`;\n        } else {\n          const bbox = svgElement.getBBox();\n          const calculatedViewBox = `${bbox.x} ${bbox.y} ${bbox.width} ${bbox.height}`;\n          svgElement.setAttribute('viewBox', calculatedViewBox);\n\n          container.style.width = `${bbox.width}px`;\n        }\n        svgElement.style.maxHeight = '100%';\n        svgElement.style.maxWidth = '100%';\n        svgElement.style.height = 'auto';\n        svgElement.style.display = 'block';\n        svgElement.style.lineHeight = 'normal';\n      }\n      loaded.value = true;\n    };\n\n    const { previewUrl: mainImagePreviewUrl } = useImagePreviewUrl(src);\n    const { previewUrl: placementImagePreviewUrl } = useImagePreviewUrl(placementSrc);\n\n    watch([mainImagePreviewUrl, placementImagePreviewUrl], () => {\n      resetStatus();\n    });\n\n    onMounted(async () => {\n      if (isSvg.value) {\n        await createSvgShadow(mainImagePreviewUrl.value);\n      }\n    });\n\n    return () => (\n      <div class={`${classPrefix.value}-image-viewer__modal-pic`}>\n        <div ref={modalBoxRef} class={`${classPrefix.value}-image-viewer__modal-box`} style={boxStyle.value}>\n          {error.value && (\n            <div class={`${classPrefix.value}-image-viewer__img-error`}>\n              {/* 脱离文档流 */}\n              <div class={`${classPrefix.value}-image-viewer__img-error-content`}>\n                <ImageErrorIcon size=\"4em\" />\n                <div class={`${classPrefix.value}-image-viewer__img-error-text`}>{errorText}</div>\n              </div>\n            </div>\n          )}\n\n          {!error.value && !!props.placementSrc && placementImagePreviewUrl.value && (\n            <img\n              class={`${classPrefix.value}-image-viewer__modal-image`}\n              onMousedown={(event: MouseEvent) => {\n                event.stopPropagation();\n                mouseDownHandler(event);\n              }}\n              onTouchstart={(event: TouchEvent) => {\n                event.stopPropagation();\n                mouseDownHandler(event);\n              }}\n              src={placementImagePreviewUrl.value}\n              style={placementImgStyle.value}\n              referrerpolicy={props.imageReferrerpolicy}\n              alt=\"image\"\n              draggable=\"false\"\n            />\n          )}\n\n          {!error.value && mainImagePreviewUrl.value && !isSvg.value && (\n            <img\n              class={`${classPrefix.value}-image-viewer__modal-image`}\n              onMousedown={(event: MouseEvent) => {\n                event.stopPropagation();\n                mouseDownHandler(event);\n              }}\n              onTouchstart={(event: TouchEvent) => {\n                event.stopPropagation();\n                mouseDownHandler(event);\n              }}\n              src={mainImagePreviewUrl.value}\n              onLoad={() => (loaded.value = true)}\n              onError={() => (error.value = true)}\n              style={imgStyle.value}\n              referrerpolicy={props.imageReferrerpolicy}\n              alt=\"image\"\n              draggable=\"false\"\n            />\n          )}\n\n          {!error.value && mainImagePreviewUrl.value && isSvg.value && (\n            <div\n              ref={svgElRef}\n              class={`${classPrefix.value}-image-viewer__modal-image`}\n              onMousedown={(event: MouseEvent) => {\n                event.stopPropagation();\n                mouseDownHandler(event);\n              }}\n              onTouchstart={(event: TouchEvent) => {\n                event.stopPropagation();\n                mouseDownHandler(event);\n              }}\n              data-alt=\"svg\"\n              style={imgStyle.value}\n              draggable=\"false\"\n            ></div>\n          )}\n        </div>\n      </div>\n    );\n  },\n});\n"],"names":["defineComponent","name","props","rotate","Number","scale","mirror","src","String","Object","placementSrc","isSvg","Boolean","imageReferrerpolicy","setup","_ref","expose","_toRefs","toRefs","classPrefix","usePrefixClass","error","ref","loaded","_useDrag","useDrag","translateX","translateY","transform","mouseDownHandler","resetTransform","_useConfig","useConfig","globalConfig","errorText","value","svgElRef","modalBoxRef","transitioningClass","concat","transitionEndHandler","fallbackTimer","cleanupTransition","modalBox","clearTimeout","classList","remove","removeEventListener","enableTransition","getBoundingClientRect","add","setTimeout","handleTransitionEnd","e","propertyName","addEventListener","imgStyle","computed","display","placementImgStyle","boxStyle","_transform$value","resetStatus","createSvgShadow","mainImagePreviewUrl","_ref2","_asyncToGenerator","_regeneratorRuntime","mark","_callee","url","_element$classList","response","svgText","safeSvgText","element","shadowRoot","container","svgElement","svgViewBox","viewBoxValues","svgViewBoxWidth","bbox","calculatedViewBox","wrap","_context","prev","next","fetch","sent","ok","Error","statusText","text","sanitizeSvg","abrupt","innerHTML","attachShadow","mode","document","createElement","style","background","padding","borderRadius","maxHeight","maxWidth","boxSizing","height","appendChild","querySelector","getAttribute","split","filter","v","map","parseFloat","width","getBBox","x","y","setAttribute","lineHeight","stop","_x","apply","arguments","_useImagePreviewUrl","useImagePreviewUrl","previewUrl","_useImagePreviewUrl2","placementImagePreviewUrl","watch","onMounted","_callee2","_context2","_createVNode","ImageErrorIcon","onMousedown","event","stopPropagation","onTouchstart","onLoad","onError"],"mappings":"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"}