@dxos/plugin-navtree 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8
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/CommandsDialogContent-2DKIOLJL.mjs +113 -0
- package/dist/lib/browser/CommandsDialogContent-2DKIOLJL.mjs.map +7 -0
- package/dist/lib/browser/CommandsTrigger-ABODVVMP.mjs +33 -0
- package/dist/lib/browser/CommandsTrigger-ABODVVMP.mjs.map +7 -0
- package/dist/lib/browser/NavTreeContainer-IQZCK4Y4.mjs +12 -0
- package/dist/lib/browser/NavTreeContainer-IQZCK4Y4.mjs.map +7 -0
- package/dist/lib/browser/NavTreeDocumentTitle-L6NLLWLD.mjs +26 -0
- package/dist/lib/browser/NavTreeDocumentTitle-L6NLLWLD.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-RSMA6I22.mjs → app-graph-builder-Z43OTNI2.mjs} +6 -5
- package/dist/lib/browser/app-graph-builder-Z43OTNI2.mjs.map +7 -0
- package/dist/lib/browser/{chunk-YKTYPINZ.mjs → chunk-A4VDCIJC.mjs} +3 -3
- package/dist/lib/browser/{chunk-YKTYPINZ.mjs.map → chunk-A4VDCIJC.mjs.map} +1 -1
- package/dist/lib/browser/chunk-DINDC6HE.mjs +14 -0
- package/dist/lib/browser/chunk-DINDC6HE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AGQDZBPL.mjs → chunk-KF26WA4O.mjs} +5 -5
- package/dist/lib/browser/{chunk-AGQDZBPL.mjs.map → chunk-KF26WA4O.mjs.map} +3 -3
- package/dist/lib/browser/chunk-OGUYILOW.mjs +1462 -0
- package/dist/lib/browser/chunk-OGUYILOW.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +35 -31
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{keyboard-32EH3N4K.mjs → keyboard-HYGFQO7T.mjs} +11 -6
- package/dist/lib/browser/keyboard-HYGFQO7T.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/operation-resolver-VDWVUII5.mjs +49 -0
- package/dist/lib/browser/operation-resolver-VDWVUII5.mjs.map +7 -0
- package/dist/lib/browser/{react-surface-F6CVMS3Y.mjs → react-surface-LFMKIKNY.mjs} +15 -14
- package/dist/lib/browser/react-surface-LFMKIKNY.mjs.map +7 -0
- package/dist/lib/browser/{state-EVYQOUI3.mjs → state-CWMNNF7K.mjs} +34 -23
- package/dist/lib/browser/state-CWMNNF7K.mjs.map +7 -0
- package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/keyboard/keyboard.d.ts +1 -1
- package/dist/types/src/capabilities/keyboard/keyboard.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +1 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/state/state.d.ts +1 -1
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.d.ts +10 -32
- package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts +2 -5
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
- package/dist/types/src/components/{NavTreeContext.d.ts → NavTreeContext/NavTreeContext.d.ts} +1 -1
- package/dist/types/src/components/NavTreeContext/NavTreeContext.d.ts.map +1 -0
- package/dist/types/src/components/NavTreeContext/index.d.ts +2 -0
- package/dist/types/src/components/NavTreeContext/index.d.ts.map +1 -0
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts +4 -2
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L0Menu.d.ts +4 -1
- package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Panel.d.ts +3 -6
- package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Tabs.d.ts +3 -2
- package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -1
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +0 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +5 -13
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/{components/CommandsDialog/CommandsDialog.d.ts → containers/CommandsDialogContent/CommandsDialogContent.d.ts} +1 -1
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsDialogContent/index.d.ts +3 -0
- package/dist/types/src/containers/CommandsDialogContent/index.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsTrigger/index.d.ts +3 -0
- package/dist/types/src/containers/CommandsTrigger/index.d.ts.map +1 -0
- package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts +9 -0
- package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -0
- package/dist/types/src/containers/NavTreeContainer/index.d.ts +3 -0
- package/dist/types/src/containers/NavTreeContainer/index.d.ts.map +1 -0
- package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -0
- package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts +3 -0
- package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +7 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/experimental/Tree.stories.d.ts +18 -4
- package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +5 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useActions.d.ts +5 -0
- package/dist/types/src/hooks/useActions.d.ts.map +1 -0
- package/dist/types/src/hooks/useLoadDescendents.d.ts +6 -0
- package/dist/types/src/hooks/useLoadDescendents.d.ts.map +1 -0
- package/dist/types/src/hooks/useNavTreeModel.d.ts +7 -0
- package/dist/types/src/hooks/useNavTreeModel.d.ts.map +1 -0
- package/dist/types/src/{hooks.d.ts → hooks/useNavTreeState.d.ts} +2 -14
- package/dist/types/src/hooks/useNavTreeState.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/generator.d.ts +3 -3
- package/dist/types/src/testing/generator.d.ts.map +1 -1
- package/dist/types/src/types/events.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +5 -1
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +43 -42
- package/src/NavTreePlugin.tsx +22 -24
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +4 -3
- package/src/capabilities/keyboard/keyboard.ts +6 -5
- package/src/capabilities/operation-resolver/operation-resolver.ts +23 -19
- package/src/capabilities/react-surface/react-surface.tsx +12 -13
- package/src/capabilities/state/state.ts +41 -13
- package/src/components/NavTree/NavTree.stories.tsx +20 -18
- package/src/components/NavTree/NavTree.tsx +61 -20
- package/src/components/{NavTreeContext.tsx → NavTreeContext/NavTreeContext.tsx} +1 -1
- package/src/components/NavTreeContext/index.ts +5 -0
- package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +2 -2
- package/src/components/NavTreeItem/NavTreeItemAction.tsx +40 -23
- package/src/components/NavTreeItem/NavTreeItemColumns.tsx +40 -14
- package/src/components/Sidebar/L0Menu.tsx +80 -83
- package/src/components/Sidebar/L1Panel.tsx +244 -90
- package/src/components/Sidebar/L1Tabs.tsx +13 -3
- package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +2 -3
- package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +1 -1
- package/src/components/index.ts +0 -3
- package/src/components/types.ts +12 -17
- package/src/{components/CommandsDialog/CommandsDialog.tsx → containers/CommandsDialogContent/CommandsDialogContent.tsx} +19 -13
- package/src/containers/CommandsDialogContent/index.ts +7 -0
- package/src/{components/CommandsDialog → containers/CommandsTrigger}/CommandsTrigger.tsx +4 -4
- package/src/containers/CommandsTrigger/index.ts +7 -0
- package/src/{components → containers/NavTreeContainer}/NavTreeContainer.tsx +75 -141
- package/src/containers/NavTreeContainer/index.ts +6 -0
- package/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.tsx +1 -1
- package/src/containers/NavTreeDocumentTitle/index.ts +7 -0
- package/src/containers/index.ts +12 -0
- package/src/experimental/Tree.stories.tsx +54 -57
- package/src/experimental/Tree.tsx +3 -3
- package/src/hooks/index.ts +8 -0
- package/src/hooks/useActions.ts +34 -0
- package/src/hooks/useLoadDescendents.ts +23 -0
- package/src/hooks/useNavTreeModel.ts +118 -0
- package/src/{hooks.ts → hooks/useNavTreeState.ts} +3 -34
- package/src/meta.ts +2 -2
- package/src/testing/app-graph-builder.ts +5 -5
- package/src/testing/generator.ts +4 -4
- package/src/types/capabilities.ts +1 -1
- package/src/types/events.ts +3 -2
- package/src/util.ts +18 -4
- package/dist/lib/browser/app-graph-builder-RSMA6I22.mjs.map +0 -7
- package/dist/lib/browser/chunk-6YPQ625I.mjs +0 -1293
- package/dist/lib/browser/chunk-6YPQ625I.mjs.map +0 -7
- package/dist/lib/browser/keyboard-32EH3N4K.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-IB75DC5O.mjs +0 -52
- package/dist/lib/browser/operation-resolver-IB75DC5O.mjs.map +0 -7
- package/dist/lib/browser/react-surface-F6CVMS3Y.mjs.map +0 -7
- package/dist/lib/browser/state-EVYQOUI3.mjs.map +0 -7
- package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts.map +0 -1
- package/dist/types/src/components/CommandsDialog/CommandsTrigger.d.ts.map +0 -1
- package/dist/types/src/components/CommandsDialog/index.d.ts +0 -3
- package/dist/types/src/components/CommandsDialog/index.d.ts.map +0 -1
- package/dist/types/src/components/NavTreeContainer.d.ts +0 -16
- package/dist/types/src/components/NavTreeContainer.d.ts.map +0 -1
- package/dist/types/src/components/NavTreeContext.d.ts.map +0 -1
- package/dist/types/src/components/NavTreeDocumentTitle.d.ts.map +0 -1
- package/dist/types/src/hooks.d.ts.map +0 -1
- package/src/components/CommandsDialog/index.ts +0 -6
- /package/dist/types/src/{components/CommandsDialog → containers/CommandsTrigger}/CommandsTrigger.d.ts +0 -0
- /package/dist/types/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.d.ts +0 -0
|
@@ -11,10 +11,12 @@ import {
|
|
|
11
11
|
attachClosestEdge,
|
|
12
12
|
extractClosestEdge,
|
|
13
13
|
} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
|
|
14
|
+
import { useAtomValue } from '@effect-atom/atom-react';
|
|
14
15
|
import React, {
|
|
15
16
|
type MouseEvent,
|
|
16
17
|
type PropsWithChildren,
|
|
17
18
|
forwardRef,
|
|
19
|
+
memo,
|
|
18
20
|
useCallback,
|
|
19
21
|
useLayoutEffect,
|
|
20
22
|
useMemo,
|
|
@@ -27,6 +29,7 @@ import { DxAvatar } from '@dxos/lit-ui/react';
|
|
|
27
29
|
import { useActionRunner } from '@dxos/plugin-graph';
|
|
28
30
|
import {
|
|
29
31
|
Icon,
|
|
32
|
+
IconButton,
|
|
30
33
|
ListItem,
|
|
31
34
|
ScrollArea,
|
|
32
35
|
type ThemedClassName,
|
|
@@ -35,7 +38,7 @@ import {
|
|
|
35
38
|
useMediaQuery,
|
|
36
39
|
useTranslation,
|
|
37
40
|
} from '@dxos/react-ui';
|
|
38
|
-
import {
|
|
41
|
+
import { Menu, type MenuItem } from '@dxos/react-ui-menu';
|
|
39
42
|
import type { StackItemRearrangeHandler } from '@dxos/react-ui-stack';
|
|
40
43
|
import { Tabs } from '@dxos/react-ui-tabs';
|
|
41
44
|
import { mx } from '@dxos/ui-theme';
|
|
@@ -60,6 +63,7 @@ type L0ItemRootProps = {
|
|
|
60
63
|
item: Node.Node;
|
|
61
64
|
parent?: Node.Node;
|
|
62
65
|
path: string[];
|
|
66
|
+
onMouseEnter?: () => void;
|
|
63
67
|
};
|
|
64
68
|
|
|
65
69
|
type L0ItemProps = L0ItemRootProps & {
|
|
@@ -68,10 +72,11 @@ type L0ItemProps = L0ItemRootProps & {
|
|
|
68
72
|
path: string[];
|
|
69
73
|
pinned?: boolean;
|
|
70
74
|
onRearrange?: StackItemRearrangeHandler<L0ItemData>;
|
|
75
|
+
onItemHover?: (params: { item: Node.Node }) => void;
|
|
71
76
|
};
|
|
72
77
|
|
|
73
78
|
const useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {
|
|
74
|
-
const {
|
|
79
|
+
const { onSelect, onTabChange } = useNavTreeContext();
|
|
75
80
|
const { getItem } = useNavTreeState();
|
|
76
81
|
const [isLg] = useMediaQuery('lg');
|
|
77
82
|
const runAction = useActionRunner();
|
|
@@ -81,17 +86,15 @@ const useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {
|
|
|
81
86
|
switch (type) {
|
|
82
87
|
case 'action': {
|
|
83
88
|
const { properties: { caller } = {} } = item;
|
|
84
|
-
return void runAction(item as Node.Action, caller ? { parent, caller } : { parent });
|
|
89
|
+
return void runAction(item as Node.Action, caller ? { parent, path, caller } : { parent, path });
|
|
85
90
|
}
|
|
86
|
-
|
|
87
91
|
case 'tab':
|
|
88
92
|
return onTabChange?.(item);
|
|
89
|
-
|
|
90
93
|
case 'link':
|
|
91
94
|
return onSelect?.({ item, path, current: !getItem(path).current, option: event.altKey });
|
|
92
95
|
}
|
|
93
96
|
},
|
|
94
|
-
[item, parent, type,
|
|
97
|
+
[item, parent, type, getItem, onSelect, onTabChange, isLg, runAction],
|
|
95
98
|
);
|
|
96
99
|
};
|
|
97
100
|
|
|
@@ -100,53 +103,56 @@ const l0Breakpoints: Record<string, string> = {
|
|
|
100
103
|
};
|
|
101
104
|
|
|
102
105
|
const l0ItemRoot =
|
|
103
|
-
'group/l0item flex
|
|
106
|
+
'group/l0item flex w-full justify-center items-center relative data[type!="collection"]:cursor-pointer dx-app-no-drag dx-focus-ring-group';
|
|
104
107
|
|
|
105
108
|
const l0ItemContent = 'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded-sm';
|
|
106
109
|
|
|
107
|
-
const L0ItemRoot =
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
<
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
110
|
+
const L0ItemRoot = memo(
|
|
111
|
+
forwardRef<HTMLElement, PropsWithChildren<L0ItemRootProps>>(
|
|
112
|
+
({ item, parent, path, onMouseEnter, children }, forwardedRef) => {
|
|
113
|
+
const { model } = useNavTreeContext();
|
|
114
|
+
const itemPath = useMemo(() => [...path, item.id], [item.id, path]);
|
|
115
|
+
const { id, testId } = useAtomValue(model.itemProps(itemPath));
|
|
116
|
+
const type = l0ItemType(item);
|
|
117
|
+
|
|
118
|
+
const { t } = useTranslation(meta.id);
|
|
119
|
+
const localizedString = toLocalizedString(item.properties.label, t);
|
|
120
|
+
|
|
121
|
+
const handleClick = useL0ItemClick({ item, parent, path: itemPath }, type);
|
|
122
|
+
const rootProps =
|
|
123
|
+
type === 'tab'
|
|
124
|
+
? { value: item.id, tabIndex: 0, onClick: handleClick, 'data-testid': testId, 'data-object-id': id }
|
|
125
|
+
: { onClick: handleClick, 'data-testid': testId, 'data-object-id': id };
|
|
126
|
+
|
|
127
|
+
return (
|
|
128
|
+
<Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>
|
|
129
|
+
<Tabs.TabPrimitive
|
|
130
|
+
{...(rootProps as any)}
|
|
131
|
+
data-type={type}
|
|
132
|
+
className={mx(l0ItemRoot, l0Breakpoints[item.properties.l0Breakpoint])}
|
|
133
|
+
ref={forwardedRef}
|
|
134
|
+
onMouseEnter={onMouseEnter}
|
|
135
|
+
>
|
|
136
|
+
{children}
|
|
137
|
+
</Tabs.TabPrimitive>
|
|
138
|
+
</Tooltip.Trigger>
|
|
139
|
+
);
|
|
140
|
+
},
|
|
141
|
+
),
|
|
136
142
|
);
|
|
137
143
|
|
|
138
144
|
export const L0ItemActiveTabIndicator = ({ classNames }: ThemedClassName<{}>) => (
|
|
139
145
|
<div
|
|
140
146
|
role='none'
|
|
141
147
|
className={mx(
|
|
142
|
-
'hidden group-aria-selected/l0item:block absolute
|
|
148
|
+
'hidden group-aria-selected/l0item:block absolute start-0 inset-y-2 w-1 bg-accent-surface rounded-ie',
|
|
143
149
|
classNames,
|
|
144
150
|
)}
|
|
145
151
|
/>
|
|
146
152
|
);
|
|
147
153
|
|
|
148
154
|
// TODO(burdon): Factor out pinned (non-draggable) items.
|
|
149
|
-
const L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {
|
|
155
|
+
const L0Item = memo(({ item, parent, path, pinned, onRearrange, onItemHover }: L0ItemProps) => {
|
|
150
156
|
const { t } = useTranslation(meta.id);
|
|
151
157
|
const itemElement = useRef<HTMLElement | null>(null);
|
|
152
158
|
const [closestEdge, setEdge] = useState<Edge | null>(null);
|
|
@@ -209,17 +215,19 @@ const L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {
|
|
|
209
215
|
);
|
|
210
216
|
}, [item, onRearrange]);
|
|
211
217
|
|
|
218
|
+
const handleMouseEnter = useCallback(() => onItemHover?.({ item }), [item, onItemHover]);
|
|
219
|
+
|
|
212
220
|
return (
|
|
213
|
-
<L0ItemRoot ref={itemElement} item={item} parent={parent} path={path}>
|
|
221
|
+
<L0ItemRoot ref={itemElement} item={item} parent={parent} path={path} onMouseEnter={handleMouseEnter}>
|
|
214
222
|
<div
|
|
215
223
|
role='none'
|
|
216
224
|
data-frame={true}
|
|
217
|
-
{...(hue && { style: { background: `var(--
|
|
225
|
+
{...(hue && { style: { background: `var(--color-${hue}-surface)` } })}
|
|
218
226
|
className={mx(
|
|
219
227
|
l0ItemContent,
|
|
220
228
|
pinned
|
|
221
|
-
? 'p-2 group-hover/l0item:bg-
|
|
222
|
-
: '
|
|
229
|
+
? 'p-2 group-hover/l0item:bg-active-surface'
|
|
230
|
+
: 'w-(--dx-l0-avatar-size) h-(--dx-l0-avatar-size) bg-active-surface',
|
|
223
231
|
)}
|
|
224
232
|
>
|
|
225
233
|
<ItemAvatar item={item} />
|
|
@@ -231,14 +239,14 @@ const L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {
|
|
|
231
239
|
{closestEdge && <ListItem.DropIndicator edge={closestEdge} />}
|
|
232
240
|
</L0ItemRoot>
|
|
233
241
|
);
|
|
234
|
-
};
|
|
242
|
+
});
|
|
235
243
|
|
|
236
244
|
const ItemAvatar = ({ item }: Pick<L0ItemProps, 'item'>) => {
|
|
237
245
|
const { t } = useTranslation(meta.id);
|
|
238
246
|
const type = l0ItemType(item);
|
|
239
247
|
if (item.properties.icon) {
|
|
240
248
|
const hue = item.properties.hue ?? null;
|
|
241
|
-
const hueFgStyle = hue && { style: { color: `var(--
|
|
249
|
+
const hueFgStyle = hue && { style: { color: `var(--color-${hue}-surface-text)` } };
|
|
242
250
|
return <Icon icon={item.properties.icon} size={6} {...hueFgStyle} />;
|
|
243
251
|
}
|
|
244
252
|
|
|
@@ -262,9 +270,18 @@ export type L0MenuProps = {
|
|
|
262
270
|
userAccountItem?: Node.Node;
|
|
263
271
|
parent?: Node.Node;
|
|
264
272
|
path: string[];
|
|
273
|
+
onItemHover?: (params: { item: Node.Node }) => void;
|
|
265
274
|
};
|
|
266
275
|
|
|
267
|
-
export const L0Menu = ({
|
|
276
|
+
export const L0Menu = ({
|
|
277
|
+
menuActions,
|
|
278
|
+
topLevelItems,
|
|
279
|
+
pinnedItems,
|
|
280
|
+
userAccountItem,
|
|
281
|
+
parent,
|
|
282
|
+
path,
|
|
283
|
+
onItemHover,
|
|
284
|
+
}: L0MenuProps) => {
|
|
268
285
|
const { t } = useTranslation(meta.id);
|
|
269
286
|
const runAction = useActionRunner();
|
|
270
287
|
const handleAction = useCallback(
|
|
@@ -300,48 +317,30 @@ export const L0Menu = ({ menuActions, topLevelItems, pinnedItems, userAccountIte
|
|
|
300
317
|
return (
|
|
301
318
|
<Tabs.Tablist
|
|
302
319
|
classNames={[
|
|
303
|
-
'group/l0 absolute z-[1] inset-
|
|
304
|
-
'grid grid-cols-[var(--l0-size)] grid-rows-[var(--rail-size)_1fr_min-content_var(--l0-size)] contain-layout',
|
|
305
|
-
'!
|
|
320
|
+
'group/l0 absolute z-[1] inset-y-0 start-0 rounded-is',
|
|
321
|
+
'grid grid-cols-[var(--dx-l0-size)] grid-rows-[var(--dx-rail-size)_1fr_min-content_var(--dx-l0-size)] dx-contain-layout',
|
|
322
|
+
'!w-(--dx-l0-size) bg-toolbar-surface border-e border-subdued-separator dx-app-drag pb-[env(safe-area-inset-bottom)]',
|
|
306
323
|
]}
|
|
307
324
|
>
|
|
308
325
|
{/* TODO(wittjosiah): Use L0Item trigger. */}
|
|
309
|
-
<
|
|
310
|
-
<
|
|
311
|
-
<
|
|
312
|
-
<
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
'grid place-items-center dx-focus-ring-group',
|
|
318
|
-
'[body[data-platform="macos"]_&]:mt-[30px]',
|
|
319
|
-
)}
|
|
320
|
-
>
|
|
321
|
-
<div
|
|
322
|
-
role='none'
|
|
323
|
-
className={mx(
|
|
324
|
-
l0ItemContent,
|
|
325
|
-
'is-[--rail-action] bs-[--rail-action] group-hover/l0item:bg-hoverSurface',
|
|
326
|
-
)}
|
|
327
|
-
>
|
|
328
|
-
<Icon icon='ph--list--regular' size={5} />
|
|
329
|
-
</div>
|
|
330
|
-
</DropdownMenu.Trigger>
|
|
331
|
-
</Tabs.TabPrimitive>
|
|
332
|
-
</Tooltip.Trigger>
|
|
333
|
-
</DropdownMenu.Root>
|
|
334
|
-
</MenuProvider>
|
|
326
|
+
<Menu.Root onAction={handleAction}>
|
|
327
|
+
<Menu.Trigger asChild data-testid='spacePlugin.addSpace'>
|
|
328
|
+
<div role='none' className='grid place-items-center'>
|
|
329
|
+
<IconButton variant='ghost' icon='ph--list--regular' iconOnly label={t('app menu label')} size={5} />
|
|
330
|
+
</div>
|
|
331
|
+
</Menu.Trigger>
|
|
332
|
+
<Menu.Content group={parent} items={menuActions} />
|
|
333
|
+
</Menu.Root>
|
|
335
334
|
|
|
336
335
|
{/* Space list. */}
|
|
337
|
-
<ScrollArea.Root>
|
|
336
|
+
<ScrollArea.Root thin orientation='vertical'>
|
|
338
337
|
<ScrollArea.Viewport>
|
|
339
338
|
<div
|
|
340
339
|
role='none'
|
|
341
340
|
className={mx([
|
|
342
|
-
'flex flex-col gap-
|
|
343
|
-
'[body[data-platform="macos"]_&]:
|
|
344
|
-
'[body[data-platform="ios"]_&]:
|
|
341
|
+
'flex flex-col gap-2 pt-1',
|
|
342
|
+
'[body[data-platform="macos"]_&]:py-[30px]',
|
|
343
|
+
'[body[data-platform="ios"]_&]:py-[max(env(safe-area-inset-top),0.25rem)]',
|
|
345
344
|
])}
|
|
346
345
|
>
|
|
347
346
|
{topLevelItems.map((item) => (
|
|
@@ -350,25 +349,23 @@ export const L0Menu = ({ menuActions, topLevelItems, pinnedItems, userAccountIte
|
|
|
350
349
|
item={item}
|
|
351
350
|
parent={parent}
|
|
352
351
|
path={path}
|
|
352
|
+
onItemHover={onItemHover}
|
|
353
353
|
{...(hasRearrangeableItems && { onRearrange: handleRearrange })}
|
|
354
354
|
/>
|
|
355
355
|
))}
|
|
356
356
|
</div>
|
|
357
|
-
<ScrollArea.Scrollbar orientation='vertical'>
|
|
358
|
-
<ScrollArea.Thumb />
|
|
359
|
-
</ScrollArea.Scrollbar>
|
|
360
357
|
</ScrollArea.Viewport>
|
|
361
358
|
</ScrollArea.Root>
|
|
362
359
|
|
|
363
360
|
{/* Actions. */}
|
|
364
|
-
<div role='none' className='grid grid-cols-1 auto-rows-
|
|
361
|
+
<div role='none' className='grid grid-cols-1 auto-rows-(--dx-rail-action) pt-2'>
|
|
365
362
|
{pinnedItems.map((item) => (
|
|
366
363
|
<L0Item key={item.id} item={item} parent={parent} path={path} pinned />
|
|
367
364
|
))}
|
|
368
365
|
</div>
|
|
369
366
|
|
|
370
367
|
{userAccountItem && (
|
|
371
|
-
<div role='none' className='grid app-no-drag'>
|
|
368
|
+
<div role='none' className='grid dx-app-no-drag'>
|
|
372
369
|
<L0ItemRoot key={userAccountItem.id} item={userAccountItem} parent={parent} path={path}>
|
|
373
370
|
<UserAccountAvatar
|
|
374
371
|
userId={userAccountItem.properties.userId}
|