{"version":3,"file":"index.mjs","sources":["../../../directives/resize/index.ts"],"sourcesContent":["import { observeResize, unobserveResize } from '@vexip-ui/hooks'\r\nimport { noop, throttle } from '@vexip-ui/utils'\r\n\r\nimport type { DirectiveBinding, ObjectDirective } from 'vue'\r\nimport type { ResizeHandler } from '@vexip-ui/hooks'\r\n\r\nexport interface VResizeOptions {\r\n  handler: ResizeHandler,\r\n  throttle?: boolean | number,\r\n  disabled?: boolean,\r\n}\r\n\r\ninterface ResizeRecord {\r\n  useThrottle: boolean | number,\r\n  observed: boolean,\r\n}\r\n\r\nfunction createObserver(\r\n  el: HTMLElement & { __resize?: ResizeRecord },\r\n  binding: DirectiveBinding<ResizeHandler | VResizeOptions>,\r\n) {\r\n  const options: VResizeOptions =\r\n    typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\r\n  const useThrottle = options.throttle || binding.modifiers.throttle || false\r\n\r\n  el.__resize = {\r\n    useThrottle,\r\n    observed: false,\r\n  }\r\n\r\n  if (options.disabled) {\r\n    unobserveResize(el)\r\n    el.__resize.observed = false\r\n    return\r\n  }\r\n\r\n  const throttleResize = useThrottle\r\n    ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\r\n    : options.handler\r\n\r\n  observeResize(el, throttleResize)\r\n  el.__resize.observed = true\r\n}\r\n\r\nexport const vResize: ObjectDirective<\r\n  HTMLElement & { __resize?: ResizeRecord },\r\n  ResizeHandler | VResizeOptions\r\n> = {\r\n  mounted(el, binding) {\r\n    createObserver(el, binding)\r\n  },\r\n  updated(el, binding) {\r\n    if (!el.__resize) {\r\n      createObserver(el, binding)\r\n      return\r\n    }\r\n\r\n    const options: VResizeOptions =\r\n      typeof binding.value === 'function' ? { handler: binding.value } : { ...binding.value }\r\n    const useThrottle = options.throttle || binding.modifiers.throttle\r\n\r\n    const getHandler = () =>\r\n      useThrottle\r\n        ? throttle(options.handler, typeof useThrottle === 'boolean' ? 16 : useThrottle)\r\n        : options.handler\r\n\r\n    if (options.disabled) {\r\n      if (el.__resize.observed) {\r\n        unobserveResize(el)\r\n        el.__resize.observed = false\r\n      }\r\n    } else if (!el.__resize.observed) {\r\n      observeResize(el, getHandler())\r\n      el.__resize.observed = true\r\n    } else {\r\n      const prevOptions: VResizeOptions =\r\n        typeof binding.oldValue === 'function'\r\n          ? { handler: binding.oldValue }\r\n          : { ...(binding.oldValue || { handler: noop }) }\r\n\r\n      if (useThrottle !== el.__resize.useThrottle || options.handler !== prevOptions.handler) {\r\n        unobserveResize(el)\r\n        observeResize(el, getHandler())\r\n      }\r\n    }\r\n  },\r\n  beforeUnmount(el) {\r\n    if (el.__resize?.observed) {\r\n      unobserveResize(el)\r\n    }\r\n\r\n    delete el.__resize\r\n  },\r\n}\r\n"],"names":["createObserver","el","binding","options","useThrottle","unobserveResize","throttleResize","throttle","observeResize","vResize","getHandler","prevOptions","noop","_a"],"mappings":";;AAiBA,SAASA,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,YAAY;AAOtE,MALAD,EAAG,WAAW;AAAA,IACZ,aAAAG;AAAA,IACA,UAAU;AAAA,EACZ,GAEID,EAAQ,UAAU;AACpB,IAAAE,EAAgBJ,CAAE,GAClBA,EAAG,SAAS,WAAW;AACvB;AAAA,EAAA;AAGI,QAAAK,IAAiBF,IACnBG,EAASJ,EAAQ,SAAS,OAAOC,KAAgB,YAAY,KAAKA,CAAW,IAC7ED,EAAQ;AAEZ,EAAAK,EAAcP,GAAIK,CAAc,GAChCL,EAAG,SAAS,WAAW;AACzB;AAEO,MAAMQ,IAGT;AAAA,EACF,QAAQR,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,UAEpDQ,IAAa,MACjBN,IACIG,EAASJ,EAAQ,SAAS,OAAOC,KAAgB,YAAY,KAAKA,CAAW,IAC7ED,EAAQ;AAEd,QAAIA,EAAQ;AACN,MAAAF,EAAG,SAAS,aACdI,EAAgBJ,CAAE,GAClBA,EAAG,SAAS,WAAW;AAAA,aAEhB,CAACA,EAAG,SAAS;AACR,MAAAO,EAAAP,GAAIS,GAAY,GAC9BT,EAAG,SAAS,WAAW;AAAA,SAClB;AACL,YAAMU,IACJ,OAAOT,EAAQ,YAAa,aACxB,EAAE,SAASA,EAAQ,SAAS,IAC5B,EAAE,GAAIA,EAAQ,YAAY,EAAE,SAASU,IAAQ;AAEnD,OAAIR,MAAgBH,EAAG,SAAS,eAAeE,EAAQ,YAAYQ,EAAY,aAC7EN,EAAgBJ,CAAE,GACJO,EAAAP,GAAIS,GAAY;AAAA,IAChC;AAAA,EAEJ;AAAA,EACA,cAAcT,GAAI;;AACZ,KAAAY,IAAAZ,EAAG,aAAH,QAAAY,EAAa,YACfR,EAAgBJ,CAAE,GAGpB,OAAOA,EAAG;AAAA,EAAA;AAEd;"}