UNPKG

32.4 kBJavaScriptView Raw
1import {clamp as $4507461a1b870123$re_export$clamp, snapValueToStep as $4507461a1b870123$re_export$snapValueToStep} from "@react-stately/utils";
2import $12uGp$react, {useState as $12uGp$useState, useRef as $12uGp$useRef, useCallback as $12uGp$useCallback, useEffect as $12uGp$useEffect} from "react";
3import {useSSRSafeId as $12uGp$useSSRSafeId} from "@react-aria/ssr";
4import $12uGp$clsx from "clsx";
5
6
7
8const $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof window !== 'undefined' ? $12uGp$react.useLayoutEffect : ()=>{
9};
10
11
12
13
14let $bdb11010cef70236$var$idsUpdaterMap = new Map();
15function $bdb11010cef70236$export$f680877a34711e37(defaultId) {
16 let [value, setValue] = $12uGp$useState(defaultId);
17 let nextId = $12uGp$useRef(null);
18 let res = $12uGp$useSSRSafeId(value);
19 let updateValue = $12uGp$useCallback((val)=>{
20 nextId.current = val;
21 }, []);
22 $bdb11010cef70236$var$idsUpdaterMap.set(res, updateValue);
23 $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(()=>{
24 let r = res;
25 return ()=>{
26 $bdb11010cef70236$var$idsUpdaterMap.delete(r);
27 };
28 }, [
29 res
30 ]);
31 // This cannot cause an infinite loop because the ref is updated first.
32 // eslint-disable-next-line
33 $12uGp$useEffect(()=>{
34 let newId = nextId.current;
35 if (newId) {
36 nextId.current = null;
37 setValue(newId);
38 }
39 });
40 return res;
41}
42function $bdb11010cef70236$export$cd8c9cb68f842629(idA, idB) {
43 if (idA === idB) return idA;
44 let setIdA = $bdb11010cef70236$var$idsUpdaterMap.get(idA);
45 if (setIdA) {
46 setIdA(idB);
47 return idB;
48 }
49 let setIdB = $bdb11010cef70236$var$idsUpdaterMap.get(idB);
50 if (setIdB) {
51 setIdB(idA);
52 return idA;
53 }
54 return idB;
55}
56function $bdb11010cef70236$export$b4cc09c592e8fdb8(depArray = []) {
57 let id = $bdb11010cef70236$export$f680877a34711e37();
58 let [resolvedId, setResolvedId] = $1dbecbe27a04f9af$export$14d238f342723f25(id);
59 let updateId = $12uGp$useCallback(()=>{
60 setResolvedId(function*() {
61 yield id;
62 yield document.getElementById(id) ? id : null;
63 });
64 }, [
65 id,
66 setResolvedId
67 ]);
68 $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(updateId, [
69 id,
70 updateId,
71 ...depArray
72 ]);
73 return resolvedId;
74}
75
76
77function $ff5963eb1fccf552$export$e08e3b67e392101e(...callbacks) {
78 return (...args)=>{
79 for (let callback of callbacks)if (typeof callback === 'function') callback(...args);
80 };
81}
82
83
84
85
86
87function $3ef42575df84b30b$export$9d1611c77c2fe928(...args) {
88 // Start with a base clone of the first argument. This is a lot faster than starting
89 // with an empty object and adding properties as we go.
90 let result = {
91 ...args[0]
92 };
93 for(let i = 1; i < args.length; i++){
94 let props = args[i];
95 for(let key in props){
96 let a = result[key];
97 let b = props[key];
98 // Chain events
99 if (typeof a === 'function' && typeof b === 'function' && // This is a lot faster than a regex.
100 key[0] === 'o' && key[1] === 'n' && key.charCodeAt(2) >= /* 'A' */ 65 && key.charCodeAt(2) <= /* 'Z' */ 90) result[key] = $ff5963eb1fccf552$export$e08e3b67e392101e(a, b);
101 else if ((key === 'className' || key === 'UNSAFE_className') && typeof a === 'string' && typeof b === 'string') result[key] = $12uGp$clsx(a, b);
102 else if (key === 'id' && a && b) result.id = $bdb11010cef70236$export$cd8c9cb68f842629(a, b);
103 else result[key] = b !== undefined ? b : a;
104 }
105 }
106 return result;
107}
108
109
110function $5dc95899b306f630$export$c9058316764c140e(...refs) {
111 return (value)=>{
112 for (let ref of refs){
113 if (typeof ref === 'function') ref(value);
114 else if (ref != null) ref.current = value;
115 }
116 };
117}
118
119
120const $65484d02dcb7eb3e$var$DOMPropNames = new Set([
121 'id'
122]);
123const $65484d02dcb7eb3e$var$labelablePropNames = new Set([
124 'aria-label',
125 'aria-labelledby',
126 'aria-describedby',
127 'aria-details'
128]);
129const $65484d02dcb7eb3e$var$propRe = /^(data-.*)$/;
130function $65484d02dcb7eb3e$export$457c3d6518dd4c6f(props, opts = {
131}) {
132 let { labelable: labelable , propNames: propNames } = opts;
133 let filteredProps = {
134 };
135 for(const prop in props)if (Object.prototype.hasOwnProperty.call(props, prop) && ($65484d02dcb7eb3e$var$DOMPropNames.has(prop) || labelable && $65484d02dcb7eb3e$var$labelablePropNames.has(prop) || (propNames === null || propNames === void 0 ? void 0 : propNames.has(prop)) || $65484d02dcb7eb3e$var$propRe.test(prop))) filteredProps[prop] = props[prop];
136 return filteredProps;
137}
138
139
140function $7215afc6de606d6b$export$de79e2c695e052f3(element) {
141 if ($7215afc6de606d6b$var$supportsPreventScroll()) element.focus({
142 preventScroll: true
143 });
144 else {
145 let scrollableElements = $7215afc6de606d6b$var$getScrollableElements(element);
146 element.focus();
147 $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements);
148 }
149}
150let $7215afc6de606d6b$var$supportsPreventScrollCached = null;
151function $7215afc6de606d6b$var$supportsPreventScroll() {
152 if ($7215afc6de606d6b$var$supportsPreventScrollCached == null) {
153 $7215afc6de606d6b$var$supportsPreventScrollCached = false;
154 try {
155 var focusElem = document.createElement('div');
156 focusElem.focus({
157 get preventScroll () {
158 $7215afc6de606d6b$var$supportsPreventScrollCached = true;
159 return true;
160 }
161 });
162 } catch (e) {
163 // Ignore
164 }
165 }
166 return $7215afc6de606d6b$var$supportsPreventScrollCached;
167}
168function $7215afc6de606d6b$var$getScrollableElements(element) {
169 var parent = element.parentNode;
170 var scrollableElements = [];
171 var rootScrollingElement = document.scrollingElement || document.documentElement;
172 while(parent instanceof HTMLElement && parent !== rootScrollingElement){
173 if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) scrollableElements.push({
174 element: parent,
175 scrollTop: parent.scrollTop,
176 scrollLeft: parent.scrollLeft
177 });
178 parent = parent.parentNode;
179 }
180 if (rootScrollingElement instanceof HTMLElement) scrollableElements.push({
181 element: rootScrollingElement,
182 scrollTop: rootScrollingElement.scrollTop,
183 scrollLeft: rootScrollingElement.scrollLeft
184 });
185 return scrollableElements;
186}
187function $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements) {
188 for (let { element: element , scrollTop: scrollTop , scrollLeft: scrollLeft } of scrollableElements){
189 element.scrollTop = scrollTop;
190 element.scrollLeft = scrollLeft;
191 }
192}
193
194
195function $ab71dadb03a6fb2e$export$622cea445a1c5b7d(element, reverse, orientation = 'horizontal') {
196 let rect = element.getBoundingClientRect();
197 if (reverse) return orientation === 'horizontal' ? rect.right : rect.bottom;
198 return orientation === 'horizontal' ? rect.left : rect.top;
199}
200
201
202/*
203 * Copyright 2020 Adobe. All rights reserved.
204 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
205 * you may not use this file except in compliance with the License. You may obtain a copy
206 * of the License at http://www.apache.org/licenses/LICENSE-2.0
207 *
208 * Unless required by applicable law or agreed to in writing, software distributed under
209 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
210 * OF ANY KIND, either express or implied. See the License for the specific language
211 * governing permissions and limitations under the License.
212 */ // We store a global list of elements that are currently transitioning,
213// mapped to a set of CSS properties that are transitioning for that element.
214// This is necessary rather than a simple count of transitions because of browser
215// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather
216// than one or the other. So we need to track what's actually transitioning so that
217// we can ignore these duplicate events.
218let $bbed8b41f857bcc0$var$transitionsByElement = new Map();
219// A list of callbacks to call once there are no transitioning elements.
220let $bbed8b41f857bcc0$var$transitionCallbacks = new Set();
221function $bbed8b41f857bcc0$var$setupGlobalEvents() {
222 if (typeof window === 'undefined') return;
223 let onTransitionStart = (e)=>{
224 // Add the transitioning property to the list for this element.
225 let transitions = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);
226 if (!transitions) {
227 transitions = new Set();
228 $bbed8b41f857bcc0$var$transitionsByElement.set(e.target, transitions);
229 // The transitioncancel event must be registered on the element itself, rather than as a global
230 // event. This enables us to handle when the node is deleted from the document while it is transitioning.
231 // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.
232 e.target.addEventListener('transitioncancel', onTransitionEnd);
233 }
234 transitions.add(e.propertyName);
235 };
236 let onTransitionEnd = (e)=>{
237 // Remove property from list of transitioning properties.
238 let properties = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);
239 if (!properties) return;
240 properties.delete(e.propertyName);
241 // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.
242 if (properties.size === 0) {
243 e.target.removeEventListener('transitioncancel', onTransitionEnd);
244 $bbed8b41f857bcc0$var$transitionsByElement.delete(e.target);
245 }
246 // If no transitioning elements, call all of the queued callbacks.
247 if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) {
248 for (let cb of $bbed8b41f857bcc0$var$transitionCallbacks)cb();
249 $bbed8b41f857bcc0$var$transitionCallbacks.clear();
250 }
251 };
252 document.body.addEventListener('transitionrun', onTransitionStart);
253 document.body.addEventListener('transitionend', onTransitionEnd);
254}
255if (typeof document !== 'undefined') {
256 if (document.readyState !== 'loading') $bbed8b41f857bcc0$var$setupGlobalEvents();
257 else document.addEventListener('DOMContentLoaded', $bbed8b41f857bcc0$var$setupGlobalEvents);
258}
259function $bbed8b41f857bcc0$export$24490316f764c430(fn) {
260 // Wait one frame to see if an animation starts, e.g. a transition on mount.
261 requestAnimationFrame(()=>{
262 // If no transitions are running, call the function immediately.
263 // Otherwise, add it to a list of callbacks to run at the end of the animation.
264 if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) fn();
265 else $bbed8b41f857bcc0$var$transitionCallbacks.add(fn);
266 });
267}
268
269
270
271
272// Keep track of elements that we are currently handling dragging for via useDrag1D.
273// If there's an ancestor and a descendant both using useDrag1D(), and the user starts
274// dragging the descendant, we don't want useDrag1D events to fire for the ancestor.
275const $9cc09df9fd7676be$var$draggingElements = [];
276function $9cc09df9fd7676be$export$7bbed75feba39706(props) {
277 console.warn('useDrag1D is deprecated, please use `useMove` instead https://react-spectrum.adobe.com/react-aria/useMove.html');
278 let { containerRef: containerRef , reverse: reverse , orientation: orientation , onHover: onHover , onDrag: onDrag , onPositionChange: onPositionChange , onIncrement: onIncrement , onDecrement: onDecrement , onIncrementToMax: onIncrementToMax , onDecrementToMin: onDecrementToMin , onCollapseToggle: onCollapseToggle } = props;
279 let getPosition = (e)=>orientation === 'horizontal' ? e.clientX : e.clientY
280 ;
281 let getNextOffset = (e)=>{
282 let containerOffset = $ab71dadb03a6fb2e$export$622cea445a1c5b7d(containerRef.current, reverse, orientation);
283 let mouseOffset = getPosition(e);
284 let nextOffset = reverse ? containerOffset - mouseOffset : mouseOffset - containerOffset;
285 return nextOffset;
286 };
287 let dragging = $12uGp$useRef(false);
288 let prevPosition = $12uGp$useRef(0);
289 // Keep track of the current handlers in a ref so that the events can access them.
290 let handlers = $12uGp$useRef({
291 onPositionChange: onPositionChange,
292 onDrag: onDrag
293 });
294 handlers.current.onDrag = onDrag;
295 handlers.current.onPositionChange = onPositionChange;
296 let onMouseDragged = (e)=>{
297 e.preventDefault();
298 let nextOffset = getNextOffset(e);
299 if (!dragging.current) {
300 dragging.current = true;
301 if (handlers.current.onDrag) handlers.current.onDrag(true);
302 if (handlers.current.onPositionChange) handlers.current.onPositionChange(nextOffset);
303 }
304 if (prevPosition.current === nextOffset) return;
305 prevPosition.current = nextOffset;
306 if (onPositionChange) onPositionChange(nextOffset);
307 };
308 let onMouseUp = (e)=>{
309 const target = e.target;
310 dragging.current = false;
311 let nextOffset = getNextOffset(e);
312 if (handlers.current.onDrag) handlers.current.onDrag(false);
313 if (handlers.current.onPositionChange) handlers.current.onPositionChange(nextOffset);
314 $9cc09df9fd7676be$var$draggingElements.splice($9cc09df9fd7676be$var$draggingElements.indexOf(target), 1);
315 window.removeEventListener('mouseup', onMouseUp, false);
316 window.removeEventListener('mousemove', onMouseDragged, false);
317 };
318 let onMouseDown = (e)=>{
319 const target = e.currentTarget;
320 // If we're already handling dragging on a descendant with useDrag1D, then
321 // we don't want to handle the drag motion on this target as well.
322 if ($9cc09df9fd7676be$var$draggingElements.some((elt)=>target.contains(elt)
323 )) return;
324 $9cc09df9fd7676be$var$draggingElements.push(target);
325 window.addEventListener('mousemove', onMouseDragged, false);
326 window.addEventListener('mouseup', onMouseUp, false);
327 };
328 let onMouseEnter = ()=>{
329 if (onHover) onHover(true);
330 };
331 let onMouseOut = ()=>{
332 if (onHover) onHover(false);
333 };
334 let onKeyDown = (e)=>{
335 switch(e.key){
336 case 'Left':
337 case 'ArrowLeft':
338 if (orientation === 'horizontal') {
339 e.preventDefault();
340 if (onDecrement && !reverse) onDecrement();
341 else if (onIncrement && reverse) onIncrement();
342 }
343 break;
344 case 'Up':
345 case 'ArrowUp':
346 if (orientation === 'vertical') {
347 e.preventDefault();
348 if (onDecrement && !reverse) onDecrement();
349 else if (onIncrement && reverse) onIncrement();
350 }
351 break;
352 case 'Right':
353 case 'ArrowRight':
354 if (orientation === 'horizontal') {
355 e.preventDefault();
356 if (onIncrement && !reverse) onIncrement();
357 else if (onDecrement && reverse) onDecrement();
358 }
359 break;
360 case 'Down':
361 case 'ArrowDown':
362 if (orientation === 'vertical') {
363 e.preventDefault();
364 if (onIncrement && !reverse) onIncrement();
365 else if (onDecrement && reverse) onDecrement();
366 }
367 break;
368 case 'Home':
369 e.preventDefault();
370 if (onDecrementToMin) onDecrementToMin();
371 break;
372 case 'End':
373 e.preventDefault();
374 if (onIncrementToMax) onIncrementToMax();
375 break;
376 case 'Enter':
377 e.preventDefault();
378 if (onCollapseToggle) onCollapseToggle();
379 break;
380 }
381 };
382 return {
383 onMouseDown: onMouseDown,
384 onMouseEnter: onMouseEnter,
385 onMouseOut: onMouseOut,
386 onKeyDown: onKeyDown
387 };
388}
389
390
391
392function $03deb23ff14920c4$export$4eaf04e54aa8eed6() {
393 let globalListeners = $12uGp$useRef(new Map());
394 let addGlobalListener = $12uGp$useCallback((eventTarget, type, listener, options)=>{
395 // Make sure we remove the listener after it is called with the `once` option.
396 let fn = (options === null || options === void 0 ? void 0 : options.once) ? (...args)=>{
397 globalListeners.current.delete(listener);
398 listener(...args);
399 } : listener;
400 globalListeners.current.set(listener, {
401 type: type,
402 eventTarget: eventTarget,
403 fn: fn,
404 options: options
405 });
406 eventTarget.addEventListener(type, listener, options);
407 }, []);
408 let removeGlobalListener = $12uGp$useCallback((eventTarget, type, listener, options)=>{
409 var ref;
410 let fn = ((ref = globalListeners.current.get(listener)) === null || ref === void 0 ? void 0 : ref.fn) || listener;
411 eventTarget.removeEventListener(type, fn, options);
412 globalListeners.current.delete(listener);
413 }, []);
414 let removeAllGlobalListeners = $12uGp$useCallback(()=>{
415 globalListeners.current.forEach((value, key)=>{
416 removeGlobalListener(value.eventTarget, value.type, key, value.options);
417 });
418 }, [
419 removeGlobalListener
420 ]);
421 // eslint-disable-next-line arrow-body-style
422 $12uGp$useEffect(()=>{
423 return removeAllGlobalListeners;
424 }, [
425 removeAllGlobalListeners
426 ]);
427 return {
428 addGlobalListener: addGlobalListener,
429 removeGlobalListener: removeGlobalListener,
430 removeAllGlobalListeners: removeAllGlobalListeners
431 };
432}
433
434
435
436function $313b98861ee5dd6c$export$d6875122194c7b44(props, defaultLabel) {
437 let { id: id , 'aria-label': label , 'aria-labelledby': labelledBy } = props;
438 // If there is both an aria-label and aria-labelledby,
439 // combine them by pointing to the element itself.
440 id = $bdb11010cef70236$export$f680877a34711e37(id);
441 if (labelledBy && label) {
442 let ids = new Set([
443 ...labelledBy.trim().split(/\s+/),
444 id
445 ]);
446 labelledBy = [
447 ...ids
448 ].join(' ');
449 } else if (labelledBy) labelledBy = labelledBy.trim().split(/\s+/).join(' ');
450 // If no labels are provided, use the default
451 if (!label && !labelledBy && defaultLabel) label = defaultLabel;
452 return {
453 id: id,
454 'aria-label': label,
455 'aria-labelledby': labelledBy
456 };
457}
458
459
460
461
462function $df56164dff5785e2$export$4338b53315abf666(forwardedRef) {
463 const objRef = $12uGp$useRef();
464 /**
465 * We're using `useLayoutEffect` here instead of `useEffect` because we want
466 * to make sure that the `ref` value is up to date before other places in the
467 * the execution cycle try to read it.
468 */ $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(()=>{
469 if (!forwardedRef) return;
470 if (typeof forwardedRef === 'function') forwardedRef(objRef.current);
471 else forwardedRef.current = objRef.current;
472 }, [
473 forwardedRef
474 ]);
475 return objRef;
476}
477
478
479
480function $4f58c5f72bcf79f7$export$496315a1608d9602(effect, dependencies) {
481 const isInitialMount = $12uGp$useRef(true);
482 $12uGp$useEffect(()=>{
483 if (isInitialMount.current) isInitialMount.current = false;
484 else effect();
485 // eslint-disable-next-line react-hooks/exhaustive-deps
486 }, dependencies);
487}
488
489
490
491
492function $9daab02d461809db$var$hasResizeObserver() {
493 return typeof window.ResizeObserver !== 'undefined';
494}
495function $9daab02d461809db$export$683480f191c0e3ea(options) {
496 const { ref: ref , onResize: onResize } = options;
497 $12uGp$useEffect(()=>{
498 let element = ref === null || ref === void 0 ? void 0 : ref.current;
499 if (!element) return;
500 if (!$9daab02d461809db$var$hasResizeObserver()) {
501 window.addEventListener('resize', onResize, false);
502 return ()=>{
503 window.removeEventListener('resize', onResize, false);
504 };
505 } else {
506 const resizeObserverInstance = new window.ResizeObserver((entries)=>{
507 if (!entries.length) return;
508 onResize();
509 });
510 resizeObserverInstance.observe(element);
511 return ()=>{
512 if (element) resizeObserverInstance.unobserve(element);
513 };
514 }
515 }, [
516 onResize,
517 ref
518 ]);
519}
520
521
522
523function $e7801be82b4b2a53$export$4debdb1a3f0fa79e(context, ref) {
524 $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(()=>{
525 if (context && context.ref && ref) {
526 context.ref.current = ref.current;
527 return ()=>{
528 context.ref.current = null;
529 };
530 }
531 }, [
532 context,
533 ref
534 ]);
535}
536
537
538function $62d8ded9296f3872$export$cfa2225e87938781(node) {
539 while(node && !$62d8ded9296f3872$var$isScrollable(node))node = node.parentElement;
540 return node || document.scrollingElement || document.documentElement;
541}
542function $62d8ded9296f3872$var$isScrollable(node) {
543 let style = window.getComputedStyle(node);
544 return /(auto|scroll)/.test(style.overflow + style.overflowX + style.overflowY);
545}
546
547
548
549// @ts-ignore
550let $5df64b3807dc15ee$var$visualViewport = typeof window !== 'undefined' && window.visualViewport;
551function $5df64b3807dc15ee$export$d699905dd57c73ca() {
552 let [size1, setSize] = $12uGp$useState(()=>$5df64b3807dc15ee$var$getViewportSize()
553 );
554 $12uGp$useEffect(()=>{
555 // Use visualViewport api to track available height even on iOS virtual keyboard opening
556 let onResize = ()=>{
557 setSize((size)=>{
558 let newSize = $5df64b3807dc15ee$var$getViewportSize();
559 if (newSize.width === size.width && newSize.height === size.height) return size;
560 return newSize;
561 });
562 };
563 if (!$5df64b3807dc15ee$var$visualViewport) window.addEventListener('resize', onResize);
564 else $5df64b3807dc15ee$var$visualViewport.addEventListener('resize', onResize);
565 return ()=>{
566 if (!$5df64b3807dc15ee$var$visualViewport) window.removeEventListener('resize', onResize);
567 else $5df64b3807dc15ee$var$visualViewport.removeEventListener('resize', onResize);
568 };
569 }, []);
570 return size1;
571}
572function $5df64b3807dc15ee$var$getViewportSize() {
573 return {
574 width: ($5df64b3807dc15ee$var$visualViewport === null || $5df64b3807dc15ee$var$visualViewport === void 0 ? void 0 : $5df64b3807dc15ee$var$visualViewport.width) || window.innerWidth,
575 height: ($5df64b3807dc15ee$var$visualViewport === null || $5df64b3807dc15ee$var$visualViewport === void 0 ? void 0 : $5df64b3807dc15ee$var$visualViewport.height) || window.innerHeight
576 };
577}
578
579
580
581
582let $ef06256079686ba0$var$descriptionId = 0;
583const $ef06256079686ba0$var$descriptionNodes = new Map();
584function $ef06256079686ba0$export$f8aeda7b10753fa1(description) {
585 let [id1, setId] = $12uGp$useState(null);
586 $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(()=>{
587 if (!description) return;
588 let desc = $ef06256079686ba0$var$descriptionNodes.get(description);
589 if (!desc) {
590 let id = `react-aria-description-${$ef06256079686ba0$var$descriptionId++}`;
591 setId(id);
592 let node = document.createElement('div');
593 node.id = id;
594 node.style.display = 'none';
595 node.textContent = description;
596 document.body.appendChild(node);
597 desc = {
598 refCount: 0,
599 element: node
600 };
601 $ef06256079686ba0$var$descriptionNodes.set(description, desc);
602 } else setId(desc.element.id);
603 desc.refCount++;
604 return ()=>{
605 if (--desc.refCount === 0) {
606 desc.element.remove();
607 $ef06256079686ba0$var$descriptionNodes.delete(description);
608 }
609 };
610 }, [
611 description
612 ]);
613 return {
614 'aria-describedby': description ? id1 : undefined
615 };
616}
617
618
619/*
620 * Copyright 2020 Adobe. All rights reserved.
621 * This file is licensed to you under the Apache License, Version 2.0 (the "License");
622 * you may not use this file except in compliance with the License. You may obtain a copy
623 * of the License at http://www.apache.org/licenses/LICENSE-2.0
624 *
625 * Unless required by applicable law or agreed to in writing, software distributed under
626 * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
627 * OF ANY KIND, either express or implied. See the License for the specific language
628 * governing permissions and limitations under the License.
629 */ function $c87311424ea30a05$var$testUserAgent(re) {
630 var ref;
631 if (typeof window === 'undefined' || window.navigator == null) return false;
632 return ((ref = window.navigator['userAgentData']) === null || ref === void 0 ? void 0 : ref.brands.some((brand)=>re.test(brand.brand)
633 )) || re.test(window.navigator.userAgent);
634}
635function $c87311424ea30a05$var$testPlatform(re) {
636 var ref;
637 return typeof window !== 'undefined' && window.navigator != null ? re.test(((ref = window.navigator['userAgentData']) === null || ref === void 0 ? void 0 : ref.platform) || window.navigator.platform) : false;
638}
639function $c87311424ea30a05$export$9ac100e40613ea10() {
640 return $c87311424ea30a05$var$testPlatform(/^Mac/i);
641}
642function $c87311424ea30a05$export$186c6964ca17d99() {
643 return $c87311424ea30a05$var$testPlatform(/^iPhone/i);
644}
645function $c87311424ea30a05$export$7bef049ce92e4224() {
646 return $c87311424ea30a05$var$testPlatform(/^iPad/i) || $c87311424ea30a05$export$9ac100e40613ea10() && navigator.maxTouchPoints > 1;
647}
648function $c87311424ea30a05$export$fedb369cb70207f1() {
649 return $c87311424ea30a05$export$186c6964ca17d99() || $c87311424ea30a05$export$7bef049ce92e4224();
650}
651function $c87311424ea30a05$export$e1865c3bedcd822b() {
652 return $c87311424ea30a05$export$9ac100e40613ea10() || $c87311424ea30a05$export$fedb369cb70207f1();
653}
654function $c87311424ea30a05$export$78551043582a6a98() {
655 return $c87311424ea30a05$var$testUserAgent(/AppleWebKit/i) && !$c87311424ea30a05$export$6446a186d09e379e();
656}
657function $c87311424ea30a05$export$6446a186d09e379e() {
658 return $c87311424ea30a05$var$testUserAgent(/Chrome/i);
659}
660function $c87311424ea30a05$export$a11b0059900ceec8() {
661 return $c87311424ea30a05$var$testUserAgent(/Android/i);
662}
663
664
665
666function $e9faafb641e167db$export$90fc3a17d93f704c(ref, event, handler1, options) {
667 let handlerRef = $12uGp$useRef(handler1);
668 handlerRef.current = handler1;
669 let isDisabled = handler1 == null;
670 $12uGp$useEffect(()=>{
671 if (isDisabled) return;
672 let element = ref.current;
673 let handler = (e)=>handlerRef.current.call(this, e)
674 ;
675 element.addEventListener(event, handler, options);
676 return ()=>{
677 element.removeEventListener(event, handler, options);
678 };
679 }, [
680 ref,
681 event,
682 options,
683 isDisabled
684 ]);
685}
686
687
688
689
690function $1dbecbe27a04f9af$export$14d238f342723f25(defaultValue) {
691 let [value, setValue] = $12uGp$useState(defaultValue);
692 let valueRef = $12uGp$useRef(value);
693 let effect = $12uGp$useRef(null);
694 valueRef.current = value;
695 // Store the function in a ref so we can always access the current version
696 // which has the proper `value` in scope.
697 let nextRef = $12uGp$useRef(null);
698 nextRef.current = ()=>{
699 // Run the generator to the next yield.
700 let newValue = effect.current.next();
701 // If the generator is done, reset the effect.
702 if (newValue.done) {
703 effect.current = null;
704 return;
705 }
706 // If the value is the same as the current value,
707 // then continue to the next yield. Otherwise,
708 // set the value in state and wait for the next layout effect.
709 if (value === newValue.value) nextRef.current();
710 else setValue(newValue.value);
711 };
712 $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c(()=>{
713 // If there is an effect currently running, continue to the next yield.
714 if (effect.current) nextRef.current();
715 });
716 let queue = $12uGp$useCallback((fn)=>{
717 effect.current = fn(valueRef.current);
718 nextRef.current();
719 }, [
720 effect,
721 nextRef
722 ]);
723 return [
724 value,
725 queue
726 ];
727}
728
729
730function $2f04cbc44ee30ce0$export$53a0910f038337bd(scrollView, element) {
731 let offsetX = $2f04cbc44ee30ce0$var$relativeOffset(scrollView, element, 'left');
732 let offsetY = $2f04cbc44ee30ce0$var$relativeOffset(scrollView, element, 'top');
733 let width = element.offsetWidth;
734 let height = element.offsetHeight;
735 let x = scrollView.scrollLeft;
736 let y = scrollView.scrollTop;
737 let maxX = x + scrollView.offsetWidth;
738 let maxY = y + scrollView.offsetHeight;
739 if (offsetX <= x) x = offsetX;
740 else if (offsetX + width > maxX) x += offsetX + width - maxX;
741 if (offsetY <= y) y = offsetY;
742 else if (offsetY + height > maxY) y += offsetY + height - maxY;
743 scrollView.scrollLeft = x;
744 scrollView.scrollTop = y;
745}
746/**
747 * Computes the offset left or top from child to ancestor by accumulating
748 * offsetLeft or offsetTop through intervening offsetParents.
749 */ function $2f04cbc44ee30ce0$var$relativeOffset(ancestor, child, axis) {
750 const prop = axis === 'left' ? 'offsetLeft' : 'offsetTop';
751 let sum = 0;
752 while(child.offsetParent){
753 sum += child[prop];
754 if (child.offsetParent === ancestor) break;
755 else if (child.offsetParent.contains(ancestor)) {
756 // If the ancestor is not `position:relative`, then we stop at
757 // _its_ offset parent, and we subtract off _its_ offset, so that
758 // we end up with the proper offset from child to ancestor.
759 sum -= ancestor[prop];
760 break;
761 }
762 child = child.offsetParent;
763 }
764 return sum;
765}
766
767
768
769
770
771export {$bdb11010cef70236$export$f680877a34711e37 as useId, $bdb11010cef70236$export$cd8c9cb68f842629 as mergeIds, $bdb11010cef70236$export$b4cc09c592e8fdb8 as useSlotId, $ff5963eb1fccf552$export$e08e3b67e392101e as chain, $3ef42575df84b30b$export$9d1611c77c2fe928 as mergeProps, $5dc95899b306f630$export$c9058316764c140e as mergeRefs, $65484d02dcb7eb3e$export$457c3d6518dd4c6f as filterDOMProps, $7215afc6de606d6b$export$de79e2c695e052f3 as focusWithoutScrolling, $ab71dadb03a6fb2e$export$622cea445a1c5b7d as getOffset, $bbed8b41f857bcc0$export$24490316f764c430 as runAfterTransition, $9cc09df9fd7676be$export$7bbed75feba39706 as useDrag1D, $03deb23ff14920c4$export$4eaf04e54aa8eed6 as useGlobalListeners, $313b98861ee5dd6c$export$d6875122194c7b44 as useLabels, $df56164dff5785e2$export$4338b53315abf666 as useObjectRef, $4f58c5f72bcf79f7$export$496315a1608d9602 as useUpdateEffect, $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c as useLayoutEffect, $9daab02d461809db$export$683480f191c0e3ea as useResizeObserver, $e7801be82b4b2a53$export$4debdb1a3f0fa79e as useSyncRef, $62d8ded9296f3872$export$cfa2225e87938781 as getScrollParent, $5df64b3807dc15ee$export$d699905dd57c73ca as useViewportSize, $ef06256079686ba0$export$f8aeda7b10753fa1 as useDescription, $c87311424ea30a05$export$9ac100e40613ea10 as isMac, $c87311424ea30a05$export$186c6964ca17d99 as isIPhone, $c87311424ea30a05$export$7bef049ce92e4224 as isIPad, $c87311424ea30a05$export$fedb369cb70207f1 as isIOS, $c87311424ea30a05$export$e1865c3bedcd822b as isAppleDevice, $c87311424ea30a05$export$78551043582a6a98 as isWebKit, $c87311424ea30a05$export$6446a186d09e379e as isChrome, $c87311424ea30a05$export$a11b0059900ceec8 as isAndroid, $e9faafb641e167db$export$90fc3a17d93f704c as useEvent, $1dbecbe27a04f9af$export$14d238f342723f25 as useValueEffect, $2f04cbc44ee30ce0$export$53a0910f038337bd as scrollIntoView, $4507461a1b870123$re_export$clamp as clamp, $4507461a1b870123$re_export$snapValueToStep as snapValueToStep};
772//# sourceMappingURL=module.js.map