UNPKG

clickable-json

Version:

Interactive JSON and JSON CRDT viewer and editor

34 lines 1.47 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FocusProvider = exports.useIsFocused = exports.useFocus = exports.context = void 0; const React = require("react"); exports.context = React.createContext(null); const useFocus = () => React.useContext(exports.context); exports.useFocus = useFocus; const useIsFocused = (node) => { const { focused } = (0, exports.useFocus)(); return focused === node; }; exports.useIsFocused = useIsFocused; const FocusProvider = ({ children, onFocus }) => { const [focused, _focus] = React.useState(null); const [pointed, point] = React.useState(null); const focus = React.useCallback((node) => { _focus(node); onFocus === null || onFocus === void 0 ? void 0 : onFocus(node); }, [onFocus]); React.useEffect(() => { const listener = (e) => { const active = document.activeElement; if (active && (active.nodeName === 'INPUT' || active.nodeName === 'TEXTAREA')) return; if (e.key === 'Escape') focus(null); }; document.addEventListener('keydown', listener, { capture: true, passive: true }); return () => document.removeEventListener('keydown', listener); }, []); return React.createElement(exports.context.Provider, { value: { focused, focus, pointed, point } }, children); }; exports.FocusProvider = FocusProvider; //# sourceMappingURL=focus.js.map