@gooddata/sdk-ui-kit 10.26.0-alpha.42 → 10.26.0-alpha.44

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.
Files changed (56) hide show
  1. package/esm/@ui/@utils/keyboardNavigation.d.ts +18 -0
  2. package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -0
  3. package/esm/@ui/@utils/keyboardNavigation.js +47 -0
  4. package/esm/@ui/@utils/keyboardNavigation.js.map +1 -0
  5. package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
  6. package/esm/@ui/UiFocusTrap/UiFocusTrap.js +17 -13
  7. package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
  8. package/esm/@ui/UiListbox/UiListbox.d.ts +11 -0
  9. package/esm/@ui/UiListbox/UiListbox.d.ts.map +1 -0
  10. package/esm/@ui/UiListbox/UiListbox.js +121 -0
  11. package/esm/@ui/UiListbox/UiListbox.js.map +1 -0
  12. package/esm/@ui/UiListbox/defaults/DefaultUiListboxItemComponent.d.ts +15 -0
  13. package/esm/@ui/UiListbox/defaults/DefaultUiListboxItemComponent.d.ts.map +1 -0
  14. package/esm/@ui/UiListbox/defaults/DefaultUiListboxItemComponent.js +31 -0
  15. package/esm/@ui/UiListbox/defaults/DefaultUiListboxItemComponent.js.map +1 -0
  16. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.d.ts +8 -0
  17. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.d.ts.map +1 -0
  18. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.js +22 -0
  19. package/esm/@ui/UiListbox/defaults/firstCharacterSearch.js.map +1 -0
  20. package/esm/@ui/UiListbox/listboxBem.d.ts +2 -0
  21. package/esm/@ui/UiListbox/listboxBem.d.ts.map +1 -0
  22. package/esm/@ui/UiListbox/listboxBem.js +4 -0
  23. package/esm/@ui/UiListbox/listboxBem.js.map +1 -0
  24. package/esm/@ui/UiListbox/types.d.ts +49 -0
  25. package/esm/@ui/UiListbox/types.d.ts.map +1 -0
  26. package/esm/@ui/UiListbox/types.js +3 -0
  27. package/esm/@ui/UiListbox/types.js.map +1 -0
  28. package/esm/Dialog/DialogBase.d.ts.map +1 -1
  29. package/esm/Dialog/DialogBase.js +2 -8
  30. package/esm/Dialog/DialogBase.js.map +1 -1
  31. package/esm/Dropdown/Dropdown.d.ts +18 -1
  32. package/esm/Dropdown/Dropdown.d.ts.map +1 -1
  33. package/esm/Dropdown/Dropdown.js +41 -29
  34. package/esm/Dropdown/Dropdown.js.map +1 -1
  35. package/esm/Dropdown/DropdownButtonKeyboardWrapper.d.ts +8 -0
  36. package/esm/Dropdown/DropdownButtonKeyboardWrapper.d.ts.map +1 -0
  37. package/esm/Dropdown/DropdownButtonKeyboardWrapper.js +22 -0
  38. package/esm/Dropdown/DropdownButtonKeyboardWrapper.js.map +1 -0
  39. package/esm/List/index.js +1 -1
  40. package/esm/index.d.ts +3 -0
  41. package/esm/index.d.ts.map +1 -1
  42. package/esm/index.js +2 -0
  43. package/esm/index.js.map +1 -1
  44. package/esm/sdk-ui-kit.d.ts +92 -1
  45. package/esm/utils/domUtilities.d.ts +1 -0
  46. package/esm/utils/domUtilities.d.ts.map +1 -1
  47. package/esm/utils/domUtilities.js +11 -1
  48. package/esm/utils/domUtilities.js.map +1 -1
  49. package/package.json +8 -8
  50. package/src/@ui/UiListbox/UiListbox.scss +79 -0
  51. package/src/@ui/index.scss +1 -0
  52. package/styles/css/dropdown.css +4 -0
  53. package/styles/css/dropdown.css.map +1 -1
  54. package/styles/css/main.css +67 -0
  55. package/styles/css/main.css.map +1 -1
  56. package/styles/scss/dropdown.scss +5 -1
@@ -1,10 +1,12 @@
1
1
  // (C) 2007-2025 GoodData Corporation
2
- import React, { useState, useCallback, useEffect, useRef } from "react";
2
+ import React, { useCallback, useEffect, useRef } from "react";
3
3
  import noop from "lodash/noop.js";
4
4
  import { FullScreenOverlay, Overlay } from "../Overlay/index.js";
5
5
  import { useMediaQuery } from "../responsive/useMediaQuery.js";
6
6
  import { useId } from "../utils/useId.js";
7
7
  import { UiFocusTrap } from "../@ui/UiFocusTrap/UiFocusTrap.js";
8
+ import { usePropState } from "@gooddata/sdk-ui";
9
+ import { DropdownButtonKeyboardWrapper } from "./DropdownButtonKeyboardWrapper.js";
8
10
  const SCROLLBAR_SELECTOR = ".fixedDataTableLayout_main .ScrollbarLayout_main";
9
11
  const MOBILE_DROPDOWN_ALIGN_POINTS = [
10
12
  {
@@ -34,35 +36,31 @@ function shouldCloseOnClick(e) {
34
36
  * @internal
35
37
  */
36
38
  export const Dropdown = (props) => {
37
- const { className, openOnInit, closeOnParentScroll, closeOnMouseDrag, closeOnOutsideClick = true, overlayPositionType, alignPoints = [
39
+ const { isOpen: isOpenProp, onToggle, className, openOnInit, closeOnParentScroll, closeOnMouseDrag, closeOnOutsideClick = true, overlayPositionType, alignPoints = [
38
40
  {
39
41
  align: "bl tl",
40
42
  },
41
- ], overlayZIndex, ignoreClicksOnByClass = [], renderBody, renderButton, onOpenStateChanged, fullscreenOnMobile = true, enableEventPropagation = false, closeOnEscape = false, autofocusOnOpen = false, } = props;
42
- const [{ isOpen }, setState] = useState({
43
- isOpen: !!openOnInit,
44
- });
43
+ ], overlayZIndex, ignoreClicksOnByClass = [], renderBody, renderButton, onOpenStateChanged, fullscreenOnMobile = true, enableEventPropagation = false, closeOnEscape = false, autofocusOnOpen = false, accessibilityConfig, } = props;
44
+ const [isOpen, setIsOpen] = usePropState(isOpenProp ?? openOnInit ?? false);
45
45
  const id = useId();
46
46
  const dropdownId = `dropdown-${id}`;
47
- const _renderButton = (renderProps) => (React.createElement("div", { className: dropdownId }, renderButton(renderProps)));
48
- const toggleDropdown = useCallback(() => {
49
- setState((state) => ({
50
- ...state,
51
- isOpen: !state.isOpen,
52
- }));
53
- }, []);
47
+ const dropdownButtonId = `dropdown-button-${id}`;
48
+ const buttonWrapperRef = useRef(null);
49
+ const _renderButton = (renderProps) => (React.createElement(DropdownButtonKeyboardWrapper, { onToggle: renderProps.toggleDropdown, isOpen: renderProps.isOpen, ref: buttonWrapperRef, id: dropdownButtonId }, renderButton(renderProps)));
50
+ const toggleDropdown = useCallback((desiredState) => {
51
+ if (typeof desiredState === "boolean") {
52
+ onToggle ? onToggle(desiredState) : setIsOpen(desiredState);
53
+ }
54
+ else {
55
+ onToggle ? onToggle() : setIsOpen((state) => !state);
56
+ }
57
+ }, [onToggle, setIsOpen]);
54
58
  const closeDropdown = useCallback(() => {
55
- setState((state) => ({
56
- ...state,
57
- isOpen: false,
58
- }));
59
- }, []);
59
+ toggleDropdown(false);
60
+ }, [toggleDropdown]);
60
61
  const openDropdown = useCallback(() => {
61
- setState((state) => ({
62
- ...state,
63
- isOpen: true,
64
- }));
65
- }, []);
62
+ toggleDropdown(true);
63
+ }, [toggleDropdown]);
66
64
  const mountRef = useRef(false);
67
65
  const buttonRef = useRef(null);
68
66
  useEffect(() => {
@@ -80,6 +78,20 @@ export const Dropdown = (props) => {
80
78
  closeDropdown: closeDropdown,
81
79
  toggleDropdown: toggleDropdown,
82
80
  dropdownId,
81
+ ariaAttributes: {
82
+ role: "button",
83
+ "aria-controls": dropdownId,
84
+ "aria-expanded": isOpen,
85
+ "aria-haspopup": accessibilityConfig?.popupRole,
86
+ },
87
+ };
88
+ const renderBodyProps = {
89
+ closeDropdown,
90
+ ariaAttributes: {
91
+ id: dropdownId,
92
+ "aria-labelledby": dropdownButtonId,
93
+ role: accessibilityConfig?.popupRole,
94
+ },
83
95
  };
84
96
  const isMobileDevice = useMediaQuery("mobileDevice");
85
97
  const renderDropdown = isOpen &&
@@ -90,15 +102,15 @@ export const Dropdown = (props) => {
90
102
  isMobile: true,
91
103
  buttonRef,
92
104
  })),
93
- React.createElement("div", { id: dropdownId, className: "gd-mobile-dropdown-content gd-flex-item-stretch gd-flex-row-container" }, renderBody({
94
- closeDropdown,
105
+ React.createElement("div", { className: "gd-mobile-dropdown-content gd-flex-item-stretch gd-flex-row-container" }, renderBody({
106
+ ...renderBodyProps,
95
107
  isMobile: true,
96
- }))))) : (React.createElement(Overlay, { alignTo: `.${dropdownId}`, positionType: overlayPositionType, alignPoints: alignPoints, closeOnOutsideClick: closeOnOutsideClick, closeOnMouseDrag: closeOnMouseDrag, closeOnParentScroll: closeOnParentScroll, closeOnEscape: closeOnEscape, shouldCloseOnClick: shouldCloseOnClick, ignoreClicksOnByClass: ignoreClicksOnByClass, onClose: closeDropdown,
108
+ }))))) : (React.createElement(Overlay, { alignTo: `#${dropdownButtonId}`, positionType: overlayPositionType, alignPoints: alignPoints, closeOnOutsideClick: closeOnOutsideClick, closeOnMouseDrag: closeOnMouseDrag, closeOnParentScroll: closeOnParentScroll, closeOnEscape: closeOnEscape, shouldCloseOnClick: shouldCloseOnClick, ignoreClicksOnByClass: ignoreClicksOnByClass, onClose: closeDropdown,
97
109
  // Overlay prevents event propagation by default using defaultProps for these
98
110
  onClick: enableEventPropagation ? noop : undefined, onMouseOver: enableEventPropagation ? noop : undefined, onMouseUp: enableEventPropagation ? noop : undefined, zIndex: overlayZIndex },
99
- React.createElement(UiFocusTrap, { returnFocusTo: buttonRef, autofocusOnOpen: autofocusOnOpen },
100
- React.createElement("div", { className: "overlay dropdown-body", id: dropdownId }, renderBody({
101
- closeDropdown,
111
+ React.createElement(UiFocusTrap, { returnFocusTo: buttonRef.current ? buttonRef : buttonWrapperRef, autofocusOnOpen: autofocusOnOpen },
112
+ React.createElement("div", { className: "overlay dropdown-body" }, renderBody({
113
+ ...renderBodyProps,
102
114
  isMobile: false,
103
115
  }))))));
104
116
  return (React.createElement("div", { className: className },
@@ -1 +1 @@
1
- {"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../src/Dropdown/Dropdown.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dropdown.js","sourceRoot":"","sources":["../../src/Dropdown/Dropdown.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import React from "react";
2
+ type IDropdownButtonKeyboardWrapperProps = {
3
+ onToggle: (desiredState?: boolean | unknown) => void;
4
+ isOpen: boolean;
5
+ } & React.HTMLProps<HTMLDivElement>;
6
+ export declare const DropdownButtonKeyboardWrapper: React.ForwardRefExoticComponent<Omit<IDropdownButtonKeyboardWrapperProps, "ref"> & React.RefAttributes<HTMLElement>>;
7
+ export {};
8
+ //# sourceMappingURL=DropdownButtonKeyboardWrapper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownButtonKeyboardWrapper.d.ts","sourceRoot":"","sources":["../../src/Dropdown/DropdownButtonKeyboardWrapper.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,KAAK,mCAAmC,GAAG;IACvC,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,KAAK,IAAI,CAAC;IACrD,MAAM,EAAE,OAAO,CAAC;CACnB,GAAG,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAEpC,eAAO,MAAM,6BAA6B,sHAkCxC,CAAC"}
@@ -0,0 +1,22 @@
1
+ // (C) 2025 GoodData Corporation
2
+ import React from "react";
3
+ import { isElementTextInput } from "../utils/domUtilities.js";
4
+ export const DropdownButtonKeyboardWrapper = React.forwardRef(function DropdownButtonKeyboardWrapper({ onToggle, isOpen, children, ...divProps }, ref) {
5
+ const handleKeyDown = React.useCallback((event) => {
6
+ const isInputFocused = isElementTextInput(document.activeElement);
7
+ if (event.code === "Enter" || (event.code === "Space" && !isInputFocused)) {
8
+ onToggle();
9
+ event.preventDefault();
10
+ }
11
+ if ((event.code === "Escape" || event.code === "ArrowUp") && isOpen) {
12
+ onToggle(false);
13
+ event.preventDefault();
14
+ }
15
+ if (event.code === "ArrowDown" && !isOpen) {
16
+ onToggle(true);
17
+ event.preventDefault();
18
+ }
19
+ }, [isOpen, onToggle]);
20
+ return (React.createElement("div", { onKeyDown: handleKeyDown, className: "gd-dropdown-button-wrapper", ...divProps, ref: ref }, children));
21
+ });
22
+ //# sourceMappingURL=DropdownButtonKeyboardWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DropdownButtonKeyboardWrapper.js","sourceRoot":"","sources":["../../src/Dropdown/DropdownButtonKeyboardWrapper.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAO9D,MAAM,CAAC,MAAM,6BAA6B,GAAG,KAAK,CAAC,UAAU,CAG3D,SAAS,6BAA6B,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,EAAE,GAAG;IACrF,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CACnC,CAAC,KAAK,EAAE,EAAE;QACN,MAAM,cAAc,GAAG,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAElE,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;YACxE,QAAQ,EAAE,CAAC;YACX,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,MAAM,EAAE,CAAC;YAClE,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACf,KAAK,CAAC,cAAc,EAAE,CAAC;QAC3B,CAAC;IACL,CAAC,EACD,CAAC,MAAM,EAAE,QAAQ,CAAC,CACrB,CAAC;IAEF,OAAO,CACH,6BACI,SAAS,EAAE,aAAa,EACxB,SAAS,EAAE,4BAA4B,KACnC,QAAQ,EACZ,GAAG,EAAE,GAAsC,IAE1C,QAAQ,CACP,CACT,CAAC;AACN,CAAC,CAAC,CAAC"}
package/esm/List/index.js CHANGED
@@ -1,4 +1,4 @@
1
- // (C) 2020-2024 GoodData Corporation
1
+ // (C) 2020-2025 GoodData Corporation
2
2
  export { Item, ItemsWrapper, Separator, Header } from "./MenuList.js";
3
3
  export { DateDatasetsListItem } from "./DateDatasetsListItem.js";
4
4
  export { InsightListItem, InsightListItemTypeIcon } from "./InsightListItem.js";
package/esm/index.d.ts CHANGED
@@ -91,4 +91,7 @@ export { UiPagedVirtualList } from "./@ui/UiPagedVirtualList/UiPagedVirtualList.
91
91
  export type { UiPagedVirtualListProps, UiPagedVirtualListSkeletonItemProps, } from "./@ui/UiPagedVirtualList/UiPagedVirtualList.js";
92
92
  export { UiFocusTrap } from "./@ui/UiFocusTrap/UiFocusTrap.js";
93
93
  export type { UiFocusTrapProps } from "./@ui/UiFocusTrap/UiFocusTrap.js";
94
+ export { UiListbox } from "./@ui/UiListbox/UiListbox.js";
95
+ export { makeSeparatorItem, separatorItemSymbol, DefaultUiListboxItemComponent, } from "./@ui/UiListbox/defaults/DefaultUiListboxItemComponent.js";
96
+ export type { UiListboxProps, IListboxContext, UiListboxItemProps, IUiListboxItem, } from "./@ui/UiListbox/types.js";
94
97
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/esm/index.js CHANGED
@@ -80,4 +80,6 @@ export { iconPaths } from "./@ui/UiIcon/icons.js";
80
80
  export { UiSkeleton } from "./@ui/UiSkeleton/UiSkeleton.js";
81
81
  export { UiPagedVirtualList } from "./@ui/UiPagedVirtualList/UiPagedVirtualList.js";
82
82
  export { UiFocusTrap } from "./@ui/UiFocusTrap/UiFocusTrap.js";
83
+ export { UiListbox } from "./@ui/UiListbox/UiListbox.js";
84
+ export { makeSeparatorItem, separatorItemSymbol, DefaultUiListboxItemComponent, } from "./@ui/UiListbox/defaults/DefaultUiListboxItemComponent.js";
83
85
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC;;;;;;;;GAQG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAUtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAKpF,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC;;;;;;;;GAQG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,sBAAsB,CAAC;AACrC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAGnF,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAUtD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gDAAgD,CAAC;AAKpF,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EACH,iBAAiB,EACjB,mBAAmB,EACnB,6BAA6B,GAChC,MAAM,2DAA2D,CAAC"}
@@ -545,6 +545,11 @@ export declare const defaultColorPaletteMetadataObject: IColorPaletteDefinition;
545
545
  */
546
546
  export declare const defaultThemeMetadataObject: IThemeDefinition;
547
547
 
548
+ /**
549
+ * @internal
550
+ */
551
+ export declare function DefaultUiListboxItemComponent<T>({ item, isFocused, isSelected, onSelect, }: UiListboxItemProps<T>): React_2.ReactNode;
552
+
548
553
  /**
549
554
  * @internal
550
555
  */
@@ -1758,6 +1763,10 @@ export declare interface IDomNativeProps {
1758
1763
  export declare interface IDropdownBodyRenderProps {
1759
1764
  isMobile: boolean;
1760
1765
  closeDropdown: () => void;
1766
+ ariaAttributes: Pick<React_2.AriaAttributes, "aria-labelledby"> & {
1767
+ role: React_2.AriaAttributes["aria-haspopup"] & React_2.AriaRole;
1768
+ id: string;
1769
+ };
1761
1770
  }
1762
1771
 
1763
1772
  /**
@@ -1797,7 +1806,10 @@ export declare interface IDropdownButtonRenderProps {
1797
1806
  buttonRef: React_2.MutableRefObject<HTMLElement | null>;
1798
1807
  openDropdown: () => void;
1799
1808
  closeDropdown: () => void;
1800
- toggleDropdown: () => void;
1809
+ toggleDropdown: (desiredState?: boolean | unknown) => void;
1810
+ ariaAttributes: {
1811
+ role: "button" | string;
1812
+ } & Pick<React_2.AriaAttributes, "aria-haspopup" | "aria-expanded" | "aria-controls">;
1801
1813
  }
1802
1814
 
1803
1815
  /**
@@ -1893,6 +1905,13 @@ export declare interface IDropdownListProps<T> extends IListProps<T> {
1893
1905
  export declare interface IDropdownProps {
1894
1906
  renderBody: (props: IDropdownBodyRenderProps) => React_2.ReactNode;
1895
1907
  renderButton: (props: IDropdownButtonRenderProps) => React_2.ReactNode;
1908
+ isOpen?: boolean;
1909
+ /**
1910
+ * Toggles the open state or sets the state to the desired value.
1911
+ * The `desiredState` argument's type includes `unknown` to facilitate ease of use as an event handler (`onClick={onToggle}`)
1912
+ * @param desiredState - The desired state. If not provided, the state will be toggled.
1913
+ */
1914
+ onToggle?: (desiredState?: boolean | unknown) => void;
1896
1915
  openOnInit?: boolean;
1897
1916
  className?: string;
1898
1917
  alignPoints?: IAlignPoint[];
@@ -1910,6 +1929,9 @@ export declare interface IDropdownProps {
1910
1929
  enableEventPropagation?: boolean;
1911
1930
  closeOnEscape?: boolean;
1912
1931
  autofocusOnOpen?: boolean;
1932
+ accessibilityConfig?: {
1933
+ popupRole?: "listbox" | "tree" | "grid" | "dialog";
1934
+ };
1913
1935
  }
1914
1936
 
1915
1937
  /**
@@ -2815,6 +2837,19 @@ export declare interface ILegacySingleSelectListProps<T> {
2815
2837
  width: number;
2816
2838
  }
2817
2839
 
2840
+ /**
2841
+ * @internal
2842
+ */
2843
+ export declare interface IListboxContext<T> {
2844
+ items: IUiListboxItem<T>[];
2845
+ itemRefs: React_2.MutableRefObject<(HTMLLIElement | null)[]>;
2846
+ onSelect: (item: IUiListboxItem<T>) => void;
2847
+ onClose?: () => void;
2848
+ selectedItemId?: string;
2849
+ focusedIndex: number;
2850
+ setFocusedIndex: React_2.Dispatch<React_2.SetStateAction<number>>;
2851
+ }
2852
+
2818
2853
  /**
2819
2854
  * @internal
2820
2855
  */
@@ -4240,6 +4275,16 @@ export declare interface IUiChipAccessibilityConfig extends IAccessibilityConfig
4240
4275
  deleteAriaLabel?: string;
4241
4276
  }
4242
4277
 
4278
+ /**
4279
+ * @internal
4280
+ */
4281
+ export declare interface IUiListboxItem<T> {
4282
+ id: string;
4283
+ stringTitle: string;
4284
+ isDisabled?: boolean;
4285
+ data: T;
4286
+ }
4287
+
4243
4288
  /**
4244
4289
  * @internal
4245
4290
  */
@@ -4461,6 +4506,11 @@ export declare const LoadingSpinner: React_2.FC<ILoadingSpinner>;
4461
4506
  */
4462
4507
  export declare const LocaleSetting: React_2.VFC<ILocaleSettingProps>;
4463
4508
 
4509
+ /**
4510
+ * @internal
4511
+ */
4512
+ export declare const makeSeparatorItem: () => IUiListboxItem<typeof separatorItemSymbol>;
4513
+
4464
4514
  /**
4465
4515
  * @internal
4466
4516
  */
@@ -4825,6 +4875,11 @@ export declare type SelectedTime = {
4825
4875
  */
4826
4876
  export declare const Separator: React_2.FC;
4827
4877
 
4878
+ /**
4879
+ * @internal
4880
+ */
4881
+ export declare const separatorItemSymbol: unique symbol;
4882
+
4828
4883
  /**
4829
4884
  * @internal
4830
4885
  */
@@ -5281,6 +5336,42 @@ export declare interface UiIconProps {
5281
5336
  ariaHidden?: boolean;
5282
5337
  }
5283
5338
 
5339
+ /**
5340
+ * An accessible listbox component that can be navigated by keyboard.
5341
+ * Usable in a <Dropdown /> component.
5342
+ * Should implement https://www.w3.org/WAI/ARIA/apg/patterns/listbox/
5343
+ *
5344
+ * @internal
5345
+ */
5346
+ export declare function UiListbox<T>({ items, className, maxWidth, onSelect, onClose, selectedItemId, ariaAttributes, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, ItemComponent, onUnhandledKeyDown, }: UiListboxProps<T>): React_2.ReactNode;
5347
+
5348
+ /**
5349
+ * @internal
5350
+ */
5351
+ export declare interface UiListboxItemProps<T> {
5352
+ item: IUiListboxItem<T>;
5353
+ isFocused: boolean;
5354
+ isSelected: boolean;
5355
+ onSelect: () => void;
5356
+ }
5357
+
5358
+ /**
5359
+ * @internal
5360
+ */
5361
+ export declare interface UiListboxProps<T> {
5362
+ items: IUiListboxItem<T>[];
5363
+ className?: string;
5364
+ maxWidth?: number;
5365
+ onSelect?: (item: IUiListboxItem<T>) => void;
5366
+ onClose?: () => void;
5367
+ onUnhandledKeyDown?: (event: React_2.KeyboardEvent, context: IListboxContext<T>) => void;
5368
+ selectedItemId?: string;
5369
+ ItemComponent?: React_2.ComponentType<UiListboxItemProps<any>>;
5370
+ shouldKeyboardActionPreventDefault?: boolean;
5371
+ shouldKeyboardActionStopPropagation?: boolean;
5372
+ ariaAttributes: IDropdownBodyRenderProps["ariaAttributes"];
5373
+ }
5374
+
5284
5375
  /**
5285
5376
  * @internal
5286
5377
  */
@@ -26,4 +26,5 @@ export declare const isFixedPosition: (element: HTMLElement | string) => boolean
26
26
  * coordinate space
27
27
  */
28
28
  export declare const elementRegion: (elementOrSelector: HTMLElement | string, getRegionBasedOnPosition?: boolean) => IRegion;
29
+ export declare const isElementTextInput: (element: HTMLElement | EventTarget | null | undefined) => boolean;
29
30
  //# sourceMappingURL=domUtilities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domUtilities.d.ts","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,YAAa,WAAW,KAAG,IAIpD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,YACN,WAAW,wBACE,OAAO,gDAE9B,OAeF,CAAC;AAiBF;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAAa,WAAW,GAAG,MAAM,KAAG,OAe/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,sBACH,WAAW,GAAG,MAAM,6BACZ,OAAO,KACnC,OAuCF,CAAC"}
1
+ {"version":3,"file":"domUtilities.d.ts","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD;;GAEG;AACH,eAAO,MAAM,aAAa,YAAa,WAAW,KAAG,IAIpD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,YACN,WAAW,wBACE,OAAO,gDAE9B,OAeF,CAAC;AAiBF;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAAa,WAAW,GAAG,MAAM,KAAG,OAe/D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,sBACH,WAAW,GAAG,MAAM,6BACZ,OAAO,KACnC,OAuCF,CAAC;AAEF,eAAO,MAAM,kBAAkB,YAAa,WAAW,GAAG,WAAW,GAAG,IAAI,GAAG,SAAS,KAAG,OAc1F,CAAC"}
@@ -1,4 +1,4 @@
1
- // (C) 2020-2022 GoodData Corporation
1
+ // (C) 2020-2025 GoodData Corporation
2
2
  /**
3
3
  * Removes the element specified from the DOM
4
4
  */
@@ -101,4 +101,14 @@ export const elementRegion = (elementOrSelector, getRegionBasedOnPosition) => {
101
101
  elem.style.visibility = originalCss.visibility;
102
102
  return reg;
103
103
  };
104
+ export const isElementTextInput = (element) => {
105
+ if (!element || !("tagName" in element)) {
106
+ return false;
107
+ }
108
+ const { tagName, type } = element;
109
+ const tagNameInLowercase = tagName.toLowerCase();
110
+ const typeInLowercase = type ? type.toLowerCase() : "";
111
+ return (tagNameInLowercase === "textarea" ||
112
+ (tagNameInLowercase === "input" && (typeInLowercase === "text" || typeInLowercase === "number")));
113
+ };
104
114
  //# sourceMappingURL=domUtilities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"domUtilities.js","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"domUtilities.js","sourceRoot":"","sources":["../../src/utils/domUtilities.ts"],"names":[],"mappings":"AAAA,qCAAqC;AAIrC;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,OAAoB,EAAQ,EAAE;IACxD,IAAI,OAAO,EAAE,UAAU,EAAE,CAAC;QACtB,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAClB,OAAoB,EACpB,mBAA6B,EAC7B,YAAY,GAAG,MAAM,EACd,EAAE;IACT,MAAM,YAAY,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IACrD,MAAM,UAAU,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC;IAC5F,MAAM,SAAS,GAAG,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,GAAG,CAAC;IAC1F,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,IAAI,YAAY,CAAC,KAAK,CAAC;IACxD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,CAAC;IAE3D,OAAO;QACH,IAAI,EAAE,UAAU;QAChB,GAAG,EAAE,SAAS;QACd,KAAK;QACL,MAAM;QACN,MAAM,EAAE,SAAS,GAAG,MAAM;QAC1B,KAAK,EAAE,UAAU,GAAG,KAAK;KAC5B,CAAC;AACN,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,GAAG,CAAC,OAAY,EAAE,EAAE;IAC7B,IAAI,IAAI,GAAG,OAAO,CAAC;IACnB,OAAO,IAAI,EAAE,CAAC;QACV,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAA6B,EAAW,EAAE;IACtE,IAAI,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAE,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAiB,CAAC,CAAC,CAAC,OAAO,CAAC;IAEpG,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACV,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,UAAyB,CAAC;IAC1C,CAAC;IAED,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CACzB,iBAAuC,EACvC,wBAAkC,EAC3B,EAAE;IACT,MAAM,IAAI,GACN,OAAO,iBAAiB,KAAK,QAAQ;QACjC,CAAC,CAAE,QAAQ,CAAC,aAAa,CAAC,iBAAiB,CAAiB;QAC5D,CAAC,CAAC,iBAAiB,CAAC;IAE5B,IAAI,CAAC,IAAI,EAAE,CAAC;QACR,OAAO,EAAa,CAAC;IACzB,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChB,qEAAqE;QACrE,OAAO,MAAM,CAAC,IAAI,EAAE,wBAAwB,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED,wCAAwC;IACxC,uDAAuD;IACvD,yEAAyE;IACzE,yDAAyD;IACzD,MAAM,WAAW,GAAG;QAChB,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;QAC7B,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;KACpC,CAAC;IAEF,yEAAyE;IACzE,kBAAkB;IAClB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;IACjC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC;IACjC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAEhC,0BAA0B;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IAEzB,6CAA6C;IAC7C,aAAa,CAAC,IAAI,CAAC,CAAC;IACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC;IAC3C,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;IAE/C,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAqD,EAAW,EAAE;IACjG,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,SAAS,IAAI,OAAO,CAAC,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC;IACjB,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAA2B,CAAC;IAEtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IACjD,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEvD,OAAO,CACH,kBAAkB,KAAK,UAAU;QACjC,CAAC,kBAAkB,KAAK,OAAO,IAAI,CAAC,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,QAAQ,CAAC,CAAC,CACnG,CAAC;AACN,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gooddata/sdk-ui-kit",
3
- "version": "10.26.0-alpha.42",
3
+ "version": "10.26.0-alpha.44",
4
4
  "description": "GoodData SDK - UI Building Components",
5
5
  "repository": {
6
6
  "type": "git",
@@ -69,11 +69,11 @@
69
69
  "tslib": "^2.5.0",
70
70
  "uuid": "^8.3.2",
71
71
  "unified": "^11.0.5",
72
- "@gooddata/sdk-backend-spi": "10.26.0-alpha.42",
73
- "@gooddata/sdk-model": "10.26.0-alpha.42",
74
- "@gooddata/sdk-ui": "10.26.0-alpha.42",
75
- "@gooddata/sdk-ui-theme-provider": "10.26.0-alpha.42",
76
- "@gooddata/util": "10.26.0-alpha.42"
72
+ "@gooddata/sdk-backend-spi": "10.26.0-alpha.44",
73
+ "@gooddata/sdk-model": "10.26.0-alpha.44",
74
+ "@gooddata/sdk-ui-theme-provider": "10.26.0-alpha.44",
75
+ "@gooddata/sdk-ui": "10.26.0-alpha.44",
76
+ "@gooddata/util": "10.26.0-alpha.44"
77
77
  },
78
78
  "peerDependencies": {
79
79
  "react": "^16.10.0 || ^17.0.0 || ^18.0.0",
@@ -132,8 +132,8 @@
132
132
  "typescript": "5.3.3",
133
133
  "vitest": "3.0.8",
134
134
  "vitest-dom": "0.1.1",
135
- "@gooddata/reference-workspace": "10.26.0-alpha.42",
136
- "@gooddata/sdk-backend-mockingbird": "10.26.0-alpha.42"
135
+ "@gooddata/reference-workspace": "10.26.0-alpha.44",
136
+ "@gooddata/sdk-backend-mockingbird": "10.26.0-alpha.44"
137
137
  },
138
138
  "scripts": {
139
139
  "clean": "rm -rf ci dist esm coverage styles/css *.log tsconfig.tsbuildinfo",
@@ -0,0 +1,79 @@
1
+ // (C) 2025 GoodData Corporation
2
+
3
+ @use "../../../styles/scss/variables";
4
+
5
+ .gd-ui-kit-listbox {
6
+ $root: &;
7
+
8
+ max-height: 300px;
9
+ overflow-y: auto;
10
+ overflow-x: hidden;
11
+ width: 100%;
12
+ min-width: 200px;
13
+
14
+ @media #{variables.$small-only} {
15
+ // !important to override inline style from maxWidth prop
16
+ /* stylelint-disable-next-line declaration-no-important */
17
+ max-width: 100vw !important;
18
+ max-height: 100vh;
19
+ width: 100vw;
20
+ }
21
+
22
+ &__items {
23
+ list-style: none;
24
+ margin: 0;
25
+ padding: 0;
26
+ outline: none;
27
+
28
+ &:focus-visible #{$root}__item--isFocused {
29
+ outline-offset: -2px;
30
+ outline: auto 5px Highlight; /* For Firefox */
31
+ // stylelint-disable-next-line declaration-block-no-duplicate-properties
32
+ outline: auto 5px -webkit-focus-ring-color; /* For Chrome */
33
+ }
34
+ }
35
+
36
+ &__item {
37
+ padding: 8px 10px;
38
+ cursor: pointer;
39
+ display: flex;
40
+ align-items: center;
41
+ font-size: 14px;
42
+ line-height: 20px;
43
+ color: variables.$gd-color-text;
44
+ transition: background-color 0.2s;
45
+
46
+ &:hover:not(&--isDisabled):not(&--isSelected) {
47
+ background-color: variables.$is-focused-background;
48
+ color: variables.$is-focused-color;
49
+ }
50
+
51
+ &--isFocused {
52
+ background-color: variables.$is-focused-background;
53
+ color: variables.$is-focused-color;
54
+ }
55
+
56
+ &--isSelected {
57
+ font-weight: bold;
58
+ background-color: variables.$is-selected-background;
59
+ color: variables.$is-selected-color;
60
+ }
61
+
62
+ &--isSelected#{&}--isFocused,
63
+ &:hover#{&}--isSelected {
64
+ font-weight: bold;
65
+ background-color: variables.$is-selected-focused-background;
66
+ color: variables.$is-selected-focused-color;
67
+ }
68
+
69
+ &--isDisabled {
70
+ color: variables.$gd-color-disabled;
71
+ cursor: not-allowed;
72
+ }
73
+ }
74
+
75
+ &__item-title {
76
+ width: 100%;
77
+ white-space: nowrap;
78
+ }
79
+ }
@@ -5,3 +5,4 @@
5
5
  @use "./UiSkeleton/UiSkeleton.scss";
6
6
  @use "./UiPagedVirtualList/UiPagedVirtualList.scss";
7
7
  @use "./UiChip/UiChip.scss";
8
+ @use "./UiListbox/UiListbox.scss";
@@ -19,6 +19,10 @@
19
19
  margin-bottom: 5px;
20
20
  }
21
21
 
22
+ .gd-dropdown-button-wrapper {
23
+ display: inline-block;
24
+ }
25
+
22
26
  .gd-dropdown .gd-list,
23
27
  .gd-dropdown .gd-list-view,
24
28
  .gd-dropdown .gd-infinite-list,
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../scss/dropdown.scss","../scss/variables.scss"],"names":[],"mappings":"AAGA;EAEI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;AAEA;EACI;;;AAKJ;EACI;;;AAMJ;AAAA;AAAA;AAAA;AAAA;AAAA;EAGI;;AAEA;EALJ;AAAA;AAAA;AAAA;AAAA;AAAA;IAMQ;;;AAIR;AAAA;EACI;;AAEA;EAHJ;AAAA;IAIQ;;;;AAOR;AAAA;EACI;;AAGJ;AAAA;AAAA;AAAA;EAEI;;AAEA;AAAA;AAAA;AAAA;EACI;;;AAMR;EACI;;AAGJ;AAAA;EAEI;;AAEA;AAAA;EACI;;;AAKZ;AAAA;EAEI;;;AAGJ;EACI;EACA,YCsBoB;EDrBpB,OCjEmB;EDkEnB;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;AAGI;AAAA;EAEI;EACA;EACA;EACA;;AAMI;AAAA;AAAA;EACI;EACA,OCtFJ;EDuFI;;AAKJ;AAAA;AAAA;AAAA;AAAA;EAEI,kBC3GH","file":"dropdown.css"}
1
+ {"version":3,"sourceRoot":"","sources":["../scss/dropdown.scss","../scss/variables.scss"],"names":[],"mappings":"AAGA;EAEI;;;AAGJ;EACI;EACA;;;AAGJ;EACI;EACA;;AAEA;EACI;;;AAKJ;EACI;;;AAIR;EACI;;;AAKA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGI;;AAEA;EALJ;AAAA;AAAA;AAAA;AAAA;AAAA;IAMQ;;;AAIR;AAAA;EACI;;AAEA;EAHJ;AAAA;IAIQ;;;;AAOR;AAAA;EACI;;AAGJ;AAAA;AAAA;AAAA;EAEI;;AAEA;AAAA;AAAA;AAAA;EACI;;;AAMR;EACI;;AAGJ;AAAA;EAEI;;AAEA;AAAA;EACI;;;AAKZ;AAAA;EAEI;;;AAGJ;EACI;EACA,YCkBoB;EDjBpB,OCrEmB;EDsEnB;EACA;EACA;;;AAGJ;EACI;;;AAGJ;EACI;EACA;;AAGI;AAAA;EAEI;EACA;EACA;EACA;;AAMI;AAAA;AAAA;EACI;EACA,OC1FJ;ED2FI;;AAKJ;AAAA;AAAA;AAAA;AAAA;EAEI,kBC/GH","file":"dropdown.css"}