@acusti/dropdown 0.18.3 → 0.20.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.
@@ -15,9 +15,13 @@ export declare type Props = {
15
15
  hasItems?: boolean;
16
16
  isOpenOnMount?: boolean;
17
17
  isSearchable?: boolean;
18
+ keepOpenOnSubmit?: boolean;
18
19
  label?: string;
19
20
  /** Only usable in conjunction with {isSearchable: true}; used as search input’s name */
20
21
  name?: string;
22
+ onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;
23
+ onMouseDown?: (event: React.MouseEvent<HTMLElement>) => unknown;
24
+ onMouseUp?: (event: React.MouseEvent<HTMLElement>) => unknown;
21
25
  onSubmitItem?: (payload: Item) => void;
22
26
  /** Only usable in conjunction with {isSearchable: true}; used as search input’s placeholder */
23
27
  placeholder?: string;
package/dist/Dropdown.js CHANGED
@@ -1,16 +1,16 @@
1
- // TODO add mouseout event handler to check event.target and clear active element
2
- // whenever mouse leaves it
1
+ // TODO fix searching to match on significant parts of value (i.e. not parts that are the same)
2
+ // could also match on ukt-values (see searchable Font Weight example in storybook docs)
3
3
  import InputText from '@acusti/input-text';
4
4
  import { Style } from '@acusti/styling';
5
5
  import useIsOutOfBounds from '@acusti/use-is-out-of-bounds';
6
- import classnames from 'classnames';
6
+ import clsx from 'clsx';
7
7
  import * as React from 'react';
8
8
  import { BODY_CLASS_NAME, BODY_SELECTOR, LABEL_CLASS_NAME, LABEL_TEXT_CLASS_NAME, ROOT_CLASS_NAME, STYLES, TRIGGER_CLASS_NAME, } from './styles.js';
9
9
  import { getActiveItemElement, getItemElements, ITEM_SELECTOR, KEY_EVENT_ELEMENTS, setActiveItem, } from './helpers.js';
10
10
  const { Children, Fragment, useCallback, useLayoutEffect, useRef, useState } = React;
11
11
  const noop = () => { };
12
12
  const CHILDREN_ERROR = '@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';
13
- const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems = true, isOpenOnMount, isSearchable, label, name, onSubmitItem, placeholder, tabIndex, value, }) => {
13
+ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems = true, isOpenOnMount, isSearchable, keepOpenOnSubmit = !hasItems, label, name, onClick, onMouseDown, onMouseUp, onSubmitItem, placeholder, tabIndex, value, }) => {
14
14
  const childrenCount = Children.count(children);
15
15
  if (childrenCount !== 1 && childrenCount !== 2) {
16
16
  if (childrenCount === 0) {
@@ -37,6 +37,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
37
37
  const isOpenRef = useRef(isOpen);
38
38
  const isOpeningRef = useRef(isOpening);
39
39
  const isTriggerFromPropsRef = useRef(isOpening);
40
+ const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);
40
41
  const onSubmitItemRef = useRef(onSubmitItem);
41
42
  const valueRef = useRef(value);
42
43
  useLayoutEffect(() => {
@@ -45,6 +46,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
45
46
  isOpenRef.current = isOpen;
46
47
  isOpeningRef.current = isOpening;
47
48
  isTriggerFromPropsRef.current = isTriggerFromProps;
49
+ keepOpenOnSubmitRef.current = keepOpenOnSubmit;
48
50
  onSubmitItemRef.current = onSubmitItem;
49
51
  valueRef.current = value;
50
52
  }, [
@@ -53,6 +55,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
53
55
  isOpen,
54
56
  isOpening,
55
57
  isTriggerFromProps,
58
+ keepOpenOnSubmit,
56
59
  onSubmitItem,
57
60
  value,
58
61
  ]);
@@ -65,12 +68,18 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
65
68
  closingTimerRef.current = null;
66
69
  }
67
70
  }, []);
68
- const handleSubmitItem = useCallback(() => {
71
+ const handleSubmitItem = useCallback((event) => {
69
72
  var _a;
70
- if (isOpenRef.current) {
71
- // A short timeout before closing is better UX when user selects an item so dropdown
72
- // doesn’t close before expected. It also enables using <Link />s in the dropdown body.
73
- closingTimerRef.current = setTimeout(closeDropdown, 90);
73
+ const eventTarget = event.target;
74
+ if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
75
+ const keepOpen = eventTarget.closest('[data-ukt-keep-open]');
76
+ // Don’t close dropdown if event occurs w/in data-ukt-keep-open element
77
+ if (!(keepOpen === null || keepOpen === void 0 ? void 0 : keepOpen.dataset.uktKeepOpen) ||
78
+ keepOpen.dataset.uktKeepOpen === 'false') {
79
+ // A short timeout before closing is better UX when user selects an item so dropdown
80
+ // doesn’t close before expected. It also enables using <Link />s in the dropdown body.
81
+ closingTimerRef.current = setTimeout(closeDropdown, 90);
82
+ }
74
83
  }
75
84
  if (!hasItemsRef.current)
76
85
  return;
@@ -137,6 +146,55 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
137
146
  }
138
147
  }
139
148
  }, []);
149
+ const handleMouseOut = useCallback((event) => {
150
+ if (!hasItemsRef.current)
151
+ return;
152
+ const activeItem = getActiveItemElement(dropdownElementRef.current);
153
+ if (!activeItem)
154
+ return;
155
+ const eventRelatedTarget = event.relatedTarget;
156
+ if (activeItem !== event.target || activeItem.contains(eventRelatedTarget))
157
+ return;
158
+ // If user moused out of activeItem (not into a descendant), it’s no longer active
159
+ delete activeItem.dataset.uktActive;
160
+ }, []);
161
+ const handleMouseDown = useCallback((event) => {
162
+ if (onMouseDown)
163
+ onMouseDown(event);
164
+ if (isOpenRef.current)
165
+ return;
166
+ setIsOpen(true);
167
+ setIsOpening(true);
168
+ mouseDownPositionRef.current = {
169
+ clientX: event.clientX,
170
+ clientY: event.clientY,
171
+ };
172
+ isOpeningTimerRef.current = setTimeout(() => {
173
+ setIsOpening(false);
174
+ isOpeningTimerRef.current = null;
175
+ }, 1000);
176
+ }, [onMouseDown]);
177
+ const handleMouseUp = useCallback((event) => {
178
+ if (onMouseUp)
179
+ onMouseUp(event);
180
+ // If dropdown isn’t open or is already closing, do nothing
181
+ if (!isOpenRef.current || closingTimerRef.current)
182
+ return;
183
+ // If dropdown has no items, do nothing
184
+ if (!hasItemsRef.current)
185
+ return;
186
+ const eventTarget = event.target;
187
+ // If mouse event is within dropdown body, trigger submit
188
+ if (eventTarget.closest(BODY_SELECTOR)) {
189
+ handleSubmitItem(event);
190
+ return;
191
+ }
192
+ // Don’t close dropdown if isOpening or search input is focused
193
+ if (!isOpeningRef.current &&
194
+ inputElementRef.current !== eventTarget.ownerDocument.activeElement) {
195
+ closeDropdown();
196
+ }
197
+ }, [closeDropdown, handleSubmitItem, onMouseUp]);
140
198
  const cleanupEventListenersRef = useRef(noop);
141
199
  const handleRef = useCallback((ref) => {
142
200
  dropdownElementRef.current = ref;
@@ -153,25 +211,16 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
153
211
  inputElement = ref.firstElementChild.querySelector('input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea');
154
212
  inputElementRef.current = inputElement;
155
213
  }
156
- const handleMouseDown = ({ clientX, clientY, target }) => {
214
+ const handleGlobalMouseDown = ({ target }) => {
157
215
  const eventTarget = target;
158
216
  if (dropdownElementRef.current &&
159
217
  !dropdownElementRef.current.contains(eventTarget)) {
160
218
  // Close dropdown on an outside click
161
219
  closeDropdown();
162
- return;
163
220
  }
164
- if (isOpenRef.current)
165
- return;
166
- setIsOpen(true);
167
- setIsOpening(true);
168
- mouseDownPositionRef.current = { clientX, clientY };
169
- isOpeningTimerRef.current = setTimeout(() => {
170
- setIsOpening(false);
171
- isOpeningTimerRef.current = null;
172
- }, 1000);
173
221
  };
174
- const handleMouseUp = ({ target }) => {
222
+ const handleGlobalMouseUp = ({ target }) => {
223
+ var _a;
175
224
  if (!isOpenRef.current || closingTimerRef.current)
176
225
  return;
177
226
  // If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp
@@ -183,18 +232,9 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
183
232
  }
184
233
  return;
185
234
  }
186
- const isTargetInBody = target.closest(BODY_SELECTOR);
187
- // If mouseup is on dropdown body and there are no items, don’t close the dropdown
188
- if (!hasItemsRef.current && isTargetInBody)
189
- return;
190
- // If mouseup is on an item, trigger submit item, else close the dropdown
191
- if (isTargetInBody) {
192
- handleSubmitItem();
193
- }
194
- else if (!inputElementRef.current ||
195
- (dropdownElementRef.current &&
196
- dropdownElementRef.current.contains(ownerDocument.activeElement))) {
197
- // If dropdown is searchable and ref is still focused, this won’t be invoked
235
+ const eventTarget = target;
236
+ // Only handle mouseup events from outside the dropdown here
237
+ if (!((_a = dropdownElementRef.current) === null || _a === void 0 ? void 0 : _a.contains(eventTarget))) {
198
238
  closeDropdown();
199
239
  }
200
240
  };
@@ -262,7 +302,7 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
262
302
  // If dropdown isOpen, handle submitting the value
263
303
  if (key === 'Enter' || (key === ' ' && !inputElementRef.current)) {
264
304
  onEventHandled();
265
- handleSubmitItem();
305
+ handleSubmitItem(event);
266
306
  return;
267
307
  }
268
308
  // If dropdown isOpen, handle closing it on escape or spacebar if !hasItems
@@ -315,10 +355,10 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
315
355
  }
316
356
  };
317
357
  // Close dropdown if any element is focused outside of this dropdown
318
- const handleFocusIn = (event) => {
358
+ const handleFocusIn = ({ target }) => {
319
359
  if (!isOpenRef.current)
320
360
  return;
321
- const eventTarget = event.target;
361
+ const eventTarget = target;
322
362
  // If focused element is a descendant or a parent of the dropdown, do nothing
323
363
  if (!dropdownElementRef.current ||
324
364
  dropdownElementRef.current.contains(eventTarget) ||
@@ -329,13 +369,13 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
329
369
  };
330
370
  document.addEventListener('focusin', handleFocusIn);
331
371
  document.addEventListener('keydown', handleKeyDown);
332
- document.addEventListener('mousedown', handleMouseDown);
333
- document.addEventListener('mouseup', handleMouseUp);
372
+ document.addEventListener('mousedown', handleGlobalMouseDown);
373
+ document.addEventListener('mouseup', handleGlobalMouseUp);
334
374
  if (ownerDocument !== document) {
335
375
  ownerDocument.addEventListener('focusin', handleFocusIn);
336
376
  ownerDocument.addEventListener('keydown', handleKeyDown);
337
- ownerDocument.addEventListener('mousedown', handleMouseDown);
338
- ownerDocument.addEventListener('mouseup', handleMouseUp);
377
+ ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);
378
+ ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);
339
379
  }
340
380
  // If dropdown should be open on mount, focus it
341
381
  if (isOpenOnMount) {
@@ -367,13 +407,13 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
367
407
  cleanupEventListenersRef.current = () => {
368
408
  document.removeEventListener('focusin', handleFocusIn);
369
409
  document.removeEventListener('keydown', handleKeyDown);
370
- document.removeEventListener('mousedown', handleMouseDown);
371
- document.removeEventListener('mouseup', handleMouseUp);
410
+ document.removeEventListener('mousedown', handleGlobalMouseDown);
411
+ document.removeEventListener('mouseup', handleGlobalMouseUp);
372
412
  if (ownerDocument !== document) {
373
413
  ownerDocument.removeEventListener('focusin', handleFocusIn);
374
414
  ownerDocument.removeEventListener('keydown', handleKeyDown);
375
- ownerDocument.removeEventListener('mousedown', handleMouseDown);
376
- ownerDocument.removeEventListener('mouseup', handleMouseUp);
415
+ ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);
416
+ ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);
377
417
  }
378
418
  if (inputElement) {
379
419
  inputElement.removeEventListener('input', handleInput);
@@ -398,15 +438,15 @@ const Dropdown = ({ allowEmpty = true, children, className, disabled, hasItems =
398
438
  }
399
439
  return (React.createElement(Fragment, null,
400
440
  React.createElement(Style, null, STYLES),
401
- React.createElement("div", { className: classnames(ROOT_CLASS_NAME, className, {
441
+ React.createElement("div", { className: clsx(ROOT_CLASS_NAME, className, {
402
442
  disabled,
403
443
  'is-open': isOpen,
404
444
  'is-searchable': isSearchable,
405
- }), onMouseMove: handleMouseMove, onMouseOver: handleMouseOver, ref: handleRef, tabIndex: isSearchable || inputElementRef.current || !isTriggerFromProps
445
+ }), onClick: onClick, onMouseDown: handleMouseDown, onMouseUp: handleMouseUp, onMouseMove: handleMouseMove, onMouseOut: handleMouseOut, onMouseOver: handleMouseOver, ref: handleRef, tabIndex: isSearchable || inputElementRef.current || !isTriggerFromProps
406
446
  ? undefined
407
447
  : 0 },
408
448
  trigger,
409
- isOpen ? (React.createElement("div", { className: classnames(BODY_CLASS_NAME, {
449
+ isOpen ? (React.createElement("div", { className: clsx(BODY_CLASS_NAME, {
410
450
  'calculating-position': !outOfBounds.hasLayout,
411
451
  'has-items': hasItems,
412
452
  'out-of-bounds-bottom': outOfBounds.bottom,
@@ -30,12 +30,16 @@ export type Props = {|
30
30
  hasItems?: boolean,
31
31
  isOpenOnMount?: boolean,
32
32
  isSearchable?: boolean,
33
+ keepOpenOnSubmit?: boolean,
33
34
  label?: string,
34
35
 
35
36
  /**
36
37
  * Only usable in conjunction with {isSearchable: true}; used as search input’s name
37
38
  */
38
39
  name?: string,
40
+ onClick?: (event: SyntheticMouseEvent<HTMLElement>) => mixed,
41
+ onMouseDown?: (event: SyntheticMouseEvent<HTMLElement>) => mixed,
42
+ onMouseUp?: (event: SyntheticMouseEvent<HTMLElement>) => mixed,
39
43
  onSubmitItem?: (payload: Item) => void,
40
44
 
41
45
  /**
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acusti/dropdown",
3
- "version": "0.18.3",
3
+ "version": "0.20.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": "./dist/Dropdown.js",
@@ -22,17 +22,16 @@
22
22
  "homepage": "https://github.com/acusti/uikit/tree/main/packages/dropdown#readme",
23
23
  "devDependencies": {
24
24
  "@types/react": "^18.0.15",
25
- "classnames": "^2",
26
- "typescript": "~4.6.4"
25
+ "typescript": "^4.8.4"
27
26
  },
28
27
  "dependencies": {
29
28
  "@acusti/input-text": "^0.11.0",
30
29
  "@acusti/matchmaking": "^0.3.0",
31
30
  "@acusti/styling": "^0.5.3",
32
- "@acusti/use-is-out-of-bounds": "^0.5.0"
31
+ "@acusti/use-is-out-of-bounds": "^0.5.0",
32
+ "clsx": "^1.1.1"
33
33
  },
34
34
  "peerDependencies": {
35
- "classnames": "^2",
36
35
  "react": "^16.8 || ^17 || ^18",
37
36
  "react-dom": "^16.8 || ^17 || ^18"
38
37
  }
package/src/Dropdown.tsx CHANGED
@@ -1,9 +1,9 @@
1
- // TODO add mouseout event handler to check event.target and clear active element
2
- // whenever mouse leaves it
1
+ // TODO fix searching to match on significant parts of value (i.e. not parts that are the same)
2
+ // could also match on ukt-values (see searchable Font Weight example in storybook docs)
3
3
  import InputText from '@acusti/input-text';
4
4
  import { Style } from '@acusti/styling';
5
5
  import useIsOutOfBounds from '@acusti/use-is-out-of-bounds';
6
- import classnames from 'classnames';
6
+ import clsx from 'clsx';
7
7
  import * as React from 'react';
8
8
 
9
9
  import {
@@ -37,9 +37,13 @@ export type Props = {
37
37
  hasItems?: boolean;
38
38
  isOpenOnMount?: boolean;
39
39
  isSearchable?: boolean;
40
+ keepOpenOnSubmit?: boolean;
40
41
  label?: string;
41
42
  /** Only usable in conjunction with {isSearchable: true}; used as search input’s name */
42
43
  name?: string;
44
+ onClick?: (event: React.MouseEvent<HTMLElement>) => unknown;
45
+ onMouseDown?: (event: React.MouseEvent<HTMLElement>) => unknown;
46
+ onMouseUp?: (event: React.MouseEvent<HTMLElement>) => unknown;
43
47
  onSubmitItem?: (payload: Item) => void;
44
48
  /** Only usable in conjunction with {isSearchable: true}; used as search input’s placeholder */
45
49
  placeholder?: string;
@@ -71,8 +75,12 @@ const Dropdown: React.FC<Props> = ({
71
75
  hasItems = true,
72
76
  isOpenOnMount,
73
77
  isSearchable,
78
+ keepOpenOnSubmit = !hasItems,
74
79
  label,
75
80
  name,
81
+ onClick,
82
+ onMouseDown,
83
+ onMouseUp,
76
84
  onSubmitItem,
77
85
  placeholder,
78
86
  tabIndex,
@@ -109,6 +117,7 @@ const Dropdown: React.FC<Props> = ({
109
117
  const isOpenRef = useRef(isOpen);
110
118
  const isOpeningRef = useRef(isOpening);
111
119
  const isTriggerFromPropsRef = useRef(isOpening);
120
+ const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);
112
121
  const onSubmitItemRef = useRef(onSubmitItem);
113
122
  const valueRef = useRef(value);
114
123
 
@@ -118,6 +127,7 @@ const Dropdown: React.FC<Props> = ({
118
127
  isOpenRef.current = isOpen;
119
128
  isOpeningRef.current = isOpening;
120
129
  isTriggerFromPropsRef.current = isTriggerFromProps;
130
+ keepOpenOnSubmitRef.current = keepOpenOnSubmit;
121
131
  onSubmitItemRef.current = onSubmitItem;
122
132
  valueRef.current = value;
123
133
  }, [
@@ -126,6 +136,7 @@ const Dropdown: React.FC<Props> = ({
126
136
  isOpen,
127
137
  isOpening,
128
138
  isTriggerFromProps,
139
+ keepOpenOnSubmit,
129
140
  onSubmitItem,
130
141
  value,
131
142
  ]);
@@ -140,43 +151,56 @@ const Dropdown: React.FC<Props> = ({
140
151
  }
141
152
  }, []);
142
153
 
143
- const handleSubmitItem = useCallback(() => {
144
- if (isOpenRef.current) {
145
- // A short timeout before closing is better UX when user selects an item so dropdown
146
- // doesn’t close before expected. It also enables using <Link />s in the dropdown body.
147
- closingTimerRef.current = setTimeout(closeDropdown, 90);
148
- }
154
+ const handleSubmitItem = useCallback(
155
+ (event: Event | React.SyntheticEvent<HTMLElement>) => {
156
+ const eventTarget = event.target as HTMLElement;
157
+ if (isOpenRef.current && !keepOpenOnSubmitRef.current) {
158
+ const keepOpen = eventTarget.closest(
159
+ '[data-ukt-keep-open]',
160
+ ) as HTMLElement | null;
161
+ // Don’t close dropdown if event occurs w/in data-ukt-keep-open element
162
+ if (
163
+ !keepOpen?.dataset.uktKeepOpen ||
164
+ keepOpen.dataset.uktKeepOpen === 'false'
165
+ ) {
166
+ // A short timeout before closing is better UX when user selects an item so dropdown
167
+ // doesn’t close before expected. It also enables using <Link />s in the dropdown body.
168
+ closingTimerRef.current = setTimeout(closeDropdown, 90);
169
+ }
170
+ }
149
171
 
150
- if (!hasItemsRef.current) return;
172
+ if (!hasItemsRef.current) return;
151
173
 
152
- const nextElement = getActiveItemElement(dropdownElementRef.current);
153
- if (!nextElement) {
154
- // If not allowEmpty, don’t allow submitting an empty item
155
- if (!allowEmptyRef.current) return;
156
- // If we have an input element as trigger & the user didn’t clear the text, do nothing
157
- if (inputElementRef.current?.value) return;
158
- }
174
+ const nextElement = getActiveItemElement(dropdownElementRef.current);
175
+ if (!nextElement) {
176
+ // If not allowEmpty, don’t allow submitting an empty item
177
+ if (!allowEmptyRef.current) return;
178
+ // If we have an input element as trigger & the user didn’t clear the text, do nothing
179
+ if (inputElementRef.current?.value) return;
180
+ }
159
181
 
160
- const label = nextElement?.innerText || '';
161
- const nextValue = nextElement?.dataset.uktValue || label;
162
- const nextItem = { element: nextElement, value: nextValue };
163
- if (inputElementRef.current) {
164
- inputElementRef.current.value = label;
165
- if (
166
- inputElementRef.current ===
167
- inputElementRef.current.ownerDocument.activeElement
168
- ) {
169
- inputElementRef.current.blur();
182
+ const label = nextElement?.innerText || '';
183
+ const nextValue = nextElement?.dataset.uktValue || label;
184
+ const nextItem = { element: nextElement, value: nextValue };
185
+ if (inputElementRef.current) {
186
+ inputElementRef.current.value = label;
187
+ if (
188
+ inputElementRef.current ===
189
+ inputElementRef.current.ownerDocument.activeElement
190
+ ) {
191
+ inputElementRef.current.blur();
192
+ }
170
193
  }
171
- }
172
194
 
173
- // If parent is controlling Dropdown via props.value and nextValue is the same, do nothing
174
- if (valueRef.current && valueRef.current === nextValue) return;
195
+ // If parent is controlling Dropdown via props.value and nextValue is the same, do nothing
196
+ if (valueRef.current && valueRef.current === nextValue) return;
175
197
 
176
- if (onSubmitItemRef.current) {
177
- onSubmitItemRef.current(nextItem);
178
- }
179
- }, [closeDropdown]);
198
+ if (onSubmitItemRef.current) {
199
+ onSubmitItemRef.current(nextItem);
200
+ }
201
+ },
202
+ [closeDropdown],
203
+ );
180
204
 
181
205
  const handleMouseMove = useCallback(
182
206
  ({ clientX, clientY }: React.MouseEvent<HTMLElement>) => {
@@ -221,6 +245,61 @@ const Dropdown: React.FC<Props> = ({
221
245
  }
222
246
  }, []);
223
247
 
248
+ const handleMouseOut = useCallback((event: React.MouseEvent<HTMLElement>) => {
249
+ if (!hasItemsRef.current) return;
250
+ const activeItem = getActiveItemElement(dropdownElementRef.current);
251
+ if (!activeItem) return;
252
+ const eventRelatedTarget = event.relatedTarget as HTMLElement;
253
+ if (activeItem !== event.target || activeItem.contains(eventRelatedTarget))
254
+ return;
255
+ // If user moused out of activeItem (not into a descendant), it’s no longer active
256
+ delete activeItem.dataset.uktActive;
257
+ }, []);
258
+
259
+ const handleMouseDown = useCallback(
260
+ (event: React.MouseEvent<HTMLElement>) => {
261
+ if (onMouseDown) onMouseDown(event);
262
+ if (isOpenRef.current) return;
263
+
264
+ setIsOpen(true);
265
+ setIsOpening(true);
266
+ mouseDownPositionRef.current = {
267
+ clientX: event.clientX,
268
+ clientY: event.clientY,
269
+ };
270
+ isOpeningTimerRef.current = setTimeout(() => {
271
+ setIsOpening(false);
272
+ isOpeningTimerRef.current = null;
273
+ }, 1000);
274
+ },
275
+ [onMouseDown],
276
+ );
277
+
278
+ const handleMouseUp = useCallback(
279
+ (event: React.MouseEvent<HTMLElement>) => {
280
+ if (onMouseUp) onMouseUp(event);
281
+ // If dropdown isn’t open or is already closing, do nothing
282
+ if (!isOpenRef.current || closingTimerRef.current) return;
283
+ // If dropdown has no items, do nothing
284
+ if (!hasItemsRef.current) return;
285
+
286
+ const eventTarget = event.target as HTMLElement;
287
+ // If mouse event is within dropdown body, trigger submit
288
+ if (eventTarget.closest(BODY_SELECTOR)) {
289
+ handleSubmitItem(event);
290
+ return;
291
+ }
292
+ // Don’t close dropdown if isOpening or search input is focused
293
+ if (
294
+ !isOpeningRef.current &&
295
+ inputElementRef.current !== eventTarget.ownerDocument.activeElement
296
+ ) {
297
+ closeDropdown();
298
+ }
299
+ },
300
+ [closeDropdown, handleSubmitItem, onMouseUp],
301
+ );
302
+
224
303
  const cleanupEventListenersRef = useRef<() => void>(noop);
225
304
 
226
305
  const handleRef = useCallback(
@@ -243,7 +322,7 @@ const Dropdown: React.FC<Props> = ({
243
322
  inputElementRef.current = inputElement;
244
323
  }
245
324
 
246
- const handleMouseDown = ({ clientX, clientY, target }: MouseEvent) => {
325
+ const handleGlobalMouseDown = ({ target }: MouseEvent) => {
247
326
  const eventTarget = target as HTMLElement;
248
327
  if (
249
328
  dropdownElementRef.current &&
@@ -251,21 +330,10 @@ const Dropdown: React.FC<Props> = ({
251
330
  ) {
252
331
  // Close dropdown on an outside click
253
332
  closeDropdown();
254
- return;
255
333
  }
256
-
257
- if (isOpenRef.current) return;
258
-
259
- setIsOpen(true);
260
- setIsOpening(true);
261
- mouseDownPositionRef.current = { clientX, clientY };
262
- isOpeningTimerRef.current = setTimeout(() => {
263
- setIsOpening(false);
264
- isOpeningTimerRef.current = null;
265
- }, 1000);
266
334
  };
267
335
 
268
- const handleMouseUp = ({ target }: MouseEvent) => {
336
+ const handleGlobalMouseUp = ({ target }: MouseEvent) => {
269
337
  if (!isOpenRef.current || closingTimerRef.current) return;
270
338
 
271
339
  // If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp
@@ -278,20 +346,9 @@ const Dropdown: React.FC<Props> = ({
278
346
  return;
279
347
  }
280
348
 
281
- const isTargetInBody = (target as HTMLElement).closest(BODY_SELECTOR);
282
-
283
- // If mouseup is on dropdown body and there are no items, don’t close the dropdown
284
- if (!hasItemsRef.current && isTargetInBody) return;
285
-
286
- // If mouseup is on an item, trigger submit item, else close the dropdown
287
- if (isTargetInBody) {
288
- handleSubmitItem();
289
- } else if (
290
- !inputElementRef.current ||
291
- (dropdownElementRef.current &&
292
- dropdownElementRef.current.contains(ownerDocument.activeElement))
293
- ) {
294
- // If dropdown is searchable and ref is still focused, this won’t be invoked
349
+ const eventTarget = target as HTMLElement;
350
+ // Only handle mouseup events from outside the dropdown here
351
+ if (!dropdownElementRef.current?.contains(eventTarget)) {
295
352
  closeDropdown();
296
353
  }
297
354
  };
@@ -370,7 +427,7 @@ const Dropdown: React.FC<Props> = ({
370
427
  // If dropdown isOpen, handle submitting the value
371
428
  if (key === 'Enter' || (key === ' ' && !inputElementRef.current)) {
372
429
  onEventHandled();
373
- handleSubmitItem();
430
+ handleSubmitItem(event);
374
431
  return;
375
432
  }
376
433
  // If dropdown isOpen, handle closing it on escape or spacebar if !hasItems
@@ -426,10 +483,10 @@ const Dropdown: React.FC<Props> = ({
426
483
  };
427
484
 
428
485
  // Close dropdown if any element is focused outside of this dropdown
429
- const handleFocusIn = (event: Event) => {
486
+ const handleFocusIn = ({ target }: Event) => {
430
487
  if (!isOpenRef.current) return;
431
488
 
432
- const eventTarget = event.target as HTMLElement;
489
+ const eventTarget = target as HTMLElement;
433
490
  // If focused element is a descendant or a parent of the dropdown, do nothing
434
491
  if (
435
492
  !dropdownElementRef.current ||
@@ -444,14 +501,14 @@ const Dropdown: React.FC<Props> = ({
444
501
 
445
502
  document.addEventListener('focusin', handleFocusIn);
446
503
  document.addEventListener('keydown', handleKeyDown);
447
- document.addEventListener('mousedown', handleMouseDown);
448
- document.addEventListener('mouseup', handleMouseUp);
504
+ document.addEventListener('mousedown', handleGlobalMouseDown);
505
+ document.addEventListener('mouseup', handleGlobalMouseUp);
449
506
 
450
507
  if (ownerDocument !== document) {
451
508
  ownerDocument.addEventListener('focusin', handleFocusIn);
452
509
  ownerDocument.addEventListener('keydown', handleKeyDown);
453
- ownerDocument.addEventListener('mousedown', handleMouseDown);
454
- ownerDocument.addEventListener('mouseup', handleMouseUp);
510
+ ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);
511
+ ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);
455
512
  }
456
513
 
457
514
  // If dropdown should be open on mount, focus it
@@ -488,14 +545,14 @@ const Dropdown: React.FC<Props> = ({
488
545
  cleanupEventListenersRef.current = () => {
489
546
  document.removeEventListener('focusin', handleFocusIn);
490
547
  document.removeEventListener('keydown', handleKeyDown);
491
- document.removeEventListener('mousedown', handleMouseDown);
492
- document.removeEventListener('mouseup', handleMouseUp);
548
+ document.removeEventListener('mousedown', handleGlobalMouseDown);
549
+ document.removeEventListener('mouseup', handleGlobalMouseUp);
493
550
 
494
551
  if (ownerDocument !== document) {
495
552
  ownerDocument.removeEventListener('focusin', handleFocusIn);
496
553
  ownerDocument.removeEventListener('keydown', handleKeyDown);
497
- ownerDocument.removeEventListener('mousedown', handleMouseDown);
498
- ownerDocument.removeEventListener('mouseup', handleMouseUp);
554
+ ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);
555
+ ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);
499
556
  }
500
557
 
501
558
  if (inputElement) {
@@ -548,12 +605,16 @@ const Dropdown: React.FC<Props> = ({
548
605
  <Fragment>
549
606
  <Style>{STYLES}</Style>
550
607
  <div
551
- className={classnames(ROOT_CLASS_NAME, className, {
608
+ className={clsx(ROOT_CLASS_NAME, className, {
552
609
  disabled,
553
610
  'is-open': isOpen,
554
611
  'is-searchable': isSearchable,
555
612
  })}
613
+ onClick={onClick}
614
+ onMouseDown={handleMouseDown}
615
+ onMouseUp={handleMouseUp}
556
616
  onMouseMove={handleMouseMove}
617
+ onMouseOut={handleMouseOut}
557
618
  onMouseOver={handleMouseOver}
558
619
  ref={handleRef}
559
620
  tabIndex={
@@ -565,7 +626,7 @@ const Dropdown: React.FC<Props> = ({
565
626
  {trigger}
566
627
  {isOpen ? (
567
628
  <div
568
- className={classnames(BODY_CLASS_NAME, {
629
+ className={clsx(BODY_CLASS_NAME, {
569
630
  'calculating-position': !outOfBounds.hasLayout,
570
631
  'has-items': hasItems,
571
632
  'out-of-bounds-bottom': outOfBounds.bottom,