MCPcopy Create free account
hub / github.com/adobe/react-spectrum / triggerHoverStart

Function triggerHoverStart

packages/react-aria/src/interactions/useHover.ts:107–155  ·  view source on GitHub ↗
(event, pointerType)

Source from the content-addressed store, hash-verified

105
106 let {hoverProps, triggerHoverEnd} = useMemo(() => {
107 let triggerHoverStart = (event, pointerType) => {
108 state.pointerType = pointerType;
109 if (
110 isDisabled ||
111 pointerType === 'touch' ||
112 state.isHovered ||
113 !nodeContains(event.currentTarget, getEventTarget(event) as Element)
114 ) {
115 return;
116 }
117
118 state.isHovered = true;
119 let target = event.currentTarget;
120 state.target = target;
121
122 // When an element that is hovered over is removed, no pointerleave event is fired by the browser,
123 // even though the originally hovered target may have shrunk in size so it is no longer hovered.
124 // However, a pointerover event will be fired on the new target the mouse is over.
125 // In Chrome this happens immediately. In Safari and Firefox, it happens upon moving the mouse one pixel.
126 addGlobalListener(
127 getOwnerDocument(getEventTarget(event) as Element),
128 'pointerover',
129 e => {
130 if (
131 state.isHovered &&
132 state.target &&
133 !nodeContains(state.target, getEventTarget(e) as Element)
134 ) {
135 // oxlint-disable-next-line react/react-compiler
136 triggerHoverEnd(e, e.pointerType);
137 }
138 },
139 {capture: true}
140 );
141
142 if (onHoverStart) {
143 onHoverStart({
144 type: 'hoverstart',
145 target,
146 pointerType
147 });
148 }
149
150 if (onHoverChange) {
151 onHoverChange(true);
152 }
153
154 setHovered(true);
155 };
156
157 let triggerHoverEnd = (event, pointerType) => {
158 let target = state.target;

Callers 1

useHoverFunction · 0.85

Calls 6

nodeContainsFunction · 0.90
getEventTargetFunction · 0.90
getOwnerDocumentFunction · 0.90
triggerHoverEndFunction · 0.85
onHoverChangeFunction · 0.85
onHoverStartFunction · 0.50

Tested by

no test coverage detected