@acusti/dropdown 0.50.0 → 0.50.1

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