@dxos/react-ui-menu 0.7.5-main.937ce75
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/LICENSE +8 -0
- package/README.md +3 -0
- package/dist/lib/browser/index.mjs +231 -0
- package/dist/lib/browser/index.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -0
- package/dist/lib/node/index.cjs +248 -0
- package/dist/lib/node/index.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -0
- package/dist/lib/node-esm/index.mjs +233 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/types/src/components/ActionLabel.d.ts +7 -0
- package/dist/types/src/components/ActionLabel.d.ts.map +1 -0
- package/dist/types/src/components/DropdownMenu.d.ts +19 -0
- package/dist/types/src/components/DropdownMenu.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +4 -0
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/ToolbarDropdownMenu.d.ts +4 -0
- package/dist/types/src/components/Toolbar/ToolbarDropdownMenu.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/ToolbarToggleGroup.d.ts +4 -0
- package/dist/types/src/components/Toolbar/ToolbarToggleGroup.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/defs.d.ts +30 -0
- package/dist/types/src/components/Toolbar/defs.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/index.d.ts +3 -0
- package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +3 -0
- package/dist/types/src/components/index.d.ts.map +1 -0
- package/dist/types/src/defs.d.ts +18 -0
- package/dist/types/src/defs.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/testing/Menus.stories.d.ts +22 -0
- package/dist/types/src/testing/Menus.stories.d.ts.map +1 -0
- package/dist/types/src/testing/index.d.ts +26 -0
- package/dist/types/src/testing/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +8 -0
- package/dist/types/src/translations.d.ts.map +1 -0
- package/dist/types/src/util.d.ts +4 -0
- package/dist/types/src/util.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +52 -0
- package/src/components/ActionLabel.tsx +30 -0
- package/src/components/DropdownMenu.tsx +104 -0
- package/src/components/Toolbar/Toolbar.tsx +71 -0
- package/src/components/Toolbar/ToolbarDropdownMenu.tsx +36 -0
- package/src/components/Toolbar/ToolbarToggleGroup.tsx +39 -0
- package/src/components/Toolbar/defs.ts +36 -0
- package/src/components/Toolbar/index.ts +6 -0
- package/src/components/index.ts +6 -0
- package/src/defs.ts +23 -0
- package/src/index.ts +6 -0
- package/src/testing/Menus.stories.tsx +55 -0
- package/src/testing/index.ts +92 -0
- package/src/translations.ts +13 -0
- package/src/util.ts +14 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
Copyright (c) 2024 DXOS
|
|
3
|
+
|
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
5
|
+
|
|
6
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
7
|
+
|
|
8
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
// packages/ui/react-ui-menu/src/components/DropdownMenu.tsx
|
|
2
|
+
import { useControllableState } from "@radix-ui/react-use-controllable-state";
|
|
3
|
+
import React2, { useCallback } from "react";
|
|
4
|
+
import { DropdownMenu as NaturalDropdownMenu, Icon } from "@dxos/react-ui";
|
|
5
|
+
|
|
6
|
+
// packages/ui/react-ui-menu/src/components/ActionLabel.tsx
|
|
7
|
+
import React from "react";
|
|
8
|
+
import { keySymbols } from "@dxos/keyboard";
|
|
9
|
+
import { toLocalizedString, useTranslation } from "@dxos/react-ui";
|
|
10
|
+
import { mx, descriptionText } from "@dxos/react-ui-theme";
|
|
11
|
+
|
|
12
|
+
// packages/ui/react-ui-menu/src/translations.ts
|
|
13
|
+
var translationKey = "menus";
|
|
14
|
+
var translations_default = [
|
|
15
|
+
{
|
|
16
|
+
"en-US": {
|
|
17
|
+
[translationKey]: {}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
// packages/ui/react-ui-menu/src/util.ts
|
|
23
|
+
import { getHostPlatform } from "@dxos/util";
|
|
24
|
+
var getShortcut = (action) => {
|
|
25
|
+
return typeof action.properties?.keyBinding === "string" ? action.properties.keyBinding : action.properties?.keyBinding?.[getHostPlatform()];
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// packages/ui/react-ui-menu/src/components/ActionLabel.tsx
|
|
29
|
+
var ActionLabel = ({ action }) => {
|
|
30
|
+
const shortcut = getShortcut(action);
|
|
31
|
+
const { t } = useTranslation(translationKey);
|
|
32
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("span", {
|
|
33
|
+
className: "grow truncate"
|
|
34
|
+
}, toLocalizedString(action.properties.label, t)), shortcut && /* @__PURE__ */ React.createElement("span", {
|
|
35
|
+
className: mx("shrink-0", descriptionText)
|
|
36
|
+
}, keySymbols(shortcut).join("")));
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
// packages/ui/react-ui-menu/src/components/DropdownMenu.tsx
|
|
40
|
+
var DropdownMenuItem = ({ action, onClick }) => {
|
|
41
|
+
const handleClick = useCallback((event) => onClick(action, event), [
|
|
42
|
+
action,
|
|
43
|
+
onClick
|
|
44
|
+
]);
|
|
45
|
+
return /* @__PURE__ */ React2.createElement(NaturalDropdownMenu.Item, {
|
|
46
|
+
onClick: handleClick,
|
|
47
|
+
classNames: "gap-2",
|
|
48
|
+
disabled: action.properties?.disabled,
|
|
49
|
+
...action.properties?.testId && {
|
|
50
|
+
"data-testid": action.properties.testId
|
|
51
|
+
}
|
|
52
|
+
}, action.properties?.icon && /* @__PURE__ */ React2.createElement(Icon, {
|
|
53
|
+
icon: action.properties.icon,
|
|
54
|
+
size: 4
|
|
55
|
+
}), /* @__PURE__ */ React2.createElement(ActionLabel, {
|
|
56
|
+
action
|
|
57
|
+
}));
|
|
58
|
+
};
|
|
59
|
+
var DropdownMenuRoot = ({ defaultMenuOpen, actions, menuOpen, suppressNextTooltip, onMenuOpenChange, onAction, children }) => {
|
|
60
|
+
const [optionsMenuOpen, setOptionsMenuOpen] = useControllableState({
|
|
61
|
+
prop: menuOpen,
|
|
62
|
+
defaultProp: defaultMenuOpen,
|
|
63
|
+
onChange: onMenuOpenChange
|
|
64
|
+
});
|
|
65
|
+
const handleActionClick = useCallback((action, event) => {
|
|
66
|
+
if (action.properties?.disabled) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
event.stopPropagation();
|
|
70
|
+
if (suppressNextTooltip) {
|
|
71
|
+
suppressNextTooltip.current = true;
|
|
72
|
+
}
|
|
73
|
+
setOptionsMenuOpen(false);
|
|
74
|
+
onAction?.(action);
|
|
75
|
+
}, [
|
|
76
|
+
onAction
|
|
77
|
+
]);
|
|
78
|
+
return /* @__PURE__ */ React2.createElement(NaturalDropdownMenu.Root, {
|
|
79
|
+
open: optionsMenuOpen,
|
|
80
|
+
onOpenChange: (nextOpen) => {
|
|
81
|
+
if (!nextOpen && suppressNextTooltip) {
|
|
82
|
+
suppressNextTooltip.current = true;
|
|
83
|
+
}
|
|
84
|
+
return setOptionsMenuOpen(nextOpen);
|
|
85
|
+
}
|
|
86
|
+
}, children, /* @__PURE__ */ React2.createElement(NaturalDropdownMenu.Portal, null, /* @__PURE__ */ React2.createElement(NaturalDropdownMenu.Content, null, /* @__PURE__ */ React2.createElement(NaturalDropdownMenu.Viewport, null, actions?.map((action) => /* @__PURE__ */ React2.createElement(DropdownMenuItem, {
|
|
87
|
+
key: action.id,
|
|
88
|
+
action,
|
|
89
|
+
onClick: handleActionClick
|
|
90
|
+
}))), /* @__PURE__ */ React2.createElement(NaturalDropdownMenu.Arrow, null))));
|
|
91
|
+
};
|
|
92
|
+
var DropdownMenu = {
|
|
93
|
+
Root: DropdownMenuRoot,
|
|
94
|
+
Trigger: NaturalDropdownMenu.Trigger,
|
|
95
|
+
VirtualTrigger: NaturalDropdownMenu.VirtualTrigger
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
// packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx
|
|
99
|
+
import React5, { useCallback as useCallback2 } from "react";
|
|
100
|
+
import { Toolbar as NaturalToolbar3 } from "@dxos/react-ui";
|
|
101
|
+
|
|
102
|
+
// packages/ui/react-ui-menu/src/components/Toolbar/ToolbarDropdownMenu.tsx
|
|
103
|
+
import React3, { useMemo, useRef } from "react";
|
|
104
|
+
import { Toolbar as NaturalToolbar } from "@dxos/react-ui";
|
|
105
|
+
var ToolbarDropdownMenu = ({ actionGroup, graph, onAction, applyActiveIcon }) => {
|
|
106
|
+
const menuActions = useMemo(() => graph ? graph.actions(actionGroup) : [], [
|
|
107
|
+
actionGroup,
|
|
108
|
+
graph
|
|
109
|
+
]);
|
|
110
|
+
const { icon, iconOnly = true, disabled, testId } = actionGroup.properties;
|
|
111
|
+
const suppressNextTooltip = useRef(false);
|
|
112
|
+
return /* @__PURE__ */ React3.createElement(DropdownMenu.Root, {
|
|
113
|
+
actions: menuActions,
|
|
114
|
+
onAction,
|
|
115
|
+
suppressNextTooltip
|
|
116
|
+
}, /* @__PURE__ */ React3.createElement(DropdownMenu.Trigger, {
|
|
117
|
+
asChild: true
|
|
118
|
+
}, /* @__PURE__ */ React3.createElement(NaturalToolbar.IconButton, {
|
|
119
|
+
size: 5,
|
|
120
|
+
variant: "ghost",
|
|
121
|
+
iconOnly,
|
|
122
|
+
disabled,
|
|
123
|
+
icon: applyActiveIcon && menuActions.find((action) => !!action.properties.checked)?.properties.icon || icon,
|
|
124
|
+
label: /* @__PURE__ */ React3.createElement(ActionLabel, {
|
|
125
|
+
action: actionGroup
|
|
126
|
+
}),
|
|
127
|
+
...testId && {
|
|
128
|
+
"data-testid": testId
|
|
129
|
+
},
|
|
130
|
+
suppressNextTooltip,
|
|
131
|
+
caretDown: true
|
|
132
|
+
})));
|
|
133
|
+
};
|
|
134
|
+
|
|
135
|
+
// packages/ui/react-ui-menu/src/components/Toolbar/ToolbarToggleGroup.tsx
|
|
136
|
+
import React4, { useMemo as useMemo2 } from "react";
|
|
137
|
+
import { Toolbar as NaturalToolbar2 } from "@dxos/react-ui";
|
|
138
|
+
var ToolbarToggleGroupItem = ({ action }) => {
|
|
139
|
+
const { icon, iconOnly, disabled } = action.properties;
|
|
140
|
+
return /* @__PURE__ */ React4.createElement(NaturalToolbar2.ToggleGroupIconItem, {
|
|
141
|
+
key: action.id,
|
|
142
|
+
value: action.id,
|
|
143
|
+
icon,
|
|
144
|
+
iconOnly,
|
|
145
|
+
disabled,
|
|
146
|
+
label: /* @__PURE__ */ React4.createElement(ActionLabel, {
|
|
147
|
+
action
|
|
148
|
+
})
|
|
149
|
+
});
|
|
150
|
+
};
|
|
151
|
+
var ToolbarToggleGroup = ({ actionGroup, graph }) => {
|
|
152
|
+
const menuActions = useMemo2(() => graph ? graph.actions(actionGroup) : [], [
|
|
153
|
+
actionGroup,
|
|
154
|
+
graph
|
|
155
|
+
]);
|
|
156
|
+
const { selectCardinality, value } = actionGroup.properties;
|
|
157
|
+
return (
|
|
158
|
+
// TODO(thure): This is extremely difficult to manage, what do?
|
|
159
|
+
// @ts-ignore
|
|
160
|
+
/* @__PURE__ */ React4.createElement(NaturalToolbar2.ToggleGroup, {
|
|
161
|
+
type: selectCardinality,
|
|
162
|
+
value
|
|
163
|
+
}, menuActions.map((action) => /* @__PURE__ */ React4.createElement(ToolbarToggleGroupItem, {
|
|
164
|
+
key: action.id,
|
|
165
|
+
action
|
|
166
|
+
})))
|
|
167
|
+
);
|
|
168
|
+
};
|
|
169
|
+
|
|
170
|
+
// packages/ui/react-ui-menu/src/components/Toolbar/defs.ts
|
|
171
|
+
import { ACTION_GROUP_TYPE } from "@dxos/app-graph";
|
|
172
|
+
var ToolbarSeparatorType = "@dxos/react-ui-toolbar/separator";
|
|
173
|
+
var isSeparator = (node) => node.type === ToolbarSeparatorType;
|
|
174
|
+
var isMenu = (node) => node.type === ACTION_GROUP_TYPE;
|
|
175
|
+
|
|
176
|
+
// packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx
|
|
177
|
+
var ToolbarItem = ({ iconSize, action, onAction }) => {
|
|
178
|
+
const handleClick = useCallback2(() => {
|
|
179
|
+
onAction?.(action);
|
|
180
|
+
}, [
|
|
181
|
+
action,
|
|
182
|
+
onAction
|
|
183
|
+
]);
|
|
184
|
+
const { icon, iconOnly = true, disabled, testId } = action.properties;
|
|
185
|
+
return /* @__PURE__ */ React5.createElement(NaturalToolbar3.IconButton, {
|
|
186
|
+
key: action.id,
|
|
187
|
+
iconOnly,
|
|
188
|
+
variant: "ghost",
|
|
189
|
+
icon,
|
|
190
|
+
size: iconSize,
|
|
191
|
+
label: /* @__PURE__ */ React5.createElement(ActionLabel, {
|
|
192
|
+
action
|
|
193
|
+
}),
|
|
194
|
+
disabled,
|
|
195
|
+
onClick: handleClick,
|
|
196
|
+
...testId && {
|
|
197
|
+
"data-testid": testId
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
};
|
|
201
|
+
var Toolbar = ({ actions: items, onAction, iconSize = 5, graph, ...props }) => {
|
|
202
|
+
return /* @__PURE__ */ React5.createElement(NaturalToolbar3.Root, props, items?.map((item, i) => isSeparator(item) ? /* @__PURE__ */ React5.createElement(NaturalToolbar3.Separator, {
|
|
203
|
+
key: i,
|
|
204
|
+
variant: item.properties.variant
|
|
205
|
+
}) : isMenu(item) ? item.properties.variant === "dropdownMenu" ? /* @__PURE__ */ React5.createElement(ToolbarDropdownMenu, {
|
|
206
|
+
key: item.id,
|
|
207
|
+
actionGroup: item,
|
|
208
|
+
onAction,
|
|
209
|
+
iconSize,
|
|
210
|
+
graph
|
|
211
|
+
}) : /* @__PURE__ */ React5.createElement(ToolbarToggleGroup, {
|
|
212
|
+
key: item.id,
|
|
213
|
+
actionGroup: item,
|
|
214
|
+
onAction,
|
|
215
|
+
iconSize,
|
|
216
|
+
graph
|
|
217
|
+
}) : /* @__PURE__ */ React5.createElement(ToolbarItem, {
|
|
218
|
+
key: item.id,
|
|
219
|
+
action: item,
|
|
220
|
+
onAction,
|
|
221
|
+
iconSize
|
|
222
|
+
})));
|
|
223
|
+
};
|
|
224
|
+
export {
|
|
225
|
+
DropdownMenu,
|
|
226
|
+
Toolbar,
|
|
227
|
+
ToolbarSeparatorType,
|
|
228
|
+
isMenu,
|
|
229
|
+
isSeparator
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/DropdownMenu.tsx", "../../../src/components/ActionLabel.tsx", "../../../src/translations.ts", "../../../src/util.ts", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/Toolbar/ToolbarDropdownMenu.tsx", "../../../src/components/Toolbar/ToolbarToggleGroup.tsx", "../../../src/components/Toolbar/defs.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type MouseEvent, type MutableRefObject, type PropsWithChildren, useCallback } from 'react';\n\nimport { DropdownMenu as NaturalDropdownMenu, Icon } from '@dxos/react-ui';\n\nimport { ActionLabel } from './ActionLabel';\nimport { type MenuAction, type MenuProps } from '../defs';\n\nexport type DropdownMenuProps = MenuProps &\n PropsWithChildren<\n Partial<{\n defaultMenuOpen: boolean;\n menuOpen: boolean;\n onMenuOpenChange: (nextOpen: boolean) => void;\n suppressNextTooltip?: MutableRefObject<boolean>;\n }>\n >;\n\nconst DropdownMenuItem = ({\n action,\n onClick,\n}: {\n action: MenuAction;\n onClick: (action: MenuAction, event: MouseEvent) => void;\n}) => {\n const handleClick = useCallback((event: MouseEvent) => onClick(action, event), [action, onClick]);\n return (\n <NaturalDropdownMenu.Item\n onClick={handleClick}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties!.icon} size={4} />}\n <ActionLabel action={action} />\n </NaturalDropdownMenu.Item>\n );\n};\n\nconst DropdownMenuRoot = ({\n defaultMenuOpen,\n actions,\n menuOpen,\n suppressNextTooltip,\n onMenuOpenChange,\n onAction,\n children,\n}: DropdownMenuProps) => {\n const [optionsMenuOpen, setOptionsMenuOpen] = useControllableState({\n prop: menuOpen,\n defaultProp: defaultMenuOpen,\n onChange: onMenuOpenChange,\n });\n\n const handleActionClick = useCallback(\n (action: MenuAction, event: MouseEvent) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n },\n [onAction],\n );\n\n return (\n <NaturalDropdownMenu.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n {children}\n <NaturalDropdownMenu.Portal>\n <NaturalDropdownMenu.Content>\n <NaturalDropdownMenu.Viewport>\n {actions?.map((action) => <DropdownMenuItem key={action.id} action={action} onClick={handleActionClick} />)}\n </NaturalDropdownMenu.Viewport>\n <NaturalDropdownMenu.Arrow />\n </NaturalDropdownMenu.Content>\n </NaturalDropdownMenu.Portal>\n </NaturalDropdownMenu.Root>\n );\n};\n\nexport const DropdownMenu = {\n Root: DropdownMenuRoot,\n Trigger: NaturalDropdownMenu.Trigger,\n VirtualTrigger: NaturalDropdownMenu.VirtualTrigger,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Action, type ActionGroup } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { mx, descriptionText } from '@dxos/react-ui-theme';\n\nimport { type MenuActionProperties } from '../defs';\nimport { translationKey } from '../translations';\nimport { getShortcut } from '../util';\n\nexport const ActionLabel = ({\n action,\n}: {\n action: Action<MenuActionProperties> | ActionGroup<Omit<MenuActionProperties, 'variant'>>;\n}) => {\n const shortcut = getShortcut(action);\n const { t } = useTranslation(translationKey);\n\n return (\n <>\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'menus';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {},\n },\n },\n] as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ActionLike } from '@dxos/app-graph';\nimport { getHostPlatform } from '@dxos/util';\n\nexport const getShortcut = (action: ActionLike) => {\n return typeof action.properties?.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties?.keyBinding?.[getHostPlatform()];\n};\n\nexport const fallbackIcon = 'ph--placeholder--regular';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Toolbar as NaturalToolbar } from '@dxos/react-ui';\n\nimport { ToolbarDropdownMenu } from './ToolbarDropdownMenu';\nimport { ToolbarToggleGroup } from './ToolbarToggleGroup';\nimport { isMenu, isSeparator, type ToolbarProps } from './defs';\nimport { type MenuAction } from '../../defs';\nimport { ActionLabel } from '../ActionLabel';\n\nconst ToolbarItem = ({\n iconSize,\n action,\n onAction,\n}: Pick<ToolbarProps, 'iconSize' | 'onAction'> & {\n action: MenuAction;\n}) => {\n const handleClick = useCallback(() => {\n onAction?.(action);\n }, [action, onAction]);\n const { icon, iconOnly = true, disabled, testId } = action.properties;\n return (\n <NaturalToolbar.IconButton\n key={action.id}\n iconOnly={iconOnly}\n variant='ghost'\n icon={icon}\n size={iconSize}\n label={<ActionLabel action={action} />}\n disabled={disabled}\n onClick={handleClick}\n {...(testId && { 'data-testid': testId })}\n />\n );\n};\n\nexport const Toolbar = ({ actions: items, onAction, iconSize = 5, graph, ...props }: ToolbarProps) => {\n return (\n <NaturalToolbar.Root {...props}>\n {items?.map((item, i) =>\n isSeparator(item) ? (\n <NaturalToolbar.Separator key={i} variant={item.properties.variant} />\n ) : isMenu(item) ? (\n item.properties.variant === 'dropdownMenu' ? (\n <ToolbarDropdownMenu\n key={item.id}\n actionGroup={item}\n onAction={onAction}\n iconSize={iconSize}\n graph={graph}\n />\n ) : (\n <ToolbarToggleGroup\n key={item.id}\n actionGroup={item}\n onAction={onAction}\n iconSize={iconSize}\n graph={graph}\n />\n )\n ) : (\n <ToolbarItem key={item.id} action={item as MenuAction} onAction={onAction} iconSize={iconSize} />\n ),\n )}\n </NaturalToolbar.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo, useRef } from 'react';\n\nimport { Toolbar as NaturalToolbar } from '@dxos/react-ui';\n\nimport { type ToolbarActionGroupProps } from './defs';\nimport { type MenuAction } from '../../defs';\nimport { ActionLabel } from '../ActionLabel';\nimport { DropdownMenu } from '../DropdownMenu';\n\nexport const ToolbarDropdownMenu = ({ actionGroup, graph, onAction, applyActiveIcon }: ToolbarActionGroupProps) => {\n const menuActions = useMemo(() => (graph ? graph.actions(actionGroup) : []) as MenuAction[], [actionGroup, graph]);\n const { icon, iconOnly = true, disabled, testId } = actionGroup.properties;\n const suppressNextTooltip = useRef(false);\n\n return (\n <DropdownMenu.Root actions={menuActions} onAction={onAction} suppressNextTooltip={suppressNextTooltip}>\n <DropdownMenu.Trigger asChild>\n <NaturalToolbar.IconButton\n size={5}\n variant='ghost'\n iconOnly={iconOnly}\n disabled={disabled}\n icon={(applyActiveIcon && menuActions.find((action) => !!action.properties.checked)?.properties.icon) || icon}\n label={<ActionLabel action={actionGroup} />}\n {...(testId && { 'data-testid': testId })}\n suppressNextTooltip={suppressNextTooltip}\n caretDown\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Toolbar as NaturalToolbar } from '@dxos/react-ui';\n\nimport type { ToolbarActionGroupProps } from './defs';\nimport { type MenuAction } from '../../defs';\nimport { ActionLabel } from '../ActionLabel';\n\nconst ToolbarToggleGroupItem = ({ action }: { action: MenuAction }) => {\n const { icon, iconOnly, disabled } = action.properties;\n return (\n <NaturalToolbar.ToggleGroupIconItem\n key={action.id}\n value={action.id}\n icon={icon}\n iconOnly={iconOnly}\n disabled={disabled}\n label={<ActionLabel action={action} />}\n />\n );\n};\n\nexport const ToolbarToggleGroup = ({ actionGroup, graph }: ToolbarActionGroupProps) => {\n const menuActions = useMemo(() => (graph ? (graph.actions(actionGroup) as MenuAction[]) : []), [actionGroup, graph]);\n const { selectCardinality, value } = actionGroup.properties;\n return (\n // TODO(thure): This is extremely difficult to manage, what do?\n // @ts-ignore\n <NaturalToolbar.ToggleGroup type={selectCardinality} value={value}>\n {menuActions.map((action) => (\n <ToolbarToggleGroupItem key={action.id} action={action} />\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Node, type ActionGroup, type Graph, ACTION_GROUP_TYPE } from '@dxos/app-graph';\nimport { type ToolbarRootProps, type ToolbarSeparatorProps, type IconButtonProps } from '@dxos/react-ui';\n\nimport { type MenuAction, type MenuActionProperties, type MenuProps } from '../../defs';\n\nexport const ToolbarSeparatorType = '@dxos/react-ui-toolbar/separator' as const;\n\nexport type ToolbarSeparatorNode = Node<never, Pick<ToolbarSeparatorProps, 'variant'>> & {\n type: typeof ToolbarSeparatorType;\n};\n\nexport const isSeparator = (node: Node): node is ToolbarSeparatorNode => node.type === ToolbarSeparatorType;\n\nexport type ToolbarActionGroupProperties = Omit<MenuActionProperties, 'variant'> & {\n variant: 'dropdownMenu' | 'toggleGroup';\n} & ({ selectCardinality?: 'single'; value?: string } | { selectCardinality?: 'multiple'; value?: string[] });\n\nexport type ToolbarActionGroup = ActionGroup<ToolbarActionGroupProperties>;\n\nexport const isMenu = (node: Node): node is ToolbarActionGroup => node.type === ACTION_GROUP_TYPE;\n\nexport type ToolbarItem = ToolbarSeparatorNode | MenuAction | ToolbarActionGroup;\n\nexport type ToolbarProps = ToolbarRootProps &\n MenuProps<ToolbarItem, MenuAction> & { iconSize?: IconButtonProps['size']; graph?: Graph };\n\nexport type ToolbarActionGroupProps = Pick<ToolbarProps, 'iconSize'> &\n Omit<MenuProps<MenuAction>, 'actions'> & {\n actionGroup: ToolbarActionGroup;\n graph?: Graph;\n applyActiveIcon?: boolean;\n };\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,4BAA4B;AACrC,OAAOC,UAAyEC,mBAAmB;AAEnG,SAASC,gBAAgBC,qBAAqBC,YAAY;;;ACH1D,OAAOC,WAAW;AAGlB,SAASC,kBAAkB;AAC3B,SAASC,mBAAmBC,sBAAsB;AAClD,SAASC,IAAIC,uBAAuB;;;ACL7B,IAAMC,iBAAiB;AAE9B,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACA,cAAAA,GAAiB,CAAC;IACrB;EACF;;;;ACNF,SAASC,uBAAuB;AAEzB,IAAMC,cAAc,CAACC,WAAAA;AAC1B,SAAO,OAAOA,OAAOC,YAAYC,eAAe,WAC5CF,OAAOC,WAAWC,aAClBF,OAAOC,YAAYC,aAAaC,gBAAAA,CAAAA;AACtC;;;AFIO,IAAMC,cAAc,CAAC,EAC1BC,OAAM,MAGP;AACC,QAAMC,WAAWC,YAAYF,MAAAA;AAC7B,QAAM,EAAEG,EAAC,IAAKC,eAAeC,cAAAA;AAE7B,SACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACC,QAAAA;IAAKC,WAAU;KAAiBC,kBAAkBR,OAAOS,WAAYC,OAAOP,CAAAA,CAAAA,GAC5EF,YAAY,sBAAA,cAACK,QAAAA;IAAKC,WAAWI,GAAG,YAAYC,eAAAA;KAAmBC,WAAWZ,QAAAA,EAAUa,KAAK,EAAA,CAAA,CAAA;AAGhG;;;ADPA,IAAMC,mBAAmB,CAAC,EACxBC,QACAC,QAAO,MAIR;AACC,QAAMC,cAAcC,YAAY,CAACC,UAAsBH,QAAQD,QAAQI,KAAAA,GAAQ;IAACJ;IAAQC;GAAQ;AAChG,SACE,gBAAAI,OAAA,cAACC,oBAAoBC,MAAI;IACvBN,SAASC;IACTM,YAAW;IACXC,UAAUT,OAAOU,YAAYD;IAC5B,GAAIT,OAAOU,YAAYC,UAAU;MAAE,eAAeX,OAAOU,WAAWC;IAAO;KAE3EX,OAAOU,YAAYE,QAAQ,gBAAAP,OAAA,cAACQ,MAAAA;IAAKD,MAAMZ,OAAOU,WAAYE;IAAME,MAAM;MACvE,gBAAAT,OAAA,cAACU,aAAAA;IAAYf;;AAGnB;AAEA,IAAMgB,mBAAmB,CAAC,EACxBC,iBACAC,SACAC,UACAC,qBACAC,kBACAC,UACAC,SAAQ,MACU;AAClB,QAAM,CAACC,iBAAiBC,kBAAAA,IAAsBC,qBAAqB;IACjEC,MAAMR;IACNS,aAAaX;IACbY,UAAUR;EACZ,CAAA;AAEA,QAAMS,oBAAoB3B,YACxB,CAACH,QAAoBI,UAAAA;AACnB,QAAIJ,OAAOU,YAAYD,UAAU;AAC/B;IACF;AACAL,UAAM2B,gBAAe;AAErB,QAAIX,qBAAqB;AACvBA,0BAAoBY,UAAU;IAChC;AACAP,uBAAmB,KAAA;AACnBH,eAAWtB,MAAAA;EACb,GACA;IAACsB;GAAS;AAGZ,SACE,gBAAAjB,OAAA,cAACC,oBAAoB2B,MACf;IACFC,MAAMV;IACNW,cAAc,CAACC,aAAAA;AACb,UAAI,CAACA,YAAYhB,qBAAqB;AACpCA,4BAAoBY,UAAU;MAChC;AACA,aAAOP,mBAAmBW,QAAAA;IAC5B;EACF,GAECb,UACD,gBAAAlB,OAAA,cAACC,oBAAoB+B,QAAM,MACzB,gBAAAhC,OAAA,cAACC,oBAAoBgC,SAAO,MAC1B,gBAAAjC,OAAA,cAACC,oBAAoBiC,UAAQ,MAC1BrB,SAASsB,IAAI,CAACxC,WAAW,gBAAAK,OAAA,cAACN,kBAAAA;IAAiB0C,KAAKzC,OAAO0C;IAAI1C;IAAgBC,SAAS6B;QAEvF,gBAAAzB,OAAA,cAACC,oBAAoBqC,OAAK,IAAA,CAAA,CAAA,CAAA;AAKpC;AAEO,IAAMC,eAAe;EAC1BX,MAAMjB;EACN6B,SAASvC,oBAAoBuC;EAC7BC,gBAAgBxC,oBAAoBwC;AACtC;;;AInGA,OAAOC,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,WAAWC,uBAAsB;;;ACF1C,OAAOC,UAASC,SAASC,cAAc;AAEvC,SAASC,WAAWC,sBAAsB;AAOnC,IAAMC,sBAAsB,CAAC,EAAEC,aAAaC,OAAOC,UAAUC,gBAAe,MAA2B;AAC5G,QAAMC,cAAcC,QAAQ,MAAOJ,QAAQA,MAAMK,QAAQN,WAAAA,IAAe,CAAA,GAAqB;IAACA;IAAaC;GAAM;AACjH,QAAM,EAAEM,MAAMC,WAAW,MAAMC,UAAUC,OAAM,IAAKV,YAAYW;AAChE,QAAMC,sBAAsBC,OAAO,KAAA;AAEnC,SACE,gBAAAC,OAAA,cAACC,aAAaC,MAAI;IAACV,SAASF;IAAaF;IAAoBU;KAC3D,gBAAAE,OAAA,cAACC,aAAaE,SAAO;IAACC,SAAAA;KACpB,gBAAAJ,OAAA,cAACK,eAAeC,YAAU;IACxBC,MAAM;IACNC,SAAQ;IACRd;IACAC;IACAF,MAAOJ,mBAAmBC,YAAYmB,KAAK,CAACC,WAAW,CAAC,CAACA,OAAOb,WAAWc,OAAO,GAAGd,WAAWJ,QAASA;IACzGmB,OAAO,gBAAAZ,OAAA,cAACa,aAAAA;MAAYH,QAAQxB;;IAC3B,GAAIU,UAAU;MAAE,eAAeA;IAAO;IACvCE;IACAgB,WAAAA;;AAKV;;;AC/BA,OAAOC,UAASC,WAAAA,gBAAe;AAE/B,SAASC,WAAWC,uBAAsB;AAM1C,IAAMC,yBAAyB,CAAC,EAAEC,OAAM,MAA0B;AAChE,QAAM,EAAEC,MAAMC,UAAUC,SAAQ,IAAKH,OAAOI;AAC5C,SACE,gBAAAC,OAAA,cAACC,gBAAeC,qBAAmB;IACjCC,KAAKR,OAAOS;IACZC,OAAOV,OAAOS;IACdR;IACAC;IACAC;IACAQ,OAAO,gBAAAN,OAAA,cAACO,aAAAA;MAAYZ;;;AAG1B;AAEO,IAAMa,qBAAqB,CAAC,EAAEC,aAAaC,MAAK,MAA2B;AAChF,QAAMC,cAAcC,SAAQ,MAAOF,QAASA,MAAMG,QAAQJ,WAAAA,IAAgC,CAAA,GAAK;IAACA;IAAaC;GAAM;AACnH,QAAM,EAAEI,mBAAmBT,MAAK,IAAKI,YAAYV;AACjD;;;IAGE,gBAAAC,OAAA,cAACC,gBAAec,aAAW;MAACC,MAAMF;MAAmBT;OAClDM,YAAYM,IAAI,CAACtB,WAChB,gBAAAK,OAAA,cAACN,wBAAAA;MAAuBS,KAAKR,OAAOS;MAAIT;;;AAIhD;;;AClCA,SAAkDuB,yBAAyB;AAKpE,IAAMC,uBAAuB;AAM7B,IAAMC,cAAc,CAACC,SAA6CA,KAAKC,SAASH;AAQhF,IAAMI,SAAS,CAACF,SAA2CA,KAAKC,SAASE;;;AHThF,IAAMC,cAAc,CAAC,EACnBC,UACAC,QACAC,SAAQ,MAGT;AACC,QAAMC,cAAcC,aAAY,MAAA;AAC9BF,eAAWD,MAAAA;EACb,GAAG;IAACA;IAAQC;GAAS;AACrB,QAAM,EAAEG,MAAMC,WAAW,MAAMC,UAAUC,OAAM,IAAKP,OAAOQ;AAC3D,SACE,gBAAAC,OAAA,cAACC,gBAAeC,YAAU;IACxBC,KAAKZ,OAAOa;IACZR;IACAS,SAAQ;IACRV;IACAW,MAAMhB;IACNiB,OAAO,gBAAAP,OAAA,cAACQ,aAAAA;MAAYjB;;IACpBM;IACAY,SAAShB;IACR,GAAIK,UAAU;MAAE,eAAeA;IAAO;;AAG7C;AAEO,IAAMY,UAAU,CAAC,EAAEC,SAASC,OAAOpB,UAAUF,WAAW,GAAGuB,OAAO,GAAGC,MAAAA,MAAqB;AAC/F,SACE,gBAAAd,OAAA,cAACC,gBAAec,MAASD,OACtBF,OAAOI,IAAI,CAACC,MAAMC,MACjBC,YAAYF,IAAAA,IACV,gBAAAjB,OAAA,cAACC,gBAAemB,WAAS;IAACjB,KAAKe;IAAGb,SAASY,KAAKlB,WAAWM;OACzDgB,OAAOJ,IAAAA,IACTA,KAAKlB,WAAWM,YAAY,iBAC1B,gBAAAL,OAAA,cAACsB,qBAAAA;IACCnB,KAAKc,KAAKb;IACVmB,aAAaN;IACbzB;IACAF;IACAuB;OAGF,gBAAAb,OAAA,cAACwB,oBAAAA;IACCrB,KAAKc,KAAKb;IACVmB,aAAaN;IACbzB;IACAF;IACAuB;OAIJ,gBAAAb,OAAA,cAACX,aAAAA;IAAYc,KAAKc,KAAKb;IAAIb,QAAQ0B;IAAoBzB;IAAoBF;;AAKrF;",
|
|
6
|
+
"names": ["useControllableState", "React", "useCallback", "DropdownMenu", "NaturalDropdownMenu", "Icon", "React", "keySymbols", "toLocalizedString", "useTranslation", "mx", "descriptionText", "translationKey", "getHostPlatform", "getShortcut", "action", "properties", "keyBinding", "getHostPlatform", "ActionLabel", "action", "shortcut", "getShortcut", "t", "useTranslation", "translationKey", "span", "className", "toLocalizedString", "properties", "label", "mx", "descriptionText", "keySymbols", "join", "DropdownMenuItem", "action", "onClick", "handleClick", "useCallback", "event", "React", "NaturalDropdownMenu", "Item", "classNames", "disabled", "properties", "testId", "icon", "Icon", "size", "ActionLabel", "DropdownMenuRoot", "defaultMenuOpen", "actions", "menuOpen", "suppressNextTooltip", "onMenuOpenChange", "onAction", "children", "optionsMenuOpen", "setOptionsMenuOpen", "useControllableState", "prop", "defaultProp", "onChange", "handleActionClick", "stopPropagation", "current", "Root", "open", "onOpenChange", "nextOpen", "Portal", "Content", "Viewport", "map", "key", "id", "Arrow", "DropdownMenu", "Trigger", "VirtualTrigger", "React", "useCallback", "Toolbar", "NaturalToolbar", "React", "useMemo", "useRef", "Toolbar", "NaturalToolbar", "ToolbarDropdownMenu", "actionGroup", "graph", "onAction", "applyActiveIcon", "menuActions", "useMemo", "actions", "icon", "iconOnly", "disabled", "testId", "properties", "suppressNextTooltip", "useRef", "React", "DropdownMenu", "Root", "Trigger", "asChild", "NaturalToolbar", "IconButton", "size", "variant", "find", "action", "checked", "label", "ActionLabel", "caretDown", "React", "useMemo", "Toolbar", "NaturalToolbar", "ToolbarToggleGroupItem", "action", "icon", "iconOnly", "disabled", "properties", "React", "NaturalToolbar", "ToggleGroupIconItem", "key", "id", "value", "label", "ActionLabel", "ToolbarToggleGroup", "actionGroup", "graph", "menuActions", "useMemo", "actions", "selectCardinality", "ToggleGroup", "type", "map", "ACTION_GROUP_TYPE", "ToolbarSeparatorType", "isSeparator", "node", "type", "isMenu", "ACTION_GROUP_TYPE", "ToolbarItem", "iconSize", "action", "onAction", "handleClick", "useCallback", "icon", "iconOnly", "disabled", "testId", "properties", "React", "NaturalToolbar", "IconButton", "key", "id", "variant", "size", "label", "ActionLabel", "onClick", "Toolbar", "actions", "items", "graph", "props", "Root", "map", "item", "i", "isSeparator", "Separator", "isMenu", "ToolbarDropdownMenu", "actionGroup", "ToolbarToggleGroup"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"packages/ui/react-ui-menu/src/translations.ts":{"bytes":909,"imports":[],"format":"esm"},"packages/ui/react-ui-menu/src/util.ts":{"bytes":1578,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/components/ActionLabel.tsx":{"bytes":3310,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/translations.ts","kind":"import-statement","original":"../translations"},{"path":"packages/ui/react-ui-menu/src/util.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx":{"bytes":9986,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"./ActionLabel"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarDropdownMenu.tsx":{"bytes":5223,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"../ActionLabel"},{"path":"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx","kind":"import-statement","original":"../DropdownMenu"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarToggleGroup.tsx":{"bytes":4731,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"../ActionLabel"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts":{"bytes":3030,"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx":{"bytes":7348,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarDropdownMenu.tsx","kind":"import-statement","original":"./ToolbarDropdownMenu"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarToggleGroup.tsx","kind":"import-statement","original":"./ToolbarToggleGroup"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"../ActionLabel"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/index.ts":{"bytes":595,"imports":[{"path":"packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx","kind":"import-statement","original":"./Toolbar"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts","kind":"import-statement","original":"./defs"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/index.ts":{"bytes":607,"imports":[{"path":"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx","kind":"import-statement","original":"./DropdownMenu"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/index.ts","kind":"import-statement","original":"./Toolbar"}],"format":"esm"},"packages/ui/react-ui-menu/src/defs.ts":{"bytes":1144,"imports":[],"format":"esm"},"packages/ui/react-ui-menu/src/index.ts":{"bytes":583,"imports":[{"path":"packages/ui/react-ui-menu/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-menu/src/defs.ts","kind":"import-statement","original":"./defs"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-menu/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18403},"packages/ui/react-ui-menu/dist/lib/browser/index.mjs":{"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true}],"exports":["DropdownMenu","Toolbar","ToolbarSeparatorType","isMenu","isSeparator"],"entryPoint":"packages/ui/react-ui-menu/src/index.ts","inputs":{"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx":{"bytesInOutput":2296},"packages/ui/react-ui-menu/src/components/ActionLabel.tsx":{"bytesInOutput":667},"packages/ui/react-ui-menu/src/translations.ts":{"bytesInOutput":118},"packages/ui/react-ui-menu/src/util.ts":{"bytesInOutput":225},"packages/ui/react-ui-menu/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx":{"bytesInOutput":1503},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarDropdownMenu.tsx":{"bytesInOutput":1096},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarToggleGroup.tsx":{"bytesInOutput":1069},"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts":{"bytesInOutput":236},"packages/ui/react-ui-menu/src/components/Toolbar/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-menu/src/index.ts":{"bytesInOutput":0}},"bytes":8013}}}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var node_exports = {};
|
|
30
|
+
__export(node_exports, {
|
|
31
|
+
DropdownMenu: () => DropdownMenu,
|
|
32
|
+
Toolbar: () => Toolbar,
|
|
33
|
+
ToolbarSeparatorType: () => ToolbarSeparatorType,
|
|
34
|
+
isMenu: () => isMenu,
|
|
35
|
+
isSeparator: () => isSeparator
|
|
36
|
+
});
|
|
37
|
+
module.exports = __toCommonJS(node_exports);
|
|
38
|
+
var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
|
|
39
|
+
var import_react = __toESM(require("react"));
|
|
40
|
+
var import_react_ui = require("@dxos/react-ui");
|
|
41
|
+
var import_react2 = __toESM(require("react"));
|
|
42
|
+
var import_keyboard = require("@dxos/keyboard");
|
|
43
|
+
var import_react_ui2 = require("@dxos/react-ui");
|
|
44
|
+
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
45
|
+
var import_util = require("@dxos/util");
|
|
46
|
+
var import_react3 = __toESM(require("react"));
|
|
47
|
+
var import_react_ui3 = require("@dxos/react-ui");
|
|
48
|
+
var import_react4 = __toESM(require("react"));
|
|
49
|
+
var import_react_ui4 = require("@dxos/react-ui");
|
|
50
|
+
var import_react5 = __toESM(require("react"));
|
|
51
|
+
var import_react_ui5 = require("@dxos/react-ui");
|
|
52
|
+
var import_app_graph = require("@dxos/app-graph");
|
|
53
|
+
var translationKey = "menus";
|
|
54
|
+
var translations_default = [
|
|
55
|
+
{
|
|
56
|
+
"en-US": {
|
|
57
|
+
[translationKey]: {}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
];
|
|
61
|
+
var getShortcut = (action) => {
|
|
62
|
+
return typeof action.properties?.keyBinding === "string" ? action.properties.keyBinding : action.properties?.keyBinding?.[(0, import_util.getHostPlatform)()];
|
|
63
|
+
};
|
|
64
|
+
var ActionLabel = ({ action }) => {
|
|
65
|
+
const shortcut = getShortcut(action);
|
|
66
|
+
const { t } = (0, import_react_ui2.useTranslation)(translationKey);
|
|
67
|
+
return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
68
|
+
className: "grow truncate"
|
|
69
|
+
}, (0, import_react_ui2.toLocalizedString)(action.properties.label, t)), shortcut && /* @__PURE__ */ import_react2.default.createElement("span", {
|
|
70
|
+
className: (0, import_react_ui_theme.mx)("shrink-0", import_react_ui_theme.descriptionText)
|
|
71
|
+
}, (0, import_keyboard.keySymbols)(shortcut).join("")));
|
|
72
|
+
};
|
|
73
|
+
var DropdownMenuItem = ({ action, onClick }) => {
|
|
74
|
+
const handleClick = (0, import_react.useCallback)((event) => onClick(action, event), [
|
|
75
|
+
action,
|
|
76
|
+
onClick
|
|
77
|
+
]);
|
|
78
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Item, {
|
|
79
|
+
onClick: handleClick,
|
|
80
|
+
classNames: "gap-2",
|
|
81
|
+
disabled: action.properties?.disabled,
|
|
82
|
+
...action.properties?.testId && {
|
|
83
|
+
"data-testid": action.properties.testId
|
|
84
|
+
}
|
|
85
|
+
}, action.properties?.icon && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
|
|
86
|
+
icon: action.properties.icon,
|
|
87
|
+
size: 4
|
|
88
|
+
}), /* @__PURE__ */ import_react.default.createElement(ActionLabel, {
|
|
89
|
+
action
|
|
90
|
+
}));
|
|
91
|
+
};
|
|
92
|
+
var DropdownMenuRoot = ({ defaultMenuOpen, actions, menuOpen, suppressNextTooltip, onMenuOpenChange, onAction, children }) => {
|
|
93
|
+
const [optionsMenuOpen, setOptionsMenuOpen] = (0, import_react_use_controllable_state.useControllableState)({
|
|
94
|
+
prop: menuOpen,
|
|
95
|
+
defaultProp: defaultMenuOpen,
|
|
96
|
+
onChange: onMenuOpenChange
|
|
97
|
+
});
|
|
98
|
+
const handleActionClick = (0, import_react.useCallback)((action, event) => {
|
|
99
|
+
if (action.properties?.disabled) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
event.stopPropagation();
|
|
103
|
+
if (suppressNextTooltip) {
|
|
104
|
+
suppressNextTooltip.current = true;
|
|
105
|
+
}
|
|
106
|
+
setOptionsMenuOpen(false);
|
|
107
|
+
onAction?.(action);
|
|
108
|
+
}, [
|
|
109
|
+
onAction
|
|
110
|
+
]);
|
|
111
|
+
return /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Root, {
|
|
112
|
+
open: optionsMenuOpen,
|
|
113
|
+
onOpenChange: (nextOpen) => {
|
|
114
|
+
if (!nextOpen && suppressNextTooltip) {
|
|
115
|
+
suppressNextTooltip.current = true;
|
|
116
|
+
}
|
|
117
|
+
return setOptionsMenuOpen(nextOpen);
|
|
118
|
+
}
|
|
119
|
+
}, children, /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Portal, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Content, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Viewport, null, actions?.map((action) => /* @__PURE__ */ import_react.default.createElement(DropdownMenuItem, {
|
|
120
|
+
key: action.id,
|
|
121
|
+
action,
|
|
122
|
+
onClick: handleActionClick
|
|
123
|
+
}))), /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Arrow, null))));
|
|
124
|
+
};
|
|
125
|
+
var DropdownMenu = {
|
|
126
|
+
Root: DropdownMenuRoot,
|
|
127
|
+
Trigger: import_react_ui.DropdownMenu.Trigger,
|
|
128
|
+
VirtualTrigger: import_react_ui.DropdownMenu.VirtualTrigger
|
|
129
|
+
};
|
|
130
|
+
var ToolbarDropdownMenu = ({ actionGroup, graph, onAction, applyActiveIcon }) => {
|
|
131
|
+
const menuActions = (0, import_react4.useMemo)(() => graph ? graph.actions(actionGroup) : [], [
|
|
132
|
+
actionGroup,
|
|
133
|
+
graph
|
|
134
|
+
]);
|
|
135
|
+
const { icon, iconOnly = true, disabled, testId } = actionGroup.properties;
|
|
136
|
+
const suppressNextTooltip = (0, import_react4.useRef)(false);
|
|
137
|
+
return /* @__PURE__ */ import_react4.default.createElement(DropdownMenu.Root, {
|
|
138
|
+
actions: menuActions,
|
|
139
|
+
onAction,
|
|
140
|
+
suppressNextTooltip
|
|
141
|
+
}, /* @__PURE__ */ import_react4.default.createElement(DropdownMenu.Trigger, {
|
|
142
|
+
asChild: true
|
|
143
|
+
}, /* @__PURE__ */ import_react4.default.createElement(import_react_ui4.Toolbar.IconButton, {
|
|
144
|
+
size: 5,
|
|
145
|
+
variant: "ghost",
|
|
146
|
+
iconOnly,
|
|
147
|
+
disabled,
|
|
148
|
+
icon: applyActiveIcon && menuActions.find((action) => !!action.properties.checked)?.properties.icon || icon,
|
|
149
|
+
label: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
|
|
150
|
+
action: actionGroup
|
|
151
|
+
}),
|
|
152
|
+
...testId && {
|
|
153
|
+
"data-testid": testId
|
|
154
|
+
},
|
|
155
|
+
suppressNextTooltip,
|
|
156
|
+
caretDown: true
|
|
157
|
+
})));
|
|
158
|
+
};
|
|
159
|
+
var ToolbarToggleGroupItem = ({ action }) => {
|
|
160
|
+
const { icon, iconOnly, disabled } = action.properties;
|
|
161
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Toolbar.ToggleGroupIconItem, {
|
|
162
|
+
key: action.id,
|
|
163
|
+
value: action.id,
|
|
164
|
+
icon,
|
|
165
|
+
iconOnly,
|
|
166
|
+
disabled,
|
|
167
|
+
label: /* @__PURE__ */ import_react5.default.createElement(ActionLabel, {
|
|
168
|
+
action
|
|
169
|
+
})
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
var ToolbarToggleGroup = ({ actionGroup, graph }) => {
|
|
173
|
+
const menuActions = (0, import_react5.useMemo)(() => graph ? graph.actions(actionGroup) : [], [
|
|
174
|
+
actionGroup,
|
|
175
|
+
graph
|
|
176
|
+
]);
|
|
177
|
+
const { selectCardinality, value } = actionGroup.properties;
|
|
178
|
+
return (
|
|
179
|
+
// TODO(thure): This is extremely difficult to manage, what do?
|
|
180
|
+
// @ts-ignore
|
|
181
|
+
/* @__PURE__ */ import_react5.default.createElement(import_react_ui5.Toolbar.ToggleGroup, {
|
|
182
|
+
type: selectCardinality,
|
|
183
|
+
value
|
|
184
|
+
}, menuActions.map((action) => /* @__PURE__ */ import_react5.default.createElement(ToolbarToggleGroupItem, {
|
|
185
|
+
key: action.id,
|
|
186
|
+
action
|
|
187
|
+
})))
|
|
188
|
+
);
|
|
189
|
+
};
|
|
190
|
+
var ToolbarSeparatorType = "@dxos/react-ui-toolbar/separator";
|
|
191
|
+
var isSeparator = (node) => node.type === ToolbarSeparatorType;
|
|
192
|
+
var isMenu = (node) => node.type === import_app_graph.ACTION_GROUP_TYPE;
|
|
193
|
+
var ToolbarItem = ({ iconSize, action, onAction }) => {
|
|
194
|
+
const handleClick = (0, import_react3.useCallback)(() => {
|
|
195
|
+
onAction?.(action);
|
|
196
|
+
}, [
|
|
197
|
+
action,
|
|
198
|
+
onAction
|
|
199
|
+
]);
|
|
200
|
+
const { icon, iconOnly = true, disabled, testId } = action.properties;
|
|
201
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.IconButton, {
|
|
202
|
+
key: action.id,
|
|
203
|
+
iconOnly,
|
|
204
|
+
variant: "ghost",
|
|
205
|
+
icon,
|
|
206
|
+
size: iconSize,
|
|
207
|
+
label: /* @__PURE__ */ import_react3.default.createElement(ActionLabel, {
|
|
208
|
+
action
|
|
209
|
+
}),
|
|
210
|
+
disabled,
|
|
211
|
+
onClick: handleClick,
|
|
212
|
+
...testId && {
|
|
213
|
+
"data-testid": testId
|
|
214
|
+
}
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
var Toolbar = ({ actions: items, onAction, iconSize = 5, graph, ...props }) => {
|
|
218
|
+
return /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.Root, props, items?.map((item, i) => isSeparator(item) ? /* @__PURE__ */ import_react3.default.createElement(import_react_ui3.Toolbar.Separator, {
|
|
219
|
+
key: i,
|
|
220
|
+
variant: item.properties.variant
|
|
221
|
+
}) : isMenu(item) ? item.properties.variant === "dropdownMenu" ? /* @__PURE__ */ import_react3.default.createElement(ToolbarDropdownMenu, {
|
|
222
|
+
key: item.id,
|
|
223
|
+
actionGroup: item,
|
|
224
|
+
onAction,
|
|
225
|
+
iconSize,
|
|
226
|
+
graph
|
|
227
|
+
}) : /* @__PURE__ */ import_react3.default.createElement(ToolbarToggleGroup, {
|
|
228
|
+
key: item.id,
|
|
229
|
+
actionGroup: item,
|
|
230
|
+
onAction,
|
|
231
|
+
iconSize,
|
|
232
|
+
graph
|
|
233
|
+
}) : /* @__PURE__ */ import_react3.default.createElement(ToolbarItem, {
|
|
234
|
+
key: item.id,
|
|
235
|
+
action: item,
|
|
236
|
+
onAction,
|
|
237
|
+
iconSize
|
|
238
|
+
})));
|
|
239
|
+
};
|
|
240
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
241
|
+
0 && (module.exports = {
|
|
242
|
+
DropdownMenu,
|
|
243
|
+
Toolbar,
|
|
244
|
+
ToolbarSeparatorType,
|
|
245
|
+
isMenu,
|
|
246
|
+
isSeparator
|
|
247
|
+
});
|
|
248
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/DropdownMenu.tsx", "../../../src/components/ActionLabel.tsx", "../../../src/translations.ts", "../../../src/util.ts", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/Toolbar/ToolbarDropdownMenu.tsx", "../../../src/components/Toolbar/ToolbarToggleGroup.tsx", "../../../src/components/Toolbar/defs.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type MouseEvent, type MutableRefObject, type PropsWithChildren, useCallback } from 'react';\n\nimport { DropdownMenu as NaturalDropdownMenu, Icon } from '@dxos/react-ui';\n\nimport { ActionLabel } from './ActionLabel';\nimport { type MenuAction, type MenuProps } from '../defs';\n\nexport type DropdownMenuProps = MenuProps &\n PropsWithChildren<\n Partial<{\n defaultMenuOpen: boolean;\n menuOpen: boolean;\n onMenuOpenChange: (nextOpen: boolean) => void;\n suppressNextTooltip?: MutableRefObject<boolean>;\n }>\n >;\n\nconst DropdownMenuItem = ({\n action,\n onClick,\n}: {\n action: MenuAction;\n onClick: (action: MenuAction, event: MouseEvent) => void;\n}) => {\n const handleClick = useCallback((event: MouseEvent) => onClick(action, event), [action, onClick]);\n return (\n <NaturalDropdownMenu.Item\n onClick={handleClick}\n classNames='gap-2'\n disabled={action.properties?.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n {action.properties?.icon && <Icon icon={action.properties!.icon} size={4} />}\n <ActionLabel action={action} />\n </NaturalDropdownMenu.Item>\n );\n};\n\nconst DropdownMenuRoot = ({\n defaultMenuOpen,\n actions,\n menuOpen,\n suppressNextTooltip,\n onMenuOpenChange,\n onAction,\n children,\n}: DropdownMenuProps) => {\n const [optionsMenuOpen, setOptionsMenuOpen] = useControllableState({\n prop: menuOpen,\n defaultProp: defaultMenuOpen,\n onChange: onMenuOpenChange,\n });\n\n const handleActionClick = useCallback(\n (action: MenuAction, event: MouseEvent) => {\n if (action.properties?.disabled) {\n return;\n }\n event.stopPropagation();\n // TODO(thure): Why does Dialog’s modal-ness cause issues if we don’t explicitly close the menu here?\n if (suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n setOptionsMenuOpen(false);\n onAction?.(action);\n },\n [onAction],\n );\n\n return (\n <NaturalDropdownMenu.Root\n {...{\n open: optionsMenuOpen,\n onOpenChange: (nextOpen: boolean) => {\n if (!nextOpen && suppressNextTooltip) {\n suppressNextTooltip.current = true;\n }\n return setOptionsMenuOpen(nextOpen);\n },\n }}\n >\n {children}\n <NaturalDropdownMenu.Portal>\n <NaturalDropdownMenu.Content>\n <NaturalDropdownMenu.Viewport>\n {actions?.map((action) => <DropdownMenuItem key={action.id} action={action} onClick={handleActionClick} />)}\n </NaturalDropdownMenu.Viewport>\n <NaturalDropdownMenu.Arrow />\n </NaturalDropdownMenu.Content>\n </NaturalDropdownMenu.Portal>\n </NaturalDropdownMenu.Root>\n );\n};\n\nexport const DropdownMenu = {\n Root: DropdownMenuRoot,\n Trigger: NaturalDropdownMenu.Trigger,\n VirtualTrigger: NaturalDropdownMenu.VirtualTrigger,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Action, type ActionGroup } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { mx, descriptionText } from '@dxos/react-ui-theme';\n\nimport { type MenuActionProperties } from '../defs';\nimport { translationKey } from '../translations';\nimport { getShortcut } from '../util';\n\nexport const ActionLabel = ({\n action,\n}: {\n action: Action<MenuActionProperties> | ActionGroup<Omit<MenuActionProperties, 'variant'>>;\n}) => {\n const shortcut = getShortcut(action);\n const { t } = useTranslation(translationKey);\n\n return (\n <>\n <span className='grow truncate'>{toLocalizedString(action.properties!.label, t)}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'menus';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {},\n },\n },\n] as const;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ActionLike } from '@dxos/app-graph';\nimport { getHostPlatform } from '@dxos/util';\n\nexport const getShortcut = (action: ActionLike) => {\n return typeof action.properties?.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties?.keyBinding?.[getHostPlatform()];\n};\n\nexport const fallbackIcon = 'ph--placeholder--regular';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Toolbar as NaturalToolbar } from '@dxos/react-ui';\n\nimport { ToolbarDropdownMenu } from './ToolbarDropdownMenu';\nimport { ToolbarToggleGroup } from './ToolbarToggleGroup';\nimport { isMenu, isSeparator, type ToolbarProps } from './defs';\nimport { type MenuAction } from '../../defs';\nimport { ActionLabel } from '../ActionLabel';\n\nconst ToolbarItem = ({\n iconSize,\n action,\n onAction,\n}: Pick<ToolbarProps, 'iconSize' | 'onAction'> & {\n action: MenuAction;\n}) => {\n const handleClick = useCallback(() => {\n onAction?.(action);\n }, [action, onAction]);\n const { icon, iconOnly = true, disabled, testId } = action.properties;\n return (\n <NaturalToolbar.IconButton\n key={action.id}\n iconOnly={iconOnly}\n variant='ghost'\n icon={icon}\n size={iconSize}\n label={<ActionLabel action={action} />}\n disabled={disabled}\n onClick={handleClick}\n {...(testId && { 'data-testid': testId })}\n />\n );\n};\n\nexport const Toolbar = ({ actions: items, onAction, iconSize = 5, graph, ...props }: ToolbarProps) => {\n return (\n <NaturalToolbar.Root {...props}>\n {items?.map((item, i) =>\n isSeparator(item) ? (\n <NaturalToolbar.Separator key={i} variant={item.properties.variant} />\n ) : isMenu(item) ? (\n item.properties.variant === 'dropdownMenu' ? (\n <ToolbarDropdownMenu\n key={item.id}\n actionGroup={item}\n onAction={onAction}\n iconSize={iconSize}\n graph={graph}\n />\n ) : (\n <ToolbarToggleGroup\n key={item.id}\n actionGroup={item}\n onAction={onAction}\n iconSize={iconSize}\n graph={graph}\n />\n )\n ) : (\n <ToolbarItem key={item.id} action={item as MenuAction} onAction={onAction} iconSize={iconSize} />\n ),\n )}\n </NaturalToolbar.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo, useRef } from 'react';\n\nimport { Toolbar as NaturalToolbar } from '@dxos/react-ui';\n\nimport { type ToolbarActionGroupProps } from './defs';\nimport { type MenuAction } from '../../defs';\nimport { ActionLabel } from '../ActionLabel';\nimport { DropdownMenu } from '../DropdownMenu';\n\nexport const ToolbarDropdownMenu = ({ actionGroup, graph, onAction, applyActiveIcon }: ToolbarActionGroupProps) => {\n const menuActions = useMemo(() => (graph ? graph.actions(actionGroup) : []) as MenuAction[], [actionGroup, graph]);\n const { icon, iconOnly = true, disabled, testId } = actionGroup.properties;\n const suppressNextTooltip = useRef(false);\n\n return (\n <DropdownMenu.Root actions={menuActions} onAction={onAction} suppressNextTooltip={suppressNextTooltip}>\n <DropdownMenu.Trigger asChild>\n <NaturalToolbar.IconButton\n size={5}\n variant='ghost'\n iconOnly={iconOnly}\n disabled={disabled}\n icon={(applyActiveIcon && menuActions.find((action) => !!action.properties.checked)?.properties.icon) || icon}\n label={<ActionLabel action={actionGroup} />}\n {...(testId && { 'data-testid': testId })}\n suppressNextTooltip={suppressNextTooltip}\n caretDown\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Toolbar as NaturalToolbar } from '@dxos/react-ui';\n\nimport type { ToolbarActionGroupProps } from './defs';\nimport { type MenuAction } from '../../defs';\nimport { ActionLabel } from '../ActionLabel';\n\nconst ToolbarToggleGroupItem = ({ action }: { action: MenuAction }) => {\n const { icon, iconOnly, disabled } = action.properties;\n return (\n <NaturalToolbar.ToggleGroupIconItem\n key={action.id}\n value={action.id}\n icon={icon}\n iconOnly={iconOnly}\n disabled={disabled}\n label={<ActionLabel action={action} />}\n />\n );\n};\n\nexport const ToolbarToggleGroup = ({ actionGroup, graph }: ToolbarActionGroupProps) => {\n const menuActions = useMemo(() => (graph ? (graph.actions(actionGroup) as MenuAction[]) : []), [actionGroup, graph]);\n const { selectCardinality, value } = actionGroup.properties;\n return (\n // TODO(thure): This is extremely difficult to manage, what do?\n // @ts-ignore\n <NaturalToolbar.ToggleGroup type={selectCardinality} value={value}>\n {menuActions.map((action) => (\n <ToolbarToggleGroupItem key={action.id} action={action} />\n ))}\n </NaturalToolbar.ToggleGroup>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Node, type ActionGroup, type Graph, ACTION_GROUP_TYPE } from '@dxos/app-graph';\nimport { type ToolbarRootProps, type ToolbarSeparatorProps, type IconButtonProps } from '@dxos/react-ui';\n\nimport { type MenuAction, type MenuActionProperties, type MenuProps } from '../../defs';\n\nexport const ToolbarSeparatorType = '@dxos/react-ui-toolbar/separator' as const;\n\nexport type ToolbarSeparatorNode = Node<never, Pick<ToolbarSeparatorProps, 'variant'>> & {\n type: typeof ToolbarSeparatorType;\n};\n\nexport const isSeparator = (node: Node): node is ToolbarSeparatorNode => node.type === ToolbarSeparatorType;\n\nexport type ToolbarActionGroupProperties = Omit<MenuActionProperties, 'variant'> & {\n variant: 'dropdownMenu' | 'toggleGroup';\n} & ({ selectCardinality?: 'single'; value?: string } | { selectCardinality?: 'multiple'; value?: string[] });\n\nexport type ToolbarActionGroup = ActionGroup<ToolbarActionGroupProperties>;\n\nexport const isMenu = (node: Node): node is ToolbarActionGroup => node.type === ACTION_GROUP_TYPE;\n\nexport type ToolbarItem = ToolbarSeparatorNode | MenuAction | ToolbarActionGroup;\n\nexport type ToolbarProps = ToolbarRootProps &\n MenuProps<ToolbarItem, MenuAction> & { iconSize?: IconButtonProps['size']; graph?: Graph };\n\nexport type ToolbarActionGroupProps = Pick<ToolbarProps, 'iconSize'> &\n Omit<MenuProps<MenuAction>, 'actions'> & {\n actionGroup: ToolbarActionGroup;\n graph?: Graph;\n applyActiveIcon?: boolean;\n };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_react", "import_react_ui", "translationKey", "getShortcut", "action", "properties", "keyBinding", "getHostPlatform", "ActionLabel", "shortcut", "t", "useTranslation", "React", "span", "className", "toLocalizedString", "label", "mx", "descriptionText", "keySymbols", "join", "DropdownMenuItem", "onClick", "handleClick", "useCallback", "event", "NaturalDropdownMenu", "Item", "classNames", "disabled", "testId", "icon", "Icon", "size", "DropdownMenuRoot", "defaultMenuOpen", "actions", "menuOpen", "suppressNextTooltip", "onMenuOpenChange", "onAction", "children", "optionsMenuOpen", "setOptionsMenuOpen", "useControllableState", "prop", "defaultProp", "onChange", "handleActionClick", "stopPropagation", "current", "Root", "open", "onOpenChange", "nextOpen", "Portal", "Content", "Viewport", "map", "key", "id", "Arrow", "DropdownMenu", "Trigger", "VirtualTrigger", "ToolbarDropdownMenu", "actionGroup", "graph", "applyActiveIcon", "menuActions", "useMemo", "iconOnly", "useRef", "asChild", "NaturalToolbar", "IconButton", "variant", "find", "checked", "caretDown", "ToolbarToggleGroupItem", "ToggleGroupIconItem", "value", "ToolbarToggleGroup", "selectCardinality", "ToggleGroup", "type", "ToolbarSeparatorType", "isSeparator", "node", "isMenu", "ACTION_GROUP_TYPE", "ToolbarItem", "iconSize", "Toolbar", "items", "props", "item", "i", "Separator"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"packages/ui/react-ui-menu/src/translations.ts":{"bytes":909,"imports":[],"format":"esm"},"packages/ui/react-ui-menu/src/util.ts":{"bytes":1578,"imports":[{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/components/ActionLabel.tsx":{"bytes":3310,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/translations.ts","kind":"import-statement","original":"../translations"},{"path":"packages/ui/react-ui-menu/src/util.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx":{"bytes":9986,"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"./ActionLabel"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarDropdownMenu.tsx":{"bytes":5223,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"../ActionLabel"},{"path":"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx","kind":"import-statement","original":"../DropdownMenu"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarToggleGroup.tsx":{"bytes":4731,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"../ActionLabel"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts":{"bytes":3030,"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx":{"bytes":7348,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarDropdownMenu.tsx","kind":"import-statement","original":"./ToolbarDropdownMenu"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarToggleGroup.tsx","kind":"import-statement","original":"./ToolbarToggleGroup"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts","kind":"import-statement","original":"./defs"},{"path":"packages/ui/react-ui-menu/src/components/ActionLabel.tsx","kind":"import-statement","original":"../ActionLabel"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/Toolbar/index.ts":{"bytes":595,"imports":[{"path":"packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx","kind":"import-statement","original":"./Toolbar"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts","kind":"import-statement","original":"./defs"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/index.ts":{"bytes":607,"imports":[{"path":"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx","kind":"import-statement","original":"./DropdownMenu"},{"path":"packages/ui/react-ui-menu/src/components/Toolbar/index.ts","kind":"import-statement","original":"./Toolbar"}],"format":"esm"},"packages/ui/react-ui-menu/src/defs.ts":{"bytes":1144,"imports":[],"format":"esm"},"packages/ui/react-ui-menu/src/index.ts":{"bytes":583,"imports":[{"path":"packages/ui/react-ui-menu/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-menu/src/defs.ts","kind":"import-statement","original":"./defs"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-menu/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":18403},"packages/ui/react-ui-menu/dist/lib/node/index.cjs":{"imports":[{"path":"@radix-ui/react-use-controllable-state","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true}],"exports":["DropdownMenu","Toolbar","ToolbarSeparatorType","isMenu","isSeparator"],"entryPoint":"packages/ui/react-ui-menu/src/index.ts","inputs":{"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx":{"bytesInOutput":2296},"packages/ui/react-ui-menu/src/components/ActionLabel.tsx":{"bytesInOutput":667},"packages/ui/react-ui-menu/src/translations.ts":{"bytesInOutput":118},"packages/ui/react-ui-menu/src/util.ts":{"bytesInOutput":225},"packages/ui/react-ui-menu/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-menu/src/components/Toolbar/Toolbar.tsx":{"bytesInOutput":1503},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarDropdownMenu.tsx":{"bytesInOutput":1096},"packages/ui/react-ui-menu/src/components/Toolbar/ToolbarToggleGroup.tsx":{"bytesInOutput":1069},"packages/ui/react-ui-menu/src/components/Toolbar/defs.ts":{"bytesInOutput":236},"packages/ui/react-ui-menu/src/components/Toolbar/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-menu/src/index.ts":{"bytesInOutput":0}},"bytes":8013}}}
|