{"version":3,"file":"watermark2.mjs","sources":["../../../../../../../packages/components/watermark/src/watermark.vue"],"sourcesContent":["<template>\n  <div ref=\"containerRef\" :style=\"[style]\">\n    <slot />\n  </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport {\n  computed,\n  onBeforeUnmount,\n  onMounted,\n  ref,\n  shallowRef,\n  watch,\n} from 'vue'\nimport { useMutationObserver } from '@vueuse/core'\nimport { isArray, isUndefined } from '@hd-front-end/utils'\nimport { watermarkProps } from './watermark'\nimport { getPixelRatio, getStyleStr, reRendering } from './utils'\nimport useClips, { FontGap } from './useClips'\n\nimport type { WatermarkProps } from './watermark'\nimport type { CSSProperties } from 'vue'\n\ndefineOptions({\n  name: 'ElWatermark',\n})\n\nconst style: CSSProperties = {\n  position: 'relative',\n}\n\nconst props = defineProps(watermarkProps)\nconst color = computed(() => props.font?.color ?? 'rgba(0,0,0,.15)')\nconst fontSize = computed(() => props.font?.fontSize ?? 16)\nconst fontWeight = computed(() => props.font?.fontWeight ?? 'normal')\nconst fontStyle = computed(() => props.font?.fontStyle ?? 'normal')\nconst fontFamily = computed(() => props.font?.fontFamily ?? 'sans-serif')\nconst textAlign = computed(() => props.font?.textAlign ?? 'center')\nconst textBaseline = computed(() => props.font?.textBaseline ?? 'hanging')\n\nconst gapX = computed(() => props.gap[0])\nconst gapY = computed(() => props.gap[1])\nconst gapXCenter = computed(() => gapX.value / 2)\nconst gapYCenter = computed(() => gapY.value / 2)\nconst offsetLeft = computed(() => props.offset?.[0] ?? gapXCenter.value)\nconst offsetTop = computed(() => props.offset?.[1] ?? gapYCenter.value)\n\nconst getMarkStyle = () => {\n  const markStyle: CSSProperties = {\n    zIndex: props.zIndex,\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\nconst containerRef = shallowRef<HTMLDivElement | null>(null)\nconst watermarkRef = shallowRef<HTMLDivElement>()\nconst stopObservation = ref(false)\n\nconst destroyWatermark = () => {\n  if (watermarkRef.value) {\n    watermarkRef.value.remove()\n    watermarkRef.value = undefined\n  }\n}\nconst 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(),\n        backgroundImage: `url('${base64Url}')`,\n        backgroundSize: `${Math.floor(markWidth)}px`,\n      })\n    )\n    containerRef.value?.append(watermarkRef.value)\n    // Delayed execution\n    setTimeout(() => {\n      stopObservation.value = false\n    })\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 */\nconst getMarkSize = (ctx: CanvasRenderingContext2D) => {\n  let defaultWidth = 120\n  let defaultHeight = 64\n  let space = 0\n\n  const { image, content, width, height, rotate } = props\n\n  if (!image && ctx.measureText) {\n    ctx.font = `${Number(fontSize.value)}px ${fontFamily.value}`\n\n    const contents = isArray(content) ? content : [content]\n    let maxWidth = 0\n    let maxHeight = 0\n\n    contents.forEach((item) => {\n      const {\n        width,\n        fontBoundingBoxAscent,\n        fontBoundingBoxDescent,\n        actualBoundingBoxAscent,\n        actualBoundingBoxDescent,\n      } = ctx.measureText(item!)\n      // Using `actualBoundingBoxAscent` to be compatible with lower version browsers (eg: Firefox < 116)\n      const height = isUndefined(fontBoundingBoxAscent)\n        ? actualBoundingBoxAscent + actualBoundingBoxDescent\n        : fontBoundingBoxAscent + fontBoundingBoxDescent\n\n      if (width > maxWidth) maxWidth = Math.ceil(width)\n      if (height > maxHeight) maxHeight = Math.ceil(height)\n    })\n\n    defaultWidth = maxWidth\n    defaultHeight =\n      maxHeight * contents.length + (contents.length - 1) * FontGap\n\n    const angle = (Math.PI / 180) * Number(rotate)\n    space = Math.ceil(Math.abs(Math.sin(angle) * defaultHeight) / 2)\n\n    defaultWidth += space\n  }\n\n  return [width ?? defaultWidth, height ?? defaultHeight, space] as const\n}\n\nconst getClips = useClips()\n\nconst renderWatermark = () => {\n  const canvas = document.createElement('canvas')\n  const ctx = canvas.getContext('2d')\n  const image = props.image\n  const content = props.content\n  const rotate = props.rotate\n\n  if (ctx) {\n    if (!watermarkRef.value) {\n      watermarkRef.value = document.createElement('div')\n    }\n\n    const ratio = getPixelRatio()\n    const [markWidth, markHeight, space] = getMarkSize(ctx)\n\n    const drawCanvas = (\n      drawContent?: NonNullable<WatermarkProps['content']> | HTMLImageElement\n    ) => {\n      const [textClips, clipWidth] = getClips(\n        drawContent || '',\n        rotate,\n        ratio,\n        markWidth,\n        markHeight,\n        {\n          color: color.value,\n          fontSize: fontSize.value,\n          fontStyle: fontStyle.value,\n          fontWeight: fontWeight.value,\n          fontFamily: fontFamily.value,\n          textAlign: textAlign.value,\n          textBaseline: textBaseline.value,\n        },\n        gapX.value,\n        gapY.value,\n        space\n      )\n\n      appendWatermark(textClips, clipWidth)\n    }\n\n    if (image) {\n      const img = new Image()\n      img.onload = () => {\n        drawCanvas(img)\n      }\n      img.onerror = () => {\n        drawCanvas(content)\n      }\n      img.crossOrigin = 'anonymous'\n      img.referrerPolicy = 'no-referrer'\n      img.src = image\n    } else {\n      drawCanvas(content)\n    }\n  }\n}\n\nonMounted(() => {\n  renderWatermark()\n})\n\nwatch(\n  () => props,\n  () => {\n    renderWatermark()\n  },\n  {\n    deep: true,\n    flush: 'post',\n  }\n)\n\nonBeforeUnmount(() => {\n  destroyWatermark()\n})\n\nconst 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\nuseMutationObserver(containerRef, onMutate, {\n  attributes: true,\n  subtree: true,\n  childList: true,\n})\n</script>\n"],"names":["width","height","_openBlock","_createElementBlock","_normalizeStyle","_renderSlot"],"mappings":"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"}