@accessible/using-keyboard
Version:
React utilities for adding accessible focus styles to elements when only someone is using keyboard navigation.
1 lines • 3.51 kB
Source Map (JSON)
{"version":3,"file":"index.dev.mjs","sources":["../../src/index.tsx"],"sourcesContent":["import * as React from 'react'\nimport useLayoutEffect from '@react-hook/passive-layout-effect'\nimport useEvent from '@react-hook/event'\nimport clsx from 'clsx'\n\n// istanbul ignore next\nexport const useUsingKeyboard = (defaultUsingKeyboard = false): boolean => {\n const [usingKeyboard, setUsingKeyboard] = React.useState(defaultUsingKeyboard)\n useEvent(document.body, 'mousedown', () => setUsingKeyboard(false))\n useEvent(document.body, 'keydown', () => setUsingKeyboard(true))\n return usingKeyboard\n}\n\nexport interface BodyUsingKeyboardProps {\n className?: string\n defaultUsingKeyboard?: boolean\n children?: any\n}\n\nexport const BodyUsingKeyboard = ({\n className = 'using-keyboard',\n defaultUsingKeyboard = false,\n children = null,\n}: BodyUsingKeyboardProps) => {\n const usingKeyboard = useUsingKeyboard(defaultUsingKeyboard)\n useLayoutEffect(() => {\n if (usingKeyboard) document.body.classList.add(className)\n return () => {\n document.body.classList.remove(className)\n }\n }, [usingKeyboard, className])\n return children\n}\n\nexport interface UsingKeyboardProps {\n className?: string\n defaultUsingKeyboard?: boolean\n children: React.ReactElement | JSX.Element\n}\n\nexport const UsingKeyboard = ({\n className = 'using-keyboard',\n defaultUsingKeyboard = false,\n children,\n}: UsingKeyboardProps) =>\n React.cloneElement(\n children,\n Object.assign({}, children.props, {\n className: clsx(\n children.props.className,\n useUsingKeyboard(defaultUsingKeyboard) && className\n ),\n })\n )\n\n// istanbul ignore next\nif (typeof process !== 'undefined' && process.env.NODE_ENV !== 'production') {\n BodyUsingKeyboard.displayName = 'BodyUsingKeyboard'\n UsingKeyboard.displayName = 'UsingKeyboard'\n}\n"],"names":["useUsingKeyboard","defaultUsingKeyboard","usingKeyboard","setUsingKeyboard","React","useEvent","document","body","BodyUsingKeyboard","className","children","classList","remove","useLayoutEffect","add","UsingKeyboard","Object","assign","props","clsx","process","displayName"],"mappings":";;;;;IAMaA,gBAAgB,GAAG,SAAnBA,gBAAmB,CAACC,oBAAD,EAA2C;AAAA,MAA1CA,oBAA0C;AAA1CA,IAAAA,oBAA0C,GAAnB,KAAmB;AAAA;;AACzE,MAAM,CAACC,aAAD,EAAgBC,gBAAhB,IAAoCC,QAAA,CAAeH,oBAAf,CAA1C;AACAI,EAAAA,QAAQ,CAACC,QAAQ,CAACC,IAAV,EAAgB,WAAhB,EAA6B,MAAMJ,gBAAgB,CAAC,KAAD,CAAnD,CAAR;AACAE,EAAAA,QAAQ,CAACC,QAAQ,CAACC,IAAV,EAAgB,SAAhB,EAA2B,MAAMJ,gBAAgB,CAAC,IAAD,CAAjD,CAAR;AACA,SAAOD,aAAP;AACD;IAQYM,iBAAiB,GAAG,UAIH;AAAA,MAJI;AAChCC,IAAAA,SAAS,GAAG,gBADoB;AAEhCR,IAAAA,oBAAoB,GAAG,KAFS;AAGhCS,IAAAA,QAAQ,GAAG;AAHqB,GAIJ;AAC5B,MAAMR,aAAa,GAAGF,gBAAgB,CAACC,oBAAD,CAAtC;;AAGS,mBAAM;AACXK,IAAAA,QAAQ,CAACC,IAAT,CAAcI,SAAd,CAAwBC,MAAxB,CAA+BH,SAA/B;AACD;;AAJHI,EAAAA,eAAe,CAAC,MAAM;AACpB,QAAIX,aAAJ,EAAmBI,QAAQ,CAACC,IAAT,CAAcI,SAAd,CAAwBG,GAAxB,CAA4BL,SAA5B;AACnB;AAGD,GALc,EAKZ,CAACP,aAAD,EAAgBO,SAAhB,CALY,CAAf;AAMA,SAAOC,QAAP;AACD;IAQYK,aAAa,GAAG;AAAA,MAAC;AAC5BN,IAAAA,SAAS,GAAG,gBADgB;AAE5BR,IAAAA,oBAAoB,GAAG,KAFK;AAG5BS,IAAAA;AAH4B,GAAD;AAAA,sBAK3BN,YAAA,CACEM,QADF,EAEEM,MAAM,CAACC,MAAP,CAAc,EAAd,EAAkBP,QAAQ,CAACQ,KAA3B,EAAkC;AAChCT,IAAAA,SAAS,EAAEU,IAAI,CACbT,QAAQ,CAACQ,KAAT,CAAeT,SADF,EAEbT,gBAAgB,CAACC,oBAAD,CAAhB,IAA0CQ,SAF7B;AADiB,GAAlC,CAFF,CAL2B;AAAA;;AAgB7B,IAAI,OAAOW,OAAP,KAAmB,WAAnB,IAAkCA,YAAA,KAAyB,YAA/D,EAA6E;AAC3EZ,EAAAA,iBAAiB,CAACa,WAAlB,GAAgC,mBAAhC;AACAN,EAAAA,aAAa,CAACM,WAAd,GAA4B,eAA5B;AACD;;;;"}