@gooddata/sdk-ui-kit 11.48.0-alpha.3 → 11.48.0-alpha.5

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 (46) hide show
  1. package/esm/@ui/UiListbox/UiListbox.d.ts +1 -1
  2. package/esm/@ui/UiListbox/UiListbox.d.ts.map +1 -1
  3. package/esm/@ui/UiListbox/UiListbox.js +11 -4
  4. package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.d.ts +0 -11
  5. package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.d.ts.map +1 -1
  6. package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.js +1 -15
  7. package/esm/@ui/UiListbox/types.d.ts +7 -2
  8. package/esm/@ui/UiListbox/types.d.ts.map +1 -1
  9. package/esm/@ui/UiMenu/components/Item.d.ts.map +1 -1
  10. package/esm/@ui/UiMenu/components/Item.js +4 -0
  11. package/esm/@ui/UiMenu/components/MenuDivider.d.ts +8 -0
  12. package/esm/@ui/UiMenu/components/MenuDivider.d.ts.map +1 -0
  13. package/esm/@ui/UiMenu/components/MenuDivider.js +10 -0
  14. package/esm/@ui/UiMenu/hooks.d.ts.map +1 -1
  15. package/esm/@ui/UiMenu/hooks.js +3 -2
  16. package/esm/@ui/UiMenu/itemUtils.d.ts +17 -0
  17. package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -1
  18. package/esm/@ui/UiMenu/itemUtils.js +38 -1
  19. package/esm/@ui/UiMenu/types.d.ts +11 -1
  20. package/esm/@ui/UiMenu/types.d.ts.map +1 -1
  21. package/esm/@ui/UiTabs/defaultComponents/DefaultUiTabsAllTabs.d.ts.map +1 -1
  22. package/esm/@ui/UiTabs/defaultComponents/DefaultUiTabsAllTabs.js +4 -3
  23. package/esm/@ui/UiTabs/defaultComponents/DefaultUiTabsTabActions.js +4 -4
  24. package/esm/@ui/UiTabs/defaultComponents/DefaultUiTabsTabActionsButton.d.ts.map +1 -1
  25. package/esm/@ui/UiTabs/defaultComponents/DefaultUiTabsTabActionsButton.js +2 -1
  26. package/esm/@ui/UiTabs/itemUtils.d.ts +11 -0
  27. package/esm/@ui/UiTabs/itemUtils.d.ts.map +1 -0
  28. package/esm/@ui/UiTabs/itemUtils.js +13 -0
  29. package/esm/@ui/UiTabs/types.d.ts +2 -2
  30. package/esm/@ui/UiTabs/types.d.ts.map +1 -1
  31. package/esm/EditableLabel/EditableLabel.d.ts.map +1 -1
  32. package/esm/EditableLabel/EditableLabel.js +4 -0
  33. package/esm/Header/generateHeaderMenuItemsGroups.js +9 -15
  34. package/esm/index.d.ts +3 -3
  35. package/esm/index.d.ts.map +1 -1
  36. package/esm/index.js +1 -1
  37. package/esm/sdk-ui-kit.d.ts +21 -18
  38. package/package.json +11 -11
  39. package/styles/css/editableLabel.css +9 -0
  40. package/styles/css/editableLabel.css.map +1 -1
  41. package/styles/css/main.css +10 -0
  42. package/styles/css/main.css.map +1 -1
  43. package/styles/css/separatorLine.css +1 -0
  44. package/styles/css/separatorLine.css.map +1 -1
  45. package/styles/scss/editableLabel.scss +11 -1
  46. package/styles/scss/separatorLine.scss +1 -0
@@ -7,5 +7,5 @@ import { type IUiListboxProps } from "./types.js";
7
7
  *
8
8
  * @internal
9
9
  */
10
- export declare function UiListbox<InteractiveItemData, StaticItemData>({ items, dataTestId, itemDataTestId, width, maxWidth, maxHeight, onSelect, onClose, onUnhandledKeyDown, selectedItemId, InteractiveItemComponent, StaticItemComponent, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, shouldCloseOnSelect, isDisabledFocusable, isCompact, reference, ariaAttributes }: IUiListboxProps<InteractiveItemData, StaticItemData>): ReactNode;
10
+ export declare function UiListbox<InteractiveItemData, StaticItemData>({ items: rawItems, dataTestId, itemDataTestId, width, maxWidth, maxHeight, onSelect, onClose, onUnhandledKeyDown, selectedItemId, InteractiveItemComponent, StaticItemComponent, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, shouldCloseOnSelect, isDisabledFocusable, isCompact, reference, ariaAttributes }: IUiListboxProps<InteractiveItemData, StaticItemData>): ReactNode;
11
11
  //# sourceMappingURL=UiListbox.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"UiListbox.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiListbox/UiListbox.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAqD,MAAM,OAAO,CAAC;AAU1F,OAAO,EAIH,KAAK,eAAe,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,mBAAmB,EAAE,cAAc,EAAE,EAC3D,KAAK,EAEL,UAAU,EACV,cAAc,EACd,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAO,EACP,kBAAyC,EAEzC,cAAc,EAEd,wBAAmE,EACnE,mBAAyD,EAEzD,kCAAkC,EAClC,mCAAmC,EACnC,mBAA0B,EAC1B,mBAA2B,EAC3B,SAAiB,EAEjB,SAAS,EACT,cAAc,EACjB,EAAE,eAAe,CAAC,mBAAmB,EAAE,cAAc,CAAC,GAAG,SAAS,CAuMlE"}
1
+ {"version":3,"file":"UiListbox.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiListbox/UiListbox.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAqD,MAAM,OAAO,CAAC;AAY1F,OAAO,EAIH,KAAK,eAAe,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,mBAAmB,EAAE,cAAc,EAAE,EAC3D,KAAK,EAAE,QAAQ,EAEf,UAAU,EACV,cAAc,EACd,KAAK,EACL,QAAQ,EACR,SAAS,EACT,QAAQ,EACR,OAAO,EACP,kBAAyC,EAEzC,cAAc,EAEd,wBAAmE,EACnE,mBAAyD,EAEzD,kCAAkC,EAClC,mCAAmC,EACnC,mBAA0B,EAC1B,mBAA2B,EAC3B,SAAiB,EAEjB,SAAS,EACT,cAAc,EACjB,EAAE,eAAe,CAAC,mBAAmB,EAAE,cAAc,CAAC,GAAG,SAAS,CAgNlE"}
@@ -3,6 +3,8 @@ import { jsx as _jsx } from "react/jsx-runtime";
3
3
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
4
4
  import { useAutoupdateRef } from "@gooddata/sdk-ui";
5
5
  import { makeMenuKeyboardNavigation } from "../@utils/keyboardNavigation.js";
6
+ import { MenuDivider } from "../UiMenu/components/MenuDivider.js";
7
+ import { collapseSeparators } from "../UiMenu/itemUtils.js";
6
8
  import { DefaultUiListboxInteractiveItemComponent } from "./defaults/DefaultUiListboxInteractiveItemComponent.js";
7
9
  import { DefaultUiListboxStaticItemComponent } from "./defaults/DefaultUiListboxStaticItemComponent.js";
8
10
  import { firstCharacterSearch } from "./defaults/firstCharacterSearch.js";
@@ -14,7 +16,8 @@ import { b, e } from "./listboxBem.js";
14
16
  *
15
17
  * @internal
16
18
  */
17
- export function UiListbox({ items, dataTestId, itemDataTestId, width, maxWidth, maxHeight, onSelect, onClose, onUnhandledKeyDown = firstCharacterSearch, selectedItemId, InteractiveItemComponent = DefaultUiListboxInteractiveItemComponent, StaticItemComponent = DefaultUiListboxStaticItemComponent, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, shouldCloseOnSelect = true, isDisabledFocusable = false, isCompact = false, reference, ariaAttributes, }) {
19
+ export function UiListbox({ items: rawItems, dataTestId, itemDataTestId, width, maxWidth, maxHeight, onSelect, onClose, onUnhandledKeyDown = firstCharacterSearch, selectedItemId, InteractiveItemComponent = DefaultUiListboxInteractiveItemComponent, StaticItemComponent = DefaultUiListboxStaticItemComponent, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, shouldCloseOnSelect = true, isDisabledFocusable = false, isCompact = false, reference, ariaAttributes, }) {
20
+ const items = useMemo(() => collapseSeparators(rawItems), [rawItems]);
18
21
  const isItemFocusable = useCallback((item) => {
19
22
  if (item?.type !== "interactive") {
20
23
  return false;
@@ -127,7 +130,11 @@ export function UiListbox({ items, dataTestId, itemDataTestId, width, maxWidth,
127
130
  shouldKeyboardActionStopPropagation,
128
131
  ]);
129
132
  return (_jsx("div", { className: b(), style: { width, maxWidth, maxHeight }, "data-testid": dataTestId, children: _jsx("ul", { className: e("items"), ref: reference, tabIndex: 0, onKeyDown: handleKeyDown, "aria-activedescendant": makeItemId(ariaAttributes.id, focusedItem), ...ariaAttributes, role: "listbox", children: items.map((item, index) => {
130
- const testId = typeof itemDataTestId === "function" ? itemDataTestId(item) : itemDataTestId;
133
+ const testId = item.type === "separator"
134
+ ? undefined
135
+ : typeof itemDataTestId === "function"
136
+ ? itemDataTestId(item)
137
+ : itemDataTestId;
131
138
  return item.type === "interactive" ? (_jsx("li", { ref: (el) => {
132
139
  itemRefs.current[index] = el;
133
140
  }, id: makeItemId(ariaAttributes.id, item), role: "option", "aria-selected": item.id === selectedItemId, "aria-disabled": item.isDisabled, "data-testid": testId, "aria-controls": ariaAttributes["aria-controls"], children: _jsx(InteractiveItemComponent, { onSelect: (e) => {
@@ -136,12 +143,12 @@ export function UiListbox({ items, dataTestId, itemDataTestId, width, maxWidth,
136
143
  newTab: e.ctrlKey || e.metaKey || e.button === 1,
137
144
  });
138
145
  }, item: item, isFocused: index === focusedIndex, isSelected: item.id === selectedItemId, isCompact: isCompact }) }, item.id)) : (
139
- // Static items (separators, headers) are presentational; `role="presentation"`
146
+ // Static and separator items are presentational; `role="presentation"`
140
147
  // keeps the <li> out of the a11y tree so it isn't exposed as a `listitem`,
141
148
  // which is an invalid child of `role="listbox"` (only `option`/`group` allowed).
142
149
  _jsx("li", { ref: (el) => {
143
150
  itemRefs.current[index] = el;
144
- }, role: "presentation", "data-testid": testId, children: _jsx(StaticItemComponent, { item: item }) }, item.id ?? index));
151
+ }, role: "presentation", "data-testid": testId, children: item.type === "separator" ? (_jsx(MenuDivider, {})) : (_jsx(StaticItemComponent, { item: item })) }, item.id ?? index));
145
152
  }) }) }));
146
153
  }
147
154
  const makeItemId = (listboxId, item) => item?.type === "interactive" ? `item-${listboxId}-${item.id}` : undefined;
@@ -1,16 +1,5 @@
1
1
  import { type ReactNode } from "react";
2
2
  import { type IUiListboxStaticItemProps } from "../types.js";
3
- /**
4
- * @internal
5
- */
6
- export declare const separatorStaticItem: {
7
- data: import("react/jsx-runtime").JSX.Element;
8
- type: "static";
9
- };
10
- /**
11
- * @internal
12
- */
13
- export declare function isSeparator(item: unknown): item is typeof separatorStaticItem;
14
3
  /**
15
4
  * By default just renders the data.
16
5
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultUiListboxStaticItemComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D;;GAEG;AACH,eAAO,MAAM,mBAAmB;;;CAG/B,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,OAAO,mBAAmB,CAE7E;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,SAAS,CAExG"}
1
+ {"version":3,"file":"DefaultUiListboxStaticItemComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D;;;GAGG;AACH,wBAAgB,mCAAmC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC,CAAC,GAAG,SAAS,CAExG"}
@@ -1,18 +1,4 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Separator } from "../../../List/MenuList.js";
3
- /**
4
- * @internal
5
- */
6
- export const separatorStaticItem = {
7
- data: _jsx(Separator, {}),
8
- type: "static",
9
- };
10
- /**
11
- * @internal
12
- */
13
- export function isSeparator(item) {
14
- return item === separatorStaticItem;
15
- }
1
+ // (C) 2025-2026 GoodData Corporation
16
2
  /**
17
3
  * By default just renders the data.
18
4
  * @internal
@@ -1,6 +1,7 @@
1
1
  import { type ComponentType, type Dispatch, type KeyboardEvent, type MouseEvent, type MutableRefObject, type ReactNode, type RefObject, type SetStateAction } from "react";
2
2
  import { type IDropdownBodyRenderProps } from "../../Dropdown/Dropdown.js";
3
3
  import { type IconType } from "../@types/icon.js";
4
+ import { type IUiMenuSeparatorItem } from "../UiMenu/types.js";
4
5
  /**
5
6
  * @internal
6
7
  */
@@ -24,7 +25,11 @@ export interface IUiListboxInteractiveItem<T> {
24
25
  /**
25
26
  * @internal
26
27
  */
27
- export type IUiListboxItem<InteractiveItemData, StaticItemData = ReactNode> = IUiListboxStaticItem<StaticItemData> | IUiListboxInteractiveItem<InteractiveItemData>;
28
+ export type IUiListboxSeparatorItem = IUiMenuSeparatorItem;
29
+ /**
30
+ * @internal
31
+ */
32
+ export type IUiListboxItem<InteractiveItemData, StaticItemData = ReactNode> = IUiListboxStaticItem<StaticItemData> | IUiListboxSeparatorItem | IUiListboxInteractiveItem<InteractiveItemData>;
28
33
  /**
29
34
  * @internal
30
35
  */
@@ -69,7 +74,7 @@ export type UiListboxAriaAttributes = Omit<IDropdownBodyRenderProps["ariaAttribu
69
74
  export interface IUiListboxProps<InteractiveItemData, StaticItemData = ReactNode> {
70
75
  items: IUiListboxItem<InteractiveItemData, StaticItemData>[];
71
76
  dataTestId?: string;
72
- itemDataTestId?: string | ((item: IUiListboxItem<InteractiveItemData, StaticItemData>) => string | undefined);
77
+ itemDataTestId?: string | ((item: IUiListboxStaticItem<StaticItemData> | IUiListboxInteractiveItem<InteractiveItemData>) => string | undefined);
73
78
  width?: number;
74
79
  maxWidth?: number;
75
80
  maxHeight?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiListbox/types.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACtB,MAAM,OAAO,CAAC;AAEf,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAC3E,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACnC,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,CAAC,CAAC;CACX;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,CAAC;IACxC,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC;IACR,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,CAAC,mBAAmB,EAAE,cAAc,GAAG,SAAS,IACpE,oBAAoB,CAAC,cAAc,CAAC,GACpC,yBAAyB,CAAC,mBAAmB,CAAC,CAAC;AAErD;;GAEG;AACH,MAAM,WAAW,8BAA8B,CAAC,CAAC;IAC7C,IAAI,EAAE,yBAAyB,CAAC,CAAC,CAAC,CAAC;IAEnC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IAEnB,QAAQ,EAAE,CAAC,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;CACrC;AAED;;GAEG;AACH,MAAM,WAAW,yBAAyB,CAAC,CAAC;IACxC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB,CAAC,mBAAmB,EAAE,cAAc,GAAG,SAAS;IAC9E,KAAK,EAAE,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC,EAAE,CAAC;IAC7D,QAAQ,EAAE,gBAAgB,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,QAAQ,EAAE,CACN,IAAI,EAAE,yBAAyB,CAAC,mBAAmB,CAAC,EACpD,IAAI,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAA;KAAE,KACtD,IAAI,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,QAAQ,CAAC,cAAc,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC;IAC9D,eAAe,EAAE,CAAC,IAAI,EAAE,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC,KAAK,OAAO,CAAC;CAC3F;AAED;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC,GAAG;IAC7F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,mBAAmB,EAAE,cAAc,GAAG,SAAS;IAC5E,KAAK,EAAE,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC,EAAE,CAAC;IAE7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EACT,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC,CAAC;IAE1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,QAAQ,CAAC,EAAE,CACP,IAAI,EAAE,yBAAyB,CAAC,mBAAmB,CAAC,EACpD,IAAI,EAAE;QACF,IAAI,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;QAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;KACpB,KACA,IAAI,CAAC;IACV,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kBAAkB,CAAC,EAAE,CACjB,KAAK,EAAE,aAAa,EACpB,OAAO,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,cAAc,CAAC,KAC9D,IAAI,CAAC;IAEV,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,wBAAwB,CAAC,EAAE,aAAa,CAAC,8BAA8B,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC9F,mBAAmB,CAAC,EAAE,aAAa,CAAC,yBAAyB,CAAC,cAAc,CAAC,CAAC,CAAC;IAE/E,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,mCAAmC,CAAC,EAAE,OAAO,CAAC;IAC9C,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,cAAc,EAAE,uBAAuB,CAAC;IAExC,SAAS,CAAC,EAAE,SAAS,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAAC;CAClD"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiListbox/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/components/Item.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,eAAO,MAAM,IAAI,gEAsBf,CAAC"}
1
+ {"version":3,"file":"Item.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/components/Item.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAIpD,eAAO,MAAM,IAAI,gEA6Bf,CAAC"}
@@ -2,6 +2,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  // (C) 2025-2026 GoodData Corporation
3
3
  import { memo } from "react";
4
4
  import { typedUiMenuContextStore } from "../context.js";
5
+ import { MenuDivider } from "./MenuDivider.js";
5
6
  export const Item = memo(function Item({ item }) {
6
7
  const { InteractiveItemWrapper, StaticItem, GroupItem, ContentItemWrapper } = typedUiMenuContextStore().useContextStoreValues([
7
8
  "InteractiveItemWrapper",
@@ -15,6 +16,9 @@ export const Item = memo(function Item({ item }) {
15
16
  if (item.type === "static") {
16
17
  return _jsx(StaticItem, { item: item });
17
18
  }
19
+ if (item.type === "separator") {
20
+ return (_jsx("li", { role: "separator", children: _jsx(MenuDivider, {}) }));
21
+ }
18
22
  if (item.type === "group") {
19
23
  return _jsx(GroupItem, { item: item });
20
24
  }
@@ -0,0 +1,8 @@
1
+ import { type ReactElement } from "react";
2
+ /**
3
+ * The design-system menu divider visual, shared by every widget that renders separator items.
4
+ *
5
+ * @internal
6
+ */
7
+ export declare function MenuDivider(): ReactElement;
8
+ //# sourceMappingURL=MenuDivider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MenuDivider.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/components/MenuDivider.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C;;;;GAIG;AACH,wBAAgB,WAAW,IAAI,YAAY,CAE1C"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { SeparatorLine } from "../../../SeparatorLine/SeparatorLine.js";
3
+ /**
4
+ * The design-system menu divider visual, shared by every widget that renders separator items.
5
+ *
6
+ * @internal
7
+ */
8
+ export function MenuDivider() {
9
+ return _jsx(SeparatorLine, { pT: 5, pR: 10, pB: 4, pL: 10 });
10
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAElB,KAAK,SAAS,EAKjB,MAAM,OAAO,CAAC;AA8Bf,OAAO,EACH,KAAK,cAAc,EAInB,KAAK,eAAe,EACpB,KAAK,YAAY,EAEpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAChF,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,gBAAgB,EAAE,SAAS,CAAC,WAAW,CAAC,EACxC,iBAAiB,EAAE,SAAS,CAAC,WAAW,CAAC,GAC1C,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAyOtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAC5F,gBAAgB,EAChB,kCAAkC,EAClC,mCAAmC,EACnC,kBAAkB,EACrB,EAAE;IACC,gBAAgB,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,kBAAkB,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7D,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACjD,2CAuGA;AAED,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACzG,gBAAgB,EAChB,kCAAkC,EAClC,mCAAmC,EACnC,kBAAkB,EACrB,EAAE;IACC,gBAAgB,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,kBAAkB,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7D,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACjD,2CAkCA"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.tsx"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,aAAa,EAElB,KAAK,SAAS,EAKjB,MAAM,OAAO,CAAC;AA+Bf,OAAO,EACH,KAAK,cAAc,EAInB,KAAK,eAAe,EACpB,KAAK,YAAY,EAEpB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,CAAC,GAAG,MAAM,EAChF,KAAK,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,gBAAgB,EAAE,SAAS,CAAC,WAAW,CAAC,EACxC,iBAAiB,EAAE,SAAS,CAAC,WAAW,CAAC,GAC1C,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CA2OtB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EAC5F,gBAAgB,EAChB,kCAAkC,EAClC,mCAAmC,EACnC,kBAAkB,EACrB,EAAE;IACC,gBAAgB,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,kBAAkB,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7D,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACjD,2CAuGA;AAED,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,EACzG,gBAAgB,EAChB,kCAAkC,EAClC,mCAAmC,EACnC,kBAAkB,EACrB,EAAE;IACC,gBAAgB,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,kBAAkB,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC7D,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACjD,2CAkCA"}
@@ -11,12 +11,13 @@ import { DefaultUiMenuHeader } from "./components/defaults/DefaultUiMenuHeader.j
11
11
  import { DefaultUiMenuInteractiveItem, DefaultUiMenuInteractiveItemWrapper, } from "./components/defaults/DefaultUiMenuInteractiveItem.js";
12
12
  import { DefaultUiMenuStaticItem } from "./components/defaults/DefaultUiMenuStaticItem.js";
13
13
  import { Item } from "./components/Item.js";
14
- import { getClosestFocusableSibling, getFocusableItem, getItemInteractiveParent, getItemsByInteractiveParent, getSiblingItems, unwrapGroupItems, } from "./itemUtils.js";
14
+ import { getClosestFocusableSibling, getFocusableItem, getItemInteractiveParent, getItemsByInteractiveParent, getSiblingItems, normalizeMenuItems, unwrapGroupItems, } from "./itemUtils.js";
15
15
  /**
16
16
  * @internal
17
17
  */
18
18
  export function useUiMenuContextValue(props, menuComponentRef, itemsContainerRef) {
19
- const { items, size = "medium", itemDataTestId, onSelect, onLeaveLevel, onEnterLevel, onLevelChange, onClose, InteractiveItem: InteractiveItemComponent = DefaultUiMenuInteractiveItem, InteractiveItemWrapper: InteractiveItemWrapperComponent = DefaultUiMenuInteractiveItemWrapper, StaticItem: StaticItemComponent = DefaultUiMenuStaticItem, GroupItem: GroupItemComponent = DefaultUiMenuGroupItem, MenuHeader: MenuHeaderComponent = DefaultUiMenuHeader, ContentItem: ContentItemComponent = DefaultUiMenuContentItem, ContentItemWrapper: ContentItemWrapperComponent = DefaultUiMenuContentItemWrapper, Content: ContentComponent = DefaultUiMenuContent, shouldCloseOnSelect = true, isDisabledFocusable = true, ariaAttributes, menuCtxData, } = props;
19
+ const { items: rawItems, size = "medium", itemDataTestId, onSelect, onLeaveLevel, onEnterLevel, onLevelChange, onClose, InteractiveItem: InteractiveItemComponent = DefaultUiMenuInteractiveItem, InteractiveItemWrapper: InteractiveItemWrapperComponent = DefaultUiMenuInteractiveItemWrapper, StaticItem: StaticItemComponent = DefaultUiMenuStaticItem, GroupItem: GroupItemComponent = DefaultUiMenuGroupItem, MenuHeader: MenuHeaderComponent = DefaultUiMenuHeader, ContentItem: ContentItemComponent = DefaultUiMenuContentItem, ContentItemWrapper: ContentItemWrapperComponent = DefaultUiMenuContentItemWrapper, Content: ContentComponent = DefaultUiMenuContent, shouldCloseOnSelect = true, isDisabledFocusable = true, ariaAttributes, menuCtxData, } = props;
20
+ const items = useMemo(() => normalizeMenuItems(rawItems), [rawItems]);
20
21
  const [controlType, setControlType] = useState("unknown");
21
22
  const isItemFocusable = useCallback((item) => {
22
23
  if (!item || (item.type !== "interactive" && item.type !== "content")) {
@@ -1,4 +1,21 @@
1
1
  import { type IUiMenuContentItem, type IUiMenuFocusableItem, type IUiMenuInteractiveItem, type IUiMenuItem, type IUiMenuItemData } from "./types.js";
2
+ /**
3
+ * Normalizes menu items on every level: collapses dangling separators and drops
4
+ * interactive or group items whose submenu normalizes to empty, so no item renders
5
+ * as an entry point to nothing.
6
+ * @internal
7
+ */
8
+ export declare const normalizeMenuItems: <T extends IUiMenuItemData = object>(items: IUiMenuItem<T>[]) => IUiMenuItem<T>[];
9
+ /**
10
+ * Drops separators that would render dangling: at the start or end of the list, or directly
11
+ * after another separator. Lets callers place separators between groups unconditionally, even
12
+ * when a whole group is filtered out.
13
+ *
14
+ * @internal
15
+ */
16
+ export declare function collapseSeparators<T extends {
17
+ type: string;
18
+ }>(items: T[]): T[];
2
19
  /**
3
20
  * Recursively finds an item in the menu tree that matches the predicate.
4
21
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"itemUtils.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,eAAe,EACvB,MAAM,YAAY,CAAC;AAEpB;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,uIAkBzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,yGAKxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,6JAOpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,qJAOhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,oHAKnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,gHAK/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,+GAKjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,0HAO5C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,oHAyBzC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,2GAUhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,+FAahC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,+FAapC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,CAAC;;;;;gCAsB3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,oBAkB3F"}
1
+ {"version":3,"file":"itemUtils.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,WAAW,EAChB,KAAK,eAAe,EACvB,MAAM,YAAY,CAAC;AAEpB;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,+EAYnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAa9E;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,uIAkBzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,CAAC,yGAKxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,6JAOpC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,qJAOhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,oHAKnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,CAAC,gHAK/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,+GAKjC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,2BAA2B,GAAI,CAAC,0HAO5C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,CAAC,oHA0BzC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,2GAUhC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,+FAahC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,+FAapC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,CAAC;;;;;gCAsB3C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,oBAkB3F"}
@@ -1,4 +1,40 @@
1
- // (C) 2025 GoodData Corporation
1
+ // (C) 2025-2026 GoodData Corporation
2
+ /**
3
+ * Normalizes menu items on every level: collapses dangling separators and drops
4
+ * interactive or group items whose submenu normalizes to empty, so no item renders
5
+ * as an entry point to nothing.
6
+ * @internal
7
+ */
8
+ export const normalizeMenuItems = (items) => {
9
+ return collapseSeparators(items.flatMap((item) => {
10
+ if ((item.type === "interactive" || item.type === "group") && item.subItems !== undefined) {
11
+ const subItems = normalizeMenuItems(item.subItems);
12
+ return subItems.length === 0 ? [] : [{ ...item, subItems }];
13
+ }
14
+ return [item];
15
+ }));
16
+ };
17
+ /**
18
+ * Drops separators that would render dangling: at the start or end of the list, or directly
19
+ * after another separator. Lets callers place separators between groups unconditionally, even
20
+ * when a whole group is filtered out.
21
+ *
22
+ * @internal
23
+ */
24
+ export function collapseSeparators(items) {
25
+ const result = [];
26
+ for (const item of items) {
27
+ const previous = result[result.length - 1];
28
+ if (item.type === "separator" && (previous === undefined || previous.type === "separator")) {
29
+ continue;
30
+ }
31
+ result.push(item);
32
+ }
33
+ if (result[result.length - 1]?.type === "separator") {
34
+ result.pop();
35
+ }
36
+ return result;
37
+ }
2
38
  /**
3
39
  * Recursively finds an item in the menu tree that matches the predicate.
4
40
  * @internal
@@ -76,6 +112,7 @@ export const getItemsByInteractiveParent = (items, parentId) => {
76
112
  export const getItemInteractiveParent = (items, itemId) => {
77
113
  const parent = findItem(items, (item) => {
78
114
  if (item.type === "static" ||
115
+ item.type === "separator" ||
79
116
  (item.type === "interactive" && item.subItems === undefined) ||
80
117
  item.type === "content") {
81
118
  return false;
@@ -15,6 +15,16 @@ export type IUiMenuStaticItem<T extends IUiMenuItemData = object> = {
15
15
  id?: string;
16
16
  data: T["static"];
17
17
  };
18
+ /**
19
+ * Renders as the design-system menu divider. Dangling separators (leading, trailing, or adjacent
20
+ * after conditional items drop out) are collapsed automatically.
21
+ *
22
+ * @internal
23
+ */
24
+ export type IUiMenuSeparatorItem = {
25
+ type: "separator";
26
+ id?: string;
27
+ };
18
28
  /**
19
29
  * @internal
20
30
  */
@@ -62,7 +72,7 @@ export type IUiMenuContentItem<T extends IUiMenuItemData = object> = {
62
72
  /**
63
73
  * @internal
64
74
  */
65
- export type IUiMenuItem<T extends IUiMenuItemData = object> = IUiMenuStaticItem<T> | IUiMenuInteractiveItem<T> | IUiMenuGroupItem<T> | IUiMenuContentItem<T>;
75
+ export type IUiMenuItem<T extends IUiMenuItemData = object> = IUiMenuStaticItem<T> | IUiMenuSeparatorItem | IUiMenuInteractiveItem<T> | IUiMenuGroupItem<T> | IUiMenuContentItem<T>;
66
76
  /**
67
77
  * @internal
68
78
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultUiTabsAllTabs.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiTabs/defaultComponents/DefaultUiTabsAllTabs.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAYlD,OAAO,EAAe,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EAChD,eAAe,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EACxD,MAAM,EAAE,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,kDAoIpE"}
1
+ {"version":3,"file":"DefaultUiTabsAllTabs.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiTabs/defaultComponents/DefaultUiTabsAllTabs.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAalD,OAAO,EAAe,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAErE;;GAEG;AACH,wBAAgB,oBAAoB,CAChC,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EAChD,eAAe,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EACxD,MAAM,EAAE,oBAAoB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,kDAoIpE"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // (C) 2025 GoodData Corporation
2
+ // (C) 2025-2026 GoodData Corporation
3
3
  import { useCallback, useEffect, useState } from "react";
4
4
  import { useMediaQuery } from "../../../responsive/useMediaQuery.js";
5
5
  import { useFocusWithinContainer } from "../../hooks/useFocusWithinContainer.js";
@@ -8,6 +8,7 @@ import { ScopedIdStore, useScopedIdStoreValue } from "../../hooks/useScopedId.js
8
8
  import { UiDropdown } from "../../UiDropdown/UiDropdown.js";
9
9
  import { UiTabsBem } from "../bem.js";
10
10
  import { getTypedUiTabsContextStore } from "../context.js";
11
+ import { hasInteractiveTabActions } from "../itemUtils.js";
11
12
  /**
12
13
  * @internal
13
14
  */
@@ -29,7 +30,7 @@ export function DefaultUiTabsAllTabs(_props) {
29
30
  }, [onTabSelect]);
30
31
  const { onKeyboardNavigation, focusedItem, focusedAction, setFocusedIndex, setFocusedAction } = useListWithActionsKeyboardNavigation({
31
32
  items: tabs,
32
- getItemAdditionalActions: (item) => ((item.actions ?? []).length ? ["selectTabActions"] : []),
33
+ getItemAdditionalActions: (item) => (hasInteractiveTabActions(item) ? ["selectTabActions"] : []),
33
34
  actionHandlers: {
34
35
  selectItem: handleDropdownSelect,
35
36
  selectTabActions: () => undefined,
@@ -93,7 +94,7 @@ function TabListItem({ item, index, focusedAction, onApply, }) {
93
94
  "select-item": focusedAction === SELECT_ITEM_ACTION,
94
95
  "actions-open": isActionsOpen,
95
96
  }), role: "row", "aria-rowindex": index + 1, "aria-labelledby": makeId?.({ item, specifier: SELECT_ITEM_ACTION }), tabIndex: -1, id: makeId?.({ item, specifier: "container" }), children: [
96
- _jsx("div", { className: UiTabsBem.e("tab-list-item-value"), onClick: onApply, role: "gridcell", children: _jsx("div", { role: "button", tabIndex: isSelected ? 0 : -1, id: makeId?.({ item, specifier: SELECT_ITEM_ACTION }), className: UiTabsBem.e("tab-list-item-value-button"), "aria-label": item.label, children: _jsx(TabValue, { tab: item, isSelected: isSelected, location: "allList" }) }) }), (item.actions ?? []).length ? (_jsx("div", { className: UiTabsBem.e("tab-list-item-actions", {
97
+ _jsx("div", { className: UiTabsBem.e("tab-list-item-value"), onClick: onApply, role: "gridcell", children: _jsx("div", { role: "button", tabIndex: isSelected ? 0 : -1, id: makeId?.({ item, specifier: SELECT_ITEM_ACTION }), className: UiTabsBem.e("tab-list-item-value-button"), "aria-label": item.label, children: _jsx(TabValue, { tab: item, isSelected: isSelected, location: "allList" }) }) }), hasInteractiveTabActions(item) ? (_jsx("div", { className: UiTabsBem.e("tab-list-item-actions", {
97
98
  focused: isFocused,
98
99
  }), role: "gridcell", id: makeId?.({ item, specifier: "actions" }), children: _jsx(TabActions, { tab: item, location: "allList", tabIndex: -1, id: makeId?.({ item, specifier: "selectTabActions" }), isOpen: isActionsOpen, onToggleOpen: handleToggleActionsOpen }) })) : null] }));
99
100
  }
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- // (C) 2025 GoodData Corporation
2
+ // (C) 2025-2026 GoodData Corporation
3
3
  import { useCallback, useMemo } from "react";
4
4
  import { useScopedId } from "../../hooks/useScopedId.js";
5
5
  import { UiDropdown } from "../../UiDropdown/UiDropdown.js";
6
- import { isSeparator } from "../../UiListbox/defaults/DefaultUiListboxStaticItemComponent.js";
7
6
  import { UiMenu } from "../../UiMenu/UiMenu.js";
8
7
  import { UiTabsBem } from "../bem.js";
9
8
  import { getTypedUiTabsContextStore } from "../context.js";
9
+ import { hasInteractiveTabActions, isSeparatorAction } from "../itemUtils.js";
10
10
  /**
11
11
  * @internal
12
12
  */
@@ -19,7 +19,7 @@ export function DefaultUiTabsTabActions({ tab, location, id, tabIndex, isOpen, o
19
19
  const tabElementId = useScopedId(tab, "tab-scroll-target");
20
20
  const tabActionsId = useScopedId(tab, "actions");
21
21
  const menuItems = useMemo(() => tab.actions?.map((action) => {
22
- return isSeparator(action)
22
+ return isSeparatorAction(action)
23
23
  ? action
24
24
  : {
25
25
  type: "interactive",
@@ -67,7 +67,7 @@ export function DefaultUiTabsTabActions({ tab, location, id, tabIndex, isOpen, o
67
67
  item.data.onSelect?.({ tab });
68
68
  }, [tab]);
69
69
  const itemDataTestId = useCallback((item) => item.type === "interactive" ? item.data.dataTestId : undefined, []);
70
- if (menuItems.length === 0) {
70
+ if (!hasInteractiveTabActions(tab)) {
71
71
  return null;
72
72
  }
73
73
  return (_jsx("div", { className: UiTabsBem.e("actions-wrapper", { location }), children: _jsx(UiDropdown, { renderButton: ({ toggleDropdown, isOpen, ariaAttributes }) => (_jsx(TabActionsButton, { tab: tab, isOpen: isOpen, location: location, onClick: toggleDropdown, ariaAttributes: ariaAttributes, id: id, tabIndex: tabIndex })), renderBody: ({ ariaAttributes, closeDropdown }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"DefaultUiTabsTabActionsButton.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiTabs/defaultComponents/DefaultUiTabsTabActionsButton.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAMlD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,wBAAgB,6BAA6B,CACzC,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EAChD,eAAe,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EACxD,EACE,GAAG,EACH,OAAO,EACP,cAAc,EACd,QAAQ,EACR,EAAE,EACL,EAAE,oBAAoB,CAAC,kBAAkB,EAAE,SAAS,EAAE,eAAe,CAAC,kDA4BtE"}
1
+ {"version":3,"file":"DefaultUiTabsTabActionsButton.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiTabs/defaultComponents/DefaultUiTabsTabActionsButton.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAOlD,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,wBAAgB,6BAA6B,CACzC,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EAChD,eAAe,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,WAAW,EACxD,EACE,GAAG,EACH,OAAO,EACP,cAAc,EACd,QAAQ,EACR,EAAE,EACL,EAAE,oBAAoB,CAAC,kBAAkB,EAAE,SAAS,EAAE,eAAe,CAAC,kDA4BtE"}
@@ -4,6 +4,7 @@ import { useIntl } from "react-intl";
4
4
  import { UiIcon } from "../../UiIcon/UiIcon.js";
5
5
  import { UiLink } from "../../UiLink/UiLink.js";
6
6
  import { getTypedUiTabsContextStore } from "../context.js";
7
+ import { hasInteractiveTabActions } from "../itemUtils.js";
7
8
  import { messages } from "../messages.js";
8
9
  /**
9
10
  * @internal
@@ -12,7 +13,7 @@ export function DefaultUiTabsTabActionsButton({ tab, onClick, ariaAttributes, ta
12
13
  const intl = useIntl();
13
14
  const store = getTypedUiTabsContextStore();
14
15
  const { size } = store.useContextStoreValues(["size"]);
15
- if ((tab.actions ?? []).length === 0) {
16
+ if (!hasInteractiveTabActions(tab)) {
16
17
  return null;
17
18
  }
18
19
  return (_jsx(UiLink, { variant: "secondary", role: "button", "aria-label": intl.formatMessage(messages["actions"]), ...ariaAttributes, onClick: onClick, tabIndex: tabIndex, id: id, dataTestId: "s-tab-actions", children: _jsx(UiIcon, { type: "ellipsisVertical", size: size === "large" ? 18 : 14, layout: "block", color: "complementary-5" }) }));
@@ -0,0 +1,11 @@
1
+ import { type IUiMenuSeparatorItem } from "../UiMenu/types.js";
2
+ import { type IUiTab, type IUiTabAction } from "./types.js";
3
+ /**
4
+ * @internal
5
+ */
6
+ export declare function isSeparatorAction<TTabProps extends Record<any, any>, TTabActionProps extends Record<any, any>>(action: IUiTabAction<TTabProps, TTabActionProps> | IUiMenuSeparatorItem): action is IUiMenuSeparatorItem;
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare function hasInteractiveTabActions<TTabProps extends Record<any, any>, TTabActionProps extends Record<any, any>>(tab: IUiTab<TTabProps, TTabActionProps>): boolean;
11
+ //# sourceMappingURL=itemUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"itemUtils.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTabs/itemUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D;;GAEG;AACH,wBAAgB,iBAAiB,CAC7B,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAClC,eAAe,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1C,MAAM,EAAE,YAAY,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,oBAAoB,GAAG,MAAM,IAAI,oBAAoB,CAEzG;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACpC,SAAS,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAClC,eAAe,SAAS,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,EAC1C,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,GAAG,OAAO,CAElD"}
@@ -0,0 +1,13 @@
1
+ // (C) 2025-2026 GoodData Corporation
2
+ /**
3
+ * @internal
4
+ */
5
+ export function isSeparatorAction(action) {
6
+ return "type" in action && action.type === "separator";
7
+ }
8
+ /**
9
+ * @internal
10
+ */
11
+ export function hasInteractiveTabActions(tab) {
12
+ return (tab.actions ?? []).some((action) => !isSeparatorAction(action));
13
+ }
@@ -3,7 +3,7 @@ import { type EmptyObject } from "@gooddata/util";
3
3
  import { type IDropdownButtonRenderProps } from "../../Dropdown/Dropdown.js";
4
4
  import { type IAccessibilityConfigBase } from "../../typings/accessibility.js";
5
5
  import { type SizeLarge, type SizeMedium, type SizeSmall } from "../@types/size.js";
6
- import { type separatorStaticItem } from "../UiListbox/defaults/DefaultUiListboxStaticItemComponent.js";
6
+ import { type IUiMenuSeparatorItem } from "../UiMenu/types.js";
7
7
  /**
8
8
  * @internal
9
9
  */
@@ -57,7 +57,7 @@ export type IUiTab<TTabProps extends Record<any, any> = EmptyObject, TTabActionP
57
57
  * When provided, used instead of `label` for the `aria-label` attribute.
58
58
  */
59
59
  ariaLabel?: string;
60
- actions?: Array<IUiTabAction<TTabProps, TTabActionProps> | typeof separatorStaticItem>;
60
+ actions?: Array<IUiTabAction<TTabProps, TTabActionProps> | IUiMenuSeparatorItem>;
61
61
  } & TTabProps;
62
62
  /**
63
63
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTabs/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiTabs/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditableLabel.d.ts","sourceRoot":"","sources":["../../src/EditableLabel/EditableLabel.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOxD;;GAEG;AACH,eAAO,MAAM,aAAa,gHA0VxB,CAAC"}
1
+ {"version":3,"file":"EditableLabel.d.ts","sourceRoot":"","sources":["../../src/EditableLabel/EditableLabel.tsx"],"names":[],"mappings":"AAwBA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAOxD;;GAEG;AACH,eAAO,MAAM,aAAa,gHA8VxB,CAAC"}
@@ -142,6 +142,10 @@ export const EditableLabel = forwardRef((props, ref) => {
142
142
  // Measure the hidden span to compute dynamic textarea width before paint
143
143
  useLayoutEffect(() => {
144
144
  if (isEditableLabelWidthDynamic && isEditing && measureSpanRef.current) {
145
+ /**
146
+ * NOTE: In the future consider using `field-sizing: content` to automatically adjust size when typing. This CSS property
147
+ * is only 2026 baseline so as of this writing, the current solution is kept for backward browser compatibility.
148
+ */
145
149
  const width = Math.ceil(measureSpanRef.current.getBoundingClientRect().width) + 2;
146
150
  setDynamicWidth(width);
147
151
  }