| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | 
							- import type { Emitter, EventType, Handler, WildcardHandler } from 'mitt'
 
- import create from 'mitt'
 
- import { useEffect, useRef } from 'react'
 
- const merge = <T extends Record<string, any>>(
 
-   ...args: Array<T | undefined>
 
- ): T => {
 
-   return Object.assign({}, ...args)
 
- }
 
- export type _Events = Record<EventType, unknown>
 
- export type UseSubcribeOption = {
 
-   /**
 
-      * Whether the subscription is enabled.
 
-      * @default true
 
-      */
 
-   enabled: boolean;
 
- }
 
- export type ExtendedOn<Events extends _Events> = {
 
-   <Key extends keyof Events>(
 
-     type: Key,
 
-     handler: Handler<Events[Key]>,
 
-     options?: UseSubcribeOption,
 
-   ): void;
 
-   (
 
-     type: '*',
 
-     handler: WildcardHandler<Events>,
 
-     option?: UseSubcribeOption,
 
-   ): void;
 
- }
 
- export type UseMittReturn<Events extends _Events> = {
 
-   useSubcribe: ExtendedOn<Events>;
 
-   emit: Emitter<Events>['emit'];
 
- }
 
- const defaultSubcribeOption: UseSubcribeOption = {
 
-   enabled: true,
 
- }
 
- function useMitt<Events extends _Events>(
 
-   mitt?: Emitter<Events>,
 
- ): UseMittReturn<Events> {
 
-   const emitterRef = useRef<Emitter<Events> | undefined>(undefined)
 
-   if (!emitterRef.current)
 
-     emitterRef.current = mitt ?? create<Events>()
 
-   if (mitt && emitterRef.current !== mitt) {
 
-     emitterRef.current.off('*')
 
-     emitterRef.current = mitt
 
-   }
 
-   const emitter = emitterRef.current
 
-   const useSubcribe: ExtendedOn<Events> = (
 
-     type: string,
 
-     handler: any,
 
-     option?: UseSubcribeOption,
 
-   ) => {
 
-     const { enabled } = merge(defaultSubcribeOption, option)
 
-     useEffect(() => {
 
-       if (enabled) {
 
-         emitter.on(type, handler)
 
-         return () => emitter.off(type, handler)
 
-       }
 
-     })
 
-   }
 
-   return {
 
-     emit: emitter.emit,
 
-     useSubcribe,
 
-   }
 
- }
 
- export { useMitt }
 
 
  |