@acusti/dropdown 0.50.0 → 0.50.1
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/Dropdown.js +265 -286
- package/dist/Dropdown.js.map +1 -1
- package/package.json +7 -7
package/dist/Dropdown.js
CHANGED
|
@@ -4,7 +4,7 @@ import { SYSTEM_UI_FONT, Style } from "@acusti/styling";
|
|
|
4
4
|
import useBoundingClientRect from "@acusti/use-bounding-client-rect";
|
|
5
5
|
import useKeyboardEvents, { isEventTargetUsingKeyEvent } from "@acusti/use-keyboard-events";
|
|
6
6
|
import clsx from "clsx";
|
|
7
|
-
import { Children,
|
|
7
|
+
import { Children, useState, useId, useRef, useEffect, isValidElement, Fragment } from "react";
|
|
8
8
|
import { getBestMatch } from "@acusti/matchmaking";
|
|
9
9
|
const ROOT_CLASS_NAME = "uktdropdown";
|
|
10
10
|
const ROOT_SELECTOR = `.${ROOT_CLASS_NAME}`;
|
|
@@ -212,13 +212,10 @@ const setActiveItem = ({
|
|
|
212
212
|
}
|
|
213
213
|
}
|
|
214
214
|
};
|
|
215
|
-
const noop = () => {
|
|
216
|
-
};
|
|
217
215
|
const CHILDREN_ERROR = "@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.";
|
|
218
216
|
const TEXT_INPUT_SELECTOR = "input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea";
|
|
219
|
-
let idCounter = 0;
|
|
220
217
|
function Dropdown(t0) {
|
|
221
|
-
const $ = c(
|
|
218
|
+
const $ = c(99);
|
|
222
219
|
const {
|
|
223
220
|
allowCreate,
|
|
224
221
|
allowEmpty: t1,
|
|
@@ -260,20 +257,11 @@ function Dropdown(t0) {
|
|
|
260
257
|
if (childrenCount > 1) {
|
|
261
258
|
trigger = children[0];
|
|
262
259
|
}
|
|
263
|
-
let t6;
|
|
264
|
-
if ($[0] !== trigger) {
|
|
265
|
-
t6 = isValidElement(trigger);
|
|
266
|
-
$[0] = trigger;
|
|
267
|
-
$[1] = t6;
|
|
268
|
-
} else {
|
|
269
|
-
t6 = $[1];
|
|
270
|
-
}
|
|
271
|
-
const isTriggerFromProps = t6;
|
|
272
260
|
const [isOpen, setIsOpen] = useState(isOpenOnMount ?? false);
|
|
273
261
|
const [isOpening, setIsOpening] = useState(!isOpenOnMount);
|
|
274
262
|
const [dropdownElement, setDropdownElement] = useState(null);
|
|
275
263
|
const [dropdownBodyElement, setDropdownBodyElement] = useState(null);
|
|
276
|
-
const
|
|
264
|
+
const id = useId();
|
|
277
265
|
const inputElementRef = useRef(null);
|
|
278
266
|
const closingTimerRef = useRef(null);
|
|
279
267
|
const isOpeningTimerRef = useRef(null);
|
|
@@ -291,10 +279,10 @@ function Dropdown(t0) {
|
|
|
291
279
|
const onOpenRef = useRef(onOpen);
|
|
292
280
|
const onSubmitItemRef = useRef(onSubmitItem);
|
|
293
281
|
const valueRef = useRef(value);
|
|
282
|
+
let t6;
|
|
294
283
|
let t7;
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
t7 = () => {
|
|
284
|
+
if ($[0] !== allowCreate || $[1] !== allowEmpty || $[2] !== hasItems || $[3] !== isOpen || $[4] !== isOpening || $[5] !== keepOpenOnSubmit || $[6] !== onClose || $[7] !== onOpen || $[8] !== onSubmitItem || $[9] !== value) {
|
|
285
|
+
t6 = () => {
|
|
298
286
|
allowCreateRef.current = allowCreate;
|
|
299
287
|
allowEmptyRef.current = allowEmpty;
|
|
300
288
|
hasItemsRef.current = hasItems;
|
|
@@ -306,29 +294,29 @@ function Dropdown(t0) {
|
|
|
306
294
|
onSubmitItemRef.current = onSubmitItem;
|
|
307
295
|
valueRef.current = value;
|
|
308
296
|
};
|
|
309
|
-
|
|
310
|
-
$[
|
|
311
|
-
$[
|
|
312
|
-
$[
|
|
313
|
-
$[
|
|
314
|
-
$[
|
|
315
|
-
$[
|
|
316
|
-
$[
|
|
317
|
-
$[
|
|
318
|
-
$[
|
|
319
|
-
$[
|
|
320
|
-
$[
|
|
321
|
-
$[
|
|
297
|
+
t7 = [allowCreate, allowEmpty, hasItems, isOpen, isOpening, keepOpenOnSubmit, onClose, onOpen, onSubmitItem, value];
|
|
298
|
+
$[0] = allowCreate;
|
|
299
|
+
$[1] = allowEmpty;
|
|
300
|
+
$[2] = hasItems;
|
|
301
|
+
$[3] = isOpen;
|
|
302
|
+
$[4] = isOpening;
|
|
303
|
+
$[5] = keepOpenOnSubmit;
|
|
304
|
+
$[6] = onClose;
|
|
305
|
+
$[7] = onOpen;
|
|
306
|
+
$[8] = onSubmitItem;
|
|
307
|
+
$[9] = value;
|
|
308
|
+
$[10] = t6;
|
|
309
|
+
$[11] = t7;
|
|
322
310
|
} else {
|
|
323
|
-
|
|
324
|
-
|
|
311
|
+
t6 = $[10];
|
|
312
|
+
t7 = $[11];
|
|
325
313
|
}
|
|
326
|
-
useEffect(
|
|
314
|
+
useEffect(t6, t7);
|
|
327
315
|
const isMountedRef = useRef(false);
|
|
328
|
-
let
|
|
316
|
+
let t8;
|
|
329
317
|
let t9;
|
|
330
|
-
if ($[
|
|
331
|
-
|
|
318
|
+
if ($[12] !== isOpen) {
|
|
319
|
+
t8 = () => {
|
|
332
320
|
if (!isMountedRef.current) {
|
|
333
321
|
isMountedRef.current = true;
|
|
334
322
|
if (isOpenRef.current && onOpenRef.current) {
|
|
@@ -344,18 +332,18 @@ function Dropdown(t0) {
|
|
|
344
332
|
}
|
|
345
333
|
}
|
|
346
334
|
};
|
|
347
|
-
|
|
348
|
-
$[
|
|
349
|
-
$[
|
|
350
|
-
$[
|
|
335
|
+
t9 = [isOpen];
|
|
336
|
+
$[12] = isOpen;
|
|
337
|
+
$[13] = t8;
|
|
338
|
+
$[14] = t9;
|
|
351
339
|
} else {
|
|
352
|
-
|
|
353
|
-
t9 = $[
|
|
340
|
+
t8 = $[13];
|
|
341
|
+
t9 = $[14];
|
|
354
342
|
}
|
|
355
|
-
useEffect(
|
|
356
|
-
let
|
|
357
|
-
if ($[
|
|
358
|
-
|
|
343
|
+
useEffect(t8, t9);
|
|
344
|
+
let t10;
|
|
345
|
+
if ($[15] === Symbol.for("react.memo_cache_sentinel")) {
|
|
346
|
+
t10 = () => {
|
|
359
347
|
setIsOpen(false);
|
|
360
348
|
setIsOpening(false);
|
|
361
349
|
mouseDownPositionRef.current = null;
|
|
@@ -364,15 +352,14 @@ function Dropdown(t0) {
|
|
|
364
352
|
closingTimerRef.current = null;
|
|
365
353
|
}
|
|
366
354
|
};
|
|
367
|
-
$[
|
|
355
|
+
$[15] = t10;
|
|
368
356
|
} else {
|
|
369
|
-
|
|
357
|
+
t10 = $[15];
|
|
370
358
|
}
|
|
371
|
-
const closeDropdown =
|
|
372
|
-
let
|
|
373
|
-
if ($[
|
|
374
|
-
|
|
375
|
-
var _a;
|
|
359
|
+
const closeDropdown = t10;
|
|
360
|
+
let t11;
|
|
361
|
+
if ($[16] !== dropdownElement) {
|
|
362
|
+
t11 = (event) => {
|
|
376
363
|
if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
|
|
377
364
|
closingTimerRef.current = setTimeout(closeDropdown, 90);
|
|
378
365
|
}
|
|
@@ -384,11 +371,11 @@ function Dropdown(t0) {
|
|
|
384
371
|
if (!allowEmptyRef.current) {
|
|
385
372
|
return;
|
|
386
373
|
}
|
|
387
|
-
if (
|
|
374
|
+
if (inputElementRef.current?.value) {
|
|
388
375
|
return;
|
|
389
376
|
}
|
|
390
377
|
}
|
|
391
|
-
let itemLabel =
|
|
378
|
+
let itemLabel = element?.innerText ?? "";
|
|
392
379
|
if (inputElementRef.current) {
|
|
393
380
|
if (!element) {
|
|
394
381
|
itemLabel = inputElementRef.current.value;
|
|
@@ -399,7 +386,7 @@ function Dropdown(t0) {
|
|
|
399
386
|
inputElementRef.current.blur();
|
|
400
387
|
}
|
|
401
388
|
}
|
|
402
|
-
const nextValue =
|
|
389
|
+
const nextValue = element?.dataset.uktValue ?? itemLabel;
|
|
403
390
|
if (valueRef.current && valueRef.current === nextValue) {
|
|
404
391
|
return;
|
|
405
392
|
}
|
|
@@ -412,19 +399,19 @@ function Dropdown(t0) {
|
|
|
412
399
|
});
|
|
413
400
|
}
|
|
414
401
|
};
|
|
415
|
-
$[
|
|
416
|
-
$[
|
|
402
|
+
$[16] = dropdownElement;
|
|
403
|
+
$[17] = t11;
|
|
417
404
|
} else {
|
|
418
|
-
|
|
405
|
+
t11 = $[17];
|
|
419
406
|
}
|
|
420
|
-
const handleSubmitItem =
|
|
421
|
-
let
|
|
422
|
-
if ($[
|
|
423
|
-
|
|
407
|
+
const handleSubmitItem = t11;
|
|
408
|
+
let t12;
|
|
409
|
+
if ($[18] === Symbol.for("react.memo_cache_sentinel")) {
|
|
410
|
+
t12 = (t132) => {
|
|
424
411
|
const {
|
|
425
412
|
clientX,
|
|
426
413
|
clientY
|
|
427
|
-
} =
|
|
414
|
+
} = t132;
|
|
428
415
|
currentInputMethodRef.current = "mouse";
|
|
429
416
|
const initialPosition = mouseDownPositionRef.current;
|
|
430
417
|
if (!initialPosition) {
|
|
@@ -435,14 +422,14 @@ function Dropdown(t0) {
|
|
|
435
422
|
}
|
|
436
423
|
setIsOpening(false);
|
|
437
424
|
};
|
|
438
|
-
$[
|
|
425
|
+
$[18] = t12;
|
|
439
426
|
} else {
|
|
440
|
-
|
|
427
|
+
t12 = $[18];
|
|
441
428
|
}
|
|
442
|
-
const handleMouseMove =
|
|
443
|
-
let
|
|
444
|
-
if ($[
|
|
445
|
-
|
|
429
|
+
const handleMouseMove = t12;
|
|
430
|
+
let t13;
|
|
431
|
+
if ($[19] !== dropdownElement) {
|
|
432
|
+
t13 = (event_0) => {
|
|
446
433
|
if (!hasItemsRef.current) {
|
|
447
434
|
return;
|
|
448
435
|
}
|
|
@@ -469,15 +456,15 @@ function Dropdown(t0) {
|
|
|
469
456
|
}
|
|
470
457
|
}
|
|
471
458
|
};
|
|
472
|
-
$[
|
|
473
|
-
$[
|
|
459
|
+
$[19] = dropdownElement;
|
|
460
|
+
$[20] = t13;
|
|
474
461
|
} else {
|
|
475
|
-
|
|
462
|
+
t13 = $[20];
|
|
476
463
|
}
|
|
477
|
-
const handleMouseOver =
|
|
478
|
-
let
|
|
479
|
-
if ($[
|
|
480
|
-
|
|
464
|
+
const handleMouseOver = t13;
|
|
465
|
+
let t14;
|
|
466
|
+
if ($[21] !== dropdownElement) {
|
|
467
|
+
t14 = (event_1) => {
|
|
481
468
|
if (!hasItemsRef.current) {
|
|
482
469
|
return;
|
|
483
470
|
}
|
|
@@ -491,15 +478,15 @@ function Dropdown(t0) {
|
|
|
491
478
|
}
|
|
492
479
|
delete activeItem.dataset.uktActive;
|
|
493
480
|
};
|
|
494
|
-
$[
|
|
495
|
-
$[
|
|
481
|
+
$[21] = dropdownElement;
|
|
482
|
+
$[22] = t14;
|
|
496
483
|
} else {
|
|
497
|
-
|
|
484
|
+
t14 = $[22];
|
|
498
485
|
}
|
|
499
|
-
const handleMouseOut =
|
|
500
|
-
let
|
|
501
|
-
if ($[
|
|
502
|
-
|
|
486
|
+
const handleMouseOut = t14;
|
|
487
|
+
let t15;
|
|
488
|
+
if ($[23] !== onMouseDown) {
|
|
489
|
+
t15 = (event_2) => {
|
|
503
490
|
if (onMouseDown) {
|
|
504
491
|
onMouseDown(event_2);
|
|
505
492
|
}
|
|
@@ -517,15 +504,15 @@ function Dropdown(t0) {
|
|
|
517
504
|
isOpeningTimerRef.current = null;
|
|
518
505
|
}, 1e3);
|
|
519
506
|
};
|
|
520
|
-
$[
|
|
521
|
-
$[
|
|
507
|
+
$[23] = onMouseDown;
|
|
508
|
+
$[24] = t15;
|
|
522
509
|
} else {
|
|
523
|
-
|
|
510
|
+
t15 = $[24];
|
|
524
511
|
}
|
|
525
|
-
const handleMouseDown =
|
|
526
|
-
let
|
|
527
|
-
if ($[
|
|
528
|
-
|
|
512
|
+
const handleMouseDown = t15;
|
|
513
|
+
let t16;
|
|
514
|
+
if ($[25] !== handleSubmitItem || $[26] !== onMouseUp) {
|
|
515
|
+
t16 = (event_3) => {
|
|
529
516
|
if (onMouseUp) {
|
|
530
517
|
onMouseUp(event_3);
|
|
531
518
|
}
|
|
@@ -544,16 +531,16 @@ function Dropdown(t0) {
|
|
|
544
531
|
}
|
|
545
532
|
handleSubmitItem(event_3);
|
|
546
533
|
};
|
|
547
|
-
$[
|
|
548
|
-
$[
|
|
549
|
-
$[
|
|
534
|
+
$[25] = handleSubmitItem;
|
|
535
|
+
$[26] = onMouseUp;
|
|
536
|
+
$[27] = t16;
|
|
550
537
|
} else {
|
|
551
|
-
|
|
538
|
+
t16 = $[27];
|
|
552
539
|
}
|
|
553
|
-
const handleMouseUp =
|
|
554
|
-
let
|
|
555
|
-
if ($[
|
|
556
|
-
|
|
540
|
+
const handleMouseUp = t16;
|
|
541
|
+
let t17;
|
|
542
|
+
if ($[28] !== dropdownElement || $[29] !== handleSubmitItem) {
|
|
543
|
+
t17 = (event_4) => {
|
|
557
544
|
const {
|
|
558
545
|
altKey,
|
|
559
546
|
ctrlKey,
|
|
@@ -652,40 +639,37 @@ function Dropdown(t0) {
|
|
|
652
639
|
}
|
|
653
640
|
}
|
|
654
641
|
};
|
|
655
|
-
$[
|
|
656
|
-
$[
|
|
657
|
-
$[
|
|
642
|
+
$[28] = dropdownElement;
|
|
643
|
+
$[29] = handleSubmitItem;
|
|
644
|
+
$[30] = t17;
|
|
658
645
|
} else {
|
|
659
|
-
|
|
646
|
+
t17 = $[30];
|
|
660
647
|
}
|
|
661
|
-
const handleKeyDown =
|
|
662
|
-
let
|
|
663
|
-
if ($[
|
|
664
|
-
|
|
648
|
+
const handleKeyDown = t17;
|
|
649
|
+
let t18;
|
|
650
|
+
if ($[31] !== handleKeyDown) {
|
|
651
|
+
t18 = {
|
|
665
652
|
ignoreUsedKeyboardEvents: false,
|
|
666
653
|
onKeyDown: handleKeyDown
|
|
667
654
|
};
|
|
668
|
-
$[
|
|
669
|
-
$[
|
|
655
|
+
$[31] = handleKeyDown;
|
|
656
|
+
$[32] = t18;
|
|
670
657
|
} else {
|
|
671
|
-
|
|
658
|
+
t18 = $[32];
|
|
672
659
|
}
|
|
673
|
-
useKeyboardEvents(
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
t20 = (ref) => {
|
|
660
|
+
useKeyboardEvents(t18);
|
|
661
|
+
let t19;
|
|
662
|
+
if ($[33] !== isOpenOnMount) {
|
|
663
|
+
t19 = (ref) => {
|
|
678
664
|
setDropdownElement(ref);
|
|
679
665
|
if (!ref) {
|
|
680
|
-
cleanupEventListenersRef.current();
|
|
681
|
-
cleanupEventListenersRef.current = noop;
|
|
682
666
|
return;
|
|
683
667
|
}
|
|
684
668
|
const {
|
|
685
669
|
ownerDocument
|
|
686
670
|
} = ref;
|
|
687
671
|
let inputElement = inputElementRef.current;
|
|
688
|
-
if (
|
|
672
|
+
if (!inputElement && ref.firstElementChild) {
|
|
689
673
|
if (ref.firstElementChild.matches(TEXT_INPUT_SELECTOR)) {
|
|
690
674
|
inputElement = ref.firstElementChild;
|
|
691
675
|
} else {
|
|
@@ -693,19 +677,19 @@ function Dropdown(t0) {
|
|
|
693
677
|
}
|
|
694
678
|
inputElementRef.current = inputElement;
|
|
695
679
|
}
|
|
696
|
-
const handleGlobalMouseDown = (
|
|
680
|
+
const handleGlobalMouseDown = (t202) => {
|
|
697
681
|
const {
|
|
698
682
|
target
|
|
699
|
-
} =
|
|
683
|
+
} = t202;
|
|
700
684
|
const eventTarget_2 = target;
|
|
701
685
|
if (!ref.contains(eventTarget_2)) {
|
|
702
686
|
closeDropdown();
|
|
703
687
|
}
|
|
704
688
|
};
|
|
705
|
-
const handleGlobalMouseUp = (
|
|
689
|
+
const handleGlobalMouseUp = (t212) => {
|
|
706
690
|
const {
|
|
707
691
|
target: target_0
|
|
708
|
-
} =
|
|
692
|
+
} = t212;
|
|
709
693
|
if (!isOpenRef.current || closingTimerRef.current) {
|
|
710
694
|
return;
|
|
711
695
|
}
|
|
@@ -722,10 +706,10 @@ function Dropdown(t0) {
|
|
|
722
706
|
closeDropdown();
|
|
723
707
|
}
|
|
724
708
|
};
|
|
725
|
-
const handleGlobalFocusIn = (
|
|
709
|
+
const handleGlobalFocusIn = (t222) => {
|
|
726
710
|
const {
|
|
727
711
|
target: target_1
|
|
728
|
-
} =
|
|
712
|
+
} = t222;
|
|
729
713
|
if (!isOpenRef.current) {
|
|
730
714
|
return;
|
|
731
715
|
}
|
|
@@ -765,7 +749,7 @@ function Dropdown(t0) {
|
|
|
765
749
|
if (inputElement) {
|
|
766
750
|
inputElement.addEventListener("input", handleInput);
|
|
767
751
|
}
|
|
768
|
-
|
|
752
|
+
return () => {
|
|
769
753
|
document.removeEventListener("focusin", handleGlobalFocusIn);
|
|
770
754
|
document.removeEventListener("mousedown", handleGlobalMouseDown);
|
|
771
755
|
document.removeEventListener("mouseup", handleGlobalMouseUp);
|
|
@@ -779,242 +763,237 @@ function Dropdown(t0) {
|
|
|
779
763
|
}
|
|
780
764
|
};
|
|
781
765
|
};
|
|
782
|
-
$[
|
|
783
|
-
$[
|
|
784
|
-
$[37] = t20;
|
|
766
|
+
$[33] = isOpenOnMount;
|
|
767
|
+
$[34] = t19;
|
|
785
768
|
} else {
|
|
786
|
-
|
|
769
|
+
t19 = $[34];
|
|
787
770
|
}
|
|
788
|
-
const handleRef =
|
|
789
|
-
if (!
|
|
771
|
+
const handleRef = t19;
|
|
772
|
+
if (!isValidElement(trigger)) {
|
|
790
773
|
if (isSearchable) {
|
|
791
|
-
const
|
|
792
|
-
let
|
|
793
|
-
if ($[
|
|
794
|
-
|
|
795
|
-
$[
|
|
774
|
+
const t202 = value ?? "";
|
|
775
|
+
let t212;
|
|
776
|
+
if ($[35] === Symbol.for("react.memo_cache_sentinel")) {
|
|
777
|
+
t212 = () => setIsOpen(true);
|
|
778
|
+
$[35] = t212;
|
|
796
779
|
} else {
|
|
797
|
-
|
|
780
|
+
t212 = $[35];
|
|
798
781
|
}
|
|
799
|
-
let
|
|
800
|
-
if ($[
|
|
801
|
-
|
|
802
|
-
$[
|
|
803
|
-
$[
|
|
804
|
-
$[
|
|
805
|
-
$[
|
|
806
|
-
$[
|
|
807
|
-
$[
|
|
782
|
+
let t222;
|
|
783
|
+
if ($[36] !== disabled || $[37] !== name || $[38] !== placeholder || $[39] !== t202 || $[40] !== tabIndex) {
|
|
784
|
+
t222 = /* @__PURE__ */ jsx("input", { autoComplete: "off", className: TRIGGER_CLASS_NAME, defaultValue: t202, disabled, name, onFocus: t212, placeholder, ref: inputElementRef, tabIndex, type: "text" });
|
|
785
|
+
$[36] = disabled;
|
|
786
|
+
$[37] = name;
|
|
787
|
+
$[38] = placeholder;
|
|
788
|
+
$[39] = t202;
|
|
789
|
+
$[40] = tabIndex;
|
|
790
|
+
$[41] = t222;
|
|
808
791
|
} else {
|
|
809
|
-
|
|
792
|
+
t222 = $[41];
|
|
810
793
|
}
|
|
811
|
-
trigger =
|
|
794
|
+
trigger = t222;
|
|
812
795
|
} else {
|
|
813
|
-
let
|
|
814
|
-
if ($[
|
|
815
|
-
|
|
816
|
-
$[
|
|
817
|
-
$[
|
|
796
|
+
let t202;
|
|
797
|
+
if ($[42] !== trigger) {
|
|
798
|
+
t202 = /* @__PURE__ */ jsx("button", { className: TRIGGER_CLASS_NAME, tabIndex: 0, children: trigger });
|
|
799
|
+
$[42] = trigger;
|
|
800
|
+
$[43] = t202;
|
|
818
801
|
} else {
|
|
819
|
-
|
|
802
|
+
t202 = $[43];
|
|
820
803
|
}
|
|
821
|
-
trigger =
|
|
804
|
+
trigger = t202;
|
|
822
805
|
}
|
|
823
806
|
}
|
|
824
807
|
if (label) {
|
|
825
|
-
let
|
|
826
|
-
if ($[
|
|
827
|
-
|
|
828
|
-
$[
|
|
829
|
-
$[
|
|
808
|
+
let t202;
|
|
809
|
+
if ($[44] !== label) {
|
|
810
|
+
t202 = /* @__PURE__ */ jsx("div", { className: LABEL_TEXT_CLASS_NAME, children: label });
|
|
811
|
+
$[44] = label;
|
|
812
|
+
$[45] = t202;
|
|
830
813
|
} else {
|
|
831
|
-
|
|
814
|
+
t202 = $[45];
|
|
832
815
|
}
|
|
833
|
-
let
|
|
834
|
-
if ($[
|
|
835
|
-
|
|
836
|
-
|
|
816
|
+
let t212;
|
|
817
|
+
if ($[46] !== t202 || $[47] !== trigger) {
|
|
818
|
+
t212 = /* @__PURE__ */ jsxs("label", { className: LABEL_CLASS_NAME, children: [
|
|
819
|
+
t202,
|
|
837
820
|
trigger
|
|
838
821
|
] });
|
|
839
|
-
$[
|
|
840
|
-
$[
|
|
841
|
-
$[
|
|
822
|
+
$[46] = t202;
|
|
823
|
+
$[47] = trigger;
|
|
824
|
+
$[48] = t212;
|
|
842
825
|
} else {
|
|
843
|
-
|
|
826
|
+
t212 = $[48];
|
|
844
827
|
}
|
|
845
|
-
trigger =
|
|
828
|
+
trigger = t212;
|
|
846
829
|
}
|
|
847
830
|
const dropdownRect = useBoundingClientRect(dropdownElement);
|
|
848
831
|
const dropdownBodyRect = useBoundingClientRect(dropdownBodyElement);
|
|
849
|
-
let
|
|
850
|
-
if ($[
|
|
851
|
-
|
|
852
|
-
$[
|
|
853
|
-
$[
|
|
832
|
+
let t20;
|
|
833
|
+
if ($[49] !== dropdownBodyElement) {
|
|
834
|
+
t20 = getBoundingAncestor(dropdownBodyElement);
|
|
835
|
+
$[49] = dropdownBodyElement;
|
|
836
|
+
$[50] = t20;
|
|
854
837
|
} else {
|
|
855
|
-
|
|
838
|
+
t20 = $[50];
|
|
856
839
|
}
|
|
857
|
-
const boundingElement =
|
|
840
|
+
const boundingElement = t20;
|
|
858
841
|
const boundingElementRect = useBoundingClientRect(boundingElement);
|
|
859
842
|
let maxHeight;
|
|
860
843
|
let maxWidth;
|
|
861
844
|
if (dropdownBodyRect.top != null && dropdownRect.top != null && boundingElementRect.top != null) {
|
|
862
845
|
const maxHeightUp = dropdownBodyRect.bottom - boundingElementRect.top;
|
|
863
846
|
const maxHeightDown = boundingElementRect.bottom - dropdownBodyRect.top;
|
|
864
|
-
let
|
|
865
|
-
if ($[
|
|
866
|
-
|
|
867
|
-
$[
|
|
868
|
-
$[
|
|
869
|
-
$[
|
|
870
|
-
$[
|
|
871
|
-
$[
|
|
847
|
+
let t212;
|
|
848
|
+
if ($[51] !== dropdownBodyRect.top || $[52] !== dropdownRect.top || $[53] !== maxHeightDown || $[54] !== maxHeightUp) {
|
|
849
|
+
t212 = Math.round(dropdownBodyRect.top > dropdownRect.top ? maxHeightDown : maxHeightUp);
|
|
850
|
+
$[51] = dropdownBodyRect.top;
|
|
851
|
+
$[52] = dropdownRect.top;
|
|
852
|
+
$[53] = maxHeightDown;
|
|
853
|
+
$[54] = maxHeightUp;
|
|
854
|
+
$[55] = t212;
|
|
872
855
|
} else {
|
|
873
|
-
|
|
856
|
+
t212 = $[55];
|
|
874
857
|
}
|
|
875
|
-
maxHeight =
|
|
858
|
+
maxHeight = t212;
|
|
876
859
|
const maxWidthLeft = dropdownBodyRect.right - boundingElementRect.left;
|
|
877
860
|
const maxWidthRight = boundingElementRect.right - dropdownBodyRect.left;
|
|
878
|
-
let
|
|
879
|
-
if ($[
|
|
880
|
-
|
|
881
|
-
$[
|
|
882
|
-
$[
|
|
883
|
-
$[
|
|
884
|
-
$[
|
|
885
|
-
$[
|
|
861
|
+
let t222;
|
|
862
|
+
if ($[56] !== dropdownBodyRect.left || $[57] !== dropdownRect.left || $[58] !== maxWidthLeft || $[59] !== maxWidthRight) {
|
|
863
|
+
t222 = Math.round(dropdownBodyRect.left > dropdownRect.left ? maxWidthRight : maxWidthLeft);
|
|
864
|
+
$[56] = dropdownBodyRect.left;
|
|
865
|
+
$[57] = dropdownRect.left;
|
|
866
|
+
$[58] = maxWidthLeft;
|
|
867
|
+
$[59] = maxWidthRight;
|
|
868
|
+
$[60] = t222;
|
|
886
869
|
} else {
|
|
887
|
-
|
|
870
|
+
t222 = $[60];
|
|
888
871
|
}
|
|
889
|
-
maxWidth =
|
|
872
|
+
maxWidth = t222;
|
|
890
873
|
}
|
|
891
|
-
let
|
|
892
|
-
if ($[
|
|
893
|
-
|
|
874
|
+
let t21;
|
|
875
|
+
if ($[61] !== maxHeight || $[62] !== minHeightBody) {
|
|
876
|
+
t21 = maxHeight != null && maxHeight > minHeightBody ? {
|
|
894
877
|
[BODY_MAX_HEIGHT_VAR]: `calc(${maxHeight}px - var(--uktdd-body-buffer))`
|
|
895
878
|
} : null;
|
|
896
|
-
$[
|
|
897
|
-
$[
|
|
898
|
-
$[
|
|
879
|
+
$[61] = maxHeight;
|
|
880
|
+
$[62] = minHeightBody;
|
|
881
|
+
$[63] = t21;
|
|
899
882
|
} else {
|
|
900
|
-
|
|
883
|
+
t21 = $[63];
|
|
901
884
|
}
|
|
902
|
-
let
|
|
903
|
-
if ($[
|
|
904
|
-
|
|
885
|
+
let t22;
|
|
886
|
+
if ($[64] !== maxWidth || $[65] !== minWidthBody) {
|
|
887
|
+
t22 = maxWidth != null && maxWidth > minWidthBody ? {
|
|
905
888
|
[BODY_MAX_WIDTH_VAR]: `calc(${maxWidth}px - var(--uktdd-body-buffer))`
|
|
906
889
|
} : null;
|
|
907
|
-
$[
|
|
908
|
-
$[
|
|
909
|
-
$[
|
|
890
|
+
$[64] = maxWidth;
|
|
891
|
+
$[65] = minWidthBody;
|
|
892
|
+
$[66] = t22;
|
|
910
893
|
} else {
|
|
911
|
-
|
|
894
|
+
t22 = $[66];
|
|
912
895
|
}
|
|
913
|
-
let
|
|
914
|
-
if ($[
|
|
915
|
-
|
|
896
|
+
let t23;
|
|
897
|
+
if ($[67] !== styleFromProps || $[68] !== t21 || $[69] !== t22) {
|
|
898
|
+
t23 = {
|
|
916
899
|
...styleFromProps,
|
|
917
|
-
...
|
|
918
|
-
...
|
|
900
|
+
...t21,
|
|
901
|
+
...t22
|
|
919
902
|
};
|
|
920
|
-
$[
|
|
921
|
-
$[
|
|
922
|
-
$[
|
|
923
|
-
$[
|
|
903
|
+
$[67] = styleFromProps;
|
|
904
|
+
$[68] = t21;
|
|
905
|
+
$[69] = t22;
|
|
906
|
+
$[70] = t23;
|
|
924
907
|
} else {
|
|
925
|
-
|
|
908
|
+
t23 = $[70];
|
|
926
909
|
}
|
|
927
|
-
const style =
|
|
910
|
+
const style = t23;
|
|
928
911
|
const anchorStyles = `[data-ukt-id="${id}"] > :first-child {
|
|
929
912
|
anchor-name: --uktdd-anchor${id};
|
|
930
913
|
}
|
|
931
914
|
[data-ukt-id="${id}"] ${BODY_SELECTOR} {
|
|
932
915
|
position-anchor: --uktdd-anchor${id};
|
|
933
916
|
}`;
|
|
934
|
-
let
|
|
935
|
-
if ($[
|
|
936
|
-
|
|
937
|
-
$[
|
|
917
|
+
let t24;
|
|
918
|
+
if ($[71] === Symbol.for("react.memo_cache_sentinel")) {
|
|
919
|
+
t24 = /* @__PURE__ */ jsx(Style, { href: "@acusti/dropdown/Dropdown", children: STYLES });
|
|
920
|
+
$[71] = t24;
|
|
938
921
|
} else {
|
|
939
|
-
|
|
940
|
-
}
|
|
941
|
-
const
|
|
942
|
-
let
|
|
943
|
-
if ($[
|
|
944
|
-
|
|
945
|
-
$[
|
|
946
|
-
$[
|
|
947
|
-
$[
|
|
922
|
+
t24 = $[71];
|
|
923
|
+
}
|
|
924
|
+
const t25 = `@acusti/dropdown/Dropdown/${id}`;
|
|
925
|
+
let t26;
|
|
926
|
+
if ($[72] !== anchorStyles || $[73] !== t25) {
|
|
927
|
+
t26 = /* @__PURE__ */ jsx(Style, { href: t25, children: anchorStyles });
|
|
928
|
+
$[72] = anchorStyles;
|
|
929
|
+
$[73] = t25;
|
|
930
|
+
$[74] = t26;
|
|
948
931
|
} else {
|
|
949
|
-
|
|
932
|
+
t26 = $[74];
|
|
950
933
|
}
|
|
951
|
-
let
|
|
952
|
-
if ($[
|
|
953
|
-
|
|
934
|
+
let t27;
|
|
935
|
+
if ($[75] !== className || $[76] !== disabled || $[77] !== isOpen || $[78] !== isSearchable) {
|
|
936
|
+
t27 = clsx(ROOT_CLASS_NAME, className, {
|
|
954
937
|
disabled,
|
|
955
938
|
"is-open": isOpen,
|
|
956
939
|
"is-searchable": isSearchable
|
|
957
940
|
});
|
|
958
|
-
$[
|
|
959
|
-
$[
|
|
960
|
-
$[
|
|
961
|
-
$[
|
|
962
|
-
$[
|
|
941
|
+
$[75] = className;
|
|
942
|
+
$[76] = disabled;
|
|
943
|
+
$[77] = isOpen;
|
|
944
|
+
$[78] = isSearchable;
|
|
945
|
+
$[79] = t27;
|
|
963
946
|
} else {
|
|
964
|
-
|
|
947
|
+
t27 = $[79];
|
|
948
|
+
}
|
|
949
|
+
let t28;
|
|
950
|
+
if ($[80] !== children || $[81] !== childrenCount || $[82] !== isOpen) {
|
|
951
|
+
t28 = isOpen ? /* @__PURE__ */ jsx("div", { className: BODY_CLASS_NAME, ref: setDropdownBodyElement, children: childrenCount > 1 ? children[1] : children }) : null;
|
|
952
|
+
$[80] = children;
|
|
953
|
+
$[81] = childrenCount;
|
|
954
|
+
$[82] = isOpen;
|
|
955
|
+
$[83] = t28;
|
|
956
|
+
} else {
|
|
957
|
+
t28 = $[83];
|
|
965
958
|
}
|
|
966
959
|
let t29;
|
|
967
|
-
if ($[
|
|
968
|
-
t29 =
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
$[
|
|
960
|
+
if ($[84] !== handleMouseDown || $[85] !== handleMouseOut || $[86] !== handleMouseOver || $[87] !== handleMouseUp || $[88] !== handleRef || $[89] !== id || $[90] !== onClick || $[91] !== style || $[92] !== t27 || $[93] !== t28 || $[94] !== trigger) {
|
|
961
|
+
t29 = /* @__PURE__ */ jsxs("div", { className: t27, "data-ukt-id": id, onClick, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseOut: handleMouseOut, onMouseOver: handleMouseOver, onMouseUp: handleMouseUp, ref: handleRef, style, children: [
|
|
962
|
+
trigger,
|
|
963
|
+
t28
|
|
964
|
+
] });
|
|
965
|
+
$[84] = handleMouseDown;
|
|
966
|
+
$[85] = handleMouseOut;
|
|
967
|
+
$[86] = handleMouseOver;
|
|
968
|
+
$[87] = handleMouseUp;
|
|
969
|
+
$[88] = handleRef;
|
|
970
|
+
$[89] = id;
|
|
971
|
+
$[90] = onClick;
|
|
972
|
+
$[91] = style;
|
|
973
|
+
$[92] = t27;
|
|
974
|
+
$[93] = t28;
|
|
975
|
+
$[94] = trigger;
|
|
976
|
+
$[95] = t29;
|
|
973
977
|
} else {
|
|
974
|
-
t29 = $[
|
|
978
|
+
t29 = $[95];
|
|
975
979
|
}
|
|
976
980
|
let t30;
|
|
977
|
-
if ($[
|
|
978
|
-
t30 = /* @__PURE__ */ jsxs(
|
|
979
|
-
|
|
981
|
+
if ($[96] !== t26 || $[97] !== t29) {
|
|
982
|
+
t30 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
983
|
+
t24,
|
|
984
|
+
t26,
|
|
980
985
|
t29
|
|
981
986
|
] });
|
|
982
|
-
$[
|
|
983
|
-
$[
|
|
984
|
-
$[89] = handleMouseOver;
|
|
985
|
-
$[90] = handleMouseUp;
|
|
986
|
-
$[91] = handleRef;
|
|
987
|
-
$[92] = id;
|
|
988
|
-
$[93] = onClick;
|
|
989
|
-
$[94] = style;
|
|
990
|
-
$[95] = t28;
|
|
991
|
-
$[96] = t29;
|
|
992
|
-
$[97] = trigger;
|
|
987
|
+
$[96] = t26;
|
|
988
|
+
$[97] = t29;
|
|
993
989
|
$[98] = t30;
|
|
994
990
|
} else {
|
|
995
991
|
t30 = $[98];
|
|
996
992
|
}
|
|
997
|
-
|
|
998
|
-
if ($[99] !== t27 || $[100] !== t30) {
|
|
999
|
-
t31 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1000
|
-
t25,
|
|
1001
|
-
t27,
|
|
1002
|
-
t30
|
|
1003
|
-
] });
|
|
1004
|
-
$[99] = t27;
|
|
1005
|
-
$[100] = t30;
|
|
1006
|
-
$[101] = t31;
|
|
1007
|
-
} else {
|
|
1008
|
-
t31 = $[101];
|
|
1009
|
-
}
|
|
1010
|
-
return t31;
|
|
1011
|
-
}
|
|
1012
|
-
function _temp() {
|
|
1013
|
-
idCounter = idCounter >= 999999 ? 0 : idCounter + 1;
|
|
1014
|
-
return idCounter;
|
|
993
|
+
return t30;
|
|
1015
994
|
}
|
|
1016
995
|
function getBoundingAncestor(element) {
|
|
1017
|
-
while (element
|
|
996
|
+
while (element?.parentElement) {
|
|
1018
997
|
if (element.parentElement.tagName === "BODY") return element.parentElement;
|
|
1019
998
|
if (getComputedStyle(element.parentElement).overflowX !== "visible") {
|
|
1020
999
|
return element.parentElement;
|
package/dist/Dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","sources":["../src/styles.ts","../src/helpers.ts","../src/Dropdown.tsx"],"sourcesContent":["import { SYSTEM_UI_FONT } from '@acusti/styling';\n\nexport const ROOT_CLASS_NAME = 'uktdropdown';\nexport const ROOT_SELECTOR = `.${ROOT_CLASS_NAME}`;\n\nexport const BODY_CLASS_NAME = `${ROOT_CLASS_NAME}-body`;\nexport const LABEL_CLASS_NAME = `${ROOT_CLASS_NAME}-label`;\nexport const LABEL_TEXT_CLASS_NAME = `${ROOT_CLASS_NAME}-label-text`;\nexport const TRIGGER_CLASS_NAME = `${ROOT_CLASS_NAME}-trigger`;\n\nexport const BODY_SELECTOR = `.${BODY_CLASS_NAME}`;\nexport const LABEL_SELECTOR = `.${LABEL_CLASS_NAME}`;\nexport const LABEL_TEXT_SELECTOR = `.${LABEL_TEXT_CLASS_NAME}`;\nexport const TRIGGER_SELECTOR = `.${TRIGGER_CLASS_NAME}`;\n\nexport const BODY_MAX_HEIGHT_VAR = '--uktdd-body-max-height';\nexport const BODY_MAX_WIDTH_VAR = '--uktdd-body-max-width';\n\nexport const STYLES = `\n:root {\n --uktdd-font-family: ${SYSTEM_UI_FONT};\n --uktdd-body-bg-color: #fff;\n --uktdd-body-bg-color-hover: rgb(105,162,249);\n --uktdd-body-color-hover: #fff;\n --uktdd-body-buffer: 10px;\n ${BODY_MAX_HEIGHT_VAR}: calc(100vh - var(--uktdd-body-buffer));\n ${BODY_MAX_WIDTH_VAR}: calc(100vw - var(--uktdd-body-buffer));\n --uktdd-body-pad-bottom: 9px;\n --uktdd-body-pad-left: 12px;\n --uktdd-body-pad-right: 12px;\n --uktdd-body-pad-top: 9px;\n --uktdd-label-pad-right: 10px;\n}\n${ROOT_SELECTOR},\n${TRIGGER_SELECTOR} {\n font-family: var(--uktdd-font-family);\n}\n${ROOT_SELECTOR} {\n width: max-content;\n}\n${ROOT_SELECTOR}.disabled {\n pointer-events: none;\n}\n${ROOT_SELECTOR} > * {\n cursor: default;\n}\n${LABEL_SELECTOR} {\n display: flex;\n align-items: center;\n}\n${LABEL_TEXT_SELECTOR} {\n padding-right: var(--uktdd-label-pad-right);\n}\n${BODY_SELECTOR} {\n box-sizing: border-box;\n position: absolute;\n top: anchor(bottom);\n left: anchor(left);\n bottom: auto;\n right: auto;\n position-try-fallbacks: --uktdd-top-left, --uktdd-bottom-right, --uktdd-top-right;\n min-height: 50px;\n max-height: var(${BODY_MAX_HEIGHT_VAR});\n min-width: min(50px, 100%);\n max-width: var(${BODY_MAX_WIDTH_VAR});\n overflow: auto;\n z-index: 2;\n padding: var(--uktdd-body-pad-top) var(--uktdd-body-pad-right) var(--uktdd-body-pad-bottom) var(--uktdd-body-pad-left);\n background-color: var(--uktdd-body-bg-color);\n box-shadow: 0 8px 18px rgba(0,0,0,0.25);\n}\n@position-try --uktdd-top-left {\n bottom: anchor(top);\n left: anchor(left);\n top: auto;\n right: auto;\n}\n@position-try --uktdd-bottom-right {\n top: anchor(bottom);\n right: anchor(right);\n bottom: auto;\n left: auto;\n}\n@position-try --uktdd-top-right {\n bottom: anchor(top);\n right: anchor(right);\n top: auto;\n left: auto;\n}\n${BODY_SELECTOR}.has-items {\n user-select: none;\n}\n${BODY_SELECTOR} [data-ukt-active] {\n background-color: var(--uktdd-body-bg-color-hover);\n color: var(--uktdd-body-color-hover);\n}\n`;\n","import { getBestMatch } from '@acusti/matchmaking';\n\nimport { BODY_SELECTOR } from './styles.js';\n\nexport const ITEM_SELECTOR = `[data-ukt-item], [data-ukt-value]`;\n\nexport const getItemElements = (dropdownElement: HTMLElement | null) => {\n if (!dropdownElement) return null;\n\n const bodyElement = dropdownElement.querySelector(BODY_SELECTOR);\n if (!bodyElement) return null;\n\n let items: HTMLCollection | NodeListOf<Element> =\n bodyElement.querySelectorAll(ITEM_SELECTOR);\n\n if (items.length) return items;\n // If no items found via [data-ukt-item] or [data-ukt-value] selector,\n // use first instance of multiple children found\n items = bodyElement.children;\n while (items.length === 1) {\n if (items[0].children == null) break;\n items = items[0].children;\n }\n // If unable to find an element with more than one child, treat direct child as items\n if (items.length === 1) {\n items = bodyElement.children;\n }\n return items;\n};\n\nexport const getActiveItemElement = (dropdownElement: HTMLElement | null) => {\n if (!dropdownElement) return null;\n return dropdownElement.querySelector('[data-ukt-active]') as HTMLElement | null;\n};\n\nconst clearItemElementsState = (itemElements: Array<HTMLElement>) => {\n itemElements.forEach((itemElement) => {\n if (itemElement.hasAttribute('data-ukt-active')) {\n delete itemElement.dataset.uktActive;\n }\n });\n};\n\nexport const setActiveItem = ({\n dropdownElement,\n element,\n index,\n indexAddend,\n isExactMatch,\n text,\n}:\n | {\n dropdownElement: HTMLElement;\n element: HTMLElement;\n index?: null;\n indexAddend?: null;\n isExactMatch?: null;\n text?: null;\n }\n | {\n dropdownElement: HTMLElement;\n element?: null;\n index: number;\n indexAddend?: null;\n isExactMatch?: null;\n text?: null;\n }\n | {\n dropdownElement: HTMLElement;\n element?: null;\n index?: null;\n indexAddend: number;\n isExactMatch?: null;\n text?: null;\n }\n | {\n dropdownElement: HTMLElement;\n element?: null;\n index?: null;\n indexAddend?: null;\n isExactMatch?: boolean;\n text: string;\n }) => {\n const items = getItemElements(dropdownElement);\n if (!items) return;\n\n const itemElements = Array.from(items) as Array<HTMLElement>;\n if (!itemElements.length) return;\n\n const lastIndex = itemElements.length - 1;\n const currentActiveIndex = itemElements.findIndex((itemElement) =>\n itemElement.hasAttribute('data-ukt-active'),\n );\n\n let nextActiveIndex = currentActiveIndex;\n if (typeof index === 'number') {\n // Negative index means count back from the end\n nextActiveIndex = index < 0 ? itemElements.length + index : index;\n }\n\n if (element) {\n nextActiveIndex = itemElements.findIndex(\n (itemElement) => itemElement === element,\n );\n } else if (typeof indexAddend === 'number') {\n // If there’s no currentActiveIndex and we are handling -1, start at lastIndex\n if (currentActiveIndex === -1 && indexAddend === -1) {\n nextActiveIndex = lastIndex;\n } else {\n nextActiveIndex += indexAddend;\n }\n // Keep it within the bounds of the items list\n if (nextActiveIndex < 0) {\n nextActiveIndex = 0;\n } else if (nextActiveIndex > lastIndex) {\n nextActiveIndex = lastIndex;\n }\n } else if (typeof text === 'string') {\n // If text is empty, clear existing active items and early return\n if (!text) {\n clearItemElementsState(itemElements);\n return;\n }\n\n const itemTexts = itemElements.map((itemElement) => itemElement.innerText);\n if (isExactMatch) {\n const textToCompare = text.toLowerCase();\n nextActiveIndex = itemTexts.findIndex((itemText) =>\n itemText.toLowerCase().startsWith(textToCompare),\n );\n // If isExactMatch is required and no exact match was found, clear active items\n if (nextActiveIndex === -1) {\n clearItemElementsState(itemElements);\n }\n } else {\n const bestMatch = getBestMatch({ items: itemTexts, text });\n nextActiveIndex = itemTexts.findIndex((itemText) => itemText === bestMatch);\n }\n }\n\n if (nextActiveIndex === -1 || nextActiveIndex === currentActiveIndex) return;\n\n // Clear any existing active dropdown body item state\n clearItemElementsState(itemElements);\n\n const nextActiveItem = items[nextActiveIndex];\n if (nextActiveItem != null) {\n nextActiveItem.setAttribute('data-ukt-active', '');\n // Find closest scrollable parent and ensure that next active item is visible\n let { parentElement } = nextActiveItem;\n let scrollableParent = null;\n while (!scrollableParent && parentElement && parentElement !== dropdownElement) {\n const isScrollable =\n parentElement.scrollHeight > parentElement.clientHeight + 15;\n if (isScrollable) {\n scrollableParent = parentElement;\n } else {\n parentElement = parentElement.parentElement;\n }\n }\n\n if (scrollableParent) {\n const parentRect = scrollableParent.getBoundingClientRect();\n const itemRect = nextActiveItem.getBoundingClientRect();\n const isAboveTop = itemRect.top < parentRect.top;\n const isBelowBottom = itemRect.bottom > parentRect.bottom;\n if (isAboveTop || isBelowBottom) {\n let { scrollTop } = scrollableParent;\n // Item isn’t fully visible; adjust scrollTop to put item within closest edge\n if (isAboveTop) {\n scrollTop -= parentRect.top - itemRect.top;\n } else {\n scrollTop += itemRect.bottom - parentRect.bottom;\n }\n scrollableParent.scrollTop = scrollTop;\n }\n }\n }\n};\n","/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/mouse-events-have-key-events, jsx-a11y/no-static-element-interactions */\nimport { Style } from '@acusti/styling';\nimport useBoundingClientRect from '@acusti/use-bounding-client-rect';\nimport useKeyboardEvents, {\n isEventTargetUsingKeyEvent,\n} from '@acusti/use-keyboard-events';\nimport clsx from 'clsx';\nimport {\n Children,\n type CSSProperties,\n Fragment,\n isValidElement,\n type JSX,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type SyntheticEvent,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n getActiveItemElement,\n getItemElements,\n ITEM_SELECTOR,\n setActiveItem,\n} from './helpers.js';\nimport {\n BODY_CLASS_NAME,\n BODY_MAX_HEIGHT_VAR,\n BODY_MAX_WIDTH_VAR,\n BODY_SELECTOR,\n LABEL_CLASS_NAME,\n LABEL_TEXT_CLASS_NAME,\n ROOT_CLASS_NAME,\n STYLES,\n TRIGGER_CLASS_NAME,\n} from './styles.js';\n\nexport type Item = {\n element: MaybeHTMLElement;\n event: Event | SyntheticEvent<HTMLElement>;\n label: string;\n value: string;\n};\n\nexport type Props = {\n /**\n * Boolean indicating if the user can submit a value not already in the\n * dropdown.\n */\n allowCreate?: boolean;\n /**\n * Boolean indicating if the user can submit an empty value (i.e. clear\n * the value). Defaults to true.\n */\n allowEmpty?: boolean;\n /**\n * Can take a single React element or exactly two renderable children.\n */\n children: ChildrenTuple | JSX.Element;\n className?: string;\n disabled?: boolean;\n /**\n * Group identifier string links dropdowns together into a menu\n * (like macOS top menubar).\n */\n group?: string;\n hasItems?: boolean;\n isOpenOnMount?: boolean;\n isSearchable?: boolean;\n keepOpenOnSubmit?: boolean;\n label?: string;\n minHeightBody?: number;\n minWidthBody?: number;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s name.\n */\n name?: string;\n onClick?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onClose?: () => unknown;\n onMouseDown?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onMouseUp?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onOpen?: () => unknown;\n onSubmitItem?: (payload: Item) => void;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s placeholder.\n */\n placeholder?: string;\n style?: CSSProperties;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s tabIndex.\n */\n tabIndex?: number;\n /**\n * Used as search input’s value if props.isSearchable === true\n * Used to determine if value has changed to avoid triggering onSubmitItem if not\n */\n value?: string;\n};\n\ntype ChildrenTuple = [ReactNode, ReactNode] | readonly [ReactNode, ReactNode];\n\ntype MaybeHTMLElement = HTMLElement | null;\n\ntype MousePosition = { clientX: number; clientY: number };\n\ntype TimeoutID = ReturnType<typeof setTimeout>;\n\nconst noop = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function\n\nconst CHILDREN_ERROR =\n '@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';\nconst TEXT_INPUT_SELECTOR =\n 'input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea';\n\nlet idCounter = 0;\n\nexport default function Dropdown({\n allowCreate,\n allowEmpty = true,\n children,\n className,\n disabled,\n hasItems = true,\n isOpenOnMount,\n isSearchable,\n keepOpenOnSubmit = !hasItems,\n label,\n minHeightBody = 30,\n minWidthBody = 100,\n name,\n onClick,\n onClose,\n onMouseDown,\n onMouseUp,\n onOpen,\n onSubmitItem,\n placeholder,\n style: styleFromProps,\n tabIndex,\n value,\n}: Props) {\n const childrenCount = Children.count(children);\n if (childrenCount !== 1 && childrenCount !== 2) {\n if (childrenCount === 0) {\n throw new Error(CHILDREN_ERROR + ' Received no children.');\n }\n console.error(`${CHILDREN_ERROR} Received ${childrenCount} children.`);\n }\n\n let trigger: React.ReactNode;\n if (childrenCount > 1) {\n trigger = (children as ChildrenTuple)[0];\n }\n const isTriggerFromProps = isValidElement(trigger);\n\n const [isOpen, setIsOpen] = useState<boolean>(isOpenOnMount ?? false);\n const [isOpening, setIsOpening] = useState<boolean>(!isOpenOnMount);\n const [dropdownElement, setDropdownElement] = useState<MaybeHTMLElement>(null);\n const [dropdownBodyElement, setDropdownBodyElement] =\n useState<MaybeHTMLElement>(null);\n const [id] = useState(() => {\n idCounter = idCounter >= 999_999 ? 0 : idCounter + 1;\n return idCounter;\n });\n\n const inputElementRef = useRef<HTMLInputElement | null>(null);\n const closingTimerRef = useRef<null | TimeoutID>(null);\n const isOpeningTimerRef = useRef<null | TimeoutID>(null);\n const currentInputMethodRef = useRef<'keyboard' | 'mouse'>('mouse');\n const clearEnteredCharactersTimerRef = useRef<null | TimeoutID>(null);\n const enteredCharactersRef = useRef<string>('');\n const mouseDownPositionRef = useRef<MousePosition | null>(null);\n\n const allowCreateRef = useRef(allowCreate);\n const allowEmptyRef = useRef(allowEmpty);\n const hasItemsRef = useRef(hasItems);\n const isOpenRef = useRef(isOpen);\n const isOpeningRef = useRef(isOpening);\n const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);\n const onCloseRef = useRef(onClose);\n const onOpenRef = useRef(onOpen);\n const onSubmitItemRef = useRef(onSubmitItem);\n const valueRef = useRef(value);\n\n useEffect(() => {\n allowCreateRef.current = allowCreate;\n allowEmptyRef.current = allowEmpty;\n hasItemsRef.current = hasItems;\n isOpenRef.current = isOpen;\n isOpeningRef.current = isOpening;\n keepOpenOnSubmitRef.current = keepOpenOnSubmit;\n onCloseRef.current = onClose;\n onOpenRef.current = onOpen;\n onSubmitItemRef.current = onSubmitItem;\n valueRef.current = value;\n }, [\n allowCreate,\n allowEmpty,\n hasItems,\n isOpen,\n isOpening,\n keepOpenOnSubmit,\n onClose,\n onOpen,\n onSubmitItem,\n value,\n ]);\n\n const isMountedRef = useRef(false);\n\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true;\n // If isOpenOnMount, trigger onOpen right away\n if (isOpenRef.current && onOpenRef.current) {\n onOpenRef.current();\n }\n return;\n }\n\n if (isOpen && onOpenRef.current) {\n onOpenRef.current();\n } else if (!isOpen && onCloseRef.current) {\n onCloseRef.current();\n }\n }, [isOpen]);\n\n const closeDropdown = () => {\n setIsOpen(false);\n setIsOpening(false);\n mouseDownPositionRef.current = null;\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current);\n closingTimerRef.current = null;\n }\n };\n\n const handleSubmitItem = (event: Event | React.SyntheticEvent<HTMLElement>) => {\n if (isOpenRef.current && !keepOpenOnSubmitRef.current) {\n // A short timeout before closing is better UX when user selects an item so dropdown\n // doesn’t close before expected. It also enables using <Link />s in the dropdown body.\n closingTimerRef.current = setTimeout(closeDropdown, 90);\n }\n\n if (!hasItemsRef.current) return;\n\n const element = getActiveItemElement(dropdownElement);\n if (!element && !allowCreateRef.current) {\n // If not allowEmpty, don’t allow submitting an empty item\n if (!allowEmptyRef.current) return;\n // If we have an input element as trigger & the user didn’t clear the text, do nothing\n if (inputElementRef.current?.value) return;\n }\n\n let itemLabel = element?.innerText ?? '';\n if (inputElementRef.current) {\n if (!element) {\n itemLabel = inputElementRef.current.value;\n } else {\n inputElementRef.current.value = itemLabel;\n }\n\n if (\n inputElementRef.current ===\n inputElementRef.current.ownerDocument.activeElement\n ) {\n inputElementRef.current.blur();\n }\n }\n\n const nextValue = element?.dataset.uktValue ?? itemLabel;\n // If parent is controlling Dropdown via props.value and nextValue is the same, do nothing\n if (valueRef.current && valueRef.current === nextValue) return;\n\n if (onSubmitItemRef.current) {\n onSubmitItemRef.current({\n element,\n event,\n label: itemLabel,\n value: nextValue,\n });\n }\n };\n\n const handleMouseMove = ({ clientX, clientY }: ReactMouseEvent<HTMLElement>) => {\n currentInputMethodRef.current = 'mouse';\n const initialPosition = mouseDownPositionRef.current;\n if (!initialPosition) return;\n if (\n Math.abs(initialPosition.clientX - clientX) < 12 &&\n Math.abs(initialPosition.clientY - clientY) < 12\n ) {\n return;\n }\n setIsOpening(false);\n };\n\n const handleMouseOver = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasItemsRef.current) return;\n\n // If user isn’t currently using the mouse to navigate the dropdown, do nothing\n if (currentInputMethodRef.current !== 'mouse') return;\n\n // Ensure we have the dropdown root HTMLElement\n if (!dropdownElement) return;\n\n const itemElements = getItemElements(dropdownElement);\n if (!itemElements) return;\n\n const eventTarget = event.target as HTMLElement;\n const item = eventTarget.closest(ITEM_SELECTOR) as MaybeHTMLElement;\n const element = item ?? eventTarget;\n for (const itemElement of itemElements) {\n if (itemElement === element) {\n setActiveItem({ dropdownElement, element });\n return;\n }\n }\n };\n\n const handleMouseOut = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasItemsRef.current) return;\n const activeItem = getActiveItemElement(dropdownElement);\n if (!activeItem) return;\n const eventRelatedTarget = event.relatedTarget as HTMLElement;\n if (activeItem !== event.target || activeItem.contains(eventRelatedTarget)) {\n return;\n }\n // If user moused out of activeItem (not into a descendant), it’s no longer active\n delete activeItem.dataset.uktActive;\n };\n\n const handleMouseDown = (event: ReactMouseEvent<HTMLElement>) => {\n if (onMouseDown) onMouseDown(event);\n if (isOpenRef.current) return;\n\n setIsOpen(true);\n setIsOpening(true);\n mouseDownPositionRef.current = {\n clientX: event.clientX,\n clientY: event.clientY,\n };\n isOpeningTimerRef.current = setTimeout(() => {\n setIsOpening(false);\n isOpeningTimerRef.current = null;\n }, 1000);\n };\n\n const handleMouseUp = (event: ReactMouseEvent<HTMLElement>) => {\n if (onMouseUp) onMouseUp(event);\n // If dropdown is still opening or isn’t open or is closing, do nothing\n if (isOpeningRef.current || !isOpenRef.current || closingTimerRef.current) {\n return;\n }\n\n const eventTarget = event.target as HTMLElement;\n // If click was outside dropdown body, don’t trigger submit\n if (!eventTarget.closest(BODY_SELECTOR)) {\n // Don’t close dropdown if isOpening or search input is focused\n if (\n !isOpeningRef.current &&\n inputElementRef.current !== eventTarget.ownerDocument.activeElement\n ) {\n closeDropdown();\n }\n return;\n }\n\n // If dropdown has no items and click was within dropdown body, do nothing\n if (!hasItemsRef.current) return;\n\n handleSubmitItem(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const { altKey, ctrlKey, key, metaKey } = event;\n const eventTarget = event.target as HTMLElement;\n if (!dropdownElement) return;\n\n const onEventHandled = () => {\n event.stopPropagation();\n event.preventDefault();\n currentInputMethodRef.current = 'keyboard';\n };\n\n const isEventTargetingDropdown = dropdownElement.contains(eventTarget);\n\n if (!isOpenRef.current) {\n // If dropdown is closed, don’t handle key events if event target isn’t within dropdown\n if (!isEventTargetingDropdown) return;\n // Open the dropdown on spacebar, enter, or if isSearchable and user hits the ↑/↓ arrows\n if (\n key === ' ' ||\n key === 'Enter' ||\n (hasItemsRef.current && (key === 'ArrowUp' || key === 'ArrowDown'))\n ) {\n onEventHandled();\n setIsOpen(true);\n }\n return;\n }\n\n const isTargetUsingKeyEvents = isEventTargetUsingKeyEvent(event);\n\n // If dropdown isOpen + hasItems & eventTargetNotUsingKeyEvents, handle characters\n if (hasItemsRef.current && !isTargetUsingKeyEvents) {\n let isEditingCharacters = !ctrlKey && !metaKey && /^[A-Za-z0-9]$/.test(key);\n // User could also be editing characters if there are already characters entered\n // and they are hitting delete or spacebar\n if (!isEditingCharacters && enteredCharactersRef.current) {\n isEditingCharacters = key === ' ' || key === 'Backspace';\n }\n\n if (isEditingCharacters) {\n onEventHandled();\n if (key === 'Backspace') {\n enteredCharactersRef.current = enteredCharactersRef.current.slice(\n 0,\n -1,\n );\n } else {\n enteredCharactersRef.current += key;\n }\n\n setActiveItem({\n dropdownElement,\n // If props.allowCreate, only override the input’s value with an\n // exact text match so user can enter a value not in items\n isExactMatch: allowCreateRef.current,\n text: enteredCharactersRef.current,\n });\n\n if (clearEnteredCharactersTimerRef.current) {\n clearTimeout(clearEnteredCharactersTimerRef.current);\n }\n\n clearEnteredCharactersTimerRef.current = setTimeout(() => {\n enteredCharactersRef.current = '';\n clearEnteredCharactersTimerRef.current = null;\n }, 1500);\n\n return;\n }\n }\n\n // If dropdown isOpen, handle submitting the value\n if (key === 'Enter' || (key === ' ' && !inputElementRef.current)) {\n onEventHandled();\n handleSubmitItem(event);\n return;\n }\n\n // If dropdown isOpen, handle closing it on escape or spacebar if !hasItems\n if (\n key === 'Escape' ||\n (isEventTargetingDropdown && key === ' ' && !hasItemsRef.current)\n ) {\n // Close dropdown if hasItems or event target not using key events\n if (hasItemsRef.current || !isTargetUsingKeyEvents) {\n closeDropdown();\n }\n return;\n }\n\n // Handle ↑/↓ arrows\n if (hasItemsRef.current) {\n if (key === 'ArrowUp') {\n onEventHandled();\n if (altKey || metaKey) {\n setActiveItem({ dropdownElement, index: 0 });\n } else {\n setActiveItem({ dropdownElement, indexAddend: -1 });\n }\n return;\n }\n if (key === 'ArrowDown') {\n onEventHandled();\n if (altKey || metaKey) {\n // Using a negative index counts back from the end\n setActiveItem({ dropdownElement, index: -1 });\n } else {\n setActiveItem({ dropdownElement, indexAddend: 1 });\n }\n return;\n }\n }\n };\n\n useKeyboardEvents({ ignoreUsedKeyboardEvents: false, onKeyDown: handleKeyDown });\n\n const cleanupEventListenersRef = useRef<() => void>(noop);\n\n const handleRef = (ref: HTMLDivElement | null) => {\n setDropdownElement(ref);\n if (!ref) {\n // If component was unmounted, cleanup handlers\n cleanupEventListenersRef.current();\n cleanupEventListenersRef.current = noop;\n return;\n }\n\n const { ownerDocument } = ref;\n let inputElement = inputElementRef.current;\n // Check if trigger from props is a textual input or textarea element\n if (isTriggerFromProps && !inputElement && ref.firstElementChild) {\n if (ref.firstElementChild.matches(TEXT_INPUT_SELECTOR)) {\n inputElement = ref.firstElementChild as HTMLInputElement;\n } else {\n inputElement = ref.firstElementChild.querySelector(TEXT_INPUT_SELECTOR);\n }\n inputElementRef.current = inputElement;\n }\n\n const handleGlobalMouseDown = ({ target }: MouseEvent) => {\n const eventTarget = target as HTMLElement;\n if (!ref.contains(eventTarget)) {\n // Close dropdown on an outside click\n closeDropdown();\n }\n };\n\n const handleGlobalMouseUp = ({ target }: MouseEvent) => {\n if (!isOpenRef.current || closingTimerRef.current) return;\n\n // If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp\n if (isOpeningRef.current) {\n setIsOpening(false);\n if (isOpeningTimerRef.current) {\n clearTimeout(isOpeningTimerRef.current);\n isOpeningTimerRef.current = null;\n }\n return;\n }\n\n const eventTarget = target as HTMLElement;\n // Only handle mouseup events from outside the dropdown here\n if (!ref.contains(eventTarget)) {\n closeDropdown();\n }\n };\n\n // Close dropdown if any element is focused outside of this dropdown\n const handleGlobalFocusIn = ({ target }: Event) => {\n if (!isOpenRef.current) return;\n\n const eventTarget = target as HTMLElement;\n // If focused element is a descendant or a parent of the dropdown, do nothing\n if (ref.contains(eventTarget) || eventTarget.contains(ref)) {\n return;\n }\n\n closeDropdown();\n };\n\n document.addEventListener('focusin', handleGlobalFocusIn);\n document.addEventListener('mousedown', handleGlobalMouseDown);\n document.addEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.addEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);\n }\n\n // If dropdown should be open on mount, focus it\n if (isOpenOnMount) {\n ref.focus();\n }\n\n const handleInput = (event: Event) => {\n if (!isOpenRef.current) setIsOpen(true);\n\n const input = event.target as HTMLInputElement;\n const isDeleting = enteredCharactersRef.current.length > input.value.length;\n enteredCharactersRef.current = input.value;\n // When deleting text, if there’s already an active item and\n // input isn’t empty, preserve the active item, else update it\n if (isDeleting && input.value.length && getActiveItemElement(ref)) {\n return;\n }\n\n setActiveItem({\n dropdownElement: ref,\n // If props.allowCreate, only override the input’s value with an\n // exact text match so user can enter a value not in items\n isExactMatch: allowCreateRef.current,\n text: enteredCharactersRef.current,\n });\n };\n\n if (inputElement) {\n inputElement.addEventListener('input', handleInput);\n }\n\n cleanupEventListenersRef.current = () => {\n document.removeEventListener('focusin', handleGlobalFocusIn);\n document.removeEventListener('mousedown', handleGlobalMouseDown);\n document.removeEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.removeEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);\n }\n\n if (inputElement) {\n inputElement.removeEventListener('input', handleInput);\n }\n };\n };\n\n if (!isTriggerFromProps) {\n if (isSearchable) {\n trigger = (\n <input\n autoComplete=\"off\"\n className={TRIGGER_CLASS_NAME}\n defaultValue={value ?? ''}\n disabled={disabled}\n name={name}\n onFocus={() => setIsOpen(true)}\n placeholder={placeholder}\n ref={inputElementRef}\n tabIndex={tabIndex}\n type=\"text\"\n />\n );\n } else {\n trigger = (\n <button className={TRIGGER_CLASS_NAME} tabIndex={0}>\n {trigger}\n </button>\n );\n }\n }\n\n if (label) {\n trigger = (\n <label className={LABEL_CLASS_NAME}>\n <div className={LABEL_TEXT_CLASS_NAME}>{label}</div>\n {trigger}\n </label>\n );\n }\n\n const dropdownRect = useBoundingClientRect(dropdownElement);\n const dropdownBodyRect = useBoundingClientRect(dropdownBodyElement);\n const boundingElement = getBoundingAncestor(dropdownBodyElement);\n const boundingElementRect = useBoundingClientRect(boundingElement);\n let maxHeight;\n let maxWidth;\n if (\n dropdownBodyRect.top != null &&\n dropdownRect.top != null &&\n boundingElementRect.top != null\n ) {\n const maxHeightUp = dropdownBodyRect.bottom - boundingElementRect.top;\n const maxHeightDown = boundingElementRect.bottom - dropdownBodyRect.top;\n maxHeight = Math.round(\n dropdownBodyRect.top > dropdownRect.top ? maxHeightDown : maxHeightUp,\n );\n const maxWidthLeft = dropdownBodyRect.right - boundingElementRect.left;\n const maxWidthRight = boundingElementRect.right - dropdownBodyRect.left;\n maxWidth = Math.round(\n dropdownBodyRect.left > dropdownRect.left ? maxWidthRight : maxWidthLeft,\n );\n }\n\n const style = {\n ...styleFromProps,\n ...(maxHeight != null && maxHeight > minHeightBody\n ? { [BODY_MAX_HEIGHT_VAR]: `calc(${maxHeight}px - var(--uktdd-body-buffer))` }\n : null),\n ...(maxWidth != null && maxWidth > minWidthBody\n ? { [BODY_MAX_WIDTH_VAR]: `calc(${maxWidth}px - var(--uktdd-body-buffer))` }\n : null),\n };\n\n const anchorStyles = `\\\n[data-ukt-id=\"${id}\"] > :first-child {\n anchor-name: --uktdd-anchor${id};\n}\n[data-ukt-id=\"${id}\"] ${BODY_SELECTOR} {\n position-anchor: --uktdd-anchor${id};\n}`;\n\n return (\n <Fragment>\n <Style href=\"@acusti/dropdown/Dropdown\">{STYLES}</Style>\n <Style href={`@acusti/dropdown/Dropdown/${id}`}>{anchorStyles}</Style>\n <div\n className={clsx(ROOT_CLASS_NAME, className, {\n disabled,\n 'is-open': isOpen,\n 'is-searchable': isSearchable,\n })}\n data-ukt-id={id}\n onClick={onClick}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseOut={handleMouseOut}\n onMouseOver={handleMouseOver}\n onMouseUp={handleMouseUp}\n ref={handleRef}\n style={style}\n >\n {trigger}\n {/* TODO next version of Dropdown should use <Activity> for body https://react.dev/reference/react/Activity */}\n {isOpen ? (\n <div className={BODY_CLASS_NAME} ref={setDropdownBodyElement}>\n {childrenCount > 1 ? (children as ChildrenTuple)[1] : children}\n </div>\n ) : null}\n </div>\n </Fragment>\n );\n}\n\nfunction getBoundingAncestor(element?: MaybeHTMLElement): MaybeHTMLElement {\n while (element?.parentElement) {\n // If we’ve reached the body, use that as boundingElement\n if (element.parentElement.tagName === 'BODY') return element.parentElement;\n // Only need to check one overflow direction, because if either direction\n // is not visible, neither can be visible\n if (getComputedStyle(element.parentElement).overflowX !== 'visible') {\n return element.parentElement;\n }\n\n element = element.parentElement as MaybeHTMLElement;\n }\n\n return null;\n}\n"],"names":["ROOT_CLASS_NAME","ROOT_SELECTOR","BODY_CLASS_NAME","LABEL_CLASS_NAME","LABEL_TEXT_CLASS_NAME","TRIGGER_CLASS_NAME","BODY_SELECTOR","LABEL_SELECTOR","LABEL_TEXT_SELECTOR","TRIGGER_SELECTOR","BODY_MAX_HEIGHT_VAR","BODY_MAX_WIDTH_VAR","STYLES","SYSTEM_UI_FONT","ITEM_SELECTOR","getItemElements","dropdownElement","bodyElement","querySelector","items","querySelectorAll","length","children","getActiveItemElement","clearItemElementsState","itemElements","forEach","itemElement","hasAttribute","dataset","uktActive","setActiveItem","element","index","indexAddend","isExactMatch","text","Array","from","lastIndex","currentActiveIndex","findIndex","nextActiveIndex","itemTexts","map","innerText","textToCompare","toLowerCase","itemText","startsWith","bestMatch","getBestMatch","nextActiveItem","setAttribute","parentElement","scrollableParent","isScrollable","scrollHeight","clientHeight","parentRect","getBoundingClientRect","itemRect","isAboveTop","top","isBelowBottom","bottom","scrollTop","noop","CHILDREN_ERROR","TEXT_INPUT_SELECTOR","idCounter","Dropdown","t0","$","_c","allowCreate","allowEmpty","t1","className","disabled","hasItems","t2","isOpenOnMount","isSearchable","keepOpenOnSubmit","t3","label","minHeightBody","t4","minWidthBody","t5","name","onClick","onClose","onMouseDown","onMouseUp","onOpen","onSubmitItem","placeholder","style","styleFromProps","tabIndex","value","undefined","childrenCount","Children","count","Error","console","error","trigger","t6","isValidElement","isTriggerFromProps","isOpen","setIsOpen","useState","isOpening","setIsOpening","setDropdownElement","dropdownBodyElement","setDropdownBodyElement","id","_temp","inputElementRef","useRef","closingTimerRef","isOpeningTimerRef","currentInputMethodRef","clearEnteredCharactersTimerRef","enteredCharactersRef","mouseDownPositionRef","allowCreateRef","allowEmptyRef","hasItemsRef","isOpenRef","isOpeningRef","keepOpenOnSubmitRef","onCloseRef","onOpenRef","onSubmitItemRef","valueRef","t7","t8","current","useEffect","isMountedRef","t10","t9","t11","Symbol","for","clearTimeout","closeDropdown","t12","event","setTimeout","itemLabel","ownerDocument","activeElement","blur","nextValue","uktValue","handleSubmitItem","t13","t14","clientX","clientY","initialPosition","Math","abs","handleMouseMove","event_0","eventTarget","target","item","closest","element_0","handleMouseOver","t15","event_1","activeItem","eventRelatedTarget","relatedTarget","contains","handleMouseOut","t16","event_2","handleMouseDown","t17","event_3","eventTarget_0","handleMouseUp","t18","event_4","altKey","ctrlKey","key","metaKey","eventTarget_1","onEventHandled","stopPropagation","preventDefault","isEventTargetingDropdown","isTargetUsingKeyEvents","isEventTargetUsingKeyEvent","isEditingCharacters","test","slice","handleKeyDown","t19","ignoreUsedKeyboardEvents","onKeyDown","useKeyboardEvents","cleanupEventListenersRef","t20","ref","inputElement","firstElementChild","matches","handleGlobalMouseDown","t21","eventTarget_2","handleGlobalMouseUp","t22","target_0","eventTarget_3","handleGlobalFocusIn","t23","target_1","eventTarget_4","addEventListener","document","focus","handleInput","event_5","input","isDeleting","removeEventListener","handleRef","dropdownRect","useBoundingClientRect","dropdownBodyRect","getBoundingAncestor","boundingElement","boundingElementRect","maxHeight","maxWidth","maxHeightUp","maxHeightDown","round","maxWidthLeft","right","left","maxWidthRight","t24","anchorStyles","t25","t26","t27","t28","clsx","t29","t30","t31","tagName","getComputedStyle","overflowX"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sources":["../src/styles.ts","../src/helpers.ts","../src/Dropdown.tsx"],"sourcesContent":["import { SYSTEM_UI_FONT } from '@acusti/styling';\n\nexport const ROOT_CLASS_NAME = 'uktdropdown';\nexport const ROOT_SELECTOR = `.${ROOT_CLASS_NAME}`;\n\nexport const BODY_CLASS_NAME = `${ROOT_CLASS_NAME}-body`;\nexport const LABEL_CLASS_NAME = `${ROOT_CLASS_NAME}-label`;\nexport const LABEL_TEXT_CLASS_NAME = `${ROOT_CLASS_NAME}-label-text`;\nexport const TRIGGER_CLASS_NAME = `${ROOT_CLASS_NAME}-trigger`;\n\nexport const BODY_SELECTOR = `.${BODY_CLASS_NAME}`;\nexport const LABEL_SELECTOR = `.${LABEL_CLASS_NAME}`;\nexport const LABEL_TEXT_SELECTOR = `.${LABEL_TEXT_CLASS_NAME}`;\nexport const TRIGGER_SELECTOR = `.${TRIGGER_CLASS_NAME}`;\n\nexport const BODY_MAX_HEIGHT_VAR = '--uktdd-body-max-height';\nexport const BODY_MAX_WIDTH_VAR = '--uktdd-body-max-width';\n\nexport const STYLES = `\n:root {\n --uktdd-font-family: ${SYSTEM_UI_FONT};\n --uktdd-body-bg-color: #fff;\n --uktdd-body-bg-color-hover: rgb(105,162,249);\n --uktdd-body-color-hover: #fff;\n --uktdd-body-buffer: 10px;\n ${BODY_MAX_HEIGHT_VAR}: calc(100vh - var(--uktdd-body-buffer));\n ${BODY_MAX_WIDTH_VAR}: calc(100vw - var(--uktdd-body-buffer));\n --uktdd-body-pad-bottom: 9px;\n --uktdd-body-pad-left: 12px;\n --uktdd-body-pad-right: 12px;\n --uktdd-body-pad-top: 9px;\n --uktdd-label-pad-right: 10px;\n}\n${ROOT_SELECTOR},\n${TRIGGER_SELECTOR} {\n font-family: var(--uktdd-font-family);\n}\n${ROOT_SELECTOR} {\n width: max-content;\n}\n${ROOT_SELECTOR}.disabled {\n pointer-events: none;\n}\n${ROOT_SELECTOR} > * {\n cursor: default;\n}\n${LABEL_SELECTOR} {\n display: flex;\n align-items: center;\n}\n${LABEL_TEXT_SELECTOR} {\n padding-right: var(--uktdd-label-pad-right);\n}\n${BODY_SELECTOR} {\n box-sizing: border-box;\n position: absolute;\n top: anchor(bottom);\n left: anchor(left);\n bottom: auto;\n right: auto;\n position-try-fallbacks: --uktdd-top-left, --uktdd-bottom-right, --uktdd-top-right;\n min-height: 50px;\n max-height: var(${BODY_MAX_HEIGHT_VAR});\n min-width: min(50px, 100%);\n max-width: var(${BODY_MAX_WIDTH_VAR});\n overflow: auto;\n z-index: 2;\n padding: var(--uktdd-body-pad-top) var(--uktdd-body-pad-right) var(--uktdd-body-pad-bottom) var(--uktdd-body-pad-left);\n background-color: var(--uktdd-body-bg-color);\n box-shadow: 0 8px 18px rgba(0,0,0,0.25);\n}\n@position-try --uktdd-top-left {\n bottom: anchor(top);\n left: anchor(left);\n top: auto;\n right: auto;\n}\n@position-try --uktdd-bottom-right {\n top: anchor(bottom);\n right: anchor(right);\n bottom: auto;\n left: auto;\n}\n@position-try --uktdd-top-right {\n bottom: anchor(top);\n right: anchor(right);\n top: auto;\n left: auto;\n}\n${BODY_SELECTOR}.has-items {\n user-select: none;\n}\n${BODY_SELECTOR} [data-ukt-active] {\n background-color: var(--uktdd-body-bg-color-hover);\n color: var(--uktdd-body-color-hover);\n}\n`;\n","import { getBestMatch } from '@acusti/matchmaking';\n\nimport { BODY_SELECTOR } from './styles.js';\n\nexport const ITEM_SELECTOR = `[data-ukt-item], [data-ukt-value]`;\n\nexport const getItemElements = (dropdownElement: HTMLElement | null) => {\n if (!dropdownElement) return null;\n\n const bodyElement = dropdownElement.querySelector(BODY_SELECTOR);\n if (!bodyElement) return null;\n\n let items: HTMLCollection | NodeListOf<Element> =\n bodyElement.querySelectorAll(ITEM_SELECTOR);\n\n if (items.length) return items;\n // If no items found via [data-ukt-item] or [data-ukt-value] selector,\n // use first instance of multiple children found\n items = bodyElement.children;\n while (items.length === 1) {\n if (items[0].children == null) break;\n items = items[0].children;\n }\n // If unable to find an element with more than one child, treat direct child as items\n if (items.length === 1) {\n items = bodyElement.children;\n }\n return items;\n};\n\nexport const getActiveItemElement = (dropdownElement: HTMLElement | null) => {\n if (!dropdownElement) return null;\n return dropdownElement.querySelector('[data-ukt-active]') as HTMLElement | null;\n};\n\nconst clearItemElementsState = (itemElements: Array<HTMLElement>) => {\n itemElements.forEach((itemElement) => {\n if (itemElement.hasAttribute('data-ukt-active')) {\n delete itemElement.dataset.uktActive;\n }\n });\n};\n\nexport const setActiveItem = ({\n dropdownElement,\n element,\n index,\n indexAddend,\n isExactMatch,\n text,\n}:\n | {\n dropdownElement: HTMLElement;\n element: HTMLElement;\n index?: null;\n indexAddend?: null;\n isExactMatch?: null;\n text?: null;\n }\n | {\n dropdownElement: HTMLElement;\n element?: null;\n index: number;\n indexAddend?: null;\n isExactMatch?: null;\n text?: null;\n }\n | {\n dropdownElement: HTMLElement;\n element?: null;\n index?: null;\n indexAddend: number;\n isExactMatch?: null;\n text?: null;\n }\n | {\n dropdownElement: HTMLElement;\n element?: null;\n index?: null;\n indexAddend?: null;\n isExactMatch?: boolean;\n text: string;\n }) => {\n const items = getItemElements(dropdownElement);\n if (!items) return;\n\n const itemElements = Array.from(items) as Array<HTMLElement>;\n if (!itemElements.length) return;\n\n const lastIndex = itemElements.length - 1;\n const currentActiveIndex = itemElements.findIndex((itemElement) =>\n itemElement.hasAttribute('data-ukt-active'),\n );\n\n let nextActiveIndex = currentActiveIndex;\n if (typeof index === 'number') {\n // Negative index means count back from the end\n nextActiveIndex = index < 0 ? itemElements.length + index : index;\n }\n\n if (element) {\n nextActiveIndex = itemElements.findIndex(\n (itemElement) => itemElement === element,\n );\n } else if (typeof indexAddend === 'number') {\n // If there’s no currentActiveIndex and we are handling -1, start at lastIndex\n if (currentActiveIndex === -1 && indexAddend === -1) {\n nextActiveIndex = lastIndex;\n } else {\n nextActiveIndex += indexAddend;\n }\n // Keep it within the bounds of the items list\n if (nextActiveIndex < 0) {\n nextActiveIndex = 0;\n } else if (nextActiveIndex > lastIndex) {\n nextActiveIndex = lastIndex;\n }\n } else if (typeof text === 'string') {\n // If text is empty, clear existing active items and early return\n if (!text) {\n clearItemElementsState(itemElements);\n return;\n }\n\n const itemTexts = itemElements.map((itemElement) => itemElement.innerText);\n if (isExactMatch) {\n const textToCompare = text.toLowerCase();\n nextActiveIndex = itemTexts.findIndex((itemText) =>\n itemText.toLowerCase().startsWith(textToCompare),\n );\n // If isExactMatch is required and no exact match was found, clear active items\n if (nextActiveIndex === -1) {\n clearItemElementsState(itemElements);\n }\n } else {\n const bestMatch = getBestMatch({ items: itemTexts, text });\n nextActiveIndex = itemTexts.findIndex((itemText) => itemText === bestMatch);\n }\n }\n\n if (nextActiveIndex === -1 || nextActiveIndex === currentActiveIndex) return;\n\n // Clear any existing active dropdown body item state\n clearItemElementsState(itemElements);\n\n const nextActiveItem = items[nextActiveIndex];\n if (nextActiveItem != null) {\n nextActiveItem.setAttribute('data-ukt-active', '');\n // Find closest scrollable parent and ensure that next active item is visible\n let { parentElement } = nextActiveItem;\n let scrollableParent = null;\n while (!scrollableParent && parentElement && parentElement !== dropdownElement) {\n const isScrollable =\n parentElement.scrollHeight > parentElement.clientHeight + 15;\n if (isScrollable) {\n scrollableParent = parentElement;\n } else {\n parentElement = parentElement.parentElement;\n }\n }\n\n if (scrollableParent) {\n const parentRect = scrollableParent.getBoundingClientRect();\n const itemRect = nextActiveItem.getBoundingClientRect();\n const isAboveTop = itemRect.top < parentRect.top;\n const isBelowBottom = itemRect.bottom > parentRect.bottom;\n if (isAboveTop || isBelowBottom) {\n let { scrollTop } = scrollableParent;\n // Item isn’t fully visible; adjust scrollTop to put item within closest edge\n if (isAboveTop) {\n scrollTop -= parentRect.top - itemRect.top;\n } else {\n scrollTop += itemRect.bottom - parentRect.bottom;\n }\n scrollableParent.scrollTop = scrollTop;\n }\n }\n }\n};\n","/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/mouse-events-have-key-events, jsx-a11y/no-static-element-interactions */\nimport { Style } from '@acusti/styling';\nimport useBoundingClientRect from '@acusti/use-bounding-client-rect';\nimport useKeyboardEvents, {\n isEventTargetUsingKeyEvent,\n} from '@acusti/use-keyboard-events';\nimport clsx from 'clsx';\nimport {\n Children,\n type CSSProperties,\n Fragment,\n isValidElement,\n type JSX,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type SyntheticEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport {\n getActiveItemElement,\n getItemElements,\n ITEM_SELECTOR,\n setActiveItem,\n} from './helpers.js';\nimport {\n BODY_CLASS_NAME,\n BODY_MAX_HEIGHT_VAR,\n BODY_MAX_WIDTH_VAR,\n BODY_SELECTOR,\n LABEL_CLASS_NAME,\n LABEL_TEXT_CLASS_NAME,\n ROOT_CLASS_NAME,\n STYLES,\n TRIGGER_CLASS_NAME,\n} from './styles.js';\n\nexport type Item = {\n element: MaybeHTMLElement;\n event: Event | SyntheticEvent<HTMLElement>;\n label: string;\n value: string;\n};\n\nexport type Props = {\n /**\n * Boolean indicating if the user can submit a value not already in the\n * dropdown.\n */\n allowCreate?: boolean;\n /**\n * Boolean indicating if the user can submit an empty value (i.e. clear\n * the value). Defaults to true.\n */\n allowEmpty?: boolean;\n /**\n * Can take a single React element or exactly two renderable children.\n */\n children: ChildrenTuple | JSX.Element;\n className?: string;\n disabled?: boolean;\n /**\n * Group identifier string links dropdowns together into a menu\n * (like macOS top menubar).\n */\n group?: string;\n hasItems?: boolean;\n isOpenOnMount?: boolean;\n isSearchable?: boolean;\n keepOpenOnSubmit?: boolean;\n label?: string;\n minHeightBody?: number;\n minWidthBody?: number;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s name.\n */\n name?: string;\n onClick?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onClose?: () => unknown;\n onMouseDown?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onMouseUp?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onOpen?: () => unknown;\n onSubmitItem?: (payload: Item) => void;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s placeholder.\n */\n placeholder?: string;\n style?: CSSProperties;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s tabIndex.\n */\n tabIndex?: number;\n /**\n * Used as search input’s value if props.isSearchable === true\n * Used to determine if value has changed to avoid triggering onSubmitItem if not\n */\n value?: string;\n};\n\ntype ChildrenTuple = [ReactNode, ReactNode] | readonly [ReactNode, ReactNode];\n\ntype MaybeHTMLElement = HTMLElement | null;\n\ntype MousePosition = { clientX: number; clientY: number };\n\ntype TimeoutID = ReturnType<typeof setTimeout>;\n\nconst CHILDREN_ERROR =\n '@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';\nconst TEXT_INPUT_SELECTOR =\n 'input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea';\n\nexport default function Dropdown({\n allowCreate,\n allowEmpty = true,\n children,\n className,\n disabled,\n hasItems = true,\n isOpenOnMount,\n isSearchable,\n keepOpenOnSubmit = !hasItems,\n label,\n minHeightBody = 30,\n minWidthBody = 100,\n name,\n onClick,\n onClose,\n onMouseDown,\n onMouseUp,\n onOpen,\n onSubmitItem,\n placeholder,\n style: styleFromProps,\n tabIndex,\n value,\n}: Props) {\n const childrenCount = Children.count(children);\n if (childrenCount !== 1 && childrenCount !== 2) {\n if (childrenCount === 0) {\n throw new Error(CHILDREN_ERROR + ' Received no children.');\n }\n console.error(`${CHILDREN_ERROR} Received ${childrenCount} children.`);\n }\n\n let trigger: React.ReactNode;\n if (childrenCount > 1) {\n trigger = (children as ChildrenTuple)[0];\n }\n\n const [isOpen, setIsOpen] = useState<boolean>(isOpenOnMount ?? false);\n const [isOpening, setIsOpening] = useState<boolean>(!isOpenOnMount);\n const [dropdownElement, setDropdownElement] = useState<MaybeHTMLElement>(null);\n const [dropdownBodyElement, setDropdownBodyElement] =\n useState<MaybeHTMLElement>(null);\n const id = useId();\n\n const inputElementRef = useRef<HTMLInputElement | null>(null);\n const closingTimerRef = useRef<null | TimeoutID>(null);\n const isOpeningTimerRef = useRef<null | TimeoutID>(null);\n const currentInputMethodRef = useRef<'keyboard' | 'mouse'>('mouse');\n const clearEnteredCharactersTimerRef = useRef<null | TimeoutID>(null);\n const enteredCharactersRef = useRef<string>('');\n const mouseDownPositionRef = useRef<MousePosition | null>(null);\n\n const allowCreateRef = useRef(allowCreate);\n const allowEmptyRef = useRef(allowEmpty);\n const hasItemsRef = useRef(hasItems);\n const isOpenRef = useRef(isOpen);\n const isOpeningRef = useRef(isOpening);\n const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);\n const onCloseRef = useRef(onClose);\n const onOpenRef = useRef(onOpen);\n const onSubmitItemRef = useRef(onSubmitItem);\n const valueRef = useRef(value);\n\n useEffect(() => {\n allowCreateRef.current = allowCreate;\n allowEmptyRef.current = allowEmpty;\n hasItemsRef.current = hasItems;\n isOpenRef.current = isOpen;\n isOpeningRef.current = isOpening;\n keepOpenOnSubmitRef.current = keepOpenOnSubmit;\n onCloseRef.current = onClose;\n onOpenRef.current = onOpen;\n onSubmitItemRef.current = onSubmitItem;\n valueRef.current = value;\n }, [\n allowCreate,\n allowEmpty,\n hasItems,\n isOpen,\n isOpening,\n keepOpenOnSubmit,\n onClose,\n onOpen,\n onSubmitItem,\n value,\n ]);\n\n const isMountedRef = useRef(false);\n\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true;\n // If isOpenOnMount, trigger onOpen right away\n if (isOpenRef.current && onOpenRef.current) {\n onOpenRef.current();\n }\n return;\n }\n\n if (isOpen && onOpenRef.current) {\n onOpenRef.current();\n } else if (!isOpen && onCloseRef.current) {\n onCloseRef.current();\n }\n }, [isOpen]);\n\n const closeDropdown = () => {\n setIsOpen(false);\n setIsOpening(false);\n mouseDownPositionRef.current = null;\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current);\n closingTimerRef.current = null;\n }\n };\n\n const handleSubmitItem = (event: Event | React.SyntheticEvent<HTMLElement>) => {\n if (isOpenRef.current && !keepOpenOnSubmitRef.current) {\n // A short timeout before closing is better UX when user selects an item so dropdown\n // doesn’t close before expected. It also enables using <Link />s in the dropdown body.\n closingTimerRef.current = setTimeout(closeDropdown, 90);\n }\n\n if (!hasItemsRef.current) return;\n\n const element = getActiveItemElement(dropdownElement);\n if (!element && !allowCreateRef.current) {\n // If not allowEmpty, don’t allow submitting an empty item\n if (!allowEmptyRef.current) return;\n // If we have an input element as trigger & the user didn’t clear the text, do nothing\n if (inputElementRef.current?.value) return;\n }\n\n let itemLabel = element?.innerText ?? '';\n if (inputElementRef.current) {\n if (!element) {\n itemLabel = inputElementRef.current.value;\n } else {\n inputElementRef.current.value = itemLabel;\n }\n\n if (\n inputElementRef.current ===\n inputElementRef.current.ownerDocument.activeElement\n ) {\n inputElementRef.current.blur();\n }\n }\n\n const nextValue = element?.dataset.uktValue ?? itemLabel;\n // If parent is controlling Dropdown via props.value and nextValue is the same, do nothing\n if (valueRef.current && valueRef.current === nextValue) return;\n\n if (onSubmitItemRef.current) {\n onSubmitItemRef.current({\n element,\n event,\n label: itemLabel,\n value: nextValue,\n });\n }\n };\n\n const handleMouseMove = ({ clientX, clientY }: ReactMouseEvent<HTMLElement>) => {\n currentInputMethodRef.current = 'mouse';\n const initialPosition = mouseDownPositionRef.current;\n if (!initialPosition) return;\n if (\n Math.abs(initialPosition.clientX - clientX) < 12 &&\n Math.abs(initialPosition.clientY - clientY) < 12\n ) {\n return;\n }\n setIsOpening(false);\n };\n\n const handleMouseOver = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasItemsRef.current) return;\n\n // If user isn’t currently using the mouse to navigate the dropdown, do nothing\n if (currentInputMethodRef.current !== 'mouse') return;\n\n // Ensure we have the dropdown root HTMLElement\n if (!dropdownElement) return;\n\n const itemElements = getItemElements(dropdownElement);\n if (!itemElements) return;\n\n const eventTarget = event.target as HTMLElement;\n const item = eventTarget.closest(ITEM_SELECTOR) as MaybeHTMLElement;\n const element = item ?? eventTarget;\n for (const itemElement of itemElements) {\n if (itemElement === element) {\n setActiveItem({ dropdownElement, element });\n return;\n }\n }\n };\n\n const handleMouseOut = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasItemsRef.current) return;\n const activeItem = getActiveItemElement(dropdownElement);\n if (!activeItem) return;\n const eventRelatedTarget = event.relatedTarget as HTMLElement;\n if (activeItem !== event.target || activeItem.contains(eventRelatedTarget)) {\n return;\n }\n // If user moused out of activeItem (not into a descendant), it’s no longer active\n delete activeItem.dataset.uktActive;\n };\n\n const handleMouseDown = (event: ReactMouseEvent<HTMLElement>) => {\n if (onMouseDown) onMouseDown(event);\n if (isOpenRef.current) return;\n\n setIsOpen(true);\n setIsOpening(true);\n mouseDownPositionRef.current = {\n clientX: event.clientX,\n clientY: event.clientY,\n };\n isOpeningTimerRef.current = setTimeout(() => {\n setIsOpening(false);\n isOpeningTimerRef.current = null;\n }, 1000);\n };\n\n const handleMouseUp = (event: ReactMouseEvent<HTMLElement>) => {\n if (onMouseUp) onMouseUp(event);\n // If dropdown is still opening or isn’t open or is closing, do nothing\n if (isOpeningRef.current || !isOpenRef.current || closingTimerRef.current) {\n return;\n }\n\n const eventTarget = event.target as HTMLElement;\n // If click was outside dropdown body, don’t trigger submit\n if (!eventTarget.closest(BODY_SELECTOR)) {\n // Don’t close dropdown if isOpening or search input is focused\n if (\n !isOpeningRef.current &&\n inputElementRef.current !== eventTarget.ownerDocument.activeElement\n ) {\n closeDropdown();\n }\n return;\n }\n\n // If dropdown has no items and click was within dropdown body, do nothing\n if (!hasItemsRef.current) return;\n\n handleSubmitItem(event);\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n const { altKey, ctrlKey, key, metaKey } = event;\n const eventTarget = event.target as HTMLElement;\n if (!dropdownElement) return;\n\n const onEventHandled = () => {\n event.stopPropagation();\n event.preventDefault();\n currentInputMethodRef.current = 'keyboard';\n };\n\n const isEventTargetingDropdown = dropdownElement.contains(eventTarget);\n\n if (!isOpenRef.current) {\n // If dropdown is closed, don’t handle key events if event target isn’t within dropdown\n if (!isEventTargetingDropdown) return;\n // Open the dropdown on spacebar, enter, or if isSearchable and user hits the ↑/↓ arrows\n if (\n key === ' ' ||\n key === 'Enter' ||\n (hasItemsRef.current && (key === 'ArrowUp' || key === 'ArrowDown'))\n ) {\n onEventHandled();\n setIsOpen(true);\n }\n return;\n }\n\n const isTargetUsingKeyEvents = isEventTargetUsingKeyEvent(event);\n\n // If dropdown isOpen + hasItems & eventTargetNotUsingKeyEvents, handle characters\n if (hasItemsRef.current && !isTargetUsingKeyEvents) {\n let isEditingCharacters = !ctrlKey && !metaKey && /^[A-Za-z0-9]$/.test(key);\n // User could also be editing characters if there are already characters entered\n // and they are hitting delete or spacebar\n if (!isEditingCharacters && enteredCharactersRef.current) {\n isEditingCharacters = key === ' ' || key === 'Backspace';\n }\n\n if (isEditingCharacters) {\n onEventHandled();\n if (key === 'Backspace') {\n enteredCharactersRef.current = enteredCharactersRef.current.slice(\n 0,\n -1,\n );\n } else {\n enteredCharactersRef.current += key;\n }\n\n setActiveItem({\n dropdownElement,\n // If props.allowCreate, only override the input’s value with an\n // exact text match so user can enter a value not in items\n isExactMatch: allowCreateRef.current,\n text: enteredCharactersRef.current,\n });\n\n if (clearEnteredCharactersTimerRef.current) {\n clearTimeout(clearEnteredCharactersTimerRef.current);\n }\n\n clearEnteredCharactersTimerRef.current = setTimeout(() => {\n enteredCharactersRef.current = '';\n clearEnteredCharactersTimerRef.current = null;\n }, 1500);\n\n return;\n }\n }\n\n // If dropdown isOpen, handle submitting the value\n if (key === 'Enter' || (key === ' ' && !inputElementRef.current)) {\n onEventHandled();\n handleSubmitItem(event);\n return;\n }\n\n // If dropdown isOpen, handle closing it on escape or spacebar if !hasItems\n if (\n key === 'Escape' ||\n (isEventTargetingDropdown && key === ' ' && !hasItemsRef.current)\n ) {\n // Close dropdown if hasItems or event target not using key events\n if (hasItemsRef.current || !isTargetUsingKeyEvents) {\n closeDropdown();\n }\n return;\n }\n\n // Handle ↑/↓ arrows\n if (hasItemsRef.current) {\n if (key === 'ArrowUp') {\n onEventHandled();\n if (altKey || metaKey) {\n setActiveItem({ dropdownElement, index: 0 });\n } else {\n setActiveItem({ dropdownElement, indexAddend: -1 });\n }\n return;\n }\n if (key === 'ArrowDown') {\n onEventHandled();\n if (altKey || metaKey) {\n // Using a negative index counts back from the end\n setActiveItem({ dropdownElement, index: -1 });\n } else {\n setActiveItem({ dropdownElement, indexAddend: 1 });\n }\n return;\n }\n }\n };\n\n useKeyboardEvents({ ignoreUsedKeyboardEvents: false, onKeyDown: handleKeyDown });\n\n const handleRef = (ref: HTMLDivElement | null): (() => void) | void => {\n setDropdownElement(ref);\n if (!ref) return;\n\n const { ownerDocument } = ref;\n let inputElement = inputElementRef.current;\n // Check if trigger is a textual input or textarea element\n if (!inputElement && ref.firstElementChild) {\n if (ref.firstElementChild.matches(TEXT_INPUT_SELECTOR)) {\n inputElement = ref.firstElementChild as HTMLInputElement;\n } else {\n inputElement = ref.firstElementChild.querySelector(TEXT_INPUT_SELECTOR);\n }\n inputElementRef.current = inputElement;\n }\n\n const handleGlobalMouseDown = ({ target }: MouseEvent) => {\n const eventTarget = target as HTMLElement;\n if (!ref.contains(eventTarget)) {\n // Close dropdown on an outside click\n closeDropdown();\n }\n };\n\n const handleGlobalMouseUp = ({ target }: MouseEvent) => {\n if (!isOpenRef.current || closingTimerRef.current) return;\n\n // If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp\n if (isOpeningRef.current) {\n setIsOpening(false);\n if (isOpeningTimerRef.current) {\n clearTimeout(isOpeningTimerRef.current);\n isOpeningTimerRef.current = null;\n }\n return;\n }\n\n const eventTarget = target as HTMLElement;\n // Only handle mouseup events from outside the dropdown here\n if (!ref.contains(eventTarget)) {\n closeDropdown();\n }\n };\n\n // Close dropdown if any element is focused outside of this dropdown\n const handleGlobalFocusIn = ({ target }: Event) => {\n if (!isOpenRef.current) return;\n\n const eventTarget = target as HTMLElement;\n // If focused element is a descendant or a parent of the dropdown, do nothing\n if (ref.contains(eventTarget) || eventTarget.contains(ref)) {\n return;\n }\n\n closeDropdown();\n };\n\n document.addEventListener('focusin', handleGlobalFocusIn);\n document.addEventListener('mousedown', handleGlobalMouseDown);\n document.addEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.addEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);\n }\n\n // If dropdown should be open on mount, focus it\n if (isOpenOnMount) {\n ref.focus();\n }\n\n const handleInput = (event: Event) => {\n if (!isOpenRef.current) setIsOpen(true);\n\n const input = event.target as HTMLInputElement;\n const isDeleting = enteredCharactersRef.current.length > input.value.length;\n enteredCharactersRef.current = input.value;\n // When deleting text, if there’s already an active item and\n // input isn’t empty, preserve the active item, else update it\n if (isDeleting && input.value.length && getActiveItemElement(ref)) {\n return;\n }\n\n setActiveItem({\n dropdownElement: ref,\n // If props.allowCreate, only override the input’s value with an\n // exact text match so user can enter a value not in items\n isExactMatch: allowCreateRef.current,\n text: enteredCharactersRef.current,\n });\n };\n\n if (inputElement) {\n inputElement.addEventListener('input', handleInput);\n }\n\n return () => {\n document.removeEventListener('focusin', handleGlobalFocusIn);\n document.removeEventListener('mousedown', handleGlobalMouseDown);\n document.removeEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.removeEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);\n }\n\n if (inputElement) {\n inputElement.removeEventListener('input', handleInput);\n }\n };\n };\n\n if (!isValidElement(trigger)) {\n if (isSearchable) {\n trigger = (\n <input\n autoComplete=\"off\"\n className={TRIGGER_CLASS_NAME}\n defaultValue={value ?? ''}\n disabled={disabled}\n name={name}\n onFocus={() => setIsOpen(true)}\n placeholder={placeholder}\n ref={inputElementRef}\n tabIndex={tabIndex}\n type=\"text\"\n />\n );\n } else {\n trigger = (\n <button className={TRIGGER_CLASS_NAME} tabIndex={0}>\n {trigger}\n </button>\n );\n }\n }\n\n if (label) {\n trigger = (\n <label className={LABEL_CLASS_NAME}>\n <div className={LABEL_TEXT_CLASS_NAME}>{label}</div>\n {trigger}\n </label>\n );\n }\n\n const dropdownRect = useBoundingClientRect(dropdownElement);\n const dropdownBodyRect = useBoundingClientRect(dropdownBodyElement);\n const boundingElement = getBoundingAncestor(dropdownBodyElement);\n const boundingElementRect = useBoundingClientRect(boundingElement);\n let maxHeight;\n let maxWidth;\n if (\n dropdownBodyRect.top != null &&\n dropdownRect.top != null &&\n boundingElementRect.top != null\n ) {\n const maxHeightUp = dropdownBodyRect.bottom - boundingElementRect.top;\n const maxHeightDown = boundingElementRect.bottom - dropdownBodyRect.top;\n maxHeight = Math.round(\n dropdownBodyRect.top > dropdownRect.top ? maxHeightDown : maxHeightUp,\n );\n const maxWidthLeft = dropdownBodyRect.right - boundingElementRect.left;\n const maxWidthRight = boundingElementRect.right - dropdownBodyRect.left;\n maxWidth = Math.round(\n dropdownBodyRect.left > dropdownRect.left ? maxWidthRight : maxWidthLeft,\n );\n }\n\n const style = {\n ...styleFromProps,\n ...(maxHeight != null && maxHeight > minHeightBody\n ? { [BODY_MAX_HEIGHT_VAR]: `calc(${maxHeight}px - var(--uktdd-body-buffer))` }\n : null),\n ...(maxWidth != null && maxWidth > minWidthBody\n ? { [BODY_MAX_WIDTH_VAR]: `calc(${maxWidth}px - var(--uktdd-body-buffer))` }\n : null),\n };\n\n const anchorStyles = `\\\n[data-ukt-id=\"${id}\"] > :first-child {\n anchor-name: --uktdd-anchor${id};\n}\n[data-ukt-id=\"${id}\"] ${BODY_SELECTOR} {\n position-anchor: --uktdd-anchor${id};\n}`;\n\n return (\n <Fragment>\n <Style href=\"@acusti/dropdown/Dropdown\">{STYLES}</Style>\n <Style href={`@acusti/dropdown/Dropdown/${id}`}>{anchorStyles}</Style>\n <div\n className={clsx(ROOT_CLASS_NAME, className, {\n disabled,\n 'is-open': isOpen,\n 'is-searchable': isSearchable,\n })}\n data-ukt-id={id}\n onClick={onClick}\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseOut={handleMouseOut}\n onMouseOver={handleMouseOver}\n onMouseUp={handleMouseUp}\n ref={handleRef}\n style={style}\n >\n {trigger}\n {/* TODO next version of Dropdown should use <Activity> for body https://react.dev/reference/react/Activity */}\n {isOpen ? (\n <div className={BODY_CLASS_NAME} ref={setDropdownBodyElement}>\n {childrenCount > 1 ? (children as ChildrenTuple)[1] : children}\n </div>\n ) : null}\n </div>\n </Fragment>\n );\n}\n\nfunction getBoundingAncestor(element?: MaybeHTMLElement): MaybeHTMLElement {\n while (element?.parentElement) {\n // If we’ve reached the body, use that as boundingElement\n if (element.parentElement.tagName === 'BODY') return element.parentElement;\n // Only need to check one overflow direction, because if either direction\n // is not visible, neither can be visible\n if (getComputedStyle(element.parentElement).overflowX !== 'visible') {\n return element.parentElement;\n }\n\n element = element.parentElement as MaybeHTMLElement;\n }\n\n return null;\n}\n"],"names":["ROOT_CLASS_NAME","ROOT_SELECTOR","BODY_CLASS_NAME","LABEL_CLASS_NAME","LABEL_TEXT_CLASS_NAME","TRIGGER_CLASS_NAME","BODY_SELECTOR","LABEL_SELECTOR","LABEL_TEXT_SELECTOR","TRIGGER_SELECTOR","BODY_MAX_HEIGHT_VAR","BODY_MAX_WIDTH_VAR","STYLES","SYSTEM_UI_FONT","ITEM_SELECTOR","getItemElements","dropdownElement","bodyElement","querySelector","items","querySelectorAll","length","children","getActiveItemElement","clearItemElementsState","itemElements","forEach","itemElement","hasAttribute","dataset","uktActive","setActiveItem","element","index","indexAddend","isExactMatch","text","Array","from","lastIndex","currentActiveIndex","findIndex","nextActiveIndex","itemTexts","map","innerText","textToCompare","toLowerCase","itemText","startsWith","bestMatch","getBestMatch","nextActiveItem","setAttribute","parentElement","scrollableParent","isScrollable","scrollHeight","clientHeight","parentRect","getBoundingClientRect","itemRect","isAboveTop","top","isBelowBottom","bottom","scrollTop","CHILDREN_ERROR","TEXT_INPUT_SELECTOR","Dropdown","t0","$","_c","allowCreate","allowEmpty","t1","className","disabled","hasItems","t2","isOpenOnMount","isSearchable","keepOpenOnSubmit","t3","label","minHeightBody","t4","minWidthBody","t5","name","onClick","onClose","onMouseDown","onMouseUp","onOpen","onSubmitItem","placeholder","style","styleFromProps","tabIndex","value","undefined","childrenCount","Children","count","Error","console","error","trigger","isOpen","setIsOpen","useState","isOpening","setIsOpening","setDropdownElement","dropdownBodyElement","setDropdownBodyElement","id","useId","inputElementRef","useRef","closingTimerRef","isOpeningTimerRef","currentInputMethodRef","clearEnteredCharactersTimerRef","enteredCharactersRef","mouseDownPositionRef","allowCreateRef","allowEmptyRef","hasItemsRef","isOpenRef","isOpeningRef","keepOpenOnSubmitRef","onCloseRef","onOpenRef","onSubmitItemRef","valueRef","t6","t7","current","useEffect","isMountedRef","t8","t9","t10","Symbol","for","clearTimeout","closeDropdown","t11","event","setTimeout","itemLabel","ownerDocument","activeElement","blur","nextValue","uktValue","handleSubmitItem","t12","t13","clientX","clientY","initialPosition","Math","abs","handleMouseMove","event_0","eventTarget","target","item","closest","element_0","handleMouseOver","t14","event_1","activeItem","eventRelatedTarget","relatedTarget","contains","handleMouseOut","t15","event_2","handleMouseDown","t16","event_3","eventTarget_0","handleMouseUp","t17","event_4","altKey","ctrlKey","key","metaKey","eventTarget_1","onEventHandled","stopPropagation","preventDefault","isEventTargetingDropdown","isTargetUsingKeyEvents","isEventTargetUsingKeyEvent","isEditingCharacters","test","slice","handleKeyDown","t18","ignoreUsedKeyboardEvents","onKeyDown","useKeyboardEvents","t19","ref","inputElement","firstElementChild","matches","handleGlobalMouseDown","t20","eventTarget_2","handleGlobalMouseUp","t21","target_0","eventTarget_3","handleGlobalFocusIn","t22","target_1","eventTarget_4","document","addEventListener","focus","handleInput","event_5","input","isDeleting","removeEventListener","handleRef","isValidElement","dropdownRect","useBoundingClientRect","dropdownBodyRect","getBoundingAncestor","boundingElement","boundingElementRect","maxHeight","maxWidth","maxHeightUp","maxHeightDown","round","maxWidthLeft","right","left","maxWidthRight","t23","anchorStyles","t24","t25","t26","t27","clsx","t28","t29","t30","tagName","getComputedStyle","overflowX"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acusti/dropdown",
|
|
3
|
-
"version": "0.50.
|
|
3
|
+
"version": "0.50.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": "./dist/Dropdown.js",
|
|
@@ -44,16 +44,16 @@
|
|
|
44
44
|
"@testing-library/dom": "^10.4.0",
|
|
45
45
|
"@testing-library/react": "^16.3.0",
|
|
46
46
|
"@testing-library/user-event": "^14.6.1",
|
|
47
|
-
"@types/react": "^19.1.
|
|
48
|
-
"@vitejs/plugin-react": "^4.
|
|
47
|
+
"@types/react": "^19.1.8",
|
|
48
|
+
"@vitejs/plugin-react": "^4.6.0",
|
|
49
49
|
"babel-plugin-react-compiler": "rc",
|
|
50
|
-
"happy-dom": "^
|
|
50
|
+
"happy-dom": "^18.0.1",
|
|
51
51
|
"react": "^19",
|
|
52
52
|
"react-dom": "^19",
|
|
53
53
|
"typescript": "5.8.3",
|
|
54
|
-
"unplugin-dts": "^1.0.0-beta.
|
|
55
|
-
"vite": "^
|
|
56
|
-
"vitest": "^3.
|
|
54
|
+
"unplugin-dts": "^1.0.0-beta.2",
|
|
55
|
+
"vite": "^7.0.0-0",
|
|
56
|
+
"vitest": "^3.2.4"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@acusti/matchmaking": "^0.10.0",
|