{"version":3,"file":"resize-observer.mjs","sources":["../../../components/resize-observer/resize-observer.ts"],"sourcesContent":["import {\n  defineComponent,\n  getCurrentInstance,\n  onBeforeUnmount,\n  onMounted,\n  renderSlot,\n  watch\n} from 'vue'\n\nimport { emitEvent, useProps } from '@vexip-ui/config'\nimport { useResize } from '@vexip-ui/hooks'\nimport { throttle } from '@vexip-ui/utils'\nimport { resizeObserverProps } from './props'\n\nexport default defineComponent({\n  name: 'ResizeObserver',\n  props: resizeObserverProps,\n  setup(_props, { slots }) {\n    const props = useProps('resizeObserver', _props, {\n      throttle: {\n        default: false,\n        validator: value => typeof value === 'boolean' || value > 0\n      },\n      disabled: false\n    })\n\n    const { observeResize, unobserveResize } = useResize()\n\n    let observed = false\n\n    function handleResize(entry: ResizeObserverEntry) {\n      emitEvent(props.onResize, entry)\n    }\n\n    const throttleResize = props.throttle\n      ? throttle(handleResize, typeof props.throttle === 'boolean' ? 16 : props.throttle)\n      : handleResize\n\n    const instance = getCurrentInstance()\n\n    onMounted(() => {\n      watch(\n        () => props.disabled,\n        value => {\n          value ? unobserve() : observe()\n        },\n        { immediate: true, flush: 'post' }\n      )\n    })\n\n    onBeforeUnmount(() => {\n      if (observed) {\n        const el = getCurrentInstance()?.proxy?.$el as Element | null\n\n        if (el?.nextElementSibling) {\n          unobserveResize(el.nextElementSibling)\n        }\n      }\n    })\n\n    function observe() {\n      if (observed) return\n\n      const el = instance?.proxy?.$el as Element | null\n\n      if (el?.nextElementSibling) {\n        if (el.nextElementSibling !== el.nextSibling && el.nodeType === 3 && el.nodeValue !== '') {\n          return\n        }\n\n        observeResize(el.nextElementSibling, throttleResize)\n        observed = true\n      }\n    }\n\n    function unobserve() {\n      if (observed) {\n        const el = instance?.proxy?.$el as Element | null\n\n        if (el?.nextElementSibling) {\n          unobserveResize(el.nextElementSibling)\n        }\n\n        observed = false\n      }\n    }\n\n    return () => renderSlot(slots, 'default')\n  }\n})\n"],"names":["ResizeObserver","defineComponent","resizeObserverProps","_props","slots","props","useProps","value","observeResize","unobserveResize","useResize","observed","handleResize","entry","emitEvent","throttleResize","throttle","instance","getCurrentInstance","onMounted","watch","unobserve","observe","onBeforeUnmount","el","_b","_a","renderSlot"],"mappings":";;;;;AAcA,MAAAA,IAAeC,EAAgB;AAAA,EAC7B,MAAM;AAAA,EACN,OAAOC;AAAA,EACP,MAAMC,GAAQ,EAAE,OAAAC,KAAS;AACjB,UAAAC,IAAQC,EAAS,kBAAkBH,GAAQ;AAAA,MAC/C,UAAU;AAAA,QACR,SAAS;AAAA,QACT,WAAW,CAAAI,MAAS,OAAOA,KAAU,aAAaA,IAAQ;AAAA,MAC5D;AAAA,MACA,UAAU;AAAA,IAAA,CACX,GAEK,EAAE,eAAAC,GAAe,iBAAAC,EAAgB,IAAIC,EAAU;AAErD,QAAIC,IAAW;AAEf,aAASC,EAAaC,GAA4B;AACtC,MAAAC,EAAAT,EAAM,UAAUQ,CAAK;AAAA,IAAA;AAGjC,UAAME,IAAiBV,EAAM,WACzBW,EAASJ,GAAc,OAAOP,EAAM,YAAa,YAAY,KAAKA,EAAM,QAAQ,IAChFO,GAEEK,IAAWC,EAAmB;AAEpC,IAAAC,EAAU,MAAM;AACd,MAAAC;AAAA,QACE,MAAMf,EAAM;AAAA,QACZ,CAASE,MAAA;AACC,UAAAA,IAAAc,MAAcC,EAAQ;AAAA,QAChC;AAAA,QACA,EAAE,WAAW,IAAM,OAAO,OAAO;AAAA,MACnC;AAAA,IAAA,CACD,GAEDC,EAAgB,MAAM;;AACpB,UAAIZ,GAAU;AACN,cAAAa,KAAKC,KAAAC,IAAAR,QAAA,gBAAAQ,EAAsB,UAAtB,gBAAAD,EAA6B;AAExC,QAAID,KAAA,QAAAA,EAAI,sBACNf,EAAgBe,EAAG,kBAAkB;AAAA,MACvC;AAAA,IACF,CACD;AAED,aAASF,IAAU;;AACjB,UAAIX,EAAU;AAER,YAAAa,KAAKE,IAAAT,KAAA,gBAAAA,EAAU,UAAV,gBAAAS,EAAiB;AAE5B,UAAIF,KAAA,QAAAA,EAAI,oBAAoB;AACtB,YAAAA,EAAG,uBAAuBA,EAAG,eAAeA,EAAG,aAAa,KAAKA,EAAG,cAAc;AACpF;AAGY,QAAAhB,EAAAgB,EAAG,oBAAoBT,CAAc,GACxCJ,IAAA;AAAA,MAAA;AAAA,IACb;AAGF,aAASU,IAAY;;AACnB,UAAIV,GAAU;AACN,cAAAa,KAAKE,IAAAT,KAAA,gBAAAA,EAAU,UAAV,gBAAAS,EAAiB;AAE5B,QAAIF,KAAA,QAAAA,EAAI,sBACNf,EAAgBe,EAAG,kBAAkB,GAG5Bb,IAAA;AAAA,MAAA;AAAA,IACb;AAGK,WAAA,MAAMgB,EAAWvB,GAAO,SAAS;AAAA,EAAA;AAE5C,CAAC;"}