{"ast":null,"code":"import { defineComponent, computed, shallowRef, ref, onMounted, watch, onBeforeUnmount, openBlock, createElementBlock, normalizeStyle, renderSlot } from 'vue';\nimport { useMutationObserver } from '@vueuse/core';\nimport { watermarkProps } from './watermark.mjs';\nimport { reRendering, getStyleStr, getPixelRatio } from './utils.mjs';\nimport useClips, { FontGap } from './useClips.mjs';\nimport _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';\nimport { isArray } from '@vue/shared';\nconst __default__ = defineComponent({\n name: \"ElWatermark\"\n});\nconst _sfc_main = /* @__PURE__ */defineComponent({\n ...__default__,\n props: watermarkProps,\n setup(__props) {\n const props = __props;\n const style = {\n position: \"relative\"\n };\n const color = computed(() => {\n var _a, _b;\n return (_b = (_a = props.font) == null ? void 0 : _a.color) != null ? _b : \"rgba(0,0,0,.15)\";\n });\n const fontSize = computed(() => {\n var _a, _b;\n return (_b = (_a = props.font) == null ? void 0 : _a.fontSize) != null ? _b : 16;\n });\n const fontWeight = computed(() => {\n var _a, _b;\n return (_b = (_a = props.font) == null ? void 0 : _a.fontWeight) != null ? _b : \"normal\";\n });\n const fontStyle = computed(() => {\n var _a, _b;\n return (_b = (_a = props.font) == null ? void 0 : _a.fontStyle) != null ? _b : \"normal\";\n });\n const fontFamily = computed(() => {\n var _a, _b;\n return (_b = (_a = props.font) == null ? void 0 : _a.fontFamily) != null ? _b : \"sans-serif\";\n });\n const textAlign = computed(() => {\n var _a, _b;\n return (_b = (_a = props.font) == null ? void 0 : _a.textAlign) != null ? _b : \"center\";\n });\n const textBaseline = computed(() => {\n var _a, _b;\n return (_b = (_a = props.font) == null ? void 0 : _a.textBaseline) != null ? _b : \"hanging\";\n });\n const gapX = computed(() => props.gap[0]);\n const gapY = computed(() => props.gap[1]);\n const gapXCenter = computed(() => gapX.value / 2);\n const gapYCenter = computed(() => gapY.value / 2);\n const offsetLeft = computed(() => {\n var _a, _b;\n return (_b = (_a = props.offset) == null ? void 0 : _a[0]) != null ? _b : gapXCenter.value;\n });\n const offsetTop = computed(() => {\n var _a, _b;\n return (_b = (_a = props.offset) == null ? void 0 : _a[1]) != null ? _b : gapYCenter.value;\n });\n const getMarkStyle = () => {\n const markStyle = {\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 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 return markStyle;\n };\n const containerRef = shallowRef(null);\n const watermarkRef = shallowRef();\n const stopObservation = ref(false);\n const destroyWatermark = () => {\n if (watermarkRef.value) {\n watermarkRef.value.remove();\n watermarkRef.value = void 0;\n }\n };\n const appendWatermark = (base64Url, markWidth) => {\n var _a;\n if (containerRef.value && watermarkRef.value) {\n stopObservation.value = true;\n watermarkRef.value.setAttribute(\"style\", getStyleStr({\n ...getMarkStyle(),\n backgroundImage: `url('${base64Url}')`,\n backgroundSize: `${Math.floor(markWidth)}px`\n }));\n (_a = containerRef.value) == null ? void 0 : _a.append(watermarkRef.value);\n setTimeout(() => {\n stopObservation.value = false;\n });\n }\n };\n const getMarkSize = ctx => {\n let defaultWidth = 120;\n let defaultHeight = 64;\n const image = props.image;\n const content = props.content;\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 = isArray(content) ? content : [content];\n const sizes = contents.map(item => {\n const metrics = ctx.measureText(item);\n return [metrics.width, metrics.fontBoundingBoxAscent !== void 0 ? metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent : metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent];\n });\n defaultWidth = Math.ceil(Math.max(...sizes.map(size => size[0])));\n defaultHeight = Math.ceil(Math.max(...sizes.map(size => size[1]))) * contents.length + (contents.length - 1) * FontGap;\n }\n return [width != null ? width : defaultWidth, height != null ? height : defaultHeight];\n };\n const getClips = useClips();\n const 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 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 drawCanvas = drawContent => {\n const [textClips, clipWidth] = getClips(drawContent || \"\", rotate, ratio, markWidth, markHeight, {\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 }, gapX.value, gapY.value);\n appendWatermark(textClips, clipWidth);\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 onMounted(() => {\n renderWatermark();\n });\n watch(() => props, () => {\n renderWatermark();\n }, {\n deep: true,\n flush: \"post\"\n });\n onBeforeUnmount(() => {\n destroyWatermark();\n });\n const onMutate = mutations => {\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 });\n return (_ctx, _cache) => {\n return openBlock(), createElementBlock(\"div\", {\n ref_key: \"containerRef\",\n ref: containerRef,\n style: normalizeStyle([style])\n }, [renderSlot(_ctx.$slots, \"default\")], 4);\n };\n }\n});\nvar Watermark = /* @__PURE__ */_export_sfc(_sfc_main, [[\"__file\", \"watermark.vue\"]]);\nexport { Watermark as default };","map":{"version":3,"names":["name","style","position","color","computed","_a","_b","props","font","fontSize","fontWeight","fontStyle","fontFamily","textAlign","textBaseline","gapX","gap","gapY","gapXCenter","value","gapYCenter","offsetLeft","offset","offsetTop","getMarkStyle","markStyle","zIndex","left","top","width","height","pointerEvents","backgroundRepeat","positionLeft","positionTop","backgroundPosition","containerRef","shallowRef","watermarkRef","stopObservation","ref","destroyWatermark","remove","appendWatermark","base64Url","markWidth","setAttribute","getStyleStr","backgroundImage","backgroundSize","Math","floor","append","setTimeout","getMarkSize","ctx","defaultWidth","defaultHeight","image","content","measureText","Number","contents","isArray","sizes","map","item","metrics","fontBoundingBoxAscent","fontBoundingBoxDescent","actualBoundingBoxAscent","actualBoundingBoxDescent","ceil","max","size","length","FontGap","getClips","useClips","renderWatermark","canvas","document","createElement","getContext","rotate","ratio","getPixelRatio","markHeight","drawCanvas","drawContent","textClips","clipWidth","img","Image","onload","onerror","crossOrigin","referrerPolicy","src","onMounted","watch","deep","flush","onBeforeUnmount","onMutate","mutations","forEach","mutation"],"sources":["../../../../../../packages/components/watermark/src/watermark.vue"],"sourcesContent":["\n \n \n
\n\n\n\n"],"mappings":"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","ignoreList":[]},"metadata":{},"sourceType":"module","externalDependencies":[]}