@gooddata/sdk-ui-kit 10.27.0-alpha.23 → 10.27.0-alpha.24
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/UiMenu/UiMenu.d.ts +2 -2
- package/esm/@ui/UiMenu/UiMenu.d.ts.map +1 -1
- package/esm/@ui/UiMenu/UiMenu.js +16 -74
- package/esm/@ui/UiMenu/UiMenu.js.map +1 -1
- package/esm/@ui/UiMenu/context.d.ts +11 -0
- package/esm/@ui/UiMenu/context.d.ts.map +1 -0
- package/esm/@ui/UiMenu/context.js +11 -0
- package/esm/@ui/UiMenu/context.js.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts +7 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.d.ts.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.js +21 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.js.map +1 -0
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts +2 -2
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.d.ts.map +1 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js +19 -3
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.js.map +1 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts +6 -2
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.d.ts.map +1 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js +45 -2
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.js.map +1 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts +2 -2
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.d.ts.map +1 -1
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js +8 -3
- package/esm/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.js.map +1 -1
- package/esm/@ui/UiMenu/hooks.d.ts +11 -11
- package/esm/@ui/UiMenu/hooks.d.ts.map +1 -1
- package/esm/@ui/UiMenu/hooks.js +101 -15
- package/esm/@ui/UiMenu/hooks.js.map +1 -1
- package/esm/@ui/UiMenu/itemUtils.d.ts +15 -14
- package/esm/@ui/UiMenu/itemUtils.d.ts.map +1 -1
- package/esm/@ui/UiMenu/itemUtils.js +39 -11
- package/esm/@ui/UiMenu/itemUtils.js.map +1 -1
- package/esm/@ui/UiMenu/types.d.ts +70 -32
- package/esm/@ui/UiMenu/types.d.ts.map +1 -1
- package/esm/index.d.ts +1 -1
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js.map +1 -1
- package/esm/sdk-ui-kit.d.ts +82 -34
- package/package.json +8 -8
- package/src/@ui/UiListbox/UiListbox.scss +2 -4
- package/src/@ui/UiMenu/UiMenu.scss +23 -7
- package/styles/css/main.css +23 -7
- package/styles/css/main.css.map +1 -1
- package/styles/scss/mixins.scss +6 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
import React from "react";
|
2
|
-
import { UiMenuProps } from "./types.js";
|
2
|
+
import { IUiMenuItemData, UiMenuProps } from "./types.js";
|
3
3
|
/**
|
4
4
|
* An accessible menu component that can be navigated by keyboard.
|
5
5
|
* Usable in a <Dropdown /> component.
|
@@ -7,5 +7,5 @@ import { UiMenuProps } from "./types.js";
|
|
7
7
|
*
|
8
8
|
* @internal
|
9
9
|
*/
|
10
|
-
export declare function UiMenu<
|
10
|
+
export declare function UiMenu<T extends IUiMenuItemData = object>(props: UiMenuProps<T>): React.ReactNode;
|
11
11
|
//# sourceMappingURL=UiMenu.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"UiMenu.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/UiMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"UiMenu.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/UiMenu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAK1D;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAsEjG"}
|
package/esm/@ui/UiMenu/UiMenu.js
CHANGED
@@ -2,12 +2,9 @@
|
|
2
2
|
import React from "react";
|
3
3
|
import cx from "classnames";
|
4
4
|
import { b, e } from "./menuBem.js";
|
5
|
-
import {
|
6
|
-
import {
|
7
|
-
import {
|
8
|
-
import { getInteractiveItem, getItemParent, getItemsByParent, getSiblingItems } from "./itemUtils.js";
|
9
|
-
import { DefaultUiMenuHeaderComponent } from "./defaults/DefaultUiMenuHeaderComponent.js";
|
10
|
-
import { useItemRefs, useKeyNavigation } from "./hooks.js";
|
5
|
+
import { getSiblingItems } from "./itemUtils.js";
|
6
|
+
import { useKeyNavigation, useUiMenuContextValue } from "./hooks.js";
|
7
|
+
import { typedUiMenuContextStore } from "./context.js";
|
11
8
|
/**
|
12
9
|
* An accessible menu component that can be navigated by keyboard.
|
13
10
|
* Usable in a <Dropdown /> component.
|
@@ -15,80 +12,25 @@ import { useItemRefs, useKeyNavigation } from "./hooks.js";
|
|
15
12
|
*
|
16
13
|
* @internal
|
17
14
|
*/
|
18
|
-
export function UiMenu(
|
19
|
-
const
|
15
|
+
export function UiMenu(props) {
|
16
|
+
const { className, maxWidth, ariaAttributes, onUnhandledKeyDown, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, } = props;
|
20
17
|
const menuComponentRef = React.useRef(null);
|
21
|
-
const
|
22
|
-
|
23
|
-
|
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);
|
18
|
+
const itemsContainerRef = React.useRef(null);
|
19
|
+
const UiMenuContextStore = typedUiMenuContextStore();
|
20
|
+
const contextStoreValue = useUiMenuContextValue(props, menuComponentRef, itemsContainerRef);
|
70
21
|
const handleKeyDown = useKeyNavigation({
|
71
|
-
|
22
|
+
menuContextValue: contextStoreValue,
|
72
23
|
onUnhandledKeyDown,
|
73
24
|
shouldKeyboardActionPreventDefault,
|
74
25
|
shouldKeyboardActionStopPropagation,
|
75
26
|
});
|
27
|
+
const { focusedItem, items, controlType, setControlType, MenuHeaderComponent, ItemComponent, makeItemId, } = contextStoreValue;
|
28
|
+
const focusedId = focusedItem?.id;
|
76
29
|
const currentMenuLevelItems = React.useMemo(() => (focusedId === undefined ? [] : getSiblingItems(items, focusedId) ?? []), [items, focusedId]);
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
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 }))))))));
|
30
|
+
return (React.createElement(UiMenuContextStore, { value: contextStoreValue },
|
31
|
+
React.createElement("div", { className: cx(b(), b({ controlType }), className), style: { maxWidth }, onKeyDownCapture: () => setControlType("keyboard"), onMouseMoveCapture: () => setControlType("mouse") },
|
32
|
+
React.createElement(MenuHeaderComponent, null),
|
33
|
+
React.createElement("div", { className: e("items-container"), ref: itemsContainerRef },
|
34
|
+
React.createElement("menu", { className: e("items"), tabIndex: 0, onKeyDown: handleKeyDown, "aria-activedescendant": focusedItem ? makeItemId(focusedItem) : undefined, ...ariaAttributes, role: "menu", ref: menuComponentRef }, currentMenuLevelItems.map((item, index) => (React.createElement(ItemComponent, { key: "id" in item ? item.id : index, item: item }))))))));
|
92
35
|
}
|
93
|
-
const makeItemId = (listboxId, item) => item && item.type === "interactive" ? `item-${listboxId}-${item.id}` : undefined;
|
94
36
|
//# sourceMappingURL=UiMenu.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"UiMenu.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/UiMenu.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;
|
1
|
+
{"version":3,"file":"UiMenu.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/UiMenu.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,cAAc,CAAC;AAEpC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAqC,KAAqB;IAC5E,MAAM,EACF,SAAS,EACT,QAAQ,EACR,cAAc,EACd,kBAAkB,EAClB,kCAAkC,EAClC,mCAAmC,GACtC,GAAG,KAAK,CAAC;IAEV,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,CAAiB,IAAI,CAAC,CAAC;IAE7D,MAAM,kBAAkB,GAAG,uBAAuB,EAAK,CAAC;IACxD,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,CAAC,CAAC;IAE5F,MAAM,aAAa,GAAG,gBAAgB,CAAI;QACtC,gBAAgB,EAAE,iBAAiB;QACnC,kBAAkB;QAClB,kCAAkC;QAClC,mCAAmC;KACtC,CAAC,CAAC;IAEH,MAAM,EACF,WAAW,EACX,KAAK,EACL,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,aAAa,EACb,UAAU,GACb,GAAG,iBAAiB,CAAC;IACtB,MAAM,SAAS,GAAG,WAAW,EAAE,EAAE,CAAC;IAElC,MAAM,qBAAqB,GAAG,KAAK,CAAC,OAAO,CACvC,GAAG,EAAE,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,EAC9E,CAAC,KAAK,EAAE,SAAS,CAAC,CACrB,CAAC;IAEF,OAAO,CACH,oBAAC,kBAAkB,IAAC,KAAK,EAAE,iBAAiB;QACxC,6BACI,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,EACjD,KAAK,EAAE,EAAE,QAAQ,EAAE,EACnB,gBAAgB,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,UAAU,CAAC,EAClD,kBAAkB,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;YAEjD,oBAAC,mBAAmB,OAAG;YAEvB,6BACI,SAAS,EAAE,CAAC,CAAC,iBAAiB,CAAC,EAC/B,GAAG,EAAE,iBAA2D;gBAEhE,8BACI,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EACrB,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,aAAa,2BACD,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS,KACpE,cAAc,EAClB,IAAI,EAAC,MAAM,EACX,GAAG,EAAE,gBAAgB,IAEpB,qBAAqB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACxC,oBAAC,aAAa,IAAC,GAAG,EAAE,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,GAAI,CACrE,CAAC,CACC,CACL,CACJ,CACW,CACxB,CAAC;AACN,CAAC"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
import { IUiMenuContext, IUiMenuItemData } from "./types.js";
|
2
|
+
import { IContextStore } from "@gooddata/sdk-ui";
|
3
|
+
/**
|
4
|
+
* @internal
|
5
|
+
*/
|
6
|
+
export declare const UiMenuContextStore: IContextStore<IUiMenuContext<object>>;
|
7
|
+
/**
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
export declare const typedUiMenuContextStore: <T extends IUiMenuItemData = object>() => IContextStore<IUiMenuContext<T>>;
|
11
|
+
//# sourceMappingURL=context.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/context.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7D,OAAO,EAAsB,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAErE;;GAEG;AACH,eAAO,MAAM,kBAAkB,uCAA+C,CAAC;AAC/E;;GAEG;AACH,eAAO,MAAM,uBAAuB,4EACiC,CAAC"}
|
@@ -0,0 +1,11 @@
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
2
|
+
import { createContextStore } from "@gooddata/sdk-ui";
|
3
|
+
/**
|
4
|
+
* @internal
|
5
|
+
*/
|
6
|
+
export const UiMenuContextStore = createContextStore("UiMenu");
|
7
|
+
/**
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
export const typedUiMenuContextStore = () => UiMenuContextStore;
|
11
|
+
//# sourceMappingURL=context.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/@ui/UiMenu/context.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAGhC,OAAO,EAAE,kBAAkB,EAAiB,MAAM,kBAAkB,CAAC;AAErE;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAiB,QAAQ,CAAC,CAAC;AAC/E;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAuC,EAAE,CAC5E,kBAAiE,CAAC"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
import React from "react";
|
2
|
+
import { IUiMenuItemData, UiMenuGroupItemProps } from "../types.js";
|
3
|
+
/**
|
4
|
+
* @internal
|
5
|
+
*/
|
6
|
+
export declare function DefaultUiMenuGroupItemComponent<T extends IUiMenuItemData = object>({ item, }: UiMenuGroupItemProps<T>): React.ReactNode;
|
7
|
+
//# sourceMappingURL=DefaultUiMenuGroupItemComponent.d.ts.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuGroupItemComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGpE;;GAEG;AACH,wBAAgB,+BAA+B,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EAChF,IAAI,GACP,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAsB3C"}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
// (C) 2025 GoodData Corporation
|
2
|
+
import React from "react";
|
3
|
+
import { e } from "../menuBem.js";
|
4
|
+
import { ShortenedText } from "../../../ShortenedText/index.js";
|
5
|
+
import { typedUiMenuContextStore } from "../context.js";
|
6
|
+
/**
|
7
|
+
* @internal
|
8
|
+
*/
|
9
|
+
export function DefaultUiMenuGroupItemComponent({ item, }) {
|
10
|
+
const { createSelector, useContextStore } = typedUiMenuContextStore();
|
11
|
+
const selector = createSelector((ctx) => ({
|
12
|
+
makeItemId: ctx.makeItemId,
|
13
|
+
ItemComponent: ctx.ItemComponent,
|
14
|
+
}));
|
15
|
+
const { makeItemId, ItemComponent } = useContextStore(selector);
|
16
|
+
return (React.createElement("ul", { className: e("group"), role: "group", "aria-labelledby": makeItemId(item) },
|
17
|
+
React.createElement("li", { className: e("group-title-container"), role: "presentation", id: makeItemId(item) },
|
18
|
+
React.createElement(ShortenedText, { className: e("group-title"), ellipsisPosition: "end" }, item.stringTitle)),
|
19
|
+
item.subItems.map((groupItem, index) => (React.createElement(ItemComponent, { key: "id" in groupItem ? groupItem.id : index, item: groupItem })))));
|
20
|
+
}
|
21
|
+
//# sourceMappingURL=DefaultUiMenuGroupItemComponent.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"DefaultUiMenuGroupItemComponent.js","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuGroupItemComponent.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;AAEhE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD;;GAEG;AACH,MAAM,UAAU,+BAA+B,CAAqC,EAChF,IAAI,GACkB;IACtB,MAAM,EAAE,cAAc,EAAE,eAAe,EAAE,GAAG,uBAAuB,EAAK,CAAC;IACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtC,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,aAAa,EAAE,GAAG,CAAC,aAAa;KACnC,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEhE,OAAO,CACH,4BAAI,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,qBAAmB,UAAU,CAAC,IAAI,CAAC;QACvE,4BAAI,SAAS,EAAE,CAAC,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,UAAU,CAAC,IAAI,CAAC;YACjF,oBAAC,aAAa,IAAC,SAAS,EAAE,CAAC,CAAC,aAAa,CAAC,EAAE,gBAAgB,EAAE,KAAK,IAC9D,IAAI,CAAC,WAAW,CACL,CACf;QAEJ,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC,CACrC,oBAAC,aAAa,IAAC,GAAG,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,GAAI,CACpF,CAAC,CACD,CACR,CAAC;AACN,CAAC"}
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from "react";
|
2
|
-
import {
|
2
|
+
import { IUiMenuItemData } from "../types.js";
|
3
3
|
/**
|
4
4
|
* Renders the submenu header when in a submenu.
|
5
5
|
* If not in a submenu, returns null.
|
6
6
|
* @internal
|
7
7
|
*/
|
8
|
-
export declare
|
8
|
+
export declare const DefaultUiMenuHeaderComponent: React.MemoExoticComponent<(<T extends IUiMenuItemData = object>() => React.ReactNode)>;
|
9
9
|
//# sourceMappingURL=DefaultUiMenuHeaderComponent.d.ts.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DefaultUiMenuHeaderComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"DefaultUiMenuHeaderComponent.d.ts","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuHeaderComponent.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,4BAA4B,uEAEpC,MAAM,SAAS,EAmDlB,CAAC"}
|
@@ -4,20 +4,36 @@ import { e } from "../menuBem.js";
|
|
4
4
|
import { UiIconButton } from "../../UiIconButton/UiIconButton.js";
|
5
5
|
import { useIntl } from "react-intl";
|
6
6
|
import { ShortenedText } from "../../../ShortenedText/index.js";
|
7
|
+
import { typedUiMenuContextStore } from "../context.js";
|
8
|
+
import { getItemInteractiveParent } from "../itemUtils.js";
|
7
9
|
/**
|
8
10
|
* Renders the submenu header when in a submenu.
|
9
11
|
* If not in a submenu, returns null.
|
10
12
|
* @internal
|
11
13
|
*/
|
12
|
-
export
|
14
|
+
export const DefaultUiMenuHeaderComponent = React.memo(function DefaultUiMenuHeaderComponent() {
|
13
15
|
const { formatMessage } = useIntl();
|
16
|
+
const { useContextStore, createSelector } = typedUiMenuContextStore();
|
17
|
+
const selector = createSelector((ctx) => ({
|
18
|
+
setFocusedId: ctx.setFocusedId,
|
19
|
+
onClose: ctx.onClose,
|
20
|
+
parentItem: ctx.focusedItem ? getItemInteractiveParent(ctx.items, ctx.focusedItem.id) : undefined,
|
21
|
+
}));
|
22
|
+
const { setFocusedId, onClose, parentItem } = useContextStore(selector);
|
23
|
+
const parentItemId = parentItem?.id;
|
24
|
+
const handleBack = React.useCallback(() => {
|
25
|
+
if (parentItemId === undefined) {
|
26
|
+
return;
|
27
|
+
}
|
28
|
+
setFocusedId(parentItemId);
|
29
|
+
}, [setFocusedId, parentItemId]);
|
14
30
|
if (!parentItem) {
|
15
31
|
return null;
|
16
32
|
}
|
17
33
|
return (React.createElement("div", { role: "presentation", className: e("menu-header") },
|
18
|
-
React.createElement("button", { onClick:
|
34
|
+
React.createElement("button", { onClick: handleBack, className: e("menu-header-title"), "aria-label": formatMessage({ id: "menu.back" }) },
|
19
35
|
React.createElement("i", { className: "gd-icon-navigateleft" }),
|
20
36
|
React.createElement(ShortenedText, { tagName: "h3", ellipsisPosition: "end", className: e("menu-header-title-text") }, parentItem.stringTitle)),
|
21
37
|
React.createElement(UiIconButton, { size: "small", variant: "tertiary", icon: "close", label: formatMessage({ id: "menu.close" }), onClick: onClose })));
|
22
|
-
}
|
38
|
+
});
|
23
39
|
//# sourceMappingURL=DefaultUiMenuHeaderComponent.js.map
|
@@ -1 +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;
|
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;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAG3D;;;;GAIG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,4BAA4B;IAGxF,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IAEpC,MAAM,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,uBAAuB,EAAK,CAAC;IACzE,MAAM,QAAQ,GAAG,cAAc,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACtC,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,UAAU,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,wBAAwB,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;KACpG,CAAC,CAAC,CAAC;IAEJ,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAExE,MAAM,YAAY,GAAG,UAAU,EAAE,EAAE,CAAC;IAEpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE;QACtC,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;YAC7B,OAAO;QACX,CAAC;QAED,YAAY,CAAC,YAAY,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAEjC,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,UAAU,EACnB,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,CAAC,CAAC"}
|
@@ -1,7 +1,11 @@
|
|
1
1
|
import React from "react";
|
2
|
-
import { UiMenuInteractiveItemProps } from "../types.js";
|
2
|
+
import { IUiMenuItemData, UiMenuInteractiveItemProps, UiMenuInteractiveItemWrapperProps } from "../types.js";
|
3
3
|
/**
|
4
4
|
* @internal
|
5
5
|
*/
|
6
|
-
export declare function
|
6
|
+
export declare function DefaultUiMenuInteractiveItemWrapperComponent<T extends IUiMenuItemData = object>({ item, }: UiMenuInteractiveItemWrapperProps<T>): React.ReactNode;
|
7
|
+
/**
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
export declare function DefaultUiMenuInteractiveItemComponent<T extends IUiMenuItemData = object>({ item, isFocused, onSelect, }: UiMenuInteractiveItemProps<T>): React.ReactNode;
|
7
11
|
//# sourceMappingURL=DefaultUiMenuInteractiveItemComponent.d.ts.map
|
@@ -1 +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;
|
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,eAAe,EAAE,0BAA0B,EAAE,iCAAiC,EAAE,MAAM,aAAa,CAAC;AAI7G;;GAEG;AACH,wBAAgB,4CAA4C,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EAC7F,IAAI,GACP,EAAE,iCAAiC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAqExD;AAED;;GAEG;AACH,wBAAgB,qCAAqC,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EACtF,IAAI,EACJ,SAAS,EACT,QAAQ,GACX,EAAE,0BAA0B,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,CAgBjD"}
|
@@ -2,6 +2,49 @@
|
|
2
2
|
import React from "react";
|
3
3
|
import { e } from "../menuBem.js";
|
4
4
|
import { ShortenedText } from "../../../ShortenedText/index.js";
|
5
|
+
import { typedUiMenuContextStore } from "../context.js";
|
6
|
+
import cx from "classnames";
|
7
|
+
/**
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
export function DefaultUiMenuInteractiveItemWrapperComponent({ item, }) {
|
11
|
+
const { useContextStore, createSelector } = typedUiMenuContextStore();
|
12
|
+
const selector = createSelector((ctx) => ({
|
13
|
+
onSelect: ctx.onSelect,
|
14
|
+
controlType: ctx.controlType,
|
15
|
+
scrollToView: ctx.scrollToView,
|
16
|
+
setFocusedId: ctx.setFocusedId,
|
17
|
+
makeItemId: ctx.makeItemId,
|
18
|
+
itemClassName: ctx.itemClassName,
|
19
|
+
InteractiveItemComponent: ctx.InteractiveItemComponent,
|
20
|
+
isFocused: ctx.focusedItem?.id === item.id,
|
21
|
+
}));
|
22
|
+
const { onSelect, scrollToView, controlType, setFocusedId, makeItemId, itemClassName, InteractiveItemComponent, isFocused, } = useContextStore(selector);
|
23
|
+
const scrollToItem = (element) => {
|
24
|
+
if (!element || !isFocused) {
|
25
|
+
return;
|
26
|
+
}
|
27
|
+
scrollToView(element);
|
28
|
+
};
|
29
|
+
const handleMouseFocus = React.useCallback(() => {
|
30
|
+
if (controlType !== "mouse") {
|
31
|
+
return;
|
32
|
+
}
|
33
|
+
setFocusedId(item.id);
|
34
|
+
}, [controlType, item.id, setFocusedId]);
|
35
|
+
const handleSelect = React.useCallback(() => {
|
36
|
+
if (item.isDisabled) {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
onSelect(item);
|
40
|
+
}, [item, onSelect]);
|
41
|
+
const classNames = cx(e("item-wrapper", {
|
42
|
+
isFocused,
|
43
|
+
isDisabled: !!item.isDisabled,
|
44
|
+
}), typeof itemClassName === "function" ? itemClassName(item) : itemClassName);
|
45
|
+
return (React.createElement("li", { ref: scrollToItem, role: "menuitem", "aria-haspopup": item.subItems ? "menu" : undefined, "aria-disabled": item.isDisabled, onMouseMove: handleMouseFocus, tabIndex: -1, id: makeItemId(item), className: classNames },
|
46
|
+
React.createElement(InteractiveItemComponent, { item: item, isFocused: isFocused, onSelect: handleSelect })));
|
47
|
+
}
|
5
48
|
/**
|
6
49
|
* @internal
|
7
50
|
*/
|
@@ -9,8 +52,8 @@ export function DefaultUiMenuInteractiveItemComponent({ item, isFocused, onSelec
|
|
9
52
|
return (React.createElement("div", { className: e("item", {
|
10
53
|
isFocused,
|
11
54
|
isDisabled: !!item.isDisabled,
|
12
|
-
}), onClick:
|
55
|
+
}), onClick: onSelect },
|
13
56
|
React.createElement(ShortenedText, { className: e("item-title"), ellipsisPosition: "end" }, item.stringTitle),
|
14
|
-
!!item.
|
57
|
+
!!item.subItems && React.createElement("i", { className: "gd-icon-navigateright" })));
|
15
58
|
}
|
16
59
|
//# sourceMappingURL=DefaultUiMenuInteractiveItemComponent.js.map
|
@@ -1 +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;
|
1
|
+
{"version":3,"file":"DefaultUiMenuInteractiveItemComponent.js","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuInteractiveItemComponent.tsx"],"names":[],"mappings":"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"}
|
@@ -1,8 +1,8 @@
|
|
1
1
|
import React from "react";
|
2
|
-
import { UiMenuStaticItemProps } from "../types.js";
|
2
|
+
import { IUiMenuItemData, UiMenuStaticItemProps } from "../types.js";
|
3
3
|
/**
|
4
4
|
* By default just renders the data.
|
5
5
|
* @internal
|
6
6
|
*/
|
7
|
-
export declare
|
7
|
+
export declare const DefaultUiMenuStaticItemComponent: React.MemoExoticComponent<(<T extends IUiMenuItemData = object>({ item }: UiMenuStaticItemProps<T>) => React.ReactElement)>;
|
8
8
|
//# sourceMappingURL=DefaultUiMenuStaticItemComponent.d.ts.map
|
@@ -1 +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;
|
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,eAAe,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGrE;;;GAGG;AACH,eAAO,MAAM,gCAAgC,yGAEN,MAAM,YAAY,EAUvD,CAAC"}
|
@@ -1,9 +1,14 @@
|
|
1
1
|
// (C) 2025 GoodData Corporation
|
2
|
+
import React from "react";
|
3
|
+
import { typedUiMenuContextStore } from "../context.js";
|
2
4
|
/**
|
3
5
|
* By default just renders the data.
|
4
6
|
* @internal
|
5
7
|
*/
|
6
|
-
export function DefaultUiMenuStaticItemComponent({ item }) {
|
7
|
-
|
8
|
-
|
8
|
+
export const DefaultUiMenuStaticItemComponent = React.memo(function DefaultUiMenuStaticItemComponent({ item }) {
|
9
|
+
const { itemClassName } = typedUiMenuContextStore().useContextStore((ctx) => ({
|
10
|
+
itemClassName: ctx.itemClassName,
|
11
|
+
}));
|
12
|
+
return (React.createElement("li", { role: "none", className: typeof itemClassName === "function" ? itemClassName(item) : itemClassName }, item.data));
|
13
|
+
});
|
9
14
|
//# sourceMappingURL=DefaultUiMenuStaticItemComponent.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"DefaultUiMenuStaticItemComponent.js","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.tsx"],"names":[],"mappings":"AAAA,gCAAgC;
|
1
|
+
{"version":3,"file":"DefaultUiMenuStaticItemComponent.js","sourceRoot":"","sources":["../../../../src/@ui/UiMenu/defaults/DefaultUiMenuStaticItemComponent.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAEhC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAExD;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,gCAAgC,CAElG,EAAE,IAAI,EAA4B;IAChC,MAAM,EAAE,aAAa,EAAE,GAAG,uBAAuB,EAAK,CAAC,eAAe,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC7E,aAAa,EAAE,GAAG,CAAC,aAAa;KACnC,CAAC,CAAC,CAAC;IAEJ,OAAO,CACH,4BAAI,IAAI,EAAC,MAAM,EAAC,SAAS,EAAE,OAAO,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,IAC/F,IAAI,CAAC,IAAuB,CAC5B,CACR,CAAC;AACN,CAAC,CAAC,CAAC"}
|
@@ -1,15 +1,15 @@
|
|
1
|
+
import { IUiMenuContext, UiMenuProps, IUiMenuItemData } from "./types.js";
|
1
2
|
import React from "react";
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
}
|
10
|
-
|
11
|
-
|
12
|
-
onUnhandledKeyDown: UiMenuProps<InteractiveItemData, StaticItemData>["onUnhandledKeyDown"];
|
3
|
+
/**
|
4
|
+
* @internal
|
5
|
+
*/
|
6
|
+
export declare function useUiMenuContextValue<T extends IUiMenuItemData = object>(props: UiMenuProps<T>, menuComponentRef: React.RefObject<HTMLElement>, itemsContainerRef: React.RefObject<HTMLElement>): IUiMenuContext<T>;
|
7
|
+
/**
|
8
|
+
* @internal
|
9
|
+
*/
|
10
|
+
export declare function useKeyNavigation<T extends IUiMenuItemData = object>({ menuContextValue, shouldKeyboardActionPreventDefault, shouldKeyboardActionStopPropagation, onUnhandledKeyDown, }: {
|
11
|
+
menuContextValue: IUiMenuContext<T>;
|
12
|
+
onUnhandledKeyDown: UiMenuProps<T>["onUnhandledKeyDown"];
|
13
13
|
shouldKeyboardActionPreventDefault?: boolean;
|
14
14
|
shouldKeyboardActionStopPropagation?: boolean;
|
15
15
|
}): (event: React.KeyboardEvent<Element>) => void;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/@ui/UiMenu/hooks.tsx"],"names":[],"mappings":"AAEA,OAAO,EAEH,cAAc,EAId,WAAW,EACX,eAAe,EAClB,MAAM,YAAY,CAAC;AAWpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAW1B;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EACpE,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,EACrB,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,EAC9C,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,CAAC,GAChD,cAAc,CAAC,CAAC,CAAC,CAsHnB;AAwBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,eAAe,GAAG,MAAM,EAAE,EACjE,gBAAgB,EAChB,kCAAkC,EAClC,mCAAmC,EACnC,kBAAkB,GACrB,EAAE;IACC,gBAAgB,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;IACpC,kBAAkB,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACzD,kCAAkC,CAAC,EAAE,OAAO,CAAC;IAC7C,mCAAmC,CAAC,EAAE,OAAO,CAAC;CACjD,iDAwFA"}
|