{"version":3,"file":"Watermark.mjs","sources":["../../../../../../packages/components/watermark/src/Watermark.tsx"],"sourcesContent":["import type { CSSProperties, StyleValue } from 'vue';\nimport { useMutationObserver } from '@antdv/hooks';\n\nimport { useToken } from '@antdv/theme';\n\nimport { initDefaultProps } from '@antdv/utils';\nimport {\n  computed,\n  defineComponent,\n  onBeforeUnmount,\n  onMounted,\n  shallowRef,\n  watch,\n} from 'vue';\nimport { watermarkProps } from './props';\nimport { getPixelRatio, getStyleStr, reRendering, rotateWatermark } from './utils';\n\n/**\n * Base size of the canvas, 1 for parallel layout and 2 for alternate layout\n * Only alternate layout is currently supported\n */\nconst BaseSize = 2;\nconst FontGap = 3;\n\nexport default defineComponent({\n  name: 'AWatermark',\n  inheritAttrs: false,\n  props: initDefaultProps(watermarkProps(), {\n    zIndex: 9,\n    rotate: -22,\n    font: {},\n    gap: [100, 100],\n  }),\n  setup(props, { slots, attrs }) {\n    const [, token] = useToken();\n    const containerRef = shallowRef<HTMLDivElement>();\n    const watermarkRef = shallowRef<HTMLDivElement>();\n    const stopObservation = shallowRef(false);\n    const gapX = computed(() => props.gap?.[0] ?? 100);\n    const gapY = computed(() => props.gap?.[1] ?? 100);\n    const gapXCenter = computed(() => gapX.value / 2);\n    const gapYCenter = computed(() => gapY.value / 2);\n    const offsetLeft = computed(() => props.offset?.[0] ?? gapXCenter.value);\n    const offsetTop = computed(() => props.offset?.[1] ?? gapYCenter.value);\n    const fontSize = computed(() => props.font?.fontSize ?? token.value.fontSizeLG);\n    const fontWeight = computed(() => props.font?.fontWeight ?? 'normal');\n    const fontStyle = computed(() => props.font?.fontStyle ?? 'normal');\n    const fontFamily = computed(() => props.font?.fontFamily ?? 'sans-serif');\n    const color = computed(() => props.font?.color ?? token.value.colorFill);\n    const getMarkStyle = computed(() => {\n      const markStyle: CSSProperties = {\n        zIndex: props.zIndex ?? 9,\n        position: 'absolute',\n        left: 0,\n        top: 0,\n        width: '100%',\n        height: '100%',\n        pointerEvents: 'none',\n        backgroundRepeat: 'repeat',\n      };\n\n      /** Calculate the style of the offset */\n      let positionLeft = offsetLeft.value - gapXCenter.value;\n      let positionTop = offsetTop.value - gapYCenter.value;\n      if (positionLeft > 0) {\n        markStyle.left = `${positionLeft}px`;\n        markStyle.width = `calc(100% - ${positionLeft}px)`;\n        positionLeft = 0;\n      }\n      if (positionTop > 0) {\n        markStyle.top = `${positionTop}px`;\n        markStyle.height = `calc(100% - ${positionTop}px)`;\n        positionTop = 0;\n      }\n      markStyle.backgroundPosition = `${positionLeft}px ${positionTop}px`;\n\n      return markStyle;\n    });\n    const destroyWatermark = () => {\n      if (watermarkRef.value) {\n        watermarkRef.value.remove();\n        watermarkRef.value = undefined;\n      }\n    };\n\n    const appendWatermark = (base64Url: string, markWidth: number) => {\n      if (containerRef.value && watermarkRef.value) {\n        stopObservation.value = true;\n        watermarkRef.value.setAttribute(\n          'style',\n          getStyleStr({\n            ...getMarkStyle.value,\n            backgroundImage: `url('${base64Url}')`,\n            backgroundSize: `${(gapX.value + markWidth) * BaseSize}px`,\n          }),\n        );\n        containerRef.value?.append(watermarkRef.value);\n        // Delayed execution\n        setTimeout(() => {\n          stopObservation.value = false;\n        });\n      }\n    };\n    /**\n     * Get the width and height of the watermark. The default values are as follows\n     * Image: [120, 64]; Content: It's calculated by content;\n     */\n    const getMarkSize = (ctx: CanvasRenderingContext2D) => {\n      let defaultWidth = 120;\n      let defaultHeight = 64;\n      const content = props.content;\n      const image = props.image;\n      const width = props.width;\n      const height = props.height;\n      if (!image && ctx.measureText) {\n        ctx.font = `${Number(fontSize.value)}px ${fontFamily.value}`;\n        const contents = Array.isArray(content) ? content : [content];\n        const widths = contents.map(item => ctx.measureText(item!).width);\n        defaultWidth = Math.ceil(Math.max(...widths));\n        defaultHeight = Number(fontSize.value) * contents.length + (contents.length - 1) * FontGap;\n      }\n      return [width ?? defaultWidth, height ?? defaultHeight] as const;\n    };\n    const fillTexts = (\n      ctx: CanvasRenderingContext2D,\n      drawX: number,\n      drawY: number,\n      drawWidth: number,\n      drawHeight: number,\n    ) => {\n      const ratio = getPixelRatio();\n      const content = props.content;\n      const mergedFontSize = Number(fontSize.value) * ratio;\n      ctx.font = `${fontStyle.value} normal ${fontWeight.value} ${mergedFontSize}px/${drawHeight}px ${fontFamily.value}`;\n      ctx.fillStyle = color.value;\n      ctx.textAlign = 'center';\n      ctx.textBaseline = 'top';\n      ctx.translate(drawWidth / 2, 0);\n      const contents = Array.isArray(content) ? content : [content];\n      contents?.forEach((item, index) => {\n        ctx.fillText(item ?? '', drawX, drawY + index * (mergedFontSize + FontGap * ratio));\n      });\n    };\n    const renderWatermark = () => {\n      const canvas = document.createElement('canvas');\n      const ctx = canvas.getContext('2d');\n      const image = props.image;\n      const rotate = props.rotate ?? -22;\n\n      if (ctx) {\n        if (!watermarkRef.value)\n          watermarkRef.value = document.createElement('div');\n\n        const ratio = getPixelRatio();\n        const [markWidth, markHeight] = getMarkSize(ctx);\n        const canvasWidth = (gapX.value + markWidth) * ratio;\n        const canvasHeight = (gapY.value + markHeight) * ratio;\n        canvas.setAttribute('width', `${canvasWidth * BaseSize}px`);\n        canvas.setAttribute('height', `${canvasHeight * BaseSize}px`);\n\n        const drawX = (gapX.value * ratio) / 2;\n        const drawY = (gapY.value * ratio) / 2;\n        const drawWidth = markWidth * ratio;\n        const drawHeight = markHeight * ratio;\n        const rotateX = (drawWidth + gapX.value * ratio) / 2;\n        const rotateY = (drawHeight + gapY.value * ratio) / 2;\n        /** Alternate drawing parameters */\n        const alternateDrawX = drawX + canvasWidth;\n        const alternateDrawY = drawY + canvasHeight;\n        const alternateRotateX = rotateX + canvasWidth;\n        const alternateRotateY = rotateY + canvasHeight;\n\n        ctx.save();\n        rotateWatermark(ctx, rotateX, rotateY, rotate);\n\n        if (image) {\n          const img = new Image();\n          img.onload = () => {\n            ctx.drawImage(img, drawX, drawY, drawWidth, drawHeight);\n            /** Draw interleaved pictures after rotation */\n            ctx.restore();\n            rotateWatermark(ctx, alternateRotateX, alternateRotateY, rotate);\n            ctx.drawImage(img, alternateDrawX, alternateDrawY, drawWidth, drawHeight);\n            appendWatermark(canvas.toDataURL(), markWidth);\n          };\n          img.crossOrigin = 'anonymous';\n          img.referrerPolicy = 'no-referrer';\n          img.src = image;\n        } else {\n          fillTexts(ctx, drawX, drawY, drawWidth, drawHeight);\n          /** Fill the interleaved text after rotation */\n          ctx.restore();\n          rotateWatermark(ctx, alternateRotateX, alternateRotateY, rotate);\n          fillTexts(ctx, alternateDrawX, alternateDrawY, drawWidth, drawHeight);\n          appendWatermark(canvas.toDataURL(), markWidth);\n        }\n      }\n    };\n    onMounted(() => {\n      renderWatermark();\n    });\n    watch(\n      () => [props, token.value.colorFill, token.value.fontSizeLG],\n      () => {\n        renderWatermark();\n      },\n      {\n        deep: true,\n        flush: 'post',\n      },\n    );\n    onBeforeUnmount(() => {\n      destroyWatermark();\n    });\n    const onMutate = (mutations: MutationRecord[]) => {\n      if (stopObservation.value)\n        return;\n\n      mutations.forEach((mutation) => {\n        if (reRendering(mutation, watermarkRef.value)) {\n          destroyWatermark();\n          renderWatermark();\n        }\n      });\n    };\n    useMutationObserver(containerRef, onMutate, {\n      attributes: true,\n      subtree: true,\n      childList: true,\n      attributeFilter: ['style', 'class'],\n    });\n    return () => (\n      <div\n        {...attrs}\n        ref={containerRef}\n        class={[attrs.class, props.rootClassName]}\n        style={[{ position: 'relative' }, attrs.style as CSSProperties] as StyleValue}\n      >\n        {slots.default?.()}\n      </div>\n    );\n  },\n});\n"],"names":["BaseSize","FontGap","name","inheritAttrs","props","initDefaultProps","watermarkProps","zIndex","rotate","font","gap","setup","slots","attrs","token","useToken","containerRef","shallowRef","watermarkRef","stopObservation","gapX","computed","gapY","gapXCenter","value","gapYCenter","offsetLeft","offset","offsetTop","fontSize","fontSizeLG","fontWeight","fontStyle","fontFamily","color","colorFill","getMarkStyle","markStyle","position","left","top","width","height","pointerEvents","backgroundRepeat","positionLeft","positionTop","backgroundPosition","destroyWatermark","remove","undefined","appendWatermark","base64Url","markWidth","setAttribute","getStyleStr","backgroundImage","backgroundSize","append","setTimeout","getMarkSize","ctx","defaultWidth","defaultHeight","content","image","measureText","Number","contents","Array","isArray","widths","map","item","Math","ceil","max","length","fillTexts","drawX","drawY","drawWidth","drawHeight","ratio","getPixelRatio","mergedFontSize","fillStyle","textAlign","textBaseline","translate","forEach","index","fillText","renderWatermark","canvas","document","createElement","getContext","markHeight","canvasWidth","canvasHeight","rotateX","rotateY","alternateDrawX","alternateDrawY","alternateRotateX","alternateRotateY","save","rotateWatermark","img","Image","onload","drawImage","restore","toDataURL","crossOrigin","referrerPolicy","src","onMounted","watch","deep","flush","onBeforeUnmount","onMutate","mutations","mutation","reRendering","useMutationObserver","attributes","subtree","childList","attributeFilter","_createVNode","class","rootClassName","style","default"],"mappings":"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"}