@ark-ui/react
Version:
A collection of unstyled, accessible UI components for React, utilizing state machines for seamless interaction.
23 lines (20 loc) • 774 B
JavaScript
'use client';
import { trackFocusVisible, isFocusVisible } from '@zag-js/focus-visible';
import { useCallback, useSyncExternalStore } from 'react';
import { useEnvironmentContext } from '../environment/use-environment-context.js';
function useFocusVisible(props = {}) {
const { isTextInput, autoFocus } = props;
const { getRootNode } = useEnvironmentContext();
const subscribe = useCallback(
(onStoreChange) => trackFocusVisible({
root: getRootNode(),
isTextInput,
autoFocus,
onChange: onStoreChange
}),
[getRootNode, isTextInput, autoFocus]
);
const getSnapshot = useCallback(() => autoFocus || isFocusVisible(), [autoFocus]);
return useSyncExternalStore(subscribe, getSnapshot, () => false);
}
export { useFocusVisible };