@dxos/react-ui-menu 0.8.3 → 0.8.4-main.f9ba587

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.
@@ -1,506 +0,0 @@
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
- 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
- rxFromSignal: () => import_app_graph.rxFromSignal,
44
- useMenu: () => useMenu,
45
- useMenuActions: () => useMenuActions,
46
- useMenuItems: () => useMenuItems
47
- });
48
- module.exports = __toCommonJS(node_exports);
49
- var import_app_graph = require("@dxos/app-graph");
50
- var import_tracking = require("@preact-signals/safe-react/tracking");
51
- var import_react_use_controllable_state = require("@radix-ui/react-use-controllable-state");
52
- var import_react = __toESM(require("react"));
53
- var import_react_ui = require("@dxos/react-ui");
54
- var import_tracking2 = require("@preact-signals/safe-react/tracking");
55
- var import_react2 = __toESM(require("react"));
56
- var import_keyboard = require("@dxos/keyboard");
57
- var import_react_ui2 = require("@dxos/react-ui");
58
- var import_react_ui_theme = require("@dxos/react-ui-theme");
59
- var import_app_graph2 = require("@dxos/app-graph");
60
- var import_util = require("@dxos/util");
61
- var import_tracking3 = require("@preact-signals/safe-react/tracking");
62
- var import_react_context = require("@radix-ui/react-context");
63
- var import_react3 = __toESM(require("react"));
64
- var import_tracking4 = require("@preact-signals/safe-react/tracking");
65
- var import_react4 = __toESM(require("react"));
66
- var import_react_ui3 = require("@dxos/react-ui");
67
- var import_react_ui_attention = require("@dxos/react-ui-attention");
68
- var import_react_ui_theme2 = require("@dxos/react-ui-theme");
69
- var import_app_graph3 = require("@dxos/app-graph");
70
- var import_rx_react = require("@effect-rx/rx-react");
71
- var import_react5 = require("react");
72
- var import_app_graph4 = require("@dxos/app-graph");
73
- var translationKey = "menus";
74
- var translations_default = [
75
- {
76
- "en-US": {
77
- [translationKey]: {}
78
- }
79
- }
80
- ];
81
- var getShortcut = (action) => {
82
- return typeof action.properties?.keyBinding === "string" ? action.properties.keyBinding : action.properties?.keyBinding?.[(0, import_util.getHostPlatform)()];
83
- };
84
- var createMenuAction = (id, invoke, properties) => ({
85
- id,
86
- type: import_app_graph2.ACTION_TYPE,
87
- properties,
88
- data: invoke
89
- });
90
- var createMenuItemGroup = (id, properties) => ({
91
- id,
92
- type: import_app_graph2.ACTION_GROUP_TYPE,
93
- properties,
94
- data: import_app_graph2.actionGroupSymbol
95
- });
96
- var createGapSeparator = (id = "gap", source = "root") => ({
97
- nodes: [
98
- {
99
- id,
100
- type: "@dxos/react-ui-toolbar/separator",
101
- properties: {
102
- variant: "gap"
103
- },
104
- data: void 0
105
- }
106
- ],
107
- edges: [
108
- {
109
- source,
110
- target: id
111
- }
112
- ]
113
- });
114
- var createLineSeparator = (id = "line", source = "root") => ({
115
- nodes: [
116
- {
117
- id,
118
- type: "@dxos/react-ui-toolbar/separator",
119
- properties: {
120
- variant: "line"
121
- },
122
- data: void 0
123
- }
124
- ],
125
- edges: [
126
- {
127
- source,
128
- target: id
129
- }
130
- ]
131
- });
132
- var ActionLabel = ({ action }) => {
133
- var _effect = (0, import_tracking2.useSignals)();
134
- try {
135
- const shortcut = getShortcut(action);
136
- const { t } = (0, import_react_ui2.useTranslation)(translationKey);
137
- return /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement("span", {
138
- className: "grow truncate"
139
- }, (0, import_react_ui2.toLocalizedString)(action.properties.label, t)), shortcut && /* @__PURE__ */ import_react2.default.createElement("span", {
140
- className: (0, import_react_ui_theme.mx)("shrink-0", import_react_ui_theme.descriptionText)
141
- }, (0, import_keyboard.keySymbols)(shortcut).join("")));
142
- } finally {
143
- _effect.f();
144
- }
145
- };
146
- var actionLabel = (action, t) => {
147
- const shortcut = getShortcut(action);
148
- return `${(0, import_react_ui2.toLocalizedString)(action.properties.label, t)}${shortcut ? ` (${(0, import_keyboard.keySymbols)(shortcut).join("")})` : ""}`;
149
- };
150
- var MENU_NAME = "GraphMenu";
151
- var [createMenuContext, createMenuScope] = (0, import_react_context.createContextScope)(MENU_NAME, []);
152
- var [MenuContextProvider, useMenu] = createMenuContext(MENU_NAME);
153
- var menuContextDefaults = {
154
- iconSize: 5,
155
- useGroupItems: () => null
156
- };
157
- var useMenuScope = createMenuScope();
158
- var MenuProvider = ({ children, useGroupItems = menuContextDefaults.useGroupItems, iconSize = menuContextDefaults.iconSize, attendableId }) => {
159
- var _effect = (0, import_tracking3.useSignals)();
160
- try {
161
- const { scope } = useMenuScope(void 0);
162
- return /* @__PURE__ */ import_react3.default.createElement(MenuContextProvider, {
163
- useGroupItems,
164
- iconSize,
165
- attendableId,
166
- scope
167
- }, children);
168
- } finally {
169
- _effect.f();
170
- }
171
- };
172
- var useMenuItems = (group, propsItems, consumerName = "useMenuItemConsumer", __menuScope) => {
173
- const { useGroupItems } = useMenu(consumerName, __menuScope);
174
- const groupItems = useGroupItems(group);
175
- return (0, import_react3.useMemo)(() => propsItems ?? groupItems ?? void 0, [
176
- propsItems,
177
- groupItems
178
- ]);
179
- };
180
- var DropdownMenuItem = ({ item, onClick, __menuScope }) => {
181
- var _effect = (0, import_tracking.useSignals)();
182
- try {
183
- const action = item;
184
- const handleClick = (0, import_react.useCallback)((event) => onClick(action, event), [
185
- action,
186
- onClick
187
- ]);
188
- const { iconSize } = useMenu("DropdownMenuItem", __menuScope);
189
- return /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Item, {
190
- onClick: handleClick,
191
- classNames: "gap-2",
192
- disabled: action.properties?.disabled,
193
- ...action.properties?.testId && {
194
- "data-testid": action.properties.testId
195
- }
196
- }, action.properties?.icon && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Icon, {
197
- icon: action.properties.icon,
198
- size: iconSize
199
- }), /* @__PURE__ */ import_react.default.createElement(ActionLabel, {
200
- action
201
- }));
202
- } finally {
203
- _effect.f();
204
- }
205
- };
206
- var DropdownMenuRoot = ({ items: propsItems, group, open, defaultOpen, onOpenChange, caller, children, __menuScope, ...naturalProps }) => {
207
- var _effect = (0, import_tracking.useSignals)();
208
- try {
209
- const [optionsMenuOpen, setOptionsMenuOpen] = (0, import_react_use_controllable_state.useControllableState)({
210
- prop: open,
211
- defaultProp: defaultOpen,
212
- onChange: onOpenChange
213
- });
214
- const handleActionClick = (0, import_react.useCallback)((action, event) => {
215
- if (action.properties?.disabled) {
216
- return;
217
- }
218
- event.stopPropagation();
219
- setOptionsMenuOpen(false);
220
- void action.data?.({
221
- parent: group,
222
- caller
223
- });
224
- }, [
225
- group,
226
- caller
227
- ]);
228
- const items = useMenuItems(group, propsItems);
229
- return /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Root, {
230
- open: optionsMenuOpen,
231
- onOpenChange: setOptionsMenuOpen,
232
- ...naturalProps
233
- }, 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, {
234
- key: item.id,
235
- item,
236
- onClick: handleActionClick
237
- }))), /* @__PURE__ */ import_react.default.createElement(import_react_ui.DropdownMenu.Arrow, null))));
238
- } finally {
239
- _effect.f();
240
- }
241
- };
242
- var DropdownMenu = {
243
- Root: DropdownMenuRoot,
244
- Trigger: import_react_ui.DropdownMenu.Trigger,
245
- VirtualTrigger: import_react_ui.DropdownMenu.VirtualTrigger
246
- };
247
- var MenuSeparatorType = "@dxos/react-ui-toolbar/separator";
248
- var isSeparator = (node) => node.type === MenuSeparatorType;
249
- var isMenuGroup = (node) => node.type === import_app_graph3.ACTION_GROUP_TYPE;
250
- var ActionToolbarItem = ({ action, __menuScope }) => {
251
- var _effect = (0, import_tracking4.useSignals)();
252
- try {
253
- const { iconSize } = useMenu("ActionToolbarItem", __menuScope);
254
- const { t } = (0, import_react_ui3.useTranslation)(translationKey);
255
- const handleClick = (0, import_react4.useCallback)(() => action.data?.(), [
256
- action
257
- ]);
258
- const { icon, iconOnly = true, disabled, testId, hidden, classNames } = action.properties;
259
- const Root = icon ? import_react_ui3.Toolbar.IconButton : import_react_ui3.Toolbar.Button;
260
- const rootProps = icon ? {
261
- icon,
262
- size: iconSize,
263
- iconOnly,
264
- label: actionLabel(action, t)
265
- } : {
266
- children: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
267
- action
268
- })
269
- };
270
- return hidden ? null : /* @__PURE__ */ import_react4.default.createElement(Root, {
271
- key: action.id,
272
- disabled,
273
- onClick: handleClick,
274
- variant: "ghost",
275
- ...testId && {
276
- "data-testid": testId
277
- },
278
- ...rootProps,
279
- classNames
280
- });
281
- } finally {
282
- _effect.f();
283
- }
284
- };
285
- var DropdownMenuToolbarItem = ({ group, items: propsItems, __menuScope }) => {
286
- var _effect = (0, import_tracking4.useSignals)();
287
- try {
288
- const { iconOnly, disabled, testId } = group.properties;
289
- const { t } = (0, import_react_ui3.useTranslation)(translationKey);
290
- const { iconSize } = useMenu("DropdownMenuToolbarItem", __menuScope);
291
- const items = useMenuItems(group, propsItems, "DropdownMenuToolbarItem", __menuScope);
292
- const activeItem = items?.find((item) => !!item.properties.checked);
293
- const icon = group.properties.applyActive && // TODO(thure): Handle other menu item types.
294
- activeItem?.properties.icon || group.properties.icon;
295
- const Root = icon ? import_react_ui3.Toolbar.IconButton : import_react_ui3.Toolbar.Button;
296
- const labelAction = group.properties.applyActive && activeItem ? activeItem : group;
297
- const rootProps = icon ? {
298
- icon,
299
- size: iconSize,
300
- iconOnly,
301
- label: actionLabel(labelAction, t),
302
- caretDown: true
303
- } : {
304
- children: /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
305
- action: labelAction
306
- }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Icon, {
307
- size: 3,
308
- icon: "ph--caret-down--bold",
309
- classNames: "mis-1"
310
- }))
311
- };
312
- return /* @__PURE__ */ import_react4.default.createElement(DropdownMenu.Root, {
313
- group,
314
- items
315
- }, /* @__PURE__ */ import_react4.default.createElement(DropdownMenu.Trigger, {
316
- asChild: true
317
- }, /* @__PURE__ */ import_react4.default.createElement(Root, {
318
- variant: "ghost",
319
- disabled,
320
- ...rootProps,
321
- ...testId && {
322
- "data-testid": testId
323
- }
324
- })));
325
- } finally {
326
- _effect.f();
327
- }
328
- };
329
- var ToggleGroupItem = ({ group, action, __menuScope }) => {
330
- var _effect = (0, import_tracking4.useSignals)();
331
- try {
332
- const { iconSize } = useMenu("ToggleGroupItem", __menuScope);
333
- const { t } = (0, import_react_ui3.useTranslation)(translationKey);
334
- const { icon, iconOnly = true, disabled, testId, hidden, classNames } = action.properties;
335
- const handleClick = (0, import_react4.useCallback)(() => action.data?.({
336
- parent: group
337
- }), [
338
- action,
339
- group
340
- ]);
341
- const Root = icon ? import_react_ui3.Toolbar.ToggleGroupIconItem : import_react_ui3.Toolbar.ToggleGroupItem;
342
- const rootProps = icon ? {
343
- icon,
344
- size: iconSize,
345
- iconOnly,
346
- label: actionLabel(action, t)
347
- } : {
348
- children: /* @__PURE__ */ import_react4.default.createElement(ActionLabel, {
349
- action
350
- })
351
- };
352
- return hidden ? null : /* @__PURE__ */ import_react4.default.createElement(Root, {
353
- key: action.id,
354
- value: action.id,
355
- disabled,
356
- onClick: handleClick,
357
- variant: "ghost",
358
- ...testId && {
359
- "data-testid": testId
360
- },
361
- ...rootProps,
362
- classNames
363
- });
364
- } finally {
365
- _effect.f();
366
- }
367
- };
368
- var ToggleGroupToolbarItem = ({ group, items: propsItems, __menuScope }) => {
369
- var _effect = (0, import_tracking4.useSignals)();
370
- try {
371
- const items = useMenuItems(group, propsItems, "ToggleGroupToolbarItem", __menuScope);
372
- const { selectCardinality, value } = group.properties;
373
- return (
374
- // TODO(thure): The type here is difficult to manage, what do?
375
- // @ts-ignore
376
- /* @__PURE__ */ import_react4.default.createElement(
377
- import_react_ui3.Toolbar.ToggleGroup,
378
- {
379
- type: selectCardinality,
380
- value
381
- },
382
- // TODO(thure): Handle other menu item types.
383
- items.map((action) => /* @__PURE__ */ import_react4.default.createElement(ToggleGroupItem, {
384
- key: action.id,
385
- group,
386
- action
387
- }))
388
- )
389
- );
390
- } finally {
391
- _effect.f();
392
- }
393
- };
394
- var ToolbarMenu = ({ __menuScope, classNames, textBlockWidth: wrapContents, ...props }) => {
395
- var _effect = (0, import_tracking4.useSignals)();
396
- try {
397
- const items = useMenuItems(void 0, void 0, "ToolbarMenu", __menuScope);
398
- const { attendableId } = useMenu("ToolbarMenu", __menuScope);
399
- const { hasAttention } = (0, import_react_ui_attention.useAttention)(attendableId);
400
- const InnerRoot = wrapContents ? "div" : import_react4.Fragment;
401
- const innerRootProps = wrapContents ? {
402
- role: "none",
403
- className: (0, import_react_ui_theme2.mx)(import_react_ui_theme2.textBlockWidth, import_react_ui_theme2.toolbarLayout)
404
- } : {};
405
- return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Root, {
406
- ...props,
407
- layoutManaged: wrapContents,
408
- classNames: [
409
- attendableId && !hasAttention && "*:opacity-20 !bg-transparent",
410
- classNames
411
- ]
412
- }, /* @__PURE__ */ import_react4.default.createElement(InnerRoot, innerRootProps, items?.map((item, i) => isSeparator(item) ? /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.Toolbar.Separator, {
413
- key: i,
414
- variant: item.properties.variant
415
- }) : isMenuGroup(item) ? item.properties.variant === "dropdownMenu" ? (
416
- // TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.
417
- /* @__PURE__ */ import_react4.default.createElement(DropdownMenuToolbarItem, {
418
- key: item.id,
419
- group: item
420
- })
421
- ) : (
422
- // TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.
423
- /* @__PURE__ */ import_react4.default.createElement(ToggleGroupToolbarItem, {
424
- key: item.id,
425
- group: item
426
- })
427
- ) : (
428
- // TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.
429
- /* @__PURE__ */ import_react4.default.createElement(ActionToolbarItem, {
430
- key: item.id,
431
- action: item
432
- })
433
- ))));
434
- } finally {
435
- _effect.f();
436
- }
437
- };
438
- var edgesArrayToRecord = (edges) => {
439
- return Object.fromEntries(Object.entries(edges.reduce((acc, { source, target }) => {
440
- if (!acc[source]) {
441
- acc[source] = {
442
- inbound: [],
443
- outbound: []
444
- };
445
- }
446
- if (!acc[target]) {
447
- acc[target] = {
448
- inbound: [],
449
- outbound: []
450
- };
451
- }
452
- const sourceEdges = acc[source];
453
- if (!sourceEdges.outbound.includes(target)) {
454
- sourceEdges.outbound.push(target);
455
- }
456
- const targetEdges = acc[target];
457
- if (!targetEdges.inbound.includes(source)) {
458
- targetEdges.inbound.push(source);
459
- }
460
- return acc;
461
- }, {})));
462
- };
463
- var useMenuActions = (props) => {
464
- const registry = (0, import_react5.useContext)(import_rx_react.RegistryContext);
465
- const menuGraphProps = (0, import_rx_react.useRxValue)(props);
466
- const [graph] = (0, import_react5.useState)(new import_app_graph4.Graph({
467
- registry,
468
- nodes: menuGraphProps.nodes,
469
- edges: edgesArrayToRecord(menuGraphProps.edges)
470
- }));
471
- (0, import_react5.useEffect)(() => {
472
- graph.addNodes(menuGraphProps.nodes);
473
- graph.addEdges(menuGraphProps.edges);
474
- }, [
475
- menuGraphProps
476
- ]);
477
- const useGroupItems = (0, import_react5.useCallback)((sourceNode) => {
478
- const items = (0, import_rx_react.useRxValue)(graph.connections(sourceNode?.id || import_app_graph4.ROOT_ID));
479
- return items;
480
- }, [
481
- graph
482
- ]);
483
- return {
484
- useGroupItems
485
- };
486
- };
487
- // Annotate the CommonJS export names for ESM import in node:
488
- 0 && (module.exports = {
489
- DropdownMenu,
490
- MenuProvider,
491
- MenuSeparatorType,
492
- ToolbarMenu,
493
- createGapSeparator,
494
- createLineSeparator,
495
- createMenuAction,
496
- createMenuItemGroup,
497
- createMenuScope,
498
- isMenuGroup,
499
- isSeparator,
500
- menuContextDefaults,
501
- rxFromSignal,
502
- useMenu,
503
- useMenuActions,
504
- useMenuItems
505
- });
506
- //# sourceMappingURL=index.cjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/index.ts", "../../../src/components/DropdownMenu.tsx", "../../../src/components/ActionLabel.tsx", "../../../src/translations.ts", "../../../src/util.ts", "../../../src/components/MenuContext.tsx", "../../../src/components/ToolbarMenu.tsx", "../../../src/types.ts", "../../../src/hooks/useMenuActions.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nexport { rxFromSignal } from '@dxos/app-graph';\n\nexport * from './components';\nexport * from './hooks';\nexport * from './types';\nexport { createMenuAction, createMenuItemGroup, createLineSeparator, createGapSeparator } from './util';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport React, { type MouseEvent, useCallback } from 'react';\n\nimport { DropdownMenu as NaturalDropdownMenu, Icon, type DropdownMenuRootProps } from '@dxos/react-ui';\n\nimport { ActionLabel } from './ActionLabel';\nimport { type MenuScopedProps, useMenu, useMenuItems } from './MenuContext';\nimport { type MenuAction, type MenuItem, type MenuItemGroup } from '../types';\n\nexport type DropdownMenuProps = DropdownMenuRootProps & {\n group?: MenuItemGroup;\n items?: MenuItem[];\n caller?: string;\n};\n\nconst DropdownMenuItem = ({\n item,\n onClick,\n __menuScope,\n}: MenuScopedProps<{\n item: MenuItem;\n onClick: (action: MenuAction, event: MouseEvent) => void;\n}>) => {\n // TODO(thure): handle other items.\n const action = item as MenuAction;\n const handleClick = useCallback((event: MouseEvent) => onClick(action, event), [action, onClick]);\n const { iconSize } = useMenu('DropdownMenuItem', __menuScope);\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={iconSize} />}\n <ActionLabel action={action} />\n </NaturalDropdownMenu.Item>\n );\n};\n\nconst DropdownMenuRoot = ({\n items: propsItems,\n group,\n open,\n defaultOpen,\n onOpenChange,\n caller,\n children,\n __menuScope,\n ...naturalProps\n}: MenuScopedProps<DropdownMenuProps>) => {\n const [optionsMenuOpen, setOptionsMenuOpen] = useControllableState({\n prop: open,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\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 setOptionsMenuOpen(false);\n void action.data?.({ parent: group, caller });\n },\n [group, caller],\n );\n\n const items = useMenuItems(group, propsItems);\n\n return (\n <NaturalDropdownMenu.Root open={optionsMenuOpen} onOpenChange={setOptionsMenuOpen} {...naturalProps}>\n {children}\n <NaturalDropdownMenu.Portal>\n <NaturalDropdownMenu.Content>\n <NaturalDropdownMenu.Viewport>\n {items?.map((item) => <DropdownMenuItem key={item.id} item={item} 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 as GraphAction, type ActionGroup } from '@dxos/app-graph';\nimport { keySymbols } from '@dxos/keyboard';\nimport { toLocalizedString, useTranslation, type TFunction } from '@dxos/react-ui';\nimport { mx, descriptionText } from '@dxos/react-ui-theme';\n\nimport { translationKey } from '../translations';\nimport { type MenuActionProperties } from '../types';\nimport { getShortcut } from '../util';\n\ntype Action = GraphAction<MenuActionProperties> | ActionGroup<Omit<MenuActionProperties, 'variant'>>;\n\nexport const ActionLabel = ({ action }: { action: Action }) => {\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\nexport const actionLabel = (action: Action, t: TFunction) => {\n const shortcut = getShortcut(action);\n return `${toLocalizedString(action.properties!.label, t)}${shortcut ? ` (${keySymbols(shortcut).join('')})` : ''}`;\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 { ACTION_GROUP_TYPE, ACTION_TYPE, actionGroupSymbol, type ActionLike } from '@dxos/app-graph';\nimport { getHostPlatform } from '@dxos/util';\n\nimport {\n type MenuAction,\n type MenuActionProperties,\n type MenuItemGroup,\n type MenuItemGroupProperties,\n type MenuSeparator,\n} from './types';\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\nexport const createMenuAction = <P extends {} = {}>(\n id: string,\n invoke: () => void,\n properties: P & MenuActionProperties,\n) =>\n ({\n id,\n type: ACTION_TYPE,\n properties,\n data: invoke,\n }) satisfies MenuAction;\n\nexport const createMenuItemGroup = <\n P extends MenuItemGroupProperties = MenuItemGroupProperties & Partial<MenuActionProperties>,\n>(\n id: string,\n properties: P,\n) =>\n ({\n id,\n type: ACTION_GROUP_TYPE,\n properties,\n data: actionGroupSymbol,\n }) satisfies MenuItemGroup;\n\nexport const createGapSeparator = (id: string = 'gap', source: string = 'root') => ({\n nodes: [\n {\n id,\n type: '@dxos/react-ui-toolbar/separator',\n properties: { variant: 'gap' },\n data: undefined as never,\n } satisfies MenuSeparator,\n ],\n edges: [{ source, target: id }],\n});\n\nexport const createLineSeparator = (id: string = 'line', source: string = 'root') => ({\n nodes: [\n {\n id,\n type: '@dxos/react-ui-toolbar/separator',\n properties: { variant: 'line' },\n data: undefined as never,\n } satisfies MenuSeparator,\n ],\n edges: [{ source, target: id }],\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContextScope, type Scope } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useMemo } from 'react';\n\nimport { type MenuContextValue, type MenuItem, type MenuItemGroup } from '../types';\n\nexport type MenuScopedProps<P> = P & { __menuScope?: Scope };\n\nconst MENU_NAME = 'GraphMenu';\n\nconst [createMenuContext, createMenuScope] = createContextScope(MENU_NAME, []);\n\nconst [MenuContextProvider, useMenu] = createMenuContext<MenuContextValue>(MENU_NAME);\n\nexport const menuContextDefaults: MenuContextValue = {\n iconSize: 5,\n useGroupItems: () => null,\n};\n\nconst useMenuScope = createMenuScope();\n\nconst MenuProvider = ({\n children,\n useGroupItems = menuContextDefaults.useGroupItems,\n iconSize = menuContextDefaults.iconSize,\n attendableId,\n}: PropsWithChildren<Partial<MenuContextValue>>) => {\n const { scope } = useMenuScope(undefined);\n return (\n <MenuContextProvider useGroupItems={useGroupItems} iconSize={iconSize} attendableId={attendableId} scope={scope}>\n {children}\n </MenuContextProvider>\n );\n};\n\nexport const useMenuItems = (\n group?: MenuItemGroup,\n propsItems?: MenuItem[],\n consumerName: string = 'useMenuItemConsumer',\n __menuScope?: Scope,\n) => {\n const { useGroupItems } = useMenu(consumerName, __menuScope);\n const groupItems = useGroupItems(group);\n return useMemo(() => propsItems ?? groupItems ?? undefined, [propsItems, groupItems]);\n};\n\nexport { useMenu, createMenuScope, MenuProvider };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, useCallback } from 'react';\n\nimport { Icon, Toolbar as NaturalToolbar, type ToolbarRootProps, useTranslation } from '@dxos/react-ui';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { mx, textBlockWidth, toolbarLayout } from '@dxos/react-ui-theme';\n\nimport { actionLabel, ActionLabel } from './ActionLabel';\nimport { DropdownMenu } from './DropdownMenu';\nimport { type MenuScopedProps, useMenu, useMenuItems } from './MenuContext';\nimport { translationKey } from '../translations';\nimport {\n type MenuAction,\n type MenuItem,\n isMenuGroup,\n isSeparator,\n type MenuItemGroup,\n type MenuActionProperties,\n type MenuMultipleSelectActionGroup,\n type MenuSingleSelectActionGroup,\n} from '../types';\n\nexport type ToolbarMenuDropdownMenuActionGroup = Omit<MenuActionProperties, 'variant' | 'icon'> & {\n variant: 'dropdownMenu';\n icon: string;\n applyActive?: boolean;\n};\n\nexport type ToolbarMenuToggleGroupActionGroup = Omit<MenuActionProperties, 'variant'> & {\n variant: 'toggleGroup';\n};\n\nexport type ToolbarMenuActionGroupProperties = (\n | ToolbarMenuDropdownMenuActionGroup\n | ToolbarMenuToggleGroupActionGroup\n) &\n (MenuSingleSelectActionGroup | MenuMultipleSelectActionGroup);\n\nexport type ToolbarMenuProps = ToolbarRootProps & { textBlockWidth?: boolean };\n\nexport type ToolbarMenuActionGroupProps = {\n group: MenuItemGroup<ToolbarMenuActionGroupProperties>;\n items?: MenuItem[];\n};\n\nexport type ToolbarMenuActionProps = {\n group: MenuItemGroup<ToolbarMenuActionGroupProperties>;\n action: MenuAction;\n};\n\nconst ActionToolbarItem = ({ action, __menuScope }: MenuScopedProps<{ action: MenuAction }>) => {\n const { iconSize } = useMenu('ActionToolbarItem', __menuScope);\n const { t } = useTranslation(translationKey);\n const handleClick = useCallback(() => action.data?.(), [action]);\n const { icon, iconOnly = true, disabled, testId, hidden, classNames } = action.properties;\n const Root = icon ? NaturalToolbar.IconButton : NaturalToolbar.Button;\n const rootProps = icon\n ? { icon, size: iconSize, iconOnly, label: actionLabel(action, t) }\n : { children: <ActionLabel action={action} /> };\n return hidden ? null : (\n <Root\n key={action.id}\n disabled={disabled}\n onClick={handleClick}\n variant='ghost'\n {...(testId && { 'data-testid': testId })}\n {...(rootProps as any)}\n classNames={classNames}\n />\n );\n};\n\nconst DropdownMenuToolbarItem = ({\n group,\n items: propsItems,\n __menuScope,\n}: MenuScopedProps<ToolbarMenuActionGroupProps>) => {\n const { iconOnly, disabled, testId } = group.properties;\n const { t } = useTranslation(translationKey);\n const { iconSize } = useMenu('DropdownMenuToolbarItem', __menuScope);\n const items = useMenuItems(group, propsItems, 'DropdownMenuToolbarItem', __menuScope);\n const activeItem = items?.find((item) => !!(item as MenuAction).properties.checked);\n const icon =\n ((group.properties as any).applyActive &&\n // TODO(thure): Handle other menu item types.\n (activeItem as MenuAction)?.properties.icon) ||\n group.properties.icon;\n const Root = icon ? NaturalToolbar.IconButton : NaturalToolbar.Button;\n const labelAction = (group.properties as any).applyActive && activeItem ? (activeItem as MenuAction) : group;\n const rootProps = icon\n ? { icon, size: iconSize, iconOnly, label: actionLabel(labelAction, t), caretDown: true }\n : {\n children: (\n <>\n <ActionLabel action={labelAction} />\n <Icon size={3} icon='ph--caret-down--bold' classNames='mis-1' />\n </>\n ),\n };\n return (\n <DropdownMenu.Root group={group} items={items}>\n <DropdownMenu.Trigger asChild>\n <Root variant='ghost' disabled={disabled} {...(rootProps as any)} {...(testId && { 'data-testid': testId })} />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n );\n};\n\nconst ToggleGroupItem = ({ group, action, __menuScope }: MenuScopedProps<ToolbarMenuActionProps>) => {\n const { iconSize } = useMenu('ToggleGroupItem', __menuScope);\n const { t } = useTranslation(translationKey);\n const { icon, iconOnly = true, disabled, testId, hidden, classNames } = action.properties;\n const handleClick = useCallback(() => action.data?.({ parent: group }), [action, group]);\n const Root = icon ? NaturalToolbar.ToggleGroupIconItem : NaturalToolbar.ToggleGroupItem;\n const rootProps = icon\n ? { icon, size: iconSize, iconOnly, label: actionLabel(action, t) }\n : { children: <ActionLabel action={action} /> };\n return hidden ? null : (\n <Root\n key={action.id}\n value={action.id as any}\n disabled={disabled}\n onClick={handleClick}\n variant='ghost'\n {...(testId && { 'data-testid': testId })}\n {...(rootProps as any)}\n classNames={classNames}\n />\n );\n};\n\nconst ToggleGroupToolbarItem = ({\n group,\n items: propsItems,\n __menuScope,\n}: MenuScopedProps<ToolbarMenuActionGroupProps>) => {\n const items = useMenuItems(group, propsItems, 'ToggleGroupToolbarItem', __menuScope);\n const { selectCardinality, value } = group.properties;\n return (\n // TODO(thure): The type here is difficult to manage, what do?\n // @ts-ignore\n <NaturalToolbar.ToggleGroup type={selectCardinality} value={value}>\n {\n // TODO(thure): Handle other menu item types.\n (items as MenuAction[]).map((action) => (\n <ToggleGroupItem key={action.id} group={group} action={action} />\n ))\n }\n </NaturalToolbar.ToggleGroup>\n );\n};\n\nexport const ToolbarMenu = ({\n __menuScope,\n classNames,\n textBlockWidth: wrapContents,\n ...props\n}: MenuScopedProps<ToolbarMenuProps>) => {\n const items = useMenuItems(undefined, undefined, 'ToolbarMenu', __menuScope);\n const { attendableId } = useMenu('ToolbarMenu', __menuScope);\n const { hasAttention } = useAttention(attendableId);\n const InnerRoot = wrapContents ? 'div' : Fragment;\n const innerRootProps = wrapContents ? { role: 'none', className: mx(textBlockWidth, toolbarLayout) } : {};\n return (\n <NaturalToolbar.Root\n {...props}\n layoutManaged={wrapContents}\n classNames={[attendableId && !hasAttention && '*:opacity-20 !bg-transparent', classNames]}\n >\n <InnerRoot {...innerRootProps}>\n {items?.map((item: MenuItem, i: number) =>\n isSeparator(item) ? (\n <NaturalToolbar.Separator key={i} variant={item.properties.variant} />\n ) : isMenuGroup(item) ? (\n item.properties.variant === 'dropdownMenu' ? (\n // TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.\n <DropdownMenuToolbarItem key={item.id} group={item as MenuItemGroup<ToolbarMenuActionGroupProperties>} />\n ) : (\n // TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.\n <ToggleGroupToolbarItem key={item.id} group={item as MenuItemGroup<ToolbarMenuActionGroupProperties>} />\n )\n ) : (\n // TODO(thure): Figure out type narrowing that doesn’t require so much use of `as`.\n <ActionToolbarItem key={item.id} action={item as MenuAction} />\n ),\n )}\n </InnerRoot>\n </NaturalToolbar.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Node, type Action, type ActionGroup, ACTION_GROUP_TYPE } from '@dxos/app-graph';\nimport { type ToolbarSeparatorProps, type Label, type IconButtonProps, type ClassNameValue } from '@dxos/react-ui';\n\nexport type MenuActionProperties = {\n label: Label;\n icon?: string;\n value?: string;\n disabled?: boolean;\n hidden?: boolean;\n iconOnly?: boolean;\n testId?: string;\n variant?: 'action' | 'toggle';\n checked?: boolean;\n classNames?: ClassNameValue;\n};\n\nexport type MenuItemGroupProperties = {\n label: Label;\n icon?: string;\n iconOnly?: boolean;\n};\n\nexport type MenuAction<P extends {} = {}> = Action<P & MenuActionProperties>;\n\nexport const MenuSeparatorType = '@dxos/react-ui-toolbar/separator' as const;\n\nexport type MenuSeparator = Node<never, Pick<ToolbarSeparatorProps, 'variant'>> & {\n type: typeof MenuSeparatorType;\n};\n\nexport const isSeparator = (node: Node): node is MenuSeparator => node.type === MenuSeparatorType;\n\nexport type MenuSingleSelectActionGroup = { selectCardinality: 'single'; value: string };\nexport type MenuMultipleSelectActionGroup = { selectCardinality: 'multiple'; value: string[] };\n\nexport type MenuItemGroup<P extends Record<string, any> = Record<string, any>> = ActionGroup<P>;\n\nexport const isMenuGroup = (node: Node): node is MenuItemGroup => node.type === ACTION_GROUP_TYPE;\n\nexport type MenuItem = MenuSeparator | MenuAction | MenuItemGroup;\n\nexport type MenuItemsResolver = (group?: MenuItemGroup) => MenuItem[] | null;\n\nexport type MenuContextValue = {\n useGroupItems: MenuItemsResolver;\n iconSize: IconButtonProps['size'];\n attendableId?: string;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { RegistryContext, type Rx, useRxValue } from '@effect-rx/rx-react';\nimport { useCallback, useContext, useEffect, useState } from 'react';\n\nimport { type Edge, type Edges, Graph, type NodeArg, type Node, ROOT_ID } from '@dxos/app-graph';\n\nimport { type MenuItem, type MenuItemGroup } from '../types';\n\nconst edgesArrayToRecord = (edges: Edge[]): Record<string, Edges> => {\n return Object.fromEntries(\n Object.entries(\n edges.reduce((acc: Record<string, { inbound: string[]; outbound: string[] }>, { source, target }) => {\n if (!acc[source]) {\n acc[source] = { inbound: [], outbound: [] };\n }\n if (!acc[target]) {\n acc[target] = { inbound: [], outbound: [] };\n }\n\n const sourceEdges = acc[source];\n if (!sourceEdges.outbound.includes(target)) {\n sourceEdges.outbound.push(target);\n }\n\n const targetEdges = acc[target];\n if (!targetEdges.inbound.includes(source)) {\n targetEdges.inbound.push(source);\n }\n\n return acc;\n }, {}),\n ),\n );\n};\n\nexport type ActionGraphNodes = NodeArg<any>[];\nexport type ActionGraphEdges = Edge[];\nexport type ActionGraphProps = { nodes: ActionGraphNodes; edges: ActionGraphEdges };\n\nexport const useMenuActions = (props: Rx.Rx<ActionGraphProps>) => {\n const registry = useContext(RegistryContext);\n const menuGraphProps = useRxValue(props);\n\n const [graph] = useState(\n new Graph({\n registry,\n nodes: menuGraphProps.nodes as Node[],\n edges: edgesArrayToRecord(menuGraphProps.edges),\n }),\n );\n\n useEffect(() => {\n graph.addNodes(menuGraphProps.nodes);\n graph.addEdges(menuGraphProps.edges);\n }, [menuGraphProps]);\n\n const useGroupItems = useCallback(\n (sourceNode?: MenuItemGroup) => {\n const items = useRxValue(graph.connections(sourceNode?.id || ROOT_ID)) as MenuItem[];\n return items;\n },\n [graph],\n );\n\n return { useGroupItems };\n};\n"],
5
- "mappings": "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",
6
- "names": ["import_react", "import_react_ui", "import_app_graph", "import_react_ui_theme", "translationKey", "getShortcut", "action", "properties", "keyBinding", "getHostPlatform", "createMenuAction", "id", "invoke", "type", "ACTION_TYPE", "data", "createMenuItemGroup", "ACTION_GROUP_TYPE", "actionGroupSymbol", "createGapSeparator", "source", "nodes", "variant", "undefined", "edges", "target", "createLineSeparator", "ActionLabel", "shortcut", "t", "useTranslation", "React", "span", "className", "toLocalizedString", "label", "mx", "descriptionText", "keySymbols", "join", "actionLabel", "MENU_NAME", "createMenuContext", "createMenuScope", "createContextScope", "MenuContextProvider", "useMenu", "menuContextDefaults", "iconSize", "useGroupItems", "useMenuScope", "MenuProvider", "children", "attendableId", "scope", "useMenuItems", "group", "propsItems", "consumerName", "__menuScope", "groupItems", "useMemo", "DropdownMenuItem", "item", "onClick", "handleClick", "useCallback", "event", "NaturalDropdownMenu", "Item", "classNames", "disabled", "testId", "icon", "Icon", "size", "DropdownMenuRoot", "items", "open", "defaultOpen", "onOpenChange", "caller", "naturalProps", "optionsMenuOpen", "setOptionsMenuOpen", "useControllableState", "prop", "defaultProp", "onChange", "handleActionClick", "stopPropagation", "parent", "Root", "Portal", "Content", "Viewport", "map", "key", "Arrow", "DropdownMenu", "Trigger", "VirtualTrigger", "MenuSeparatorType", "isSeparator", "node", "isMenuGroup", "ActionToolbarItem", "iconOnly", "hidden", "NaturalToolbar", "IconButton", "Button", "rootProps", "DropdownMenuToolbarItem", "activeItem", "find", "checked", "applyActive", "labelAction", "caretDown", "asChild", "ToggleGroupItem", "ToggleGroupIconItem", "value", "ToggleGroupToolbarItem", "selectCardinality", "ToggleGroup", "ToolbarMenu", "textBlockWidth", "wrapContents", "props", "hasAttention", "useAttention", "InnerRoot", "Fragment", "innerRootProps", "role", "toolbarLayout", "layoutManaged", "i", "Separator", "edgesArrayToRecord", "Object", "fromEntries", "entries", "reduce", "acc", "inbound", "outbound", "sourceEdges", "includes", "push", "targetEdges", "useMenuActions", "registry", "useContext", "RegistryContext", "menuGraphProps", "useRxValue", "graph", "useState", "Graph", "useEffect", "addNodes", "addEdges", "sourceNode", "connections", "ROOT_ID"]
7
- }
@@ -1 +0,0 @@
1
- {"inputs":{"packages/ui/react-ui-menu/src/translations.ts":{"bytes":869,"imports":[],"format":"esm"},"packages/ui/react-ui-menu/src/util.ts":{"bytes":5896,"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/components/ActionLabel.tsx":{"bytes":4330,"imports":[{"path":"@preact-signals/safe-react/tracking","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":"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/MenuContext.tsx":{"bytes":5222,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx":{"bytes":10503,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"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"},{"path":"packages/ui/react-ui-menu/src/components/MenuContext.tsx","kind":"import-statement","original":"./MenuContext"}],"format":"esm"},"packages/ui/react-ui-menu/src/types.ts":{"bytes":3207,"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/components/ToolbarMenu.tsx":{"bytes":24564,"imports":[{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","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"},{"path":"packages/ui/react-ui-menu/src/components/MenuContext.tsx","kind":"import-statement","original":"./MenuContext"},{"path":"packages/ui/react-ui-menu/src/translations.ts","kind":"import-statement","original":"../translations"},{"path":"packages/ui/react-ui-menu/src/types.ts","kind":"import-statement","original":"../types"}],"format":"esm"},"packages/ui/react-ui-menu/src/components/index.ts":{"bytes":686,"imports":[{"path":"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx","kind":"import-statement","original":"./DropdownMenu"},{"path":"packages/ui/react-ui-menu/src/components/ToolbarMenu.tsx","kind":"import-statement","original":"./ToolbarMenu"},{"path":"packages/ui/react-ui-menu/src/components/MenuContext.tsx","kind":"import-statement","original":"./MenuContext"}],"format":"esm"},"packages/ui/react-ui-menu/src/hooks/useMenuActions.ts":{"bytes":6891,"imports":[{"path":"@effect-rx/rx-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true}],"format":"esm"},"packages/ui/react-ui-menu/src/hooks/index.ts":{"bytes":489,"imports":[{"path":"packages/ui/react-ui-menu/src/hooks/useMenuActions.ts","kind":"import-statement","original":"./useMenuActions"}],"format":"esm"},"packages/ui/react-ui-menu/src/index.ts":{"bytes":1254,"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"packages/ui/react-ui-menu/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/ui/react-ui-menu/src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"packages/ui/react-ui-menu/src/types.ts","kind":"import-statement","original":"./types"},{"path":"packages/ui/react-ui-menu/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/ui/react-ui-menu/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":31882},"packages/ui/react-ui-menu/dist/lib/node/index.cjs":{"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"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":"@preact-signals/safe-react/tracking","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/app-graph","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@preact-signals/safe-react/tracking","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-attention","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@effect-rx/rx-react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true}],"exports":["DropdownMenu","MenuProvider","MenuSeparatorType","ToolbarMenu","createGapSeparator","createLineSeparator","createMenuAction","createMenuItemGroup","createMenuScope","isMenuGroup","isSeparator","menuContextDefaults","rxFromSignal","useMenu","useMenuActions","useMenuItems"],"entryPoint":"packages/ui/react-ui-menu/src/index.ts","inputs":{"packages/ui/react-ui-menu/src/index.ts":{"bytesInOutput":48},"packages/ui/react-ui-menu/src/components/DropdownMenu.tsx":{"bytesInOutput":2621},"packages/ui/react-ui-menu/src/components/ActionLabel.tsx":{"bytesInOutput":1031},"packages/ui/react-ui-menu/src/translations.ts":{"bytesInOutput":118},"packages/ui/react-ui-menu/src/util.ts":{"bytesInOutput":1113},"packages/ui/react-ui-menu/src/components/MenuContext.tsx":{"bytesInOutput":1199},"packages/ui/react-ui-menu/src/components/index.ts":{"bytesInOutput":0},"packages/ui/react-ui-menu/src/components/ToolbarMenu.tsx":{"bytesInOutput":6689},"packages/ui/react-ui-menu/src/types.ts":{"bytesInOutput":258},"packages/ui/react-ui-menu/src/hooks/useMenuActions.ts":{"bytesInOutput":1447},"packages/ui/react-ui-menu/src/hooks/index.ts":{"bytesInOutput":0}},"bytes":15523}}}