{"version":3,"file":"index.cjs","sources":["../../../../../../packages/vue-components/vc-resize-observer/src/index.tsx"],"sourcesContent":["// based on rc-resize-observer 1.0.0\nimport type { PropType } from 'vue';\nimport { findDOMNode } from '@antdv/utils';\nimport ResizeObserver from 'resize-observer-polyfill';\nimport {\n  defineComponent,\n  getCurrentInstance,\n  onMounted,\n  onUnmounted,\n  onUpdated,\n  reactive,\n  watch,\n} from 'vue';\n\ninterface ResizeObserverState {\n  height: number;\n  width: number;\n  offsetHeight: number;\n  offsetWidth: number;\n}\n\nexport default defineComponent({\n  compatConfig: { MODE: 3 },\n  name: 'ResizeObserver',\n  props: {\n    disabled: Boolean,\n    onResize: Function as PropType<\n      (\n        size: {\n          width: number;\n          height: number;\n          offsetWidth: number;\n          offsetHeight: number;\n        },\n        element: HTMLElement,\n      ) => void\n    >,\n  },\n  emits: ['resize'],\n  setup(props, { slots }) {\n    const state = reactive<ResizeObserverState>({\n      width: 0,\n      height: 0,\n      offsetHeight: 0,\n      offsetWidth: 0,\n    });\n    let currentElement: Element | null = null;\n    let resizeObserver: ResizeObserver | null = null;\n\n    const destroyObserver = () => {\n      if (resizeObserver) {\n        resizeObserver.disconnect();\n        resizeObserver = null;\n      }\n    };\n\n    const onResize: ResizeObserverCallback = (entries: ResizeObserverEntry[]) => {\n      const { onResize } = props;\n\n      const target = entries[0].target as HTMLElement;\n\n      const { width, height } = target.getBoundingClientRect();\n      const { offsetWidth, offsetHeight } = target;\n\n      /**\n       * Resize observer trigger when content size changed.\n       * In most case we just care about element size,\n       * let's use `boundary` instead of `contentRect` here to avoid shaking.\n       */\n      const fixedWidth = Math.floor(width);\n      const fixedHeight = Math.floor(height);\n\n      if (\n        state.width !== fixedWidth\n        || state.height !== fixedHeight\n        || state.offsetWidth !== offsetWidth\n        || state.offsetHeight !== offsetHeight\n      ) {\n        const size = { width: fixedWidth, height: fixedHeight, offsetWidth, offsetHeight };\n\n        Object.assign(state, size);\n        if (onResize) {\n          // defer the callback but not defer to next frame\n          Promise.resolve().then(() => {\n            onResize(\n              {\n                ...size,\n                offsetWidth,\n                offsetHeight,\n              },\n              target,\n            );\n          });\n        }\n      }\n    };\n    const instance = getCurrentInstance();\n    const registerObserver = () => {\n      const { disabled } = props;\n\n      // Unregister if disabled\n      if (disabled) {\n        destroyObserver();\n        return;\n      }\n      // Unregister if element changed\n      const element = findDOMNode(instance) as Element;\n      const elementChanged = element !== currentElement;\n      if (elementChanged) {\n        destroyObserver();\n        currentElement = element;\n      }\n\n      if (!resizeObserver && element) {\n        resizeObserver = new ResizeObserver(onResize);\n        resizeObserver.observe(element);\n      }\n    };\n    onMounted(() => {\n      registerObserver();\n    });\n    onUpdated(() => {\n      registerObserver();\n    });\n    onUnmounted(() => {\n      destroyObserver();\n    });\n    watch(\n      () => props.disabled,\n      () => {\n        registerObserver();\n      },\n      { flush: 'post' },\n    );\n    return () => {\n      return slots.default?.()[0];\n    };\n  },\n});\n"],"names":["defineComponent","compatConfig","MODE","name","props","disabled","Boolean","onResize","Function","emits","setup","slots","state","reactive","width","height","offsetHeight","offsetWidth","currentElement","resizeObserver","destroyObserver","disconnect","entries","target","getBoundingClientRect","fixedWidth","Math","floor","fixedHeight","size","Object","assign","Promise","resolve","then","instance","getCurrentInstance","registerObserver","element","findDOMNode","elementChanged","ResizeObserver","observe","onMounted","onUpdated","onUnmounted","watch","flush","default"],"mappings":"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"}