57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import { unref } from 'vue';
 | |
| import { useTimeout } from '../use-timeout/index.mjs';
 | |
| import { buildProps } from '../../utils/vue/props/runtime.mjs';
 | |
| import { isNumber } from '../../utils/types.mjs';
 | |
| 
 | |
| const useDelayedToggleProps = buildProps({
 | |
|   showAfter: {
 | |
|     type: Number,
 | |
|     default: 0
 | |
|   },
 | |
|   hideAfter: {
 | |
|     type: Number,
 | |
|     default: 200
 | |
|   },
 | |
|   autoClose: {
 | |
|     type: Number,
 | |
|     default: 0
 | |
|   }
 | |
| });
 | |
| const useDelayedToggle = ({
 | |
|   showAfter,
 | |
|   hideAfter,
 | |
|   autoClose,
 | |
|   open,
 | |
|   close
 | |
| }) => {
 | |
|   const { registerTimeout } = useTimeout();
 | |
|   const {
 | |
|     registerTimeout: registerTimeoutForAutoClose,
 | |
|     cancelTimeout: cancelTimeoutForAutoClose
 | |
|   } = useTimeout();
 | |
|   const onOpen = (event, delay = unref(showAfter)) => {
 | |
|     registerTimeout(() => {
 | |
|       open(event);
 | |
|       const _autoClose = unref(autoClose);
 | |
|       if (isNumber(_autoClose) && _autoClose > 0) {
 | |
|         registerTimeoutForAutoClose(() => {
 | |
|           close(event);
 | |
|         }, _autoClose);
 | |
|       }
 | |
|     }, delay);
 | |
|   };
 | |
|   const onClose = (event, delay = unref(hideAfter)) => {
 | |
|     cancelTimeoutForAutoClose();
 | |
|     registerTimeout(() => {
 | |
|       close(event);
 | |
|     }, delay);
 | |
|   };
 | |
|   return {
 | |
|     onOpen,
 | |
|     onClose
 | |
|   };
 | |
| };
 | |
| 
 | |
| export { useDelayedToggle, useDelayedToggleProps };
 | |
| //# sourceMappingURL=index.mjs.map
 |