{"version":3,"file":"index.mjs","sources":["../../../../../packages/hooks/use-delayed-toggle/index.ts"],"sourcesContent":["import { unref } from 'vue'\nimport { buildProps, isNumber } from '@element-plus/utils'\nimport { useTimeout } from '../use-timeout'\n\nimport type { ToRefs } from 'vue'\n\nexport interface UseDelayedToggleProps {\n  /**\n   * @description delay of appearance, in millisecond, not valid in controlled mode\n   */\n  showAfter?: number\n  /**\n   * @description delay of disappear, in millisecond, not valid in controlled mode\n   */\n  hideAfter?: number\n  /**\n   * @description disappear automatically, in millisecond, not valid in controlled mode\n   */\n  autoClose?: number\n}\n\n/**\n * @deprecated Removed after 3.0.0, Use `UseDelayedToggleProps` instead.\n */\nexport const useDelayedToggleProps = buildProps({\n  /**\n   * @description delay of appearance, in millisecond, not valid in controlled mode\n   */\n  showAfter: {\n    type: Number,\n    default: 0,\n  },\n  /**\n   * @description delay of disappear, in millisecond, not valid in controlled mode\n   */\n  hideAfter: {\n    type: Number,\n    default: 200,\n  },\n  /**\n   * @description disappear automatically, in millisecond, not valid in controlled mode\n   */\n  autoClose: {\n    type: Number,\n    default: 0,\n  },\n} as const)\n\nexport type DelayedToggle = {\n  open: (event?: Event) => void\n  close: (event?: Event) => void\n} & ToRefs<Required<UseDelayedToggleProps>>\n\nexport const useDelayedTogglePropsDefaults = {\n  showAfter: 0,\n  hideAfter: 200,\n  autoClose: 0,\n} as const\n\nexport const useDelayedToggle = ({\n  showAfter,\n  hideAfter,\n  autoClose,\n  open,\n  close,\n}: DelayedToggle) => {\n  const { registerTimeout } = useTimeout()\n  const {\n    registerTimeout: registerTimeoutForAutoClose,\n    cancelTimeout: cancelTimeoutForAutoClose,\n  } = useTimeout()\n\n  const onOpen = (event?: Event, delay = unref(showAfter)) => {\n    registerTimeout(() => {\n      open(event)\n\n      const _autoClose = unref(autoClose)\n      if (isNumber(_autoClose) && _autoClose > 0) {\n        registerTimeoutForAutoClose(() => {\n          close(event)\n        }, _autoClose)\n      }\n    }, delay)\n  }\n\n  const onClose = (event?: Event, delay = unref(hideAfter)) => {\n    cancelTimeoutForAutoClose()\n    registerTimeout(() => {\n      close(event)\n    }, delay)\n  }\n\n  return {\n    onOpen,\n    onClose,\n  }\n}\n"],"names":[],"mappings":";;;;;AAwBO,MAAM,wBAAwB,UAAA,CAAW;AAAA;AAAA;AAAA;AAAA,EAI9C,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAAA;AAAA;AAAA;AAAA,EAIA,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,MAAA;AAAA,IACN,OAAA,EAAS;AAAA;AAEb,CAAU;AAOH,MAAM,6BAAA,GAAgC;AAAA,EAC3C,SAAA,EAAW,CAAA;AAAA,EACX,SAAA,EAAW,GAAA;AAAA,EACX,SAAA,EAAW;AACb;AAEO,MAAM,mBAAmB,CAAC;AAAA,EAC/B,SAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF,CAAA,KAAqB;AACnB,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAI,UAAA,EAAW;AACvC,EAAA,MAAM;AAAA,IACJ,eAAA,EAAiB,2BAAA;AAAA,IACjB,aAAA,EAAe;AAAA,MACb,UAAA,EAAW;AAEf,EAAA,MAAM,SAAS,CAAC,KAAA,EAAe,KAAA,GAAQ,KAAA,CAAM,SAAS,CAAA,KAAM;AAC1D,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,IAAA,CAAK,KAAK,CAAA;AAEV,MAAA,MAAM,UAAA,GAAa,MAAM,SAAS,CAAA;AAClC,MAAA,IAAI,QAAA,CAAS,UAAU,CAAA,IAAK,UAAA,GAAa,CAAA,EAAG;AAC1C,QAAA,2BAAA,CAA4B,MAAM;AAChC,UAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACb,GAAG,UAAU,CAAA;AAAA,MACf;AAAA,IACF,GAAG,KAAK,CAAA;AAAA,EACV,CAAA;AAEA,EAAA,MAAM,UAAU,CAAC,KAAA,EAAe,KAAA,GAAQ,KAAA,CAAM,SAAS,CAAA,KAAM;AAC3D,IAAA,yBAAA,EAA0B;AAC1B,IAAA,eAAA,CAAgB,MAAM;AACpB,MAAA,KAAA,CAAM,KAAK,CAAA;AAAA,IACb,GAAG,KAAK,CAAA;AAAA,EACV,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}