@react-aria/interactions 3.5.0 → 3.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.js CHANGED
@@ -1,1746 +1,1365 @@
1
- import _react, { useContext, useEffect, useMemo, useRef, useState, useCallback } from "react";
2
- import { mergeProps, runAfterTransition, focusWithoutScrolling, useGlobalListeners, useSyncRef, isMac } from "@react-aria/utils";
3
- import _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
4
- import _babelRuntimeHelpersEsmExtends from "@babel/runtime/helpers/esm/extends";
5
- let $e17c9db826984f8ab8e5d837bf0b8$var$state = 'default';
6
- let $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect = '';
7
-
8
- function $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection() {
9
- if ($e17c9db826984f8ab8e5d837bf0b8$var$state === 'default') {
10
- $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect = document.documentElement.style.webkitUserSelect;
11
- document.documentElement.style.webkitUserSelect = 'none';
12
- }
13
-
14
- $e17c9db826984f8ab8e5d837bf0b8$var$state = 'disabled';
15
- }
16
-
17
- function $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection() {
18
- // If the state is already default, there's nothing to do.
19
- // If it is restoring, then there's no need to queue a second restore.
20
- if ($e17c9db826984f8ab8e5d837bf0b8$var$state !== 'disabled') {
21
- return;
22
- }
23
-
24
- $e17c9db826984f8ab8e5d837bf0b8$var$state = 'restoring'; // There appears to be a delay on iOS where selection still might occur
25
- // after pointer up, so wait a bit before removing user-select.
26
-
27
- setTimeout(() => {
28
- // Wait for any CSS transitions to complete so we don't recompute style
29
- // for the whole page in the middle of the animation and cause jank.
30
- runAfterTransition(() => {
31
- // Avoid race conditions
32
- if ($e17c9db826984f8ab8e5d837bf0b8$var$state === 'restoring') {
33
- if (document.documentElement.style.webkitUserSelect === 'none') {
34
- document.documentElement.style.webkitUserSelect = $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect || '';
35
- }
1
+ import {mergeProps as $7R3Av$mergeProps, useSyncRef as $7R3Av$useSyncRef, useGlobalListeners as $7R3Av$useGlobalListeners, focusWithoutScrolling as $7R3Av$focusWithoutScrolling, isIOS as $7R3Av$isIOS, runAfterTransition as $7R3Av$runAfterTransition, isMac as $7R3Av$isMac, useEvent as $7R3Av$useEvent, useDescription as $7R3Av$useDescription} from "@react-aria/utils";
2
+ import $7R3Av$react, {useRef as $7R3Av$useRef, useContext as $7R3Av$useContext, useState as $7R3Av$useState, useMemo as $7R3Av$useMemo, useEffect as $7R3Av$useEffect, useCallback as $7R3Av$useCallback} from "react";
36
3
 
37
- $e17c9db826984f8ab8e5d837bf0b8$var$savedUserSelect = '';
38
- $e17c9db826984f8ab8e5d837bf0b8$var$state = 'default';
39
- }
40
- });
41
- }, 300);
4
+ function $parcel$export(e, n, v, s) {
5
+ Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
42
6
  }
7
+ var $acf5f8872229f2cb$exports = {};
43
8
 
44
- /*
45
- * Copyright 2020 Adobe. All rights reserved.
46
- * This file is licensed to you under the Apache License, Version 2.0 (the "License");
47
- * you may not use this file except in compliance with the License. You may obtain a copy
48
- * of the License at http://www.apache.org/licenses/LICENSE-2.0
49
- *
50
- * Unless required by applicable law or agreed to in writing, software distributed under
51
- * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
52
- * OF ANY KIND, either express or implied. See the License for the specific language
53
- * governing permissions and limitations under the License.
54
- */
55
- // Original licensing for the following method can be found in the
56
- // NOTICE file in the root directory of this source tree.
57
- // See https://github.com/facebook/react/blob/3c713d513195a53788b3f8bb4b70279d68b15bcc/packages/react-interactions/events/src/dom/shared/index.js#L74-L87
58
- // Keyboards, Assistive Technologies, and element.click() all produce a "virtual"
59
- // click event. This is a method of inferring such clicks. Every browser except
60
- // IE 11 only sets a zero value of "detail" for click events that are "virtual".
61
- // However, IE 11 uses a zero value for all click events. For IE 11 we rely on
62
- // the quirk that it produces click events that are of type PointerEvent, and
63
- // where only the "virtual" click lacks a pointerType field.
64
- function $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(event) {
65
- // JAWS/NVDA with Firefox.
66
- if (event.mozInputSource === 0 && event.isTrusted) {
67
- return true;
68
- }
9
+ $parcel$export($acf5f8872229f2cb$exports, "Pressable", () => $acf5f8872229f2cb$export$27c701ed9e449e99);
69
10
 
70
- return event.detail === 0 && !event.pointerType;
71
- }
11
+ var $bb70d401e0bbab2b$exports = {};
72
12
 
73
- const $a3ff51240de6f955c79cf17a88e349$export$PressResponderContext = /*#__PURE__*/_react.createContext(null);
13
+ $parcel$export($bb70d401e0bbab2b$exports, "usePress", () => $bb70d401e0bbab2b$export$45712eceda6fad21);
74
14
 
75
- $a3ff51240de6f955c79cf17a88e349$export$PressResponderContext.displayName = 'PressResponderContext';
15
+ // Note that state only matters here for iOS. Non-iOS gets user-select: none applied to the target element
16
+ // rather than at the document level so we just need to apply/remove user-select: none for each pressed element individually
17
+ let $8714dea79b55b9da$var$state = 'default';
18
+ let $8714dea79b55b9da$var$savedUserSelect = '';
19
+ let $8714dea79b55b9da$var$modifiedElementMap = new WeakMap();
20
+ function $8714dea79b55b9da$export$16a4697467175487(target) {
21
+ if ($7R3Av$isIOS()) {
22
+ if ($8714dea79b55b9da$var$state === 'default') {
23
+ $8714dea79b55b9da$var$savedUserSelect = document.documentElement.style.webkitUserSelect;
24
+ document.documentElement.style.webkitUserSelect = 'none';
25
+ }
26
+ $8714dea79b55b9da$var$state = 'disabled';
27
+ } else if (target) {
28
+ // If not iOS, store the target's original user-select and change to user-select: none
29
+ // Ignore state since it doesn't apply for non iOS
30
+ $8714dea79b55b9da$var$modifiedElementMap.set(target, target.style.userSelect);
31
+ target.style.userSelect = 'none';
32
+ }
33
+ }
34
+ function $8714dea79b55b9da$export$b0d6fa1ab32e3295(target) {
35
+ if ($7R3Av$isIOS()) {
36
+ // If the state is already default, there's nothing to do.
37
+ // If it is restoring, then there's no need to queue a second restore.
38
+ if ($8714dea79b55b9da$var$state !== 'disabled') return;
39
+ $8714dea79b55b9da$var$state = 'restoring';
40
+ // There appears to be a delay on iOS where selection still might occur
41
+ // after pointer up, so wait a bit before removing user-select.
42
+ setTimeout(()=>{
43
+ // Wait for any CSS transitions to complete so we don't recompute style
44
+ // for the whole page in the middle of the animation and cause jank.
45
+ $7R3Av$runAfterTransition(()=>{
46
+ // Avoid race conditions
47
+ if ($8714dea79b55b9da$var$state === 'restoring') {
48
+ if (document.documentElement.style.webkitUserSelect === 'none') document.documentElement.style.webkitUserSelect = $8714dea79b55b9da$var$savedUserSelect || '';
49
+ $8714dea79b55b9da$var$savedUserSelect = '';
50
+ $8714dea79b55b9da$var$state = 'default';
51
+ }
52
+ });
53
+ }, 300);
54
+ } else // If not iOS, restore the target's original user-select if any
55
+ // Ignore state since it doesn't apply for non iOS
56
+ if (target && $8714dea79b55b9da$var$modifiedElementMap.has(target)) {
57
+ let targetOldUserSelect = $8714dea79b55b9da$var$modifiedElementMap.get(target);
58
+ if (target.style.userSelect === 'none') target.style.userSelect = targetOldUserSelect;
59
+ if (target.getAttribute('style') === '') target.removeAttribute('style');
60
+ $8714dea79b55b9da$var$modifiedElementMap.delete(target);
61
+ }
62
+ }
76
63
 
77
- function $ffc54430b1dbeee65879852feaaff07d$var$usePressResponderContext(props) {
78
- // Consume context from <PressResponder> and merge with props.
79
- let context = useContext($a3ff51240de6f955c79cf17a88e349$export$PressResponderContext);
80
64
 
81
- if (context) {
82
- let {
83
- register
84
- } = context,
85
- contextProps = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(context, ["register"]);
86
65
 
87
- props = mergeProps(contextProps, props);
88
- register();
89
- }
90
66
 
91
- useSyncRef(context, props.ref);
92
- return props;
67
+ function $e0ce205c97c9e771$export$60278871457622de(event) {
68
+ // JAWS/NVDA with Firefox.
69
+ if (event.mozInputSource === 0 && event.isTrusted) return true;
70
+ return event.detail === 0 && !event.pointerType;
93
71
  }
94
- /**
95
- * Handles press interactions across mouse, touch, keyboard, and screen readers.
96
- * It normalizes behavior across browsers and platforms, and handles many nuances
97
- * of dealing with pointer and keyboard events.
98
- */
99
-
100
-
101
- export function usePress(props) {
102
- let _usePressResponderCon = $ffc54430b1dbeee65879852feaaff07d$var$usePressResponderContext(props),
103
- {
104
- onPress,
105
- onPressChange,
106
- onPressStart,
107
- onPressEnd,
108
- onPressUp,
109
- isDisabled,
110
- isPressed: isPressedProp,
111
- preventFocusOnPress
112
- } = _usePressResponderCon,
113
- domProps = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(_usePressResponderCon, ["onPress", "onPressChange", "onPressStart", "onPressEnd", "onPressUp", "isDisabled", "isPressed", "preventFocusOnPress", "ref"]);
114
-
115
- let propsRef = useRef(null);
116
- propsRef.current = {
117
- onPress,
118
- onPressChange,
119
- onPressStart,
120
- onPressEnd,
121
- onPressUp,
122
- isDisabled
123
- };
124
- let [isPressed, setPressed] = useState(false);
125
- let ref = useRef({
126
- isPressed: false,
127
- ignoreEmulatedMouseEvents: false,
128
- ignoreClickAfterPress: false,
129
- didFirePressStart: false,
130
- activePointerId: null,
131
- target: null,
132
- isOverTarget: false,
133
- pointerType: null
134
- });
135
- let {
136
- addGlobalListener,
137
- removeAllGlobalListeners
138
- } = useGlobalListeners();
139
- let pressProps = useMemo(() => {
140
- let state = ref.current;
141
-
142
- let triggerPressStart = (originalEvent, pointerType) => {
143
- let {
144
- onPressStart,
145
- onPressChange,
146
- isDisabled
147
- } = propsRef.current;
148
-
149
- if (isDisabled || state.didFirePressStart) {
150
- return;
151
- }
152
-
153
- if (onPressStart) {
154
- onPressStart({
155
- type: 'pressstart',
156
- pointerType,
157
- target: originalEvent.currentTarget,
158
- shiftKey: originalEvent.shiftKey,
159
- metaKey: originalEvent.metaKey,
160
- ctrlKey: originalEvent.ctrlKey
161
- });
162
- }
163
72
 
164
- if (onPressChange) {
165
- onPressChange(true);
166
- }
167
73
 
168
- state.didFirePressStart = true;
169
- setPressed(true);
170
- };
171
74
 
172
- let triggerPressEnd = function triggerPressEnd(originalEvent, pointerType, wasPressed) {
173
- if (wasPressed === void 0) {
174
- wasPressed = true;
175
- }
75
+ const $60f869ba95814a99$export$5165eccb35aaadb5 = $7R3Av$react.createContext(null);
76
+ $60f869ba95814a99$export$5165eccb35aaadb5.displayName = 'PressResponderContext';
176
77
 
177
- let {
178
- onPressEnd,
179
- onPressChange,
180
- onPress,
181
- isDisabled
182
- } = propsRef.current;
183
-
184
- if (!state.didFirePressStart) {
185
- return;
186
- }
187
-
188
- state.ignoreClickAfterPress = true;
189
- state.didFirePressStart = false;
190
-
191
- if (onPressEnd) {
192
- onPressEnd({
193
- type: 'pressend',
194
- pointerType,
195
- target: originalEvent.currentTarget,
196
- shiftKey: originalEvent.shiftKey,
197
- metaKey: originalEvent.metaKey,
198
- ctrlKey: originalEvent.ctrlKey
199
- });
200
- }
201
-
202
- if (onPressChange) {
203
- onPressChange(false);
204
- }
205
-
206
- setPressed(false);
207
-
208
- if (onPress && wasPressed && !isDisabled) {
209
- onPress({
210
- type: 'press',
211
- pointerType,
212
- target: originalEvent.currentTarget,
213
- shiftKey: originalEvent.shiftKey,
214
- metaKey: originalEvent.metaKey,
215
- ctrlKey: originalEvent.ctrlKey
216
- });
217
- }
218
- };
219
78
 
220
- let triggerPressUp = (originalEvent, pointerType) => {
221
- let {
222
- onPressUp,
223
- isDisabled
224
- } = propsRef.current;
225
-
226
- if (isDisabled) {
227
- return;
228
- }
229
-
230
- if (onPressUp) {
231
- onPressUp({
232
- type: 'pressup',
233
- pointerType,
234
- target: originalEvent.currentTarget,
235
- shiftKey: originalEvent.shiftKey,
236
- metaKey: originalEvent.metaKey,
237
- ctrlKey: originalEvent.ctrlKey
238
- });
239
- }
240
- };
241
-
242
- let cancel = e => {
243
- if (state.isPressed) {
244
- if (state.isOverTarget) {
245
- triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), state.pointerType, false);
246
- }
247
-
248
- state.isPressed = false;
249
- state.isOverTarget = false;
250
- state.activePointerId = null;
251
- state.pointerType = null;
252
- removeAllGlobalListeners();
253
- $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();
254
- }
79
+ function $bb70d401e0bbab2b$var$usePressResponderContext(props) {
80
+ // Consume context from <PressResponder> and merge with props.
81
+ let context = $7R3Av$useContext($60f869ba95814a99$export$5165eccb35aaadb5);
82
+ if (context) {
83
+ let { register: register , ...contextProps } = context;
84
+ props = $7R3Av$mergeProps(contextProps, props);
85
+ register();
86
+ }
87
+ $7R3Av$useSyncRef(context, props.ref);
88
+ return props;
89
+ }
90
+ function $bb70d401e0bbab2b$export$45712eceda6fad21(props) {
91
+ let { onPress: onPress1 , onPressChange: onPressChange1 , onPressStart: onPressStart1 , onPressEnd: onPressEnd1 , onPressUp: onPressUp1 , isDisabled: isDisabled1 , isPressed: isPressedProp , preventFocusOnPress: preventFocusOnPress , shouldCancelOnPointerExit: shouldCancelOnPointerExit , allowTextSelectionOnPress: allowTextSelectionOnPress , // eslint-disable-next-line @typescript-eslint/no-unused-vars
92
+ ref: _ , ...domProps } = $bb70d401e0bbab2b$var$usePressResponderContext(props);
93
+ let propsRef = $7R3Av$useRef(null);
94
+ propsRef.current = {
95
+ onPress: onPress1,
96
+ onPressChange: onPressChange1,
97
+ onPressStart: onPressStart1,
98
+ onPressEnd: onPressEnd1,
99
+ onPressUp: onPressUp1,
100
+ isDisabled: isDisabled1,
101
+ shouldCancelOnPointerExit: shouldCancelOnPointerExit
255
102
  };
256
-
257
- let pressProps = {
258
- onKeyDown(e) {
259
- if ($ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(e.nativeEvent) && e.currentTarget.contains(e.target)) {
260
- e.preventDefault();
261
- e.stopPropagation(); // If the event is repeating, it may have started on a different element
262
- // after which focus moved to the current element. Ignore these events and
263
- // only handle the first key down event.
264
-
265
- if (!state.isPressed && !e.repeat) {
266
- state.target = e.currentTarget;
267
- state.isPressed = true;
268
- triggerPressStart(e, 'keyboard'); // Focus may move before the key up event, so register the event on the document
269
- // instead of the same element where the key down event occurred.
270
-
271
- addGlobalListener(document, 'keyup', onKeyUp, false);
272
- }
273
- }
274
- },
275
-
276
- onKeyUp(e) {
277
- if ($ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(e.nativeEvent) && !e.repeat && e.currentTarget.contains(e.target)) {
278
- triggerPressUp($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), 'keyboard');
279
- }
280
- },
281
-
282
- onClick(e) {
283
- if (e && !e.currentTarget.contains(e.target)) {
284
- return;
285
- }
286
-
287
- if (e && e.button === 0) {
288
- e.stopPropagation();
289
-
290
- if (isDisabled) {
291
- e.preventDefault();
292
- } // If triggered from a screen reader or by using element.click(),
293
- // trigger as if it were a keyboard click.
294
-
295
-
296
- if (!state.ignoreClickAfterPress && !state.ignoreEmulatedMouseEvents && $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e.nativeEvent)) {
297
- // Ensure the element receives focus (VoiceOver on iOS does not do this)
298
- if (!isDisabled && !preventFocusOnPress) {
299
- focusWithoutScrolling(e.currentTarget);
103
+ let [isPressed, setPressed] = $7R3Av$useState(false);
104
+ let ref = $7R3Av$useRef({
105
+ isPressed: false,
106
+ ignoreEmulatedMouseEvents: false,
107
+ ignoreClickAfterPress: false,
108
+ didFirePressStart: false,
109
+ activePointerId: null,
110
+ target: null,
111
+ isOverTarget: false,
112
+ pointerType: null
113
+ });
114
+ let { addGlobalListener: addGlobalListener , removeAllGlobalListeners: removeAllGlobalListeners } = $7R3Av$useGlobalListeners();
115
+ let pressProps1 = $7R3Av$useMemo(()=>{
116
+ let state = ref.current;
117
+ let triggerPressStart = (originalEvent, pointerType)=>{
118
+ let { onPressStart: onPressStart , onPressChange: onPressChange , isDisabled: isDisabled } = propsRef.current;
119
+ if (isDisabled || state.didFirePressStart) return;
120
+ if (onPressStart) onPressStart({
121
+ type: 'pressstart',
122
+ pointerType: pointerType,
123
+ target: originalEvent.currentTarget,
124
+ shiftKey: originalEvent.shiftKey,
125
+ metaKey: originalEvent.metaKey,
126
+ ctrlKey: originalEvent.ctrlKey,
127
+ altKey: originalEvent.altKey
128
+ });
129
+ if (onPressChange) onPressChange(true);
130
+ state.didFirePressStart = true;
131
+ setPressed(true);
132
+ };
133
+ let triggerPressEnd = (originalEvent, pointerType, wasPressed = true)=>{
134
+ let { onPressEnd: onPressEnd , onPressChange: onPressChange , onPress: onPress , isDisabled: isDisabled } = propsRef.current;
135
+ if (!state.didFirePressStart) return;
136
+ state.ignoreClickAfterPress = true;
137
+ state.didFirePressStart = false;
138
+ if (onPressEnd) onPressEnd({
139
+ type: 'pressend',
140
+ pointerType: pointerType,
141
+ target: originalEvent.currentTarget,
142
+ shiftKey: originalEvent.shiftKey,
143
+ metaKey: originalEvent.metaKey,
144
+ ctrlKey: originalEvent.ctrlKey,
145
+ altKey: originalEvent.altKey
146
+ });
147
+ if (onPressChange) onPressChange(false);
148
+ setPressed(false);
149
+ if (onPress && wasPressed && !isDisabled) onPress({
150
+ type: 'press',
151
+ pointerType: pointerType,
152
+ target: originalEvent.currentTarget,
153
+ shiftKey: originalEvent.shiftKey,
154
+ metaKey: originalEvent.metaKey,
155
+ ctrlKey: originalEvent.ctrlKey,
156
+ altKey: originalEvent.altKey
157
+ });
158
+ };
159
+ let triggerPressUp = (originalEvent, pointerType)=>{
160
+ let { onPressUp: onPressUp , isDisabled: isDisabled } = propsRef.current;
161
+ if (isDisabled) return;
162
+ if (onPressUp) onPressUp({
163
+ type: 'pressup',
164
+ pointerType: pointerType,
165
+ target: originalEvent.currentTarget,
166
+ shiftKey: originalEvent.shiftKey,
167
+ metaKey: originalEvent.metaKey,
168
+ ctrlKey: originalEvent.ctrlKey,
169
+ altKey: originalEvent.altKey
170
+ });
171
+ };
172
+ let cancel = (e)=>{
173
+ if (state.isPressed) {
174
+ if (state.isOverTarget) triggerPressEnd($bb70d401e0bbab2b$var$createEvent(state.target, e), state.pointerType, false);
175
+ state.isPressed = false;
176
+ state.isOverTarget = false;
177
+ state.activePointerId = null;
178
+ state.pointerType = null;
179
+ removeAllGlobalListeners();
180
+ if (!allowTextSelectionOnPress) $8714dea79b55b9da$export$b0d6fa1ab32e3295(state.target);
300
181
  }
301
-
302
- triggerPressStart(e, 'virtual');
303
- triggerPressUp(e, 'virtual');
304
- triggerPressEnd(e, 'virtual');
305
- }
306
-
307
- state.ignoreEmulatedMouseEvents = false;
308
- state.ignoreClickAfterPress = false;
309
- }
310
- }
311
-
312
- };
313
-
314
- let onKeyUp = e => {
315
- if (state.isPressed && $ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(e)) {
316
- e.preventDefault();
317
- e.stopPropagation();
318
- state.isPressed = false;
319
- triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), 'keyboard', e.target === state.target);
320
- removeAllGlobalListeners(); // If the target is a link, trigger the click method to open the URL,
321
- // but defer triggering pressEnd until onClick event handler.
322
-
323
- if (e.target === state.target && $ffc54430b1dbeee65879852feaaff07d$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') {
324
- state.target.click();
182
+ };
183
+ let pressProps = {
184
+ onKeyDown (e) {
185
+ if ($bb70d401e0bbab2b$var$isValidKeyboardEvent(e.nativeEvent) && e.currentTarget.contains(e.target)) {
186
+ if ($bb70d401e0bbab2b$var$shouldPreventDefaultKeyboard(e.target)) e.preventDefault();
187
+ e.stopPropagation();
188
+ // If the event is repeating, it may have started on a different element
189
+ // after which focus moved to the current element. Ignore these events and
190
+ // only handle the first key down event.
191
+ if (!state.isPressed && !e.repeat) {
192
+ state.target = e.currentTarget;
193
+ state.isPressed = true;
194
+ triggerPressStart(e, 'keyboard');
195
+ // Focus may move before the key up event, so register the event on the document
196
+ // instead of the same element where the key down event occurred.
197
+ addGlobalListener(document, 'keyup', onKeyUp, false);
198
+ }
199
+ }
200
+ },
201
+ onKeyUp (e) {
202
+ if ($bb70d401e0bbab2b$var$isValidKeyboardEvent(e.nativeEvent) && !e.repeat && e.currentTarget.contains(e.target)) triggerPressUp($bb70d401e0bbab2b$var$createEvent(state.target, e), 'keyboard');
203
+ },
204
+ onClick (e) {
205
+ if (e && !e.currentTarget.contains(e.target)) return;
206
+ if (e && e.button === 0) {
207
+ e.stopPropagation();
208
+ if (isDisabled1) e.preventDefault();
209
+ // If triggered from a screen reader or by using element.click(),
210
+ // trigger as if it were a keyboard click.
211
+ if (!state.ignoreClickAfterPress && !state.ignoreEmulatedMouseEvents && (state.pointerType === 'virtual' || $e0ce205c97c9e771$export$60278871457622de(e.nativeEvent))) {
212
+ // Ensure the element receives focus (VoiceOver on iOS does not do this)
213
+ if (!isDisabled1 && !preventFocusOnPress) $7R3Av$focusWithoutScrolling(e.currentTarget);
214
+ triggerPressStart(e, 'virtual');
215
+ triggerPressUp(e, 'virtual');
216
+ triggerPressEnd(e, 'virtual');
217
+ }
218
+ state.ignoreEmulatedMouseEvents = false;
219
+ state.ignoreClickAfterPress = false;
220
+ }
221
+ }
222
+ };
223
+ let onKeyUp = (e)=>{
224
+ if (state.isPressed && $bb70d401e0bbab2b$var$isValidKeyboardEvent(e)) {
225
+ if ($bb70d401e0bbab2b$var$shouldPreventDefaultKeyboard(e.target)) e.preventDefault();
226
+ e.stopPropagation();
227
+ state.isPressed = false;
228
+ let target = e.target;
229
+ triggerPressEnd($bb70d401e0bbab2b$var$createEvent(state.target, e), 'keyboard', state.target.contains(target));
230
+ removeAllGlobalListeners();
231
+ // If the target is a link, trigger the click method to open the URL,
232
+ // but defer triggering pressEnd until onClick event handler.
233
+ if (state.target.contains(target) && $bb70d401e0bbab2b$var$isHTMLAnchorLink(state.target) || state.target.getAttribute('role') === 'link') state.target.click();
234
+ }
235
+ };
236
+ if (typeof PointerEvent !== 'undefined') {
237
+ pressProps.onPointerDown = (e)=>{
238
+ // Only handle left clicks, and ignore events that bubbled through portals.
239
+ if (e.button !== 0 || !e.currentTarget.contains(e.target)) return;
240
+ // iOS safari fires pointer events from VoiceOver with incorrect coordinates/target.
241
+ // Ignore and let the onClick handler take care of it instead.
242
+ // https://bugs.webkit.org/show_bug.cgi?id=222627
243
+ // https://bugs.webkit.org/show_bug.cgi?id=223202
244
+ if ($bb70d401e0bbab2b$var$isVirtualPointerEvent(e.nativeEvent)) {
245
+ state.pointerType = 'virtual';
246
+ return;
247
+ }
248
+ // Due to browser inconsistencies, especially on mobile browsers, we prevent
249
+ // default on pointer down and handle focusing the pressable element ourselves.
250
+ if ($bb70d401e0bbab2b$var$shouldPreventDefault(e.target)) e.preventDefault();
251
+ state.pointerType = e.pointerType;
252
+ e.stopPropagation();
253
+ if (!state.isPressed) {
254
+ state.isPressed = true;
255
+ state.isOverTarget = true;
256
+ state.activePointerId = e.pointerId;
257
+ state.target = e.currentTarget;
258
+ if (!isDisabled1 && !preventFocusOnPress) $7R3Av$focusWithoutScrolling(e.currentTarget);
259
+ if (!allowTextSelectionOnPress) $8714dea79b55b9da$export$16a4697467175487(state.target);
260
+ triggerPressStart(e, state.pointerType);
261
+ addGlobalListener(document, 'pointermove', onPointerMove, false);
262
+ addGlobalListener(document, 'pointerup', onPointerUp, false);
263
+ addGlobalListener(document, 'pointercancel', onPointerCancel, false);
264
+ }
265
+ };
266
+ pressProps.onMouseDown = (e)=>{
267
+ if (!e.currentTarget.contains(e.target)) return;
268
+ if (e.button === 0) {
269
+ // Chrome and Firefox on touch Windows devices require mouse down events
270
+ // to be canceled in addition to pointer events, or an extra asynchronous
271
+ // focus event will be fired.
272
+ if ($bb70d401e0bbab2b$var$shouldPreventDefault(e.target)) e.preventDefault();
273
+ e.stopPropagation();
274
+ }
275
+ };
276
+ pressProps.onPointerUp = (e)=>{
277
+ // iOS fires pointerup with zero width and height, so check the pointerType recorded during pointerdown.
278
+ if (!e.currentTarget.contains(e.target) || state.pointerType === 'virtual') return;
279
+ // Only handle left clicks
280
+ // Safari on iOS sometimes fires pointerup events, even
281
+ // when the touch isn't over the target, so double check.
282
+ if (e.button === 0 && $bb70d401e0bbab2b$var$isOverTarget(e, e.currentTarget)) triggerPressUp(e, state.pointerType || e.pointerType);
283
+ };
284
+ // Safari on iOS < 13.2 does not implement pointerenter/pointerleave events correctly.
285
+ // Use pointer move events instead to implement our own hit testing.
286
+ // See https://bugs.webkit.org/show_bug.cgi?id=199803
287
+ let onPointerMove = (e)=>{
288
+ if (e.pointerId !== state.activePointerId) return;
289
+ if ($bb70d401e0bbab2b$var$isOverTarget(e, state.target)) {
290
+ if (!state.isOverTarget) {
291
+ state.isOverTarget = true;
292
+ triggerPressStart($bb70d401e0bbab2b$var$createEvent(state.target, e), state.pointerType);
293
+ }
294
+ } else if (state.isOverTarget) {
295
+ state.isOverTarget = false;
296
+ triggerPressEnd($bb70d401e0bbab2b$var$createEvent(state.target, e), state.pointerType, false);
297
+ if (propsRef.current.shouldCancelOnPointerExit) cancel(e);
298
+ }
299
+ };
300
+ let onPointerUp = (e)=>{
301
+ if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0) {
302
+ if ($bb70d401e0bbab2b$var$isOverTarget(e, state.target)) triggerPressEnd($bb70d401e0bbab2b$var$createEvent(state.target, e), state.pointerType);
303
+ else if (state.isOverTarget) triggerPressEnd($bb70d401e0bbab2b$var$createEvent(state.target, e), state.pointerType, false);
304
+ state.isPressed = false;
305
+ state.isOverTarget = false;
306
+ state.activePointerId = null;
307
+ state.pointerType = null;
308
+ removeAllGlobalListeners();
309
+ if (!allowTextSelectionOnPress) $8714dea79b55b9da$export$b0d6fa1ab32e3295(state.target);
310
+ }
311
+ };
312
+ let onPointerCancel = (e)=>{
313
+ cancel(e);
314
+ };
315
+ pressProps.onDragStart = (e)=>{
316
+ if (!e.currentTarget.contains(e.target)) return;
317
+ // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.
318
+ cancel(e);
319
+ };
320
+ } else {
321
+ pressProps.onMouseDown = (e)=>{
322
+ // Only handle left clicks
323
+ if (e.button !== 0 || !e.currentTarget.contains(e.target)) return;
324
+ // Due to browser inconsistencies, especially on mobile browsers, we prevent
325
+ // default on mouse down and handle focusing the pressable element ourselves.
326
+ if ($bb70d401e0bbab2b$var$shouldPreventDefault(e.target)) e.preventDefault();
327
+ e.stopPropagation();
328
+ if (state.ignoreEmulatedMouseEvents) return;
329
+ state.isPressed = true;
330
+ state.isOverTarget = true;
331
+ state.target = e.currentTarget;
332
+ state.pointerType = $e0ce205c97c9e771$export$60278871457622de(e.nativeEvent) ? 'virtual' : 'mouse';
333
+ if (!isDisabled1 && !preventFocusOnPress) $7R3Av$focusWithoutScrolling(e.currentTarget);
334
+ triggerPressStart(e, state.pointerType);
335
+ addGlobalListener(document, 'mouseup', onMouseUp, false);
336
+ };
337
+ pressProps.onMouseEnter = (e)=>{
338
+ if (!e.currentTarget.contains(e.target)) return;
339
+ e.stopPropagation();
340
+ if (state.isPressed && !state.ignoreEmulatedMouseEvents) {
341
+ state.isOverTarget = true;
342
+ triggerPressStart(e, state.pointerType);
343
+ }
344
+ };
345
+ pressProps.onMouseLeave = (e)=>{
346
+ if (!e.currentTarget.contains(e.target)) return;
347
+ e.stopPropagation();
348
+ if (state.isPressed && !state.ignoreEmulatedMouseEvents) {
349
+ state.isOverTarget = false;
350
+ triggerPressEnd(e, state.pointerType, false);
351
+ if (propsRef.current.shouldCancelOnPointerExit) cancel(e);
352
+ }
353
+ };
354
+ pressProps.onMouseUp = (e)=>{
355
+ if (!e.currentTarget.contains(e.target)) return;
356
+ if (!state.ignoreEmulatedMouseEvents && e.button === 0) triggerPressUp(e, state.pointerType);
357
+ };
358
+ let onMouseUp = (e)=>{
359
+ // Only handle left clicks
360
+ if (e.button !== 0) return;
361
+ state.isPressed = false;
362
+ removeAllGlobalListeners();
363
+ if (state.ignoreEmulatedMouseEvents) {
364
+ state.ignoreEmulatedMouseEvents = false;
365
+ return;
366
+ }
367
+ if ($bb70d401e0bbab2b$var$isOverTarget(e, state.target)) triggerPressEnd($bb70d401e0bbab2b$var$createEvent(state.target, e), state.pointerType);
368
+ else if (state.isOverTarget) triggerPressEnd($bb70d401e0bbab2b$var$createEvent(state.target, e), state.pointerType, false);
369
+ state.isOverTarget = false;
370
+ };
371
+ pressProps.onTouchStart = (e)=>{
372
+ if (!e.currentTarget.contains(e.target)) return;
373
+ e.stopPropagation();
374
+ let touch = $bb70d401e0bbab2b$var$getTouchFromEvent(e.nativeEvent);
375
+ if (!touch) return;
376
+ state.activePointerId = touch.identifier;
377
+ state.ignoreEmulatedMouseEvents = true;
378
+ state.isOverTarget = true;
379
+ state.isPressed = true;
380
+ state.target = e.currentTarget;
381
+ state.pointerType = 'touch';
382
+ // Due to browser inconsistencies, especially on mobile browsers, we prevent default
383
+ // on the emulated mouse event and handle focusing the pressable element ourselves.
384
+ if (!isDisabled1 && !preventFocusOnPress) $7R3Av$focusWithoutScrolling(e.currentTarget);
385
+ if (!allowTextSelectionOnPress) $8714dea79b55b9da$export$16a4697467175487(state.target);
386
+ triggerPressStart(e, state.pointerType);
387
+ addGlobalListener(window, 'scroll', onScroll, true);
388
+ };
389
+ pressProps.onTouchMove = (e)=>{
390
+ if (!e.currentTarget.contains(e.target)) return;
391
+ e.stopPropagation();
392
+ if (!state.isPressed) return;
393
+ let touch = $bb70d401e0bbab2b$var$getTouchById(e.nativeEvent, state.activePointerId);
394
+ if (touch && $bb70d401e0bbab2b$var$isOverTarget(touch, e.currentTarget)) {
395
+ if (!state.isOverTarget) {
396
+ state.isOverTarget = true;
397
+ triggerPressStart(e, state.pointerType);
398
+ }
399
+ } else if (state.isOverTarget) {
400
+ state.isOverTarget = false;
401
+ triggerPressEnd(e, state.pointerType, false);
402
+ if (propsRef.current.shouldCancelOnPointerExit) cancel(e);
403
+ }
404
+ };
405
+ pressProps.onTouchEnd = (e)=>{
406
+ if (!e.currentTarget.contains(e.target)) return;
407
+ e.stopPropagation();
408
+ if (!state.isPressed) return;
409
+ let touch = $bb70d401e0bbab2b$var$getTouchById(e.nativeEvent, state.activePointerId);
410
+ if (touch && $bb70d401e0bbab2b$var$isOverTarget(touch, e.currentTarget)) {
411
+ triggerPressUp(e, state.pointerType);
412
+ triggerPressEnd(e, state.pointerType);
413
+ } else if (state.isOverTarget) triggerPressEnd(e, state.pointerType, false);
414
+ state.isPressed = false;
415
+ state.activePointerId = null;
416
+ state.isOverTarget = false;
417
+ state.ignoreEmulatedMouseEvents = true;
418
+ if (!allowTextSelectionOnPress) $8714dea79b55b9da$export$b0d6fa1ab32e3295(state.target);
419
+ removeAllGlobalListeners();
420
+ };
421
+ pressProps.onTouchCancel = (e)=>{
422
+ if (!e.currentTarget.contains(e.target)) return;
423
+ e.stopPropagation();
424
+ if (state.isPressed) cancel(e);
425
+ };
426
+ let onScroll = (e)=>{
427
+ if (state.isPressed && e.target.contains(state.target)) cancel({
428
+ currentTarget: state.target,
429
+ shiftKey: false,
430
+ ctrlKey: false,
431
+ metaKey: false,
432
+ altKey: false
433
+ });
434
+ };
435
+ pressProps.onDragStart = (e)=>{
436
+ if (!e.currentTarget.contains(e.target)) return;
437
+ cancel(e);
438
+ };
325
439
  }
326
- }
440
+ return pressProps;
441
+ }, [
442
+ addGlobalListener,
443
+ isDisabled1,
444
+ preventFocusOnPress,
445
+ removeAllGlobalListeners,
446
+ allowTextSelectionOnPress
447
+ ]);
448
+ // Remove user-select: none in case component unmounts immediately after pressStart
449
+ // eslint-disable-next-line arrow-body-style
450
+ $7R3Av$useEffect(()=>{
451
+ return ()=>{
452
+ if (!allowTextSelectionOnPress) $8714dea79b55b9da$export$b0d6fa1ab32e3295(ref.current.target);
453
+ };
454
+ }, [
455
+ allowTextSelectionOnPress
456
+ ]);
457
+ return {
458
+ isPressed: isPressedProp || isPressed,
459
+ pressProps: $7R3Av$mergeProps(domProps, pressProps1)
327
460
  };
328
-
329
- if (typeof PointerEvent !== 'undefined') {
330
- pressProps.onPointerDown = e => {
331
- // Only handle left clicks, and ignore events that bubbled through portals.
332
- if (e.button !== 0 || !e.currentTarget.contains(e.target)) {
333
- return;
334
- } // Due to browser inconsistencies, especially on mobile browsers, we prevent
335
- // default on pointer down and handle focusing the pressable element ourselves.
336
-
337
-
338
- if ($ffc54430b1dbeee65879852feaaff07d$var$shouldPreventDefault(e.target)) {
339
- e.preventDefault();
340
- } // iOS safari fires pointer events from VoiceOver (but only when outside an iframe...)
341
- // https://bugs.webkit.org/show_bug.cgi?id=222627
342
-
343
-
344
- state.pointerType = $ffc54430b1dbeee65879852feaaff07d$var$isVirtualPointerEvent(e.nativeEvent) ? 'virtual' : e.pointerType;
345
- e.stopPropagation();
346
-
347
- if (!state.isPressed) {
348
- state.isPressed = true;
349
- state.isOverTarget = true;
350
- state.activePointerId = e.pointerId;
351
- state.target = e.currentTarget;
352
-
353
- if (!isDisabled && !preventFocusOnPress) {
354
- focusWithoutScrolling(e.currentTarget);
355
- }
356
-
357
- $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection();
358
- triggerPressStart(e, state.pointerType);
359
- addGlobalListener(document, 'pointermove', onPointerMove, false);
360
- addGlobalListener(document, 'pointerup', onPointerUp, false);
361
- addGlobalListener(document, 'pointercancel', onPointerCancel, false);
362
- }
363
- };
364
-
365
- pressProps.onMouseDown = e => {
366
- if (!e.currentTarget.contains(e.target)) {
367
- return;
368
- }
369
-
370
- if (e.button === 0) {
371
- // Chrome and Firefox on touch Windows devices require mouse down events
372
- // to be canceled in addition to pointer events, or an extra asynchronous
373
- // focus event will be fired.
374
- if ($ffc54430b1dbeee65879852feaaff07d$var$shouldPreventDefault(e.target)) {
375
- e.preventDefault();
376
- }
377
-
378
- e.stopPropagation();
379
- }
380
- };
381
-
382
- pressProps.onPointerUp = e => {
383
- if (!e.currentTarget.contains(e.target)) {
384
- return;
385
- } // Only handle left clicks
386
- // Safari on iOS sometimes fires pointerup events, even
387
- // when the touch isn't over the target, so double check.
388
-
389
-
390
- if (e.button === 0 && $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, e.currentTarget)) {
391
- triggerPressUp(e, state.pointerType);
392
- }
393
- }; // Safari on iOS < 13.2 does not implement pointerenter/pointerleave events correctly.
394
- // Use pointer move events instead to implement our own hit testing.
395
- // See https://bugs.webkit.org/show_bug.cgi?id=199803
396
-
397
-
398
- let onPointerMove = e => {
399
- if (e.pointerId !== state.activePointerId) {
400
- return;
401
- }
402
-
403
- if ($ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, state.target)) {
404
- if (!state.isOverTarget) {
405
- state.isOverTarget = true;
406
- triggerPressStart($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), state.pointerType);
407
- }
408
- } else if (state.isOverTarget) {
409
- state.isOverTarget = false;
410
- triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), state.pointerType, false);
411
- }
412
- };
413
-
414
- let onPointerUp = e => {
415
- if (e.pointerId === state.activePointerId && state.isPressed && e.button === 0) {
416
- if ($ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, state.target)) {
417
- triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), state.pointerType);
418
- } else if (state.isOverTarget) {
419
- triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), state.pointerType, false);
420
- }
421
-
422
- state.isPressed = false;
423
- state.isOverTarget = false;
424
- state.activePointerId = null;
425
- state.pointerType = null;
426
- removeAllGlobalListeners();
427
- $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();
428
- }
429
- };
430
-
431
- let onPointerCancel = e => {
432
- cancel(e);
433
- };
434
-
435
- pressProps.onDragStart = e => {
436
- if (!e.currentTarget.contains(e.target)) {
437
- return;
438
- } // Safari does not call onPointerCancel when a drag starts, whereas Chrome and Firefox do.
439
-
440
-
441
- cancel(e);
442
- };
443
- } else {
444
- pressProps.onMouseDown = e => {
445
- // Only handle left clicks
446
- if (e.button !== 0 || !e.currentTarget.contains(e.target)) {
447
- return;
448
- } // Due to browser inconsistencies, especially on mobile browsers, we prevent
449
- // default on mouse down and handle focusing the pressable element ourselves.
450
-
451
-
452
- if ($ffc54430b1dbeee65879852feaaff07d$var$shouldPreventDefault(e.target)) {
453
- e.preventDefault();
454
- }
455
-
456
- e.stopPropagation();
457
-
458
- if (state.ignoreEmulatedMouseEvents) {
459
- return;
460
- }
461
-
462
- state.isPressed = true;
463
- state.isOverTarget = true;
464
- state.target = e.currentTarget;
465
- state.pointerType = $f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e.nativeEvent) ? 'virtual' : 'mouse';
466
-
467
- if (!isDisabled && !preventFocusOnPress) {
468
- focusWithoutScrolling(e.currentTarget);
469
- }
470
-
471
- triggerPressStart(e, state.pointerType);
472
- addGlobalListener(document, 'mouseup', onMouseUp, false);
473
- };
474
-
475
- pressProps.onMouseEnter = e => {
476
- if (!e.currentTarget.contains(e.target)) {
477
- return;
478
- }
479
-
480
- e.stopPropagation();
481
-
482
- if (state.isPressed && !state.ignoreEmulatedMouseEvents) {
483
- state.isOverTarget = true;
484
- triggerPressStart(e, state.pointerType);
485
- }
486
- };
487
-
488
- pressProps.onMouseLeave = e => {
489
- if (!e.currentTarget.contains(e.target)) {
490
- return;
491
- }
492
-
493
- e.stopPropagation();
494
-
495
- if (state.isPressed && !state.ignoreEmulatedMouseEvents) {
496
- state.isOverTarget = false;
497
- triggerPressEnd(e, state.pointerType, false);
498
- }
499
- };
500
-
501
- pressProps.onMouseUp = e => {
502
- if (!e.currentTarget.contains(e.target)) {
503
- return;
504
- }
505
-
506
- if (!state.ignoreEmulatedMouseEvents && e.button === 0) {
507
- triggerPressUp(e, state.pointerType);
508
- }
509
- };
510
-
511
- let onMouseUp = e => {
512
- // Only handle left clicks
513
- if (e.button !== 0) {
514
- return;
515
- }
516
-
517
- state.isPressed = false;
518
- removeAllGlobalListeners();
519
-
520
- if (state.ignoreEmulatedMouseEvents) {
521
- state.ignoreEmulatedMouseEvents = false;
522
- return;
523
- }
524
-
525
- if ($ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(e, state.target)) {
526
- triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), state.pointerType);
527
- } else if (state.isOverTarget) {
528
- triggerPressEnd($ffc54430b1dbeee65879852feaaff07d$var$createEvent(state.target, e), state.pointerType, false);
529
- }
530
-
531
- state.isOverTarget = false;
532
- };
533
-
534
- pressProps.onTouchStart = e => {
535
- if (!e.currentTarget.contains(e.target)) {
536
- return;
537
- }
538
-
539
- e.stopPropagation();
540
- let touch = $ffc54430b1dbeee65879852feaaff07d$var$getTouchFromEvent(e.nativeEvent);
541
-
542
- if (!touch) {
543
- return;
544
- }
545
-
546
- state.activePointerId = touch.identifier;
547
- state.ignoreEmulatedMouseEvents = true;
548
- state.isOverTarget = true;
549
- state.isPressed = true;
550
- state.target = e.currentTarget;
551
- state.pointerType = 'touch'; // Due to browser inconsistencies, especially on mobile browsers, we prevent default
552
- // on the emulated mouse event and handle focusing the pressable element ourselves.
553
-
554
- if (!isDisabled && !preventFocusOnPress) {
555
- focusWithoutScrolling(e.currentTarget);
556
- }
557
-
558
- $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection();
559
- triggerPressStart(e, state.pointerType);
560
- addGlobalListener(window, 'scroll', onScroll, true);
561
- };
562
-
563
- pressProps.onTouchMove = e => {
564
- if (!e.currentTarget.contains(e.target)) {
565
- return;
566
- }
567
-
568
- e.stopPropagation();
569
-
570
- if (!state.isPressed) {
571
- return;
572
- }
573
-
574
- let touch = $ffc54430b1dbeee65879852feaaff07d$var$getTouchById(e.nativeEvent, state.activePointerId);
575
-
576
- if (touch && $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(touch, e.currentTarget)) {
577
- if (!state.isOverTarget) {
578
- state.isOverTarget = true;
579
- triggerPressStart(e, state.pointerType);
580
- }
581
- } else if (state.isOverTarget) {
582
- state.isOverTarget = false;
583
- triggerPressEnd(e, state.pointerType, false);
584
- }
585
- };
586
-
587
- pressProps.onTouchEnd = e => {
588
- if (!e.currentTarget.contains(e.target)) {
589
- return;
590
- }
591
-
592
- e.stopPropagation();
593
-
594
- if (!state.isPressed) {
595
- return;
596
- }
597
-
598
- let touch = $ffc54430b1dbeee65879852feaaff07d$var$getTouchById(e.nativeEvent, state.activePointerId);
599
-
600
- if (touch && $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(touch, e.currentTarget)) {
601
- triggerPressUp(e, state.pointerType);
602
- triggerPressEnd(e, state.pointerType);
603
- } else if (state.isOverTarget) {
604
- triggerPressEnd(e, state.pointerType, false);
605
- }
606
-
607
- state.isPressed = false;
608
- state.activePointerId = null;
609
- state.isOverTarget = false;
610
- state.ignoreEmulatedMouseEvents = true;
611
- $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();
612
- removeAllGlobalListeners();
613
- };
614
-
615
- pressProps.onTouchCancel = e => {
616
- if (!e.currentTarget.contains(e.target)) {
617
- return;
618
- }
619
-
620
- e.stopPropagation();
621
-
622
- if (state.isPressed) {
623
- cancel(e);
624
- }
625
- };
626
-
627
- let onScroll = e => {
628
- if (state.isPressed && e.target.contains(state.target)) {
629
- cancel({
630
- currentTarget: state.target,
631
- shiftKey: false,
632
- ctrlKey: false,
633
- metaKey: false
634
- });
635
- }
636
- };
637
-
638
- pressProps.onDragStart = e => {
639
- if (!e.currentTarget.contains(e.target)) {
640
- return;
641
- }
642
-
643
- cancel(e);
644
- };
645
- }
646
-
647
- return pressProps;
648
- }, [addGlobalListener, isDisabled, preventFocusOnPress, removeAllGlobalListeners]); // Remove user-select: none in case component unmounts immediately after pressStart
649
- // eslint-disable-next-line arrow-body-style
650
-
651
- useEffect(() => {
652
- return () => $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();
653
- }, []);
654
- return {
655
- isPressed: isPressedProp || isPressed,
656
- pressProps: mergeProps(domProps, pressProps)
657
- };
658
461
  }
659
-
660
- function $ffc54430b1dbeee65879852feaaff07d$var$isHTMLAnchorLink(target) {
661
- return target.tagName === 'A' && target.hasAttribute('href');
462
+ function $bb70d401e0bbab2b$var$isHTMLAnchorLink(target) {
463
+ return target.tagName === 'A' && target.hasAttribute('href');
662
464
  }
663
-
664
- function $ffc54430b1dbeee65879852feaaff07d$var$isValidKeyboardEvent(event) {
665
- const {
666
- key,
667
- target
668
- } = event;
669
- const element = target;
670
- const {
671
- tagName,
672
- isContentEditable
673
- } = element;
674
- const role = element.getAttribute('role'); // Accessibility for keyboards. Space and Enter only.
675
- // "Spacebar" is for IE 11
676
-
677
- return (key === 'Enter' || key === ' ' || key === 'Spacebar') && tagName !== 'INPUT' && tagName !== 'TEXTAREA' && isContentEditable !== true && ( // A link with a valid href should be handled natively,
678
- // unless it also has role='button' and was triggered using Space.
679
- !$ffc54430b1dbeee65879852feaaff07d$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && // An element with role='link' should only trigger with Enter key
680
- !(role === 'link' && key !== 'Enter');
465
+ function $bb70d401e0bbab2b$var$isValidKeyboardEvent(event) {
466
+ const { key: key , code: code , target: target } = event;
467
+ const element = target;
468
+ const { tagName: tagName , isContentEditable: isContentEditable } = element;
469
+ const role = element.getAttribute('role');
470
+ // Accessibility for keyboards. Space and Enter only.
471
+ // "Spacebar" is for IE 11
472
+ return (key === 'Enter' || key === ' ' || key === 'Spacebar' || code === 'Space') && tagName !== 'INPUT' && tagName !== 'TEXTAREA' && isContentEditable !== true && (!$bb70d401e0bbab2b$var$isHTMLAnchorLink(element) || role === 'button' && key !== 'Enter') && // An element with role='link' should only trigger with Enter key
473
+ !(role === 'link' && key !== 'Enter');
681
474
  }
682
-
683
- function $ffc54430b1dbeee65879852feaaff07d$var$getTouchFromEvent(event) {
684
- const {
685
- targetTouches
686
- } = event;
687
-
688
- if (targetTouches.length > 0) {
689
- return targetTouches[0];
690
- }
691
-
692
- return null;
475
+ function $bb70d401e0bbab2b$var$getTouchFromEvent(event) {
476
+ const { targetTouches: targetTouches } = event;
477
+ if (targetTouches.length > 0) return targetTouches[0];
478
+ return null;
693
479
  }
694
-
695
- function $ffc54430b1dbeee65879852feaaff07d$var$getTouchById(event, pointerId) {
696
- const changedTouches = event.changedTouches;
697
-
698
- for (let i = 0; i < changedTouches.length; i++) {
699
- const touch = changedTouches[i];
700
-
701
- if (touch.identifier === pointerId) {
702
- return touch;
480
+ function $bb70d401e0bbab2b$var$getTouchById(event, pointerId) {
481
+ const changedTouches = event.changedTouches;
482
+ for(let i = 0; i < changedTouches.length; i++){
483
+ const touch = changedTouches[i];
484
+ if (touch.identifier === pointerId) return touch;
703
485
  }
704
- }
705
-
706
- return null;
486
+ return null;
707
487
  }
708
-
709
- function $ffc54430b1dbeee65879852feaaff07d$var$createEvent(target, e) {
710
- return {
711
- currentTarget: target,
712
- shiftKey: e.shiftKey,
713
- ctrlKey: e.ctrlKey,
714
- metaKey: e.metaKey
715
- };
488
+ function $bb70d401e0bbab2b$var$createEvent(target, e) {
489
+ return {
490
+ currentTarget: target,
491
+ shiftKey: e.shiftKey,
492
+ ctrlKey: e.ctrlKey,
493
+ metaKey: e.metaKey,
494
+ altKey: e.altKey
495
+ };
716
496
  }
717
-
718
- function $ffc54430b1dbeee65879852feaaff07d$var$getPointClientRect(point) {
719
- let offsetX = point.width / 2 || point.radiusX || 0;
720
- let offsetY = point.height / 2 || point.radiusY || 0;
721
- return {
722
- top: point.clientY - offsetY,
723
- right: point.clientX + offsetX,
724
- bottom: point.clientY + offsetY,
725
- left: point.clientX - offsetX
726
- };
497
+ function $bb70d401e0bbab2b$var$getPointClientRect(point) {
498
+ let offsetX = point.width / 2 || point.radiusX || 0;
499
+ let offsetY = point.height / 2 || point.radiusY || 0;
500
+ return {
501
+ top: point.clientY - offsetY,
502
+ right: point.clientX + offsetX,
503
+ bottom: point.clientY + offsetY,
504
+ left: point.clientX - offsetX
505
+ };
727
506
  }
728
-
729
- function $ffc54430b1dbeee65879852feaaff07d$var$areRectanglesOverlapping(a, b) {
730
- // check if they cannot overlap on x axis
731
- if (a.left > b.right || b.left > a.right) {
732
- return false;
733
- } // check if they cannot overlap on y axis
734
-
735
-
736
- if (a.top > b.bottom || b.top > a.bottom) {
737
- return false;
738
- }
739
-
740
- return true;
507
+ function $bb70d401e0bbab2b$var$areRectanglesOverlapping(a, b) {
508
+ // check if they cannot overlap on x axis
509
+ if (a.left > b.right || b.left > a.right) return false;
510
+ // check if they cannot overlap on y axis
511
+ if (a.top > b.bottom || b.top > a.bottom) return false;
512
+ return true;
741
513
  }
742
-
743
- function $ffc54430b1dbeee65879852feaaff07d$var$isOverTarget(point, target) {
744
- let rect = target.getBoundingClientRect();
745
- let pointRect = $ffc54430b1dbeee65879852feaaff07d$var$getPointClientRect(point);
746
- return $ffc54430b1dbeee65879852feaaff07d$var$areRectanglesOverlapping(rect, pointRect);
514
+ function $bb70d401e0bbab2b$var$isOverTarget(point, target) {
515
+ let rect = target.getBoundingClientRect();
516
+ let pointRect = $bb70d401e0bbab2b$var$getPointClientRect(point);
517
+ return $bb70d401e0bbab2b$var$areRectanglesOverlapping(rect, pointRect);
747
518
  }
748
-
749
- function $ffc54430b1dbeee65879852feaaff07d$var$shouldPreventDefault(target) {
750
- // We cannot prevent default if the target is inside a draggable element.
751
- return !target.closest('[draggable="true"]');
519
+ function $bb70d401e0bbab2b$var$shouldPreventDefault(target) {
520
+ // We cannot prevent default if the target is inside a draggable element.
521
+ return !target.closest('[draggable="true"]');
752
522
  }
753
-
754
- function $ffc54430b1dbeee65879852feaaff07d$var$isVirtualPointerEvent(event) {
755
- // If the pointer size is zero, then we assume it's from a screen reader.
756
- return event.width === 0 && event.height === 0;
523
+ function $bb70d401e0bbab2b$var$shouldPreventDefaultKeyboard(target) {
524
+ return !((target.tagName === 'INPUT' || target.tagName === 'BUTTON') && target.type === 'submit');
525
+ }
526
+ function $bb70d401e0bbab2b$var$isVirtualPointerEvent(event) {
527
+ // If the pointer size is zero, then we assume it's from a screen reader.
528
+ // Android TalkBack double tap will sometimes return a event with width and height of 1
529
+ // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.
530
+ // Cannot use "event.pressure === 0" as the sole check due to Safari pointer events always returning pressure === 0
531
+ // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216
532
+ return event.width === 0 && event.height === 0 || event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0;
757
533
  }
758
534
 
759
- export const Pressable = /*#__PURE__*/_react.forwardRef((_ref, ref) => {
760
- var _ref2;
761
535
 
762
- let {
763
- children
764
- } = _ref,
765
- props = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(_ref, ["children"]);
766
536
 
767
- let newRef = useRef();
768
- ref = (_ref2 = ref) != null ? _ref2 : newRef;
769
- let {
770
- pressProps
771
- } = usePress(_babelRuntimeHelpersEsmExtends({}, props, {
772
- ref
773
- }));
537
+ const $acf5f8872229f2cb$export$27c701ed9e449e99 = /*#__PURE__*/ $7R3Av$react.forwardRef(({ children: children , ...props }, ref)=>{
538
+ let newRef = $7R3Av$useRef();
539
+ ref = ref ?? newRef;
540
+ let { pressProps: pressProps } = $bb70d401e0bbab2b$export$45712eceda6fad21({
541
+ ...props,
542
+ ref: ref
543
+ });
544
+ let child = $7R3Av$react.Children.only(children);
545
+ return(/*#__PURE__*/ $7R3Av$react.cloneElement(child, // @ts-ignore
546
+ {
547
+ ref: ref,
548
+ ...$7R3Av$mergeProps(child.props, pressProps)
549
+ }));
550
+ });
774
551
 
775
- let child = _react.Children.only(children);
776
552
 
777
- return /*#__PURE__*/_react.cloneElement(child, // @ts-ignore
778
- _babelRuntimeHelpersEsmExtends({
779
- ref
780
- }, mergeProps(child.props, pressProps)));
781
- });
782
- export const PressResponder = /*#__PURE__*/_react.forwardRef((_ref, ref) => {
783
- let {
784
- children
785
- } = _ref,
786
- props = _babelRuntimeHelpersEsmObjectWithoutPropertiesLoose(_ref, ["children"]);
787
-
788
- let isRegistered = useRef(false);
789
- let prevContext = useContext($a3ff51240de6f955c79cf17a88e349$export$PressResponderContext);
790
- let context = mergeProps(prevContext || {}, _babelRuntimeHelpersEsmExtends({}, props, {
791
- ref: ref || (prevContext == null ? void 0 : prevContext.ref),
792
-
793
- register() {
794
- isRegistered.current = true;
795
-
796
- if (prevContext) {
797
- prevContext.register();
798
- }
799
- }
553
+ var $36b2a54c41893e87$exports = {};
800
554
 
801
- }));
802
- useSyncRef(prevContext, ref);
803
- useEffect(() => {
804
- if (!isRegistered.current) {
805
- console.warn('A PressResponder was rendered without a pressable child. ' + 'Either call the usePress hook, or wrap your DOM node with <Pressable> component.');
806
- }
807
- }, []);
808
- return /*#__PURE__*/_react.createElement($a3ff51240de6f955c79cf17a88e349$export$PressResponderContext.Provider, {
809
- value: context
810
- }, children);
811
- });
812
- // NOTICE file in the root directory of this source tree.
813
- // See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions
555
+ $parcel$export($36b2a54c41893e87$exports, "PressResponder", () => $36b2a54c41893e87$export$3351871ee4b288b8);
814
556
 
815
- /**
816
- * Handles focus events for the immediate target.
817
- * Focus events on child elements will be ignored.
818
- */
819
- export function useFocus(props) {
820
- if (props.isDisabled) {
821
- return {
822
- focusProps: {}
823
- };
824
- }
825
557
 
826
- let onFocus, onBlur;
827
558
 
828
- if (props.onFocus || props.onFocusChange) {
829
- onFocus = e => {
830
- if (e.target === e.currentTarget) {
831
- if (props.onFocus) {
832
- props.onFocus(e);
559
+ const $36b2a54c41893e87$export$3351871ee4b288b8 = /*#__PURE__*/ $7R3Av$react.forwardRef(({ children: children , ...props }, ref)=>{
560
+ let isRegistered = $7R3Av$useRef(false);
561
+ let prevContext = $7R3Av$useContext($60f869ba95814a99$export$5165eccb35aaadb5);
562
+ let context = $7R3Av$mergeProps(prevContext || {
563
+ }, {
564
+ ...props,
565
+ ref: ref || prevContext?.ref,
566
+ register () {
567
+ isRegistered.current = true;
568
+ if (prevContext) prevContext.register();
833
569
  }
570
+ });
571
+ $7R3Av$useSyncRef(prevContext, ref);
572
+ $7R3Av$useEffect(()=>{
573
+ if (!isRegistered.current) console.warn("A PressResponder was rendered without a pressable child. Either call the usePress hook, or wrap your DOM node with <Pressable> component.");
574
+ }, []);
575
+ return(/*#__PURE__*/ $7R3Av$react.createElement($60f869ba95814a99$export$5165eccb35aaadb5.Provider, {
576
+ value: context
577
+ }, children));
578
+ });
834
579
 
835
- if (props.onFocusChange) {
836
- props.onFocusChange(true);
580
+
581
+ var $96cd623b8d5dd15d$exports = {};
582
+
583
+ $parcel$export($96cd623b8d5dd15d$exports, "useFocus", () => $96cd623b8d5dd15d$export$f8168d8dd8fd66e6);
584
+ function $96cd623b8d5dd15d$export$f8168d8dd8fd66e6(props) {
585
+ if (props.isDisabled) return {
586
+ focusProps: {
837
587
  }
838
- }
839
588
  };
840
- }
841
-
842
- if (props.onBlur || props.onFocusChange) {
843
- onBlur = e => {
844
- if (e.target === e.currentTarget) {
845
- if (props.onBlur) {
846
- props.onBlur(e);
589
+ let onFocus, onBlur;
590
+ if (props.onFocus || props.onFocusChange) onFocus = (e)=>{
591
+ if (e.target === e.currentTarget) {
592
+ if (props.onFocus) props.onFocus(e);
593
+ if (props.onFocusChange) props.onFocusChange(true);
847
594
  }
848
-
849
- if (props.onFocusChange) {
850
- props.onFocusChange(false);
595
+ };
596
+ if (props.onBlur || props.onFocusChange) onBlur = (e)=>{
597
+ if (e.target === e.currentTarget) {
598
+ if (props.onBlur) props.onBlur(e);
599
+ if (props.onFocusChange) props.onFocusChange(false);
600
+ }
601
+ };
602
+ return {
603
+ focusProps: {
604
+ onFocus: onFocus,
605
+ onBlur: onBlur
851
606
  }
852
- }
853
607
  };
854
- }
855
-
856
- return {
857
- focusProps: {
858
- onFocus,
859
- onBlur
860
- }
861
- };
862
- }
863
- let $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = null;
864
- let $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers = new Set();
865
- let $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasSetupGlobalListeners = false;
866
- let $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = false;
867
- let $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasBlurredWindowRecently = false; // Only Tab or Esc keys will make focus visible on text input elements
868
-
869
- const $d01f69bb2ab5f70dfd0005370a2a2cbc$var$FOCUS_VISIBLE_INPUT_KEYS = {
870
- Tab: true,
871
- Escape: true
872
- };
873
-
874
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers(modality, e) {
875
- for (let handler of $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers) {
876
- handler(modality, e);
877
- }
878
608
  }
879
- /**
880
- * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.
881
- */
882
609
 
883
610
 
884
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$isValidKey(e) {
885
- // Control and Shift keys trigger when navigating back to the tab with keyboard.
886
- return !(e.metaKey || !isMac() && e.altKey || e.ctrlKey || e.type === 'keyup' && (e.key === 'Control' || e.key === 'Shift'));
887
- }
611
+ var $d2dd66cff767efeb$exports = {};
888
612
 
889
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleKeyboardEvent(e) {
890
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;
613
+ $parcel$export($d2dd66cff767efeb$exports, "isFocusVisible", () => $d2dd66cff767efeb$export$b9b3dfddab17db27);
614
+ $parcel$export($d2dd66cff767efeb$exports, "getInteractionModality", () => $d2dd66cff767efeb$export$630ff653c5ada6a9);
615
+ $parcel$export($d2dd66cff767efeb$exports, "setInteractionModality", () => $d2dd66cff767efeb$export$8397ddfc504fdb9a);
616
+ $parcel$export($d2dd66cff767efeb$exports, "useInteractionModality", () => $d2dd66cff767efeb$export$98e20ec92f614cfe);
617
+ $parcel$export($d2dd66cff767efeb$exports, "useFocusVisible", () => $d2dd66cff767efeb$export$ffd9e5021c1fb2d6);
618
+ $parcel$export($d2dd66cff767efeb$exports, "useFocusVisibleListener", () => $d2dd66cff767efeb$export$ec71b4b83ac08ec3);
891
619
 
892
- if ($d01f69bb2ab5f70dfd0005370a2a2cbc$var$isValidKey(e)) {
893
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'keyboard';
894
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers('keyboard', e);
895
- }
896
- }
897
620
 
898
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent(e) {
899
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'pointer';
900
621
 
901
- if (e.type === 'mousedown' || e.type === 'pointerdown') {
902
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;
903
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers('pointer', e);
904
- }
622
+ let $d2dd66cff767efeb$var$currentModality = null;
623
+ let $d2dd66cff767efeb$var$changeHandlers = new Set();
624
+ let $d2dd66cff767efeb$var$hasSetupGlobalListeners = false;
625
+ let $d2dd66cff767efeb$var$hasEventBeforeFocus = false;
626
+ let $d2dd66cff767efeb$var$hasBlurredWindowRecently = false;
627
+ // Only Tab or Esc keys will make focus visible on text input elements
628
+ const $d2dd66cff767efeb$var$FOCUS_VISIBLE_INPUT_KEYS = {
629
+ Tab: true,
630
+ Escape: true
631
+ };
632
+ function $d2dd66cff767efeb$var$triggerChangeHandlers(modality, e) {
633
+ for (let handler of $d2dd66cff767efeb$var$changeHandlers)handler(modality, e);
905
634
  }
906
-
907
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleClickEvent(e) {
908
- if ($f67ef9f1b8ed09b4b00fd0840cd8b94b$export$isVirtualClick(e)) {
909
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;
910
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'virtual';
911
- }
635
+ /**
636
+ * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.
637
+ */ function $d2dd66cff767efeb$var$isValidKey(e) {
638
+ // Control and Shift keys trigger when navigating back to the tab with keyboard.
639
+ return !(e.metaKey || !$7R3Av$isMac() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');
912
640
  }
913
-
914
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleFocusEvent(e) {
915
- // Firefox fires two extra focus events when the user first clicks into an iframe:
916
- // first on the window, then on the document. We ignore these events so they don't
917
- // cause keyboard focus rings to appear.
918
- if (e.target === window || e.target === document) {
919
- return;
920
- } // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.
921
- // This occurs, for example, when navigating a form with the next/previous buttons on iOS.
922
-
923
-
924
- if (!$d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus && !$d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasBlurredWindowRecently) {
925
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = 'virtual';
926
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers('virtual', e);
927
- }
928
-
929
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = false;
930
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasBlurredWindowRecently = false;
641
+ function $d2dd66cff767efeb$var$handleKeyboardEvent(e) {
642
+ $d2dd66cff767efeb$var$hasEventBeforeFocus = true;
643
+ if ($d2dd66cff767efeb$var$isValidKey(e)) {
644
+ $d2dd66cff767efeb$var$currentModality = 'keyboard';
645
+ $d2dd66cff767efeb$var$triggerChangeHandlers('keyboard', e);
646
+ }
931
647
  }
932
-
933
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleWindowBlur() {
934
- // When the window is blurred, reset state. This is necessary when tabbing out of the window,
935
- // for example, since a subsequent focus event won't be fired.
936
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = false;
937
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasBlurredWindowRecently = true;
648
+ function $d2dd66cff767efeb$var$handlePointerEvent(e) {
649
+ $d2dd66cff767efeb$var$currentModality = 'pointer';
650
+ if (e.type === 'mousedown' || e.type === 'pointerdown') {
651
+ $d2dd66cff767efeb$var$hasEventBeforeFocus = true;
652
+ $d2dd66cff767efeb$var$triggerChangeHandlers('pointer', e);
653
+ }
654
+ }
655
+ function $d2dd66cff767efeb$var$handleClickEvent(e) {
656
+ if ($e0ce205c97c9e771$export$60278871457622de(e)) {
657
+ $d2dd66cff767efeb$var$hasEventBeforeFocus = true;
658
+ $d2dd66cff767efeb$var$currentModality = 'virtual';
659
+ }
660
+ }
661
+ function $d2dd66cff767efeb$var$handleFocusEvent(e) {
662
+ // Firefox fires two extra focus events when the user first clicks into an iframe:
663
+ // first on the window, then on the document. We ignore these events so they don't
664
+ // cause keyboard focus rings to appear.
665
+ if (e.target === window || e.target === document) return;
666
+ // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.
667
+ // This occurs, for example, when navigating a form with the next/previous buttons on iOS.
668
+ if (!$d2dd66cff767efeb$var$hasEventBeforeFocus && !$d2dd66cff767efeb$var$hasBlurredWindowRecently) {
669
+ $d2dd66cff767efeb$var$currentModality = 'virtual';
670
+ $d2dd66cff767efeb$var$triggerChangeHandlers('virtual', e);
671
+ }
672
+ $d2dd66cff767efeb$var$hasEventBeforeFocus = false;
673
+ $d2dd66cff767efeb$var$hasBlurredWindowRecently = false;
674
+ }
675
+ function $d2dd66cff767efeb$var$handleWindowBlur() {
676
+ // When the window is blurred, reset state. This is necessary when tabbing out of the window,
677
+ // for example, since a subsequent focus event won't be fired.
678
+ $d2dd66cff767efeb$var$hasEventBeforeFocus = false;
679
+ $d2dd66cff767efeb$var$hasBlurredWindowRecently = true;
938
680
  }
939
681
  /**
940
682
  * Setup global event listeners to control when keyboard focus style should be visible.
941
- */
942
-
943
-
944
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents() {
945
- if (typeof window === 'undefined' || $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasSetupGlobalListeners) {
946
- return;
947
- } // Programmatic focus() calls shouldn't affect the current input modality.
948
- // However, we need to detect other cases when a focus event occurs without
949
- // a preceding user event (e.g. screen reader focus). Overriding the focus
950
- // method on HTMLElement.prototype is a bit hacky, but works.
951
-
952
-
953
- let focus = HTMLElement.prototype.focus;
954
-
955
- HTMLElement.prototype.focus = function () {
956
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasEventBeforeFocus = true;
957
- focus.apply(this, arguments);
958
- };
959
-
960
- document.addEventListener('keydown', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleKeyboardEvent, true);
961
- document.addEventListener('keyup', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleKeyboardEvent, true);
962
- document.addEventListener('click', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleClickEvent, true); // Register focus events on the window so they are sure to happen
963
- // before React's event listeners (registered on the document).
964
-
965
- window.addEventListener('focus', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleFocusEvent, true);
966
- window.addEventListener('blur', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handleWindowBlur, false);
967
-
968
- if (typeof PointerEvent !== 'undefined') {
969
- document.addEventListener('pointerdown', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);
970
- document.addEventListener('pointermove', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);
971
- document.addEventListener('pointerup', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);
972
- } else {
973
- document.addEventListener('mousedown', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);
974
- document.addEventListener('mousemove', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);
975
- document.addEventListener('mouseup', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$handlePointerEvent, true);
976
- }
977
-
978
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$hasSetupGlobalListeners = true;
683
+ */ function $d2dd66cff767efeb$var$setupGlobalFocusEvents() {
684
+ if (typeof window === 'undefined' || $d2dd66cff767efeb$var$hasSetupGlobalListeners) return;
685
+ // Programmatic focus() calls shouldn't affect the current input modality.
686
+ // However, we need to detect other cases when a focus event occurs without
687
+ // a preceding user event (e.g. screen reader focus). Overriding the focus
688
+ // method on HTMLElement.prototype is a bit hacky, but works.
689
+ let focus = HTMLElement.prototype.focus;
690
+ HTMLElement.prototype.focus = function() {
691
+ $d2dd66cff767efeb$var$hasEventBeforeFocus = true;
692
+ focus.apply(this, arguments);
693
+ };
694
+ document.addEventListener('keydown', $d2dd66cff767efeb$var$handleKeyboardEvent, true);
695
+ document.addEventListener('keyup', $d2dd66cff767efeb$var$handleKeyboardEvent, true);
696
+ document.addEventListener('click', $d2dd66cff767efeb$var$handleClickEvent, true);
697
+ // Register focus events on the window so they are sure to happen
698
+ // before React's event listeners (registered on the document).
699
+ window.addEventListener('focus', $d2dd66cff767efeb$var$handleFocusEvent, true);
700
+ window.addEventListener('blur', $d2dd66cff767efeb$var$handleWindowBlur, false);
701
+ if (typeof PointerEvent !== 'undefined') {
702
+ document.addEventListener('pointerdown', $d2dd66cff767efeb$var$handlePointerEvent, true);
703
+ document.addEventListener('pointermove', $d2dd66cff767efeb$var$handlePointerEvent, true);
704
+ document.addEventListener('pointerup', $d2dd66cff767efeb$var$handlePointerEvent, true);
705
+ } else {
706
+ document.addEventListener('mousedown', $d2dd66cff767efeb$var$handlePointerEvent, true);
707
+ document.addEventListener('mousemove', $d2dd66cff767efeb$var$handlePointerEvent, true);
708
+ document.addEventListener('mouseup', $d2dd66cff767efeb$var$handlePointerEvent, true);
709
+ }
710
+ $d2dd66cff767efeb$var$hasSetupGlobalListeners = true;
979
711
  }
980
-
981
712
  if (typeof document !== 'undefined') {
982
- if (document.readyState !== 'loading') {
983
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents();
984
- } else {
985
- document.addEventListener('DOMContentLoaded', $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents);
986
- }
713
+ if (document.readyState !== 'loading') $d2dd66cff767efeb$var$setupGlobalFocusEvents();
714
+ else document.addEventListener('DOMContentLoaded', $d2dd66cff767efeb$var$setupGlobalFocusEvents);
987
715
  }
988
- /**
989
- * If true, keyboard focus is visible.
990
- */
991
-
992
-
993
- export function isFocusVisible() {
994
- return $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality !== 'pointer';
716
+ function $d2dd66cff767efeb$export$b9b3dfddab17db27() {
717
+ return $d2dd66cff767efeb$var$currentModality !== 'pointer';
995
718
  }
996
- export function getInteractionModality() {
997
- return $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality;
719
+ function $d2dd66cff767efeb$export$630ff653c5ada6a9() {
720
+ return $d2dd66cff767efeb$var$currentModality;
998
721
  }
999
- export function setInteractionModality(modality) {
1000
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality = modality;
1001
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$triggerChangeHandlers(modality, null);
722
+ function $d2dd66cff767efeb$export$8397ddfc504fdb9a(modality) {
723
+ $d2dd66cff767efeb$var$currentModality = modality;
724
+ $d2dd66cff767efeb$var$triggerChangeHandlers(modality, null);
1002
725
  }
1003
- /**
1004
- * Keeps state of the current modality.
1005
- */
1006
-
1007
- export function useInteractionModality() {
1008
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents();
1009
- let [modality, setModality] = useState($d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality);
1010
- useEffect(() => {
1011
- let handler = () => {
1012
- setModality($d01f69bb2ab5f70dfd0005370a2a2cbc$var$currentModality);
1013
- };
1014
-
1015
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.add(handler);
1016
- return () => {
1017
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.delete(handler);
1018
- };
1019
- }, []);
1020
- return modality;
726
+ function $d2dd66cff767efeb$export$98e20ec92f614cfe() {
727
+ $d2dd66cff767efeb$var$setupGlobalFocusEvents();
728
+ let [modality, setModality] = $7R3Av$useState($d2dd66cff767efeb$var$currentModality);
729
+ $7R3Av$useEffect(()=>{
730
+ let handler = ()=>{
731
+ setModality($d2dd66cff767efeb$var$currentModality);
732
+ };
733
+ $d2dd66cff767efeb$var$changeHandlers.add(handler);
734
+ return ()=>{
735
+ $d2dd66cff767efeb$var$changeHandlers.delete(handler);
736
+ };
737
+ }, []);
738
+ return modality;
1021
739
  }
1022
740
  /**
1023
741
  * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that
1024
742
  * focus visible style can be properly set.
1025
- */
1026
-
1027
- function $d01f69bb2ab5f70dfd0005370a2a2cbc$var$isKeyboardFocusEvent(isTextInput, modality, e) {
1028
- return !(isTextInput && modality === 'keyboard' && e instanceof KeyboardEvent && !$d01f69bb2ab5f70dfd0005370a2a2cbc$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);
1029
- }
1030
- /**
1031
- * Manages focus visible state for the page, and subscribes individual components for updates.
1032
- */
1033
-
1034
-
1035
- export function useFocusVisible(props) {
1036
- if (props === void 0) {
1037
- props = {};
1038
- }
1039
-
1040
- let {
1041
- isTextInput,
1042
- autoFocus
1043
- } = props;
1044
- let [isFocusVisibleState, setFocusVisible] = useState(autoFocus || isFocusVisible());
1045
- useFocusVisibleListener(isFocusVisible => {
1046
- setFocusVisible(isFocusVisible);
1047
- }, [isTextInput], {
1048
- isTextInput
1049
- });
1050
- return {
1051
- isFocusVisible: isFocusVisibleState
1052
- };
743
+ */ function $d2dd66cff767efeb$var$isKeyboardFocusEvent(isTextInput, modality, e) {
744
+ return !(isTextInput && modality === 'keyboard' && e instanceof KeyboardEvent && !$d2dd66cff767efeb$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);
1053
745
  }
1054
- /**
1055
- * Listens for trigger change and reports if focus is visible (i.e., modality is not pointer).
1056
- */
1057
-
1058
- export function useFocusVisibleListener(fn, deps, opts) {
1059
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$setupGlobalFocusEvents();
1060
- useEffect(() => {
1061
- let handler = (modality, e) => {
1062
- if (!$d01f69bb2ab5f70dfd0005370a2a2cbc$var$isKeyboardFocusEvent(opts == null ? void 0 : opts.isTextInput, modality, e)) {
1063
- return;
1064
- }
1065
-
1066
- fn(isFocusVisible());
1067
- };
1068
-
1069
- $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.add(handler);
1070
- return () => $d01f69bb2ab5f70dfd0005370a2a2cbc$var$changeHandlers.delete(handler);
1071
- }, deps);
1072
- }
1073
-
1074
- /**
1075
- * Handles focus events for the target and its descendants.
1076
- */
1077
- export function useFocusWithin(props) {
1078
- let state = useRef({
1079
- isFocusWithin: false
1080
- }).current;
1081
-
1082
- if (props.isDisabled) {
746
+ function $d2dd66cff767efeb$export$ffd9e5021c1fb2d6(props = {
747
+ }) {
748
+ let { isTextInput: isTextInput , autoFocus: autoFocus } = props;
749
+ let [isFocusVisibleState, setFocusVisible] = $7R3Av$useState(autoFocus || $d2dd66cff767efeb$export$b9b3dfddab17db27());
750
+ $d2dd66cff767efeb$export$ec71b4b83ac08ec3(($d2dd66cff767efeb$export$b9b3dfddab17db27)=>{
751
+ setFocusVisible($d2dd66cff767efeb$export$b9b3dfddab17db27);
752
+ }, [
753
+ isTextInput
754
+ ], {
755
+ isTextInput: isTextInput
756
+ });
1083
757
  return {
1084
- focusWithinProps: {}
758
+ isFocusVisible: isFocusVisibleState
1085
759
  };
1086
- }
1087
-
1088
- let onFocus = e => {
1089
- if (!state.isFocusWithin) {
1090
- if (props.onFocusWithin) {
1091
- props.onFocusWithin(e);
1092
- }
1093
-
1094
- if (props.onFocusWithinChange) {
1095
- props.onFocusWithinChange(true);
1096
- }
1097
-
1098
- state.isFocusWithin = true;
1099
- }
1100
- };
1101
-
1102
- let onBlur = e => {
1103
- // We don't want to trigger onBlurWithin and then immediately onFocusWithin again
1104
- // when moving focus inside the element. Only trigger if the currentTarget doesn't
1105
- // include the relatedTarget (where focus is moving).
1106
- if (state.isFocusWithin && !e.currentTarget.contains(e.relatedTarget)) {
1107
- if (props.onBlurWithin) {
1108
- props.onBlurWithin(e);
1109
- }
1110
-
1111
- if (props.onFocusWithinChange) {
1112
- props.onFocusWithinChange(false);
1113
- }
1114
-
1115
- state.isFocusWithin = false;
1116
- }
1117
- };
1118
-
1119
- return {
1120
- focusWithinProps: {
1121
- onFocus: onFocus,
1122
- onBlur: onBlur
1123
- }
1124
- };
1125
- }
1126
- // iOS fires onPointerEnter twice: once with pointerType="touch" and again with pointerType="mouse".
1127
- // We want to ignore these emulated events so they do not trigger hover behavior.
1128
- // See https://bugs.webkit.org/show_bug.cgi?id=214609.
1129
- let $b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents = false;
1130
- let $b1a784c66b81d90efa4f74e05b$var$hoverCount = 0;
1131
-
1132
- function $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents() {
1133
- $b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents = true; // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter
1134
- // with pointerType="mouse" immediately after onPointerUp and before onFocus. On other
1135
- // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in
1136
- // the distant future because a user previously touched the element.
1137
-
1138
- setTimeout(() => {
1139
- $b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents = false;
1140
- }, 50);
1141
760
  }
1142
-
1143
- function $b1a784c66b81d90efa4f74e05b$var$handleGlobalPointerEvent(e) {
1144
- if (e.pointerType === 'touch') {
1145
- $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents();
1146
- }
1147
- }
1148
-
1149
- function $b1a784c66b81d90efa4f74e05b$var$setupGlobalTouchEvents() {
1150
- if (typeof document === 'undefined') {
1151
- return;
1152
- }
1153
-
1154
- if (typeof PointerEvent !== 'undefined') {
1155
- document.addEventListener('pointerup', $b1a784c66b81d90efa4f74e05b$var$handleGlobalPointerEvent);
1156
- } else {
1157
- document.addEventListener('touchend', $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents);
1158
- }
1159
-
1160
- $b1a784c66b81d90efa4f74e05b$var$hoverCount++;
1161
- return () => {
1162
- $b1a784c66b81d90efa4f74e05b$var$hoverCount--;
1163
-
1164
- if ($b1a784c66b81d90efa4f74e05b$var$hoverCount > 0) {
1165
- return;
1166
- }
1167
-
1168
- if (typeof PointerEvent !== 'undefined') {
1169
- document.removeEventListener('pointerup', $b1a784c66b81d90efa4f74e05b$var$handleGlobalPointerEvent);
1170
- } else {
1171
- document.removeEventListener('touchend', $b1a784c66b81d90efa4f74e05b$var$setGlobalIgnoreEmulatedMouseEvents);
1172
- }
1173
- };
761
+ function $d2dd66cff767efeb$export$ec71b4b83ac08ec3(fn, deps, opts) {
762
+ $d2dd66cff767efeb$var$setupGlobalFocusEvents();
763
+ $7R3Av$useEffect(()=>{
764
+ let handler = (modality, e)=>{
765
+ if (!$d2dd66cff767efeb$var$isKeyboardFocusEvent(opts?.isTextInput, modality, e)) return;
766
+ fn($d2dd66cff767efeb$export$b9b3dfddab17db27());
767
+ };
768
+ $d2dd66cff767efeb$var$changeHandlers.add(handler);
769
+ return ()=>{
770
+ $d2dd66cff767efeb$var$changeHandlers.delete(handler);
771
+ };
772
+ }, deps);
1174
773
  }
1175
- /**
1176
- * Handles pointer hover interactions for an element. Normalizes behavior
1177
- * across browsers and platforms, and ignores emulated mouse events on touch devices.
1178
- */
1179
-
1180
-
1181
- export function useHover(props) {
1182
- let {
1183
- onHoverStart,
1184
- onHoverChange,
1185
- onHoverEnd,
1186
- isDisabled
1187
- } = props;
1188
- let [isHovered, setHovered] = useState(false);
1189
- let state = useRef({
1190
- isHovered: false,
1191
- ignoreEmulatedMouseEvents: false,
1192
- pointerType: '',
1193
- target: null
1194
- }).current;
1195
- useEffect($b1a784c66b81d90efa4f74e05b$var$setupGlobalTouchEvents, []);
1196
- let {
1197
- hoverProps,
1198
- triggerHoverEnd
1199
- } = useMemo(() => {
1200
- let triggerHoverStart = (event, pointerType) => {
1201
- state.pointerType = pointerType;
1202
-
1203
- if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) {
1204
- return;
1205
- }
1206
-
1207
- state.isHovered = true;
1208
- let target = event.target;
1209
- state.target = target;
1210
-
1211
- if (onHoverStart) {
1212
- onHoverStart({
1213
- type: 'hoverstart',
1214
- target,
1215
- pointerType
1216
- });
1217
- }
1218
-
1219
- if (onHoverChange) {
1220
- onHoverChange(true);
1221
- }
1222
774
 
1223
- setHovered(true);
1224
- };
1225
775
 
1226
- let triggerHoverEnd = (event, pointerType) => {
1227
- state.pointerType = '';
1228
- state.target = null;
776
+ var $d2acb2e6011484f7$exports = {};
1229
777
 
1230
- if (pointerType === 'touch' || !state.isHovered) {
1231
- return;
1232
- }
1233
-
1234
- state.isHovered = false;
1235
- let target = event.target;
1236
-
1237
- if (onHoverEnd) {
1238
- onHoverEnd({
1239
- type: 'hoverend',
1240
- target,
1241
- pointerType
1242
- });
1243
- }
1244
-
1245
- if (onHoverChange) {
1246
- onHoverChange(false);
1247
- }
1248
-
1249
- setHovered(false);
1250
- };
778
+ $parcel$export($d2acb2e6011484f7$exports, "useFocusWithin", () => $d2acb2e6011484f7$export$420e68273165f4ec);
1251
779
 
1252
- let hoverProps = {};
1253
-
1254
- if (typeof PointerEvent !== 'undefined') {
1255
- hoverProps.onPointerEnter = e => {
1256
- if ($b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') {
1257
- return;
1258
- }
1259
-
1260
- triggerHoverStart(e, e.pointerType);
1261
- };
1262
-
1263
- hoverProps.onPointerLeave = e => {
1264
- if (!isDisabled && e.currentTarget.contains(e.target)) {
1265
- triggerHoverEnd(e, e.pointerType);
780
+ function $d2acb2e6011484f7$export$420e68273165f4ec(props) {
781
+ let state = $7R3Av$useRef({
782
+ isFocusWithin: false
783
+ }).current;
784
+ if (props.isDisabled) return {
785
+ focusWithinProps: {
1266
786
  }
1267
- };
1268
- } else {
1269
- hoverProps.onTouchStart = () => {
1270
- state.ignoreEmulatedMouseEvents = true;
1271
- };
1272
-
1273
- hoverProps.onMouseEnter = e => {
1274
- if (!state.ignoreEmulatedMouseEvents && !$b1a784c66b81d90efa4f74e05b$var$globalIgnoreEmulatedMouseEvents) {
1275
- triggerHoverStart(e, 'mouse');
787
+ };
788
+ let onFocus = (e)=>{
789
+ if (!state.isFocusWithin) {
790
+ if (props.onFocusWithin) props.onFocusWithin(e);
791
+ if (props.onFocusWithinChange) props.onFocusWithinChange(true);
792
+ state.isFocusWithin = true;
1276
793
  }
1277
-
1278
- state.ignoreEmulatedMouseEvents = false;
1279
- };
1280
-
1281
- hoverProps.onMouseLeave = e => {
1282
- if (!isDisabled && e.currentTarget.contains(e.target)) {
1283
- triggerHoverEnd(e, 'mouse');
794
+ };
795
+ let onBlur = (e)=>{
796
+ // We don't want to trigger onBlurWithin and then immediately onFocusWithin again
797
+ // when moving focus inside the element. Only trigger if the currentTarget doesn't
798
+ // include the relatedTarget (where focus is moving).
799
+ if (state.isFocusWithin && !e.currentTarget.contains(e.relatedTarget)) {
800
+ if (props.onBlurWithin) props.onBlurWithin(e);
801
+ if (props.onFocusWithinChange) props.onFocusWithinChange(false);
802
+ state.isFocusWithin = false;
1284
803
  }
1285
- };
1286
- }
1287
-
804
+ };
1288
805
  return {
1289
- hoverProps,
1290
- triggerHoverEnd
806
+ focusWithinProps: {
807
+ onFocus: onFocus,
808
+ onBlur: onBlur
809
+ }
1291
810
  };
1292
- }, [onHoverStart, onHoverChange, onHoverEnd, isDisabled, state]);
1293
- useEffect(() => {
1294
- // Call the triggerHoverEnd as soon as isDisabled changes to true
1295
- // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering
1296
- if (isDisabled) {
1297
- triggerHoverEnd({
1298
- target: state.target
1299
- }, state.pointerType);
1300
- }
1301
- }, [isDisabled]);
1302
- return {
1303
- hoverProps,
1304
- isHovered
1305
- };
1306
811
  }
1307
812
 
1308
- /**
1309
- * Example, used in components like Dialogs and Popovers so they can close
1310
- * when a user clicks outside them.
1311
- */
1312
- export function useInteractOutside(props) {
1313
- let {
1314
- ref,
1315
- onInteractOutside,
1316
- isDisabled,
1317
- onInteractOutsideStart
1318
- } = props;
1319
- let stateRef = useRef({
1320
- isPointerDown: false,
1321
- ignoreEmulatedMouseEvents: false
1322
- });
1323
- let state = stateRef.current;
1324
- useEffect(() => {
1325
- let onPointerDown = e => {
1326
- if (isDisabled) {
1327
- return;
1328
- }
1329
-
1330
- if ($e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(e, ref) && onInteractOutside) {
1331
- if (onInteractOutsideStart) {
1332
- onInteractOutsideStart(e);
1333
- }
1334
813
 
1335
- state.isPointerDown = true;
1336
- }
1337
- }; // Use pointer events if available. Otherwise, fall back to mouse and touch events.
814
+ var $52a70f66afabebbb$exports = {};
1338
815
 
816
+ $parcel$export($52a70f66afabebbb$exports, "useHover", () => $52a70f66afabebbb$export$ae780daf29e6d456);
1339
817
 
1340
- if (typeof PointerEvent !== 'undefined') {
1341
- let onPointerUp = e => {
1342
- if (isDisabled) {
1343
- return;
1344
- }
1345
-
1346
- if (state.isPointerDown && onInteractOutside && $e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(e, ref)) {
1347
- state.isPointerDown = false;
1348
- onInteractOutside(e);
1349
- }
1350
- }; // changing these to capture phase fixed combobox
1351
-
1352
-
1353
- document.addEventListener('pointerdown', onPointerDown, true);
1354
- document.addEventListener('pointerup', onPointerUp, true);
1355
- return () => {
1356
- document.removeEventListener('pointerdown', onPointerDown, true);
1357
- document.removeEventListener('pointerup', onPointerUp, true);
1358
- };
1359
- } else {
1360
- let onMouseUp = e => {
1361
- if (isDisabled) {
1362
- return;
818
+ // iOS fires onPointerEnter twice: once with pointerType="touch" and again with pointerType="mouse".
819
+ // We want to ignore these emulated events so they do not trigger hover behavior.
820
+ // See https://bugs.webkit.org/show_bug.cgi?id=214609.
821
+ let $52a70f66afabebbb$var$globalIgnoreEmulatedMouseEvents = false;
822
+ let $52a70f66afabebbb$var$hoverCount = 0;
823
+ function $52a70f66afabebbb$var$setGlobalIgnoreEmulatedMouseEvents() {
824
+ $52a70f66afabebbb$var$globalIgnoreEmulatedMouseEvents = true;
825
+ // Clear globalIgnoreEmulatedMouseEvents after a short timeout. iOS fires onPointerEnter
826
+ // with pointerType="mouse" immediately after onPointerUp and before onFocus. On other
827
+ // devices that don't have this quirk, we don't want to ignore a mouse hover sometime in
828
+ // the distant future because a user previously touched the element.
829
+ setTimeout(()=>{
830
+ $52a70f66afabebbb$var$globalIgnoreEmulatedMouseEvents = false;
831
+ }, 50);
832
+ }
833
+ function $52a70f66afabebbb$var$handleGlobalPointerEvent(e) {
834
+ if (e.pointerType === 'touch') $52a70f66afabebbb$var$setGlobalIgnoreEmulatedMouseEvents();
835
+ }
836
+ function $52a70f66afabebbb$var$setupGlobalTouchEvents() {
837
+ if (typeof document === 'undefined') return;
838
+ if (typeof PointerEvent !== 'undefined') document.addEventListener('pointerup', $52a70f66afabebbb$var$handleGlobalPointerEvent);
839
+ else document.addEventListener('touchend', $52a70f66afabebbb$var$setGlobalIgnoreEmulatedMouseEvents);
840
+ $52a70f66afabebbb$var$hoverCount++;
841
+ return ()=>{
842
+ $52a70f66afabebbb$var$hoverCount--;
843
+ if ($52a70f66afabebbb$var$hoverCount > 0) return;
844
+ if (typeof PointerEvent !== 'undefined') document.removeEventListener('pointerup', $52a70f66afabebbb$var$handleGlobalPointerEvent);
845
+ else document.removeEventListener('touchend', $52a70f66afabebbb$var$setGlobalIgnoreEmulatedMouseEvents);
846
+ };
847
+ }
848
+ function $52a70f66afabebbb$export$ae780daf29e6d456(props) {
849
+ let { onHoverStart: onHoverStart , onHoverChange: onHoverChange , onHoverEnd: onHoverEnd , isDisabled: isDisabled } = props;
850
+ let [isHovered, setHovered] = $7R3Av$useState(false);
851
+ let state = $7R3Av$useRef({
852
+ isHovered: false,
853
+ ignoreEmulatedMouseEvents: false,
854
+ pointerType: '',
855
+ target: null
856
+ }).current;
857
+ $7R3Av$useEffect($52a70f66afabebbb$var$setupGlobalTouchEvents, []);
858
+ let { hoverProps: hoverProps1 , triggerHoverEnd: triggerHoverEnd1 } = $7R3Av$useMemo(()=>{
859
+ let triggerHoverStart = (event, pointerType)=>{
860
+ state.pointerType = pointerType;
861
+ if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) return;
862
+ state.isHovered = true;
863
+ let target = event.currentTarget;
864
+ state.target = target;
865
+ if (onHoverStart) onHoverStart({
866
+ type: 'hoverstart',
867
+ target: target,
868
+ pointerType: pointerType
869
+ });
870
+ if (onHoverChange) onHoverChange(true);
871
+ setHovered(true);
872
+ };
873
+ let triggerHoverEnd = (event, pointerType)=>{
874
+ state.pointerType = '';
875
+ state.target = null;
876
+ if (pointerType === 'touch' || !state.isHovered) return;
877
+ state.isHovered = false;
878
+ let target = event.currentTarget;
879
+ if (onHoverEnd) onHoverEnd({
880
+ type: 'hoverend',
881
+ target: target,
882
+ pointerType: pointerType
883
+ });
884
+ if (onHoverChange) onHoverChange(false);
885
+ setHovered(false);
886
+ };
887
+ let hoverProps = {
888
+ };
889
+ if (typeof PointerEvent !== 'undefined') {
890
+ hoverProps.onPointerEnter = (e)=>{
891
+ if ($52a70f66afabebbb$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') return;
892
+ triggerHoverStart(e, e.pointerType);
893
+ };
894
+ hoverProps.onPointerLeave = (e)=>{
895
+ if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, e.pointerType);
896
+ };
897
+ } else {
898
+ hoverProps.onTouchStart = ()=>{
899
+ state.ignoreEmulatedMouseEvents = true;
900
+ };
901
+ hoverProps.onMouseEnter = (e)=>{
902
+ if (!state.ignoreEmulatedMouseEvents && !$52a70f66afabebbb$var$globalIgnoreEmulatedMouseEvents) triggerHoverStart(e, 'mouse');
903
+ state.ignoreEmulatedMouseEvents = false;
904
+ };
905
+ hoverProps.onMouseLeave = (e)=>{
906
+ if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, 'mouse');
907
+ };
1363
908
  }
909
+ return {
910
+ hoverProps: hoverProps,
911
+ triggerHoverEnd: triggerHoverEnd
912
+ };
913
+ }, [
914
+ onHoverStart,
915
+ onHoverChange,
916
+ onHoverEnd,
917
+ isDisabled,
918
+ state
919
+ ]);
920
+ $7R3Av$useEffect(()=>{
921
+ // Call the triggerHoverEnd as soon as isDisabled changes to true
922
+ // Safe to call triggerHoverEnd, it will early return if we aren't currently hovering
923
+ if (isDisabled) triggerHoverEnd1({
924
+ currentTarget: state.target
925
+ }, state.pointerType);
926
+ }, [
927
+ isDisabled
928
+ ]);
929
+ return {
930
+ hoverProps: hoverProps1,
931
+ isHovered: isHovered
932
+ };
933
+ }
1364
934
 
1365
- if (state.ignoreEmulatedMouseEvents) {
1366
- state.ignoreEmulatedMouseEvents = false;
1367
- } else if (state.isPointerDown && onInteractOutside && $e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(e, ref)) {
1368
- state.isPointerDown = false;
1369
- onInteractOutside(e);
1370
- }
1371
- };
1372
935
 
1373
- let onTouchEnd = e => {
1374
- if (isDisabled) {
1375
- return;
1376
- }
936
+ var $ba9bc027ba236f10$exports = {};
1377
937
 
1378
- state.ignoreEmulatedMouseEvents = true;
938
+ $parcel$export($ba9bc027ba236f10$exports, "useInteractOutside", () => $ba9bc027ba236f10$export$872b660ac5a1ff98);
1379
939
 
1380
- if (onInteractOutside && state.isPointerDown && $e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(e, ref)) {
1381
- state.isPointerDown = false;
1382
- onInteractOutside(e);
940
+ function $ba9bc027ba236f10$export$872b660ac5a1ff98(props) {
941
+ let { ref: ref , onInteractOutside: onInteractOutside , isDisabled: isDisabled , onInteractOutsideStart: onInteractOutsideStart } = props;
942
+ let stateRef = $7R3Av$useRef({
943
+ isPointerDown: false,
944
+ ignoreEmulatedMouseEvents: false,
945
+ onInteractOutside: onInteractOutside,
946
+ onInteractOutsideStart: onInteractOutsideStart
947
+ });
948
+ let state = stateRef.current;
949
+ state.onInteractOutside = onInteractOutside;
950
+ state.onInteractOutsideStart = onInteractOutsideStart;
951
+ $7R3Av$useEffect(()=>{
952
+ if (isDisabled) return;
953
+ let onPointerDown = (e)=>{
954
+ if ($ba9bc027ba236f10$var$isValidEvent(e, ref) && state.onInteractOutside) {
955
+ if (state.onInteractOutsideStart) state.onInteractOutsideStart(e);
956
+ state.isPointerDown = true;
957
+ }
958
+ };
959
+ // Use pointer events if available. Otherwise, fall back to mouse and touch events.
960
+ if (typeof PointerEvent !== 'undefined') {
961
+ let onPointerUp = (e)=>{
962
+ if (state.isPointerDown && state.onInteractOutside && $ba9bc027ba236f10$var$isValidEvent(e, ref)) {
963
+ state.isPointerDown = false;
964
+ state.onInteractOutside(e);
965
+ }
966
+ };
967
+ // changing these to capture phase fixed combobox
968
+ document.addEventListener('pointerdown', onPointerDown, true);
969
+ document.addEventListener('pointerup', onPointerUp, true);
970
+ return ()=>{
971
+ document.removeEventListener('pointerdown', onPointerDown, true);
972
+ document.removeEventListener('pointerup', onPointerUp, true);
973
+ };
974
+ } else {
975
+ let onMouseUp = (e)=>{
976
+ if (state.ignoreEmulatedMouseEvents) state.ignoreEmulatedMouseEvents = false;
977
+ else if (state.isPointerDown && state.onInteractOutside && $ba9bc027ba236f10$var$isValidEvent(e, ref)) {
978
+ state.isPointerDown = false;
979
+ state.onInteractOutside(e);
980
+ }
981
+ };
982
+ let onTouchEnd = (e)=>{
983
+ state.ignoreEmulatedMouseEvents = true;
984
+ if (state.onInteractOutside && state.isPointerDown && $ba9bc027ba236f10$var$isValidEvent(e, ref)) {
985
+ state.isPointerDown = false;
986
+ state.onInteractOutside(e);
987
+ }
988
+ };
989
+ document.addEventListener('mousedown', onPointerDown, true);
990
+ document.addEventListener('mouseup', onMouseUp, true);
991
+ document.addEventListener('touchstart', onPointerDown, true);
992
+ document.addEventListener('touchend', onTouchEnd, true);
993
+ return ()=>{
994
+ document.removeEventListener('mousedown', onPointerDown, true);
995
+ document.removeEventListener('mouseup', onMouseUp, true);
996
+ document.removeEventListener('touchstart', onPointerDown, true);
997
+ document.removeEventListener('touchend', onTouchEnd, true);
998
+ };
1383
999
  }
1384
- };
1385
-
1386
- document.addEventListener('mousedown', onPointerDown, true);
1387
- document.addEventListener('mouseup', onMouseUp, true);
1388
- document.addEventListener('touchstart', onPointerDown, true);
1389
- document.addEventListener('touchend', onTouchEnd, true);
1390
- return () => {
1391
- document.removeEventListener('mousedown', onPointerDown, true);
1392
- document.removeEventListener('mouseup', onMouseUp, true);
1393
- document.removeEventListener('touchstart', onPointerDown, true);
1394
- document.removeEventListener('touchend', onTouchEnd, true);
1395
- };
1000
+ }, [
1001
+ ref,
1002
+ state,
1003
+ isDisabled
1004
+ ]);
1005
+ }
1006
+ function $ba9bc027ba236f10$var$isValidEvent(event, ref) {
1007
+ if (event.button > 0) return false;
1008
+ // if the event target is no longer in the document
1009
+ if (event.target) {
1010
+ const ownerDocument = event.target.ownerDocument;
1011
+ if (!ownerDocument || !ownerDocument.documentElement.contains(event.target)) return false;
1396
1012
  }
1397
- }, [onInteractOutside, ref, state.ignoreEmulatedMouseEvents, state.isPointerDown, isDisabled]);
1013
+ return ref.current && !ref.current.contains(event.target);
1398
1014
  }
1399
1015
 
1400
- function $e415bb64ab27cb8fbfac2f417412022f$var$isValidEvent(event, ref) {
1401
- if (event.button > 0) {
1402
- return false;
1403
- } // if the event target is no longer in the document
1404
-
1405
-
1406
- if (event.target) {
1407
- const ownerDocument = event.target.ownerDocument;
1408
-
1409
- if (!ownerDocument || !ownerDocument.documentElement.contains(event.target)) {
1410
- return false;
1411
- }
1412
- }
1413
1016
 
1414
- return ref.current && !ref.current.contains(event.target);
1017
+ var $a866ba1020241f41$exports = {};
1018
+
1019
+ $parcel$export($a866ba1020241f41$exports, "useKeyboard", () => $a866ba1020241f41$export$8f71654801c2f7cd);
1020
+ function $23f3ec5b42541cce$export$48d1ea6320830260(handler) {
1021
+ if (!handler) return;
1022
+ let shouldStopPropagation = true;
1023
+ return (e)=>{
1024
+ let event = {
1025
+ ...e,
1026
+ preventDefault () {
1027
+ e.preventDefault();
1028
+ },
1029
+ isDefaultPrevented () {
1030
+ return e.isDefaultPrevented();
1031
+ },
1032
+ stopPropagation () {
1033
+ console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');
1034
+ },
1035
+ continuePropagation () {
1036
+ shouldStopPropagation = false;
1037
+ }
1038
+ };
1039
+ handler(event);
1040
+ if (shouldStopPropagation) e.stopPropagation();
1041
+ };
1415
1042
  }
1416
1043
 
1417
- /**
1418
- * This function wraps a React event handler to make stopPropagation the default, and support continuePropagation instead.
1419
- */
1420
- function $dc0d75166de722fbf58eb6c3552$export$createEventHandler(handler) {
1421
- if (!handler) {
1422
- return;
1423
- }
1424
-
1425
- let shouldStopPropagation = true;
1426
- return e => {
1427
- let event = _babelRuntimeHelpersEsmExtends({}, e, {
1428
- preventDefault() {
1429
- e.preventDefault();
1430
- },
1431
-
1432
- isDefaultPrevented() {
1433
- return e.isDefaultPrevented();
1434
- },
1435
1044
 
1436
- stopPropagation() {
1437
- console.error('stopPropagation is now the default behavior for events in React Spectrum. You can use continuePropagation() to revert this behavior.');
1438
- },
1045
+ function $a866ba1020241f41$export$8f71654801c2f7cd(props) {
1046
+ return {
1047
+ keyboardProps: props.isDisabled ? {
1048
+ } : {
1049
+ onKeyDown: $23f3ec5b42541cce$export$48d1ea6320830260(props.onKeyDown),
1050
+ onKeyUp: $23f3ec5b42541cce$export$48d1ea6320830260(props.onKeyUp)
1051
+ }
1052
+ };
1053
+ }
1439
1054
 
1440
- continuePropagation() {
1441
- shouldStopPropagation = false;
1442
- }
1443
1055
 
1444
- });
1056
+ var $75f78fec52a57cf7$exports = {};
1445
1057
 
1446
- handler(event);
1058
+ $parcel$export($75f78fec52a57cf7$exports, "useMove", () => $75f78fec52a57cf7$export$36da96379f79f245);
1447
1059
 
1448
- if (shouldStopPropagation) {
1449
- e.stopPropagation();
1450
- }
1451
- };
1452
- }
1453
1060
 
1454
- /**
1455
- * Handles keyboard interactions for a focusable element.
1456
- */
1457
- export function useKeyboard(props) {
1458
- return {
1459
- keyboardProps: props.isDisabled ? {} : {
1460
- onKeyDown: $dc0d75166de722fbf58eb6c3552$export$createEventHandler(props.onKeyDown),
1461
- onKeyUp: $dc0d75166de722fbf58eb6c3552$export$createEventHandler(props.onKeyUp)
1462
- }
1463
- };
1464
- }
1465
1061
 
1466
- /**
1467
- * Handles move interactions across mouse, touch, and keyboard, including dragging with
1468
- * the mouse or touch, and using the arrow keys. Normalizes behavior across browsers and
1469
- * platforms, and ignores emulated mouse events on touch devices.
1470
- */
1471
- export function useMove(props) {
1472
- let {
1473
- onMoveStart,
1474
- onMove,
1475
- onMoveEnd
1476
- } = props;
1477
- let state = useRef({
1478
- didMove: false,
1479
- lastPosition: null,
1480
- id: null
1481
- });
1482
- let {
1483
- addGlobalListener,
1484
- removeGlobalListener
1485
- } = useGlobalListeners();
1486
- let moveProps = useMemo(() => {
1487
- let moveProps = {};
1488
-
1489
- let start = () => {
1490
- $e17c9db826984f8ab8e5d837bf0b8$export$disableTextSelection();
1491
- state.current.didMove = false;
1062
+ function $75f78fec52a57cf7$export$36da96379f79f245(props) {
1063
+ let { onMoveStart: onMoveStart , onMove: onMove , onMoveEnd: onMoveEnd } = props;
1064
+ let state = $7R3Av$useRef({
1065
+ didMove: false,
1066
+ lastPosition: null,
1067
+ id: null
1068
+ });
1069
+ let { addGlobalListener: addGlobalListener , removeGlobalListener: removeGlobalListener } = $7R3Av$useGlobalListeners();
1070
+ let moveProps1 = $7R3Av$useMemo(()=>{
1071
+ let moveProps = {
1072
+ };
1073
+ let start = ()=>{
1074
+ $8714dea79b55b9da$export$16a4697467175487();
1075
+ state.current.didMove = false;
1076
+ };
1077
+ let move = (originalEvent, pointerType, deltaX, deltaY)=>{
1078
+ if (deltaX === 0 && deltaY === 0) return;
1079
+ if (!state.current.didMove) {
1080
+ state.current.didMove = true;
1081
+ onMoveStart?.({
1082
+ type: 'movestart',
1083
+ pointerType: pointerType,
1084
+ shiftKey: originalEvent.shiftKey,
1085
+ metaKey: originalEvent.metaKey,
1086
+ ctrlKey: originalEvent.ctrlKey,
1087
+ altKey: originalEvent.altKey
1088
+ });
1089
+ }
1090
+ onMove({
1091
+ type: 'move',
1092
+ pointerType: pointerType,
1093
+ deltaX: deltaX,
1094
+ deltaY: deltaY,
1095
+ shiftKey: originalEvent.shiftKey,
1096
+ metaKey: originalEvent.metaKey,
1097
+ ctrlKey: originalEvent.ctrlKey,
1098
+ altKey: originalEvent.altKey
1099
+ });
1100
+ };
1101
+ let end = (originalEvent, pointerType)=>{
1102
+ $8714dea79b55b9da$export$b0d6fa1ab32e3295();
1103
+ if (state.current.didMove) onMoveEnd?.({
1104
+ type: 'moveend',
1105
+ pointerType: pointerType,
1106
+ shiftKey: originalEvent.shiftKey,
1107
+ metaKey: originalEvent.metaKey,
1108
+ ctrlKey: originalEvent.ctrlKey,
1109
+ altKey: originalEvent.altKey
1110
+ });
1111
+ };
1112
+ if (typeof PointerEvent === 'undefined') {
1113
+ let onMouseMove = (e)=>{
1114
+ if (e.button === 0) {
1115
+ move(e, 'mouse', e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);
1116
+ state.current.lastPosition = {
1117
+ pageX: e.pageX,
1118
+ pageY: e.pageY
1119
+ };
1120
+ }
1121
+ };
1122
+ let onMouseUp = (e)=>{
1123
+ if (e.button === 0) {
1124
+ end(e, 'mouse');
1125
+ removeGlobalListener(window, 'mousemove', onMouseMove, false);
1126
+ removeGlobalListener(window, 'mouseup', onMouseUp, false);
1127
+ }
1128
+ };
1129
+ moveProps.onMouseDown = (e)=>{
1130
+ if (e.button === 0) {
1131
+ start();
1132
+ e.stopPropagation();
1133
+ e.preventDefault();
1134
+ state.current.lastPosition = {
1135
+ pageX: e.pageX,
1136
+ pageY: e.pageY
1137
+ };
1138
+ addGlobalListener(window, 'mousemove', onMouseMove, false);
1139
+ addGlobalListener(window, 'mouseup', onMouseUp, false);
1140
+ }
1141
+ };
1142
+ let onTouchMove = (e)=>{
1143
+ let touch = [
1144
+ ...e.changedTouches
1145
+ ].findIndex(({ identifier: identifier })=>identifier === state.current.id
1146
+ );
1147
+ if (touch >= 0) {
1148
+ let { pageX: pageX , pageY: pageY } = e.changedTouches[touch];
1149
+ move(e, 'touch', pageX - state.current.lastPosition.pageX, pageY - state.current.lastPosition.pageY);
1150
+ state.current.lastPosition = {
1151
+ pageX: pageX,
1152
+ pageY: pageY
1153
+ };
1154
+ }
1155
+ };
1156
+ let onTouchEnd = (e)=>{
1157
+ let touch = [
1158
+ ...e.changedTouches
1159
+ ].findIndex(({ identifier: identifier })=>identifier === state.current.id
1160
+ );
1161
+ if (touch >= 0) {
1162
+ end(e, 'touch');
1163
+ state.current.id = null;
1164
+ removeGlobalListener(window, 'touchmove', onTouchMove);
1165
+ removeGlobalListener(window, 'touchend', onTouchEnd);
1166
+ removeGlobalListener(window, 'touchcancel', onTouchEnd);
1167
+ }
1168
+ };
1169
+ moveProps.onTouchStart = (e)=>{
1170
+ if (e.changedTouches.length === 0 || state.current.id != null) return;
1171
+ let { pageX: pageX , pageY: pageY , identifier: identifier } = e.changedTouches[0];
1172
+ start();
1173
+ e.stopPropagation();
1174
+ e.preventDefault();
1175
+ state.current.lastPosition = {
1176
+ pageX: pageX,
1177
+ pageY: pageY
1178
+ };
1179
+ state.current.id = identifier;
1180
+ addGlobalListener(window, 'touchmove', onTouchMove, false);
1181
+ addGlobalListener(window, 'touchend', onTouchEnd, false);
1182
+ addGlobalListener(window, 'touchcancel', onTouchEnd, false);
1183
+ };
1184
+ } else {
1185
+ let onPointerMove = (e)=>{
1186
+ if (e.pointerId === state.current.id) {
1187
+ let pointerType = e.pointerType || 'mouse';
1188
+ // Problems with PointerEvent#movementX/movementY:
1189
+ // 1. it is always 0 on macOS Safari.
1190
+ // 2. On Chrome Android, it's scaled by devicePixelRatio, but not on Chrome macOS
1191
+ move(e, pointerType, e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);
1192
+ state.current.lastPosition = {
1193
+ pageX: e.pageX,
1194
+ pageY: e.pageY
1195
+ };
1196
+ }
1197
+ };
1198
+ let onPointerUp = (e)=>{
1199
+ if (e.pointerId === state.current.id) {
1200
+ let pointerType = e.pointerType || 'mouse';
1201
+ end(e, pointerType);
1202
+ state.current.id = null;
1203
+ removeGlobalListener(window, 'pointermove', onPointerMove, false);
1204
+ removeGlobalListener(window, 'pointerup', onPointerUp, false);
1205
+ removeGlobalListener(window, 'pointercancel', onPointerUp, false);
1206
+ }
1207
+ };
1208
+ moveProps.onPointerDown = (e)=>{
1209
+ if (e.button === 0 && state.current.id == null) {
1210
+ start();
1211
+ e.stopPropagation();
1212
+ e.preventDefault();
1213
+ state.current.lastPosition = {
1214
+ pageX: e.pageX,
1215
+ pageY: e.pageY
1216
+ };
1217
+ state.current.id = e.pointerId;
1218
+ addGlobalListener(window, 'pointermove', onPointerMove, false);
1219
+ addGlobalListener(window, 'pointerup', onPointerUp, false);
1220
+ addGlobalListener(window, 'pointercancel', onPointerUp, false);
1221
+ }
1222
+ };
1223
+ }
1224
+ let triggerKeyboardMove = (e, deltaX, deltaY)=>{
1225
+ start();
1226
+ move(e, 'keyboard', deltaX, deltaY);
1227
+ end(e, 'keyboard');
1228
+ };
1229
+ moveProps.onKeyDown = (e)=>{
1230
+ switch(e.key){
1231
+ case 'Left':
1232
+ case 'ArrowLeft':
1233
+ e.preventDefault();
1234
+ e.stopPropagation();
1235
+ triggerKeyboardMove(e, -1, 0);
1236
+ break;
1237
+ case 'Right':
1238
+ case 'ArrowRight':
1239
+ e.preventDefault();
1240
+ e.stopPropagation();
1241
+ triggerKeyboardMove(e, 1, 0);
1242
+ break;
1243
+ case 'Up':
1244
+ case 'ArrowUp':
1245
+ e.preventDefault();
1246
+ e.stopPropagation();
1247
+ triggerKeyboardMove(e, 0, -1);
1248
+ break;
1249
+ case 'Down':
1250
+ case 'ArrowDown':
1251
+ e.preventDefault();
1252
+ e.stopPropagation();
1253
+ triggerKeyboardMove(e, 0, 1);
1254
+ break;
1255
+ }
1256
+ };
1257
+ return moveProps;
1258
+ }, [
1259
+ state,
1260
+ onMoveStart,
1261
+ onMove,
1262
+ onMoveEnd,
1263
+ addGlobalListener,
1264
+ removeGlobalListener
1265
+ ]);
1266
+ return {
1267
+ moveProps: moveProps1
1492
1268
  };
1269
+ }
1493
1270
 
1494
- let move = (pointerType, deltaX, deltaY) => {
1495
- if (deltaX === 0 && deltaY === 0) {
1496
- return;
1497
- }
1498
1271
 
1499
- if (!state.current.didMove) {
1500
- state.current.didMove = true;
1501
- onMoveStart == null ? void 0 : onMoveStart({
1502
- type: 'movestart',
1503
- pointerType
1504
- });
1505
- }
1506
-
1507
- onMove({
1508
- type: 'move',
1509
- pointerType,
1510
- deltaX: deltaX,
1511
- deltaY: deltaY
1512
- });
1513
- };
1514
1272
 
1515
- let end = pointerType => {
1516
- $e17c9db826984f8ab8e5d837bf0b8$export$restoreTextSelection();
1273
+ var $d19e70b846cd84a0$exports = {};
1517
1274
 
1518
- if (state.current.didMove) {
1519
- onMoveEnd == null ? void 0 : onMoveEnd({
1520
- type: 'moveend',
1521
- pointerType
1522
- });
1523
- }
1524
- };
1525
-
1526
- if (typeof PointerEvent === 'undefined') {
1527
- let onMouseMove = e => {
1528
- if (e.button === 0) {
1529
- move('mouse', e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);
1530
- state.current.lastPosition = {
1531
- pageX: e.pageX,
1532
- pageY: e.pageY
1533
- };
1534
- }
1535
- };
1275
+ $parcel$export($d19e70b846cd84a0$exports, "useScrollWheel", () => $d19e70b846cd84a0$export$2123ff2b87c81ca);
1536
1276
 
1537
- let onMouseUp = e => {
1538
- if (e.button === 0) {
1539
- end('mouse');
1540
- removeGlobalListener(window, 'mousemove', onMouseMove, false);
1541
- removeGlobalListener(window, 'mouseup', onMouseUp, false);
1542
- }
1543
- };
1544
-
1545
- moveProps.onMouseDown = e => {
1546
- if (e.button === 0) {
1547
- start();
1548
- e.stopPropagation();
1549
- e.preventDefault();
1550
- state.current.lastPosition = {
1551
- pageX: e.pageX,
1552
- pageY: e.pageY
1553
- };
1554
- addGlobalListener(window, 'mousemove', onMouseMove, false);
1555
- addGlobalListener(window, 'mouseup', onMouseUp, false);
1556
- }
1557
- };
1558
-
1559
- let onTouchMove = e => {
1560
- // @ts-ignore
1561
- let touch = [...e.changedTouches].findIndex((_ref) => {
1562
- let {
1563
- identifier
1564
- } = _ref;
1565
- return identifier === state.current.id;
1566
- });
1567
1277
 
1568
- if (touch >= 0) {
1569
- let {
1570
- pageX,
1571
- pageY
1572
- } = e.changedTouches[touch];
1573
- move('touch', pageX - state.current.lastPosition.pageX, pageY - state.current.lastPosition.pageY);
1574
- state.current.lastPosition = {
1575
- pageX,
1576
- pageY
1577
- };
1578
- }
1579
- };
1580
-
1581
- let onTouchEnd = e => {
1582
- // @ts-ignore
1583
- let touch = [...e.changedTouches].findIndex((_ref2) => {
1584
- let {
1585
- identifier
1586
- } = _ref2;
1587
- return identifier === state.current.id;
1278
+ function $d19e70b846cd84a0$export$2123ff2b87c81ca(props, ref) {
1279
+ let { onScroll: onScroll , isDisabled: isDisabled } = props;
1280
+ let onScrollHandler = $7R3Av$useCallback((e)=>{
1281
+ // If the ctrlKey is pressed, this is a zoom event, do nothing.
1282
+ if (e.ctrlKey) return;
1283
+ // stop scrolling the page
1284
+ e.preventDefault();
1285
+ e.stopPropagation();
1286
+ if (onScroll) onScroll({
1287
+ deltaX: e.deltaX,
1288
+ deltaY: e.deltaY
1588
1289
  });
1290
+ }, [
1291
+ onScroll
1292
+ ]);
1293
+ $7R3Av$useEvent(ref, 'wheel', isDisabled ? null : onScrollHandler);
1294
+ }
1589
1295
 
1590
- if (touch >= 0) {
1591
- end('touch');
1592
- state.current.id = null;
1593
- removeGlobalListener(window, 'touchmove', onTouchMove);
1594
- removeGlobalListener(window, 'touchend', onTouchEnd);
1595
- removeGlobalListener(window, 'touchcancel', onTouchEnd);
1596
- }
1597
- };
1598
-
1599
- moveProps.onTouchStart = e => {
1600
- if (e.changedTouches.length === 0 || state.current.id != null) {
1601
- return;
1602
- }
1603
1296
 
1604
- let {
1605
- pageX,
1606
- pageY,
1607
- identifier
1608
- } = e.changedTouches[0];
1609
- start();
1610
- e.stopPropagation();
1611
- e.preventDefault();
1612
- state.current.lastPosition = {
1613
- pageX,
1614
- pageY
1615
- };
1616
- state.current.id = identifier;
1617
- addGlobalListener(window, 'touchmove', onTouchMove, false);
1618
- addGlobalListener(window, 'touchend', onTouchEnd, false);
1619
- addGlobalListener(window, 'touchcancel', onTouchEnd, false);
1620
- };
1621
- } else {
1622
- let onPointerMove = e => {
1623
- if (e.pointerId === state.current.id) {
1624
- // @ts-ignore
1625
- let pointerType = e.pointerType || 'mouse'; // Problems with PointerEvent#movementX/movementY:
1626
- // 1. it is always 0 on macOS Safari.
1627
- // 2. On Chrome Android, it's scaled by devicePixelRatio, but not on Chrome macOS
1628
-
1629
- move(pointerType, e.pageX - state.current.lastPosition.pageX, e.pageY - state.current.lastPosition.pageY);
1630
- state.current.lastPosition = {
1631
- pageX: e.pageX,
1632
- pageY: e.pageY
1633
- };
1634
- }
1635
- };
1636
-
1637
- let onPointerUp = e => {
1638
- if (e.pointerId === state.current.id) {
1639
- // @ts-ignore
1640
- let pointerType = e.pointerType || 'mouse';
1641
- end(pointerType);
1642
- state.current.id = null;
1643
- removeGlobalListener(window, 'pointermove', onPointerMove, false);
1644
- removeGlobalListener(window, 'pointerup', onPointerUp, false);
1645
- removeGlobalListener(window, 'pointercancel', onPointerUp, false);
1646
- }
1647
- };
1648
-
1649
- moveProps.onPointerDown = e => {
1650
- if (e.button === 0 && state.current.id == null) {
1651
- start();
1652
- e.stopPropagation();
1653
- e.preventDefault();
1654
- state.current.lastPosition = {
1655
- pageX: e.pageX,
1656
- pageY: e.pageY
1657
- };
1658
- state.current.id = e.pointerId;
1659
- addGlobalListener(window, 'pointermove', onPointerMove, false);
1660
- addGlobalListener(window, 'pointerup', onPointerUp, false);
1661
- addGlobalListener(window, 'pointercancel', onPointerUp, false);
1297
+ var $ea9746f03755d5ba$exports = {};
1298
+
1299
+ $parcel$export($ea9746f03755d5ba$exports, "useLongPress", () => $ea9746f03755d5ba$export$c24ed0104d07eab9);
1300
+
1301
+
1302
+
1303
+ const $ea9746f03755d5ba$var$DEFAULT_THRESHOLD = 500;
1304
+ function $ea9746f03755d5ba$export$c24ed0104d07eab9(props) {
1305
+ let { isDisabled: isDisabled , onLongPressStart: onLongPressStart , onLongPressEnd: onLongPressEnd , onLongPress: onLongPress , threshold: threshold = $ea9746f03755d5ba$var$DEFAULT_THRESHOLD , accessibilityDescription: accessibilityDescription } = props;
1306
+ const timeRef = $7R3Av$useRef(null);
1307
+ let { addGlobalListener: addGlobalListener , removeGlobalListener: removeGlobalListener } = $7R3Av$useGlobalListeners();
1308
+ let { pressProps: pressProps } = $bb70d401e0bbab2b$export$45712eceda6fad21({
1309
+ isDisabled: isDisabled,
1310
+ onPressStart (e1) {
1311
+ if (e1.pointerType === 'mouse' || e1.pointerType === 'touch') {
1312
+ if (onLongPressStart) onLongPressStart({
1313
+ ...e1,
1314
+ type: 'longpressstart'
1315
+ });
1316
+ timeRef.current = setTimeout(()=>{
1317
+ // Prevent other usePress handlers from also handling this event.
1318
+ e1.target.dispatchEvent(new PointerEvent('pointercancel', {
1319
+ bubbles: true
1320
+ }));
1321
+ if (onLongPress) onLongPress({
1322
+ ...e1,
1323
+ type: 'longpress'
1324
+ });
1325
+ timeRef.current = null;
1326
+ }, threshold);
1327
+ // Prevent context menu, which may be opened on long press on touch devices
1328
+ if (e1.pointerType === 'touch') {
1329
+ let onContextMenu = (e)=>{
1330
+ e.preventDefault();
1331
+ };
1332
+ addGlobalListener(e1.target, 'contextmenu', onContextMenu, {
1333
+ once: true
1334
+ });
1335
+ addGlobalListener(window, 'pointerup', ()=>{
1336
+ // If no contextmenu event is fired quickly after pointerup, remove the handler
1337
+ // so future context menu events outside a long press are not prevented.
1338
+ setTimeout(()=>{
1339
+ removeGlobalListener(e1.target, 'contextmenu', onContextMenu);
1340
+ }, 30);
1341
+ }, {
1342
+ once: true
1343
+ });
1344
+ }
1345
+ }
1346
+ },
1347
+ onPressEnd (e) {
1348
+ if (timeRef.current) clearTimeout(timeRef.current);
1349
+ if (onLongPressEnd && (e.pointerType === 'mouse' || e.pointerType === 'touch')) onLongPressEnd({
1350
+ ...e,
1351
+ type: 'longpressend'
1352
+ });
1662
1353
  }
1663
- };
1664
- }
1665
-
1666
- let triggerKeyboardMove = (deltaX, deltaY) => {
1667
- start();
1668
- move('keyboard', deltaX, deltaY);
1669
- end('keyboard');
1354
+ });
1355
+ let descriptionProps = $7R3Av$useDescription(onLongPress && !isDisabled ? accessibilityDescription : null);
1356
+ return {
1357
+ longPressProps: $7R3Av$mergeProps(pressProps, descriptionProps)
1670
1358
  };
1359
+ }
1671
1360
 
1672
- moveProps.onKeyDown = e => {
1673
- switch (e.key) {
1674
- case 'Left':
1675
- case 'ArrowLeft':
1676
- e.preventDefault();
1677
- e.stopPropagation();
1678
- triggerKeyboardMove(-1, 0);
1679
- break;
1680
-
1681
- case 'Right':
1682
- case 'ArrowRight':
1683
- e.preventDefault();
1684
- e.stopPropagation();
1685
- triggerKeyboardMove(1, 0);
1686
- break;
1687
-
1688
- case 'Up':
1689
- case 'ArrowUp':
1690
- e.preventDefault();
1691
- e.stopPropagation();
1692
- triggerKeyboardMove(0, -1);
1693
- break;
1694
-
1695
- case 'Down':
1696
- case 'ArrowDown':
1697
- e.preventDefault();
1698
- e.stopPropagation();
1699
- triggerKeyboardMove(0, 1);
1700
- break;
1701
- }
1702
- };
1703
1361
 
1704
- return moveProps;
1705
- }, [state, onMoveStart, onMove, onMoveEnd, addGlobalListener, removeGlobalListener]);
1706
- return {
1707
- moveProps
1708
- };
1709
- }
1710
- // scroll wheel needs to be added not passively so it's cancelable, small helper hook to remember that
1711
- export function useScrollWheel(props, ref) {
1712
- let {
1713
- onScroll,
1714
- isDisabled
1715
- } = props;
1716
- let onScrollHandler = useCallback(e => {
1717
- // If the ctrlKey is pressed, this is a zoom event, do nothing.
1718
- if (e.ctrlKey) {
1719
- return;
1720
- } // stop scrolling the page
1721
-
1722
-
1723
- e.preventDefault();
1724
- e.stopPropagation();
1725
-
1726
- if (onScroll) {
1727
- onScroll({
1728
- deltaX: e.deltaX,
1729
- deltaY: e.deltaY
1730
- });
1731
- }
1732
- }, [onScroll]);
1733
- useEffect(() => {
1734
- let elem = ref.current;
1735
1362
 
1736
- if (isDisabled) {
1737
- return;
1738
- }
1739
1363
 
1740
- elem.addEventListener('wheel', onScrollHandler);
1741
- return () => {
1742
- elem.removeEventListener('wheel', onScrollHandler);
1743
- };
1744
- }, [onScrollHandler, ref, isDisabled]);
1745
- }
1364
+ export {$acf5f8872229f2cb$export$27c701ed9e449e99 as Pressable, $36b2a54c41893e87$export$3351871ee4b288b8 as PressResponder, $96cd623b8d5dd15d$export$f8168d8dd8fd66e6 as useFocus, $d2dd66cff767efeb$export$b9b3dfddab17db27 as isFocusVisible, $d2dd66cff767efeb$export$630ff653c5ada6a9 as getInteractionModality, $d2dd66cff767efeb$export$8397ddfc504fdb9a as setInteractionModality, $d2dd66cff767efeb$export$98e20ec92f614cfe as useInteractionModality, $d2dd66cff767efeb$export$ffd9e5021c1fb2d6 as useFocusVisible, $d2dd66cff767efeb$export$ec71b4b83ac08ec3 as useFocusVisibleListener, $d2acb2e6011484f7$export$420e68273165f4ec as useFocusWithin, $52a70f66afabebbb$export$ae780daf29e6d456 as useHover, $ba9bc027ba236f10$export$872b660ac5a1ff98 as useInteractOutside, $a866ba1020241f41$export$8f71654801c2f7cd as useKeyboard, $75f78fec52a57cf7$export$36da96379f79f245 as useMove, $bb70d401e0bbab2b$export$45712eceda6fad21 as usePress, $d19e70b846cd84a0$export$2123ff2b87c81ca as useScrollWheel, $ea9746f03755d5ba$export$c24ed0104d07eab9 as useLongPress};
1746
1365
  //# sourceMappingURL=module.js.map