clickable-json
Version:
Interactive JSON and JSON CRDT viewer and editor
34 lines • 1.47 kB
JavaScript
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
;