@acusti/dropdown 0.34.0 → 0.36.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/README.md +74 -1
- package/dist/Dropdown.d.ts +30 -8
- package/dist/Dropdown.js +19 -23
- package/dist/Dropdown.js.flow +16 -8
- package/dist/Dropdown.js.map +1 -1
- package/dist/Dropdown.test.d.ts +1 -0
- package/dist/Dropdown.test.js +102 -0
- package/dist/Dropdown.test.js.flow +6 -0
- package/dist/Dropdown.test.js.map +1 -0
- package/dist/helpers.js +1 -0
- package/dist/helpers.js.map +1 -1
- package/dist/styles.d.ts +10 -10
- package/dist/styles.js.flow +10 -10
- package/package.json +10 -9
- package/src/Dropdown.test.tsx +19 -19
- package/src/Dropdown.tsx +53 -37
- package/src/helpers.ts +1 -0
package/README.md
CHANGED
|
@@ -27,8 +27,81 @@ The three primary design goals for the existence of this component:
|
|
|
27
27
|
and the value of that item at the same time (otherwise, the value is
|
|
28
28
|
the text content of the dropdown item element)
|
|
29
29
|
4. To style your dropdowns, use CSS; there are a
|
|
30
|
-
[collection of CSS
|
|
30
|
+
[collection of CSS custom properties](https://github.com/acusti/uikit/blob/main/packages/dropdown/src/styles.ts#L21-L32)
|
|
31
31
|
used internally to style them if that works best for you, or just
|
|
32
32
|
override the minimal default CSS as appropriate
|
|
33
33
|
3. Lightweight bundle size with the bare minimum of dependencies (see
|
|
34
34
|
minzipped size above)
|
|
35
|
+
|
|
36
|
+
See the [storybook docs and demo][] to get a feel for what it can do.
|
|
37
|
+
|
|
38
|
+
[storybook docs and demo]:
|
|
39
|
+
https://acusti-uikit.netlify.app/?path=/docs/uikit-controls-Dropdown--docs
|
|
40
|
+
|
|
41
|
+
## Usage
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
npm install @acusti/dropdown
|
|
45
|
+
# or
|
|
46
|
+
yarn add @acusti/dropdown
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Props
|
|
50
|
+
|
|
51
|
+
This is the type signature for the props you can pass to `Dropdown`. The
|
|
52
|
+
unique features provided by the component are called out and explained
|
|
53
|
+
above the corresponding prop via JSDoc comments:
|
|
54
|
+
|
|
55
|
+
```ts
|
|
56
|
+
type Props = {
|
|
57
|
+
/**
|
|
58
|
+
* Boolean indicating if the user can submit a value not already in the
|
|
59
|
+
* dropdown.
|
|
60
|
+
*/
|
|
61
|
+
allowCreate?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Boolean indicating if the user can submit an empty value (i.e. clear
|
|
64
|
+
* the value). Defaults to true.
|
|
65
|
+
*/
|
|
66
|
+
allowEmpty?: boolean;
|
|
67
|
+
/**
|
|
68
|
+
* Can take a single React element (e.g. ReactChild) or exactly two
|
|
69
|
+
* renderable children.
|
|
70
|
+
*/
|
|
71
|
+
children: React.ReactChild | ChildrenTuple;
|
|
72
|
+
className?: string;
|
|
73
|
+
disabled?: boolean;
|
|
74
|
+
hasItems?: boolean;
|
|
75
|
+
isOpenOnMount?: boolean;
|
|
76
|
+
isSearchable?: boolean;
|
|
77
|
+
keepOpenOnSubmit?: boolean;
|
|
78
|
+
label?: string;
|
|
79
|
+
/**
|
|
80
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
81
|
+
* Used as search input’s name.
|
|
82
|
+
*/
|
|
83
|
+
name?: string;
|
|
84
|
+
onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
85
|
+
onClose?: () => unknown;
|
|
86
|
+
onMouseDown?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
87
|
+
onMouseUp?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
88
|
+
onOpen?: () => unknown;
|
|
89
|
+
onSubmitItem?: (payload: Item) => void;
|
|
90
|
+
/**
|
|
91
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
92
|
+
* Used as search input’s placeholder.
|
|
93
|
+
*/
|
|
94
|
+
placeholder?: string;
|
|
95
|
+
style?: React.CSSProperties;
|
|
96
|
+
/**
|
|
97
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
98
|
+
* Used as search input’s tabIndex.
|
|
99
|
+
*/
|
|
100
|
+
tabIndex?: number;
|
|
101
|
+
/**
|
|
102
|
+
* Used as search input’s value if props.isSearchable === true
|
|
103
|
+
* Used to determine if value has changed to avoid triggering onSubmitItem if not
|
|
104
|
+
*/
|
|
105
|
+
value?: string;
|
|
106
|
+
};
|
|
107
|
+
```
|
package/dist/Dropdown.d.ts
CHANGED
|
@@ -7,22 +7,37 @@ export type Item = {
|
|
|
7
7
|
value: string;
|
|
8
8
|
};
|
|
9
9
|
export type Props = {
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Boolean indicating if the user can submit a value not already in the
|
|
12
|
+
* dropdown.
|
|
13
|
+
*/
|
|
11
14
|
allowCreate?: boolean;
|
|
12
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Boolean indicating if the user can submit an empty value (i.e. clear
|
|
17
|
+
* the value). Defaults to true.
|
|
18
|
+
*/
|
|
13
19
|
allowEmpty?: boolean;
|
|
14
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Can take a single React element (e.g. ReactChild) or exactly two
|
|
22
|
+
* renderable children.
|
|
23
|
+
*/
|
|
15
24
|
children: React.ReactChild | ChildrenTuple;
|
|
16
25
|
className?: string;
|
|
17
26
|
disabled?: boolean;
|
|
18
|
-
/**
|
|
27
|
+
/**
|
|
28
|
+
* Group identifier string links dropdowns together into a menu
|
|
29
|
+
* (like macOS top menubar).
|
|
30
|
+
*/
|
|
19
31
|
group?: string;
|
|
20
32
|
hasItems?: boolean;
|
|
21
33
|
isOpenOnMount?: boolean;
|
|
22
34
|
isSearchable?: boolean;
|
|
23
35
|
keepOpenOnSubmit?: boolean;
|
|
24
36
|
label?: string;
|
|
25
|
-
/**
|
|
37
|
+
/**
|
|
38
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
39
|
+
* Used as search input’s name.
|
|
40
|
+
*/
|
|
26
41
|
name?: string;
|
|
27
42
|
onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
28
43
|
onClose?: () => unknown;
|
|
@@ -30,9 +45,16 @@ export type Props = {
|
|
|
30
45
|
onMouseUp?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
31
46
|
onOpen?: () => unknown;
|
|
32
47
|
onSubmitItem?: (payload: Item) => void;
|
|
33
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
50
|
+
* Used as search input’s placeholder.
|
|
51
|
+
*/
|
|
34
52
|
placeholder?: string;
|
|
35
|
-
|
|
53
|
+
style?: React.CSSProperties;
|
|
54
|
+
/**
|
|
55
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
56
|
+
* Used as search input’s tabIndex.
|
|
57
|
+
*/
|
|
36
58
|
tabIndex?: number;
|
|
37
59
|
/**
|
|
38
60
|
* Used as search input’s value if props.isSearchable === true
|
|
@@ -40,5 +62,5 @@ export type Props = {
|
|
|
40
62
|
*/
|
|
41
63
|
value?: string;
|
|
42
64
|
};
|
|
43
|
-
export default function Dropdown({ allowCreate, allowEmpty, children, className, disabled, hasItems, isOpenOnMount, isSearchable, keepOpenOnSubmit, label, name, onClick, onClose, onMouseDown, onMouseUp, onOpen, onSubmitItem, placeholder, tabIndex, value, }: Props): JSX.Element;
|
|
65
|
+
export default function Dropdown({ allowCreate, allowEmpty, children, className, disabled, hasItems, isOpenOnMount, isSearchable, keepOpenOnSubmit, label, name, onClick, onClose, onMouseDown, onMouseUp, onOpen, onSubmitItem, placeholder, style: styleFromProps, tabIndex, value, }: Props): React.JSX.Element;
|
|
44
66
|
export {};
|
package/dist/Dropdown.js
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
|
+
/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/mouse-events-have-key-events, jsx-a11y/no-static-element-interactions */
|
|
1
2
|
import InputText from '@acusti/input-text';
|
|
2
3
|
import { Style } from '@acusti/styling';
|
|
3
4
|
import useIsOutOfBounds from '@acusti/use-is-out-of-bounds';
|
|
4
5
|
import useKeyboardEvents, { isEventTargetUsingKeyEvent, } from '@acusti/use-keyboard-events';
|
|
5
6
|
import clsx from 'clsx';
|
|
6
7
|
import * as React from 'react';
|
|
7
|
-
import { BODY_CLASS_NAME, BODY_MAX_HEIGHT_VAR, BODY_MAX_WIDTH_VAR, BODY_SELECTOR, LABEL_CLASS_NAME, LABEL_TEXT_CLASS_NAME, ROOT_CLASS_NAME, STYLES, TRIGGER_CLASS_NAME, } from './styles.js';
|
|
8
8
|
import { getActiveItemElement, getItemElements, ITEM_SELECTOR, setActiveItem, } from './helpers.js';
|
|
9
|
+
import { BODY_CLASS_NAME, BODY_MAX_HEIGHT_VAR, BODY_MAX_WIDTH_VAR, BODY_SELECTOR, LABEL_CLASS_NAME, LABEL_TEXT_CLASS_NAME, ROOT_CLASS_NAME, STYLES, TRIGGER_CLASS_NAME, } from './styles.js';
|
|
9
10
|
const { Children, Fragment, useCallback, useEffect, useMemo, useRef, useState } = React;
|
|
10
|
-
const noop = () => { };
|
|
11
|
+
const noop = () => { }; // eslint-disable-line @typescript-eslint/no-empty-function
|
|
11
12
|
const CHILDREN_ERROR = '@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';
|
|
12
13
|
const TEXT_INPUT_SELECTOR = 'input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea';
|
|
13
|
-
export default function Dropdown({ allowCreate, allowEmpty = true, children, className, disabled, hasItems = true, isOpenOnMount, isSearchable, keepOpenOnSubmit = !hasItems, label, name, onClick, onClose, onMouseDown, onMouseUp, onOpen, onSubmitItem, placeholder, tabIndex, value, }) {
|
|
14
|
+
export default function Dropdown({ allowCreate, allowEmpty = true, children, className, disabled, hasItems = true, isOpenOnMount, isSearchable, keepOpenOnSubmit = !hasItems, label, name, onClick, onClose, onMouseDown, onMouseUp, onOpen, onSubmitItem, placeholder, style: styleFromProps, tabIndex, value, }) {
|
|
14
15
|
const childrenCount = Children.count(children);
|
|
15
16
|
if (childrenCount !== 1 && childrenCount !== 2) {
|
|
16
17
|
if (childrenCount === 0) {
|
|
@@ -23,7 +24,7 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
23
24
|
trigger = children[0];
|
|
24
25
|
}
|
|
25
26
|
const isTriggerFromProps = React.isValidElement(trigger);
|
|
26
|
-
const [isOpen, setIsOpen] = useState(isOpenOnMount
|
|
27
|
+
const [isOpen, setIsOpen] = useState(isOpenOnMount !== null && isOpenOnMount !== void 0 ? isOpenOnMount : false);
|
|
27
28
|
const [isOpening, setIsOpening] = useState(!isOpenOnMount);
|
|
28
29
|
const [dropdownBodyElement, setDropdownBodyElement] = useState(null);
|
|
29
30
|
const dropdownElementRef = useRef(null);
|
|
@@ -35,6 +36,7 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
35
36
|
const enteredCharactersRef = useRef('');
|
|
36
37
|
const mouseDownPositionRef = useRef(null);
|
|
37
38
|
const outOfBounds = useIsOutOfBounds(dropdownBodyElement);
|
|
39
|
+
const setDropdownOpenRef = useRef(() => setIsOpen(true));
|
|
38
40
|
const allowCreateRef = useRef(allowCreate);
|
|
39
41
|
const allowEmptyRef = useRef(allowEmpty);
|
|
40
42
|
const hasItemsRef = useRef(hasItems);
|
|
@@ -95,9 +97,10 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
95
97
|
}
|
|
96
98
|
}, []);
|
|
97
99
|
const handleSubmitItem = useCallback((event) => {
|
|
98
|
-
var _a, _b;
|
|
100
|
+
var _a, _b, _c;
|
|
99
101
|
const eventTarget = event.target;
|
|
100
102
|
if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
|
|
103
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
101
104
|
const keepOpen = eventTarget.closest('[data-ukt-keep-open]');
|
|
102
105
|
// Don’t close dropdown if event occurs w/in data-ukt-keep-open element
|
|
103
106
|
if (!(keepOpen === null || keepOpen === void 0 ? void 0 : keepOpen.dataset.uktKeepOpen) ||
|
|
@@ -118,7 +121,7 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
118
121
|
if ((_a = inputElementRef.current) === null || _a === void 0 ? void 0 : _a.value)
|
|
119
122
|
return;
|
|
120
123
|
}
|
|
121
|
-
let label = (element === null || element === void 0 ? void 0 : element.innerText)
|
|
124
|
+
let label = (_b = element === null || element === void 0 ? void 0 : element.innerText) !== null && _b !== void 0 ? _b : '';
|
|
122
125
|
if (inputElementRef.current) {
|
|
123
126
|
if (!element) {
|
|
124
127
|
label = inputElementRef.current.value;
|
|
@@ -131,7 +134,7 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
131
134
|
inputElementRef.current.blur();
|
|
132
135
|
}
|
|
133
136
|
}
|
|
134
|
-
const nextValue = (
|
|
137
|
+
const nextValue = (_c = element === null || element === void 0 ? void 0 : element.dataset.uktValue) !== null && _c !== void 0 ? _c : label;
|
|
135
138
|
// If parent is controlling Dropdown via props.value and nextValue is the same, do nothing
|
|
136
139
|
if (valueRef.current && valueRef.current === nextValue)
|
|
137
140
|
return;
|
|
@@ -164,14 +167,12 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
164
167
|
if (!itemElements)
|
|
165
168
|
return;
|
|
166
169
|
const eventTarget = event.target;
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
167
171
|
const item = eventTarget.closest(ITEM_SELECTOR);
|
|
168
|
-
const element = item
|
|
169
|
-
for (
|
|
170
|
-
if (
|
|
171
|
-
setActiveItem({
|
|
172
|
-
dropdownElement,
|
|
173
|
-
element,
|
|
174
|
-
});
|
|
172
|
+
const element = item !== null && item !== void 0 ? item : eventTarget;
|
|
173
|
+
for (const itemElement of itemElements) {
|
|
174
|
+
if (itemElement === element) {
|
|
175
|
+
setActiveItem({ dropdownElement, element });
|
|
175
176
|
return;
|
|
176
177
|
}
|
|
177
178
|
}
|
|
@@ -442,12 +443,9 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
442
443
|
}
|
|
443
444
|
};
|
|
444
445
|
}, [closeDropdown, isOpenOnMount, isTriggerFromProps]);
|
|
445
|
-
const handleTriggerFocus = useCallback(() => {
|
|
446
|
-
setIsOpen(true);
|
|
447
|
-
}, []);
|
|
448
446
|
if (!isTriggerFromProps) {
|
|
449
447
|
if (isSearchable) {
|
|
450
|
-
trigger = (React.createElement(InputText, { className: TRIGGER_CLASS_NAME, disabled: disabled, initialValue: value
|
|
448
|
+
trigger = (React.createElement(InputText, { className: TRIGGER_CLASS_NAME, disabled: disabled, initialValue: value !== null && value !== void 0 ? value : '', name: name, onFocus: setDropdownOpenRef.current, placeholder: placeholder, ref: inputElementRef, selectTextOnFocus: true, tabIndex: tabIndex, type: "text" }));
|
|
451
449
|
}
|
|
452
450
|
else {
|
|
453
451
|
trigger = (React.createElement("button", { className: TRIGGER_CLASS_NAME, tabIndex: 0 }, trigger));
|
|
@@ -458,7 +456,7 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
458
456
|
React.createElement("div", { className: LABEL_TEXT_CLASS_NAME }, label),
|
|
459
457
|
trigger));
|
|
460
458
|
}
|
|
461
|
-
const style = useMemo(() => (Object.assign(Object.assign({}, (outOfBounds.maxHeight
|
|
459
|
+
const style = useMemo(() => (Object.assign(Object.assign(Object.assign({}, styleFromProps), (outOfBounds.maxHeight
|
|
462
460
|
? {
|
|
463
461
|
[BODY_MAX_HEIGHT_VAR]: `calc(${outOfBounds.maxHeight}px - var(--uktdd-body-buffer))`,
|
|
464
462
|
}
|
|
@@ -466,16 +464,14 @@ export default function Dropdown({ allowCreate, allowEmpty = true, children, cla
|
|
|
466
464
|
? {
|
|
467
465
|
[BODY_MAX_WIDTH_VAR]: `calc(${outOfBounds.maxWidth}px - var(--uktdd-body-buffer))`,
|
|
468
466
|
}
|
|
469
|
-
: null))), [outOfBounds.maxHeight, outOfBounds.maxWidth]);
|
|
467
|
+
: null))), [outOfBounds.maxHeight, outOfBounds.maxWidth, styleFromProps]);
|
|
470
468
|
return (React.createElement(Fragment, null,
|
|
471
469
|
React.createElement(Style, null, STYLES),
|
|
472
470
|
React.createElement("div", { className: clsx(ROOT_CLASS_NAME, className, {
|
|
473
471
|
disabled,
|
|
474
472
|
'is-open': isOpen,
|
|
475
473
|
'is-searchable': isSearchable,
|
|
476
|
-
}), onClick: onClick, onMouseDown: handleMouseDown,
|
|
477
|
-
? undefined
|
|
478
|
-
: 0 },
|
|
474
|
+
}), onClick: onClick, onMouseDown: handleMouseDown, onMouseMove: handleMouseMove, onMouseOut: handleMouseOut, onMouseOver: handleMouseOver, onMouseUp: handleMouseUp, ref: handleRef, style: style },
|
|
479
475
|
trigger,
|
|
480
476
|
isOpen ? (React.createElement("div", { className: clsx(BODY_CLASS_NAME, {
|
|
481
477
|
'calculating-position': !outOfBounds.hasLayout,
|
package/dist/Dropdown.js.flow
CHANGED
|
@@ -15,24 +15,28 @@ export type Item = {|
|
|
|
15
15
|
|};
|
|
16
16
|
export type Props = {|
|
|
17
17
|
/**
|
|
18
|
-
* Boolean indicating if the user can submit a value not already in the
|
|
18
|
+
* Boolean indicating if the user can submit a value not already in the
|
|
19
|
+
* dropdown.
|
|
19
20
|
*/
|
|
20
21
|
allowCreate?: boolean,
|
|
21
22
|
|
|
22
23
|
/**
|
|
23
|
-
* Boolean indicating if the user can submit an empty value (i.e. clear
|
|
24
|
+
* Boolean indicating if the user can submit an empty value (i.e. clear
|
|
25
|
+
* the value). Defaults to true.
|
|
24
26
|
*/
|
|
25
27
|
allowEmpty?: boolean,
|
|
26
28
|
|
|
27
29
|
/**
|
|
28
|
-
* Can take a single React element (e.g. ReactChild) or exactly two
|
|
30
|
+
* Can take a single React element (e.g. ReactChild) or exactly two
|
|
31
|
+
* renderable children.
|
|
29
32
|
*/
|
|
30
33
|
children: React.Element<any> | ChildrenTuple,
|
|
31
34
|
className?: string,
|
|
32
35
|
disabled?: boolean,
|
|
33
36
|
|
|
34
37
|
/**
|
|
35
|
-
* Group identifier string links dropdowns together into a menu
|
|
38
|
+
* Group identifier string links dropdowns together into a menu
|
|
39
|
+
* (like macOS top menubar).
|
|
36
40
|
*/
|
|
37
41
|
group?: string,
|
|
38
42
|
hasItems?: boolean,
|
|
@@ -42,7 +46,8 @@ export type Props = {|
|
|
|
42
46
|
label?: string,
|
|
43
47
|
|
|
44
48
|
/**
|
|
45
|
-
* Only usable in conjunction with {isSearchable: true}
|
|
49
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
50
|
+
* Used as search input’s name.
|
|
46
51
|
*/
|
|
47
52
|
name?: string,
|
|
48
53
|
onClick?: (event: SyntheticMouseEvent<HTMLElement>) => mixed,
|
|
@@ -53,12 +58,15 @@ export type Props = {|
|
|
|
53
58
|
onSubmitItem?: (payload: Item) => void,
|
|
54
59
|
|
|
55
60
|
/**
|
|
56
|
-
* Only usable in conjunction with {isSearchable: true}
|
|
61
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
62
|
+
* Used as search input’s placeholder.
|
|
57
63
|
*/
|
|
58
64
|
placeholder?: string,
|
|
65
|
+
style?: React.CSSProperties,
|
|
59
66
|
|
|
60
67
|
/**
|
|
61
|
-
* Only usable in conjunction with {isSearchable: true}
|
|
68
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
69
|
+
* Used as search input’s tabIndex.
|
|
62
70
|
*/
|
|
63
71
|
tabIndex?: number,
|
|
64
72
|
|
|
@@ -68,4 +76,4 @@ export type Props = {|
|
|
|
68
76
|
*/
|
|
69
77
|
value?: string,
|
|
70
78
|
|};
|
|
71
|
-
declare export default function Dropdown(x: Props): React
|
|
79
|
+
declare export default function Dropdown(x: Props): React.JSX.Element;
|
package/dist/Dropdown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../src/Dropdown.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../src/Dropdown.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { cleanup, render, screen } from '@testing-library/react';
|
|
3
|
+
import userEvent from '@testing-library/user-event';
|
|
4
|
+
import React from 'react'; // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
5
|
+
import { afterEach, describe, expect, it } from 'vitest';
|
|
6
|
+
import Dropdown from './Dropdown.js';
|
|
7
|
+
afterEach(cleanup);
|
|
8
|
+
describe('Dropdown.js', () => {
|
|
9
|
+
it('renders its contents as a dropdown menu with an empty button to trigger it when it’s rendered with a single child', async () => {
|
|
10
|
+
const user = userEvent.setup();
|
|
11
|
+
render(React.createElement(Dropdown, null,
|
|
12
|
+
React.createElement("ul", { "data-testid": "dropdown-list" },
|
|
13
|
+
React.createElement("li", null, "0px"),
|
|
14
|
+
React.createElement("li", null, "4px"),
|
|
15
|
+
React.createElement("li", null, "9px"),
|
|
16
|
+
React.createElement("li", null, "18px"),
|
|
17
|
+
React.createElement("li", null, "36px"),
|
|
18
|
+
React.createElement("li", null, "54px"),
|
|
19
|
+
React.createElement("li", null, "72px"),
|
|
20
|
+
React.createElement("li", null, "144px"),
|
|
21
|
+
React.createElement("li", null, "167px"),
|
|
22
|
+
React.createElement("li", null, "198px"))));
|
|
23
|
+
const trigger = screen.getByRole('button');
|
|
24
|
+
expect(trigger.innerHTML).toBe('');
|
|
25
|
+
await user.click(trigger);
|
|
26
|
+
expect(screen.getByTestId('dropdown-list')).toBeTruthy();
|
|
27
|
+
});
|
|
28
|
+
it('renders the first child as a trigger and the second child as a dropdown when given two children', async () => {
|
|
29
|
+
const user = userEvent.setup();
|
|
30
|
+
render(React.createElement(Dropdown, null,
|
|
31
|
+
"File",
|
|
32
|
+
React.createElement("ul", { "data-testid": "file-menu" },
|
|
33
|
+
React.createElement("li", null, "New Window"),
|
|
34
|
+
React.createElement("li", null, "New Private Window"),
|
|
35
|
+
React.createElement("li", null, "New Tab"),
|
|
36
|
+
React.createElement("li", null, "New Empty Tab Group"),
|
|
37
|
+
React.createElement("li", null, "Open File\u2026"),
|
|
38
|
+
React.createElement("li", null, "Open Location\u2026"),
|
|
39
|
+
React.createElement("li", { className: "separator" }),
|
|
40
|
+
React.createElement("li", null, "Close Window"),
|
|
41
|
+
React.createElement("li", null, "Close All Window"),
|
|
42
|
+
React.createElement("li", null, "Close Tab"),
|
|
43
|
+
React.createElement("li", null, "Save As\u2026"),
|
|
44
|
+
React.createElement("li", { className: "separator" }),
|
|
45
|
+
React.createElement("li", null, "Print\u2026"))));
|
|
46
|
+
const trigger = screen.getByRole('button');
|
|
47
|
+
expect(trigger.innerHTML).toBe('File');
|
|
48
|
+
await user.click(trigger);
|
|
49
|
+
expect(screen.getByTestId('file-menu')).toBeTruthy();
|
|
50
|
+
});
|
|
51
|
+
it('triggers props.onClose and props.onOpen at the appropriate times', async () => {
|
|
52
|
+
let closedCount = 0;
|
|
53
|
+
const handleClose = () => closedCount++;
|
|
54
|
+
let openedCount = 0;
|
|
55
|
+
const handleOpen = () => openedCount++;
|
|
56
|
+
const user = userEvent.setup();
|
|
57
|
+
render(React.createElement(Dropdown, { onClose: handleClose, onOpen: handleOpen },
|
|
58
|
+
"File",
|
|
59
|
+
React.createElement("ul", { "data-testid": "file-menu" },
|
|
60
|
+
React.createElement("li", null, "New Window"),
|
|
61
|
+
React.createElement("li", null, "New Private Window"),
|
|
62
|
+
React.createElement("li", null, "New Tab"),
|
|
63
|
+
React.createElement("li", null, "New Empty Tab Group"),
|
|
64
|
+
React.createElement("li", null, "Open File\u2026"),
|
|
65
|
+
React.createElement("li", null, "Open Location\u2026"),
|
|
66
|
+
React.createElement("li", { className: "separator" }),
|
|
67
|
+
React.createElement("li", null, "Close Window"),
|
|
68
|
+
React.createElement("li", null, "Close All Window"),
|
|
69
|
+
React.createElement("li", null, "Close Tab"),
|
|
70
|
+
React.createElement("li", null, "Save As\u2026"),
|
|
71
|
+
React.createElement("li", { className: "separator" }),
|
|
72
|
+
React.createElement("li", null, "Print\u2026"))));
|
|
73
|
+
const trigger = screen.getByRole('button');
|
|
74
|
+
expect(closedCount).toBe(0);
|
|
75
|
+
expect(openedCount).toBe(0);
|
|
76
|
+
await user.click(trigger);
|
|
77
|
+
expect(closedCount).toBe(0);
|
|
78
|
+
expect(openedCount).toBe(1);
|
|
79
|
+
expect(screen.getByTestId('file-menu')).toBeTruthy();
|
|
80
|
+
await user.type(trigger, '{Esc}');
|
|
81
|
+
expect(closedCount).toBe(1);
|
|
82
|
+
expect(openedCount).toBe(1);
|
|
83
|
+
expect(screen.queryByTestId('file-menu')).toBe(null);
|
|
84
|
+
});
|
|
85
|
+
it('triggers props.onOpen immediately if props.isOpenOnMount', async () => {
|
|
86
|
+
let closedCount = 0;
|
|
87
|
+
const handleClose = () => closedCount++;
|
|
88
|
+
let openedCount = 0;
|
|
89
|
+
const handleOpen = () => openedCount++;
|
|
90
|
+
const user = userEvent.setup();
|
|
91
|
+
render(React.createElement(Dropdown, { isOpenOnMount: true, onClose: handleClose, onOpen: handleOpen },
|
|
92
|
+
React.createElement("p", { "data-testid": "dropdown-body" }, "this is the dropdown contents")));
|
|
93
|
+
const trigger = screen.getByRole('button');
|
|
94
|
+
expect(screen.getByTestId('dropdown-body')).toBeTruthy();
|
|
95
|
+
expect(openedCount).toBe(1);
|
|
96
|
+
await user.click(trigger);
|
|
97
|
+
expect(closedCount).toBe(1);
|
|
98
|
+
expect(openedCount).toBe(1);
|
|
99
|
+
expect(screen.queryByTestId('dropdown-body')).toBe(null);
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=Dropdown.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Dropdown.test.js","sourceRoot":"","sources":["../src/Dropdown.test.tsx"],"names":[],"mappings":"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"}
|
package/dist/helpers.js
CHANGED
|
@@ -27,6 +27,7 @@ export const getItemElements = (dropdownElement) => {
|
|
|
27
27
|
export const getActiveItemElement = (dropdownElement) => {
|
|
28
28
|
if (!dropdownElement)
|
|
29
29
|
return null;
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
30
31
|
return dropdownElement.querySelector('[data-ukt-active]');
|
|
31
32
|
};
|
|
32
33
|
const clearItemElementsState = (itemElements) => {
|
package/dist/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,MAAM,aAAa,GAAG,mCAAmC,CAAC;AAEjE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,eAAmC,EAAE,EAAE;IACnE,IAAI,CAAC,eAAe;QAAE,OAAO,IAAI,CAAC;IAElC,MAAM,WAAW,GAAG,eAAe,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;IACjE,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAE9B,IAAI,KAAK,GACL,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEhD,IAAI,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC/B,sEAAsE;IACtE,gDAAgD;IAChD,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC;IAC7B,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
|
package/dist/styles.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
export declare const ROOT_CLASS_NAME = "uktdropdown";
|
|
2
|
-
export declare const ROOT_SELECTOR
|
|
3
|
-
export declare const BODY_CLASS_NAME
|
|
4
|
-
export declare const LABEL_CLASS_NAME
|
|
5
|
-
export declare const LABEL_TEXT_CLASS_NAME
|
|
6
|
-
export declare const TRIGGER_CLASS_NAME
|
|
7
|
-
export declare const BODY_SELECTOR
|
|
8
|
-
export declare const LABEL_SELECTOR
|
|
9
|
-
export declare const LABEL_TEXT_SELECTOR
|
|
10
|
-
export declare const TRIGGER_SELECTOR
|
|
2
|
+
export declare const ROOT_SELECTOR = ".uktdropdown";
|
|
3
|
+
export declare const BODY_CLASS_NAME = "uktdropdown-body";
|
|
4
|
+
export declare const LABEL_CLASS_NAME = "uktdropdown-label";
|
|
5
|
+
export declare const LABEL_TEXT_CLASS_NAME = "uktdropdown-label-text";
|
|
6
|
+
export declare const TRIGGER_CLASS_NAME = "uktdropdown-trigger";
|
|
7
|
+
export declare const BODY_SELECTOR = ".uktdropdown-body";
|
|
8
|
+
export declare const LABEL_SELECTOR = ".uktdropdown-label";
|
|
9
|
+
export declare const LABEL_TEXT_SELECTOR = ".uktdropdown-label-text";
|
|
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:
|
|
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 position: relative;\n display: inline-block;\n}\n.uktdropdown.disabled {\n pointer-events: none;\n}\n.uktdropdown > * {\n cursor: default;\n}\n.uktdropdown-label {\n display: flex;\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: 100%;\n max-height: var(--uktdd-body-max-height);\n min-height: 50px;\n max-width: var(--uktdd-body-max-width);\n min-width: 100%;\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.uktdropdown-body.calculating-position {\n visibility: hidden;\n}\n.uktdropdown-body.out-of-bounds-bottom:not(.out-of-bounds-top) {\n top: auto;\n bottom: 100%;\n}\n.uktdropdown-body.out-of-bounds-right:not(.out-of-bounds-left) {\n left: auto;\n right: 0px;\n}\n.uktdropdown-label + .uktdropdown-body {\n left: auto;\n right: 0;\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/dist/styles.js.flow
CHANGED
|
@@ -6,15 +6,15 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
declare export var ROOT_CLASS_NAME: "uktdropdown";
|
|
9
|
-
declare export var ROOT_SELECTOR:
|
|
10
|
-
declare export var BODY_CLASS_NAME:
|
|
11
|
-
declare export var LABEL_CLASS_NAME:
|
|
12
|
-
declare export var LABEL_TEXT_CLASS_NAME:
|
|
13
|
-
declare export var TRIGGER_CLASS_NAME:
|
|
14
|
-
declare export var BODY_SELECTOR:
|
|
15
|
-
declare export var LABEL_SELECTOR:
|
|
16
|
-
declare export var LABEL_TEXT_SELECTOR:
|
|
17
|
-
declare export var TRIGGER_SELECTOR:
|
|
9
|
+
declare export var ROOT_SELECTOR: ".uktdropdown";
|
|
10
|
+
declare export var BODY_CLASS_NAME: "uktdropdown-body";
|
|
11
|
+
declare export var LABEL_CLASS_NAME: "uktdropdown-label";
|
|
12
|
+
declare export var LABEL_TEXT_CLASS_NAME: "uktdropdown-label-text";
|
|
13
|
+
declare export var TRIGGER_CLASS_NAME: "uktdropdown-trigger";
|
|
14
|
+
declare export var BODY_SELECTOR: ".uktdropdown-body";
|
|
15
|
+
declare export var LABEL_SELECTOR: ".uktdropdown-label";
|
|
16
|
+
declare export var LABEL_TEXT_SELECTOR: ".uktdropdown-label-text";
|
|
17
|
+
declare export var TRIGGER_SELECTOR: ".uktdropdown-trigger";
|
|
18
18
|
declare export var BODY_MAX_HEIGHT_VAR: "--uktdd-body-max-height";
|
|
19
19
|
declare export var BODY_MAX_WIDTH_VAR: "--uktdd-body-max-width";
|
|
20
|
-
declare export var STYLES:
|
|
20
|
+
declare export var 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 position: relative;\n display: inline-block;\n}\n.uktdropdown.disabled {\n pointer-events: none;\n}\n.uktdropdown > * {\n cursor: default;\n}\n.uktdropdown-label {\n display: flex;\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: 100%;\n max-height: var(--uktdd-body-max-height);\n min-height: 50px;\n max-width: var(--uktdd-body-max-width);\n min-width: 100%;\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.uktdropdown-body.calculating-position {\n visibility: hidden;\n}\n.uktdropdown-body.out-of-bounds-bottom:not(.out-of-bounds-top) {\n top: auto;\n bottom: 100%;\n}\n.uktdropdown-body.out-of-bounds-right:not(.out-of-bounds-left) {\n left: auto;\n right: 0px;\n}\n.uktdropdown-label + .uktdropdown-body {\n left: auto;\n right: 0;\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.36.0",
|
|
4
4
|
"description": "React component that renders a dropdown with a trigger and supports searching, keyboard access, and more",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
@@ -42,18 +42,19 @@
|
|
|
42
42
|
"@testing-library/dom": "^9.3.1",
|
|
43
43
|
"@testing-library/react": "^14.0.0",
|
|
44
44
|
"@testing-library/user-event": "^14.4.3",
|
|
45
|
-
"@types/react": "^18.
|
|
46
|
-
"
|
|
45
|
+
"@types/react": "^18.2.45",
|
|
46
|
+
"happy-dom": "^12.10.3",
|
|
47
47
|
"react": "^18",
|
|
48
48
|
"react-dom": "^18",
|
|
49
|
-
"typescript": "^5.
|
|
49
|
+
"typescript": "^5.3.3",
|
|
50
|
+
"vitest": "^1.1.0"
|
|
50
51
|
},
|
|
51
52
|
"dependencies": {
|
|
52
|
-
"@acusti/input-text": "^1.
|
|
53
|
-
"@acusti/matchmaking": "^0.
|
|
54
|
-
"@acusti/styling": "^0.
|
|
55
|
-
"@acusti/use-is-out-of-bounds": "^0.
|
|
56
|
-
"@acusti/use-keyboard-events": "^0.
|
|
53
|
+
"@acusti/input-text": "^1.4.0",
|
|
54
|
+
"@acusti/matchmaking": "^0.6.0",
|
|
55
|
+
"@acusti/styling": "^0.7.0",
|
|
56
|
+
"@acusti/use-is-out-of-bounds": "^0.9.0",
|
|
57
|
+
"@acusti/use-keyboard-events": "^0.5.0",
|
|
57
58
|
"clsx": "^2"
|
|
58
59
|
},
|
|
59
60
|
"peerDependencies": {
|
package/src/Dropdown.test.tsx
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
// @vitest-environment
|
|
2
|
-
import { cleanup, render } from '@testing-library/react';
|
|
1
|
+
// @vitest-environment happy-dom
|
|
2
|
+
import { cleanup, render, screen } from '@testing-library/react';
|
|
3
3
|
import userEvent from '@testing-library/user-event';
|
|
4
|
-
import React from 'react';
|
|
4
|
+
import React from 'react'; // eslint-disable-line @typescript-eslint/no-unused-vars
|
|
5
5
|
import { afterEach, describe, expect, it } from 'vitest';
|
|
6
6
|
|
|
7
7
|
import Dropdown from './Dropdown.js';
|
|
8
8
|
|
|
9
9
|
afterEach(cleanup);
|
|
10
10
|
|
|
11
|
-
describe('Dropdown.js',
|
|
11
|
+
describe('Dropdown.js', () => {
|
|
12
12
|
it('renders its contents as a dropdown menu with an empty button to trigger it when it’s rendered with a single child', async () => {
|
|
13
13
|
const user = userEvent.setup();
|
|
14
|
-
|
|
14
|
+
render(
|
|
15
15
|
<Dropdown>
|
|
16
16
|
<ul data-testid="dropdown-list">
|
|
17
17
|
<li>0px</li>
|
|
@@ -28,15 +28,15 @@ describe('Dropdown.js', async () => {
|
|
|
28
28
|
</Dropdown>,
|
|
29
29
|
);
|
|
30
30
|
|
|
31
|
-
const trigger = getByRole('button');
|
|
31
|
+
const trigger = screen.getByRole('button');
|
|
32
32
|
expect(trigger.innerHTML).toBe('');
|
|
33
33
|
await user.click(trigger);
|
|
34
|
-
expect(getByTestId('dropdown-list')).toBeTruthy();
|
|
34
|
+
expect(screen.getByTestId('dropdown-list')).toBeTruthy();
|
|
35
35
|
});
|
|
36
36
|
|
|
37
37
|
it('renders the first child as a trigger and the second child as a dropdown when given two children', async () => {
|
|
38
38
|
const user = userEvent.setup();
|
|
39
|
-
|
|
39
|
+
render(
|
|
40
40
|
<Dropdown>
|
|
41
41
|
File
|
|
42
42
|
<ul data-testid="file-menu">
|
|
@@ -57,10 +57,10 @@ describe('Dropdown.js', async () => {
|
|
|
57
57
|
</Dropdown>,
|
|
58
58
|
);
|
|
59
59
|
|
|
60
|
-
const trigger = getByRole('button');
|
|
60
|
+
const trigger = screen.getByRole('button');
|
|
61
61
|
expect(trigger.innerHTML).toBe('File');
|
|
62
62
|
await user.click(trigger);
|
|
63
|
-
expect(getByTestId('file-menu')).toBeTruthy();
|
|
63
|
+
expect(screen.getByTestId('file-menu')).toBeTruthy();
|
|
64
64
|
});
|
|
65
65
|
|
|
66
66
|
it('triggers props.onClose and props.onOpen at the appropriate times', async () => {
|
|
@@ -70,7 +70,7 @@ describe('Dropdown.js', async () => {
|
|
|
70
70
|
const handleOpen = () => openedCount++;
|
|
71
71
|
|
|
72
72
|
const user = userEvent.setup();
|
|
73
|
-
|
|
73
|
+
render(
|
|
74
74
|
<Dropdown onClose={handleClose} onOpen={handleOpen}>
|
|
75
75
|
File
|
|
76
76
|
<ul data-testid="file-menu">
|
|
@@ -91,17 +91,17 @@ describe('Dropdown.js', async () => {
|
|
|
91
91
|
</Dropdown>,
|
|
92
92
|
);
|
|
93
93
|
|
|
94
|
-
const trigger = getByRole('button');
|
|
94
|
+
const trigger = screen.getByRole('button');
|
|
95
95
|
expect(closedCount).toBe(0);
|
|
96
96
|
expect(openedCount).toBe(0);
|
|
97
97
|
await user.click(trigger);
|
|
98
98
|
expect(closedCount).toBe(0);
|
|
99
99
|
expect(openedCount).toBe(1);
|
|
100
|
-
expect(
|
|
100
|
+
expect(screen.getByTestId('file-menu')).toBeTruthy();
|
|
101
101
|
await user.type(trigger, '{Esc}');
|
|
102
102
|
expect(closedCount).toBe(1);
|
|
103
103
|
expect(openedCount).toBe(1);
|
|
104
|
-
expect(queryByTestId('file-menu')).toBe(null);
|
|
104
|
+
expect(screen.queryByTestId('file-menu')).toBe(null);
|
|
105
105
|
});
|
|
106
106
|
|
|
107
107
|
it('triggers props.onOpen immediately if props.isOpenOnMount', async () => {
|
|
@@ -111,18 +111,18 @@ describe('Dropdown.js', async () => {
|
|
|
111
111
|
const handleOpen = () => openedCount++;
|
|
112
112
|
|
|
113
113
|
const user = userEvent.setup();
|
|
114
|
-
|
|
114
|
+
render(
|
|
115
115
|
<Dropdown isOpenOnMount onClose={handleClose} onOpen={handleOpen}>
|
|
116
|
-
<p data-testid="dropdown">this is the dropdown contents</p>
|
|
116
|
+
<p data-testid="dropdown-body">this is the dropdown contents</p>
|
|
117
117
|
</Dropdown>,
|
|
118
118
|
);
|
|
119
119
|
|
|
120
|
-
const trigger = getByRole('button');
|
|
121
|
-
expect(
|
|
120
|
+
const trigger = screen.getByRole('button');
|
|
121
|
+
expect(screen.getByTestId('dropdown-body')).toBeTruthy();
|
|
122
122
|
expect(openedCount).toBe(1);
|
|
123
123
|
await user.click(trigger);
|
|
124
124
|
expect(closedCount).toBe(1);
|
|
125
125
|
expect(openedCount).toBe(1);
|
|
126
|
-
expect(queryByTestId('dropdown')).toBe(null);
|
|
126
|
+
expect(screen.queryByTestId('dropdown-body')).toBe(null);
|
|
127
127
|
});
|
|
128
128
|
});
|
package/src/Dropdown.tsx
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/mouse-events-have-key-events, jsx-a11y/no-static-element-interactions */
|
|
1
2
|
import InputText from '@acusti/input-text';
|
|
2
3
|
import { Style } from '@acusti/styling';
|
|
3
4
|
import useIsOutOfBounds from '@acusti/use-is-out-of-bounds';
|
|
@@ -7,6 +8,12 @@ import useKeyboardEvents, {
|
|
|
7
8
|
import clsx from 'clsx';
|
|
8
9
|
import * as React from 'react';
|
|
9
10
|
|
|
11
|
+
import {
|
|
12
|
+
getActiveItemElement,
|
|
13
|
+
getItemElements,
|
|
14
|
+
ITEM_SELECTOR,
|
|
15
|
+
setActiveItem,
|
|
16
|
+
} from './helpers.js';
|
|
10
17
|
import {
|
|
11
18
|
BODY_CLASS_NAME,
|
|
12
19
|
BODY_MAX_HEIGHT_VAR,
|
|
@@ -18,12 +25,6 @@ import {
|
|
|
18
25
|
STYLES,
|
|
19
26
|
TRIGGER_CLASS_NAME,
|
|
20
27
|
} from './styles.js';
|
|
21
|
-
import {
|
|
22
|
-
getActiveItemElement,
|
|
23
|
-
getItemElements,
|
|
24
|
-
ITEM_SELECTOR,
|
|
25
|
-
setActiveItem,
|
|
26
|
-
} from './helpers.js';
|
|
27
28
|
|
|
28
29
|
type ChildrenTuple = [React.ReactNode, React.ReactNode];
|
|
29
30
|
|
|
@@ -35,22 +36,37 @@ export type Item = {
|
|
|
35
36
|
};
|
|
36
37
|
|
|
37
38
|
export type Props = {
|
|
38
|
-
/**
|
|
39
|
+
/**
|
|
40
|
+
* Boolean indicating if the user can submit a value not already in the
|
|
41
|
+
* dropdown.
|
|
42
|
+
*/
|
|
39
43
|
allowCreate?: boolean;
|
|
40
|
-
/**
|
|
44
|
+
/**
|
|
45
|
+
* Boolean indicating if the user can submit an empty value (i.e. clear
|
|
46
|
+
* the value). Defaults to true.
|
|
47
|
+
*/
|
|
41
48
|
allowEmpty?: boolean;
|
|
42
|
-
/**
|
|
49
|
+
/**
|
|
50
|
+
* Can take a single React element (e.g. ReactChild) or exactly two
|
|
51
|
+
* renderable children.
|
|
52
|
+
*/
|
|
43
53
|
children: React.ReactChild | ChildrenTuple;
|
|
44
54
|
className?: string;
|
|
45
55
|
disabled?: boolean;
|
|
46
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Group identifier string links dropdowns together into a menu
|
|
58
|
+
* (like macOS top menubar).
|
|
59
|
+
*/
|
|
47
60
|
group?: string;
|
|
48
61
|
hasItems?: boolean;
|
|
49
62
|
isOpenOnMount?: boolean;
|
|
50
63
|
isSearchable?: boolean;
|
|
51
64
|
keepOpenOnSubmit?: boolean;
|
|
52
65
|
label?: string;
|
|
53
|
-
/**
|
|
66
|
+
/**
|
|
67
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
68
|
+
* Used as search input’s name.
|
|
69
|
+
*/
|
|
54
70
|
name?: string;
|
|
55
71
|
onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
56
72
|
onClose?: () => unknown;
|
|
@@ -58,9 +74,16 @@ export type Props = {
|
|
|
58
74
|
onMouseUp?: (event: React.MouseEvent<HTMLElement>) => unknown;
|
|
59
75
|
onOpen?: () => unknown;
|
|
60
76
|
onSubmitItem?: (payload: Item) => void;
|
|
61
|
-
/**
|
|
77
|
+
/**
|
|
78
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
79
|
+
* Used as search input’s placeholder.
|
|
80
|
+
*/
|
|
62
81
|
placeholder?: string;
|
|
63
|
-
|
|
82
|
+
style?: React.CSSProperties;
|
|
83
|
+
/**
|
|
84
|
+
* Only usable in conjunction with {isSearchable: true}.
|
|
85
|
+
* Used as search input’s tabIndex.
|
|
86
|
+
*/
|
|
64
87
|
tabIndex?: number;
|
|
65
88
|
/**
|
|
66
89
|
* Used as search input’s value if props.isSearchable === true
|
|
@@ -75,7 +98,7 @@ type MousePosition = { clientX: number; clientY: number };
|
|
|
75
98
|
|
|
76
99
|
const { Children, Fragment, useCallback, useEffect, useMemo, useRef, useState } = React;
|
|
77
100
|
|
|
78
|
-
const noop = () => {};
|
|
101
|
+
const noop = () => {}; // eslint-disable-line @typescript-eslint/no-empty-function
|
|
79
102
|
|
|
80
103
|
const CHILDREN_ERROR =
|
|
81
104
|
'@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';
|
|
@@ -101,6 +124,7 @@ export default function Dropdown({
|
|
|
101
124
|
onOpen,
|
|
102
125
|
onSubmitItem,
|
|
103
126
|
placeholder,
|
|
127
|
+
style: styleFromProps,
|
|
104
128
|
tabIndex,
|
|
105
129
|
value,
|
|
106
130
|
}: Props) {
|
|
@@ -117,7 +141,7 @@ export default function Dropdown({
|
|
|
117
141
|
trigger = (children as ChildrenTuple)[0];
|
|
118
142
|
}
|
|
119
143
|
const isTriggerFromProps = React.isValidElement(trigger);
|
|
120
|
-
const [isOpen, setIsOpen] = useState<boolean>(isOpenOnMount
|
|
144
|
+
const [isOpen, setIsOpen] = useState<boolean>(isOpenOnMount ?? false);
|
|
121
145
|
const [isOpening, setIsOpening] = useState<boolean>(!isOpenOnMount);
|
|
122
146
|
const [dropdownBodyElement, setDropdownBodyElement] = useState<HTMLDivElement | null>(
|
|
123
147
|
null,
|
|
@@ -133,6 +157,7 @@ export default function Dropdown({
|
|
|
133
157
|
const mouseDownPositionRef = useRef<MousePosition | null>(null);
|
|
134
158
|
const outOfBounds = useIsOutOfBounds(dropdownBodyElement);
|
|
135
159
|
|
|
160
|
+
const setDropdownOpenRef = useRef(() => setIsOpen(true));
|
|
136
161
|
const allowCreateRef = useRef(allowCreate);
|
|
137
162
|
const allowEmptyRef = useRef(allowEmpty);
|
|
138
163
|
const hasItemsRef = useRef(hasItems);
|
|
@@ -201,6 +226,7 @@ export default function Dropdown({
|
|
|
201
226
|
(event: Event | React.SyntheticEvent<HTMLElement>) => {
|
|
202
227
|
const eventTarget = event.target as HTMLElement;
|
|
203
228
|
if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
|
|
229
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
204
230
|
const keepOpen = eventTarget.closest(
|
|
205
231
|
'[data-ukt-keep-open]',
|
|
206
232
|
) as HTMLElement | null;
|
|
@@ -225,7 +251,7 @@ export default function Dropdown({
|
|
|
225
251
|
if (inputElementRef.current?.value) return;
|
|
226
252
|
}
|
|
227
253
|
|
|
228
|
-
let label = element?.innerText
|
|
254
|
+
let label = element?.innerText ?? '';
|
|
229
255
|
if (inputElementRef.current) {
|
|
230
256
|
if (!element) {
|
|
231
257
|
label = inputElementRef.current.value;
|
|
@@ -282,14 +308,12 @@ export default function Dropdown({
|
|
|
282
308
|
if (!itemElements) return;
|
|
283
309
|
|
|
284
310
|
const eventTarget = event.target as HTMLElement;
|
|
311
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
285
312
|
const item = eventTarget.closest(ITEM_SELECTOR) as HTMLElement | null;
|
|
286
|
-
const element = item
|
|
287
|
-
for (
|
|
288
|
-
if (
|
|
289
|
-
setActiveItem({
|
|
290
|
-
dropdownElement,
|
|
291
|
-
element,
|
|
292
|
-
});
|
|
313
|
+
const element = item ?? eventTarget;
|
|
314
|
+
for (const itemElement of itemElements) {
|
|
315
|
+
if (itemElement === element) {
|
|
316
|
+
setActiveItem({ dropdownElement, element });
|
|
293
317
|
return;
|
|
294
318
|
}
|
|
295
319
|
}
|
|
@@ -616,19 +640,15 @@ export default function Dropdown({
|
|
|
616
640
|
[closeDropdown, isOpenOnMount, isTriggerFromProps],
|
|
617
641
|
);
|
|
618
642
|
|
|
619
|
-
const handleTriggerFocus = useCallback(() => {
|
|
620
|
-
setIsOpen(true);
|
|
621
|
-
}, []);
|
|
622
|
-
|
|
623
643
|
if (!isTriggerFromProps) {
|
|
624
644
|
if (isSearchable) {
|
|
625
645
|
trigger = (
|
|
626
646
|
<InputText
|
|
627
647
|
className={TRIGGER_CLASS_NAME}
|
|
628
648
|
disabled={disabled}
|
|
629
|
-
initialValue={value
|
|
649
|
+
initialValue={value ?? ''}
|
|
630
650
|
name={name}
|
|
631
|
-
onFocus={
|
|
651
|
+
onFocus={setDropdownOpenRef.current}
|
|
632
652
|
placeholder={placeholder}
|
|
633
653
|
ref={inputElementRef}
|
|
634
654
|
selectTextOnFocus
|
|
@@ -654,8 +674,9 @@ export default function Dropdown({
|
|
|
654
674
|
);
|
|
655
675
|
}
|
|
656
676
|
|
|
657
|
-
const style = useMemo<
|
|
677
|
+
const style = useMemo<React.CSSProperties>(
|
|
658
678
|
() => ({
|
|
679
|
+
...styleFromProps,
|
|
659
680
|
...(outOfBounds.maxHeight
|
|
660
681
|
? {
|
|
661
682
|
[BODY_MAX_HEIGHT_VAR]: `calc(${outOfBounds.maxHeight}px - var(--uktdd-body-buffer))`,
|
|
@@ -667,7 +688,7 @@ export default function Dropdown({
|
|
|
667
688
|
}
|
|
668
689
|
: null),
|
|
669
690
|
}),
|
|
670
|
-
[outOfBounds.maxHeight, outOfBounds.maxWidth],
|
|
691
|
+
[outOfBounds.maxHeight, outOfBounds.maxWidth, styleFromProps],
|
|
671
692
|
);
|
|
672
693
|
|
|
673
694
|
return (
|
|
@@ -681,17 +702,12 @@ export default function Dropdown({
|
|
|
681
702
|
})}
|
|
682
703
|
onClick={onClick}
|
|
683
704
|
onMouseDown={handleMouseDown}
|
|
684
|
-
onMouseUp={handleMouseUp}
|
|
685
705
|
onMouseMove={handleMouseMove}
|
|
686
706
|
onMouseOut={handleMouseOut}
|
|
687
707
|
onMouseOver={handleMouseOver}
|
|
708
|
+
onMouseUp={handleMouseUp}
|
|
688
709
|
ref={handleRef}
|
|
689
710
|
style={style}
|
|
690
|
-
tabIndex={
|
|
691
|
-
isSearchable || inputElementRef.current || !isTriggerFromProps
|
|
692
|
-
? undefined
|
|
693
|
-
: 0
|
|
694
|
-
}
|
|
695
711
|
>
|
|
696
712
|
{trigger}
|
|
697
713
|
{isOpen ? (
|
package/src/helpers.ts
CHANGED
|
@@ -30,6 +30,7 @@ export const getItemElements = (dropdownElement: HTMLElement | null) => {
|
|
|
30
30
|
|
|
31
31
|
export const getActiveItemElement = (dropdownElement: HTMLElement | null) => {
|
|
32
32
|
if (!dropdownElement) return null;
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
33
34
|
return dropdownElement.querySelector('[data-ukt-active]') as HTMLElement | null;
|
|
34
35
|
};
|
|
35
36
|
|