{"version":3,"file":"index.mjs","sources":["../../../directives/resize/index.ts"],"sourcesContent":["import { useResize } from '@vexip-ui/hooks'\nimport { noop, throttle } from '@vexip-ui/utils'\n\nimport type { DirectiveBinding, ObjectDirective } from 'vue'\nimport type { ResizeHandler } from '@vexip-ui/hooks'\n\nconst { observeResize, unobserveResize } = useResize()\n\nexport interface VResizeOptions {\n  handler: ResizeHandler,\n  throttle?: boolean | number,\n  disabled?: boolean\n}\n\ninterface ResizeRecord {\n  useThrottle: boolean | number,\n  observed: boolean\n}\n\nfunction createObserver(\n  el: HTMLElement & { __resize?: ResizeRecord },\n  binding: DirectiveBinding<ResizeHandler | VResizeOptions>\n) {\n  const options: VResizeOptions =\n    typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\n  const useThrottle = options.throttle || binding.modifiers.throttle\n\n  el.__resize = {\n    useThrottle,\n    observed: false\n  }\n\n  if (options.disabled) {\n    unobserveResize(el)\n    el.__resize.observed = false\n    return\n  }\n\n  const throttleResize = useThrottle\n    ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\n    : options.handler\n\n  observeResize(el, throttleResize)\n  el.__resize.observed = true\n}\n\nexport const vResize: ObjectDirective<\n  HTMLElement & { __resize?: ResizeRecord },\n  ResizeHandler | VResizeOptions\n> = {\n  mounted(el, binding) {\n    createObserver(el, binding)\n  },\n  updated(el, binding) {\n    if (!el.__resize) {\n      createObserver(el, binding)\n      return\n    }\n\n    const options: VResizeOptions =\n      typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\n    const useThrottle = options.throttle || binding.modifiers.throttle\n\n    const getHandler = () =>\n      useThrottle\n        ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\n        : options.handler\n\n    if (options.disabled) {\n      if (el.__resize.observed) {\n        unobserveResize(el)\n        el.__resize.observed = false\n      }\n    } else if (!el.__resize.observed) {\n      observeResize(el, getHandler())\n      el.__resize.observed = true\n    } else {\n      const prevOptions: VResizeOptions =\n        typeof binding.oldValue === 'function'\n          ? { handler: binding.oldValue }\n          : { ...(binding.oldValue || { handler: noop }) }\n\n      if (useThrottle !== el.__resize.useThrottle || options.handler !== prevOptions.handler) {\n        unobserveResize(el)\n        observeResize(el, getHandler())\n      }\n    }\n  },\n  beforeUnmount(el) {\n    if (el.__resize?.observed) {\n      unobserveResize(el)\n    }\n\n    delete el.__resize\n  }\n}\n"],"names":["observeResize","unobserveResize","useResize","createObserver","el","binding","options","useThrottle","throttleResize","throttle","vResize","getHandler","prevOptions","noop","_a"],"mappings":";;AAMA,MAAM,EAAE,eAAAA,GAAe,iBAAAC,EAAgB,IAAIC,EAAU;AAarD,SAASC,EACPC,GACAC,GACA;AACA,QAAMC,IACJ,OAAOD,EAAQ,SAAU,aAAa,EAAE,SAASA,EAAQ,MAAM,IAAI,EAAE,GAAGA,EAAQ,MAAM,GAClFE,IAAcD,EAAQ,YAAYD,EAAQ,UAAU;AAO1D,MALAD,EAAG,WAAW;AAAA,IACZ,aAAAG;AAAA,IACA,UAAU;AAAA,EACZ,GAEID,EAAQ,UAAU;AACpB,IAAAL,EAAgBG,CAAE,GAClBA,EAAG,SAAS,WAAW;AACvB;AAAA,EAAA;AAGI,QAAAI,IAAiBD,IACnBE,EAASH,EAAQ,SAAS,OAAOC,KAAgB,YAAY,KAAKA,CAAW,IAC7ED,EAAQ;AAEZ,EAAAN,EAAcI,GAAII,CAAc,GAChCJ,EAAG,SAAS,WAAW;AACzB;AAEO,MAAMM,IAGT;AAAA,EACF,QAAQN,GAAIC,GAAS;AACnB,IAAAF,EAAeC,GAAIC,CAAO;AAAA,EAC5B;AAAA,EACA,QAAQD,GAAIC,GAAS;AACf,QAAA,CAACD,EAAG,UAAU;AAChB,MAAAD,EAAeC,GAAIC,CAAO;AAC1B;AAAA,IAAA;AAGF,UAAMC,IACJ,OAAOD,EAAQ,SAAU,aAAa,EAAE,SAASA,EAAQ,MAAM,IAAI,EAAE,GAAGA,EAAQ,MAAM,GAClFE,IAAcD,EAAQ,YAAYD,EAAQ,UAAU,UAEpDM,IAAa,MACjBJ,IACIE,EAASH,EAAQ,SAAS,OAAOC,KAAgB,YAAY,KAAKA,CAAW,IAC7ED,EAAQ;AAEd,QAAIA,EAAQ;AACN,MAAAF,EAAG,SAAS,aACdH,EAAgBG,CAAE,GAClBA,EAAG,SAAS,WAAW;AAAA,aAEhB,CAACA,EAAG,SAAS;AACR,MAAAJ,EAAAI,GAAIO,GAAY,GAC9BP,EAAG,SAAS,WAAW;AAAA,SAClB;AACL,YAAMQ,IACJ,OAAOP,EAAQ,YAAa,aACxB,EAAE,SAASA,EAAQ,SAAS,IAC5B,EAAE,GAAIA,EAAQ,YAAY,EAAE,SAASQ,IAAQ;AAEnD,OAAIN,MAAgBH,EAAG,SAAS,eAAeE,EAAQ,YAAYM,EAAY,aAC7EX,EAAgBG,CAAE,GACJJ,EAAAI,GAAIO,GAAY;AAAA,IAChC;AAAA,EAEJ;AAAA,EACA,cAAcP,GAAI;;AACZ,KAAAU,IAAAV,EAAG,aAAH,QAAAU,EAAa,YACfb,EAAgBG,CAAE,GAGpB,OAAOA,EAAG;AAAA,EAAA;AAEd;"}