@styleless-ui/react
Version:
Completely unstyled, headless and accessible React UI components.
1 lines • 2.82 kB
JavaScript
;var __createBinding=this&&this.__createBinding||(Object.create?function(e,t,n,i){void 0===i&&(i=n);var r=Object.getOwnPropertyDescriptor(t,n);r&&!("get"in r?!t.__esModule:r.writable||r.configurable)||(r={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,i,r)}:function(e,t,n,i){void 0===i&&(i=n),e[i]=t[n]}),__setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),__importStar=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&__createBinding(t,e,n);return __setModuleDefault(t,e),t};Object.defineProperty(exports,"__esModule",{value:!0}),exports.teardown=void 0;var React=__importStar(require("react")),hadKeyboardEvent=!0,hadFocusVisibleRecently=!1,hadFocusVisibleRecentlyTimeout=void 0,inputTypesWhitelist={text:!0,search:!0,url:!0,tel:!0,email:!0,password:!0,number:!0,date:!0,month:!0,week:!0,time:!0,datetime:!0,"datetime-local":!0},focusTriggersKeyboardModality=function(e){if(!e)return!1;var t=e.tagName;return!("INPUT"!==t||!inputTypesWhitelist[e.type]||e.readOnly)||("TEXTAREA"===t&&!e.readOnly||!!e.isContentEditable)},handleKeyDown=function(e){e.metaKey||e.altKey||e.ctrlKey||(hadKeyboardEvent=!0)},handlePointerDown=function(){hadKeyboardEvent=!1},handleVisibilityChange=function(){"hidden"===document.visibilityState&&hadFocusVisibleRecently&&(hadKeyboardEvent=!0)},prepare=function(e){e.addEventListener("keydown",handleKeyDown,!0),e.addEventListener("mousedown",handlePointerDown,!0),e.addEventListener("pointerdown",handlePointerDown,!0),e.addEventListener("touchstart",handlePointerDown,!0),e.addEventListener("visibilitychange",handleVisibilityChange,!0)},teardown=function(e){e.removeEventListener("keydown",handleKeyDown,!0),e.removeEventListener("mousedown",handlePointerDown,!0),e.removeEventListener("pointerdown",handlePointerDown,!0),e.removeEventListener("touchstart",handlePointerDown,!0),e.removeEventListener("visibilitychange",handleVisibilityChange,!0)};exports.teardown=teardown;var isFocusVisible=function(e){if(!e.target)return!1;try{return e.target.matches(":focus-visible")}catch(e){}return hadKeyboardEvent||focusTriggersKeyboardModality(e.target)},useIsFocusVisible=function(){var e=React.useCallback((function(e){e&&prepare(e.ownerDocument)}),[]),t=React.useRef(!1);return{isFocusVisibleRef:t,onFocus:function(e){return!!isFocusVisible(e)&&(t.current=!0,!0)},onBlur:function(){return!!t.current&&(window.clearTimeout(hadFocusVisibleRecentlyTimeout),hadFocusVisibleRecently=!0,hadFocusVisibleRecentlyTimeout=window.setTimeout((function(){hadFocusVisibleRecently=!1}),100),t.current=!1,!0)},ref:e}};exports.default=useIsFocusVisible;