delay.mjs 783 B

1234567891011121314151617181920212223242526272829303132
  1. // Utilities
  2. import { defer, propsFactory } from "../util/index.mjs"; // Types
  3. // Composables
  4. export const makeDelayProps = propsFactory({
  5. closeDelay: [Number, String],
  6. openDelay: [Number, String]
  7. }, 'delay');
  8. export function useDelay(props, cb) {
  9. let clearDelay = () => {};
  10. function runDelay(isOpening) {
  11. clearDelay?.();
  12. const delay = Number(isOpening ? props.openDelay : props.closeDelay);
  13. return new Promise(resolve => {
  14. clearDelay = defer(delay, () => {
  15. cb?.(isOpening);
  16. resolve(isOpening);
  17. });
  18. });
  19. }
  20. function runOpenDelay() {
  21. return runDelay(true);
  22. }
  23. function runCloseDelay() {
  24. return runDelay(false);
  25. }
  26. return {
  27. clearDelay,
  28. runOpenDelay,
  29. runCloseDelay
  30. };
  31. }
  32. //# sourceMappingURL=delay.mjs.map