Add font settings

This commit is contained in:
aet
2022-02-21 03:54:04 -05:00
parent 16575b6739
commit a06d5189de
14 changed files with 613 additions and 457 deletions

View File

@ -0,0 +1,51 @@
import { useEffect } from "react"
type UseEventListenerOptions = boolean | AddEventListenerOptions
export { useEventListener }
type On<This, Ev> = {
on(listener: (this: This, ev: Ev) => void, deps?: any[]): void
}
interface UseEventListener {
<K extends keyof MediaQueryListEventMap>(
mediaQueryList: MediaQueryList,
type: K,
options?: UseEventListenerOptions
): On<MediaQueryList, MediaQueryListEventMap[K]>
<K extends keyof WindowEventMap>(
window: Window,
type: K,
options?: UseEventListenerOptions
): On<Window, WindowEventMap[K]>
<K extends keyof DocumentEventMap>(
document: Document,
type: K,
options?: UseEventListenerOptions
): On<Document, DocumentEventMap[K]>
<K extends keyof HTMLElementEventMap>(
element: HTMLElement,
type: K,
options?: UseEventListenerOptions
): On<HTMLElement, HTMLElementEventMap[K]>
}
const useEventListener: UseEventListener = function useEventListener(
element: EventTarget,
type: string,
options?: UseEventListenerOptions
) {
return {
on(listener: (ev: any) => any, deps?: any[]) {
// eslint-disable-next-line react-hooks/rules-of-hooks
useEffect(
() => {
element.addEventListener(type, listener, options)
return () => element.removeEventListener(type, listener, options)
},
deps ? [element, type, ...deps] : undefined
)
},
}
}