A Vue3 HTMLElement Resize observer hook:
import { ref, watch, Ref } from 'vue'
import ResizeObserver from 'resize-observer-polyfill'
export interface UseResizeObserver {
  width: number
  height: number
  top: number
  left: number
  element?: Element
}
export default function (elementRef: Ref<Element | null>) {
  const state: Ref<UseResizeObserver> = ref({
    width: NaN,
    height: NaN,
    top: NaN,
    left: NaN,
    element: undefined,
  })
  const ro = new ResizeObserver((entries, observer) => {
    for (const entry of entries) {
      const { left, top, width, height } = entry.contentRect
      state.value = { width, height, top, left, element: entry.target }
    }
  })
  watch(elementRef, (element) => {
    if (element) ro.observe(element)
  })
  return state
}
TODO: add method of watch all inputs in one observer, maybe should use a constructor