@backstage/ui 0.0.0-nightly-20251008023601 → 0.0.0-nightly-20251022024054
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/CHANGELOG.md +38 -1
- package/css/styles.css +6422 -8185
- package/dist/components/Avatar/Avatar.esm.js +21 -7
- package/dist/components/Avatar/Avatar.esm.js.map +1 -1
- package/dist/components/Avatar/Avatar.module.css.esm.js +8 -0
- package/dist/components/Avatar/Avatar.module.css.esm.js.map +1 -0
- package/dist/components/Box/Box.esm.js +20 -23
- package/dist/components/Box/Box.esm.js.map +1 -1
- package/dist/components/Box/Box.module.css.esm.js +8 -0
- package/dist/components/Box/Box.module.css.esm.js.map +1 -0
- package/dist/components/Button/Button.esm.js +7 -13
- package/dist/components/Button/Button.esm.js.map +1 -1
- package/dist/components/Button/Button.module.css.esm.js +8 -0
- package/dist/components/Button/Button.module.css.esm.js.map +1 -0
- package/dist/components/ButtonIcon/ButtonIcon.esm.js +14 -12
- package/dist/components/ButtonIcon/ButtonIcon.esm.js.map +1 -1
- package/dist/components/ButtonIcon/ButtonIcon.module.css.esm.js +8 -0
- package/dist/components/ButtonIcon/ButtonIcon.module.css.esm.js.map +1 -0
- package/dist/components/ButtonLink/ButtonLink.esm.js +8 -13
- package/dist/components/ButtonLink/ButtonLink.esm.js.map +1 -1
- package/dist/components/Card/Card.esm.js +46 -28
- package/dist/components/Card/Card.esm.js.map +1 -1
- package/dist/components/Card/Card.module.css.esm.js +8 -0
- package/dist/components/Card/Card.module.css.esm.js.map +1 -0
- package/dist/components/Checkbox/Checkbox.esm.js +14 -49
- package/dist/components/Checkbox/Checkbox.esm.js.map +1 -1
- package/dist/components/Checkbox/Checkbox.module.css.esm.js +8 -0
- package/dist/components/Checkbox/Checkbox.module.css.esm.js.map +1 -0
- package/dist/components/Collapsible/Collapsible.esm.js +14 -9
- package/dist/components/Collapsible/Collapsible.esm.js.map +1 -1
- package/dist/components/Collapsible/Collapsible.module.css.esm.js +8 -0
- package/dist/components/Collapsible/Collapsible.module.css.esm.js.map +1 -0
- package/dist/components/Container/Container.esm.js +22 -25
- package/dist/components/Container/Container.esm.js.map +1 -1
- package/dist/components/Container/Container.module.css.esm.js +8 -0
- package/dist/components/Container/Container.module.css.esm.js.map +1 -0
- package/dist/components/Dialog/Dialog.esm.js +103 -0
- package/dist/components/Dialog/Dialog.esm.js.map +1 -0
- package/dist/components/Dialog/Dialog.module.css.esm.js +8 -0
- package/dist/components/Dialog/Dialog.module.css.esm.js.map +1 -0
- package/dist/components/FieldError/FieldError.esm.js +5 -2
- package/dist/components/FieldError/FieldError.esm.js.map +1 -1
- package/dist/components/FieldError/FieldError.module.css.esm.js +8 -0
- package/dist/components/FieldError/FieldError.module.css.esm.js.map +1 -0
- package/dist/components/FieldLabel/FieldLabel.esm.js +50 -13
- package/dist/components/FieldLabel/FieldLabel.esm.js.map +1 -1
- package/dist/components/FieldLabel/FieldLabel.module.css.esm.js +8 -0
- package/dist/components/FieldLabel/FieldLabel.module.css.esm.js.map +1 -0
- package/dist/components/Flex/Flex.esm.js +22 -18
- package/dist/components/Flex/Flex.esm.js.map +1 -1
- package/dist/components/Flex/Flex.module.css.esm.js +8 -0
- package/dist/components/Flex/Flex.module.css.esm.js.map +1 -0
- package/dist/components/Grid/Grid.esm.js +41 -29
- package/dist/components/Grid/Grid.esm.js.map +1 -1
- package/dist/components/Grid/Grid.module.css.esm.js +8 -0
- package/dist/components/Grid/Grid.module.css.esm.js.map +1 -0
- package/dist/components/Header/Header.esm.js +22 -11
- package/dist/components/Header/Header.esm.js.map +1 -1
- package/dist/components/Header/Header.module.css.esm.js +8 -0
- package/dist/components/Header/Header.module.css.esm.js.map +1 -0
- package/dist/components/Header/HeaderToolbar.esm.js +71 -7
- package/dist/components/Header/HeaderToolbar.esm.js.map +1 -1
- package/dist/components/HeaderPage/HeaderPage.esm.js +51 -31
- package/dist/components/HeaderPage/HeaderPage.esm.js.map +1 -1
- package/dist/components/HeaderPage/HeaderPage.module.css.esm.js +8 -0
- package/dist/components/HeaderPage/HeaderPage.module.css.esm.js.map +1 -0
- package/dist/components/Link/Link.esm.js +26 -15
- package/dist/components/Link/Link.esm.js.map +1 -1
- package/dist/components/Link/Link.module.css.esm.js +8 -0
- package/dist/components/Link/Link.module.css.esm.js.map +1 -0
- package/dist/components/Menu/Menu.esm.js +376 -118
- package/dist/components/Menu/Menu.esm.js.map +1 -1
- package/dist/components/Menu/Menu.module.css.esm.js +8 -0
- package/dist/components/Menu/Menu.module.css.esm.js.map +1 -0
- package/dist/components/Popover/Popover.module.css.esm.js +8 -0
- package/dist/components/Popover/Popover.module.css.esm.js.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.esm.js +6 -5
- package/dist/components/RadioGroup/RadioGroup.esm.js.map +1 -1
- package/dist/components/RadioGroup/RadioGroup.module.css.esm.js +8 -0
- package/dist/components/RadioGroup/RadioGroup.module.css.esm.js.map +1 -0
- package/dist/components/SearchField/SearchField.esm.js +44 -23
- package/dist/components/SearchField/SearchField.esm.js.map +1 -1
- package/dist/components/SearchField/SearchField.module.css.esm.js +8 -0
- package/dist/components/SearchField/SearchField.module.css.esm.js.map +1 -0
- package/dist/components/Select/Select.esm.js +60 -25
- package/dist/components/Select/Select.esm.js.map +1 -1
- package/dist/components/Select/Select.module.css.esm.js +8 -0
- package/dist/components/Select/Select.module.css.esm.js.map +1 -0
- package/dist/components/Skeleton/Skeleton.esm.js +12 -4
- package/dist/components/Skeleton/Skeleton.esm.js.map +1 -1
- package/dist/components/Skeleton/Skeleton.module.css.esm.js +8 -0
- package/dist/components/Skeleton/Skeleton.module.css.esm.js.map +1 -0
- package/dist/components/Switch/Switch.esm.js +22 -6
- package/dist/components/Switch/Switch.esm.js.map +1 -1
- package/dist/components/Switch/Switch.module.css.esm.js +8 -0
- package/dist/components/Switch/Switch.module.css.esm.js.map +1 -0
- package/dist/components/Table/Table.module.css.esm.js +8 -0
- package/dist/components/Table/Table.module.css.esm.js.map +1 -0
- package/dist/components/Table/components/Cell.esm.js +44 -17
- package/dist/components/Table/components/Cell.esm.js.map +1 -1
- package/dist/components/Table/components/CellProfile.esm.js +71 -26
- package/dist/components/Table/components/CellProfile.esm.js.map +1 -1
- package/dist/components/Table/components/Column.esm.js +39 -9
- package/dist/components/Table/components/Column.esm.js.map +1 -1
- package/dist/components/Table/components/Row.esm.js +19 -11
- package/dist/components/Table/components/Row.esm.js.map +1 -1
- package/dist/components/Table/components/Table.esm.js +8 -3
- package/dist/components/Table/components/Table.esm.js.map +1 -1
- package/dist/components/Table/components/TableBody.esm.js +13 -2
- package/dist/components/Table/components/TableBody.esm.js.map +1 -1
- package/dist/components/Table/components/TableHeader.esm.js +20 -10
- package/dist/components/Table/components/TableHeader.esm.js.map +1 -1
- package/dist/components/TablePagination/TablePagination.esm.js +80 -63
- package/dist/components/TablePagination/TablePagination.esm.js.map +1 -1
- package/dist/components/TablePagination/TablePagination.module.css.esm.js +8 -0
- package/dist/components/TablePagination/TablePagination.module.css.esm.js.map +1 -0
- package/dist/components/Tabs/Tabs.esm.js +55 -31
- package/dist/components/Tabs/Tabs.esm.js.map +1 -1
- package/dist/components/Tabs/Tabs.module.css.esm.js +8 -0
- package/dist/components/Tabs/Tabs.module.css.esm.js.map +1 -0
- package/dist/components/Tabs/TabsIndicators.esm.js +14 -2
- package/dist/components/Tabs/TabsIndicators.esm.js.map +1 -1
- package/dist/components/TagGroup/TagGroup.esm.js +35 -19
- package/dist/components/TagGroup/TagGroup.esm.js.map +1 -1
- package/dist/components/TagGroup/TagGroup.module.css.esm.js +8 -0
- package/dist/components/TagGroup/TagGroup.module.css.esm.js.map +1 -0
- package/dist/components/Text/Text.esm.js +10 -19
- package/dist/components/Text/Text.esm.js.map +1 -1
- package/dist/components/Text/Text.module.css.esm.js +8 -0
- package/dist/components/Text/Text.module.css.esm.js.map +1 -0
- package/dist/components/TextField/TextField.esm.js +29 -16
- package/dist/components/TextField/TextField.esm.js.map +1 -1
- package/dist/components/TextField/TextField.module.css.esm.js +8 -0
- package/dist/components/TextField/TextField.module.css.esm.js.map +1 -0
- package/dist/components/Tooltip/Tooltip.esm.js +19 -7
- package/dist/components/Tooltip/Tooltip.esm.js.map +1 -1
- package/dist/components/Tooltip/Tooltip.module.css.esm.js +8 -0
- package/dist/components/Tooltip/Tooltip.module.css.esm.js.map +1 -0
- package/dist/hooks/useStyles.esm.js +65 -9
- package/dist/hooks/useStyles.esm.js.map +1 -1
- package/dist/index.d.ts +148 -433
- package/dist/index.esm.js +1 -9
- package/dist/index.esm.js.map +1 -1
- package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js +29 -0
- package/dist/node_modules_dist/style-inject/dist/style-inject.es.esm.js.map +1 -0
- package/dist/utils/componentDefinitions.esm.js +113 -16
- package/dist/utils/componentDefinitions.esm.js.map +1 -1
- package/dist/utils/utilityClassMap.esm.js +189 -0
- package/dist/utils/utilityClassMap.esm.js.map +1 -0
- package/package.json +3 -3
- package/dist/components/Box/Box.props.esm.js +0 -7
- package/dist/components/Box/Box.props.esm.js.map +0 -1
- package/dist/components/Flex/Flex.props.esm.js +0 -31
- package/dist/components/Flex/Flex.props.esm.js.map +0 -1
- package/dist/components/Grid/Grid.props.esm.js +0 -58
- package/dist/components/Grid/Grid.props.esm.js.map +0 -1
- package/dist/components/Icon/Icon.esm.js +0 -29
- package/dist/components/Icon/Icon.esm.js.map +0 -1
- package/dist/components/Icon/context.esm.js +0 -10
- package/dist/components/Icon/context.esm.js.map +0 -1
- package/dist/components/Icon/icons.esm.js +0 -63
- package/dist/components/Icon/icons.esm.js.map +0 -1
- package/dist/components/Icon/provider.esm.js +0 -12
- package/dist/components/Icon/provider.esm.js.map +0 -1
- package/dist/components/ScrollArea/ScrollArea.esm.js +0 -63
- package/dist/components/ScrollArea/ScrollArea.esm.js.map +0 -1
- package/dist/props/display.props.esm.js +0 -12
- package/dist/props/display.props.esm.js.map +0 -1
- package/dist/props/gap-props.esm.js +0 -15
- package/dist/props/gap-props.esm.js.map +0 -1
- package/dist/props/height.props.esm.js +0 -23
- package/dist/props/height.props.esm.js.map +0 -1
- package/dist/props/margin.props.esm.js +0 -54
- package/dist/props/margin.props.esm.js.map +0 -1
- package/dist/props/padding.props.esm.js +0 -54
- package/dist/props/padding.props.esm.js.map +0 -1
- package/dist/props/position.props.esm.js +0 -18
- package/dist/props/position.props.esm.js.map +0 -1
- package/dist/props/prop-def.esm.js +0 -4
- package/dist/props/prop-def.esm.js.map +0 -1
- package/dist/props/spacing.props.esm.js +0 -28
- package/dist/props/spacing.props.esm.js.map +0 -1
- package/dist/props/width.props.esm.js +0 -23
- package/dist/props/width.props.esm.js.map +0 -1
- package/dist/utils/extractProps.esm.js +0 -49
- package/dist/utils/extractProps.esm.js.map +0 -1
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { MenuTrigger as MenuTrigger$1, SubmenuTrigger as SubmenuTrigger$1,
|
|
3
|
-
import { ScrollArea } from '../ScrollArea/ScrollArea.esm.js';
|
|
2
|
+
import { MenuTrigger as MenuTrigger$1, SubmenuTrigger as SubmenuTrigger$1, OverlayTriggerStateContext, Menu as Menu$1, Popover, RouterProvider, Virtualizer, ListLayout, ListBox, useFilter, Autocomplete, SearchField, Input, Button, MenuItem as MenuItem$1, ListBoxItem, MenuSection as MenuSection$1, Header, Separator } from 'react-aria-components';
|
|
4
3
|
import { useStyles } from '../../hooks/useStyles.esm.js';
|
|
5
4
|
import { RiCloseCircleLine, RiArrowRightSLine, RiCheckLine } from '@remixicon/react';
|
|
6
5
|
import { useNavigate, useHref } from 'react-router-dom';
|
|
7
6
|
import { isExternalLink } from '../../utils/isExternalLink.esm.js';
|
|
7
|
+
import { useRef, useContext, useEffect } from 'react';
|
|
8
|
+
import styles from './Menu.module.css.esm.js';
|
|
9
|
+
import clsx from 'clsx';
|
|
8
10
|
|
|
11
|
+
const rowHeight = 32;
|
|
9
12
|
const MenuEmptyState = () => {
|
|
10
13
|
const { classNames } = useStyles("Menu");
|
|
11
|
-
return /* @__PURE__ */ jsx("div", { className: classNames.emptyState, children: "No results found." });
|
|
14
|
+
return /* @__PURE__ */ jsx("div", { className: clsx(classNames.emptyState, styles[classNames.emptyState]), children: "No results found." });
|
|
12
15
|
};
|
|
13
16
|
const MenuTrigger = (props) => {
|
|
14
17
|
return /* @__PURE__ */ jsx(MenuTrigger$1, { ...props });
|
|
@@ -17,165 +20,420 @@ const SubmenuTrigger = (props) => {
|
|
|
17
20
|
return /* @__PURE__ */ jsx(SubmenuTrigger$1, { ...props });
|
|
18
21
|
};
|
|
19
22
|
const Menu = (props) => {
|
|
20
|
-
const {
|
|
21
|
-
const {
|
|
23
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
24
|
+
const {
|
|
25
|
+
placement = "bottom start",
|
|
26
|
+
virtualized = false,
|
|
27
|
+
maxWidth,
|
|
28
|
+
maxHeight,
|
|
29
|
+
style,
|
|
30
|
+
...rest
|
|
31
|
+
} = cleanedProps;
|
|
22
32
|
const navigate = useNavigate();
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
|
|
34
|
+
const popoverRef = useRef(null);
|
|
35
|
+
const state = useContext(OverlayTriggerStateContext);
|
|
36
|
+
useEffect(() => {
|
|
37
|
+
if (!state?.isOpen) return;
|
|
38
|
+
const handleClickOutside = (event) => {
|
|
39
|
+
const target = event.target;
|
|
40
|
+
if (popoverRef.current && !popoverRef.current.contains(target)) {
|
|
41
|
+
const isOnTrigger = target.closest("[data-trigger]");
|
|
42
|
+
const isOnSubmenu = target.closest('[role="menu"]');
|
|
43
|
+
if (!isOnTrigger && !isOnSubmenu) {
|
|
44
|
+
state.close();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
document.addEventListener("mousedown", handleClickOutside);
|
|
49
|
+
return () => {
|
|
50
|
+
document.removeEventListener("mousedown", handleClickOutside);
|
|
51
|
+
};
|
|
52
|
+
}, [state]);
|
|
53
|
+
const menuContent = /* @__PURE__ */ jsx(
|
|
54
|
+
Menu$1,
|
|
55
|
+
{
|
|
56
|
+
className: clsx(classNames.content, styles[classNames.content]),
|
|
57
|
+
renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
|
|
58
|
+
style: { width: newMaxWidth, maxHeight, ...style },
|
|
59
|
+
...rest
|
|
60
|
+
}
|
|
61
|
+
);
|
|
62
|
+
return /* @__PURE__ */ jsx(
|
|
63
|
+
Popover,
|
|
64
|
+
{
|
|
65
|
+
ref: popoverRef,
|
|
66
|
+
className: clsx(classNames.popover, styles[classNames.popover]),
|
|
67
|
+
placement,
|
|
68
|
+
isNonModal: true,
|
|
69
|
+
isKeyboardDismissDisabled: false,
|
|
70
|
+
children: /* @__PURE__ */ jsx(RouterProvider, { navigate, useHref, children: virtualized ? /* @__PURE__ */ jsx(
|
|
71
|
+
Virtualizer,
|
|
72
|
+
{
|
|
73
|
+
layout: ListLayout,
|
|
74
|
+
layoutOptions: {
|
|
75
|
+
rowHeight
|
|
76
|
+
},
|
|
77
|
+
children: menuContent
|
|
78
|
+
}
|
|
79
|
+
) : menuContent })
|
|
80
|
+
}
|
|
81
|
+
);
|
|
27
82
|
};
|
|
28
83
|
const MenuListBox = (props) => {
|
|
84
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
29
85
|
const {
|
|
30
86
|
selectionMode = "single",
|
|
31
87
|
placement = "bottom start",
|
|
88
|
+
virtualized = false,
|
|
89
|
+
maxWidth,
|
|
90
|
+
maxHeight,
|
|
91
|
+
style,
|
|
32
92
|
...rest
|
|
33
|
-
} =
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
93
|
+
} = cleanedProps;
|
|
94
|
+
let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
|
|
95
|
+
const listBoxContent = /* @__PURE__ */ jsx(
|
|
96
|
+
ListBox,
|
|
97
|
+
{
|
|
98
|
+
className: clsx(classNames.content, styles[classNames.content]),
|
|
99
|
+
selectionMode,
|
|
100
|
+
style: { width: newMaxWidth, maxHeight, ...style },
|
|
101
|
+
...rest
|
|
102
|
+
}
|
|
103
|
+
);
|
|
104
|
+
return /* @__PURE__ */ jsx(
|
|
105
|
+
Popover,
|
|
106
|
+
{
|
|
107
|
+
className: clsx(classNames.popover, styles[classNames.popover]),
|
|
108
|
+
placement,
|
|
109
|
+
children: virtualized ? /* @__PURE__ */ jsx(
|
|
110
|
+
Virtualizer,
|
|
111
|
+
{
|
|
112
|
+
layout: ListLayout,
|
|
113
|
+
layoutOptions: {
|
|
114
|
+
rowHeight
|
|
115
|
+
},
|
|
116
|
+
children: listBoxContent
|
|
117
|
+
}
|
|
118
|
+
) : listBoxContent
|
|
119
|
+
}
|
|
120
|
+
);
|
|
46
121
|
};
|
|
47
122
|
const MenuAutocomplete = (props) => {
|
|
48
|
-
const {
|
|
49
|
-
const {
|
|
123
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
124
|
+
const {
|
|
125
|
+
placement = "bottom start",
|
|
126
|
+
virtualized = false,
|
|
127
|
+
maxWidth,
|
|
128
|
+
maxHeight,
|
|
129
|
+
style,
|
|
130
|
+
...rest
|
|
131
|
+
} = cleanedProps;
|
|
50
132
|
const { contains } = useFilter({ sensitivity: "base" });
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
133
|
+
let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
|
|
134
|
+
const navigate = useNavigate();
|
|
135
|
+
const menuContent = /* @__PURE__ */ jsx(
|
|
136
|
+
Menu$1,
|
|
137
|
+
{
|
|
138
|
+
className: clsx(classNames.content, styles[classNames.content]),
|
|
139
|
+
renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
|
|
140
|
+
style: { width: newMaxWidth, maxHeight, ...style },
|
|
141
|
+
...rest
|
|
142
|
+
}
|
|
143
|
+
);
|
|
144
|
+
return /* @__PURE__ */ jsx(
|
|
145
|
+
Popover,
|
|
146
|
+
{
|
|
147
|
+
className: clsx(classNames.popover, styles[classNames.popover]),
|
|
148
|
+
placement,
|
|
149
|
+
children: /* @__PURE__ */ jsx(RouterProvider, { navigate, useHref, children: /* @__PURE__ */ jsxs(Autocomplete, { filter: contains, children: [
|
|
150
|
+
/* @__PURE__ */ jsxs(
|
|
151
|
+
SearchField,
|
|
152
|
+
{
|
|
153
|
+
className: clsx(
|
|
154
|
+
classNames.searchField,
|
|
155
|
+
styles[classNames.searchField]
|
|
156
|
+
),
|
|
157
|
+
children: [
|
|
158
|
+
/* @__PURE__ */ jsx(
|
|
159
|
+
Input,
|
|
160
|
+
{
|
|
161
|
+
className: clsx(
|
|
162
|
+
classNames.searchFieldInput,
|
|
163
|
+
styles[classNames.searchFieldInput]
|
|
164
|
+
),
|
|
165
|
+
"aria-label": "Search",
|
|
166
|
+
placeholder: props.placeholder || "Search..."
|
|
167
|
+
}
|
|
168
|
+
),
|
|
169
|
+
/* @__PURE__ */ jsx(
|
|
170
|
+
Button,
|
|
171
|
+
{
|
|
172
|
+
className: clsx(
|
|
173
|
+
classNames.searchFieldClear,
|
|
174
|
+
styles[classNames.searchFieldClear]
|
|
175
|
+
),
|
|
176
|
+
children: /* @__PURE__ */ jsx(RiCloseCircleLine, {})
|
|
177
|
+
}
|
|
178
|
+
)
|
|
179
|
+
]
|
|
180
|
+
}
|
|
181
|
+
),
|
|
182
|
+
virtualized ? /* @__PURE__ */ jsx(
|
|
183
|
+
Virtualizer,
|
|
184
|
+
{
|
|
185
|
+
layout: ListLayout,
|
|
186
|
+
layoutOptions: {
|
|
187
|
+
rowHeight
|
|
188
|
+
},
|
|
189
|
+
children: menuContent
|
|
190
|
+
}
|
|
191
|
+
) : menuContent
|
|
192
|
+
] }) })
|
|
193
|
+
}
|
|
194
|
+
);
|
|
75
195
|
};
|
|
76
196
|
const MenuAutocompleteListbox = (props) => {
|
|
197
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
77
198
|
const {
|
|
78
199
|
selectionMode = "single",
|
|
79
200
|
placement = "bottom start",
|
|
201
|
+
virtualized = false,
|
|
202
|
+
maxWidth,
|
|
203
|
+
maxHeight,
|
|
204
|
+
style,
|
|
80
205
|
...rest
|
|
81
|
-
} =
|
|
82
|
-
const { classNames } = useStyles("Menu");
|
|
206
|
+
} = cleanedProps;
|
|
83
207
|
const { contains } = useFilter({ sensitivity: "base" });
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
208
|
+
let newMaxWidth = maxWidth || (virtualized ? "260px" : "undefined");
|
|
209
|
+
const listBoxContent = /* @__PURE__ */ jsx(
|
|
210
|
+
ListBox,
|
|
211
|
+
{
|
|
212
|
+
className: clsx(classNames.content, styles[classNames.content]),
|
|
213
|
+
renderEmptyState: () => /* @__PURE__ */ jsx(MenuEmptyState, {}),
|
|
214
|
+
selectionMode,
|
|
215
|
+
style: { width: newMaxWidth, maxHeight, ...style },
|
|
216
|
+
...rest
|
|
217
|
+
}
|
|
218
|
+
);
|
|
219
|
+
return /* @__PURE__ */ jsx(
|
|
220
|
+
Popover,
|
|
221
|
+
{
|
|
222
|
+
className: clsx(classNames.popover, styles[classNames.popover]),
|
|
223
|
+
placement,
|
|
224
|
+
children: /* @__PURE__ */ jsxs(Autocomplete, { filter: contains, children: [
|
|
225
|
+
/* @__PURE__ */ jsxs(
|
|
226
|
+
SearchField,
|
|
227
|
+
{
|
|
228
|
+
className: clsx(
|
|
229
|
+
classNames.searchField,
|
|
230
|
+
styles[classNames.searchField]
|
|
231
|
+
),
|
|
232
|
+
children: [
|
|
233
|
+
/* @__PURE__ */ jsx(
|
|
234
|
+
Input,
|
|
235
|
+
{
|
|
236
|
+
className: clsx(
|
|
237
|
+
classNames.searchFieldInput,
|
|
238
|
+
styles[classNames.searchFieldInput]
|
|
239
|
+
),
|
|
240
|
+
"aria-label": "Search",
|
|
241
|
+
placeholder: props.placeholder || "Search..."
|
|
242
|
+
}
|
|
243
|
+
),
|
|
244
|
+
/* @__PURE__ */ jsx(
|
|
245
|
+
Button,
|
|
246
|
+
{
|
|
247
|
+
className: clsx(
|
|
248
|
+
classNames.searchFieldClear,
|
|
249
|
+
styles[classNames.searchFieldClear]
|
|
250
|
+
),
|
|
251
|
+
children: /* @__PURE__ */ jsx(RiCloseCircleLine, {})
|
|
252
|
+
}
|
|
253
|
+
)
|
|
254
|
+
]
|
|
255
|
+
}
|
|
256
|
+
),
|
|
257
|
+
virtualized ? /* @__PURE__ */ jsx(
|
|
258
|
+
Virtualizer,
|
|
259
|
+
{
|
|
260
|
+
layout: ListLayout,
|
|
261
|
+
layoutOptions: {
|
|
262
|
+
rowHeight
|
|
263
|
+
},
|
|
264
|
+
children: listBoxContent
|
|
265
|
+
}
|
|
266
|
+
) : listBoxContent
|
|
267
|
+
] })
|
|
268
|
+
}
|
|
269
|
+
);
|
|
109
270
|
};
|
|
110
271
|
const MenuItem = (props) => {
|
|
111
|
-
const {
|
|
112
|
-
const {
|
|
272
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
273
|
+
const {
|
|
274
|
+
iconStart,
|
|
275
|
+
color = "primary",
|
|
276
|
+
children,
|
|
277
|
+
href,
|
|
278
|
+
...rest
|
|
279
|
+
} = cleanedProps;
|
|
113
280
|
const isLink = href !== void 0;
|
|
114
281
|
const isExternal = isExternalLink(href);
|
|
115
|
-
const content = /* @__PURE__ */ jsxs(
|
|
116
|
-
MenuItem$1,
|
|
117
|
-
{
|
|
118
|
-
className: classNames.item,
|
|
119
|
-
"data-color": color,
|
|
120
|
-
href,
|
|
121
|
-
textValue: typeof children === "string" ? children : void 0,
|
|
122
|
-
...rest,
|
|
123
|
-
children: [
|
|
124
|
-
/* @__PURE__ */ jsxs("div", { className: classNames.itemContent, children: [
|
|
125
|
-
iconStart,
|
|
126
|
-
children
|
|
127
|
-
] }),
|
|
128
|
-
/* @__PURE__ */ jsx("div", { className: classNames.itemArrow, children: /* @__PURE__ */ jsx(RiArrowRightSLine, {}) })
|
|
129
|
-
]
|
|
130
|
-
}
|
|
131
|
-
);
|
|
132
282
|
if (isLink && isExternal) {
|
|
133
|
-
return /* @__PURE__ */
|
|
283
|
+
return /* @__PURE__ */ jsx(
|
|
134
284
|
MenuItem$1,
|
|
135
285
|
{
|
|
136
|
-
className: classNames.item,
|
|
286
|
+
className: clsx(classNames.item, styles[classNames.item]),
|
|
137
287
|
"data-color": color,
|
|
138
288
|
textValue: typeof children === "string" ? children : void 0,
|
|
139
289
|
onAction: () => window.open(href, "_blank", "noopener,noreferrer"),
|
|
140
290
|
...rest,
|
|
141
|
-
children:
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
291
|
+
children: /* @__PURE__ */ jsxs(
|
|
292
|
+
"div",
|
|
293
|
+
{
|
|
294
|
+
className: clsx(
|
|
295
|
+
classNames.itemWrapper,
|
|
296
|
+
styles[classNames.itemWrapper]
|
|
297
|
+
),
|
|
298
|
+
children: [
|
|
299
|
+
/* @__PURE__ */ jsxs(
|
|
300
|
+
"div",
|
|
301
|
+
{
|
|
302
|
+
className: clsx(
|
|
303
|
+
classNames.itemContent,
|
|
304
|
+
styles[classNames.itemContent]
|
|
305
|
+
),
|
|
306
|
+
children: [
|
|
307
|
+
iconStart,
|
|
308
|
+
children
|
|
309
|
+
]
|
|
310
|
+
}
|
|
311
|
+
),
|
|
312
|
+
/* @__PURE__ */ jsx(
|
|
313
|
+
"div",
|
|
314
|
+
{
|
|
315
|
+
className: clsx(classNames.itemArrow, styles[classNames.itemArrow]),
|
|
316
|
+
children: /* @__PURE__ */ jsx(RiArrowRightSLine, {})
|
|
317
|
+
}
|
|
318
|
+
)
|
|
319
|
+
]
|
|
320
|
+
}
|
|
321
|
+
)
|
|
148
322
|
}
|
|
149
323
|
);
|
|
150
324
|
}
|
|
151
|
-
return
|
|
325
|
+
return /* @__PURE__ */ jsx(
|
|
326
|
+
MenuItem$1,
|
|
327
|
+
{
|
|
328
|
+
className: clsx(classNames.item, styles[classNames.item]),
|
|
329
|
+
"data-color": color,
|
|
330
|
+
href,
|
|
331
|
+
textValue: typeof children === "string" ? children : void 0,
|
|
332
|
+
...rest,
|
|
333
|
+
children: /* @__PURE__ */ jsxs(
|
|
334
|
+
"div",
|
|
335
|
+
{
|
|
336
|
+
className: clsx(classNames.itemWrapper, styles[classNames.itemWrapper]),
|
|
337
|
+
children: [
|
|
338
|
+
/* @__PURE__ */ jsxs(
|
|
339
|
+
"div",
|
|
340
|
+
{
|
|
341
|
+
className: clsx(
|
|
342
|
+
classNames.itemContent,
|
|
343
|
+
styles[classNames.itemContent]
|
|
344
|
+
),
|
|
345
|
+
children: [
|
|
346
|
+
iconStart,
|
|
347
|
+
children
|
|
348
|
+
]
|
|
349
|
+
}
|
|
350
|
+
),
|
|
351
|
+
/* @__PURE__ */ jsx(
|
|
352
|
+
"div",
|
|
353
|
+
{
|
|
354
|
+
className: clsx(classNames.itemArrow, styles[classNames.itemArrow]),
|
|
355
|
+
children: /* @__PURE__ */ jsx(RiArrowRightSLine, {})
|
|
356
|
+
}
|
|
357
|
+
)
|
|
358
|
+
]
|
|
359
|
+
}
|
|
360
|
+
)
|
|
361
|
+
}
|
|
362
|
+
);
|
|
152
363
|
};
|
|
153
364
|
const MenuListBoxItem = (props) => {
|
|
154
|
-
const {
|
|
155
|
-
const {
|
|
365
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
366
|
+
const { children, ...rest } = cleanedProps;
|
|
156
367
|
return /* @__PURE__ */ jsx(
|
|
157
368
|
ListBoxItem,
|
|
158
369
|
{
|
|
159
370
|
textValue: typeof props.children === "string" ? props.children : void 0,
|
|
160
|
-
className: classNames.itemListBox,
|
|
371
|
+
className: clsx(classNames.itemListBox, styles[classNames.itemListBox]),
|
|
161
372
|
...rest,
|
|
162
|
-
children: /* @__PURE__ */
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
373
|
+
children: /* @__PURE__ */ jsx(
|
|
374
|
+
"div",
|
|
375
|
+
{
|
|
376
|
+
className: clsx(classNames.itemWrapper, styles[classNames.itemWrapper]),
|
|
377
|
+
children: /* @__PURE__ */ jsxs(
|
|
378
|
+
"div",
|
|
379
|
+
{
|
|
380
|
+
className: clsx(
|
|
381
|
+
classNames.itemContent,
|
|
382
|
+
styles[classNames.itemContent]
|
|
383
|
+
),
|
|
384
|
+
children: [
|
|
385
|
+
/* @__PURE__ */ jsx(
|
|
386
|
+
"div",
|
|
387
|
+
{
|
|
388
|
+
className: clsx(
|
|
389
|
+
classNames.itemListBoxCheck,
|
|
390
|
+
styles[classNames.itemListBoxCheck]
|
|
391
|
+
),
|
|
392
|
+
children: /* @__PURE__ */ jsx(RiCheckLine, {})
|
|
393
|
+
}
|
|
394
|
+
),
|
|
395
|
+
children
|
|
396
|
+
]
|
|
397
|
+
}
|
|
398
|
+
)
|
|
399
|
+
}
|
|
400
|
+
)
|
|
166
401
|
}
|
|
167
402
|
);
|
|
168
403
|
};
|
|
169
404
|
const MenuSection = (props) => {
|
|
170
|
-
const { classNames } = useStyles("Menu");
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
405
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
406
|
+
const { children, title, ...rest } = cleanedProps;
|
|
407
|
+
return /* @__PURE__ */ jsxs(
|
|
408
|
+
MenuSection$1,
|
|
409
|
+
{
|
|
410
|
+
className: clsx(classNames.section, styles[classNames.section]),
|
|
411
|
+
...rest,
|
|
412
|
+
children: [
|
|
413
|
+
/* @__PURE__ */ jsx(
|
|
414
|
+
Header,
|
|
415
|
+
{
|
|
416
|
+
className: clsx(
|
|
417
|
+
classNames.sectionHeader,
|
|
418
|
+
styles[classNames.sectionHeader]
|
|
419
|
+
),
|
|
420
|
+
children: title
|
|
421
|
+
}
|
|
422
|
+
),
|
|
423
|
+
children
|
|
424
|
+
]
|
|
425
|
+
}
|
|
426
|
+
);
|
|
175
427
|
};
|
|
176
428
|
const MenuSeparator = (props) => {
|
|
177
|
-
const { classNames } = useStyles("Menu");
|
|
178
|
-
return /* @__PURE__ */ jsx(
|
|
429
|
+
const { classNames, cleanedProps } = useStyles("Menu", props);
|
|
430
|
+
return /* @__PURE__ */ jsx(
|
|
431
|
+
Separator,
|
|
432
|
+
{
|
|
433
|
+
className: clsx(classNames.separator, styles[classNames.separator]),
|
|
434
|
+
...cleanedProps
|
|
435
|
+
}
|
|
436
|
+
);
|
|
179
437
|
};
|
|
180
438
|
|
|
181
439
|
export { Menu, MenuAutocomplete, MenuAutocompleteListbox, MenuItem, MenuListBox, MenuListBoxItem, MenuSection, MenuSeparator, MenuTrigger, SubmenuTrigger };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.esm.js","sources":["../../../src/components/Menu/Menu.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n MenuTrigger as RAMenuTrigger,\n Popover as RAPopover,\n MenuItem as RAMenuItem,\n Menu as RAMenu,\n MenuSection as RAMenuSection,\n Header as RAMenuHeader,\n Separator as RAMenuSeparator,\n SubmenuTrigger as RAMenuSubmenuTrigger,\n Autocomplete as RAAutocomplete,\n SearchField as RASearchField,\n Input as RAInput,\n Button as RAButton,\n ListBox as RAListBox,\n ListBoxItem as RAListBoxItem,\n useFilter,\n RouterProvider,\n} from 'react-aria-components';\nimport { ScrollArea } from '../ScrollArea';\nimport { useStyles } from '../../hooks/useStyles';\nimport type {\n MenuTriggerProps,\n SubmenuTriggerProps,\n MenuProps,\n MenuAutocompleteProps,\n MenuItemProps,\n MenuSectionProps,\n MenuSeparatorProps,\n MenuListBoxProps,\n MenuListBoxItemProps,\n MenuAutocompleteListBoxProps,\n} from './types';\nimport {\n RiArrowRightSLine,\n RiCheckLine,\n RiCloseCircleLine,\n} from '@remixicon/react';\nimport { useNavigate, useHref } from 'react-router-dom';\nimport { isExternalLink } from '../../utils/isExternalLink';\n\nconst MenuEmptyState = () => {\n const { classNames } = useStyles('Menu');\n\n return <div className={classNames.emptyState}>No results found.</div>;\n};\n\n/** @public */\nexport const MenuTrigger = (props: MenuTriggerProps) => {\n return <RAMenuTrigger {...props} />;\n};\n\n/** @public */\nexport const SubmenuTrigger = (props: SubmenuTriggerProps) => {\n return <RAMenuSubmenuTrigger {...props} />;\n};\n\n/** @public */\nexport const Menu = (props: MenuProps<object>) => {\n const { placement = 'bottom start', ...rest } = props;\n const { classNames } = useStyles('Menu');\n const navigate = useNavigate();\n\n return (\n <RAPopover className={classNames.popover} placement={placement}>\n <RouterProvider navigate={navigate} useHref={useHref}>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <RAMenu className={classNames.content} {...rest}>\n {props.children}\n </RAMenu>\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"vertical\" style={{}}>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n </RouterProvider>\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuListBox = (props: MenuListBoxProps<object>) => {\n const {\n selectionMode = 'single',\n placement = 'bottom start',\n ...rest\n } = props;\n const { classNames } = useStyles('Menu');\n\n return (\n <RAPopover className={classNames.popover} placement={placement}>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <RAListBox\n className={classNames.content}\n selectionMode={selectionMode}\n {...rest}\n />\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"vertical\" style={{}}>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuAutocomplete = (props: MenuAutocompleteProps<object>) => {\n const { placement = 'bottom start', ...rest } = props;\n const { classNames } = useStyles('Menu');\n const { contains } = useFilter({ sensitivity: 'base' });\n\n return (\n <RAPopover className={classNames.popover} placement={placement}>\n <RAAutocomplete filter={contains}>\n <RASearchField className={classNames.searchField}>\n <RAInput\n className={classNames.searchFieldInput}\n aria-label=\"Search\"\n placeholder={props.placeholder || 'Search...'}\n />\n <RAButton className={classNames.searchFieldClear}>\n <RiCloseCircleLine />\n </RAButton>\n </RASearchField>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <RAMenu\n className={classNames.content}\n renderEmptyState={() => <MenuEmptyState />}\n {...rest}\n />\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"vertical\" style={{}}>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n </RAAutocomplete>\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuAutocompleteListbox = (\n props: MenuAutocompleteListBoxProps<object>,\n) => {\n const {\n selectionMode = 'single',\n placement = 'bottom start',\n ...rest\n } = props;\n const { classNames } = useStyles('Menu');\n const { contains } = useFilter({ sensitivity: 'base' });\n\n return (\n <RAPopover className={classNames.popover} placement={placement}>\n <RAAutocomplete filter={contains}>\n <RASearchField className={classNames.searchField}>\n <RAInput\n className={classNames.searchFieldInput}\n aria-label=\"Search\"\n placeholder={props.placeholder || 'Search...'}\n />\n <RAButton className={classNames.searchFieldClear}>\n <RiCloseCircleLine />\n </RAButton>\n </RASearchField>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <RAListBox\n className={classNames.content}\n renderEmptyState={() => <MenuEmptyState />}\n selectionMode={selectionMode}\n {...rest}\n />\n </ScrollArea.Viewport>\n <ScrollArea.Scrollbar orientation=\"vertical\" style={{}}>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Root>\n </RAAutocomplete>\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuItem = (props: MenuItemProps) => {\n const { iconStart, color = 'primary', children, href, ...rest } = props;\n const { classNames } = useStyles('Menu');\n\n const isLink = href !== undefined;\n const isExternal = isExternalLink(href);\n\n const content = (\n <RAMenuItem\n className={classNames.item}\n data-color={color}\n href={href}\n textValue={typeof children === 'string' ? children : undefined}\n {...rest}\n >\n <div className={classNames.itemContent}>\n {iconStart}\n {children}\n </div>\n <div className={classNames.itemArrow}>\n <RiArrowRightSLine />\n </div>\n </RAMenuItem>\n );\n\n if (isLink && isExternal) {\n return (\n <RAMenuItem\n className={classNames.item}\n data-color={color}\n textValue={typeof children === 'string' ? children : undefined}\n onAction={() => window.open(href, '_blank', 'noopener,noreferrer')}\n {...rest}\n >\n <div className={classNames.itemContent}>\n {iconStart}\n {children}\n </div>\n <div className={classNames.itemArrow}>\n <RiArrowRightSLine />\n </div>\n </RAMenuItem>\n );\n }\n\n return content;\n};\n\n/** @public */\nexport const MenuListBoxItem = (props: MenuListBoxItemProps) => {\n const { children, ...rest } = props;\n const { classNames } = useStyles('Menu');\n\n return (\n <RAListBoxItem\n textValue={\n typeof props.children === 'string' ? props.children : undefined\n }\n className={classNames.itemListBox}\n {...rest}\n >\n <div className={classNames.itemContent}>\n <div className={classNames.itemListBoxCheck}>\n <RiCheckLine />\n </div>\n {children}\n </div>\n </RAListBoxItem>\n );\n};\n\n/** @public */\nexport const MenuSection = (props: MenuSectionProps<object>) => {\n const { classNames } = useStyles('Menu');\n\n return (\n <RAMenuSection className={classNames.section} {...props}>\n <RAMenuHeader className={classNames.sectionHeader}>\n {props.title}\n </RAMenuHeader>\n {props.children}\n </RAMenuSection>\n );\n};\n\n/** @public */\nexport const MenuSeparator = (props: MenuSeparatorProps) => {\n const { classNames } = useStyles('Menu');\n\n return <RAMenuSeparator className={classNames.separator} {...props} />;\n};\n"],"names":["RAMenuTrigger","RAMenuSubmenuTrigger","RAPopover","RAMenu","RAListBox","RAAutocomplete","RASearchField","RAInput","RAButton","RAMenuItem","RAListBoxItem","RAMenuSection","RAMenuHeader","RAMenuSeparator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.esm.js","sources":["../../../src/components/Menu/Menu.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n MenuTrigger as RAMenuTrigger,\n Popover as RAPopover,\n MenuItem as RAMenuItem,\n Menu as RAMenu,\n MenuSection as RAMenuSection,\n Header as RAMenuHeader,\n Separator as RAMenuSeparator,\n SubmenuTrigger as RAMenuSubmenuTrigger,\n Autocomplete as RAAutocomplete,\n SearchField as RASearchField,\n Input as RAInput,\n Button as RAButton,\n ListBox as RAListBox,\n ListBoxItem as RAListBoxItem,\n useFilter,\n RouterProvider,\n Virtualizer,\n ListLayout,\n OverlayTriggerStateContext,\n} from 'react-aria-components';\nimport { useStyles } from '../../hooks/useStyles';\nimport type {\n MenuTriggerProps,\n SubmenuTriggerProps,\n MenuProps,\n MenuAutocompleteProps,\n MenuItemProps,\n MenuSectionProps,\n MenuSeparatorProps,\n MenuListBoxProps,\n MenuListBoxItemProps,\n MenuAutocompleteListBoxProps,\n} from './types';\nimport {\n RiArrowRightSLine,\n RiCheckLine,\n RiCloseCircleLine,\n} from '@remixicon/react';\nimport { useNavigate, useHref } from 'react-router-dom';\nimport { isExternalLink } from '../../utils/isExternalLink';\nimport { useRef, useEffect, useContext } from 'react';\nimport styles from './Menu.module.css';\nimport clsx from 'clsx';\n\n// The height will be used for virtualized menus. It should match the size set in CSS for each menu item.\nconst rowHeight = 32;\n\nconst MenuEmptyState = () => {\n const { classNames } = useStyles('Menu');\n\n return (\n <div className={clsx(classNames.emptyState, styles[classNames.emptyState])}>\n No results found.\n </div>\n );\n};\n\n/** @public */\nexport const MenuTrigger = (props: MenuTriggerProps) => {\n return <RAMenuTrigger {...props} />;\n};\n\n/** @public */\nexport const SubmenuTrigger = (props: SubmenuTriggerProps) => {\n return <RAMenuSubmenuTrigger {...props} />;\n};\n\n/** @public */\nexport const Menu = (props: MenuProps<object>) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n const {\n placement = 'bottom start',\n virtualized = false,\n maxWidth,\n maxHeight,\n style,\n ...rest\n } = cleanedProps;\n\n const navigate = useNavigate();\n let newMaxWidth = maxWidth || (virtualized ? '260px' : 'undefined');\n const popoverRef = useRef<HTMLDivElement>(null);\n const state = useContext(OverlayTriggerStateContext);\n\n // Custom click-outside handler for non-modal popovers\n useEffect(() => {\n if (!state?.isOpen) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n const target = event.target as Node;\n\n // Check if click is outside the popover\n if (popoverRef.current && !popoverRef.current.contains(target)) {\n // Check if click is on a trigger button or submenu\n const isOnTrigger = (target as Element).closest('[data-trigger]');\n const isOnSubmenu = (target as Element).closest('[role=\"menu\"]');\n\n if (!isOnTrigger && !isOnSubmenu) {\n state.close();\n }\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n };\n }, [state]);\n\n const menuContent = (\n <RAMenu\n className={clsx(classNames.content, styles[classNames.content])}\n renderEmptyState={() => <MenuEmptyState />}\n style={{ width: newMaxWidth, maxHeight, ...style }}\n {...rest}\n />\n );\n\n return (\n <RAPopover\n ref={popoverRef}\n className={clsx(classNames.popover, styles[classNames.popover])}\n placement={placement}\n isNonModal={true}\n isKeyboardDismissDisabled={false}\n >\n <RouterProvider navigate={navigate} useHref={useHref}>\n {virtualized ? (\n <Virtualizer\n layout={ListLayout}\n layoutOptions={{\n rowHeight,\n }}\n >\n {menuContent}\n </Virtualizer>\n ) : (\n menuContent\n )}\n </RouterProvider>\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuListBox = (props: MenuListBoxProps<object>) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n const {\n selectionMode = 'single',\n placement = 'bottom start',\n virtualized = false,\n maxWidth,\n maxHeight,\n style,\n ...rest\n } = cleanedProps;\n let newMaxWidth = maxWidth || (virtualized ? '260px' : 'undefined');\n\n const listBoxContent = (\n <RAListBox\n className={clsx(classNames.content, styles[classNames.content])}\n selectionMode={selectionMode}\n style={{ width: newMaxWidth, maxHeight, ...style }}\n {...rest}\n />\n );\n\n return (\n <RAPopover\n className={clsx(classNames.popover, styles[classNames.popover])}\n placement={placement}\n >\n {virtualized ? (\n <Virtualizer\n layout={ListLayout}\n layoutOptions={{\n rowHeight,\n }}\n >\n {listBoxContent}\n </Virtualizer>\n ) : (\n listBoxContent\n )}\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuAutocomplete = (props: MenuAutocompleteProps<object>) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n const {\n placement = 'bottom start',\n virtualized = false,\n maxWidth,\n maxHeight,\n style,\n ...rest\n } = cleanedProps;\n const { contains } = useFilter({ sensitivity: 'base' });\n let newMaxWidth = maxWidth || (virtualized ? '260px' : 'undefined');\n const navigate = useNavigate();\n\n const menuContent = (\n <RAMenu\n className={clsx(classNames.content, styles[classNames.content])}\n renderEmptyState={() => <MenuEmptyState />}\n style={{ width: newMaxWidth, maxHeight, ...style }}\n {...rest}\n />\n );\n\n return (\n <RAPopover\n className={clsx(classNames.popover, styles[classNames.popover])}\n placement={placement}\n >\n <RouterProvider navigate={navigate} useHref={useHref}>\n <RAAutocomplete filter={contains}>\n <RASearchField\n className={clsx(\n classNames.searchField,\n styles[classNames.searchField],\n )}\n >\n <RAInput\n className={clsx(\n classNames.searchFieldInput,\n styles[classNames.searchFieldInput],\n )}\n aria-label=\"Search\"\n placeholder={props.placeholder || 'Search...'}\n />\n <RAButton\n className={clsx(\n classNames.searchFieldClear,\n styles[classNames.searchFieldClear],\n )}\n >\n <RiCloseCircleLine />\n </RAButton>\n </RASearchField>\n {virtualized ? (\n <Virtualizer\n layout={ListLayout}\n layoutOptions={{\n rowHeight,\n }}\n >\n {menuContent}\n </Virtualizer>\n ) : (\n menuContent\n )}\n </RAAutocomplete>\n </RouterProvider>\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuAutocompleteListbox = (\n props: MenuAutocompleteListBoxProps<object>,\n) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n const {\n selectionMode = 'single',\n placement = 'bottom start',\n virtualized = false,\n maxWidth,\n maxHeight,\n style,\n ...rest\n } = cleanedProps;\n const { contains } = useFilter({ sensitivity: 'base' });\n let newMaxWidth = maxWidth || (virtualized ? '260px' : 'undefined');\n\n const listBoxContent = (\n <RAListBox\n className={clsx(classNames.content, styles[classNames.content])}\n renderEmptyState={() => <MenuEmptyState />}\n selectionMode={selectionMode}\n style={{ width: newMaxWidth, maxHeight, ...style }}\n {...rest}\n />\n );\n\n return (\n <RAPopover\n className={clsx(classNames.popover, styles[classNames.popover])}\n placement={placement}\n >\n <RAAutocomplete filter={contains}>\n <RASearchField\n className={clsx(\n classNames.searchField,\n styles[classNames.searchField],\n )}\n >\n <RAInput\n className={clsx(\n classNames.searchFieldInput,\n styles[classNames.searchFieldInput],\n )}\n aria-label=\"Search\"\n placeholder={props.placeholder || 'Search...'}\n />\n <RAButton\n className={clsx(\n classNames.searchFieldClear,\n styles[classNames.searchFieldClear],\n )}\n >\n <RiCloseCircleLine />\n </RAButton>\n </RASearchField>\n {virtualized ? (\n <Virtualizer\n layout={ListLayout}\n layoutOptions={{\n rowHeight,\n }}\n >\n {listBoxContent}\n </Virtualizer>\n ) : (\n listBoxContent\n )}\n </RAAutocomplete>\n </RAPopover>\n );\n};\n\n/** @public */\nexport const MenuItem = (props: MenuItemProps) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n const {\n iconStart,\n color = 'primary',\n children,\n href,\n ...rest\n } = cleanedProps;\n\n const isLink = href !== undefined;\n const isExternal = isExternalLink(href);\n\n if (isLink && isExternal) {\n return (\n <RAMenuItem\n className={clsx(classNames.item, styles[classNames.item])}\n data-color={color}\n textValue={typeof children === 'string' ? children : undefined}\n onAction={() => window.open(href, '_blank', 'noopener,noreferrer')}\n {...rest}\n >\n <div\n className={clsx(\n classNames.itemWrapper,\n styles[classNames.itemWrapper],\n )}\n >\n <div\n className={clsx(\n classNames.itemContent,\n styles[classNames.itemContent],\n )}\n >\n {iconStart}\n {children}\n </div>\n <div\n className={clsx(classNames.itemArrow, styles[classNames.itemArrow])}\n >\n <RiArrowRightSLine />\n </div>\n </div>\n </RAMenuItem>\n );\n }\n\n return (\n <RAMenuItem\n className={clsx(classNames.item, styles[classNames.item])}\n data-color={color}\n href={href}\n textValue={typeof children === 'string' ? children : undefined}\n {...rest}\n >\n <div\n className={clsx(classNames.itemWrapper, styles[classNames.itemWrapper])}\n >\n <div\n className={clsx(\n classNames.itemContent,\n styles[classNames.itemContent],\n )}\n >\n {iconStart}\n {children}\n </div>\n <div\n className={clsx(classNames.itemArrow, styles[classNames.itemArrow])}\n >\n <RiArrowRightSLine />\n </div>\n </div>\n </RAMenuItem>\n );\n};\n\n/** @public */\nexport const MenuListBoxItem = (props: MenuListBoxItemProps) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n const { children, ...rest } = cleanedProps;\n\n return (\n <RAListBoxItem\n textValue={\n typeof props.children === 'string' ? props.children : undefined\n }\n className={clsx(classNames.itemListBox, styles[classNames.itemListBox])}\n {...rest}\n >\n <div\n className={clsx(classNames.itemWrapper, styles[classNames.itemWrapper])}\n >\n <div\n className={clsx(\n classNames.itemContent,\n styles[classNames.itemContent],\n )}\n >\n <div\n className={clsx(\n classNames.itemListBoxCheck,\n styles[classNames.itemListBoxCheck],\n )}\n >\n <RiCheckLine />\n </div>\n {children}\n </div>\n </div>\n </RAListBoxItem>\n );\n};\n\n/** @public */\nexport const MenuSection = (props: MenuSectionProps<object>) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n const { children, title, ...rest } = cleanedProps;\n\n return (\n <RAMenuSection\n className={clsx(classNames.section, styles[classNames.section])}\n {...rest}\n >\n <RAMenuHeader\n className={clsx(\n classNames.sectionHeader,\n styles[classNames.sectionHeader],\n )}\n >\n {title}\n </RAMenuHeader>\n {children}\n </RAMenuSection>\n );\n};\n\n/** @public */\nexport const MenuSeparator = (props: MenuSeparatorProps) => {\n const { classNames, cleanedProps } = useStyles('Menu', props);\n\n return (\n <RAMenuSeparator\n className={clsx(classNames.separator, styles[classNames.separator])}\n {...cleanedProps}\n />\n );\n};\n"],"names":["RAMenuTrigger","RAMenuSubmenuTrigger","RAMenu","RAPopover","RAListBox","RAAutocomplete","RASearchField","RAInput","RAButton","RAMenuItem","RAListBoxItem","RAMenuSection","RAMenuHeader","RAMenuSeparator"],"mappings":"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"}
|