@acusti/dropdown 0.51.0 → 0.52.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.js CHANGED
@@ -217,6 +217,7 @@ const setActiveItem = ({
217
217
  }
218
218
  };
219
219
  const CHILDREN_ERROR = "@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.";
220
+ const CLICKABLE_SELECTOR = 'button, a[href], input[type="button"], input[type="submit"]';
220
221
  const TEXT_INPUT_SELECTOR = "input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea";
221
222
  function Dropdown(t0) {
222
223
  const $ = c(102);
@@ -395,14 +396,28 @@ function Dropdown(t0) {
395
396
  if (valueRef.current && valueRef.current === nextValue) {
396
397
  return;
397
398
  }
398
- if (onSubmitItemRef.current) {
399
- onSubmitItemRef.current({
400
- element,
401
- event,
402
- label: itemLabel,
403
- value: nextValue
404
- });
399
+ if (element) {
400
+ const eventTarget = event.target;
401
+ if (element.matches(CLICKABLE_SELECTOR)) {
402
+ if (element !== eventTarget && !element.contains(eventTarget)) {
403
+ element.click();
404
+ }
405
+ } else {
406
+ const clickableElements = element.querySelectorAll(CLICKABLE_SELECTOR);
407
+ if (clickableElements.length === 1) {
408
+ const clickableElement = clickableElements[0];
409
+ if (clickableElement !== eventTarget && !clickableElement.contains(eventTarget)) {
410
+ clickableElement.click();
411
+ }
412
+ }
413
+ }
405
414
  }
415
+ onSubmitItemRef.current?.({
416
+ element,
417
+ event,
418
+ label: itemLabel,
419
+ value: nextValue
420
+ });
406
421
  };
407
422
  $[16] = dropdownElement;
408
423
  $[17] = t11;
@@ -448,9 +463,9 @@ function Dropdown(t0) {
448
463
  if (!itemElements) {
449
464
  return;
450
465
  }
451
- const eventTarget = event_0.target;
452
- const item = eventTarget.closest(ITEM_SELECTOR);
453
- const element_0 = item ?? eventTarget;
466
+ const eventTarget_0 = event_0.target;
467
+ const item = eventTarget_0.closest(ITEM_SELECTOR);
468
+ const element_0 = item ?? eventTarget_0;
454
469
  for (const itemElement of itemElements) {
455
470
  if (itemElement === element_0) {
456
471
  setActiveItem({
@@ -527,9 +542,9 @@ function Dropdown(t0) {
527
542
  if (isOpeningRef.current || !isOpenRef.current || closingTimerRef.current) {
528
543
  return;
529
544
  }
530
- const eventTarget_0 = event_3.target;
531
- if (!eventTarget_0.closest(BODY_SELECTOR)) {
532
- if (!isOpeningRef.current && inputElementRef.current !== eventTarget_0.ownerDocument.activeElement) {
545
+ const eventTarget_1 = event_3.target;
546
+ if (!eventTarget_1.closest(BODY_SELECTOR)) {
547
+ if (!isOpeningRef.current && inputElementRef.current !== eventTarget_1.ownerDocument.activeElement) {
533
548
  closeDropdown();
534
549
  }
535
550
  return;
@@ -555,7 +570,7 @@ function Dropdown(t0) {
555
570
  key,
556
571
  metaKey
557
572
  } = event_4;
558
- const eventTarget_1 = event_4.target;
573
+ const eventTarget_2 = event_4.target;
559
574
  if (!dropdownElement) {
560
575
  return;
561
576
  }
@@ -564,7 +579,7 @@ function Dropdown(t0) {
564
579
  event_4.preventDefault();
565
580
  currentInputMethodRef.current = "keyboard";
566
581
  };
567
- const isEventTargetingDropdown = dropdownElement.contains(eventTarget_1);
582
+ const isEventTargetingDropdown = dropdownElement.contains(eventTarget_2);
568
583
  if (!isOpenRef.current) {
569
584
  if (!isEventTargetingDropdown) {
570
585
  return;
@@ -700,8 +715,8 @@ function Dropdown(t0) {
700
715
  const {
701
716
  target
702
717
  } = t202;
703
- const eventTarget_2 = target;
704
- if (!ref.contains(eventTarget_2)) {
718
+ const eventTarget_3 = target;
719
+ if (!ref.contains(eventTarget_3)) {
705
720
  closeDropdown();
706
721
  }
707
722
  };
@@ -720,8 +735,8 @@ function Dropdown(t0) {
720
735
  }
721
736
  return;
722
737
  }
723
- const eventTarget_3 = target_0;
724
- if (!ref.contains(eventTarget_3)) {
738
+ const eventTarget_4 = target_0;
739
+ if (!ref.contains(eventTarget_4)) {
725
740
  closeDropdown();
726
741
  }
727
742
  };
@@ -732,8 +747,8 @@ function Dropdown(t0) {
732
747
  if (!isOpenRef.current) {
733
748
  return;
734
749
  }
735
- const eventTarget_4 = target_1;
736
- if (ref.contains(eventTarget_4) || eventTarget_4.contains(ref)) {
750
+ const eventTarget_5 = target_1;
751
+ if (ref.contains(eventTarget_5) || eventTarget_5.contains(ref)) {
737
752
  return;
738
753
  }
739
754
  closeDropdown();
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","sources":["../src/styles.ts","../src/helpers.ts","../src/Dropdown.tsx"],"sourcesContent":["import { SYSTEM_UI_FONT } from '@acusti/styling';\n\nexport const ROOT_CLASS_NAME = 'uktdropdown';\nexport const ROOT_SELECTOR = `.${ROOT_CLASS_NAME}`;\n\nexport const BODY_CLASS_NAME = `${ROOT_CLASS_NAME}-body`;\nexport const LABEL_CLASS_NAME = `${ROOT_CLASS_NAME}-label`;\nexport const LABEL_TEXT_CLASS_NAME = `${ROOT_CLASS_NAME}-label-text`;\nexport const TRIGGER_CLASS_NAME = `${ROOT_CLASS_NAME}-trigger`;\n\nexport const BODY_SELECTOR = `.${BODY_CLASS_NAME}`;\nexport const LABEL_SELECTOR = `.${LABEL_CLASS_NAME}`;\nexport const LABEL_TEXT_SELECTOR = `.${LABEL_TEXT_CLASS_NAME}`;\nexport const TRIGGER_SELECTOR = `.${TRIGGER_CLASS_NAME}`;\n\nexport const BODY_MAX_HEIGHT_VAR = '--uktdd-body-max-height';\nexport const BODY_MAX_WIDTH_VAR = '--uktdd-body-max-width';\n\nexport const STYLES = `\n:root {\n --uktdd-font-family: ${SYSTEM_UI_FONT};\n --uktdd-body-bg-color: #fff;\n --uktdd-body-bg-color-hover: rgb(105,162,249);\n --uktdd-body-color-hover: #fff;\n --uktdd-body-buffer: 10px;\n ${BODY_MAX_HEIGHT_VAR}: calc(100vh - var(--uktdd-body-buffer));\n ${BODY_MAX_WIDTH_VAR}: calc(100vw - var(--uktdd-body-buffer));\n --uktdd-body-pad-bottom: 9px;\n --uktdd-body-pad-left: 12px;\n --uktdd-body-pad-right: 12px;\n --uktdd-body-pad-top: 9px;\n --uktdd-label-pad-right: 10px;\n}\n${ROOT_SELECTOR},\n${TRIGGER_SELECTOR} {\n font-family: var(--uktdd-font-family);\n}\n${ROOT_SELECTOR} {\n width: max-content;\n}\n${ROOT_SELECTOR}.disabled {\n pointer-events: none;\n}\n${ROOT_SELECTOR} > * {\n cursor: default;\n}\n${LABEL_SELECTOR} {\n display: flex;\n align-items: center;\n}\n${LABEL_TEXT_SELECTOR} {\n padding-right: var(--uktdd-label-pad-right);\n}\n${BODY_SELECTOR} {\n box-sizing: border-box;\n position: absolute;\n top: anchor(bottom);\n left: anchor(left);\n bottom: auto;\n right: auto;\n position-try-fallbacks: --uktdd-top-left, --uktdd-bottom-right, --uktdd-top-right;\n min-height: 50px;\n max-height: var(${BODY_MAX_HEIGHT_VAR});\n min-width: min(50px, 100%);\n max-width: var(${BODY_MAX_WIDTH_VAR});\n overflow: auto;\n z-index: 2;\n padding: var(--uktdd-body-pad-top) var(--uktdd-body-pad-right) var(--uktdd-body-pad-bottom) var(--uktdd-body-pad-left);\n background-color: var(--uktdd-body-bg-color);\n box-shadow: 0 8px 18px rgba(0,0,0,0.25);\n}\n@position-try --uktdd-top-left {\n bottom: anchor(top);\n left: anchor(left);\n top: auto;\n right: auto;\n}\n@position-try --uktdd-bottom-right {\n top: anchor(bottom);\n right: anchor(right);\n bottom: auto;\n left: auto;\n}\n@position-try --uktdd-top-right {\n bottom: anchor(top);\n right: anchor(right);\n top: auto;\n left: auto;\n}\n${BODY_SELECTOR}.has-items {\n user-select: none;\n}\n${BODY_SELECTOR} [data-ukt-active] {\n background-color: var(--uktdd-body-bg-color-hover);\n color: var(--uktdd-body-color-hover);\n}\n`;\n","import { getBestMatch } from '@acusti/matchmaking';\nimport { type SyntheticEvent } from 'react';\n\nimport { type Item } from './Dropdown.js';\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\ntype BaseSetActiveItemPayload = {\n dropdownElement: HTMLElement;\n element?: null;\n event: Event | SyntheticEvent<HTMLElement>;\n index?: null;\n indexAddend?: null;\n isExactMatch?: null;\n onActiveItem?: (payload: Item) => void;\n text?: null;\n};\n\nexport const setActiveItem = ({\n dropdownElement,\n element,\n event,\n index,\n indexAddend,\n isExactMatch,\n onActiveItem,\n text,\n}:\n | ({\n element: HTMLElement;\n } & Omit<BaseSetActiveItemPayload, 'element'>)\n | ({\n index: number;\n } & Omit<BaseSetActiveItemPayload, 'index'>)\n | ({\n indexAddend: number;\n } & Omit<BaseSetActiveItemPayload, 'indexAddend'>)\n | ({\n isExactMatch?: boolean;\n text: string;\n } & Omit<BaseSetActiveItemPayload, 'isExactMatch' | 'text'>)) => {\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 nextActiveIndex = Math.max(0, Math.min(nextActiveIndex, lastIndex));\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 const nextActiveItem = items[nextActiveIndex] as HTMLElement | null;\n if (nextActiveItem == null || nextActiveIndex === currentActiveIndex) return;\n\n // Clear any existing active dropdown body item state\n clearItemElementsState(itemElements);\n nextActiveItem.setAttribute('data-ukt-active', '');\n const label = nextActiveItem.innerText;\n const value = nextActiveItem.dataset.uktValue ?? label;\n onActiveItem?.({ element: nextActiveItem, event, label, value });\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 = 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","/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/mouse-events-have-key-events, jsx-a11y/no-static-element-interactions */\nimport { Style } from '@acusti/styling';\nimport useBoundingClientRect from '@acusti/use-bounding-client-rect';\nimport useKeyboardEvents, {\n isEventTargetUsingKeyEvent,\n} from '@acusti/use-keyboard-events';\nimport clsx from 'clsx';\nimport {\n Children,\n type CSSProperties,\n Fragment,\n isValidElement,\n type JSX,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type SyntheticEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport {\n getActiveItemElement,\n getItemElements,\n ITEM_SELECTOR,\n setActiveItem,\n} from './helpers.js';\nimport {\n BODY_CLASS_NAME,\n BODY_MAX_HEIGHT_VAR,\n BODY_MAX_WIDTH_VAR,\n BODY_SELECTOR,\n LABEL_CLASS_NAME,\n LABEL_TEXT_CLASS_NAME,\n ROOT_CLASS_NAME,\n STYLES,\n TRIGGER_CLASS_NAME,\n} from './styles.js';\n\nexport type Item = {\n element: MaybeHTMLElement;\n event: Event | SyntheticEvent<HTMLElement>;\n label: string;\n value: string;\n};\n\nexport type Props = {\n /**\n * Boolean indicating if the user can submit a value not already in the\n * dropdown.\n */\n allowCreate?: boolean;\n /**\n * Boolean indicating if the user can submit an empty value (i.e. clear\n * the value). Defaults to true.\n */\n allowEmpty?: boolean;\n /**\n * Can take a single React element or exactly two renderable children.\n */\n children: ChildrenTuple | JSX.Element;\n className?: string;\n disabled?: boolean;\n /**\n * Group identifier string links dropdowns together into a menu\n * (like macOS top menubar).\n */\n group?: string;\n hasItems?: boolean;\n isOpenOnMount?: boolean;\n isSearchable?: boolean;\n keepOpenOnSubmit?: boolean;\n label?: string;\n minHeightBody?: number;\n minWidthBody?: number;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s name.\n */\n name?: string;\n onActiveItem?: (payload: Item) => void;\n onClick?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onClose?: () => unknown;\n onMouseDown?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onMouseUp?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onOpen?: () => unknown;\n onSubmitItem?: (payload: Item) => void;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s placeholder.\n */\n placeholder?: string;\n style?: CSSProperties;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s tabIndex.\n */\n tabIndex?: number;\n /**\n * Used as search input’s value if props.isSearchable === true\n * Used to determine if value has changed to avoid triggering onSubmitItem if not\n */\n value?: string;\n};\n\ntype ChildrenTuple = [ReactNode, ReactNode] | readonly [ReactNode, ReactNode];\n\ntype MaybeHTMLElement = HTMLElement | null;\n\ntype MousePosition = { clientX: number; clientY: number };\n\ntype TimeoutID = ReturnType<typeof setTimeout>;\n\nconst CHILDREN_ERROR =\n '@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';\nconst TEXT_INPUT_SELECTOR =\n 'input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea';\n\nexport default function Dropdown({\n allowCreate,\n allowEmpty = true,\n children,\n className,\n disabled,\n hasItems = true,\n isOpenOnMount,\n isSearchable,\n keepOpenOnSubmit = !hasItems,\n label,\n minHeightBody = 30,\n minWidthBody = 100,\n name,\n onActiveItem,\n onClick,\n onClose,\n onMouseDown,\n onMouseUp,\n onOpen,\n onSubmitItem,\n placeholder,\n style: styleFromProps,\n tabIndex,\n value,\n}: Props) {\n const childrenCount = Children.count(children);\n if (childrenCount !== 1 && childrenCount !== 2) {\n if (childrenCount === 0) {\n throw new Error(CHILDREN_ERROR + ' Received no children.');\n }\n console.error(`${CHILDREN_ERROR} Received ${childrenCount} children.`);\n }\n\n let trigger: React.ReactNode;\n if (childrenCount > 1) {\n trigger = (children as ChildrenTuple)[0];\n }\n\n const [isOpen, setIsOpen] = useState<boolean>(isOpenOnMount ?? false);\n const [isOpening, setIsOpening] = useState<boolean>(!isOpenOnMount);\n const [dropdownElement, setDropdownElement] = useState<MaybeHTMLElement>(null);\n const [dropdownBodyElement, setDropdownBodyElement] =\n useState<MaybeHTMLElement>(null);\n const id = useId();\n\n const inputElementRef = useRef<HTMLInputElement | null>(null);\n const closingTimerRef = useRef<null | TimeoutID>(null);\n const isOpeningTimerRef = useRef<null | TimeoutID>(null);\n const currentInputMethodRef = useRef<'keyboard' | 'mouse'>('mouse');\n const clearEnteredCharactersTimerRef = useRef<null | TimeoutID>(null);\n const enteredCharactersRef = useRef<string>('');\n const mouseDownPositionRef = useRef<MousePosition | null>(null);\n\n const allowCreateRef = useRef(allowCreate);\n const allowEmptyRef = useRef(allowEmpty);\n const hasItemsRef = useRef(hasItems);\n const isOpenRef = useRef(isOpen);\n const isOpeningRef = useRef(isOpening);\n const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);\n const onCloseRef = useRef(onClose);\n const onOpenRef = useRef(onOpen);\n const onSubmitItemRef = useRef(onSubmitItem);\n const valueRef = useRef(value);\n\n useEffect(() => {\n allowCreateRef.current = allowCreate;\n allowEmptyRef.current = allowEmpty;\n hasItemsRef.current = hasItems;\n isOpenRef.current = isOpen;\n isOpeningRef.current = isOpening;\n keepOpenOnSubmitRef.current = keepOpenOnSubmit;\n onCloseRef.current = onClose;\n onOpenRef.current = onOpen;\n onSubmitItemRef.current = onSubmitItem;\n valueRef.current = value;\n }, [\n allowCreate,\n allowEmpty,\n hasItems,\n isOpen,\n isOpening,\n keepOpenOnSubmit,\n onClose,\n onOpen,\n onSubmitItem,\n value,\n ]);\n\n const isMountedRef = useRef(false);\n\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true;\n // If isOpenOnMount, trigger onOpen right away\n if (isOpenRef.current && onOpenRef.current) {\n onOpenRef.current();\n }\n return;\n }\n\n if (isOpen && onOpenRef.current) {\n onOpenRef.current();\n } else if (!isOpen && onCloseRef.current) {\n onCloseRef.current();\n }\n }, [isOpen]);\n\n const closeDropdown = () => {\n setIsOpen(false);\n setIsOpening(false);\n mouseDownPositionRef.current = null;\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current);\n closingTimerRef.current = null;\n }\n };\n\n const handleSubmitItem = (event: Event | React.SyntheticEvent<HTMLElement>) => {\n if (isOpenRef.current && !keepOpenOnSubmitRef.current) {\n // A short timeout before closing is better UX when user selects an item so dropdown\n // doesn’t close before expected. It also enables using <Link />s in the dropdown body.\n closingTimerRef.current = setTimeout(closeDropdown, 90);\n }\n\n if (!hasItemsRef.current) return;\n\n const element = getActiveItemElement(dropdownElement);\n if (!element && !allowCreateRef.current) {\n // If not allowEmpty, don’t allow submitting an empty item\n if (!allowEmptyRef.current) return;\n // If we have an input element as trigger & the user didn’t clear the text, do nothing\n if (inputElementRef.current?.value) return;\n }\n\n let itemLabel = element?.innerText ?? '';\n if (inputElementRef.current) {\n if (!element) {\n itemLabel = inputElementRef.current.value;\n } else {\n inputElementRef.current.value = itemLabel;\n }\n\n if (\n inputElementRef.current ===\n inputElementRef.current.ownerDocument.activeElement\n ) {\n inputElementRef.current.blur();\n }\n }\n\n const nextValue = element?.dataset.uktValue ?? itemLabel;\n // If parent is controlling Dropdown via props.value and nextValue is the same, do nothing\n if (valueRef.current && valueRef.current === nextValue) return;\n\n if (onSubmitItemRef.current) {\n onSubmitItemRef.current({\n element,\n event,\n label: itemLabel,\n value: nextValue,\n });\n }\n };\n\n const handleMouseMove = ({ clientX, clientY }: ReactMouseEvent<HTMLElement>) => {\n currentInputMethodRef.current = 'mouse';\n const initialPosition = mouseDownPositionRef.current;\n if (!initialPosition) return;\n if (\n Math.abs(initialPosition.clientX - clientX) < 12 &&\n Math.abs(initialPosition.clientY - clientY) < 12\n ) {\n return;\n }\n setIsOpening(false);\n };\n\n const handleMouseOver = (event: ReactMouseEvent<HTMLElement>) => {\n if (!hasItemsRef.current) return;\n\n // If user isn’t currently using the mouse to navigate the dropdown, do nothing\n if (currentInputMethodRef.current !== 'mouse') return;\n\n // Ensure we have the dropdown root HTMLElement\n if (!dropdownElement) return;\n\n const itemElements = getItemElements(dropdownElement);\n if (!itemElements) return;\n\n const eventTarget = event.target as HTMLElement;\n const item = eventTarget.closest(ITEM_SELECTOR) as MaybeHTMLElement;\n const element = item ?? eventTarget;\n for (const itemElement of itemElements) {\n if (itemElement === element) {\n setActiveItem({ dropdownElement, element, event, onActiveItem });\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 event,\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 onActiveItem,\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, event, index: 0, onActiveItem });\n } else {\n setActiveItem({\n dropdownElement,\n event,\n indexAddend: -1,\n onActiveItem,\n });\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, event, index: -1, onActiveItem });\n } else {\n setActiveItem({\n dropdownElement,\n event,\n indexAddend: 1,\n onActiveItem,\n });\n }\n return;\n }\n }\n };\n\n useKeyboardEvents({ ignoreUsedKeyboardEvents: false, onKeyDown: handleKeyDown });\n\n const handleRef = (ref: HTMLDivElement | null): (() => void) | void => {\n setDropdownElement(ref);\n if (!ref) return;\n\n const { ownerDocument } = ref;\n let inputElement = inputElementRef.current;\n // Check if trigger is a textual input or textarea element\n if (!inputElement && ref.firstElementChild) {\n if (ref.firstElementChild.matches(TEXT_INPUT_SELECTOR)) {\n inputElement = ref.firstElementChild as HTMLInputElement;\n } else {\n inputElement = ref.firstElementChild.querySelector(TEXT_INPUT_SELECTOR);\n }\n inputElementRef.current = inputElement;\n }\n\n const handleGlobalMouseDown = ({ target }: MouseEvent) => {\n const eventTarget = target as HTMLElement;\n if (!ref.contains(eventTarget)) {\n // Close dropdown on an outside click\n closeDropdown();\n }\n };\n\n const handleGlobalMouseUp = ({ target }: MouseEvent) => {\n if (!isOpenRef.current || closingTimerRef.current) return;\n\n // If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp\n if (isOpeningRef.current) {\n setIsOpening(false);\n if (isOpeningTimerRef.current) {\n clearTimeout(isOpeningTimerRef.current);\n isOpeningTimerRef.current = null;\n }\n return;\n }\n\n const eventTarget = target as HTMLElement;\n // Only handle mouseup events from outside the dropdown here\n if (!ref.contains(eventTarget)) {\n closeDropdown();\n }\n };\n\n // Close dropdown if any element is focused outside of this dropdown\n const handleGlobalFocusIn = ({ target }: Event) => {\n if (!isOpenRef.current) return;\n\n const eventTarget = target as HTMLElement;\n // If focused element is a descendant or a parent of the dropdown, do nothing\n if (ref.contains(eventTarget) || eventTarget.contains(ref)) {\n return;\n }\n\n closeDropdown();\n };\n\n document.addEventListener('focusin', handleGlobalFocusIn);\n document.addEventListener('mousedown', handleGlobalMouseDown);\n document.addEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.addEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);\n }\n\n // If dropdown should be open on mount, focus it\n if (isOpenOnMount) {\n ref.focus();\n }\n\n const handleInput = (event: Event) => {\n if (!isOpenRef.current) setIsOpen(true);\n\n const input = event.target as HTMLInputElement;\n const isDeleting = enteredCharactersRef.current.length > input.value.length;\n enteredCharactersRef.current = input.value;\n // When deleting text, if there’s already an active item and\n // input isn’t empty, preserve the active item, else update it\n if (isDeleting && input.value.length && getActiveItemElement(ref)) {\n return;\n }\n\n setActiveItem({\n dropdownElement: ref,\n event,\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 onActiveItem,\n text: enteredCharactersRef.current,\n });\n };\n\n if (inputElement) {\n inputElement.addEventListener('input', handleInput);\n }\n\n return () => {\n document.removeEventListener('focusin', handleGlobalFocusIn);\n document.removeEventListener('mousedown', handleGlobalMouseDown);\n document.removeEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.removeEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);\n }\n\n if (inputElement) {\n inputElement.removeEventListener('input', handleInput);\n }\n };\n };\n\n if (!isValidElement(trigger)) {\n if (isSearchable) {\n trigger = (\n <input\n autoComplete=\"off\"\n className={TRIGGER_CLASS_NAME}\n defaultValue={value ?? ''}\n disabled={disabled}\n name={name}\n onFocus={() => setIsOpen(true)}\n placeholder={placeholder}\n ref={inputElementRef}\n tabIndex={tabIndex}\n type=\"text\"\n />\n );\n } else {\n trigger = (\n <button className={TRIGGER_CLASS_NAME} tabIndex={0} type=\"button\">\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","event","index","indexAddend","isExactMatch","onActiveItem","text","Array","from","lastIndex","currentActiveIndex","findIndex","nextActiveIndex","Math","max","min","itemTexts","map","innerText","textToCompare","toLowerCase","itemText","startsWith","bestMatch","getBestMatch","nextActiveItem","setAttribute","label","value","uktValue","parentElement","scrollableParent","isScrollable","scrollHeight","clientHeight","parentRect","getBoundingClientRect","itemRect","isAboveTop","top","isBelowBottom","bottom","scrollTop","CHILDREN_ERROR","TEXT_INPUT_SELECTOR","Dropdown","t0","$","_c","allowCreate","allowEmpty","t1","className","disabled","hasItems","t2","isOpenOnMount","isSearchable","keepOpenOnSubmit","t3","minHeightBody","t4","minWidthBody","t5","name","onClick","onClose","onMouseDown","onMouseUp","onOpen","onSubmitItem","placeholder","style","styleFromProps","tabIndex","undefined","childrenCount","Children","count","Error","console","error","trigger","isOpen","setIsOpen","useState","isOpening","setIsOpening","setDropdownElement","dropdownBodyElement","setDropdownBodyElement","id","useId","inputElementRef","useRef","closingTimerRef","isOpeningTimerRef","currentInputMethodRef","clearEnteredCharactersTimerRef","enteredCharactersRef","mouseDownPositionRef","allowCreateRef","allowEmptyRef","hasItemsRef","isOpenRef","isOpeningRef","keepOpenOnSubmitRef","onCloseRef","onOpenRef","onSubmitItemRef","valueRef","t6","t7","current","useEffect","isMountedRef","t8","t9","t10","Symbol","for","clearTimeout","closeDropdown","t11","setTimeout","itemLabel","ownerDocument","activeElement","blur","nextValue","handleSubmitItem","t12","t13","clientX","clientY","initialPosition","abs","handleMouseMove","event_0","eventTarget","target","item","closest","element_0","handleMouseOver","t14","event_1","activeItem","eventRelatedTarget","relatedTarget","contains","handleMouseOut","t15","event_2","handleMouseDown","t16","event_3","eventTarget_0","handleMouseUp","t17","event_4","altKey","ctrlKey","key","metaKey","eventTarget_1","onEventHandled","stopPropagation","preventDefault","isEventTargetingDropdown","isTargetUsingKeyEvents","isEventTargetUsingKeyEvent","isEditingCharacters","test","slice","handleKeyDown","t18","ignoreUsedKeyboardEvents","onKeyDown","useKeyboardEvents","t19","ref","inputElement","firstElementChild","matches","handleGlobalMouseDown","t20","eventTarget_2","handleGlobalMouseUp","t21","target_0","eventTarget_3","handleGlobalFocusIn","t22","target_1","eventTarget_4","document","addEventListener","focus","handleInput","event_5","input","isDeleting","removeEventListener","handleRef","isValidElement","dropdownRect","useBoundingClientRect","dropdownBodyRect","getBoundingAncestor","boundingElement","boundingElementRect","maxHeight","maxWidth","maxHeightUp","maxHeightDown","round","maxWidthLeft","right","left","maxWidthRight","t23","anchorStyles","t24","t25","t26","t27","clsx","t28","t29","t30","tagName","getComputedStyle","overflowX"],"mappings":"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"}
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';\nimport { type SyntheticEvent } from 'react';\n\nimport { type Item } from './Dropdown.js';\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\ntype BaseSetActiveItemPayload = {\n dropdownElement: HTMLElement;\n element?: null;\n event: Event | SyntheticEvent<HTMLElement>;\n index?: null;\n indexAddend?: null;\n isExactMatch?: null;\n onActiveItem?: (payload: Item) => void;\n text?: null;\n};\n\nexport const setActiveItem = ({\n dropdownElement,\n element,\n event,\n index,\n indexAddend,\n isExactMatch,\n onActiveItem,\n text,\n}:\n | ({\n element: HTMLElement;\n } & Omit<BaseSetActiveItemPayload, 'element'>)\n | ({\n index: number;\n } & Omit<BaseSetActiveItemPayload, 'index'>)\n | ({\n indexAddend: number;\n } & Omit<BaseSetActiveItemPayload, 'indexAddend'>)\n | ({\n isExactMatch?: boolean;\n text: string;\n } & Omit<BaseSetActiveItemPayload, 'isExactMatch' | 'text'>)) => {\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 nextActiveIndex = Math.max(0, Math.min(nextActiveIndex, lastIndex));\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 const nextActiveItem = items[nextActiveIndex] as HTMLElement | null;\n if (nextActiveItem == null || nextActiveIndex === currentActiveIndex) return;\n\n // Clear any existing active dropdown body item state\n clearItemElementsState(itemElements);\n nextActiveItem.setAttribute('data-ukt-active', '');\n const label = nextActiveItem.innerText;\n const value = nextActiveItem.dataset.uktValue ?? label;\n onActiveItem?.({ element: nextActiveItem, event, label, value });\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 = 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","/* eslint-disable jsx-a11y/click-events-have-key-events, jsx-a11y/mouse-events-have-key-events, jsx-a11y/no-static-element-interactions */\nimport { Style } from '@acusti/styling';\nimport useBoundingClientRect from '@acusti/use-bounding-client-rect';\nimport useKeyboardEvents, {\n isEventTargetUsingKeyEvent,\n} from '@acusti/use-keyboard-events';\nimport clsx from 'clsx';\nimport {\n Children,\n type CSSProperties,\n Fragment,\n isValidElement,\n type JSX,\n type MouseEvent as ReactMouseEvent,\n type ReactNode,\n type SyntheticEvent,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\n\nimport {\n getActiveItemElement,\n getItemElements,\n ITEM_SELECTOR,\n setActiveItem,\n} from './helpers.js';\nimport {\n BODY_CLASS_NAME,\n BODY_MAX_HEIGHT_VAR,\n BODY_MAX_WIDTH_VAR,\n BODY_SELECTOR,\n LABEL_CLASS_NAME,\n LABEL_TEXT_CLASS_NAME,\n ROOT_CLASS_NAME,\n STYLES,\n TRIGGER_CLASS_NAME,\n} from './styles.js';\n\nexport type Item = {\n element: MaybeHTMLElement;\n event: Event | SyntheticEvent<HTMLElement>;\n label: string;\n value: string;\n};\n\nexport type Props = {\n /**\n * Boolean indicating if the user can submit a value not already in the\n * dropdown.\n */\n allowCreate?: boolean;\n /**\n * Boolean indicating if the user can submit an empty value (i.e. clear\n * the value). Defaults to true.\n */\n allowEmpty?: boolean;\n /**\n * Can take a single React element or exactly two renderable children.\n */\n children: ChildrenTuple | JSX.Element;\n className?: string;\n disabled?: boolean;\n /**\n * Group identifier string links dropdowns together into a menu\n * (like macOS top menubar).\n */\n group?: string;\n hasItems?: boolean;\n isOpenOnMount?: boolean;\n isSearchable?: boolean;\n keepOpenOnSubmit?: boolean;\n label?: string;\n minHeightBody?: number;\n minWidthBody?: number;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s name.\n */\n name?: string;\n onActiveItem?: (payload: Item) => void;\n onClick?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onClose?: () => unknown;\n onMouseDown?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onMouseUp?: (event: ReactMouseEvent<HTMLElement>) => unknown;\n onOpen?: () => unknown;\n onSubmitItem?: (payload: Item) => void;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s placeholder.\n */\n placeholder?: string;\n style?: CSSProperties;\n /**\n * Only usable in conjunction with {isSearchable: true}.\n * Used as search input’s tabIndex.\n */\n tabIndex?: number;\n /**\n * Used as search input’s value if props.isSearchable === true\n * Used to determine if value has changed to avoid triggering onSubmitItem if not\n */\n value?: string;\n};\n\ntype ChildrenTuple = [ReactNode, ReactNode] | readonly [ReactNode, ReactNode];\n\ntype MaybeHTMLElement = HTMLElement | null;\n\ntype MousePosition = { clientX: number; clientY: number };\n\ntype TimeoutID = ReturnType<typeof setTimeout>;\n\nconst CHILDREN_ERROR =\n '@acusti/dropdown requires either 1 child (the dropdown body) or 2 children: the dropdown trigger and the dropdown body.';\nconst CLICKABLE_SELECTOR = 'button, a[href], input[type=\"button\"], input[type=\"submit\"]';\nconst TEXT_INPUT_SELECTOR =\n 'input:not([type=radio]):not([type=checkbox]):not([type=range]),textarea';\n\nexport default function Dropdown({\n allowCreate,\n allowEmpty = true,\n children,\n className,\n disabled,\n hasItems = true,\n isOpenOnMount,\n isSearchable,\n keepOpenOnSubmit = !hasItems,\n label,\n minHeightBody = 30,\n minWidthBody = 100,\n name,\n onActiveItem,\n onClick,\n onClose,\n onMouseDown,\n onMouseUp,\n onOpen,\n onSubmitItem,\n placeholder,\n style: styleFromProps,\n tabIndex,\n value,\n}: Props) {\n const childrenCount = Children.count(children);\n if (childrenCount !== 1 && childrenCount !== 2) {\n if (childrenCount === 0) {\n throw new Error(CHILDREN_ERROR + ' Received no children.');\n }\n console.error(`${CHILDREN_ERROR} Received ${childrenCount} children.`);\n }\n\n let trigger: React.ReactNode;\n if (childrenCount > 1) {\n trigger = (children as ChildrenTuple)[0];\n }\n\n const [isOpen, setIsOpen] = useState<boolean>(isOpenOnMount ?? false);\n const [isOpening, setIsOpening] = useState<boolean>(!isOpenOnMount);\n const [dropdownElement, setDropdownElement] = useState<MaybeHTMLElement>(null);\n const [dropdownBodyElement, setDropdownBodyElement] =\n useState<MaybeHTMLElement>(null);\n const id = useId();\n\n const inputElementRef = useRef<HTMLInputElement | null>(null);\n const closingTimerRef = useRef<null | TimeoutID>(null);\n const isOpeningTimerRef = useRef<null | TimeoutID>(null);\n const currentInputMethodRef = useRef<'keyboard' | 'mouse'>('mouse');\n const clearEnteredCharactersTimerRef = useRef<null | TimeoutID>(null);\n const enteredCharactersRef = useRef<string>('');\n const mouseDownPositionRef = useRef<MousePosition | null>(null);\n\n const allowCreateRef = useRef(allowCreate);\n const allowEmptyRef = useRef(allowEmpty);\n const hasItemsRef = useRef(hasItems);\n const isOpenRef = useRef(isOpen);\n const isOpeningRef = useRef(isOpening);\n const keepOpenOnSubmitRef = useRef(keepOpenOnSubmit);\n const onCloseRef = useRef(onClose);\n const onOpenRef = useRef(onOpen);\n const onSubmitItemRef = useRef(onSubmitItem);\n const valueRef = useRef(value);\n\n useEffect(() => {\n allowCreateRef.current = allowCreate;\n allowEmptyRef.current = allowEmpty;\n hasItemsRef.current = hasItems;\n isOpenRef.current = isOpen;\n isOpeningRef.current = isOpening;\n keepOpenOnSubmitRef.current = keepOpenOnSubmit;\n onCloseRef.current = onClose;\n onOpenRef.current = onOpen;\n onSubmitItemRef.current = onSubmitItem;\n valueRef.current = value;\n }, [\n allowCreate,\n allowEmpty,\n hasItems,\n isOpen,\n isOpening,\n keepOpenOnSubmit,\n onClose,\n onOpen,\n onSubmitItem,\n value,\n ]);\n\n const isMountedRef = useRef(false);\n\n useEffect(() => {\n if (!isMountedRef.current) {\n isMountedRef.current = true;\n // If isOpenOnMount, trigger onOpen right away\n if (isOpenRef.current && onOpenRef.current) {\n onOpenRef.current();\n }\n return;\n }\n\n if (isOpen && onOpenRef.current) {\n onOpenRef.current();\n } else if (!isOpen && onCloseRef.current) {\n onCloseRef.current();\n }\n }, [isOpen]);\n\n const closeDropdown = () => {\n setIsOpen(false);\n setIsOpening(false);\n mouseDownPositionRef.current = null;\n if (closingTimerRef.current) {\n clearTimeout(closingTimerRef.current);\n closingTimerRef.current = null;\n }\n };\n\n const handleSubmitItem = (event: Event | React.SyntheticEvent<HTMLElement>) => {\n if (isOpenRef.current && !keepOpenOnSubmitRef.current) {\n // A short timeout before closing is better UX when user selects an item so dropdown\n // doesn’t close before expected. It also enables using <Link />s in the dropdown body.\n closingTimerRef.current = setTimeout(closeDropdown, 90);\n }\n\n if (!hasItemsRef.current) return;\n\n const element = getActiveItemElement(dropdownElement);\n if (!element && !allowCreateRef.current) {\n // If not allowEmpty, don’t allow submitting an empty item\n if (!allowEmptyRef.current) return;\n // If we have an input element as trigger & the user didn’t clear the text, do nothing\n if (inputElementRef.current?.value) return;\n }\n\n let itemLabel = element?.innerText ?? '';\n if (inputElementRef.current) {\n if (!element) {\n itemLabel = inputElementRef.current.value;\n } else {\n inputElementRef.current.value = itemLabel;\n }\n\n if (\n inputElementRef.current ===\n inputElementRef.current.ownerDocument.activeElement\n ) {\n inputElementRef.current.blur();\n }\n }\n\n const nextValue = element?.dataset.uktValue ?? itemLabel;\n // If parent is controlling Dropdown via props.value and nextValue is the same, do nothing\n if (valueRef.current && valueRef.current === nextValue) return;\n\n // If the item is clickable or contains exactly one clickable element, invoke it\n // (but only if the event didn’t already originate from that element)\n if (element) {\n const eventTarget = event.target as HTMLElement;\n\n if (element.matches(CLICKABLE_SELECTOR)) {\n // The item element itself is clickable (e.g., <button data-ukt-value=\"…\">)\n if (element !== eventTarget && !element.contains(eventTarget)) {\n element.click();\n }\n } else {\n // Check if item contains exactly one clickable child element\n const clickableElements = element.querySelectorAll(CLICKABLE_SELECTOR);\n if (clickableElements.length === 1) {\n const clickableElement = clickableElements[0] as HTMLElement;\n if (\n clickableElement !== eventTarget &&\n !clickableElement.contains(eventTarget)\n ) {\n clickableElement.click();\n }\n }\n }\n }\n\n onSubmitItemRef.current?.({\n element,\n event,\n label: itemLabel,\n value: nextValue,\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, event, onActiveItem });\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 event,\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 onActiveItem,\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, event, index: 0, onActiveItem });\n } else {\n setActiveItem({\n dropdownElement,\n event,\n indexAddend: -1,\n onActiveItem,\n });\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, event, index: -1, onActiveItem });\n } else {\n setActiveItem({\n dropdownElement,\n event,\n indexAddend: 1,\n onActiveItem,\n });\n }\n return;\n }\n }\n };\n\n useKeyboardEvents({ ignoreUsedKeyboardEvents: false, onKeyDown: handleKeyDown });\n\n const handleRef = (ref: HTMLDivElement | null): (() => void) | void => {\n setDropdownElement(ref);\n if (!ref) return;\n\n const { ownerDocument } = ref;\n let inputElement = inputElementRef.current;\n // Check if trigger is a textual input or textarea element\n if (!inputElement && ref.firstElementChild) {\n if (ref.firstElementChild.matches(TEXT_INPUT_SELECTOR)) {\n inputElement = ref.firstElementChild as HTMLInputElement;\n } else {\n inputElement = ref.firstElementChild.querySelector(TEXT_INPUT_SELECTOR);\n }\n inputElementRef.current = inputElement;\n }\n\n const handleGlobalMouseDown = ({ target }: MouseEvent) => {\n const eventTarget = target as HTMLElement;\n if (!ref.contains(eventTarget)) {\n // Close dropdown on an outside click\n closeDropdown();\n }\n };\n\n const handleGlobalMouseUp = ({ target }: MouseEvent) => {\n if (!isOpenRef.current || closingTimerRef.current) return;\n\n // If still isOpening (gets set false 1s after open triggers), set it to false onMouseUp\n if (isOpeningRef.current) {\n setIsOpening(false);\n if (isOpeningTimerRef.current) {\n clearTimeout(isOpeningTimerRef.current);\n isOpeningTimerRef.current = null;\n }\n return;\n }\n\n const eventTarget = target as HTMLElement;\n // Only handle mouseup events from outside the dropdown here\n if (!ref.contains(eventTarget)) {\n closeDropdown();\n }\n };\n\n // Close dropdown if any element is focused outside of this dropdown\n const handleGlobalFocusIn = ({ target }: Event) => {\n if (!isOpenRef.current) return;\n\n const eventTarget = target as HTMLElement;\n // If focused element is a descendant or a parent of the dropdown, do nothing\n if (ref.contains(eventTarget) || eventTarget.contains(ref)) {\n return;\n }\n\n closeDropdown();\n };\n\n document.addEventListener('focusin', handleGlobalFocusIn);\n document.addEventListener('mousedown', handleGlobalMouseDown);\n document.addEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.addEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.addEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.addEventListener('mouseup', handleGlobalMouseUp);\n }\n\n // If dropdown should be open on mount, focus it\n if (isOpenOnMount) {\n ref.focus();\n }\n\n const handleInput = (event: Event) => {\n if (!isOpenRef.current) setIsOpen(true);\n\n const input = event.target as HTMLInputElement;\n const isDeleting = enteredCharactersRef.current.length > input.value.length;\n enteredCharactersRef.current = input.value;\n // When deleting text, if there’s already an active item and\n // input isn’t empty, preserve the active item, else update it\n if (isDeleting && input.value.length && getActiveItemElement(ref)) {\n return;\n }\n\n setActiveItem({\n dropdownElement: ref,\n event,\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 onActiveItem,\n text: enteredCharactersRef.current,\n });\n };\n\n if (inputElement) {\n inputElement.addEventListener('input', handleInput);\n }\n\n return () => {\n document.removeEventListener('focusin', handleGlobalFocusIn);\n document.removeEventListener('mousedown', handleGlobalMouseDown);\n document.removeEventListener('mouseup', handleGlobalMouseUp);\n\n if (ownerDocument !== document) {\n ownerDocument.removeEventListener('focusin', handleGlobalFocusIn);\n ownerDocument.removeEventListener('mousedown', handleGlobalMouseDown);\n ownerDocument.removeEventListener('mouseup', handleGlobalMouseUp);\n }\n\n if (inputElement) {\n inputElement.removeEventListener('input', handleInput);\n }\n };\n };\n\n if (!isValidElement(trigger)) {\n if (isSearchable) {\n trigger = (\n <input\n autoComplete=\"off\"\n className={TRIGGER_CLASS_NAME}\n defaultValue={value ?? ''}\n disabled={disabled}\n name={name}\n onFocus={() => setIsOpen(true)}\n placeholder={placeholder}\n ref={inputElementRef}\n tabIndex={tabIndex}\n type=\"text\"\n />\n );\n } else {\n trigger = (\n <button className={TRIGGER_CLASS_NAME} tabIndex={0} type=\"button\">\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","event","index","indexAddend","isExactMatch","onActiveItem","text","Array","from","lastIndex","currentActiveIndex","findIndex","nextActiveIndex","Math","max","min","itemTexts","map","innerText","textToCompare","toLowerCase","itemText","startsWith","bestMatch","getBestMatch","nextActiveItem","setAttribute","label","value","uktValue","parentElement","scrollableParent","isScrollable","scrollHeight","clientHeight","parentRect","getBoundingClientRect","itemRect","isAboveTop","top","isBelowBottom","bottom","scrollTop","CHILDREN_ERROR","CLICKABLE_SELECTOR","TEXT_INPUT_SELECTOR","Dropdown","t0","$","_c","allowCreate","allowEmpty","t1","className","disabled","hasItems","t2","isOpenOnMount","isSearchable","keepOpenOnSubmit","t3","minHeightBody","t4","minWidthBody","t5","name","onClick","onClose","onMouseDown","onMouseUp","onOpen","onSubmitItem","placeholder","style","styleFromProps","tabIndex","undefined","childrenCount","Children","count","Error","console","error","trigger","isOpen","setIsOpen","useState","isOpening","setIsOpening","setDropdownElement","dropdownBodyElement","setDropdownBodyElement","id","useId","inputElementRef","useRef","closingTimerRef","isOpeningTimerRef","currentInputMethodRef","clearEnteredCharactersTimerRef","enteredCharactersRef","mouseDownPositionRef","allowCreateRef","allowEmptyRef","hasItemsRef","isOpenRef","isOpeningRef","keepOpenOnSubmitRef","onCloseRef","onOpenRef","onSubmitItemRef","valueRef","t6","t7","current","useEffect","isMountedRef","t8","t9","t10","Symbol","for","clearTimeout","closeDropdown","t11","setTimeout","itemLabel","ownerDocument","activeElement","blur","nextValue","eventTarget","target","matches","contains","click","clickableElements","clickableElement","handleSubmitItem","t12","t13","clientX","clientY","initialPosition","abs","handleMouseMove","event_0","eventTarget_0","item","closest","element_0","handleMouseOver","t14","event_1","activeItem","eventRelatedTarget","relatedTarget","handleMouseOut","t15","event_2","handleMouseDown","t16","event_3","eventTarget_1","handleMouseUp","t17","event_4","altKey","ctrlKey","key","metaKey","eventTarget_2","onEventHandled","stopPropagation","preventDefault","isEventTargetingDropdown","isTargetUsingKeyEvents","isEventTargetUsingKeyEvent","isEditingCharacters","test","slice","handleKeyDown","t18","ignoreUsedKeyboardEvents","onKeyDown","useKeyboardEvents","t19","ref","inputElement","firstElementChild","handleGlobalMouseDown","t20","eventTarget_3","handleGlobalMouseUp","t21","target_0","eventTarget_4","handleGlobalFocusIn","t22","target_1","eventTarget_5","document","addEventListener","focus","handleInput","event_5","input","isDeleting","removeEventListener","handleRef","isValidElement","dropdownRect","useBoundingClientRect","dropdownBodyRect","getBoundingAncestor","boundingElement","boundingElementRect","maxHeight","maxWidth","maxHeightUp","maxHeightDown","round","maxWidthLeft","right","left","maxWidthRight","t23","anchorStyles","t24","t25","t26","t27","clsx","t28","t29","t30","tagName","getComputedStyle","overflowX"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acusti/dropdown",
3
- "version": "0.51.0",
3
+ "version": "0.52.0",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "exports": "./dist/Dropdown.js",