MCPcopy
hub / github.com/adobe/react-spectrum / useFocusRing

Function useFocusRing

packages/react-aria/src/focus/useFocusRing.ts:40–90  ·  view source on GitHub ↗
(props: AriaFocusRingProps = {})

Source from the content-addressed store, hash-verified

38 * not with a mouse, touch, or other input methods.
39 */
40export function useFocusRing(props: AriaFocusRingProps = {}): FocusRingAria {
41 let {autoFocus = false, isTextInput, within} = props;
42 let state = useRef({
43 isFocused: false,
44 isFocusVisible: autoFocus || isFocusVisible()
45 });
46 let [isFocused, setFocused] = useState(false);
47 let [isFocusVisibleState, setFocusVisible] = useState(
48 () => state.current.isFocused && state.current.isFocusVisible
49 );
50
51 let updateState = useCallback(
52 () => setFocusVisible(state.current.isFocused && state.current.isFocusVisible),
53 []
54 );
55
56 let onFocusChange = useCallback(
57 isFocused => {
58 state.current.isFocused = isFocused;
59 state.current.isFocusVisible = isFocusVisible();
60 setFocused(isFocused);
61 updateState();
62 },
63 [updateState]
64 );
65
66 useFocusVisibleListener(
67 isFocusVisible => {
68 state.current.isFocusVisible = isFocusVisible;
69 updateState();
70 },
71 [isTextInput, isFocused],
72 {enabled: isFocused, isTextInput}
73 );
74
75 let {focusProps} = useFocus({
76 isDisabled: within,
77 onFocusChange
78 });
79
80 let {focusWithinProps} = useFocusWithin({
81 isDisabled: !within,
82 onFocusWithinChange: onFocusChange
83 });
84
85 return {
86 isFocused,
87 isFocusVisible: isFocusVisibleState,
88 focusProps: within ? focusWithinProps : focusProps
89 };
90}

Callers 15

ButtonExampleFunction · 0.90
FocusRingFunction · 0.90
MyButtonFunction · 0.90
TableColumnHeaderFunction · 0.90
TableRowFunction · 0.90
TableCellFunction · 0.90
ButtonFunction · 0.90
ResizerFunction · 0.90
ResizableTableRowFunction · 0.90
ResizableTableCellFunction · 0.90
TableColumnHeaderFunction · 0.90
TableRowFunction · 0.90

Calls 5

isFocusVisibleFunction · 0.90
useFocusVisibleListenerFunction · 0.90
useFocusFunction · 0.90
useFocusWithinFunction · 0.90
setFocusedFunction · 0.50

Tested by 1

ButtonExampleFunction · 0.72