{"version":3,"file":"resize-observer.mjs","sources":["../../../../../../packages/components/resize-box/src/resize-observer.tsx"],"sourcesContent":["import {\n  cloneVNode,\n  computed,\n  defineComponent,\n  onMounted,\n  onUnmounted,\n  ref,\n  watch,\n} from 'vue'\nimport ResizeObserver from 'resize-observer-polyfill'\nimport { getFirstComponent, isComponentInstance } from './data'\nimport type { ComponentPublicInstance } from 'vue'\n\nexport default defineComponent({\n  name: 'ResizeObserver',\n  emits: [\n    /**\n     * resize 事件\n     * @property {ResizeObserverEntry} entry 触发 resize 的 dom 元素\n     */\n    'resize',\n  ],\n  setup(props, { emit, slots }) {\n    let resizeObserver: ResizeObserver | null\n\n    const componentRef: any = ref<HTMLElement | ComponentPublicInstance>()\n\n    const element = computed<HTMLElement>(() => {\n      return isComponentInstance(componentRef.value)\n        ? componentRef.value.$el\n        : componentRef.value\n    })\n\n    const createResizeObserver = (target: HTMLElement) => {\n      if (!target) return\n      resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n        const entry = entries[0]\n        emit('resize', entry)\n      })\n      resizeObserver.observe(target)\n    }\n\n    const destroyResizeObserver = () => {\n      if (resizeObserver) {\n        resizeObserver.disconnect()\n        resizeObserver = null\n      }\n    }\n\n    watch(\n      element,\n      (_element) => {\n        if (resizeObserver) destroyResizeObserver()\n        if (_element) createResizeObserver(_element)\n      },\n      { deep: true }\n    )\n\n    onMounted(() => {\n      if (element.value) {\n        createResizeObserver(element.value)\n      }\n    })\n\n    onUnmounted(() => {\n      destroyResizeObserver()\n    })\n\n    return () => {\n      const firstChild = getFirstComponent(slots.default?.() ?? [])\n      if (firstChild) {\n        return cloneVNode(\n          firstChild,\n          {\n            ref: componentRef,\n          },\n          true\n        )\n      }\n\n      return null\n    }\n  },\n})\n"],"names":["defineComponent","name","emits","setup","emit","slots","element","createResizeObserver","resizeObserver","target","destroyResizeObserver","watch","deep","onMounted","value","onUnmounted","firstChild","cloneVNode","ref","componentRef"],"mappings":";;;;AAaA,qBAAeA,eAAe,CAAC;AAC7BC,EAAAA,IAAI,EAAE,gBAAgB;AACtBC,EAAAA,KAAK,EAAE;AACL,IAAA,QAAA;AACJ,GAAA;AACA,EAAA,KAAA,CAAA,KAAA,EAAA;AACA,IAAA,IAAA;AACI,IAAA,KAAA;GAEGC,EAAAA;IAAUC,IAAI,cAAA,CAAA;AAAEC,IAAAA,MAAAA,YAAAA,GAAAA,GAAAA,EAAAA,CAAAA;AAAM,IAAG,MAAA,OAAA,GAAA,QAAA,CAAA,MAAA;AAC5B,MAAA,OAAyC,mBAAA,CAAA,YAAA,CAAA,KAAA,CAAA,GAAA,YAAA,CAAA,KAAA,CAAA,GAAA,GAAA,YAAA,CAAA,KAAA,CAAA;AAEzC,KAAA,CAAA,CAAA;AAEA,IAAA,MAAMC,oBAAsC,GAAA,CAAA,MAAA,KAAA;AAC1C,MAAA,IAAA,CAAA,MAA0B;AAG5B,QAAE,OAAA;MAEIC,cAAAA,GAAAA,IAAAA,gBAAgD,CAAA,CAAA,OAAA,KAAA;QAChD,WAAS,GAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AACbC,QAAAA,IAAAA,CAAAA,QAAiB,EAAA,KAAkB,CAAA,CAAA;AACjC,OAAA,CAAA,CAAA;AACAJ,MAAAA,cAAK,CAAQ,OAAO,CAAC,MAAA,CAAA,CAAA;AACvB,KAAA,CAAA;AACAI,IAAAA,MAAAA,qBAAuBC,GAAAA,MAAO;MAC/B,IAAA,cAAA,EAAA;QAEKC,cAAAA,CAAAA,UAAwBA,EAAA,CAAM;AAClC,QAAA,iBAAoB,IAAA,CAAA;;AAElBF,KAAAA,CAAAA;AACF,IAAA,KAAA,CAAA,OAAA,EAAA,CAAA,QAAA,KAAA;MACD,IAAA,cAAA;AAEDG,QAAAA,qBAEgB,EAAA,CAAA;AACZ,MAAA,IAAIH,QAAc;AAClB,QAAA,oBAAkC,CAAA,QAAA,CAAA,CAAA;AACpC,KAAC,EACD;AAAEI,MAAAA,IAAI,EAAE,IAAA;AAAK,KACf,CAAC,CAAA;AAEDC,IAAAA,SAAS,CAAC,MAAM;MACd,IAAIP,OAAO,CAACQ,KAAK,EAAE;AACjBP,QAAAA,oBAAoB,CAACD,OAAO,CAACQ,KAAK,CAAC,CAAA;AACrC,OAAA;AACF,KAAC,CAAC,CAAA;AAEFC,IAAAA,WAAW,CAAC,MAAM;AAChBL,MAAAA,qBAAqB,EAAE,CAAA;AACzB,KAAC,CAAC,CAAA;AAEF,IAAA,OAAO,MAAM;MACX,IAAMM,EAAAA,EAAAA,EAAAA,CAAAA;AACN,MAAA,gBAAgB,GAAA,iBAAA,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAA,CAAA,OAAA,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,KAAA,CAAA,KAAA,IAAA,GAAA,EAAA,GAAA,EAAA,CAAA,CAAA;UACPC,UAAAA,EAAAA;AAGHC,QAAAA,OAAKC,UAAAA,CAAAA,UAAAA,EAAAA;UACN,KAEH,YAAC;AACH,SAAA,EAAA,IAAA,CAAA,CAAA;AAEA,OAAA;MACD,OAAA,IAAA,CAAA;AACH,KAAA,CAAA;AACF,GAAE;;;;;"}