UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

1 lines 3.83 kB
{"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;;;;"}