UNPKG

koval-ui

Version:

React components collection with minimalistic design. Supports theming, layout, and input validation.

1 lines 1.72 kB
{"version":3,"file":"useDismiss.cjs","sources":["../../../../src/internal/hooks/useDismiss.ts"],"sourcesContent":["import type {MouseEvent, KeyboardEvent, MutableRefObject} from 'react';\nimport {useCallback} from 'react';\n\nimport {EventType, useEventListener} from '@/internal/hooks/useEventListener.ts';\n\n/**\n * React hook. Triggers provided callback when ESC key pressed or registered click outside provided element\n */\nexport const useDismiss = <TElement extends HTMLElement | null>(\n callback: () => void,\n ref: MutableRefObject<TElement>,\n isOpen: boolean\n) => {\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<TElement>) => {\n if (isOpen && event.key === 'Escape') {\n callback();\n }\n },\n [callback, isOpen]\n );\n\n useEventListener(EventType.keydown, handleKeyDown);\n\n const handleMouseDown = useCallback(\n (event: MouseEvent<TElement>) => {\n if (isOpen && !ref.current!.contains(event.target as TElement)) {\n callback();\n }\n },\n [callback, isOpen, ref]\n );\n\n useEventListener(EventType.mousedown, handleMouseDown);\n};\n"],"names":["useDismiss","callback","ref","isOpen","handleKeyDown","useCallback","event","useEventListener","EventType","handleMouseDown"],"mappings":"0JAQaA,EAAa,CACtBC,EACAC,EACAC,IACC,CACD,MAAMC,EAAgBC,EAAA,YACjBC,GAAmC,CAC5BH,GAAUG,EAAM,MAAQ,UACfL,EAAA,CAEjB,EACA,CAACA,EAAUE,CAAM,CACrB,EAEiBI,mBAAAC,EAAAA,UAAU,QAASJ,CAAa,EAEjD,MAAMK,EAAkBJ,EAAA,YACnBC,GAAgC,CACzBH,GAAU,CAACD,EAAI,QAAS,SAASI,EAAM,MAAkB,GAChDL,EAAA,CAEjB,EACA,CAACA,EAAUE,EAAQD,CAAG,CAC1B,EAEiBK,mBAAAC,EAAAA,UAAU,UAAWC,CAAe,CACzD"}