• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

alma-oss / spirit-design-system / 28179456061

25 Jun 2026 02:59PM UTC coverage: 86.433% (+0.9%) from 85.576%
28179456061

Pull #2741

github

crishpeen
fix(web): remove unused mixins and variables
Pull Request #2741: refactor(web,web-react)!: switch toggle to composition markup #DS-564

2639 of 3519 branches covered (74.99%)

Branch coverage included in aggregate %.

67 of 79 new or added lines in 4 files covered. (84.81%)

12 existing lines in 6 files now uncovered.

7223 of 7891 relevant lines covered (91.53%)

209.23 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.0
/packages/web-react/src/components/Dropdown/Dropdown.tsx
1
'use client';
2

3
import classNames from 'classnames';
168✔
4
import React, { type KeyboardEventHandler, type MutableRefObject, useCallback, useRef } from 'react';
168✔
5
import { useOverlay, useStyleProps } from '../../hooks';
168✔
6
import { type SpiritDropdownProps } from '../../types';
7
import { DropdownProvider } from './DropdownContext';
168✔
8
import { useDropdownStyleProps } from './useDropdownStyleProps';
168✔
9

10
const Dropdown = (props: SpiritDropdownProps) => {
168✔
11
  const {
12
    children,
13
    enableAutoClose = true,
173✔
14
    fullWidthMode,
15
    id,
16
    isOpen = false,
5✔
17
    onAutoClose,
18
    onToggle,
19
    placement,
20
    triggerRef: externalTriggerRef,
21
    ...rest
22
  } = props;
173✔
23
  const { classProps, props: modifiedProps } = useDropdownStyleProps({ isOpen, ...rest });
173✔
24
  const { styleProps, props: transferProps } = useStyleProps(modifiedProps);
173✔
25
  const { onKeyDown: onUserKeyDown, ...otherProps } = transferProps;
173✔
26

27
  const dropdownRef = useRef<HTMLDivElement>(null);
173✔
28
  const internalTriggerRef = useRef<HTMLElement | null>(null);
173✔
29
  const triggerRef: MutableRefObject<HTMLElement | null | undefined> = externalTriggerRef ?? internalTriggerRef;
173✔
30

31
  const closeOverlay = useCallback(() => {
173✔
32
    if (!isOpen) {
1!
33
      return;
×
34
    }
35

36
    onToggle();
1✔
37

38
    queueMicrotask(() => {
1✔
39
      triggerRef.current?.focus();
1✔
40
    });
41
  }, [isOpen, onToggle, triggerRef]);
42

43
  const closeOverlayFromOutside = useCallback(
173✔
44
    (event: Event) => {
UNCOV
45
      if (!isOpen) {
×
UNCOV
46
        return;
×
47
      }
48

UNCOV
49
      onAutoClose?.(event);
×
UNCOV
50
      onToggle();
×
51
    },
52
    [isOpen, onAutoClose, onToggle],
53
  );
54

55
  const { onOverlayKeyDown } = useOverlay({
173✔
56
    isOpen,
57
    overlayRef: dropdownRef,
58
    onClose: closeOverlay,
59
    closeOnInteractOutside: enableAutoClose,
60
    onCloseOnInteractOutside: closeOverlayFromOutside,
61
  });
62

63
  const handleKeyDown: KeyboardEventHandler<HTMLElement> = useCallback(
173✔
64
    (event) => {
65
      onUserKeyDown?.(event);
7✔
66
      onOverlayKeyDown(event);
7✔
67
    },
68
    [onOverlayKeyDown, onUserKeyDown],
69
  );
70
  const mergedProps = { ...otherProps, onKeyDown: handleKeyDown };
173✔
71

72
  return (
173✔
73
    <DropdownProvider value={{ id, isOpen, fullWidthMode, placement, onToggle, dropdownRef, triggerRef }}>
74
      <div
75
        ref={dropdownRef}
76
        className={classNames(classProps.root, styleProps.className)}
77
        style={styleProps.style}
78
        {...mergedProps}
79
      >
80
        {children}
81
      </div>
82
    </DropdownProvider>
83
  );
84
};
85

86
Dropdown.spiritComponent = 'Dropdown';
168✔
87

88
export default Dropdown;
172✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc