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