@mantine/hooks
Version:
A collection of 50+ hooks for state and UI management
1 lines • 2.38 kB
Source Map (JSON)
{"version":3,"file":"use-hotkeys.mjs","names":[],"sources":["../../src/use-hotkeys/use-hotkeys.ts"],"sourcesContent":["import { useEffect, useEffectEvent } from 'react';\nimport { getHotkeyHandler, getHotkeyMatcher, HotkeyItemOptions } from './parse-hotkey';\n\nexport type { HotkeyItemOptions };\nexport { getHotkeyHandler };\n\nexport type HotkeyItem = [string, (event: KeyboardEvent) => void, HotkeyItemOptions?];\n\nfunction shouldFireEvent(\n event: KeyboardEvent,\n tagsToIgnore: string[],\n triggerOnContentEditable = false\n) {\n if (event.target instanceof HTMLElement) {\n if (triggerOnContentEditable) {\n return !tagsToIgnore.includes(event.target.tagName);\n }\n\n return !event.target.isContentEditable && !tagsToIgnore.includes(event.target.tagName);\n }\n\n return true;\n}\n\nexport function useHotkeys(\n hotkeys: HotkeyItem[],\n tagsToIgnore: string[] = ['INPUT', 'TEXTAREA', 'SELECT'],\n triggerOnContentEditable = false\n) {\n const handleKeydown = useEffectEvent((event: KeyboardEvent) => {\n hotkeys.forEach(\n ([hotkey, handler, options = { preventDefault: true, usePhysicalKeys: false }]) => {\n if (\n getHotkeyMatcher(hotkey, options.usePhysicalKeys)(event) &&\n shouldFireEvent(event, tagsToIgnore, triggerOnContentEditable)\n ) {\n if (options.preventDefault) {\n event.preventDefault();\n }\n\n handler(event);\n }\n }\n );\n });\n\n useEffect(() => {\n document.documentElement.addEventListener('keydown', handleKeydown);\n return () => document.documentElement.removeEventListener('keydown', handleKeydown);\n }, []);\n}\n\nexport namespace useHotkeys {\n export type Hotkey = HotkeyItem;\n}\n"],"mappings":";;;;AAQA,SAAS,gBACP,OACA,cACA,2BAA2B,OAC3B;AACA,KAAI,MAAM,kBAAkB,aAAa;AACvC,MAAI,yBACF,QAAO,CAAC,aAAa,SAAS,MAAM,OAAO,QAAQ;AAGrD,SAAO,CAAC,MAAM,OAAO,qBAAqB,CAAC,aAAa,SAAS,MAAM,OAAO,QAAQ;;AAGxF,QAAO;;AAGT,SAAgB,WACd,SACA,eAAyB;CAAC;CAAS;CAAY;CAAS,EACxD,2BAA2B,OAC3B;CACA,MAAM,gBAAgB,gBAAgB,UAAyB;AAC7D,UAAQ,SACL,CAAC,QAAQ,SAAS,UAAU;GAAE,gBAAgB;GAAM,iBAAiB;GAAO,MAAM;AACjF,OACE,iBAAiB,QAAQ,QAAQ,gBAAgB,CAAC,MAAM,IACxD,gBAAgB,OAAO,cAAc,yBAAyB,EAC9D;AACA,QAAI,QAAQ,eACV,OAAM,gBAAgB;AAGxB,YAAQ,MAAM;;IAGnB;GACD;AAEF,iBAAgB;AACd,WAAS,gBAAgB,iBAAiB,WAAW,cAAc;AACnE,eAAa,SAAS,gBAAgB,oBAAoB,WAAW,cAAc;IAClF,EAAE,CAAC"}