{"version":3,"file":"hooks.mjs","sources":["../../src/watermark/hooks.ts"],"sourcesContent":["import type { ComponentPublicInstance, Ref } from 'vue';\nimport { unref, watch, getCurrentScope, onScopeDispose } from 'vue';\n\nexport const defaultWindow = typeof window !== 'undefined' ? window : undefined;\nexport interface ConfigurableWindow {\n  window?: Window;\n}\n// eslint-disable-next-line no-undef\nexport interface MutationObserverOptions extends MutationObserverInit, ConfigurableWindow {}\nexport type MaybeRef<T> = T | Ref<T>;\nexport type VueInstance = ComponentPublicInstance;\nexport type MaybeElementRef<T extends MaybeElement = MaybeElement> = MaybeRef<T>;\nexport type MaybeElement = HTMLElement | SVGElement | VueInstance | undefined | null;\nexport type UnRefElementReturn<T extends MaybeElement = MaybeElement> = T extends VueInstance\n  ? Exclude<MaybeElement, VueInstance>\n  : T | undefined;\n\nexport type Fn = () => void;\n\nexport function unrefElement<T extends MaybeElement>(elRef: MaybeElementRef<T>): UnRefElementReturn<T> {\n  const plain = unref(elRef);\n  return (plain as VueInstance)?.$el ?? plain;\n}\nexport function tryOnScopeDispose(fn: Fn) {\n  if (getCurrentScope()) {\n    onScopeDispose(fn);\n    return true;\n  }\n  return false;\n}\n\nexport function useMutationObserver(\n  target: MaybeElementRef,\n  // eslint-disable-next-line no-undef\n  callback: MutationCallback,\n  options: MutationObserverOptions = {},\n) {\n  const { window = defaultWindow, ...mutationOptions } = options;\n  let observer: MutationObserver | undefined;\n  const isSupported = window && 'MutationObserver' in window;\n\n  const cleanup = () => {\n    if (observer) {\n      observer.disconnect();\n      observer = undefined;\n    }\n  };\n\n  const stopWatch = watch(\n    () => unrefElement(target),\n    (el) => {\n      cleanup();\n\n      if (isSupported && window && el) {\n        observer = new MutationObserver(callback);\n        observer.observe(el, mutationOptions);\n      }\n    },\n    { immediate: true },\n  );\n\n  const stop = () => {\n    cleanup();\n    stopWatch();\n  };\n\n  tryOnScopeDispose(stop);\n\n  return {\n    isSupported,\n    stop,\n  };\n}\n\nexport type UseMutationObserverReturn = ReturnType<typeof useMutationObserver>;\n"],"names":["window","mutationOptions","cleanup","observer","immediate","stopWatch","isSupported","stop"],"mappings":";;;;;;;;;;AAGO,IAAA,aAAA,GAAA,OAAA,MAAA,KAAA,WAAA,GAAA,MAAA,GAAA,KAAA,EAAA;AAgBA,SAAA,YAAA,CAAA,KAAA,EAAA;AAAgG,EAAA,IAAA,UAAA,CAAA;AAC/F,EAAA,IAAA,KAAA,GAAA,KAAA,CAAA,KAAA,CAAA,CAAA;AACN,EAAA,OAAA,CAAA,UAAA,GAAA,KAAA,KAAA,IAAA,IAAA,KAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,MAAA,IAAA,IAAA,UAAA,KAAA,KAAA,CAAA,GAAA,UAAA,GAAA,KAAA,CAAA;AACF,CAAA;AACO,SAAA,iBAAA,CAAA,EAAA,EAAA;;;AAGI,IAAA,OAAA,IAAA,CAAA;AACT,GAAA;AACO,EAAA,OAAA,KAAA,CAAA;AACT,CAAA;AAEO,SAAA,mBAAA,CAAA,MAAA,EAAA,QAAA,EAAA;AAKL,EAAA,IAAA,OAAA,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAA,EAAA,CAAA;AACA,EAAA,IAAA,eAAA,GAAA,OAAA,CAAA,MAAA;AAAQA,IAAAA,OAAAA,GAAAA,eAAAA,KAAAA,KAAAA,CAAAA,GAAAA,aAAAA,GAAAA,eAAAA;AAA2BC,IAAAA,eAAAA,GAAAA,wBAAAA,CAAAA,OAAAA,EAAAA,SAAAA,CAAAA,CAAAA;AAC/B,EAAA,IAAA,QAAA,CAAA;AACE,EAAA,IAAA,WAAA,GAAA,OAAA,IAAA,kBAAA,IAAA,OAAA,CAAA;AAEN,EAAA,IAAA,OAAA,GAAA,SAAA,OAAA,GAAA;AACE,IAAA,IAAA,QAAA,EAAA;;;AAGA,KAAA;;;;;AAMUC,IAAAA,OAAAA,EAAAA,CAAAA;AAEJ,IAAA,IAAA,WAAA,IAAA,OAAA,IAAA,EAAA,EAAA;AACSC,MAAAA,QAAAA,GAAAA,IAAAA,gBAAAA,CAAAA,QAAAA,CAAAA,CAAAA;AACFA,MAAAA,QAAAA,CAAAA,OAAAA,CAAAA,EAAAA,EAAAA,eAAAA,CAAAA,CAAAA;AACX,KAAA;AACF,GAAA,EAAA;AACEC,IAAAA,SAAAA,EAAAA,IAAAA;AAAgB,GAAA,CAAA,CAAA;AAGpB,EAAA,IAAA,IAAA,GAAA,SAAA,IAAA,GAAA;AACUF,IAAAA,OAAAA,EAAAA,CAAAA;AACEG,IAAAA,SAAAA,EAAAA,CAAAA;;;;AAMVC,IAAAA,WAAAA,EAAAA,WAAAA;AACAC,IAAAA,IAAAA,EAAAA,IAAAA;;AAEJ;;;;"}