@dxos/react-ui-menu 0.7.5-main.937ce75 → 0.7.5-main.b19bfc8
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/dist/lib/browser/index.mjs +322 -115
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +320 -103
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +322 -115
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/components/ActionLabel.d.ts +1 -2
- package/dist/types/src/components/ActionLabel.d.ts.map +1 -1
- package/dist/types/src/components/DropdownMenu.d.ts +10 -9
- package/dist/types/src/components/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/MenuContext.d.ts +13 -0
- package/dist/types/src/components/MenuContext.d.ts.map +1 -0
- package/dist/types/src/components/ToolbarMenu.d.ts +19 -0
- package/dist/types/src/components/ToolbarMenu.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +2 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/defs.d.ts +34 -7
- package/dist/types/src/defs.d.ts.map +1 -1
- package/dist/types/src/hooks.d.ts +17 -0
- package/dist/types/src/hooks.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +2 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/testing/Menus.stories.d.ts +7 -5
- package/dist/types/src/testing/Menus.stories.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +6 -6
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +42 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -12
- package/src/components/DropdownMenu.tsx +35 -27
- package/src/components/MenuContext.tsx +57 -0
- package/src/components/ToolbarMenu.tsx +185 -0
- package/src/components/index.ts +2 -1
- package/src/defs.ts +38 -7
- package/src/hooks.ts +72 -0
- package/src/index.ts +2 -0
- package/src/testing/Menus.stories.tsx +30 -18
- package/src/testing/index.ts +24 -5
- package/src/util.ts +58 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +0 -4
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/ToolbarDropdownMenu.d.ts +0 -4
- package/dist/types/src/components/Toolbar/ToolbarDropdownMenu.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/ToolbarToggleGroup.d.ts +0 -4
- package/dist/types/src/components/Toolbar/ToolbarToggleGroup.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/defs.d.ts +0 -30
- package/dist/types/src/components/Toolbar/defs.d.ts.map +0 -1
- package/dist/types/src/components/Toolbar/index.d.ts +0 -3
- package/dist/types/src/components/Toolbar/index.d.ts.map +0 -1
- package/src/components/Toolbar/Toolbar.tsx +0 -71
- package/src/components/Toolbar/ToolbarDropdownMenu.tsx +0 -36
- package/src/components/Toolbar/ToolbarToggleGroup.tsx +0 -39
- package/src/components/Toolbar/defs.ts +0 -36
- package/src/components/Toolbar/index.ts +0 -6
package/dist/lib/node/index.cjs
CHANGED
|
@@ -29,10 +29,20 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
29
29
|
var node_exports = {};
|
|
30
30
|
__export(node_exports, {
|
|
31
31
|
DropdownMenu: () => DropdownMenu,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
MenuProvider: () => MenuProvider,
|
|
33
|
+
MenuSeparatorType: () => MenuSeparatorType,
|
|
34
|
+
ToolbarMenu: () => ToolbarMenu,
|
|
35
|
+
createGapSeparator: () => createGapSeparator,
|
|
36
|
+
createLineSeparator: () => createLineSeparator,
|
|
37
|
+
createMenuAction: () => createMenuAction,
|
|
38
|
+
createMenuItemGroup: () => createMenuItemGroup,
|
|
39
|
+
createMenuScope: () => createMenuScope,
|
|
40
|
+
isMenuGroup: () => isMenuGroup,
|
|
41
|
+
isSeparator: () => isSeparator,
|
|
42
|
+
menuContextDefaults: () => menuContextDefaults,
|
|
43
|
+
useMenu: () => useMenu,
|
|
44
|
+
useMenuActions: () => useMenuActions,
|
|
45
|
+
useMenuItems: () => useMenuItems
|
|
36
46
|
});
|
|
37
47
|
module.exports = __toCommonJS(node_exports);
|
|
38
48
|
var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
|
|
@@ -42,14 +52,17 @@ var import_react2 = __toESM(require("react"));
|
|
|
42
52
|
var import_keyboard = require("@dxos/keyboard");
|
|
43
53
|
var import_react_ui2 = require("@dxos/react-ui");
|
|
44
54
|
var import_react_ui_theme = require("@dxos/react-ui-theme");
|
|
55
|
+
var import_app_graph = require("@dxos/app-graph");
|
|
45
56
|
var import_util = require("@dxos/util");
|
|
57
|
+
var import_react_context = require("@radix-ui/react-context");
|
|
46
58
|
var import_react3 = __toESM(require("react"));
|
|
47
|
-
var import_react_ui3 = require("@dxos/react-ui");
|
|
48
59
|
var import_react4 = __toESM(require("react"));
|
|
49
|
-
var
|
|
50
|
-
var
|
|
51
|
-
var
|
|
52
|
-
var
|
|
60
|
+
var import_react_ui3 = require("@dxos/react-ui");
|
|
61
|
+
var import_react_ui_attention = require("@dxos/react-ui-attention");
|
|
62
|
+
var import_app_graph2 = require("@dxos/app-graph");
|
|
63
|
+
var import_signals_react = require("@preact/signals-react");
|
|
64
|
+
var import_react5 = require("react");
|
|
65
|
+
var import_app_graph3 = require("@dxos/app-graph");
|
|
53
66
|
var translationKey = "menus";
|
|
54
67
|
var translations_default = [
|
|
55
68
|
{
|
|
@@ -61,6 +74,56 @@ var translations_default = [
|
|
|
61
74
|
var getShortcut = (action) => {
|
|
62
75
|
return typeof action.properties?.keyBinding === "string" ? action.properties.keyBinding : action.properties?.keyBinding?.[(0, import_util.getHostPlatform)()];
|
|
63
76
|
};
|
|
77
|
+
var noop = () => {
|
|
78
|
+
};
|
|
79
|
+
var createMenuAction = (id, properties) => ({
|
|
80
|
+
id,
|
|
81
|
+
type: import_app_graph.ACTION_TYPE,
|
|
82
|
+
properties,
|
|
83
|
+
data: noop
|
|
84
|
+
});
|
|
85
|
+
var createMenuItemGroup = (id, properties) => ({
|
|
86
|
+
id,
|
|
87
|
+
type: import_app_graph.ACTION_GROUP_TYPE,
|
|
88
|
+
properties,
|
|
89
|
+
data: import_app_graph.actionGroupSymbol
|
|
90
|
+
});
|
|
91
|
+
var createGapSeparator = (id = "gap", source = "root") => ({
|
|
92
|
+
nodes: [
|
|
93
|
+
{
|
|
94
|
+
id,
|
|
95
|
+
type: "@dxos/react-ui-toolbar/separator",
|
|
96
|
+
properties: {
|
|
97
|
+
variant: "gap"
|
|
98
|
+
},
|
|
99
|
+
data: void 0
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
edges: [
|
|
103
|
+
{
|
|
104
|
+
source,
|
|
105
|
+
target: id
|
|
106
|
+
}
|
|
107
|
+
]
|
|
108
|
+
});
|
|
109
|
+
var createLineSeparator = (id = "line", source = "root") => ({
|
|
110
|
+
nodes: [
|
|
111
|
+
{
|
|
112
|
+
id,
|
|
113
|
+
type: "@dxos/react-ui-toolbar/separator",
|
|
114
|
+
properties: {
|
|
115
|
+
variant: "line"
|
|
116
|
+
},
|
|
117
|
+
data: void 0
|
|
118
|
+
}
|
|
119
|
+
],
|
|
120
|
+
edges: [
|
|
121
|
+
{
|
|
122
|
+
source,
|
|
123
|
+
target: id
|
|
124
|
+
}
|
|
125
|
+
]
|
|
126
|
+
});
|
|
64
127
|
var ActionLabel = ({ action }) => {
|
|
65
128
|
const shortcut = getShortcut(action);
|
|
66
129
|
const { t } = (0, import_react_ui2.useTranslation)(translationKey);
|
|
@@ -70,11 +133,41 @@ var ActionLabel = ({ action }) => {
|
|
|
70
133
|
className: (0, import_react_ui_theme.mx)("shrink-0", import_react_ui_theme.descriptionText)
|
|
71
134
|
}, (0, import_keyboard.keySymbols)(shortcut).join("")));
|
|
72
135
|
};
|
|
73
|
-
var
|
|
136
|
+
var MENU_NAME = "GraphMenu";
|
|
137
|
+
var [createMenuContext, createMenuScope] = (0, import_react_context.createContextScope)(MENU_NAME, []);
|
|
138
|
+
var [MenuContextProvider, useMenu] = createMenuContext(MENU_NAME);
|
|
139
|
+
var menuContextDefaults = {
|
|
140
|
+
iconSize: 5,
|
|
141
|
+
onAction: () => {
|
|
142
|
+
},
|
|
143
|
+
resolveGroupItems: () => null
|
|
144
|
+
};
|
|
145
|
+
var useMenuScope = createMenuScope();
|
|
146
|
+
var MenuProvider = ({ children, resolveGroupItems = menuContextDefaults.resolveGroupItems, onAction = menuContextDefaults.onAction, iconSize = menuContextDefaults.iconSize, attendableId }) => {
|
|
147
|
+
const { scope } = useMenuScope(void 0);
|
|
148
|
+
return /* @__PURE__ */ import_react3.default.createElement(MenuContextProvider, {
|
|
149
|
+
resolveGroupItems,
|
|
150
|
+
onAction,
|
|
151
|
+
iconSize,
|
|
152
|
+
attendableId,
|
|
153
|
+
scope
|
|
154
|
+
}, children);
|
|
155
|
+
};
|
|
156
|
+
var useMenuItems = (group, propsItems, consumerName = "useMenuItemConsumer", __menuScope) => {
|
|
157
|
+
const { resolveGroupItems } = useMenu(consumerName, __menuScope);
|
|
158
|
+
return (0, import_react3.useMemo)(() => propsItems ?? resolveGroupItems?.(group) ?? void 0, [
|
|
159
|
+
propsItems,
|
|
160
|
+
group,
|
|
161
|
+
resolveGroupItems
|
|
162
|
+
]);
|
|
163
|
+
};
|
|
164
|
+
var DropdownMenuItem = ({ item, onClick, __menuScope }) => {
|
|
165
|
+
const action = item;
|
|
74
166
|
const handleClick = (0, import_react.useCallback)((event) => onClick(action, event), [
|
|
75
167
|
action,
|
|
76
168
|
onClick
|
|
77
169
|
]);
|
|
170
|
+
const { iconSize } = useMenu("DropdownMenuItem", __menuScope);
|
|
78
171
|
return /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Item, {
|
|
79
172
|
onClick: handleClick,
|
|
80
173
|
classNames: "gap-2",
|
|
@@ -84,17 +177,18 @@ var DropdownMenuItem = ({ action, onClick }) => {
|
|
|
84
177
|
}
|
|
85
178
|
}, action.properties?.icon && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
|
|
86
179
|
icon: action.properties.icon,
|
|
87
|
-
size:
|
|
180
|
+
size: iconSize
|
|
88
181
|
}), /* @__PURE__ */ import_react.default.createElement(ActionLabel, {
|
|
89
182
|
action
|
|
90
183
|
}));
|
|
91
184
|
};
|
|
92
|
-
var DropdownMenuRoot = ({
|
|
185
|
+
var DropdownMenuRoot = ({ items: propsItems, group, open, defaultOpen, onOpenChange, suppressNextTooltip, children, __menuScope, ...naturalProps }) => {
|
|
93
186
|
const [optionsMenuOpen, setOptionsMenuOpen] = (0, import_react_use_controllable_state.useControllableState)({
|
|
94
|
-
prop:
|
|
95
|
-
defaultProp:
|
|
96
|
-
onChange:
|
|
187
|
+
prop: open,
|
|
188
|
+
defaultProp: defaultOpen,
|
|
189
|
+
onChange: onOpenChange
|
|
97
190
|
});
|
|
191
|
+
const { onAction } = useMenu("DropdownMenuRoot", __menuScope);
|
|
98
192
|
const handleActionClick = (0, import_react.useCallback)((action, event) => {
|
|
99
193
|
if (action.properties?.disabled) {
|
|
100
194
|
return;
|
|
@@ -108,6 +202,7 @@ var DropdownMenuRoot = ({ defaultMenuOpen, actions, menuOpen, suppressNextToolti
|
|
|
108
202
|
}, [
|
|
109
203
|
onAction
|
|
110
204
|
]);
|
|
205
|
+
const items = useMenuItems(group, propsItems);
|
|
111
206
|
return /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Root, {
|
|
112
207
|
open: optionsMenuOpen,
|
|
113
208
|
onOpenChange: (nextOpen) => {
|
|
@@ -115,10 +210,11 @@ var DropdownMenuRoot = ({ defaultMenuOpen, actions, menuOpen, suppressNextToolti
|
|
|
115
210
|
suppressNextTooltip.current = true;
|
|
116
211
|
}
|
|
117
212
|
return setOptionsMenuOpen(nextOpen);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
213
|
+
},
|
|
214
|
+
...naturalProps
|
|
215
|
+
}, 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, items?.map((item) => /* @__PURE__ */ import_react.default.createElement(DropdownMenuItem, {
|
|
216
|
+
key: item.id,
|
|
217
|
+
item,
|
|
122
218
|
onClick: handleActionClick
|
|
123
219
|
}))), /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Arrow, null))));
|
|
124
220
|
};
|
|
@@ -127,122 +223,243 @@ var DropdownMenu = {
|
|
|
127
223
|
Trigger: import_react_ui.DropdownMenu.Trigger,
|
|
128
224
|
VirtualTrigger: import_react_ui.DropdownMenu.VirtualTrigger
|
|
129
225
|
};
|
|
130
|
-
var
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
226
|
+
var MenuSeparatorType = "@dxos/react-ui-toolbar/separator";
|
|
227
|
+
var isSeparator = (node) => node.type === MenuSeparatorType;
|
|
228
|
+
var isMenuGroup = (node) => node.type === import_app_graph2.ACTION_GROUP_TYPE;
|
|
229
|
+
var ActionToolbarItem = ({ action, __menuScope }) => {
|
|
230
|
+
const { onAction, iconSize } = useMenu("ActionToolbarItem", __menuScope);
|
|
231
|
+
const handleClick = (0, import_react4.useCallback)(() => {
|
|
232
|
+
onAction?.(action);
|
|
233
|
+
}, [
|
|
234
|
+
action,
|
|
235
|
+
onAction
|
|
134
236
|
]);
|
|
135
|
-
const { icon, iconOnly = true, disabled, testId } =
|
|
237
|
+
const { icon, iconOnly = true, disabled, testId, hidden, classNames } = action.properties;
|
|
238
|
+
const Root = icon ? import_react_ui3.Toolbar.IconButton : import_react_ui3.Toolbar.Button;
|
|
239
|
+
const rootProps = icon ? {
|
|
240
|
+
icon,
|
|
241
|
+
size: iconSize,
|
|
242
|
+
iconOnly,
|
|
243
|
+
label: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
|
|
244
|
+
action
|
|
245
|
+
})
|
|
246
|
+
} : {
|
|
247
|
+
children: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
|
|
248
|
+
action
|
|
249
|
+
})
|
|
250
|
+
};
|
|
251
|
+
return hidden ? null : /* @__PURE__ */ import_react4.default.createElement(Root, {
|
|
252
|
+
key: action.id,
|
|
253
|
+
disabled,
|
|
254
|
+
onClick: handleClick,
|
|
255
|
+
variant: "ghost",
|
|
256
|
+
...testId && {
|
|
257
|
+
"data-testid": testId
|
|
258
|
+
},
|
|
259
|
+
...rootProps,
|
|
260
|
+
classNames
|
|
261
|
+
});
|
|
262
|
+
};
|
|
263
|
+
var DropdownMenuToolbarItem = ({ group, items: propsItems, __menuScope }) => {
|
|
264
|
+
const { iconOnly, disabled, testId } = group.properties;
|
|
136
265
|
const suppressNextTooltip = (0, import_react4.useRef)(false);
|
|
266
|
+
const { iconSize } = useMenu("DropdownMenuToolbarItem", __menuScope);
|
|
267
|
+
const items = useMenuItems(group, propsItems, "DropdownMenuToolbarItem", __menuScope);
|
|
268
|
+
const activeItem = items?.find((item) => !!item.properties.checked);
|
|
269
|
+
const icon = group.properties.applyActive && // TODO(thure): Handle other menu item types.
|
|
270
|
+
activeItem?.properties.icon || group.properties.icon;
|
|
271
|
+
const Root = icon ? import_react_ui3.Toolbar.IconButton : import_react_ui3.Toolbar.Button;
|
|
272
|
+
const label = /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
|
|
273
|
+
action: group.properties.applyActive && activeItem ? activeItem : group
|
|
274
|
+
});
|
|
275
|
+
const rootProps = icon ? {
|
|
276
|
+
icon,
|
|
277
|
+
size: iconSize,
|
|
278
|
+
iconOnly,
|
|
279
|
+
label,
|
|
280
|
+
caretDown: true,
|
|
281
|
+
suppressNextTooltip
|
|
282
|
+
} : {
|
|
283
|
+
children: /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, label, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
|
|
284
|
+
size: 3,
|
|
285
|
+
icon: "ph--caret-down--bold",
|
|
286
|
+
classNames: "mis-1"
|
|
287
|
+
}))
|
|
288
|
+
};
|
|
137
289
|
return /* @__PURE__ */ import_react4.default.createElement(DropdownMenu.Root, {
|
|
138
|
-
|
|
139
|
-
|
|
290
|
+
group,
|
|
291
|
+
items,
|
|
140
292
|
suppressNextTooltip
|
|
141
293
|
}, /* @__PURE__ */ import_react4.default.createElement(DropdownMenu.Trigger, {
|
|
142
294
|
asChild: true
|
|
143
|
-
}, /* @__PURE__ */ import_react4.default.createElement(
|
|
144
|
-
size: 5,
|
|
295
|
+
}, /* @__PURE__ */ import_react4.default.createElement(Root, {
|
|
145
296
|
variant: "ghost",
|
|
146
|
-
iconOnly,
|
|
147
297
|
disabled,
|
|
148
|
-
|
|
149
|
-
label: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
|
|
150
|
-
action: actionGroup
|
|
151
|
-
}),
|
|
298
|
+
...rootProps,
|
|
152
299
|
...testId && {
|
|
153
300
|
"data-testid": testId
|
|
154
|
-
}
|
|
155
|
-
suppressNextTooltip,
|
|
156
|
-
caretDown: true
|
|
301
|
+
}
|
|
157
302
|
})));
|
|
158
303
|
};
|
|
159
|
-
var
|
|
160
|
-
const {
|
|
161
|
-
|
|
162
|
-
|
|
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)(() => {
|
|
304
|
+
var ToggleGroupItem = ({ action, __menuScope }) => {
|
|
305
|
+
const { iconSize, onAction } = useMenu("ToggleGroupItem", __menuScope);
|
|
306
|
+
const { icon, iconOnly = true, disabled, testId, hidden, classNames } = action.properties;
|
|
307
|
+
const handleClick = (0, import_react4.useCallback)(() => {
|
|
195
308
|
onAction?.(action);
|
|
196
309
|
}, [
|
|
197
310
|
action,
|
|
198
311
|
onAction
|
|
199
312
|
]);
|
|
200
|
-
const
|
|
201
|
-
|
|
202
|
-
key: action.id,
|
|
203
|
-
iconOnly,
|
|
204
|
-
variant: "ghost",
|
|
313
|
+
const Root = icon ? import_react_ui3.Toolbar.ToggleGroupIconItem : import_react_ui3.Toolbar.ToggleGroupItem;
|
|
314
|
+
const rootProps = icon ? {
|
|
205
315
|
icon,
|
|
206
316
|
size: iconSize,
|
|
207
|
-
|
|
317
|
+
iconOnly,
|
|
318
|
+
label: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
|
|
319
|
+
action
|
|
320
|
+
})
|
|
321
|
+
} : {
|
|
322
|
+
children: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
|
|
208
323
|
action
|
|
209
|
-
})
|
|
324
|
+
})
|
|
325
|
+
};
|
|
326
|
+
return hidden ? null : /* @__PURE__ */ import_react4.default.createElement(Root, {
|
|
327
|
+
key: action.id,
|
|
328
|
+
value: action.id,
|
|
210
329
|
disabled,
|
|
211
330
|
onClick: handleClick,
|
|
331
|
+
variant: "ghost",
|
|
212
332
|
...testId && {
|
|
213
333
|
"data-testid": testId
|
|
214
|
-
}
|
|
334
|
+
},
|
|
335
|
+
...rootProps,
|
|
336
|
+
classNames
|
|
215
337
|
});
|
|
216
338
|
};
|
|
217
|
-
var
|
|
218
|
-
|
|
339
|
+
var ToggleGroupToolbarItem = ({ group, items: propsItems, __menuScope }) => {
|
|
340
|
+
const items = useMenuItems(group, propsItems, "ToggleGroupToolbarItem", __menuScope);
|
|
341
|
+
const { selectCardinality, value } = group.properties;
|
|
342
|
+
return (
|
|
343
|
+
// TODO(thure): The type here is difficult to manage, what do?
|
|
344
|
+
// @ts-ignore
|
|
345
|
+
/* @__PURE__ */ import_react4.default.createElement(
|
|
346
|
+
import_react_ui3.Toolbar.ToggleGroup,
|
|
347
|
+
{
|
|
348
|
+
type: selectCardinality,
|
|
349
|
+
value
|
|
350
|
+
},
|
|
351
|
+
// TODO(thure): Handle other menu item types.
|
|
352
|
+
items.map((action) => /* @__PURE__ */ import_react4.default.createElement(ToggleGroupItem, {
|
|
353
|
+
key: action.id,
|
|
354
|
+
action
|
|
355
|
+
}))
|
|
356
|
+
)
|
|
357
|
+
);
|
|
358
|
+
};
|
|
359
|
+
var ToolbarMenu = ({ __menuScope, classNames, ...props }) => {
|
|
360
|
+
const items = useMenuItems(void 0, void 0, "ToolbarMenu", __menuScope);
|
|
361
|
+
const { attendableId } = useMenu("ToolbarMenu", __menuScope);
|
|
362
|
+
const { hasAttention } = (0, import_react_ui_attention.useAttention)(attendableId);
|
|
363
|
+
return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Root, {
|
|
364
|
+
...props,
|
|
365
|
+
classNames: [
|
|
366
|
+
"p-0 pointer-fine:p-1 attention-surface",
|
|
367
|
+
!hasAttention && "opacity-20",
|
|
368
|
+
classNames
|
|
369
|
+
]
|
|
370
|
+
}, items?.map((item, i) => isSeparator(item) ? /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Separator, {
|
|
219
371
|
key: i,
|
|
220
372
|
variant: item.properties.variant
|
|
221
|
-
}) :
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
373
|
+
}) : isMenuGroup(item) ? item.properties.variant === "dropdownMenu" ? (
|
|
374
|
+
// TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.
|
|
375
|
+
/* @__PURE__ */ import_react4.default.createElement(DropdownMenuToolbarItem, {
|
|
376
|
+
key: item.id,
|
|
377
|
+
group: item
|
|
378
|
+
})
|
|
379
|
+
) : (
|
|
380
|
+
// TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.
|
|
381
|
+
/* @__PURE__ */ import_react4.default.createElement(ToggleGroupToolbarItem, {
|
|
382
|
+
key: item.id,
|
|
383
|
+
group: item
|
|
384
|
+
})
|
|
385
|
+
) : (
|
|
386
|
+
// TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.
|
|
387
|
+
/* @__PURE__ */ import_react4.default.createElement(ActionToolbarItem, {
|
|
388
|
+
key: item.id,
|
|
389
|
+
action: item
|
|
390
|
+
})
|
|
391
|
+
)));
|
|
392
|
+
};
|
|
393
|
+
var edgesArrayToRecord = (edges) => {
|
|
394
|
+
return Object.fromEntries(Object.entries(edges.reduce((acc, { source, target }) => {
|
|
395
|
+
if (!acc[source]) {
|
|
396
|
+
acc[source] = {
|
|
397
|
+
inbound: [],
|
|
398
|
+
outbound: []
|
|
399
|
+
};
|
|
400
|
+
}
|
|
401
|
+
if (!acc[target]) {
|
|
402
|
+
acc[target] = {
|
|
403
|
+
inbound: [],
|
|
404
|
+
outbound: []
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
const sourceEdges = acc[source];
|
|
408
|
+
if (!sourceEdges.outbound.includes(target)) {
|
|
409
|
+
sourceEdges.outbound.push(target);
|
|
410
|
+
}
|
|
411
|
+
const targetEdges = acc[target];
|
|
412
|
+
if (!targetEdges.inbound.includes(source)) {
|
|
413
|
+
targetEdges.inbound.push(source);
|
|
414
|
+
}
|
|
415
|
+
return acc;
|
|
416
|
+
}, {})).map(([id, { outbound }]) => [
|
|
417
|
+
id,
|
|
418
|
+
outbound
|
|
419
|
+
]));
|
|
420
|
+
};
|
|
421
|
+
var useMenuActions = (actionCreator) => {
|
|
422
|
+
const initialMenuGraphProps = actionCreator();
|
|
423
|
+
const [graph] = (0, import_react5.useState)(new import_app_graph3.Graph({
|
|
424
|
+
nodes: initialMenuGraphProps.nodes,
|
|
425
|
+
edges: edgesArrayToRecord(initialMenuGraphProps.edges)
|
|
426
|
+
}));
|
|
427
|
+
(0, import_signals_react.useSignalEffect)(() => {
|
|
428
|
+
const menuGraphProps = actionCreator();
|
|
429
|
+
graph._addNodes(menuGraphProps.nodes);
|
|
430
|
+
graph._addEdges(menuGraphProps.edges);
|
|
431
|
+
});
|
|
432
|
+
const resolveGroupItems = (0, import_react5.useCallback)((sourceNode = graph.root) => {
|
|
433
|
+
if (graph) {
|
|
434
|
+
return graph.nodes(sourceNode, {
|
|
435
|
+
filter: (n) => true
|
|
436
|
+
}) || null;
|
|
437
|
+
} else {
|
|
438
|
+
return null;
|
|
439
|
+
}
|
|
440
|
+
}, [
|
|
232
441
|
graph
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
iconSize
|
|
238
|
-
})));
|
|
442
|
+
]);
|
|
443
|
+
return {
|
|
444
|
+
resolveGroupItems
|
|
445
|
+
};
|
|
239
446
|
};
|
|
240
447
|
// Annotate the CommonJS export names for ESM import in node:
|
|
241
448
|
0 && (module.exports = {
|
|
242
449
|
DropdownMenu,
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
450
|
+
MenuProvider,
|
|
451
|
+
MenuSeparatorType,
|
|
452
|
+
ToolbarMenu,
|
|
453
|
+
createGapSeparator,
|
|
454
|
+
createLineSeparator,
|
|
455
|
+
createMenuAction,
|
|
456
|
+
createMenuItemGroup,
|
|
457
|
+
createMenuScope,
|
|
458
|
+
isMenuGroup,
|
|
459
|
+
isSeparator,
|
|
460
|
+
menuContextDefaults,
|
|
461
|
+
useMenu,
|
|
462
|
+
useMenuActions,
|
|
463
|
+
useMenuItems
|
|
247
464
|
});
|
|
248
465
|
//# sourceMappingURL=index.cjs.map
|