{"version":3,"file":"watermark.mjs","sources":["../../../common/js/watermark/generateBase64Url.ts","../../../common/js/watermark/randomMovingStyle.ts","../../../common/js/utils/injectStyle.ts","../../../components/watermark/watermark.tsx"],"sourcesContent":["import { WatermarkText, WatermarkImage, WatermarkLayout } from './type';\n\nexport default function generateBase64Url(\n  {\n    width,\n    height,\n    gapX,\n    gapY,\n    offsetLeft,\n    offsetTop,\n    rotate,\n    alpha,\n    watermarkContent,\n    lineSpace,\n    fontColor = 'rgba(0,0,0,0.1)',\n    layout,\n  }: {\n    width: number;\n    height: number;\n    gapX: number;\n    gapY: number;\n    offsetLeft: number;\n    offsetTop: number;\n    rotate: number;\n    alpha: number;\n    watermarkContent: WatermarkText | WatermarkImage | Array<WatermarkText | WatermarkImage>;\n    lineSpace: number;\n    fontColor?: string;\n    layout?: WatermarkLayout;\n  },\n  onFinish: (url: string, backgroundSize?: { width: number }) => void\n): string {\n  const isHexagonal = layout === 'hexagonal';\n\n  const canvas = document.createElement('canvas');\n  const ctx = canvas.getContext('2d');\n\n  if (!ctx) {\n    // eslint-disable-next-line no-console\n    console.warn('当前环境不支持Canvas, 无法绘制水印');\n    onFinish('');\n    return;\n  }\n\n  const ratio = window.devicePixelRatio || 1;\n\n  let actualBackgroundSize = {\n    width: gapX + width,\n  };\n\n  const canvasWidth = (gapX + width) * ratio;\n  const canvasHeight = (gapY + height) * ratio;\n\n  const markWidth = width * ratio;\n  const markHeight = height * ratio;\n\n  const dislocationRotateX = canvasWidth;\n  const dislocationRotateY = canvasHeight;\n  const dislocationDrawX = (gapX + width) * ratio;\n  const dislocationDrawY = (gapY + height) * ratio;\n\n  canvas.width = canvasWidth;\n  canvas.height = canvasHeight;\n  canvas.style.width = `${gapX + width}px`;\n  canvas.style.height = `${gapY + height}px`;\n\n  if (isHexagonal) {\n    canvas.style.width = `${canvasWidth * 2}px`;\n    canvas.style.height = `${canvasHeight * 2}px`;\n    canvas.width = canvasWidth * 2;\n    canvas.height = canvasHeight * 2;\n\n    // 两倍宽度+间距\n    actualBackgroundSize = {\n      width: gapX + width * 2 + width / 2,\n    };\n  }\n\n  ctx.translate(offsetLeft * ratio, offsetTop * ratio);\n  ctx.globalAlpha = alpha;\n\n  ctx.fillStyle = 'transparent';\n  ctx.fillRect(0, 0, markWidth, markHeight);\n\n  // 元素中心为旋转点执行旋转\n  const drawRotate = (ctx: CanvasRenderingContext2D, x: number, y: number, rotate: number) => {\n    ctx.translate(x, y);\n    ctx.rotate((Math.PI / 180) * Number(rotate));\n    ctx.translate(-x, -y);\n  };\n\n  // 绘制文字\n  const drawText = (\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    y: number,\n    markHeight: number,\n    text: string,\n    fontWeight: string,\n    fontSize: number,\n    fontFamily: string,\n    fillStyle: string\n  ) => {\n    ctx.font = `normal normal ${fontWeight} ${fontSize * ratio}px/${markHeight}px ${fontFamily}`;\n    ctx.fillStyle = fillStyle;\n    ctx.textAlign = 'start';\n    ctx.textBaseline = 'top';\n\n    ctx.fillText(text, x, y);\n  };\n\n  const contents = (Array.isArray(watermarkContent) ? watermarkContent : [{ ...watermarkContent }]) as Array<\n    WatermarkText & WatermarkImage & { top: number }\n  >;\n\n  let top = 0;\n  let imageLoadCount = 0;\n  let totalImages = 0;\n\n  // 预处理\n  contents.forEach((item) => {\n    // eslint-disable-next-line no-param-reassign\n    item.top = top;\n    if (item.url) {\n      top += height;\n      totalImages += isHexagonal ? 2 : 1; // hexagonal布局需要绘制两次\n    } else if (item.text) {\n      top += lineSpace;\n    }\n  });\n\n  // 绘制水印内容\n  const renderWatermarkItem = (\n    item: WatermarkText & WatermarkImage & { top: number },\n    offsetX: number = 0,\n    offsetY: number = 0,\n    rotateX: number = 0,\n    rotateY: number = 0\n  ) => {\n    if (item.url) {\n      const { url, isGrayscale = false } = item;\n      const img = new Image();\n      img.crossOrigin = 'anonymous';\n      img.referrerPolicy = 'no-referrer';\n      img.src = url;\n      img.onload = () => {\n        ctx.save?.();\n        drawRotate(ctx, rotateX, rotateY, rotate);\n\n        // fix: 灰度效果只影响图片，不影响文字\n        if (isGrayscale) {\n          const tempCanvas = document.createElement('canvas');\n          const tempCtx = tempCanvas.getContext('2d');\n          tempCanvas.width = width * ratio;\n          tempCanvas.height = height * ratio;\n\n          tempCtx.drawImage(img, 0, 0, width * ratio, height * ratio);\n\n          const imgData = tempCtx.getImageData(0, 0, width * ratio, height * ratio);\n          const pixels = imgData.data;\n          for (let i = 0; i < pixels.length; i += 4) {\n            const lightness = (pixels[i] + pixels[i + 1] + pixels[i + 2]) / 3;\n            pixels[i] = lightness;\n            pixels[i + 1] = lightness;\n            pixels[i + 2] = lightness;\n          }\n          tempCtx.putImageData(imgData, 0, 0);\n\n          ctx.drawImage(tempCanvas, offsetX, offsetY + item.top * ratio, width * ratio, height * ratio);\n        } else {\n          ctx.drawImage(img, offsetX, offsetY + item.top * ratio, width * ratio, height * ratio);\n        }\n\n        ctx.restore?.();\n\n        // 图片加载完成再返回\n        imageLoadCount += 1;\n        if (imageLoadCount === totalImages) {\n          onFinish(canvas.toDataURL(), actualBackgroundSize);\n        }\n      };\n    } else if (item.text) {\n      const { text, fontSize = 16, fontFamily = 'normal', fontWeight = 'normal' } = item;\n      const fillStyle = item?.fontColor || fontColor;\n\n      ctx.save?.();\n      drawRotate(ctx, rotateX, rotateY, rotate);\n      drawText(ctx, offsetX, offsetY + item.top * ratio, markHeight, text, fontWeight, fontSize, fontFamily, fillStyle);\n      ctx.restore?.();\n    }\n  };\n\n  // 矩形水印\n  contents.forEach((item) => {\n    renderWatermarkItem(item, 0, 0, 0, 0);\n  });\n\n  // 六边形水印\n  if (isHexagonal) {\n    contents.forEach((item) => {\n      renderWatermarkItem(item, dislocationDrawX, dislocationDrawY, dislocationRotateX, dislocationRotateY);\n    });\n  }\n\n  // 没有图片\n  if (totalImages === 0) {\n    onFinish(canvas.toDataURL(), actualBackgroundSize);\n  }\n}\n","/* eslint-disable no-nested-ternary */\nexport default function randomMovingStyle() {\n  const align = Math.floor(Math.random() * 4);\n  const p1 = Math.floor(Math.random() * 70) + 30;\n  const leftTopLimit = 0;\n  const bottomLimit = 95;\n  const rightLimit = 90;\n  const keyframesStyle = `\n  @keyframes watermark {\n    0%   {left: ${align === 1 ? rightLimit : align === 3 ? leftTopLimit : p1}%; top: ${\n      align === 0 ? leftTopLimit : align === 2 ? bottomLimit : p1\n    }%;}\n    25% {left: ${align === 0 ? rightLimit : align === 2 ? leftTopLimit : 100 - p1}%; top: ${\n      align === 1 ? bottomLimit : align === 3 ? leftTopLimit : p1\n    }%;}\n    50% {left: ${align === 1 ? leftTopLimit : align === 3 ? rightLimit : 100 - p1}%; top: ${\n      align === 0 ? bottomLimit : align === 2 ? leftTopLimit : 100 - p1\n    }%; transform: translateX(-100%);}\n    75% {left: ${align === 0 ? leftTopLimit : align === 2 ? rightLimit : p1}%; top: ${\n      align === 1 ? leftTopLimit : align === 3 ? bottomLimit : 100 - p1\n    }%;}\n    100% {left: ${align === 1 ? rightLimit : align === 3 ? leftTopLimit : p1}%; top: ${\n      align === 0 ? leftTopLimit : align === 2 ? bottomLimit : p1\n    }%;}\n  }\n  `;\n  return keyframesStyle;\n}\n","const injectStyle = (style: string) => {\n  const styleElement = document.createElement('style');\n  let styleSheet = null;\n  document.head.appendChild(styleElement);\n  styleSheet = styleElement.sheet;\n  styleSheet.insertRule(style, styleSheet.cssRules.length);\n};\n\nexport default injectStyle;\n","import { computed, onMounted, defineComponent, watch, ref, reactive, shallowRef } from 'vue';\nimport props from './props';\nimport generateBase64Url from '@tdesign/common-js/watermark/generateBase64Url';\nimport randomMovingStyle from '@tdesign/common-js/watermark/randomMovingStyle';\nimport injectStyle from '@tdesign/common-js/utils/injectStyle';\nimport { useContent, usePrefixClass, useVariables } from '@tdesign/shared-hooks';\nimport { useMutationObserver } from './hooks';\n\nimport setStyle from '@tdesign/common-js/utils/setStyle';\n\nexport default defineComponent({\n  name: 'TWatermark',\n  props,\n  setup(props) {\n    const backgroundImage = ref('');\n    const watermarkRef = shallowRef<HTMLElement>();\n    const watermarkContentRef = shallowRef<HTMLElement>();\n\n    const offset = reactive(props.offset || []);\n\n    const gapX = computed(() => {\n      return props.movable ? 0 : props.x;\n    });\n\n    const gapY = computed(() => {\n      return props.movable ? 0 : props.y;\n    });\n\n    const rotate = computed(() => {\n      return props.movable ? 0 : props.rotate;\n    });\n\n    const backgroundRepeat = computed(() => {\n      if (props.movable) {\n        return 'no-repeat';\n      }\n      return props.isRepeat ? 'repeat' : 'no-repeat';\n    });\n\n    const offsetLeft = computed(() => {\n      return offset[0] || gapX.value / 2;\n    });\n\n    const offsetTop = computed(() => {\n      return offset[1] || gapY.value / 2;\n    });\n    const { fontColor } = useVariables({\n      fontColor: '--td-text-color-watermark',\n    });\n    const bgImageOptions = computed(() => ({\n      width: props.width,\n      height: props.height,\n      rotate: rotate.value,\n      lineSpace: props.lineSpace,\n      alpha: props.alpha,\n      gapX: gapX.value,\n      gapY: gapY.value,\n      watermarkContent: props.watermarkContent,\n      offsetLeft: offsetLeft.value,\n      offsetTop: offsetTop.value,\n      fontColor: fontColor.value,\n      layout: props.layout,\n    }));\n\n    const removeWaterMark = () => {\n      if (!watermarkContentRef.value) return;\n      watermarkContentRef.value.remove();\n      watermarkContentRef.value = null;\n    };\n\n    const injectWaterMark = () => {\n      generateBase64Url(bgImageOptions.value, (base64Url, backgroundSize) => {\n        removeWaterMark();\n\n        backgroundImage.value = base64Url;\n        watermarkContentRef.value = document.createElement('div');\n        setStyle(watermarkContentRef.value, {\n          zIndex: props.zIndex,\n          position: 'absolute',\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: 0,\n          width: '100%',\n          height: '100%',\n          backgroundSize: `${backgroundSize?.width || gapX.value + props.width}px`,\n          pointerEvents: 'none',\n          backgroundRepeat: backgroundRepeat.value,\n          backgroundImage: `url('${backgroundImage.value}')`,\n          animation: props.movable ? `watermark infinite ${(props.moveInterval * 4) / 60}s` : 'none',\n        });\n        watermarkRef.value?.append(watermarkContentRef.value);\n      });\n\n      if (props.movable) {\n        const keyframesStyle = randomMovingStyle();\n        injectStyle(keyframesStyle);\n      }\n    };\n\n    onMounted(() => {\n      injectWaterMark();\n      useMutationObserver(\n        watermarkRef.value,\n        (mutations) => {\n          if (props.removable || !watermarkContentRef.value) return;\n          for (const mutation of mutations) {\n            const isRemoved = Array.from(mutation.removedNodes).includes(watermarkContentRef.value);\n            const isModified = mutation.type === 'attributes' && watermarkContentRef.value === mutation.target;\n            if (isRemoved || isModified) {\n              injectWaterMark();\n              break;\n            }\n          }\n        },\n        {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          subtree: true,\n        },\n      );\n    });\n\n    watch(() => [props, fontColor.value], injectWaterMark, { deep: true, flush: 'post' });\n\n    return () => {\n      const COMPONENT_NAME = usePrefixClass('watermark');\n      const renderContent = useContent();\n\n      return (\n        <div\n          style={{ position: 'relative', overflow: 'hidden', width: '100%' }}\n          class={COMPONENT_NAME.value}\n          ref={watermarkRef}\n        >\n          {renderContent('default', 'content')}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["generateBase64Url","_ref","onFinish","width","height","gapX","gapY","offsetLeft","offsetTop","rotate","alpha","watermarkContent","lineSpace","_ref$fontColor","fontColor","layout","isHexagonal","canvas","document","createElement","ctx","getContext","console","warn","ratio","window","devicePixelRatio","actualBackgroundSize","canvasWidth","canvasHeight","markWidth","markHeight","dislocationRotateX","dislocationRotateY","dislocationDrawX","dislocationDrawY","style","concat","translate","globalAlpha","fillStyle","fillRect","drawRotate","x","y","Math","PI","Number","drawText","text","fontWeight","fontSize","fontFamily","font","textAlign","textBaseline","fillText","contents","Array","isArray","_objectSpread","top","imageLoadCount","totalImages","forEach","item","url","renderWatermarkItem","offsetX","arguments","length","undefined","offsetY","rotateX","rotateY","_item$isGrayscale","isGrayscale","img","Image","crossOrigin","referrerPolicy","src","onload","_ctx$save","_ctx$restore","save","call","tempCanvas","tempCtx","drawImage","imgData","getImageData","pixels","data","i","lightness","putImageData","restore","toDataURL","_ctx$save2","_ctx$restore2","_item$fontSize","_item$fontFamily","_item$fontWeight","randomMovingStyle","align","floor","random","p1","leftTopLimit","bottomLimit","rightLimit","keyframesStyle","injectStyle","styleElement","styleSheet","head","appendChild","sheet","insertRule","cssRules","defineComponent","name","props","setup","backgroundImage","ref","watermarkRef","shallowRef","watermarkContentRef","offset","reactive","computed","movable","backgroundRepeat","isRepeat","value","_useVariables","useVariables","bgImageOptions","removeWaterMark","remove","injectWaterMark","base64Url","backgroundSize","_watermarkRef$value","setStyle","zIndex","position","left","right","bottom","pointerEvents","animation","moveInterval","append","onMounted","useMutationObserver","mutations","removable","_iterator","_createForOfIteratorHelper","_step","s","n","done","mutation","isRemoved","from","removedNodes","includes","isModified","type","target","err","e","f","attributes","childList","characterData","subtree","watch","deep","flush","COMPONENT_NAME","usePrefixClass","renderContent","useContent","_createVNode","overflow"],"mappings":"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"}