{"version":3,"file":"watermark.mjs","sources":["../../src/watermark/watermark.tsx"],"sourcesContent":["import { computed, onMounted, defineComponent, watch, ref, reactive, shallowRef } from 'vue';\nimport generateBase64Url from '../_common/js/watermark/generateBase64Url';\nimport randomMovingStyle from '../_common/js/watermark/randomMovingStyle';\nimport injectStyle from '../_common/js/utils/injectStyle';\nimport { useContent, usePrefixClass, useVariables } from '../hooks';\nimport setStyle from '../_common/js/utils/setStyle';\nimport { useMutationObserver } from './hooks';\nimport config from '../config';\n\nimport props from './props';\n\nconst { prefix } = config;\n\nexport default defineComponent({\n  name: `${prefix}-watermark`,\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 class={COMPONENT_NAME.value} ref={watermarkRef}>\n          {renderContent('default', 'content')}\n        </div>\n      );\n    };\n  },\n});\n"],"names":["prefix","config","defineComponent","name","props","setup","backgroundImage","ref","watermarkRef","shallowRef","watermarkContentRef","offset","reactive","gapX","computed","movable","x","gapY","y","rotate","backgroundRepeat","isRepeat","offsetLeft","value","offsetTop","_useVariables","useVariables","fontColor","bgImageOptions","width","height","lineSpace","alpha","watermarkContent","layout","removeWaterMark","remove","injectWaterMark","generateBase64Url","base64Url","backgroundSize","_watermarkRef$value","document","createElement","setStyle","zIndex","position","left","right","top","bottom","pointerEvents","concat","animation","moveInterval","append","keyframesStyle","randomMovingStyle","injectStyle","onMounted","useMutationObserver","mutations","removable","_iterator","_createForOfIteratorHelper","_step","s","n","done","mutation","isRemoved","Array","from","removedNodes","includes","isModified","type","target","err","e","f","attributes","childList","characterData","subtree","watch","deep","flush","COMPONENT_NAME","usePrefixClass","renderContent","useContent","_createVNode"],"mappings":"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"}