@gooddata/sdk-ui-kit 10.27.0-alpha.2 → 10.27.0-alpha.21
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/esm/@ui/@utils/keyboardNavigation.d.ts +23 -12
- package/esm/@ui/@utils/keyboardNavigation.d.ts.map +1 -1
- package/esm/@ui/@utils/keyboardNavigation.js +58 -16
- package/esm/@ui/@utils/keyboardNavigation.js.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts +9 -0
- package/esm/@ui/UiFocusTrap/UiFocusTrap.d.ts.map +1 -1
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js +82 -71
- package/esm/@ui/UiFocusTrap/UiFocusTrap.js.map +1 -1
- package/esm/@ui/UiListbox/UiListbox.d.ts.map +1 -1
- package/esm/@ui/UiListbox/UiListbox.js +1 -3
- package/esm/@ui/UiListbox/UiListbox.js.map +1 -1
- package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.d.ts +5 -2
- package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.d.ts.map +1 -1
- package/esm/@ui/UiListbox/defaults/DefaultUiListboxStaticItemComponent.js.map +1 -1
- package/esm/@ui/UiListbox/defaults/firstCharacterSearch.d.ts +2 -2
- package/esm/@ui/UiListbox/defaults/firstCharacterSearch.d.ts.map +1 -1
- package/esm/@ui/UiListbox/defaults/firstCharacterSearch.js +1 -1
- package/esm/@ui/UiListbox/defaults/firstCharacterSearch.js.map +1 -1
- package/esm/@ui/UiListbox/types.d.ts +4 -4
- package/esm/@ui/UiListbox/types.d.ts.map +1 -1
- package/esm/@ui/UiMenu/UiMenu.d.ts +11 -0
- package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -0
- package/esm/@ui/UiMenu/UiMenu.js +94 -0
- package/esm/@ui/UiMenu/UiMenu.js.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts +9 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js +23 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts +7 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js +16 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts +8 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js +9 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js.map +1 -0
- package/esm/@ui/UiMenu/hooks.d.ts +16 -0
- package/esm/@ui/UiMenu/hooks.d.ts.map +1 -0
- package/esm/@ui/UiMenu/hooks.js +87 -0
- package/esm/@ui/UiMenu/hooks.js.map +1 -0
- package/esm/@ui/UiMenu/itemUtils.d.ts +17 -0
- package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -0
- package/esm/@ui/UiMenu/itemUtils.js +73 -0
- package/esm/@ui/UiMenu/itemUtils.js.map +1 -0
- package/esm/@ui/UiMenu/menuBem.d.ts +2 -0
- package/esm/@ui/UiMenu/menuBem.d.ts.map +1 -0
- package/esm/@ui/UiMenu/menuBem.js +4 -0
- package/esm/@ui/UiMenu/menuBem.js.map +1 -0
- package/esm/@ui/UiMenu/types.d.ts +86 -0
- package/esm/@ui/UiMenu/types.d.ts.map +1 -0
- package/esm/@ui/UiMenu/types.js +3 -0
- package/esm/@ui/UiMenu/types.js.map +1 -0
- package/esm/Dialog/ConfirmDialogBase.d.ts.map +1 -1
- package/esm/Dialog/ConfirmDialogBase.js +1 -1
- package/esm/Dialog/ConfirmDialogBase.js.map +1 -1
- package/esm/Dialog/DialogBase.d.ts.map +1 -1
- package/esm/Dialog/DialogBase.js +2 -2
- package/esm/Dialog/DialogBase.js.map +1 -1
- package/esm/Dialog/DialogCloseButton.d.ts +1 -1
- package/esm/Dialog/DialogCloseButton.d.ts.map +1 -1
- package/esm/Dialog/DialogCloseButton.js +11 -2
- package/esm/Dialog/DialogCloseButton.js.map +1 -1
- package/esm/Dialog/ExportDialogBase.d.ts.map +1 -1
- package/esm/Dialog/ExportDialogBase.js +8 -3
- package/esm/Dialog/ExportDialogBase.js.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.d.ts.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.js +1 -5
- package/esm/Dialog/ShareDialog/ShareDialogBase/AddGranteeBase.js.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/GranteeItem.js +2 -2
- package/esm/Dialog/ShareDialog/ShareDialogBase/GranteeItem.js.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.d.ts.map +1 -1
- package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.js +1 -5
- package/esm/Dialog/ShareDialog/ShareDialogBase/ShareGranteeBase.js.map +1 -1
- package/esm/Dialog/typings.d.ts +1 -0
- package/esm/Dialog/typings.d.ts.map +1 -1
- package/esm/Form/Checkbox.d.ts +1 -0
- package/esm/Form/Checkbox.d.ts.map +1 -1
- package/esm/Form/Checkbox.js +3 -3
- package/esm/Form/Checkbox.js.map +1 -1
- package/esm/Header/Header.d.ts.map +1 -1
- package/esm/Header/Header.js +1 -1
- package/esm/Header/Header.js.map +1 -1
- package/esm/Header/HeaderAccount.d.ts.map +1 -1
- package/esm/Header/HeaderAccount.js +2 -3
- package/esm/Header/HeaderAccount.js.map +1 -1
- package/esm/Header/HeaderChatButton.d.ts +2 -0
- package/esm/Header/HeaderChatButton.d.ts.map +1 -1
- package/esm/Header/HeaderChatButton.js +3 -3
- package/esm/Header/HeaderChatButton.js.map +1 -1
- package/esm/Header/HeaderHelp.d.ts.map +1 -1
- package/esm/Header/HeaderHelp.js +2 -3
- package/esm/Header/HeaderHelp.js.map +1 -1
- package/esm/Header/HeaderSearchButton.d.ts.map +1 -1
- package/esm/Header/HeaderSearchButton.js +2 -3
- package/esm/Header/HeaderSearchButton.js.map +1 -1
- package/esm/List/ListItem.d.ts +8 -21
- package/esm/List/ListItem.d.ts.map +1 -1
- package/esm/List/ListItem.js +69 -70
- package/esm/List/ListItem.js.map +1 -1
- package/esm/List/MenuList.d.ts +3 -0
- package/esm/List/MenuList.d.ts.map +1 -1
- package/esm/List/MenuList.js +3 -3
- package/esm/List/MenuList.js.map +1 -1
- package/esm/List/index.d.ts +1 -1
- package/esm/List/index.d.ts.map +1 -1
- package/esm/List/index.js.map +1 -1
- package/esm/RecurrenceForm/DateTime.js +2 -2
- package/esm/RecurrenceForm/DateTime.js.map +1 -1
- package/esm/RecurrenceForm/Recurrence.js +3 -3
- package/esm/RecurrenceForm/Recurrence.js.map +1 -1
- package/esm/index.d.ts +8 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +5 -0
- package/esm/index.js.map +1 -1
- package/esm/sdk-ui-kit.d.ts +201 -38
- package/esm/typings/accessibility.d.ts +17 -0
- package/esm/typings/accessibility.d.ts.map +1 -1
- package/esm/typings/accessibility.js +1 -1
- package/esm/typings/accessibility.js.map +1 -1
- package/esm/utils/domUtilities.d.ts +11 -0
- package/esm/utils/domUtilities.d.ts.map +1 -1
- package/esm/utils/domUtilities.js +29 -0
- package/esm/utils/domUtilities.js.map +1 -1
- package/esm/utils/useId.d.ts +6 -0
- package/esm/utils/useId.d.ts.map +1 -1
- package/esm/utils/useId.js +9 -0
- package/esm/utils/useId.js.map +1 -1
- package/package.json +10 -9
- package/src/@ui/UiMenu/UiMenu.scss +115 -0
- package/src/@ui/index.scss +1 -0
- package/styles/css/dialog.css +3 -2
- package/styles/css/dialog.css.map +1 -1
- package/styles/css/list.css +7 -0
- package/styles/css/list.css.map +1 -1
- package/styles/css/main.css +105 -2
- package/styles/css/main.css.map +1 -1
- package/styles/css/menu.css +7 -0
- package/styles/css/menu.css.map +1 -1
- package/styles/scss/dialog.scss +3 -2
- package/styles/scss/list.scss +7 -0
@@ -0,0 +1,94 @@
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
2
|
+
import React from "react";
|
3
|
+
import cx from "classnames";
|
4
|
+
import { b, e } from "./menuBem.js";
|
5
|
+
import { useAutoupdateRef } from "@gooddata/sdk-ui";
|
6
|
+
import { DefaultUiMenuInteractiveItemComponent } from "./defaults/DefaultUiMenuInteractiveItemComponent.js";
|
7
|
+
import { DefaultUiMenuStaticItemComponent } from "./defaults/DefaultUiMenuStaticItemComponent.js";
|
8
|
+
import { getInteractiveItem, getItemParent, getItemsByParent, getSiblingItems } from "./itemUtils.js";
|
9
|
+
import { DefaultUiMenuHeaderComponent } from "./defaults/DefaultUiMenuHeaderComponent.js";
|
10
|
+
import { useItemRefs, useKeyNavigation } from "./hooks.js";
|
11
|
+
/**
|
12
|
+
* An accessible menu component that can be navigated by keyboard.
|
13
|
+
* Usable in a <Dropdown /> component.
|
14
|
+
* Should implement https://www.w3.org/WAI/ARIA/apg/patterns/menubar/
|
15
|
+
*
|
16
|
+
* @internal
|
17
|
+
*/
|
18
|
+
export function UiMenu({ items, className, itemClassName, maxWidth, onSelect, onClose, onUnhandledKeyDown, InteractiveItemComponent = DefaultUiMenuInteractiveItemComponent, StaticItemComponent = DefaultUiMenuStaticItemComponent, MenuHeaderComponent = DefaultUiMenuHeaderComponent, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, shouldCloseOnSelect = true, isDisabledFocusable = true, ariaAttributes, }) {
|
19
|
+
const [controlType, setControlType] = React.useState("unknown");
|
20
|
+
const menuComponentRef = React.useRef(null);
|
21
|
+
const isItemFocusable = React.useCallback((item) => {
|
22
|
+
if (!item || item.type !== "interactive") {
|
23
|
+
return false;
|
24
|
+
}
|
25
|
+
return isDisabledFocusable || !item.isDisabled;
|
26
|
+
}, [isDisabledFocusable]);
|
27
|
+
const [focusedId, setFocusedId_internal] = React.useState(() => items.find(isItemFocusable)?.id);
|
28
|
+
const setFocusedId = React.useCallback((...args) => {
|
29
|
+
setFocusedId_internal(...args);
|
30
|
+
// Focus is lost when clicking on an item that opens a submenu. We need to refocus the menu.
|
31
|
+
menuComponentRef.current?.focus();
|
32
|
+
}, []);
|
33
|
+
const focusedItem = focusedId === undefined ? undefined : getInteractiveItem(items, focusedId);
|
34
|
+
const { itemsContainerRef, itemRefs, setItemRef } = useItemRefs(focusedId);
|
35
|
+
const handleSelectItem = React.useCallback((item) => {
|
36
|
+
if (!item || item.isDisabled) {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
// If there is no subMenu, select the item
|
40
|
+
if (!item.subMenu) {
|
41
|
+
onSelect?.(item);
|
42
|
+
shouldCloseOnSelect && onClose?.();
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
// Otherwise focus the first focusable child
|
46
|
+
const itemToFocus = getItemsByParent(items, item.id)?.filter(isItemFocusable)[0];
|
47
|
+
if (!itemToFocus) {
|
48
|
+
return;
|
49
|
+
}
|
50
|
+
setFocusedId(itemToFocus.id);
|
51
|
+
menuComponentRef.current?.focus();
|
52
|
+
}, [isItemFocusable, items, onClose, onSelect, setFocusedId, shouldCloseOnSelect]);
|
53
|
+
const handleFocusItemByMouse = React.useCallback((id) => () => {
|
54
|
+
if (controlType !== "mouse") {
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
setFocusedId(id);
|
58
|
+
}, [controlType, setFocusedId]);
|
59
|
+
const context = {
|
60
|
+
itemRefs,
|
61
|
+
focusedId,
|
62
|
+
items,
|
63
|
+
focusedItem,
|
64
|
+
onClose,
|
65
|
+
onSelect: handleSelectItem,
|
66
|
+
setFocusedId,
|
67
|
+
isItemFocusable,
|
68
|
+
};
|
69
|
+
const contextRef = useAutoupdateRef(context);
|
70
|
+
const handleKeyDown = useKeyNavigation({
|
71
|
+
menuContextRef: contextRef,
|
72
|
+
onUnhandledKeyDown,
|
73
|
+
shouldKeyboardActionPreventDefault,
|
74
|
+
shouldKeyboardActionStopPropagation,
|
75
|
+
});
|
76
|
+
const currentMenuLevelItems = React.useMemo(() => (focusedId === undefined ? [] : getSiblingItems(items, focusedId) ?? []), [items, focusedId]);
|
77
|
+
const parentItem = focusedId === undefined ? undefined : getItemParent(items, focusedId);
|
78
|
+
const handleBack = React.useCallback(() => {
|
79
|
+
if (!parentItem) {
|
80
|
+
return;
|
81
|
+
}
|
82
|
+
setFocusedId(parentItem.id);
|
83
|
+
}, [parentItem, setFocusedId]);
|
84
|
+
return (React.createElement("div", { className: cx(b(), b({ controlType }), className), style: { maxWidth }, onKeyDownCapture: () => setControlType("keyboard"), onMouseMoveCapture: () => setControlType("mouse") },
|
85
|
+
React.createElement(MenuHeaderComponent, { onBack: handleBack, onClose: onClose, parentItem: parentItem }),
|
86
|
+
React.createElement("div", { className: e("items-container"), ref: itemsContainerRef },
|
87
|
+
React.createElement("menu", { className: e("items"), tabIndex: 0, onKeyDown: handleKeyDown, "aria-activedescendant": makeItemId(ariaAttributes.id, focusedItem), ...ariaAttributes, role: "menu", ref: menuComponentRef }, currentMenuLevelItems.map((item, index) => item.type === "interactive" ? (React.createElement("li", { key: item.id, ref: setItemRef(item.id), role: "menuitem", "aria-haspopup": item.subMenu ? "menu" : undefined, "aria-disabled": item.isDisabled, onMouseMove: handleFocusItemByMouse(item.id), tabIndex: -1, id: makeItemId(ariaAttributes.id, item), className: typeof itemClassName === "function" ? itemClassName(item) : itemClassName },
|
88
|
+
React.createElement(InteractiveItemComponent, { onSelect: () => {
|
89
|
+
handleSelectItem(item);
|
90
|
+
}, item: item, isFocused: item.id === focusedId }))) : (React.createElement("li", { role: "none", key: item.id ?? index, className: typeof itemClassName === "function" ? itemClassName(item) : itemClassName },
|
91
|
+
React.createElement(StaticItemComponent, { item: item }))))))));
|
92
|
+
}
|
93
|
+
const makeItemId = (listboxId, item) => item && item.type === "interactive" ? `item-${listboxId}-${item.id}` : undefined;
|
94
|
+
//# sourceMappingURL=UiMenu.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"UiMenu.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/UiMenu.tsx"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { UiMenuHeaderProps } from "../types.js";
|
3
|
+
/**
|
4
|
+
* Renders the submenu header when in a submenu.
|
5
|
+
* If not in a submenu, returns null.
|
6
|
+
* @internal
|
7
|
+
*/
|
8
|
+
export declare function DefaultUiMenuHeaderComponent<InteractiveItemData, StaticItemData>({ onBack, onClose, parentItem, }: UiMenuHeaderProps<InteractiveItemData, StaticItemData>): React.ReactNode;
|
9
|
+
//# sourceMappingURL=DefaultUiMenuHeaderComponent.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuHeaderComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKhD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAAC,mBAAmB,EAAE,cAAc,EAAE,EAC9E,MAAM,EACN,OAAO,EACP,UAAU,GACb,EAAE,iBAAiB,CAAC,mBAAmB,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,SAAS,CAgC1E"}
|
@@ -0,0 +1,23 @@
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
2
|
+
import React from "react";
|
3
|
+
import { e } from "../menuBem.js";
|
4
|
+
import { UiIconButton } from "../../UiIconButton/UiIconButton.js";
|
5
|
+
import { useIntl } from "react-intl";
|
6
|
+
import { ShortenedText } from "../../../ShortenedText/index.js";
|
7
|
+
/**
|
8
|
+
* Renders the submenu header when in a submenu.
|
9
|
+
* If not in a submenu, returns null.
|
10
|
+
* @internal
|
11
|
+
*/
|
12
|
+
export function DefaultUiMenuHeaderComponent({ onBack, onClose, parentItem, }) {
|
13
|
+
const { formatMessage } = useIntl();
|
14
|
+
if (!parentItem) {
|
15
|
+
return null;
|
16
|
+
}
|
17
|
+
return (React.createElement("div", { role: "presentation", className: e("menu-header") },
|
18
|
+
React.createElement("button", { onClick: onBack, className: e("menu-header-title"), "aria-label": formatMessage({ id: "menu.back" }) },
|
19
|
+
React.createElement("i", { className: "gd-icon-navigateleft" }),
|
20
|
+
React.createElement(ShortenedText, { tagName: "h3", ellipsisPosition: "end", className: e("menu-header-title-text") }, parentItem.stringTitle)),
|
21
|
+
React.createElement(UiIconButton, { size: "small", variant: "tertiary", icon: "close", label: formatMessage({ id: "menu.close" }), onClick: onClose })));
|
22
|
+
}
|
23
|
+
//# sourceMappingURL=DefaultUiMenuHeaderComponent.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuHeaderComponent.js","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAElC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE;;;;GAIG;AACH,MAAM,UAAU,4BAA4B,CAAsC,EAC9E,MAAM,EACN,OAAO,EACP,UAAU,GAC2C;IACrD,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,IAAI,CAAC,UAAU,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO,CACH,6BAAK,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC;QAClD,gCACI,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,CAAC,CAAC,mBAAmB,CAAC,gBACrB,aAAa,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;YAE9C,2BAAG,SAAS,EAAC,sBAAsB,GAAG;YACtC,oBAAC,aAAa,IACV,OAAO,EAAE,IAAI,EACb,gBAAgB,EAAE,KAAK,EACvB,SAAS,EAAE,CAAC,CAAC,wBAAwB,CAAC,IAErC,UAAU,CAAC,WAAW,CACX,CACX;QACT,oBAAC,YAAY,IACT,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,UAAU,EACnB,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,aAAa,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,CAAC,EAC1C,OAAO,EAAE,OAAO,GAClB,CACA,CACT,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { UiMenuInteractiveItemProps } from "../types.js";
|
3
|
+
/**
|
4
|
+
* @internal
|
5
|
+
*/
|
6
|
+
export declare function DefaultUiMenuInteractiveItemComponent<InteractiveItemData, StaticItemData>({ item, isFocused, onSelect, }: UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData>): React.ReactNode;
|
7
|
+
//# sourceMappingURL=DefaultUiMenuInteractiveItemComponent.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuInteractiveItemComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAC;AAEzD;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,mBAAmB,EAAE,cAAc,EAAE,EACvF,IAAI,EACJ,SAAS,EACT,QAAQ,GACX,EAAE,0BAA0B,CAAC,mBAAmB,EAAE,cAAc,CAAC,GAAG,KAAK,CAAC,SAAS,CAgBnF"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
2
|
+
import React from "react";
|
3
|
+
import { e } from "../menuBem.js";
|
4
|
+
import { ShortenedText } from "../../../ShortenedText/index.js";
|
5
|
+
/**
|
6
|
+
* @internal
|
7
|
+
*/
|
8
|
+
export function DefaultUiMenuInteractiveItemComponent({ item, isFocused, onSelect, }) {
|
9
|
+
return (React.createElement("div", { className: e("item", {
|
10
|
+
isFocused,
|
11
|
+
isDisabled: !!item.isDisabled,
|
12
|
+
}), onClick: item.isDisabled ? undefined : onSelect },
|
13
|
+
React.createElement(ShortenedText, { className: e("item-title"), ellipsisPosition: "end" }, item.stringTitle),
|
14
|
+
!!item.subMenu && React.createElement("i", { className: "gd-icon-navigateright" })));
|
15
|
+
}
|
16
|
+
//# sourceMappingURL=DefaultUiMenuInteractiveItemComponent.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuInteractiveItemComponent.js","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,CAAC,EAAE,MAAM,eAAe,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAGhE;;GAEG;AACH,MAAM,UAAU,qCAAqC,CAAsC,EACvF,IAAI,EACJ,SAAS,EACT,QAAQ,GACsD;IAC9D,OAAO,CACH,6BACI,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;YACjB,SAAS;YACT,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU;SAChC,CAAC,EACF,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;QAE/C,oBAAC,aAAa,IAAC,SAAS,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,gBAAgB,EAAE,KAAK,IAC7D,IAAI,CAAC,WAAW,CACL;QAEf,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,2BAAG,SAAS,EAAC,uBAAuB,GAAG,CACxD,CACT,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { UiMenuStaticItemProps } from "../types.js";
|
3
|
+
/**
|
4
|
+
* By default just renders the data.
|
5
|
+
* @internal
|
6
|
+
*/
|
7
|
+
export declare function DefaultUiMenuStaticItemComponent<T>({ item }: UiMenuStaticItemProps<T>): React.ReactNode;
|
8
|
+
//# sourceMappingURL=DefaultUiMenuStaticItemComponent.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuStaticItemComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;GAGG;AACH,wBAAgB,gCAAgC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAEvG"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuStaticItemComponent.js","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAKhC;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAAI,EAAE,IAAI,EAA4B;IAClF,OAAO,IAAI,CAAC,IAAuB,CAAC;AACxC,CAAC"}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { IUiMenuContext, UiMenuProps } from "./types.js";
|
3
|
+
export declare function useItemRefs(focusedId: string | undefined): {
|
4
|
+
itemRefs: React.MutableRefObject<{
|
5
|
+
[id: string]: HTMLElement;
|
6
|
+
}>;
|
7
|
+
setItemRef: (id: string) => (element: HTMLElement | null) => void;
|
8
|
+
itemsContainerRef: React.MutableRefObject<HTMLElement>;
|
9
|
+
};
|
10
|
+
export declare function useKeyNavigation<InteractiveItemData, StaticItemData>({ menuContextRef, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, onUnhandledKeyDown, }: {
|
11
|
+
menuContextRef: React.MutableRefObject<IUiMenuContext<InteractiveItemData, StaticItemData>>;
|
12
|
+
onUnhandledKeyDown: UiMenuProps<InteractiveItemData, StaticItemData>["onUnhandledKeyDown"];
|
13
|
+
shouldKeyboardActionPreventDefault?: boolean;
|
14
|
+
shouldKeyboardActionStopPropagation?: boolean;
|
15
|
+
}): (event: React.KeyboardEvent<Element>) => void;
|
16
|
+
//# sourceMappingURL=hooks.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS;;;;qBAK5C,MAAM,eAAe,WAAW,GAAG,IAAI;;EAoBnD;AAED,wBAAgB,gBAAgB,CAAC,mBAAmB,EAAE,cAAc,EAAE,EAClE,cAAc,EACd,kCAAkC,EAClC,mCAAmC,EACnC,kBAAkB,GACrB,EAAE;IACC,cAAc,EAAE,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,CAAC;IAC5F,kBAAkB,EAAE,WAAW,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC,oBAAoB,CAAC,CAAC;IAC3F,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACjD,iDA+EA"}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
// (C) 2022-2025 GoodData Corporation
|
2
|
+
import React from "react";
|
3
|
+
import { makeMenuKeyboardNavigation } from "../@utils/keyboardNavigation.js";
|
4
|
+
import { getClosestFocusableSibling, getItemParent, getSiblingItems } from "./itemUtils.js";
|
5
|
+
export function useItemRefs(focusedId) {
|
6
|
+
const itemsContainerRef = React.useRef(null);
|
7
|
+
const itemRefs = React.useRef({});
|
8
|
+
const setItemRef = React.useCallback((id) => (element) => {
|
9
|
+
if (!element) {
|
10
|
+
delete itemRefs.current[id];
|
11
|
+
return;
|
12
|
+
}
|
13
|
+
if (focusedId === id &&
|
14
|
+
itemsContainerRef.current &&
|
15
|
+
itemsContainerRef.current.scrollHeight > itemsContainerRef.current.clientHeight) {
|
16
|
+
element.scrollIntoView({ block: "nearest", behavior: "smooth" });
|
17
|
+
}
|
18
|
+
itemRefs.current[id] = element;
|
19
|
+
}, [focusedId]);
|
20
|
+
return { itemRefs, setItemRef, itemsContainerRef };
|
21
|
+
}
|
22
|
+
export function useKeyNavigation({ menuContextRef, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, onUnhandledKeyDown, }) {
|
23
|
+
return makeMenuKeyboardNavigation({
|
24
|
+
shouldPreventDefault: shouldKeyboardActionPreventDefault,
|
25
|
+
shouldStopPropagation: shouldKeyboardActionStopPropagation,
|
26
|
+
onFocusPrevious: () => {
|
27
|
+
const { setFocusedId, items, isItemFocusable } = menuContextRef.current;
|
28
|
+
setFocusedId((prevId) => getClosestFocusableSibling({
|
29
|
+
direction: "backward",
|
30
|
+
itemId: prevId,
|
31
|
+
items,
|
32
|
+
isItemFocusable,
|
33
|
+
})?.id ?? prevId);
|
34
|
+
},
|
35
|
+
onFocusNext: () => {
|
36
|
+
const { setFocusedId, items, isItemFocusable } = menuContextRef.current;
|
37
|
+
setFocusedId((prevId) => getClosestFocusableSibling({
|
38
|
+
direction: "forward",
|
39
|
+
itemId: prevId,
|
40
|
+
items,
|
41
|
+
isItemFocusable,
|
42
|
+
})?.id ?? prevId);
|
43
|
+
},
|
44
|
+
onFocusFirst: () => {
|
45
|
+
const { items, isItemFocusable, setFocusedId } = menuContextRef.current;
|
46
|
+
setFocusedId((prevId) => {
|
47
|
+
if (prevId === undefined) {
|
48
|
+
return items.find(isItemFocusable)?.id;
|
49
|
+
}
|
50
|
+
return getSiblingItems(items, prevId)?.find(isItemFocusable)?.id;
|
51
|
+
});
|
52
|
+
},
|
53
|
+
onFocusLast: () => {
|
54
|
+
const { items, isItemFocusable, setFocusedId } = menuContextRef.current;
|
55
|
+
setFocusedId((prevId) => {
|
56
|
+
if (prevId === undefined) {
|
57
|
+
return [...items].reverse().find(isItemFocusable)?.id;
|
58
|
+
}
|
59
|
+
return [...(getSiblingItems(items, prevId) ?? [])].reverse().find(isItemFocusable)?.id;
|
60
|
+
});
|
61
|
+
},
|
62
|
+
onSelect: () => {
|
63
|
+
const { onSelect, focusedItem } = menuContextRef.current;
|
64
|
+
onSelect(focusedItem);
|
65
|
+
},
|
66
|
+
onEnterLevel: () => {
|
67
|
+
const { onSelect, focusedItem } = menuContextRef.current;
|
68
|
+
onSelect(focusedItem);
|
69
|
+
},
|
70
|
+
onLeaveLevel: () => {
|
71
|
+
const { setFocusedId, items } = menuContextRef.current;
|
72
|
+
setFocusedId((prevId) => {
|
73
|
+
if (prevId === undefined) {
|
74
|
+
return prevId;
|
75
|
+
}
|
76
|
+
return getItemParent(items, prevId)?.id ?? prevId;
|
77
|
+
});
|
78
|
+
},
|
79
|
+
onClose: () => {
|
80
|
+
menuContextRef.current.onClose?.();
|
81
|
+
},
|
82
|
+
onUnhandledKeyDown: (event) => {
|
83
|
+
onUnhandledKeyDown?.(event, menuContextRef.current);
|
84
|
+
},
|
85
|
+
});
|
86
|
+
}
|
87
|
+
//# sourceMappingURL=hooks.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { IUiMenuInteractiveItem, IUiMenuItem } from "./types.js";
|
2
|
+
export declare const findItem: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], predicate: (item: IUiMenuItem<InteractiveItemData, StaticItemData>) => boolean) => IUiMenuItem<InteractiveItemData, StaticItemData>;
|
3
|
+
export declare const getItem: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], itemId: string) => IUiMenuItem<InteractiveItemData, StaticItemData>;
|
4
|
+
export declare const findInteractiveItem: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], predicate: (item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>) => boolean) => IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
|
5
|
+
export declare const getInteractiveItem: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], itemId: string) => IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
|
6
|
+
export declare const getItemsByParent: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], parentId?: string) => IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
7
|
+
export declare const getItemParent: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], itemId: string) => IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
|
8
|
+
export declare const getSiblingItems: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], itemId: string) => IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
9
|
+
export declare const getNextSiblings: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], itemId: string) => IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
10
|
+
export declare const getPreviousSiblings: <InteractiveItemData, StaticItemData>(items: IUiMenuItem<InteractiveItemData, StaticItemData>[], itemId: string) => IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
11
|
+
export declare const getClosestFocusableSibling: <InteractiveItemData, StaticItemData>(args: {
|
12
|
+
items: IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
13
|
+
isItemFocusable: (item: IUiMenuItem<InteractiveItemData, StaticItemData>) => boolean;
|
14
|
+
itemId?: string;
|
15
|
+
direction: "forward" | "backward";
|
16
|
+
}) => IUiMenuItem<InteractiveItemData, StaticItemData>;
|
17
|
+
//# sourceMappingURL=itemUtils.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"itemUtils.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,sBAAsB,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEjE,eAAO,MAAM,QAAQ,0KAEsD,OAAO,qDAgBjF,CAAC;AAEF,eAAO,MAAM,OAAO,2GAER,MAAM,qDAGjB,CAAC;AAEF,eAAO,MAAM,mBAAmB,qLAEsD,OAAO,gEAK5F,CAAC;AAEF,eAAO,MAAM,kBAAkB,2GAEnB,MAAM,gEAGjB,CAAC;AAEF,eAAO,MAAM,gBAAgB,8GAEd,MAAM,uDAKpB,CAAC;AAEF,eAAO,MAAM,aAAa,2GAEd,MAAM,gEAMjB,CAAC;AAEF,eAAO,MAAM,eAAe,2GAEhB,MAAM,uDAQjB,CAAC;AAEF,eAAO,MAAM,eAAe,2GAEhB,MAAM,uDAWjB,CAAC;AAEF,eAAO,MAAM,mBAAmB,2GAEpB,MAAM,uDAWjB,CAAC;AAEF,eAAO,MAAM,0BAA0B;;iFAE0C,OAAO;aAC3E,MAAM;eACJ,SAAS,GAAG,UAAU;sDAgBpC,CAAC"}
|
@@ -0,0 +1,73 @@
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
2
|
+
export const findItem = (items, predicate) => {
|
3
|
+
for (const item of items) {
|
4
|
+
if (predicate(item)) {
|
5
|
+
return item;
|
6
|
+
}
|
7
|
+
if (item.type === "interactive" && item.subMenu) {
|
8
|
+
const foundItemInSubMenu = findItem(item.subMenu, predicate);
|
9
|
+
if (foundItemInSubMenu) {
|
10
|
+
return foundItemInSubMenu;
|
11
|
+
}
|
12
|
+
}
|
13
|
+
}
|
14
|
+
return undefined;
|
15
|
+
};
|
16
|
+
export const getItem = (items, itemId) => {
|
17
|
+
return findItem(items, (item) => item.id === itemId);
|
18
|
+
};
|
19
|
+
export const findInteractiveItem = (items, predicate) => {
|
20
|
+
const foundItem = findItem(items, (item) => item.type === "interactive" && predicate(item));
|
21
|
+
return foundItem?.type === "interactive" ? foundItem : undefined;
|
22
|
+
};
|
23
|
+
export const getInteractiveItem = (items, itemId) => {
|
24
|
+
return findInteractiveItem(items, (item) => item.id === itemId);
|
25
|
+
};
|
26
|
+
export const getItemsByParent = (items, parentId) => {
|
27
|
+
const isRootLevel = parentId === undefined;
|
28
|
+
return isRootLevel ? items : findInteractiveItem(items, (item) => item.id === parentId)?.subMenu;
|
29
|
+
};
|
30
|
+
export const getItemParent = (items, itemId) => {
|
31
|
+
return findInteractiveItem(items, (item) => !!item.subMenu?.some((subMenuItem) => subMenuItem.id === itemId));
|
32
|
+
};
|
33
|
+
export const getSiblingItems = (items, itemId) => {
|
34
|
+
// If itemId is provided but the item doesn't exist, return undefined
|
35
|
+
if (!getItem(items, itemId)) {
|
36
|
+
return undefined;
|
37
|
+
}
|
38
|
+
return getItemsByParent(items, getItemParent(items, itemId)?.id);
|
39
|
+
};
|
40
|
+
export const getNextSiblings = (items, itemId) => {
|
41
|
+
const siblingItems = getSiblingItems(items, itemId);
|
42
|
+
const itemIndex = siblingItems?.findIndex((item) => item.id === itemId) ?? -1;
|
43
|
+
if (itemIndex === -1 || !siblingItems) {
|
44
|
+
return [];
|
45
|
+
}
|
46
|
+
// Wraparound
|
47
|
+
return [...siblingItems.slice(itemIndex + 1), ...siblingItems.slice(0, itemIndex)];
|
48
|
+
};
|
49
|
+
export const getPreviousSiblings = (items, itemId) => {
|
50
|
+
const siblingItems = getSiblingItems(items, itemId);
|
51
|
+
const itemIndex = siblingItems?.findIndex((item) => item.id === itemId) ?? -1;
|
52
|
+
if (itemIndex === -1 || !siblingItems) {
|
53
|
+
return [];
|
54
|
+
}
|
55
|
+
// Wraparound
|
56
|
+
return [...siblingItems.slice(0, itemIndex).reverse(), ...siblingItems.slice(itemIndex + 1).reverse()];
|
57
|
+
};
|
58
|
+
export const getClosestFocusableSibling = (args) => {
|
59
|
+
const { items, isItemFocusable, itemId, direction } = args;
|
60
|
+
switch (direction) {
|
61
|
+
case "forward":
|
62
|
+
if (itemId === undefined) {
|
63
|
+
return items.find(isItemFocusable);
|
64
|
+
}
|
65
|
+
return getNextSiblings(items, itemId).find(isItemFocusable);
|
66
|
+
case "backward":
|
67
|
+
if (itemId === undefined) {
|
68
|
+
return [...items].reverse().find(isItemFocusable);
|
69
|
+
}
|
70
|
+
return getPreviousSiblings(items, itemId).find(isItemFocusable);
|
71
|
+
}
|
72
|
+
};
|
73
|
+
//# sourceMappingURL=itemUtils.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"itemUtils.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/itemUtils.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"menuBem.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/menuBem.ts"],"names":[],"mappings":"AAGA,eAAO,MAAQ,CAAC,6DAAE,CAAC,4EAA0B,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"menuBem.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/menuBem.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAEvC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,gBAAgB,CAAC,CAAC"}
|
@@ -0,0 +1,86 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { IDropdownBodyRenderProps } from "../../Dropdown/index.js";
|
3
|
+
/**
|
4
|
+
* @internal
|
5
|
+
*/
|
6
|
+
export interface IUiMenuStaticItem<T> {
|
7
|
+
type: "static";
|
8
|
+
id?: string;
|
9
|
+
data: T;
|
10
|
+
}
|
11
|
+
/**
|
12
|
+
* @internal
|
13
|
+
*/
|
14
|
+
export interface IUiMenuInteractiveItem<InteractiveItemData, StaticItemData = React.ReactNode> {
|
15
|
+
type: "interactive";
|
16
|
+
id: string;
|
17
|
+
stringTitle: string;
|
18
|
+
isDisabled?: boolean;
|
19
|
+
data: InteractiveItemData;
|
20
|
+
subMenu?: IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
21
|
+
}
|
22
|
+
/**
|
23
|
+
* @internal
|
24
|
+
*/
|
25
|
+
export type IUiMenuItem<InteractiveItemData, StaticItemData = React.ReactNode> = IUiMenuStaticItem<StaticItemData> | IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
|
26
|
+
/**
|
27
|
+
* @internal
|
28
|
+
*/
|
29
|
+
export interface UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData = React.ReactNode> {
|
30
|
+
item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
|
31
|
+
isFocused: boolean;
|
32
|
+
onSelect: () => void;
|
33
|
+
}
|
34
|
+
/**
|
35
|
+
* @internal
|
36
|
+
*/
|
37
|
+
export interface UiMenuStaticItemProps<T> {
|
38
|
+
item: IUiMenuStaticItem<T>;
|
39
|
+
}
|
40
|
+
/**
|
41
|
+
* @internal
|
42
|
+
*/
|
43
|
+
export interface UiMenuHeaderProps<InteractiveItemData, StaticItemData = React.ReactNode> {
|
44
|
+
onBack?: () => void;
|
45
|
+
onClose?: () => void;
|
46
|
+
parentItem?: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>;
|
47
|
+
}
|
48
|
+
/**
|
49
|
+
* @internal
|
50
|
+
*/
|
51
|
+
export type ControlType = "keyboard" | "mouse" | "unknown";
|
52
|
+
/**
|
53
|
+
* @internal
|
54
|
+
*/
|
55
|
+
export interface IUiMenuContext<InteractiveItemData, StaticItemData = React.ReactNode> {
|
56
|
+
items: IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
57
|
+
focusedItem: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData> | undefined;
|
58
|
+
itemRefs: React.MutableRefObject<{
|
59
|
+
[id: string]: HTMLElement;
|
60
|
+
}>;
|
61
|
+
onSelect: (item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData> | undefined) => void;
|
62
|
+
onClose?: () => void;
|
63
|
+
setFocusedId: React.Dispatch<React.SetStateAction<string | undefined>>;
|
64
|
+
isItemFocusable: (item: IUiMenuItem<InteractiveItemData, StaticItemData>) => boolean;
|
65
|
+
}
|
66
|
+
/**
|
67
|
+
* @internal
|
68
|
+
*/
|
69
|
+
export interface UiMenuProps<InteractiveItemData, StaticItemData = React.ReactNode> {
|
70
|
+
items: IUiMenuItem<InteractiveItemData, StaticItemData>[];
|
71
|
+
className?: string;
|
72
|
+
itemClassName?: ((item: IUiMenuItem<InteractiveItemData, StaticItemData>) => string | undefined) | string;
|
73
|
+
maxWidth?: number;
|
74
|
+
onSelect?: (item: IUiMenuInteractiveItem<InteractiveItemData, StaticItemData>) => void;
|
75
|
+
onClose?: () => void;
|
76
|
+
onUnhandledKeyDown?: (event: React.KeyboardEvent, context: IUiMenuContext<InteractiveItemData, StaticItemData>) => void;
|
77
|
+
InteractiveItemComponent?: React.ComponentType<UiMenuInteractiveItemProps<InteractiveItemData, StaticItemData>>;
|
78
|
+
StaticItemComponent?: React.ComponentType<UiMenuStaticItemProps<StaticItemData>>;
|
79
|
+
MenuHeaderComponent?: React.ComponentType<UiMenuHeaderProps<InteractiveItemData, StaticItemData>>;
|
80
|
+
shouldKeyboardActionPreventDefault?: boolean;
|
81
|
+
shouldKeyboardActionStopPropagation?: boolean;
|
82
|
+
shouldCloseOnSelect?: boolean;
|
83
|
+
isDisabledFocusable?: boolean;
|
84
|
+
ariaAttributes: Omit<IDropdownBodyRenderProps["ariaAttributes"], "role">;
|
85
|
+
}
|
86
|
+
//# sourceMappingURL=types.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/types.ts"],"names":[],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/types.ts"],"names":[],"mappings":"AAAA,gCAAgC"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ConfirmDialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAMvD;;GAEG;AACH,eAAO,MAAM,iBAAiB,
|
1
|
+
{"version":3,"file":"ConfirmDialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAMvD;;GAEG;AACH,eAAO,MAAM,iBAAiB,qDA6G5B,CAAC"}
|
@@ -31,7 +31,7 @@ export const ConfirmDialogBase = React.memo(function ConfirmDialogBase({ display
|
|
31
31
|
isModal: true,
|
32
32
|
};
|
33
33
|
}, [dialogBaseProps.accessibilityConfig, headline, titleElementIdWhenNotSet]);
|
34
|
-
return (React.createElement(DialogBase, { ...dialogBaseProps, className: dialogClasses, displayCloseButton: displayCloseButton, accessibilityConfig: accessibilityConfig, initialFocus: initialFocus, returnFocusTo: returnFocusTo },
|
34
|
+
return (React.createElement(DialogBase, { ...dialogBaseProps, className: dialogClasses, displayCloseButton: displayCloseButton, accessibilityConfig: accessibilityConfig, initialFocus: initialFocus, returnFocusTo: returnFocusTo, returnFocusAfterClose: true },
|
35
35
|
React.createElement("div", { className: "gd-dialog-header-wrapper" },
|
36
36
|
headerLeftButtonRenderer?.(),
|
37
37
|
React.createElement("div", { className: headerClassNames },
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"ConfirmDialogBase.js","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,OAAO,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAExD;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAA0B,SAAS,iBAAiB,CAAC,EAC5F,kBAAkB,GAAG,IAAI,EACzB,gBAAgB,GAAG,KAAK,EACxB,gBAAgB,EAChB,UAAU,EACV,QAAQ,EACR,gBAAgB,EAChB,gBAAgB,EAChB,uBAAuB,EACvB,8BAA8B,EAC9B,+BAA+B,EAC/B,OAAO,EACP,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,sBAAsB,EAEtB,GAAG,eAAe,EACrB;IACG,MAAM,aAAa,GAAG,EAAE,CAAC,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC;IAElE,MAAM,mBAAmB,GAAG,EAAE,CAAC;QAC3B,wBAAwB,EAAE,IAAI;QAC9B,kBAAkB,EAAE,UAAU;QAC9B,oBAAoB,EAAE,CAAC,UAAU;KACpC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,EAAE,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,CAAC;IAEvE,MAAM,wBAAwB,GAAG,KAAK,EAAE,CAAC;IACzC,MAAM,mBAAmB,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE;QAC3C,IAAI,cAAc,GAAG,eAAe,CAAC,mBAAmB,EAAE,cAAc,CAAC;QACzE,IAAI,QAAQ,IAAI,CAAC,cAAc,EAAE,CAAC;YAC9B,cAAc,GAAG,wBAAwB,CAAC;QAC9C,CAAC;QAED,OAAO;YACH,GAAG,CAAC,eAAe,CAAC,mBAAmB,IAAI,EAAE,CAAC;YAC9C,cAAc;YACd,OAAO,EAAE,IAAI;SAChB,CAAC;IACN,CAAC,EAAE,CAAC,eAAe,CAAC,mBAAmB,EAAE,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CAAC;IAE9E,OAAO,CACH,oBAAC,UAAU,OACH,eAAe,EACnB,SAAS,EAAE,aAAa,EACxB,kBAAkB,EAAE,kBAAkB,EACtC,mBAAmB,EAAE,mBAAmB,EACxC,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,aAAa;
|
1
|
+
{"version":3,"file":"ConfirmDialogBase.js","sourceRoot":"","sources":["../../src/Dialog/ConfirmDialogBase.tsx"],"names":[],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgBhD;;GAEG;AACH,eAAO,MAAM,UAAU,
|
1
|
+
{"version":3,"file":"DialogBase.d.ts","sourceRoot":"","sources":["../../src/Dialog/DialogBase.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAgBhD;;GAEG;AACH,eAAO,MAAM,UAAU,8CA+DrB,CAAC"}
|
package/esm/Dialog/DialogBase.js
CHANGED
@@ -15,7 +15,7 @@ const checkKeyHandler = (event, key, handler) => {
|
|
15
15
|
/**
|
16
16
|
* @internal
|
17
17
|
*/
|
18
|
-
export const DialogBase = React.memo(function DialogBase({ submitOnEnterKey, onCancel, onSubmit, displayCloseButton, onClose, accessibilityConfig, className, autofocusOnOpen = true, children, CloseButton = DialogCloseButton, initialFocus, returnFocusTo, shouldCloseOnEscape = false, }) {
|
18
|
+
export const DialogBase = React.memo(function DialogBase({ submitOnEnterKey, onCancel, onSubmit, displayCloseButton, onClose, accessibilityConfig, className, autofocusOnOpen = true, children, CloseButton = DialogCloseButton, initialFocus, returnFocusTo, shouldCloseOnEscape = false, returnFocusAfterClose = false, }) {
|
19
19
|
const handleKeyDown = React.useCallback((event) => {
|
20
20
|
// don't call onSubmit when pressing enter key on input fields
|
21
21
|
const isEnterKeyDownOnInputField = event.key === "Enter" && isElementTextInput(event.target);
|
@@ -29,7 +29,7 @@ export const DialogBase = React.memo(function DialogBase({ submitOnEnterKey, onC
|
|
29
29
|
checkKeyHandler(event, "Escape", shouldCloseOnEscape ? onClose : onCancel);
|
30
30
|
}, [onCancel, onSubmit, onClose, submitOnEnterKey, shouldCloseOnEscape]);
|
31
31
|
const dialogClasses = cx("overlay", "gd-dialog", className);
|
32
|
-
return (React.createElement(UiFocusTrap, { initialFocus: initialFocus, returnFocusTo: returnFocusTo, autofocusOnOpen: autofocusOnOpen },
|
32
|
+
return (React.createElement(UiFocusTrap, { initialFocus: initialFocus, returnFocusTo: returnFocusTo, autofocusOnOpen: autofocusOnOpen, returnFocusOnUnmount: returnFocusAfterClose },
|
33
33
|
React.createElement("div", { onKeyDown: handleKeyDown, role: "dialog", "aria-modal": accessibilityConfig?.isModal, "aria-labelledby": accessibilityConfig?.titleElementId, "aria-describedby": accessibilityConfig?.descriptionElementId },
|
34
34
|
React.createElement("div", { className: dialogClasses },
|
35
35
|
displayCloseButton ? (React.createElement(CloseButton, { onClose: onClose ?? onCancel, accessibilityConfig: accessibilityConfig })) : null,
|