@acusti/dropdown 0.48.0 → 0.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Dropdown.d.ts +4 -2
- package/dist/Dropdown.js +239 -209
- package/dist/Dropdown.js.map +1 -1
- package/dist/styles.d.ts +1 -1
- package/package.json +2 -2
package/dist/Dropdown.d.ts
CHANGED
|
@@ -32,6 +32,8 @@ export type Props = {
|
|
|
32
32
|
isSearchable?: boolean;
|
|
33
33
|
keepOpenOnSubmit?: boolean;
|
|
34
34
|
label?: string;
|
|
35
|
+
minHeightBody?: number;
|
|
36
|
+
minWidthBody?: number;
|
|
35
37
|
/**
|
|
36
38
|
* Only usable in conjunction with {isSearchable: true}.
|
|
37
39
|
* Used as search input’s name.
|
|
@@ -60,7 +62,7 @@ export type Props = {
|
|
|
60
62
|
*/
|
|
61
63
|
value?: string;
|
|
62
64
|
};
|
|
63
|
-
type ChildrenTuple = [React.ReactNode, React.ReactNode];
|
|
65
|
+
type ChildrenTuple = [React.ReactNode, React.ReactNode] | readonly [React.ReactNode, React.ReactNode];
|
|
64
66
|
type MaybeHTMLElement = HTMLElement | null;
|
|
65
|
-
export default function Dropdown({ allowCreate, allowEmpty, children, className, disabled, hasItems, isOpenOnMount, isSearchable, keepOpenOnSubmit, label, name, onClick, onClose, onMouseDown, onMouseUp, onOpen, onSubmitItem, placeholder, style: styleFromProps, tabIndex, value, }: Props): React.JSX.Element;
|
|
67
|
+
export default function Dropdown({ allowCreate, allowEmpty, children, className, disabled, hasItems, isOpenOnMount, isSearchable, keepOpenOnSubmit, label, minHeightBody, minWidthBody, name, onClick, onClose, onMouseDown, onMouseUp, onOpen, onSubmitItem, placeholder, style: styleFromProps, tabIndex, value, }: Props): React.JSX.Element;
|
|
66
68
|
export {};
|
package/dist/Dropdown.js
CHANGED
|
@@ -58,6 +58,8 @@ ${BODY_SELECTOR} {
|
|
|
58
58
|
position: absolute;
|
|
59
59
|
top: anchor(bottom);
|
|
60
60
|
left: anchor(left);
|
|
61
|
+
bottom: auto;
|
|
62
|
+
right: auto;
|
|
61
63
|
position-try-fallbacks: --uktdd-top-left, --uktdd-bottom-right, --uktdd-top-right;
|
|
62
64
|
min-height: 50px;
|
|
63
65
|
max-height: var(${BODY_MAX_HEIGHT_VAR});
|
|
@@ -72,20 +74,20 @@ ${BODY_SELECTOR} {
|
|
|
72
74
|
@position-try --uktdd-top-left {
|
|
73
75
|
bottom: anchor(top);
|
|
74
76
|
left: anchor(left);
|
|
75
|
-
top:
|
|
76
|
-
right:
|
|
77
|
+
top: auto;
|
|
78
|
+
right: auto;
|
|
77
79
|
}
|
|
78
80
|
@position-try --uktdd-bottom-right {
|
|
79
81
|
top: anchor(bottom);
|
|
80
82
|
right: anchor(right);
|
|
81
|
-
bottom:
|
|
82
|
-
left:
|
|
83
|
+
bottom: auto;
|
|
84
|
+
left: auto;
|
|
83
85
|
}
|
|
84
86
|
@position-try --uktdd-top-right {
|
|
85
87
|
bottom: anchor(top);
|
|
86
88
|
right: anchor(right);
|
|
87
|
-
top:
|
|
88
|
-
left:
|
|
89
|
+
top: auto;
|
|
90
|
+
left: auto;
|
|
89
91
|
}
|
|
90
92
|
${BODY_SELECTOR}.has-items {
|
|
91
93
|
user-select: none;
|
|
@@ -223,7 +225,7 @@ const CHILDREN_ERROR = "@acusti/dropdown requires either 1 child (the dropdown b
|
|
|
223
225
|
const TEXT_INPUT_SELECTOR = "input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea";
|
|
224
226
|
let idCounter = 0;
|
|
225
227
|
function Dropdown(t0) {
|
|
226
|
-
const $ = c(
|
|
228
|
+
const $ = c(119);
|
|
227
229
|
const {
|
|
228
230
|
allowCreate,
|
|
229
231
|
allowEmpty: t1,
|
|
@@ -235,6 +237,8 @@ function Dropdown(t0) {
|
|
|
235
237
|
isSearchable,
|
|
236
238
|
keepOpenOnSubmit: t3,
|
|
237
239
|
label,
|
|
240
|
+
minHeightBody: t4,
|
|
241
|
+
minWidthBody: t5,
|
|
238
242
|
name,
|
|
239
243
|
onClick,
|
|
240
244
|
onClose,
|
|
@@ -250,6 +254,8 @@ function Dropdown(t0) {
|
|
|
250
254
|
const allowEmpty = t1 === void 0 ? true : t1;
|
|
251
255
|
const hasItems = t2 === void 0 ? true : t2;
|
|
252
256
|
const keepOpenOnSubmit = t3 === void 0 ? !hasItems : t3;
|
|
257
|
+
const minHeightBody = t4 === void 0 ? 30 : t4;
|
|
258
|
+
const minWidthBody = t5 === void 0 ? 100 : t5;
|
|
253
259
|
const childrenCount = Children.count(children);
|
|
254
260
|
if (childrenCount !== 1 && childrenCount !== 2) {
|
|
255
261
|
if (childrenCount === 0) {
|
|
@@ -261,15 +267,15 @@ function Dropdown(t0) {
|
|
|
261
267
|
if (childrenCount > 1) {
|
|
262
268
|
trigger = children[0];
|
|
263
269
|
}
|
|
264
|
-
let
|
|
270
|
+
let t6;
|
|
265
271
|
if ($[0] !== trigger) {
|
|
266
|
-
|
|
272
|
+
t6 = React.isValidElement(trigger);
|
|
267
273
|
$[0] = trigger;
|
|
268
|
-
$[1] =
|
|
274
|
+
$[1] = t6;
|
|
269
275
|
} else {
|
|
270
|
-
|
|
276
|
+
t6 = $[1];
|
|
271
277
|
}
|
|
272
|
-
const isTriggerFromProps =
|
|
278
|
+
const isTriggerFromProps = t6;
|
|
273
279
|
const [isOpen, setIsOpen] = useState(isOpenOnMount ?? false);
|
|
274
280
|
const [isOpening, setIsOpening] = useState(!isOpenOnMount);
|
|
275
281
|
const [dropdownElement, setDropdownElement] = useState(null);
|
|
@@ -292,10 +298,10 @@ function Dropdown(t0) {
|
|
|
292
298
|
const onOpenRef = useRef(onOpen);
|
|
293
299
|
const onSubmitItemRef = useRef(onSubmitItem);
|
|
294
300
|
const valueRef = useRef(value);
|
|
295
|
-
let
|
|
296
|
-
let
|
|
301
|
+
let t7;
|
|
302
|
+
let t8;
|
|
297
303
|
if ($[2] !== allowCreate || $[3] !== allowEmpty || $[4] !== hasItems || $[5] !== isOpen || $[6] !== isOpening || $[7] !== keepOpenOnSubmit || $[8] !== onClose || $[9] !== onOpen || $[10] !== onSubmitItem || $[11] !== value) {
|
|
298
|
-
|
|
304
|
+
t7 = () => {
|
|
299
305
|
allowCreateRef.current = allowCreate;
|
|
300
306
|
allowEmptyRef.current = allowEmpty;
|
|
301
307
|
hasItemsRef.current = hasItems;
|
|
@@ -307,7 +313,7 @@ function Dropdown(t0) {
|
|
|
307
313
|
onSubmitItemRef.current = onSubmitItem;
|
|
308
314
|
valueRef.current = value;
|
|
309
315
|
};
|
|
310
|
-
|
|
316
|
+
t8 = [allowCreate, allowEmpty, hasItems, isOpen, isOpening, keepOpenOnSubmit, onClose, onOpen, onSubmitItem, value];
|
|
311
317
|
$[2] = allowCreate;
|
|
312
318
|
$[3] = allowEmpty;
|
|
313
319
|
$[4] = hasItems;
|
|
@@ -318,18 +324,18 @@ function Dropdown(t0) {
|
|
|
318
324
|
$[9] = onOpen;
|
|
319
325
|
$[10] = onSubmitItem;
|
|
320
326
|
$[11] = value;
|
|
321
|
-
$[12] =
|
|
322
|
-
$[13] =
|
|
327
|
+
$[12] = t7;
|
|
328
|
+
$[13] = t8;
|
|
323
329
|
} else {
|
|
324
|
-
|
|
325
|
-
|
|
330
|
+
t7 = $[12];
|
|
331
|
+
t8 = $[13];
|
|
326
332
|
}
|
|
327
|
-
useEffect(
|
|
333
|
+
useEffect(t7, t8);
|
|
328
334
|
const isMountedRef = useRef(false);
|
|
329
|
-
let
|
|
330
|
-
let
|
|
335
|
+
let t10;
|
|
336
|
+
let t9;
|
|
331
337
|
if ($[14] !== isOpen) {
|
|
332
|
-
|
|
338
|
+
t9 = () => {
|
|
333
339
|
if (!isMountedRef.current) {
|
|
334
340
|
isMountedRef.current = true;
|
|
335
341
|
if (isOpenRef.current && onOpenRef.current) {
|
|
@@ -345,18 +351,18 @@ function Dropdown(t0) {
|
|
|
345
351
|
}
|
|
346
352
|
}
|
|
347
353
|
};
|
|
348
|
-
|
|
354
|
+
t10 = [isOpen];
|
|
349
355
|
$[14] = isOpen;
|
|
350
|
-
$[15] =
|
|
351
|
-
$[16] =
|
|
356
|
+
$[15] = t10;
|
|
357
|
+
$[16] = t9;
|
|
352
358
|
} else {
|
|
353
|
-
|
|
354
|
-
|
|
359
|
+
t10 = $[15];
|
|
360
|
+
t9 = $[16];
|
|
355
361
|
}
|
|
356
|
-
useEffect(
|
|
357
|
-
let
|
|
362
|
+
useEffect(t9, t10);
|
|
363
|
+
let t11;
|
|
358
364
|
if ($[17] !== setIsOpen || $[18] !== setIsOpening) {
|
|
359
|
-
|
|
365
|
+
t11 = () => {
|
|
360
366
|
setIsOpen(false);
|
|
361
367
|
setIsOpening(false);
|
|
362
368
|
mouseDownPositionRef.current = null;
|
|
@@ -367,14 +373,14 @@ function Dropdown(t0) {
|
|
|
367
373
|
};
|
|
368
374
|
$[17] = setIsOpen;
|
|
369
375
|
$[18] = setIsOpening;
|
|
370
|
-
$[19] =
|
|
376
|
+
$[19] = t11;
|
|
371
377
|
} else {
|
|
372
|
-
|
|
378
|
+
t11 = $[19];
|
|
373
379
|
}
|
|
374
|
-
const closeDropdown =
|
|
375
|
-
let
|
|
380
|
+
const closeDropdown = t11;
|
|
381
|
+
let t12;
|
|
376
382
|
if ($[20] !== closeDropdown || $[21] !== dropdownElement) {
|
|
377
|
-
|
|
383
|
+
t12 = (event) => {
|
|
378
384
|
var _a;
|
|
379
385
|
if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
|
|
380
386
|
closingTimerRef.current = setTimeout(closeDropdown, 90);
|
|
@@ -417,18 +423,18 @@ function Dropdown(t0) {
|
|
|
417
423
|
};
|
|
418
424
|
$[20] = closeDropdown;
|
|
419
425
|
$[21] = dropdownElement;
|
|
420
|
-
$[22] =
|
|
426
|
+
$[22] = t12;
|
|
421
427
|
} else {
|
|
422
|
-
|
|
428
|
+
t12 = $[22];
|
|
423
429
|
}
|
|
424
|
-
const handleSubmitItem =
|
|
425
|
-
let
|
|
430
|
+
const handleSubmitItem = t12;
|
|
431
|
+
let t13;
|
|
426
432
|
if ($[23] !== setIsOpening) {
|
|
427
|
-
|
|
433
|
+
t13 = (t142) => {
|
|
428
434
|
const {
|
|
429
435
|
clientX,
|
|
430
436
|
clientY
|
|
431
|
-
} =
|
|
437
|
+
} = t142;
|
|
432
438
|
currentInputMethodRef.current = "mouse";
|
|
433
439
|
const initialPosition = mouseDownPositionRef.current;
|
|
434
440
|
if (!initialPosition) {
|
|
@@ -440,14 +446,14 @@ function Dropdown(t0) {
|
|
|
440
446
|
setIsOpening(false);
|
|
441
447
|
};
|
|
442
448
|
$[23] = setIsOpening;
|
|
443
|
-
$[24] =
|
|
449
|
+
$[24] = t13;
|
|
444
450
|
} else {
|
|
445
|
-
|
|
451
|
+
t13 = $[24];
|
|
446
452
|
}
|
|
447
|
-
const handleMouseMove =
|
|
448
|
-
let
|
|
453
|
+
const handleMouseMove = t13;
|
|
454
|
+
let t14;
|
|
449
455
|
if ($[25] !== dropdownElement) {
|
|
450
|
-
|
|
456
|
+
t14 = (event_0) => {
|
|
451
457
|
if (!hasItemsRef.current) {
|
|
452
458
|
return;
|
|
453
459
|
}
|
|
@@ -475,14 +481,14 @@ function Dropdown(t0) {
|
|
|
475
481
|
}
|
|
476
482
|
};
|
|
477
483
|
$[25] = dropdownElement;
|
|
478
|
-
$[26] =
|
|
484
|
+
$[26] = t14;
|
|
479
485
|
} else {
|
|
480
|
-
|
|
486
|
+
t14 = $[26];
|
|
481
487
|
}
|
|
482
|
-
const handleMouseOver =
|
|
483
|
-
let
|
|
488
|
+
const handleMouseOver = t14;
|
|
489
|
+
let t15;
|
|
484
490
|
if ($[27] !== dropdownElement) {
|
|
485
|
-
|
|
491
|
+
t15 = (event_1) => {
|
|
486
492
|
if (!hasItemsRef.current) {
|
|
487
493
|
return;
|
|
488
494
|
}
|
|
@@ -497,14 +503,14 @@ function Dropdown(t0) {
|
|
|
497
503
|
delete activeItem.dataset.uktActive;
|
|
498
504
|
};
|
|
499
505
|
$[27] = dropdownElement;
|
|
500
|
-
$[28] =
|
|
506
|
+
$[28] = t15;
|
|
501
507
|
} else {
|
|
502
|
-
|
|
508
|
+
t15 = $[28];
|
|
503
509
|
}
|
|
504
|
-
const handleMouseOut =
|
|
505
|
-
let
|
|
510
|
+
const handleMouseOut = t15;
|
|
511
|
+
let t16;
|
|
506
512
|
if ($[29] !== onMouseDown || $[30] !== setIsOpen || $[31] !== setIsOpening) {
|
|
507
|
-
|
|
513
|
+
t16 = (event_2) => {
|
|
508
514
|
if (onMouseDown) {
|
|
509
515
|
onMouseDown(event_2);
|
|
510
516
|
}
|
|
@@ -525,14 +531,14 @@ function Dropdown(t0) {
|
|
|
525
531
|
$[29] = onMouseDown;
|
|
526
532
|
$[30] = setIsOpen;
|
|
527
533
|
$[31] = setIsOpening;
|
|
528
|
-
$[32] =
|
|
534
|
+
$[32] = t16;
|
|
529
535
|
} else {
|
|
530
|
-
|
|
536
|
+
t16 = $[32];
|
|
531
537
|
}
|
|
532
|
-
const handleMouseDown =
|
|
533
|
-
let
|
|
538
|
+
const handleMouseDown = t16;
|
|
539
|
+
let t17;
|
|
534
540
|
if ($[33] !== closeDropdown || $[34] !== handleSubmitItem || $[35] !== onMouseUp) {
|
|
535
|
-
|
|
541
|
+
t17 = (event_3) => {
|
|
536
542
|
if (onMouseUp) {
|
|
537
543
|
onMouseUp(event_3);
|
|
538
544
|
}
|
|
@@ -554,14 +560,14 @@ function Dropdown(t0) {
|
|
|
554
560
|
$[33] = closeDropdown;
|
|
555
561
|
$[34] = handleSubmitItem;
|
|
556
562
|
$[35] = onMouseUp;
|
|
557
|
-
$[36] =
|
|
563
|
+
$[36] = t17;
|
|
558
564
|
} else {
|
|
559
|
-
|
|
565
|
+
t17 = $[36];
|
|
560
566
|
}
|
|
561
|
-
const handleMouseUp =
|
|
562
|
-
let
|
|
567
|
+
const handleMouseUp = t17;
|
|
568
|
+
let t18;
|
|
563
569
|
if ($[37] !== closeDropdown || $[38] !== dropdownElement || $[39] !== handleSubmitItem || $[40] !== setIsOpen) {
|
|
564
|
-
|
|
570
|
+
t18 = (event_4) => {
|
|
565
571
|
const {
|
|
566
572
|
altKey,
|
|
567
573
|
ctrlKey,
|
|
@@ -664,27 +670,27 @@ function Dropdown(t0) {
|
|
|
664
670
|
$[38] = dropdownElement;
|
|
665
671
|
$[39] = handleSubmitItem;
|
|
666
672
|
$[40] = setIsOpen;
|
|
667
|
-
$[41] =
|
|
673
|
+
$[41] = t18;
|
|
668
674
|
} else {
|
|
669
|
-
|
|
675
|
+
t18 = $[41];
|
|
670
676
|
}
|
|
671
|
-
const handleKeyDown =
|
|
672
|
-
let
|
|
677
|
+
const handleKeyDown = t18;
|
|
678
|
+
let t19;
|
|
673
679
|
if ($[42] !== handleKeyDown) {
|
|
674
|
-
|
|
680
|
+
t19 = {
|
|
675
681
|
ignoreUsedKeyboardEvents: false,
|
|
676
682
|
onKeyDown: handleKeyDown
|
|
677
683
|
};
|
|
678
684
|
$[42] = handleKeyDown;
|
|
679
|
-
$[43] =
|
|
685
|
+
$[43] = t19;
|
|
680
686
|
} else {
|
|
681
|
-
|
|
687
|
+
t19 = $[43];
|
|
682
688
|
}
|
|
683
|
-
useKeyboardEvents(
|
|
689
|
+
useKeyboardEvents(t19);
|
|
684
690
|
const cleanupEventListenersRef = useRef(noop);
|
|
685
|
-
let
|
|
691
|
+
let t20;
|
|
686
692
|
if ($[44] !== closeDropdown || $[45] !== isOpenOnMount || $[46] !== isTriggerFromProps || $[47] !== setDropdownElement || $[48] !== setIsOpen || $[49] !== setIsOpening) {
|
|
687
|
-
|
|
693
|
+
t20 = (ref) => {
|
|
688
694
|
setDropdownElement(ref);
|
|
689
695
|
if (!ref) {
|
|
690
696
|
cleanupEventListenersRef.current();
|
|
@@ -703,19 +709,19 @@ function Dropdown(t0) {
|
|
|
703
709
|
}
|
|
704
710
|
inputElementRef.current = inputElement;
|
|
705
711
|
}
|
|
706
|
-
const handleGlobalMouseDown = (
|
|
712
|
+
const handleGlobalMouseDown = (t212) => {
|
|
707
713
|
const {
|
|
708
714
|
target
|
|
709
|
-
} =
|
|
715
|
+
} = t212;
|
|
710
716
|
const eventTarget_2 = target;
|
|
711
717
|
if (!ref.contains(eventTarget_2)) {
|
|
712
718
|
closeDropdown();
|
|
713
719
|
}
|
|
714
720
|
};
|
|
715
|
-
const handleGlobalMouseUp = (
|
|
721
|
+
const handleGlobalMouseUp = (t222) => {
|
|
716
722
|
const {
|
|
717
723
|
target: target_0
|
|
718
|
-
} =
|
|
724
|
+
} = t222;
|
|
719
725
|
if (!isOpenRef.current || closingTimerRef.current) {
|
|
720
726
|
return;
|
|
721
727
|
}
|
|
@@ -732,10 +738,10 @@ function Dropdown(t0) {
|
|
|
732
738
|
closeDropdown();
|
|
733
739
|
}
|
|
734
740
|
};
|
|
735
|
-
const handleGlobalFocusIn = (
|
|
741
|
+
const handleGlobalFocusIn = (t232) => {
|
|
736
742
|
const {
|
|
737
743
|
target: target_1
|
|
738
|
-
} =
|
|
744
|
+
} = t232;
|
|
739
745
|
if (!isOpenRef.current) {
|
|
740
746
|
return;
|
|
741
747
|
}
|
|
@@ -795,213 +801,237 @@ function Dropdown(t0) {
|
|
|
795
801
|
$[47] = setDropdownElement;
|
|
796
802
|
$[48] = setIsOpen;
|
|
797
803
|
$[49] = setIsOpening;
|
|
798
|
-
$[50] =
|
|
804
|
+
$[50] = t20;
|
|
799
805
|
} else {
|
|
800
|
-
|
|
806
|
+
t20 = $[50];
|
|
801
807
|
}
|
|
802
|
-
const handleRef =
|
|
808
|
+
const handleRef = t20;
|
|
803
809
|
if (!isTriggerFromProps) {
|
|
804
810
|
if (isSearchable) {
|
|
805
|
-
const
|
|
806
|
-
let
|
|
811
|
+
const t212 = value ?? "";
|
|
812
|
+
let t222;
|
|
807
813
|
if ($[51] !== setIsOpen) {
|
|
808
|
-
|
|
814
|
+
t222 = () => setIsOpen(true);
|
|
809
815
|
$[51] = setIsOpen;
|
|
810
|
-
$[52] =
|
|
816
|
+
$[52] = t222;
|
|
811
817
|
} else {
|
|
812
|
-
|
|
818
|
+
t222 = $[52];
|
|
813
819
|
}
|
|
814
|
-
let
|
|
815
|
-
if ($[53] !== disabled || $[54] !== name || $[55] !== placeholder || $[56] !==
|
|
816
|
-
|
|
820
|
+
let t232;
|
|
821
|
+
if ($[53] !== disabled || $[54] !== name || $[55] !== placeholder || $[56] !== t212 || $[57] !== t222 || $[58] !== tabIndex) {
|
|
822
|
+
t232 = /* @__PURE__ */ jsx("input", { autoComplete: "off", className: TRIGGER_CLASS_NAME, defaultValue: t212, disabled, name, onFocus: t222, placeholder, ref: inputElementRef, tabIndex, type: "text" });
|
|
817
823
|
$[53] = disabled;
|
|
818
824
|
$[54] = name;
|
|
819
825
|
$[55] = placeholder;
|
|
820
|
-
$[56] =
|
|
821
|
-
$[57] =
|
|
826
|
+
$[56] = t212;
|
|
827
|
+
$[57] = t222;
|
|
822
828
|
$[58] = tabIndex;
|
|
823
|
-
$[59] =
|
|
829
|
+
$[59] = t232;
|
|
824
830
|
} else {
|
|
825
|
-
|
|
831
|
+
t232 = $[59];
|
|
826
832
|
}
|
|
827
|
-
trigger =
|
|
833
|
+
trigger = t232;
|
|
828
834
|
} else {
|
|
829
|
-
let
|
|
835
|
+
let t212;
|
|
830
836
|
if ($[60] !== trigger) {
|
|
831
|
-
|
|
837
|
+
t212 = /* @__PURE__ */ jsx("button", { className: TRIGGER_CLASS_NAME, tabIndex: 0, children: trigger });
|
|
832
838
|
$[60] = trigger;
|
|
833
|
-
$[61] =
|
|
839
|
+
$[61] = t212;
|
|
834
840
|
} else {
|
|
835
|
-
|
|
841
|
+
t212 = $[61];
|
|
836
842
|
}
|
|
837
|
-
trigger =
|
|
843
|
+
trigger = t212;
|
|
838
844
|
}
|
|
839
845
|
}
|
|
840
846
|
if (label) {
|
|
841
|
-
let
|
|
847
|
+
let t212;
|
|
842
848
|
if ($[62] !== label) {
|
|
843
|
-
|
|
849
|
+
t212 = /* @__PURE__ */ jsx("div", { className: LABEL_TEXT_CLASS_NAME, children: label });
|
|
844
850
|
$[62] = label;
|
|
845
|
-
$[63] =
|
|
851
|
+
$[63] = t212;
|
|
846
852
|
} else {
|
|
847
|
-
|
|
853
|
+
t212 = $[63];
|
|
848
854
|
}
|
|
849
|
-
let
|
|
850
|
-
if ($[64] !==
|
|
851
|
-
|
|
852
|
-
|
|
855
|
+
let t222;
|
|
856
|
+
if ($[64] !== t212 || $[65] !== trigger) {
|
|
857
|
+
t222 = /* @__PURE__ */ jsxs("label", { className: LABEL_CLASS_NAME, children: [
|
|
858
|
+
t212,
|
|
853
859
|
trigger
|
|
854
860
|
] });
|
|
855
|
-
$[64] =
|
|
861
|
+
$[64] = t212;
|
|
856
862
|
$[65] = trigger;
|
|
857
|
-
$[66] =
|
|
863
|
+
$[66] = t222;
|
|
858
864
|
} else {
|
|
859
|
-
|
|
865
|
+
t222 = $[66];
|
|
860
866
|
}
|
|
861
|
-
trigger =
|
|
867
|
+
trigger = t222;
|
|
862
868
|
}
|
|
863
869
|
const dropdownRect = useBoundingClientRect(dropdownElement);
|
|
864
870
|
const dropdownBodyRect = useBoundingClientRect(dropdownBodyElement);
|
|
865
|
-
let
|
|
871
|
+
let t21;
|
|
866
872
|
if ($[67] !== dropdownBodyElement) {
|
|
867
|
-
|
|
873
|
+
t21 = getBoundingAncestor(dropdownBodyElement);
|
|
868
874
|
$[67] = dropdownBodyElement;
|
|
869
|
-
$[68] =
|
|
875
|
+
$[68] = t21;
|
|
870
876
|
} else {
|
|
871
|
-
|
|
877
|
+
t21 = $[68];
|
|
872
878
|
}
|
|
873
|
-
const boundingElement =
|
|
879
|
+
const boundingElement = t21;
|
|
874
880
|
const boundingElementRect = useBoundingClientRect(boundingElement);
|
|
875
881
|
let maxHeight;
|
|
876
882
|
let maxWidth;
|
|
877
883
|
if (dropdownBodyRect.top != null && dropdownRect.top != null && boundingElementRect.top != null) {
|
|
878
884
|
const maxHeightUp = dropdownBodyRect.bottom - boundingElementRect.top;
|
|
879
885
|
const maxHeightDown = boundingElementRect.bottom - dropdownBodyRect.top;
|
|
880
|
-
|
|
886
|
+
let t222;
|
|
887
|
+
if ($[69] !== dropdownBodyRect.top || $[70] !== dropdownRect.top || $[71] !== maxHeightDown || $[72] !== maxHeightUp) {
|
|
888
|
+
t222 = Math.round(dropdownBodyRect.top > dropdownRect.top ? maxHeightDown : maxHeightUp);
|
|
889
|
+
$[69] = dropdownBodyRect.top;
|
|
890
|
+
$[70] = dropdownRect.top;
|
|
891
|
+
$[71] = maxHeightDown;
|
|
892
|
+
$[72] = maxHeightUp;
|
|
893
|
+
$[73] = t222;
|
|
894
|
+
} else {
|
|
895
|
+
t222 = $[73];
|
|
896
|
+
}
|
|
897
|
+
maxHeight = t222;
|
|
881
898
|
const maxWidthLeft = dropdownBodyRect.right - boundingElementRect.left;
|
|
882
899
|
const maxWidthRight = boundingElementRect.right - dropdownBodyRect.left;
|
|
883
|
-
|
|
900
|
+
let t232;
|
|
901
|
+
if ($[74] !== dropdownBodyRect.left || $[75] !== dropdownRect.left || $[76] !== maxWidthLeft || $[77] !== maxWidthRight) {
|
|
902
|
+
t232 = Math.round(dropdownBodyRect.left > dropdownRect.left ? maxWidthRight : maxWidthLeft);
|
|
903
|
+
$[74] = dropdownBodyRect.left;
|
|
904
|
+
$[75] = dropdownRect.left;
|
|
905
|
+
$[76] = maxWidthLeft;
|
|
906
|
+
$[77] = maxWidthRight;
|
|
907
|
+
$[78] = t232;
|
|
908
|
+
} else {
|
|
909
|
+
t232 = $[78];
|
|
910
|
+
}
|
|
911
|
+
maxWidth = t232;
|
|
884
912
|
}
|
|
885
|
-
let
|
|
886
|
-
if ($[
|
|
887
|
-
|
|
913
|
+
let t22;
|
|
914
|
+
if ($[79] !== maxHeight || $[80] !== minHeightBody) {
|
|
915
|
+
t22 = maxHeight != null && maxHeight > minHeightBody ? {
|
|
888
916
|
[BODY_MAX_HEIGHT_VAR]: `calc(${maxHeight}px - var(--uktdd-body-buffer))`
|
|
889
917
|
} : null;
|
|
890
|
-
$[
|
|
891
|
-
$[
|
|
918
|
+
$[79] = maxHeight;
|
|
919
|
+
$[80] = minHeightBody;
|
|
920
|
+
$[81] = t22;
|
|
892
921
|
} else {
|
|
893
|
-
|
|
922
|
+
t22 = $[81];
|
|
894
923
|
}
|
|
895
|
-
let
|
|
896
|
-
if ($[
|
|
897
|
-
|
|
924
|
+
let t23;
|
|
925
|
+
if ($[82] !== maxWidth || $[83] !== minWidthBody) {
|
|
926
|
+
t23 = maxWidth != null && maxWidth > minWidthBody ? {
|
|
898
927
|
[BODY_MAX_WIDTH_VAR]: `calc(${maxWidth}px - var(--uktdd-body-buffer))`
|
|
899
928
|
} : null;
|
|
900
|
-
$[
|
|
901
|
-
$[
|
|
929
|
+
$[82] = maxWidth;
|
|
930
|
+
$[83] = minWidthBody;
|
|
931
|
+
$[84] = t23;
|
|
902
932
|
} else {
|
|
903
|
-
|
|
933
|
+
t23 = $[84];
|
|
904
934
|
}
|
|
905
|
-
let
|
|
906
|
-
if ($[
|
|
907
|
-
|
|
935
|
+
let t24;
|
|
936
|
+
if ($[85] !== styleFromProps || $[86] !== t22 || $[87] !== t23) {
|
|
937
|
+
t24 = {
|
|
908
938
|
...styleFromProps,
|
|
909
|
-
...
|
|
910
|
-
...
|
|
939
|
+
...t22,
|
|
940
|
+
...t23
|
|
911
941
|
};
|
|
912
|
-
$[
|
|
913
|
-
$[
|
|
914
|
-
$[
|
|
915
|
-
$[
|
|
916
|
-
} else {
|
|
917
|
-
t22 = $[76];
|
|
918
|
-
}
|
|
919
|
-
const style = t22;
|
|
920
|
-
let t23;
|
|
921
|
-
if ($[77] === Symbol.for("react.memo_cache_sentinel")) {
|
|
922
|
-
t23 = /* @__PURE__ */ jsx(Style, { href: "@acusti/dropdown/Dropdown", children: STYLES });
|
|
923
|
-
$[77] = t23;
|
|
942
|
+
$[85] = styleFromProps;
|
|
943
|
+
$[86] = t22;
|
|
944
|
+
$[87] = t23;
|
|
945
|
+
$[88] = t24;
|
|
924
946
|
} else {
|
|
925
|
-
|
|
947
|
+
t24 = $[88];
|
|
926
948
|
}
|
|
927
|
-
const
|
|
928
|
-
[data-ukt-id="${id}"] > :first-child {
|
|
949
|
+
const style = t24;
|
|
950
|
+
const anchorStyles = `[data-ukt-id="${id}"] > :first-child {
|
|
929
951
|
anchor-name: --uktdd-anchor${id};
|
|
930
952
|
}
|
|
931
953
|
[data-ukt-id="${id}"] ${BODY_SELECTOR} {
|
|
932
954
|
position-anchor: --uktdd-anchor${id};
|
|
933
|
-
}
|
|
934
|
-
`;
|
|
955
|
+
}`;
|
|
935
956
|
let t25;
|
|
936
|
-
if ($[
|
|
937
|
-
t25 = /* @__PURE__ */ jsx(Style, { children:
|
|
938
|
-
$[
|
|
939
|
-
$[79] = t25;
|
|
957
|
+
if ($[89] === Symbol.for("react.memo_cache_sentinel")) {
|
|
958
|
+
t25 = /* @__PURE__ */ jsx(Style, { href: "@acusti/dropdown/Dropdown", children: STYLES });
|
|
959
|
+
$[89] = t25;
|
|
940
960
|
} else {
|
|
941
|
-
t25 = $[
|
|
961
|
+
t25 = $[89];
|
|
942
962
|
}
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
963
|
+
const t26 = `@acusti/dropdown/Dropdown/${id}`;
|
|
964
|
+
let t27;
|
|
965
|
+
if ($[90] !== anchorStyles || $[91] !== t26) {
|
|
966
|
+
t27 = /* @__PURE__ */ jsx(Style, { href: t26, children: anchorStyles });
|
|
967
|
+
$[90] = anchorStyles;
|
|
968
|
+
$[91] = t26;
|
|
969
|
+
$[92] = t27;
|
|
970
|
+
} else {
|
|
971
|
+
t27 = $[92];
|
|
972
|
+
}
|
|
973
|
+
let t28;
|
|
974
|
+
if ($[93] !== className || $[94] !== disabled || $[95] !== isOpen || $[96] !== isSearchable) {
|
|
975
|
+
t28 = clsx(ROOT_CLASS_NAME, className, {
|
|
946
976
|
disabled,
|
|
947
977
|
"is-open": isOpen,
|
|
948
978
|
"is-searchable": isSearchable
|
|
949
979
|
});
|
|
950
|
-
$[
|
|
951
|
-
$[
|
|
952
|
-
$[
|
|
953
|
-
$[
|
|
954
|
-
$[
|
|
980
|
+
$[93] = className;
|
|
981
|
+
$[94] = disabled;
|
|
982
|
+
$[95] = isOpen;
|
|
983
|
+
$[96] = isSearchable;
|
|
984
|
+
$[97] = t28;
|
|
955
985
|
} else {
|
|
956
|
-
|
|
986
|
+
t28 = $[97];
|
|
957
987
|
}
|
|
958
|
-
let
|
|
959
|
-
if ($[
|
|
960
|
-
|
|
961
|
-
$[
|
|
962
|
-
$[
|
|
963
|
-
$[
|
|
964
|
-
$[
|
|
965
|
-
$[
|
|
988
|
+
let t29;
|
|
989
|
+
if ($[98] !== children || $[99] !== childrenCount || $[100] !== isOpen || $[101] !== setDropdownBodyElement) {
|
|
990
|
+
t29 = isOpen ? /* @__PURE__ */ jsx("div", { className: BODY_CLASS_NAME, ref: setDropdownBodyElement, children: childrenCount > 1 ? children[1] : children }) : null;
|
|
991
|
+
$[98] = children;
|
|
992
|
+
$[99] = childrenCount;
|
|
993
|
+
$[100] = isOpen;
|
|
994
|
+
$[101] = setDropdownBodyElement;
|
|
995
|
+
$[102] = t29;
|
|
966
996
|
} else {
|
|
967
|
-
|
|
997
|
+
t29 = $[102];
|
|
968
998
|
}
|
|
969
|
-
let
|
|
970
|
-
if ($[
|
|
971
|
-
|
|
999
|
+
let t30;
|
|
1000
|
+
if ($[103] !== handleMouseDown || $[104] !== handleMouseMove || $[105] !== handleMouseOut || $[106] !== handleMouseOver || $[107] !== handleMouseUp || $[108] !== handleRef || $[109] !== id || $[110] !== onClick || $[111] !== style || $[112] !== t28 || $[113] !== t29 || $[114] !== trigger) {
|
|
1001
|
+
t30 = /* @__PURE__ */ jsxs("div", { className: t28, "data-ukt-id": id, onClick, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseOut: handleMouseOut, onMouseOver: handleMouseOver, onMouseUp: handleMouseUp, ref: handleRef, style, children: [
|
|
972
1002
|
trigger,
|
|
973
|
-
|
|
1003
|
+
t29
|
|
974
1004
|
] });
|
|
975
|
-
$[
|
|
976
|
-
$[
|
|
977
|
-
$[
|
|
978
|
-
$[
|
|
979
|
-
$[
|
|
980
|
-
$[
|
|
981
|
-
$[
|
|
982
|
-
$[
|
|
983
|
-
$[
|
|
984
|
-
$[
|
|
985
|
-
$[
|
|
986
|
-
$[
|
|
987
|
-
$[
|
|
1005
|
+
$[103] = handleMouseDown;
|
|
1006
|
+
$[104] = handleMouseMove;
|
|
1007
|
+
$[105] = handleMouseOut;
|
|
1008
|
+
$[106] = handleMouseOver;
|
|
1009
|
+
$[107] = handleMouseUp;
|
|
1010
|
+
$[108] = handleRef;
|
|
1011
|
+
$[109] = id;
|
|
1012
|
+
$[110] = onClick;
|
|
1013
|
+
$[111] = style;
|
|
1014
|
+
$[112] = t28;
|
|
1015
|
+
$[113] = t29;
|
|
1016
|
+
$[114] = trigger;
|
|
1017
|
+
$[115] = t30;
|
|
988
1018
|
} else {
|
|
989
|
-
|
|
1019
|
+
t30 = $[115];
|
|
990
1020
|
}
|
|
991
|
-
let
|
|
992
|
-
if ($[
|
|
993
|
-
|
|
994
|
-
t23,
|
|
1021
|
+
let t31;
|
|
1022
|
+
if ($[116] !== t27 || $[117] !== t30) {
|
|
1023
|
+
t31 = /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
995
1024
|
t25,
|
|
996
|
-
|
|
1025
|
+
t27,
|
|
1026
|
+
t30
|
|
997
1027
|
] });
|
|
998
|
-
$[
|
|
999
|
-
$[
|
|
1000
|
-
$[
|
|
1028
|
+
$[116] = t27;
|
|
1029
|
+
$[117] = t30;
|
|
1030
|
+
$[118] = t31;
|
|
1001
1031
|
} else {
|
|
1002
|
-
|
|
1032
|
+
t31 = $[118];
|
|
1003
1033
|
}
|
|
1004
|
-
return
|
|
1034
|
+
return t31;
|
|
1005
1035
|
}
|
|
1006
1036
|
function _temp() {
|
|
1007
1037
|
idCounter = idCounter >= 999999 ? 0 : idCounter + 1;
|
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 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: revert;\n right: revert;\n}\n@position-try --uktdd-bottom-right {\n top: anchor(bottom);\n right: anchor(right);\n bottom: revert;\n left: revert;\n}\n@position-try --uktdd-top-right {\n bottom: anchor(top);\n right: anchor(right);\n top: revert;\n left: revert;\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 * as React 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 | React.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 | React.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 /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s name.\n */\n name?: string;\n onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;\n onClose?: () => unknown;\n onMouseDown?: (event: React.MouseEvent<HTMLElement>) => unknown;\n onMouseUp?: (event: React.MouseEvent<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?: React.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 = [React.ReactNode, React.ReactNode];\n\ntype MaybeHTMLElement = HTMLElement | null;\n\ntype MousePosition = { clientX: number; clientY: number };\n\ntype TimeoutID = ReturnType<typeof setTimeout>;\n\nconst { Children, Fragment, useEffect, useRef, useState } = React;\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 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 = React.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 }: React.MouseEvent<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: React.MouseEvent<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: React.MouseEvent<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: React.MouseEvent<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: React.MouseEvent<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 = dropdownBodyRect.top > dropdownRect.top ? maxHeightDown : maxHeightUp;\n const maxWidthLeft = dropdownBodyRect.right - boundingElementRect.left;\n const maxWidthRight = boundingElementRect.right - dropdownBodyRect.left;\n maxWidth =\n dropdownBodyRect.left > dropdownRect.left ? maxWidthRight : maxWidthLeft;\n }\n\n const style = {\n ...styleFromProps,\n ...(maxHeight != null && maxHeight > 0\n ? { [BODY_MAX_HEIGHT_VAR]: `calc(${maxHeight}px - var(--uktdd-body-buffer))` }\n : null),\n ...(maxWidth != null && maxWidth > 0\n ? { [BODY_MAX_WIDTH_VAR]: `calc(${maxWidth}px - var(--uktdd-body-buffer))` }\n : null),\n };\n\n return (\n <Fragment>\n <Style href=\"@acusti/dropdown/Dropdown\">{STYLES}</Style>\n <Style>{`\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`}</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 {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","Fragment","useEffect","useRef","useState","React","noop","CHILDREN_ERROR","TEXT_INPUT_SELECTOR","idCounter","Dropdown","t0","$","_c","allowCreate","allowEmpty","t1","className","disabled","hasItems","t2","isOpenOnMount","isSearchable","keepOpenOnSubmit","t3","label","name","onClick","onClose","onMouseDown","onMouseUp","onOpen","onSubmitItem","placeholder","style","styleFromProps","tabIndex","value","undefined","childrenCount","count","Error","console","error","trigger","t4","isValidElement","isTriggerFromProps","isOpen","setIsOpen","isOpening","setIsOpening","setDropdownElement","dropdownBodyElement","setDropdownBodyElement","id","_temp","inputElementRef","closingTimerRef","isOpeningTimerRef","currentInputMethodRef","clearEnteredCharactersTimerRef","enteredCharactersRef","mouseDownPositionRef","allowCreateRef","allowEmptyRef","hasItemsRef","isOpenRef","isOpeningRef","keepOpenOnSubmitRef","onCloseRef","onOpenRef","onSubmitItemRef","valueRef","t5","t6","current","isMountedRef","t7","t8","t9","clearTimeout","closeDropdown","t10","event","setTimeout","itemLabel","ownerDocument","activeElement","blur","nextValue","uktValue","handleSubmitItem","t11","t12","clientX","clientY","initialPosition","Math","abs","handleMouseMove","event_0","eventTarget","target","item","closest","element_0","handleMouseOver","t13","event_1","activeItem","eventRelatedTarget","relatedTarget","contains","handleMouseOut","t14","event_2","handleMouseDown","t15","event_3","eventTarget_0","handleMouseUp","t16","event_4","altKey","ctrlKey","key","metaKey","eventTarget_1","onEventHandled","stopPropagation","preventDefault","isEventTargetingDropdown","isTargetUsingKeyEvents","isEventTargetUsingKeyEvent","isEditingCharacters","test","slice","handleKeyDown","t17","ignoreUsedKeyboardEvents","onKeyDown","useKeyboardEvents","cleanupEventListenersRef","t18","ref","inputElement","firstElementChild","matches","handleGlobalMouseDown","t19","eventTarget_2","handleGlobalMouseUp","t20","target_0","eventTarget_3","handleGlobalFocusIn","t21","target_1","eventTarget_4","addEventListener","document","focus","handleInput","event_5","input","isDeleting","removeEventListener","handleRef","dropdownRect","useBoundingClientRect","dropdownBodyRect","getBoundingAncestor","boundingElement","boundingElementRect","maxHeight","maxWidth","maxHeightUp","maxHeightDown","maxWidthLeft","right","left","maxWidthRight","t22","t23","Symbol","for","t24","t25","t26","clsx","t27","t28","t29","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 * as React 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 | React.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 | React.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: React.MouseEvent<HTMLElement>) => unknown;\n onClose?: () => unknown;\n onMouseDown?: (event: React.MouseEvent<HTMLElement>) => unknown;\n onMouseUp?: (event: React.MouseEvent<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?: React.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 =\n | [React.ReactNode, React.ReactNode]\n | readonly [React.ReactNode, React.ReactNode];\n\ntype MaybeHTMLElement = HTMLElement | null;\n\ntype MousePosition = { clientX: number; clientY: number };\n\ntype TimeoutID = ReturnType<typeof setTimeout>;\n\nconst { Children, Fragment, useEffect, useRef, useState } = React;\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 = React.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 }: React.MouseEvent<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: React.MouseEvent<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: React.MouseEvent<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: React.MouseEvent<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: React.MouseEvent<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 {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","Fragment","useEffect","useRef","useState","React","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","count","Error","console","error","trigger","t6","isValidElement","isTriggerFromProps","isOpen","setIsOpen","isOpening","setIsOpening","setDropdownElement","dropdownBodyElement","setDropdownBodyElement","id","_temp","inputElementRef","closingTimerRef","isOpeningTimerRef","currentInputMethodRef","clearEnteredCharactersTimerRef","enteredCharactersRef","mouseDownPositionRef","allowCreateRef","allowEmptyRef","hasItemsRef","isOpenRef","isOpeningRef","keepOpenOnSubmitRef","onCloseRef","onOpenRef","onSubmitItemRef","valueRef","t7","t8","current","isMountedRef","t10","t9","t11","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","Symbol","for","t26","t27","t28","clsx","t29","t30","t31","tagName","getComputedStyle","overflowX"],"mappings":"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"}
|
package/dist/styles.d.ts
CHANGED
|
@@ -10,4 +10,4 @@ export declare const LABEL_TEXT_SELECTOR = ".uktdropdown-label-text";
|
|
|
10
10
|
export declare const TRIGGER_SELECTOR = ".uktdropdown-trigger";
|
|
11
11
|
export declare const BODY_MAX_HEIGHT_VAR = "--uktdd-body-max-height";
|
|
12
12
|
export declare const BODY_MAX_WIDTH_VAR = "--uktdd-body-max-width";
|
|
13
|
-
export declare const STYLES = "\n:root {\n --uktdd-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\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 --uktdd-body-max-height: calc(100vh - var(--uktdd-body-buffer));\n --uktdd-body-max-width: 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.uktdropdown,\n.uktdropdown-trigger {\n font-family: var(--uktdd-font-family);\n}\n.uktdropdown {\n width: max-content;\n}\n.uktdropdown.disabled {\n pointer-events: none;\n}\n.uktdropdown > * {\n cursor: default;\n}\n.uktdropdown-label {\n display: flex;\n align-items: center;\n}\n.uktdropdown-label-text {\n padding-right: var(--uktdd-label-pad-right);\n}\n.uktdropdown-body {\n box-sizing: border-box;\n position: absolute;\n top: anchor(bottom);\n left: anchor(left);\n position-try-fallbacks: --uktdd-top-left, --uktdd-bottom-right, --uktdd-top-right;\n min-height: 50px;\n max-height: var(--uktdd-body-max-height);\n min-width: min(50px, 100%);\n max-width: var(--uktdd-body-max-width);\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:
|
|
13
|
+
export declare const STYLES = "\n:root {\n --uktdd-font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\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 --uktdd-body-max-height: calc(100vh - var(--uktdd-body-buffer));\n --uktdd-body-max-width: 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.uktdropdown,\n.uktdropdown-trigger {\n font-family: var(--uktdd-font-family);\n}\n.uktdropdown {\n width: max-content;\n}\n.uktdropdown.disabled {\n pointer-events: none;\n}\n.uktdropdown > * {\n cursor: default;\n}\n.uktdropdown-label {\n display: flex;\n align-items: center;\n}\n.uktdropdown-label-text {\n padding-right: var(--uktdd-label-pad-right);\n}\n.uktdropdown-body {\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(--uktdd-body-max-height);\n min-width: min(50px, 100%);\n max-width: var(--uktdd-body-max-width);\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.uktdropdown-body.has-items {\n user-select: none;\n}\n.uktdropdown-body [data-ukt-active] {\n background-color: var(--uktdd-body-bg-color-hover);\n color: var(--uktdd-body-color-hover);\n}\n";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@acusti/dropdown",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.49.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"exports": "./dist/Dropdown.js",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
59
|
"@acusti/matchmaking": "^0.10.0",
|
|
60
|
-
"@acusti/styling": "^2.0.
|
|
60
|
+
"@acusti/styling": "^2.0.1",
|
|
61
61
|
"@acusti/use-bounding-client-rect": "^2.0.1",
|
|
62
62
|
"@acusti/use-keyboard-events": "^0.11.0",
|
|
63
63
|
"clsx": "^2"
|