@dxos/plugin-navtree 0.8.4-main.4a85c3132b → 0.8.4-main.4f23b4e393
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-A27AKTHH.mjs → neutral/CommandsDialogContent-UBGIQ5FI.mjs} +24 -23
- package/dist/lib/neutral/CommandsDialogContent-UBGIQ5FI.mjs.map +7 -0
- package/dist/lib/{browser/CommandsTrigger-HBZYQCGV.mjs → neutral/CommandsTrigger-BH5WLMHK.mjs} +8 -14
- package/dist/lib/neutral/CommandsTrigger-BH5WLMHK.mjs.map +7 -0
- package/dist/lib/neutral/NavTreeContainer-6AR4BFDD.mjs +12 -0
- package/dist/lib/neutral/NavTreeContainer-6AR4BFDD.mjs.map +7 -0
- package/dist/lib/{browser/NavTreeDocumentTitle-GEE3URWH.mjs → neutral/NavTreeDocumentTitle-H3E6ZLYE.mjs} +5 -9
- package/dist/lib/neutral/NavTreeDocumentTitle-H3E6ZLYE.mjs.map +7 -0
- package/dist/lib/neutral/NavTreePlugin.mjs +56 -0
- package/dist/lib/neutral/NavTreePlugin.mjs.map +7 -0
- package/dist/lib/neutral/NavTreePlugin.node.mjs +18 -0
- package/dist/lib/neutral/NavTreePlugin.node.mjs.map +7 -0
- package/dist/lib/{browser/app-graph-builder-XGA4GPGL.mjs → neutral/app-graph-builder-Z347LKSF.mjs} +10 -12
- package/dist/lib/neutral/app-graph-builder-Z347LKSF.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +17 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-5OPDKH6B.mjs +273 -0
- package/dist/lib/neutral/chunk-5OPDKH6B.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-JOSNCOV4.mjs +79 -0
- package/dist/lib/neutral/chunk-JOSNCOV4.mjs.map +7 -0
- package/dist/lib/neutral/chunk-T7QS2EFI.mjs +8 -0
- package/dist/lib/neutral/chunk-T7QS2EFI.mjs.map +7 -0
- package/dist/lib/{browser/chunk-YKTYPINZ.mjs → neutral/chunk-YDE5I3P5.mjs} +7 -4
- package/dist/lib/neutral/chunk-YDE5I3P5.mjs.map +7 -0
- package/dist/lib/neutral/chunk-ZSWYB7JW.mjs +27 -0
- package/dist/lib/neutral/chunk-ZSWYB7JW.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +878 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +20 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/expose-26FV4W5D.mjs +38 -0
- package/dist/lib/neutral/expose-26FV4W5D.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +169 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +34 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/{browser/keyboard-OJZC54PK.mjs → neutral/keyboard-EJ65BVTC.mjs} +8 -6
- package/dist/lib/neutral/keyboard-EJ65BVTC.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +12 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-ORDOJUL2.mjs +13 -0
- package/dist/lib/neutral/operation-handler-ORDOJUL2.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/{browser/react-surface-AYHOAJ4I.mjs → neutral/react-surface-3AJ6BHL4.mjs} +10 -19
- package/dist/lib/neutral/react-surface-3AJ6BHL4.mjs.map +7 -0
- package/dist/lib/{browser/state-AC3EETN7.mjs → neutral/state-VVITVXWM.mjs} +7 -11
- package/dist/lib/neutral/state-VVITVXWM.mjs.map +7 -0
- package/dist/lib/neutral/testing/index.mjs +436 -0
- package/dist/lib/neutral/testing/index.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +23 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +10 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/NavTreePlugin.d.ts +1 -0
- package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
- package/dist/types/src/NavTreePlugin.node.d.ts +4 -0
- package/dist/types/src/NavTreePlugin.node.d.ts.map +1 -0
- package/dist/types/src/NavTreePlugin.test.d.ts +2 -0
- package/dist/types/src/NavTreePlugin.test.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +7 -5
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/keyboard.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/state.d.ts +6 -0
- package/dist/types/src/capabilities/state.d.ts.map +1 -0
- package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts +9 -11
- 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 +7 -3
- 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/NavTreeItemAction.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -1
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -1
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +1 -2
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -1
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts +28 -0
- package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts.map +1 -0
- package/dist/types/src/containers/CommandsDialogContent/index.d.ts +1 -2
- package/dist/types/src/containers/CommandsDialogContent/index.d.ts.map +1 -1
- package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -1
- package/dist/types/src/containers/CommandsTrigger/index.d.ts +1 -2
- package/dist/types/src/containers/CommandsTrigger/index.d.ts.map +1 -1
- package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -1
- package/dist/types/src/containers/NavTreeContainer/index.d.ts +2 -2
- package/dist/types/src/containers/NavTreeContainer/index.d.ts.map +1 -1
- package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -1
- package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts +1 -2
- package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +1 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.d.ts +2 -2
- package/dist/types/src/experimental/Tree.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/useActions.d.ts +2 -4
- package/dist/types/src/hooks/useActions.d.ts.map +1 -1
- package/dist/types/src/hooks/useLoadDescendents.d.ts.map +1 -1
- package/dist/types/src/hooks/useNavTreeModel.d.ts +1 -1
- package/dist/types/src/hooks/useNavTreeModel.d.ts.map +1 -1
- package/dist/types/src/hooks/useNavTreeState.d.ts +2 -6
- package/dist/types/src/hooks/useNavTreeState.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/expose.d.ts +5 -0
- package/dist/types/src/operations/expose.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/testing/generator.d.ts.map +1 -1
- package/dist/types/src/testing/update-state.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +8 -11
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/NavTreeCapabilities.d.ts +13 -0
- package/dist/types/src/types/NavTreeCapabilities.d.ts.map +1 -0
- package/dist/types/src/types/NavTreeEvents.d.ts +3 -0
- package/dist/types/src/types/NavTreeEvents.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +2 -2
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +107 -47
- package/src/NavTreePlugin.node.ts +17 -0
- package/src/NavTreePlugin.test.ts +27 -0
- package/src/NavTreePlugin.tsx +8 -25
- package/src/capabilities/{app-graph-builder/app-graph-builder.ts → app-graph-builder.ts} +7 -7
- package/src/capabilities/index.ts +11 -5
- package/src/capabilities/{keyboard/keyboard.ts → keyboard.ts} +2 -2
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +8 -8
- package/src/capabilities/{state/state.ts → state.ts} +14 -10
- package/src/components/NavTree/NavTree.stories.tsx +18 -17
- package/src/components/NavTree/NavTree.tsx +3 -2
- 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 +6 -8
- package/src/components/NavTreeItem/NavTreeItemAction.tsx +62 -45
- package/src/components/NavTreeItem/NavTreeItemColumns.tsx +8 -6
- package/src/components/Sidebar/L0Menu.tsx +54 -81
- package/src/components/Sidebar/L1Panel.tsx +98 -135
- package/src/components/Sidebar/L1Tabs.tsx +0 -1
- package/src/components/types.ts +1 -2
- package/src/containers/CommandsDialogContent/CommandsDialogContent.stories.tsx +46 -0
- package/src/containers/CommandsDialogContent/CommandsDialogContent.tsx +52 -58
- package/src/containers/CommandsDialogContent/index.ts +1 -3
- package/src/containers/CommandsTrigger/CommandsTrigger.tsx +7 -5
- package/src/containers/CommandsTrigger/index.ts +1 -3
- package/src/containers/NavTreeContainer/NavTreeContainer.tsx +28 -27
- package/src/containers/NavTreeContainer/index.ts +2 -3
- package/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.tsx +2 -2
- package/src/containers/NavTreeDocumentTitle/index.ts +1 -3
- package/src/containers/index.ts +1 -1
- package/src/experimental/Tree.stories.tsx +27 -27
- package/src/experimental/Tree.tsx +2 -2
- package/src/hooks/useActions.ts +18 -22
- package/src/hooks/useNavTreeModel.ts +11 -5
- package/src/hooks/useNavTreeState.ts +2 -9
- package/src/index.ts +1 -2
- package/src/meta.ts +3 -2
- package/src/operations/expose.ts +42 -0
- package/src/operations/index.ts +7 -0
- package/src/plugin.ts +11 -0
- package/src/testing/app-graph-builder.ts +40 -36
- package/src/testing/generator.ts +22 -22
- package/src/translations.ts +8 -10
- package/src/types/NavTreeCapabilities.ts +21 -0
- package/src/types/NavTreeEvents.ts +12 -0
- package/src/types/index.ts +3 -2
- package/src/util.ts +2 -2
- package/dist/lib/browser/CommandsDialogContent-A27AKTHH.mjs.map +0 -7
- package/dist/lib/browser/CommandsTrigger-HBZYQCGV.mjs.map +0 -7
- package/dist/lib/browser/NavTreeContainer-B5K4FUJS.mjs +0 -12
- package/dist/lib/browser/NavTreeContainer-B5K4FUJS.mjs.map +0 -7
- package/dist/lib/browser/NavTreeDocumentTitle-GEE3URWH.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-XGA4GPGL.mjs.map +0 -7
- package/dist/lib/browser/chunk-DQCYMXEU.mjs +0 -1426
- package/dist/lib/browser/chunk-DQCYMXEU.mjs.map +0 -7
- package/dist/lib/browser/chunk-H3OJ4WLF.mjs +0 -14
- package/dist/lib/browser/chunk-H3OJ4WLF.mjs.map +0 -7
- package/dist/lib/browser/chunk-X2HDG62A.mjs +0 -23
- package/dist/lib/browser/chunk-X2HDG62A.mjs.map +0 -7
- package/dist/lib/browser/chunk-YKTYPINZ.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -141
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/keyboard-OJZC54PK.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/operation-resolver-BNAMYOHF.mjs +0 -53
- package/dist/lib/browser/operation-resolver-BNAMYOHF.mjs.map +0 -7
- package/dist/lib/browser/react-surface-AYHOAJ4I.mjs.map +0 -7
- package/dist/lib/browser/state-AC3EETN7.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/keyboard/index.d.ts +0 -3
- package/dist/types/src/capabilities/keyboard/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/keyboard/keyboard.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/state/index.d.ts +0 -3
- package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/state/state.d.ts +0 -6
- package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
- package/dist/types/src/components/NavTreeContext.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -16
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/dist/types/src/types/events.d.ts +0 -5
- package/dist/types/src/types/events.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder/index.ts +0 -7
- package/src/capabilities/keyboard/index.ts +0 -7
- package/src/capabilities/operation-resolver/index.ts +0 -7
- package/src/capabilities/operation-resolver/operation-resolver.ts +0 -44
- package/src/capabilities/react-surface/index.ts +0 -7
- package/src/capabilities/state/index.ts +0 -7
- package/src/types/capabilities.ts +0 -21
- package/src/types/events.ts +0 -12
- /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
- /package/dist/types/src/capabilities/{keyboard/keyboard.d.ts → keyboard.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
|
@@ -9,33 +9,32 @@ import { RuntimePlugin } from '@dxos/app-framework';
|
|
|
9
9
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
10
|
import { type Node } from '@dxos/app-graph';
|
|
11
11
|
import { corePlugins } from '@dxos/plugin-testing';
|
|
12
|
-
import {
|
|
13
|
-
import { withTheme } from '@dxos/react-ui/testing';
|
|
12
|
+
import { random } from '@dxos/random';
|
|
14
13
|
|
|
15
14
|
import { NavTreeItemAction, type NavTreeItemActionMenuProps } from './NavTreeItemAction';
|
|
16
15
|
|
|
17
16
|
const parent = {
|
|
18
|
-
id:
|
|
17
|
+
id: random.string.uuid(),
|
|
19
18
|
type: 'node',
|
|
20
19
|
data: null,
|
|
21
20
|
properties: {
|
|
22
|
-
label:
|
|
21
|
+
label: random.lorem.words(2),
|
|
23
22
|
icon: 'ph--circle--regular',
|
|
24
23
|
},
|
|
25
24
|
} satisfies Node.NodeArg<any>;
|
|
26
25
|
|
|
27
26
|
// TODO(burdon): Factor out across tests.
|
|
28
|
-
const menuActions =
|
|
27
|
+
const menuActions = random.helpers.multiple(
|
|
29
28
|
() =>
|
|
30
29
|
({
|
|
31
|
-
id:
|
|
30
|
+
id: random.string.uuid(),
|
|
32
31
|
type: 'action',
|
|
33
32
|
data: () =>
|
|
34
33
|
Effect.sync(() => {
|
|
35
34
|
console.log('invoke');
|
|
36
35
|
}),
|
|
37
36
|
properties: {
|
|
38
|
-
label:
|
|
37
|
+
label: random.lorem.words(2),
|
|
39
38
|
icon: 'ph--circle--regular',
|
|
40
39
|
},
|
|
41
40
|
}) satisfies Node.NodeArg<any>,
|
|
@@ -52,7 +51,6 @@ const meta = {
|
|
|
52
51
|
label: 'Select action',
|
|
53
52
|
} satisfies Partial<NavTreeItemActionMenuProps>,
|
|
54
53
|
decorators: [
|
|
55
|
-
withTheme(),
|
|
56
54
|
withPluginManager({
|
|
57
55
|
plugins: [...corePlugins(), RuntimePlugin()],
|
|
58
56
|
}),
|
|
@@ -2,23 +2,16 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React from 'react';
|
|
5
|
+
import React, { useCallback } from 'react';
|
|
6
6
|
|
|
7
7
|
import { type Node } from '@dxos/app-graph';
|
|
8
8
|
import { useActionRunner } from '@dxos/plugin-graph';
|
|
9
9
|
import { IconButton, toLocalizedString, useDensityContext, useTranslation } from '@dxos/react-ui';
|
|
10
10
|
import { Menu, type MenuItem } from '@dxos/react-ui-menu';
|
|
11
|
-
import { hoverableControlItem, hoverableOpenControlItem } from '@dxos/ui-theme';
|
|
11
|
+
import { composable, composableProps, hoverableControlItem, hoverableOpenControlItem } from '@dxos/ui-theme';
|
|
12
12
|
|
|
13
|
-
import { meta } from '
|
|
14
|
-
import { type ActionProperties } from '
|
|
15
|
-
|
|
16
|
-
export type NavTreeItemActionMenuProps = ActionProperties & {
|
|
17
|
-
parent: Node.Node;
|
|
18
|
-
caller?: string;
|
|
19
|
-
monolithic?: boolean;
|
|
20
|
-
menuActions?: Node.Action[];
|
|
21
|
-
};
|
|
13
|
+
import { meta } from '#meta';
|
|
14
|
+
import { type ActionProperties } from '#types';
|
|
22
15
|
|
|
23
16
|
const fallbackIcon = 'ph--placeholder--regular';
|
|
24
17
|
|
|
@@ -26,46 +19,64 @@ const fineActionButtonProps = {
|
|
|
26
19
|
size: 4 as const,
|
|
27
20
|
density: 'fine' as const,
|
|
28
21
|
};
|
|
22
|
+
|
|
29
23
|
const coarseActionButtonProps = {
|
|
30
24
|
size: 5 as const,
|
|
31
25
|
density: 'coarse' as const,
|
|
32
26
|
};
|
|
33
27
|
|
|
34
|
-
export
|
|
35
|
-
parent
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
menuActions
|
|
40
|
-
caller,
|
|
41
|
-
}: NavTreeItemActionMenuProps) => {
|
|
42
|
-
const { t } = useTranslation(meta.id);
|
|
43
|
-
const density = useDensityContext();
|
|
44
|
-
const runAction = useActionRunner();
|
|
45
|
-
|
|
46
|
-
return (
|
|
47
|
-
<Menu.Root caller={caller} onAction={runAction}>
|
|
48
|
-
<Menu.Trigger asChild>
|
|
49
|
-
<IconButton
|
|
50
|
-
{...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}
|
|
51
|
-
classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}
|
|
52
|
-
variant='ghost'
|
|
53
|
-
icon={icon ?? fallbackIcon}
|
|
54
|
-
iconOnly
|
|
55
|
-
label={toLocalizedString(label, t)}
|
|
56
|
-
data-testid={testId}
|
|
57
|
-
/>
|
|
58
|
-
</Menu.Trigger>
|
|
59
|
-
<Menu.Content group={parent} items={menuActions as MenuItem[]} />
|
|
60
|
-
</Menu.Root>
|
|
61
|
-
);
|
|
28
|
+
export type NavTreeItemActionMenuProps = ActionProperties & {
|
|
29
|
+
parent: Node.Node;
|
|
30
|
+
path?: string[];
|
|
31
|
+
caller?: string;
|
|
32
|
+
monolithic?: boolean;
|
|
33
|
+
menuActions?: Node.Action[];
|
|
62
34
|
};
|
|
63
35
|
|
|
36
|
+
export const NavTreeItemActionDropdownMenu = composable<HTMLButtonElement, NavTreeItemActionMenuProps>(
|
|
37
|
+
({ parent, path, label, icon, testId, menuActions, caller, ...props }, forwardedRef) => {
|
|
38
|
+
const { t } = useTranslation(meta.id);
|
|
39
|
+
const density = useDensityContext();
|
|
40
|
+
const runAction = useActionRunner();
|
|
41
|
+
const handleAction = useCallback(
|
|
42
|
+
(action: Node.Action, params: Node.InvokeProps = {}) => runAction(action, { ...params, path }),
|
|
43
|
+
[runAction, path],
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<Menu.Root caller={caller} onAction={handleAction}>
|
|
48
|
+
<Menu.Trigger asChild>
|
|
49
|
+
<IconButton
|
|
50
|
+
{...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}
|
|
51
|
+
{...composableProps(props)}
|
|
52
|
+
classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}
|
|
53
|
+
variant='ghost'
|
|
54
|
+
icon={icon ?? fallbackIcon}
|
|
55
|
+
iconOnly
|
|
56
|
+
label={toLocalizedString(label, t)}
|
|
57
|
+
data-testid={testId}
|
|
58
|
+
ref={forwardedRef}
|
|
59
|
+
/>
|
|
60
|
+
</Menu.Trigger>
|
|
61
|
+
<Menu.Content group={parent} items={menuActions as MenuItem[]} />
|
|
62
|
+
</Menu.Root>
|
|
63
|
+
);
|
|
64
|
+
},
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
NavTreeItemActionDropdownMenu.displayName = 'NavTreeItemActionDropdownMenu';
|
|
68
|
+
|
|
64
69
|
export const NavTreeItemMonolithicAction = (
|
|
65
|
-
props: Node.Action & {
|
|
70
|
+
props: Node.Action & {
|
|
71
|
+
parent: Node.Node;
|
|
72
|
+
path?: string[];
|
|
73
|
+
onAction?: (action: Node.Action) => void;
|
|
74
|
+
baseLabel: string;
|
|
75
|
+
},
|
|
66
76
|
) => {
|
|
67
77
|
const {
|
|
68
78
|
parent,
|
|
79
|
+
path,
|
|
69
80
|
properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },
|
|
70
81
|
baseLabel,
|
|
71
82
|
} = props;
|
|
@@ -91,22 +102,28 @@ export const NavTreeItemMonolithicAction = (
|
|
|
91
102
|
return;
|
|
92
103
|
}
|
|
93
104
|
|
|
94
|
-
void runAction(props, caller ? { parent, caller } : { parent });
|
|
105
|
+
void runAction(props, caller ? { parent, caller, path } : { parent, path });
|
|
95
106
|
}}
|
|
96
107
|
data-testid={testId}
|
|
97
108
|
/>
|
|
98
109
|
);
|
|
99
110
|
};
|
|
100
111
|
|
|
101
|
-
export const NavTreeItemAction = ({
|
|
112
|
+
export const NavTreeItemAction = ({
|
|
113
|
+
monolithic,
|
|
114
|
+
menuActions,
|
|
115
|
+
menuType,
|
|
116
|
+
parent,
|
|
117
|
+
path,
|
|
118
|
+
...props
|
|
119
|
+
}: NavTreeItemActionMenuProps) => {
|
|
102
120
|
const { t } = useTranslation(meta.id);
|
|
103
121
|
|
|
104
122
|
const monolithicAction = menuActions?.length === 1 && menuActions[0];
|
|
105
123
|
const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);
|
|
106
|
-
|
|
107
124
|
return monolithic && menuActions?.length === 1 ? (
|
|
108
|
-
<NavTreeItemMonolithicAction baseLabel={baseLabel} parent={
|
|
125
|
+
<NavTreeItemMonolithicAction baseLabel={baseLabel} parent={parent} path={path} {...menuActions[0]} />
|
|
109
126
|
) : (
|
|
110
|
-
<NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={
|
|
127
|
+
<NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={parent} path={path} menuActions={menuActions} />
|
|
111
128
|
);
|
|
112
129
|
};
|
|
@@ -7,12 +7,12 @@ import React, { Fragment, memo, useMemo } from 'react';
|
|
|
7
7
|
import { Node } from '@dxos/app-graph';
|
|
8
8
|
import { Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';
|
|
9
9
|
|
|
10
|
-
import { useActions } from '
|
|
11
|
-
import { meta } from '
|
|
10
|
+
import { useActions } from '#hooks';
|
|
11
|
+
import { meta } from '#meta';
|
|
12
|
+
|
|
12
13
|
import { NAV_TREE_ITEM } from '../NavTree';
|
|
13
14
|
import { useNavTreeContext } from '../NavTreeContext';
|
|
14
15
|
import { type NavTreeItemColumnsProps } from '../types';
|
|
15
|
-
|
|
16
16
|
import { NavTreeItemAction } from './NavTreeItemAction';
|
|
17
17
|
|
|
18
18
|
export const NavTreeItemColumns = memo(({ path, item, open }: NavTreeItemColumnsProps) => {
|
|
@@ -56,10 +56,10 @@ export const NavTreeItemColumns = memo(({ path, item, open }: NavTreeItemColumns
|
|
|
56
56
|
[primaryAction, groupedActions],
|
|
57
57
|
);
|
|
58
58
|
|
|
59
|
-
const ActionRoot = popoverAnchorId ===
|
|
59
|
+
const ActionRoot = popoverAnchorId === `${NAV_TREE_ITEM}:${item.id}` ? Popover.Anchor : Fragment;
|
|
60
60
|
|
|
61
61
|
return (
|
|
62
|
-
<div
|
|
62
|
+
<div className='contents dx-app-no-drag'>
|
|
63
63
|
{primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled ? (
|
|
64
64
|
<Treegrid.Cell classNames='contents'>
|
|
65
65
|
<NavTreeItemAction
|
|
@@ -67,6 +67,7 @@ export const NavTreeItemColumns = memo(({ path, item, open }: NavTreeItemColumns
|
|
|
67
67
|
label={toLocalizedString(primaryAction.properties?.label, t)}
|
|
68
68
|
icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}
|
|
69
69
|
parent={item}
|
|
70
|
+
path={path}
|
|
70
71
|
monolithic={Node.isAction(primaryAction)}
|
|
71
72
|
menuActions={primaryMenuActions}
|
|
72
73
|
menuType={primaryAction.properties?.menuType}
|
|
@@ -81,9 +82,10 @@ export const NavTreeItemColumns = memo(({ path, item, open }: NavTreeItemColumns
|
|
|
81
82
|
<Treegrid.Cell classNames='contents'>
|
|
82
83
|
<NavTreeItemAction
|
|
83
84
|
testId={`navtree.treeItem.actionsLevel${level}`}
|
|
84
|
-
label={t('tree
|
|
85
|
+
label={t('tree-item-actions.label')}
|
|
85
86
|
icon='ph--dots-three-vertical--regular'
|
|
86
87
|
parent={item}
|
|
88
|
+
path={path}
|
|
87
89
|
menuActions={actions}
|
|
88
90
|
menuType='dropdown'
|
|
89
91
|
caller={NAV_TREE_ITEM}
|
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
|
|
6
|
-
import { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
|
|
7
|
-
import { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';
|
|
8
|
-
import { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';
|
|
9
5
|
import {
|
|
10
6
|
type Edge,
|
|
11
7
|
attachClosestEdge,
|
|
12
8
|
extractClosestEdge,
|
|
13
9
|
} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';
|
|
10
|
+
import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
|
|
11
|
+
import { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
|
|
12
|
+
import { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';
|
|
13
|
+
import { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';
|
|
14
14
|
import { useAtomValue } from '@effect-atom/atom-react';
|
|
15
15
|
import React, {
|
|
16
16
|
type MouseEvent,
|
|
@@ -29,6 +29,7 @@ import { DxAvatar } from '@dxos/lit-ui/react';
|
|
|
29
29
|
import { useActionRunner } from '@dxos/plugin-graph';
|
|
30
30
|
import {
|
|
31
31
|
Icon,
|
|
32
|
+
IconButton,
|
|
32
33
|
ListItem,
|
|
33
34
|
ScrollArea,
|
|
34
35
|
type ThemedClassName,
|
|
@@ -43,8 +44,9 @@ import { Tabs } from '@dxos/react-ui-tabs';
|
|
|
43
44
|
import { mx } from '@dxos/ui-theme';
|
|
44
45
|
import { arrayMove } from '@dxos/util';
|
|
45
46
|
|
|
46
|
-
import { useNavTreeState } from '
|
|
47
|
-
import { meta } from '
|
|
47
|
+
import { useNavTreeState } from '#hooks';
|
|
48
|
+
import { meta } from '#meta';
|
|
49
|
+
|
|
48
50
|
import { l0ItemType } from '../../util';
|
|
49
51
|
import { useNavTreeContext } from '../NavTreeContext';
|
|
50
52
|
import { UserAccountAvatar } from '../UserAccountAvatar';
|
|
@@ -85,12 +87,10 @@ const useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {
|
|
|
85
87
|
switch (type) {
|
|
86
88
|
case 'action': {
|
|
87
89
|
const { properties: { caller } = {} } = item;
|
|
88
|
-
return void runAction(item as Node.Action, caller ? { parent, caller } : { parent });
|
|
90
|
+
return void runAction(item as Node.Action, caller ? { parent, path, caller } : { parent, path });
|
|
89
91
|
}
|
|
90
|
-
|
|
91
92
|
case 'tab':
|
|
92
93
|
return onTabChange?.(item);
|
|
93
|
-
|
|
94
94
|
case 'link':
|
|
95
95
|
return onSelect?.({ item, path, current: !getItem(path).current, option: event.altKey });
|
|
96
96
|
}
|
|
@@ -103,36 +103,34 @@ const l0Breakpoints: Record<string, string> = {
|
|
|
103
103
|
lg: 'hidden lg:grid',
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
-
const l0ItemRoot =
|
|
107
|
-
'group/l0item flex w-full justify-center items-center relative data[type!="collection"]:cursor-pointer dx-app-no-drag dx-focus-ring-group';
|
|
108
|
-
|
|
109
|
-
const l0ItemContent = 'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded-sm';
|
|
110
|
-
|
|
111
106
|
const L0ItemRoot = memo(
|
|
112
|
-
forwardRef<
|
|
107
|
+
forwardRef<HTMLButtonElement, PropsWithChildren<L0ItemRootProps>>(
|
|
113
108
|
({ item, parent, path, onMouseEnter, children }, forwardedRef) => {
|
|
109
|
+
const { t } = useTranslation(meta.id);
|
|
114
110
|
const { model } = useNavTreeContext();
|
|
115
111
|
const itemPath = useMemo(() => [...path, item.id], [item.id, path]);
|
|
116
112
|
const { id, testId } = useAtomValue(model.itemProps(itemPath));
|
|
117
|
-
const type = l0ItemType(item);
|
|
118
|
-
|
|
119
|
-
const { t } = useTranslation(meta.id);
|
|
120
113
|
const localizedString = toLocalizedString(item.properties.label, t);
|
|
121
114
|
|
|
115
|
+
const type = l0ItemType(item);
|
|
122
116
|
const handleClick = useL0ItemClick({ item, parent, path: itemPath }, type);
|
|
123
|
-
const rootProps =
|
|
124
|
-
type === 'tab'
|
|
125
|
-
? { value: item.id, tabIndex: 0, onClick: handleClick, 'data-testid': testId, 'data-object-id': id }
|
|
126
|
-
: { onClick: handleClick, 'data-testid': testId, 'data-object-id': id };
|
|
127
117
|
|
|
128
118
|
return (
|
|
129
119
|
<Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>
|
|
130
120
|
<Tabs.TabPrimitive
|
|
131
|
-
{
|
|
121
|
+
className={mx(
|
|
122
|
+
'group/l0item flex w-full justify-center items-center relative',
|
|
123
|
+
'dx-app-no-drag dx-focus-ring-group data[type!="collection"]:cursor-pointer',
|
|
124
|
+
l0Breakpoints[item.properties.l0Breakpoint],
|
|
125
|
+
)}
|
|
126
|
+
tabIndex={type === 'tab' ? 0 : undefined}
|
|
132
127
|
data-type={type}
|
|
133
|
-
|
|
134
|
-
|
|
128
|
+
data-testid={testId}
|
|
129
|
+
data-object-id={id}
|
|
130
|
+
value={item.id}
|
|
131
|
+
onClick={handleClick}
|
|
135
132
|
onMouseEnter={onMouseEnter}
|
|
133
|
+
ref={forwardedRef}
|
|
136
134
|
>
|
|
137
135
|
{children}
|
|
138
136
|
</Tabs.TabPrimitive>
|
|
@@ -144,9 +142,8 @@ const L0ItemRoot = memo(
|
|
|
144
142
|
|
|
145
143
|
export const L0ItemActiveTabIndicator = ({ classNames }: ThemedClassName<{}>) => (
|
|
146
144
|
<div
|
|
147
|
-
role='none'
|
|
148
145
|
className={mx(
|
|
149
|
-
'hidden group-aria-selected/l0item:block absolute start-0
|
|
146
|
+
'hidden group-aria-selected/l0item:block absolute start-0 h-6 w-1.5 bg-accent-surface rounded-sm',
|
|
150
147
|
classNames,
|
|
151
148
|
)}
|
|
152
149
|
/>
|
|
@@ -155,13 +152,12 @@ export const L0ItemActiveTabIndicator = ({ classNames }: ThemedClassName<{}>) =>
|
|
|
155
152
|
// TODO(burdon): Factor out pinned (non-draggable) items.
|
|
156
153
|
const L0Item = memo(({ item, parent, path, pinned, onRearrange, onItemHover }: L0ItemProps) => {
|
|
157
154
|
const { t } = useTranslation(meta.id);
|
|
158
|
-
const itemElement = useRef<
|
|
155
|
+
const itemElement = useRef<HTMLButtonElement | null>(null);
|
|
159
156
|
const [closestEdge, setEdge] = useState<Edge | null>(null);
|
|
160
157
|
const localizedString = toLocalizedString(item.properties.label, t);
|
|
161
158
|
const hue = item.properties.hue ?? null;
|
|
162
159
|
|
|
163
160
|
useLayoutEffect(() => {
|
|
164
|
-
// NOTE(thure): This is copied from StackItem, perhaps this should be DRYed out.
|
|
165
161
|
if (!itemElement.current || !onRearrange) {
|
|
166
162
|
return;
|
|
167
163
|
}
|
|
@@ -221,14 +217,13 @@ const L0Item = memo(({ item, parent, path, pinned, onRearrange, onItemHover }: L
|
|
|
221
217
|
return (
|
|
222
218
|
<L0ItemRoot ref={itemElement} item={item} parent={parent} path={path} onMouseEnter={handleMouseEnter}>
|
|
223
219
|
<div
|
|
224
|
-
role='none'
|
|
225
220
|
data-frame={true}
|
|
226
221
|
{...(hue && { style: { background: `var(--color-${hue}-surface)` } })}
|
|
227
222
|
className={mx(
|
|
228
|
-
|
|
223
|
+
'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded-sm',
|
|
229
224
|
pinned
|
|
230
|
-
? 'p-2 group-hover/l0item:bg-
|
|
231
|
-
: 'w-(--dx-l0-avatar-size) h-(--dx-l0-avatar-size) bg-
|
|
225
|
+
? 'p-2 group-hover/l0item:bg-current-surface'
|
|
226
|
+
: 'w-(--dx-l0-avatar-size) h-(--dx-l0-avatar-size) bg-current-surface',
|
|
232
227
|
)}
|
|
233
228
|
>
|
|
234
229
|
<ItemAvatar item={item} />
|
|
@@ -244,13 +239,15 @@ const L0Item = memo(({ item, parent, path, pinned, onRearrange, onItemHover }: L
|
|
|
244
239
|
|
|
245
240
|
const ItemAvatar = ({ item }: Pick<L0ItemProps, 'item'>) => {
|
|
246
241
|
const { t } = useTranslation(meta.id);
|
|
247
|
-
|
|
242
|
+
|
|
243
|
+
// Actions.
|
|
248
244
|
if (item.properties.icon) {
|
|
249
245
|
const hue = item.properties.hue ?? null;
|
|
250
|
-
const hueFgStyle = hue && { style: { color: `var(--color-${hue}-
|
|
246
|
+
const hueFgStyle = hue && { style: { color: `var(--color-${hue}-foreground)` } };
|
|
251
247
|
return <Icon icon={item.properties.icon} size={6} {...hueFgStyle} />;
|
|
252
248
|
}
|
|
253
249
|
|
|
250
|
+
const type = l0ItemType(item);
|
|
254
251
|
if (type === 'tab' && item.properties.disposition !== 'pin-end') {
|
|
255
252
|
const hue = item.properties.hue ?? null;
|
|
256
253
|
const localizedString = toLocalizedString(item.properties.label, t);
|
|
@@ -317,74 +314,50 @@ export const L0Menu = ({
|
|
|
317
314
|
|
|
318
315
|
return (
|
|
319
316
|
<Tabs.Tablist
|
|
317
|
+
data-tauri-drag-region
|
|
320
318
|
classNames={[
|
|
321
319
|
'group/l0 absolute z-[1] inset-y-0 start-0 rounded-is',
|
|
322
320
|
'grid grid-cols-[var(--dx-l0-size)] grid-rows-[var(--dx-rail-size)_1fr_min-content_var(--dx-l0-size)] dx-contain-layout',
|
|
323
|
-
'
|
|
321
|
+
'w-(--dx-l0-size) bg-toolbar-surface dx-app-drag pb-[env(safe-area-inset-bottom)]',
|
|
322
|
+
'[body[data-platform="macos"]_&]:pt-[30px]',
|
|
323
|
+
'[body[data-platform="ios"]_&]:pt-[max(env(safe-area-inset-top),0.25rem)]',
|
|
324
324
|
]}
|
|
325
325
|
>
|
|
326
326
|
{/* TODO(wittjosiah): Use L0Item trigger. */}
|
|
327
327
|
<Menu.Root onAction={handleAction}>
|
|
328
|
-
<Menu.Trigger
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
l0ItemRoot,
|
|
333
|
-
'grid place-items-center dx-focus-ring-group',
|
|
334
|
-
'[body[data-platform="macos"]_&]:mt-[30px]',
|
|
335
|
-
)}
|
|
336
|
-
>
|
|
337
|
-
<Tooltip.Trigger content={t('app menu label')} side='right' asChild>
|
|
338
|
-
<Tabs.TabPrimitive value='options' asChild role='button'>
|
|
339
|
-
<div
|
|
340
|
-
role='none'
|
|
341
|
-
className={mx(
|
|
342
|
-
l0ItemContent,
|
|
343
|
-
'h-(--dx-rail-action) w-(--dx-rail-action) group-hover/l0item:bg-hover-surface',
|
|
344
|
-
)}
|
|
345
|
-
>
|
|
346
|
-
<Icon icon='ph--list--regular' size={5} />
|
|
347
|
-
</div>
|
|
348
|
-
</Tabs.TabPrimitive>
|
|
349
|
-
</Tooltip.Trigger>
|
|
328
|
+
<Menu.Trigger asChild data-testid='spacePlugin.addSpace'>
|
|
329
|
+
<div className='grid place-items-center'>
|
|
330
|
+
<IconButton variant='ghost' icon='ph--list--regular' iconOnly label={t('app-menu.label')} />
|
|
331
|
+
</div>
|
|
350
332
|
</Menu.Trigger>
|
|
351
333
|
<Menu.Content group={parent} items={menuActions} />
|
|
352
334
|
</Menu.Root>
|
|
353
335
|
|
|
354
336
|
{/* Space list. */}
|
|
355
|
-
<ScrollArea.Root thin orientation='vertical'>
|
|
356
|
-
<ScrollArea.Viewport>
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
key={item.id}
|
|
368
|
-
item={item}
|
|
369
|
-
parent={parent}
|
|
370
|
-
path={path}
|
|
371
|
-
onItemHover={onItemHover}
|
|
372
|
-
{...(hasRearrangeableItems && { onRearrange: handleRearrange })}
|
|
373
|
-
/>
|
|
374
|
-
))}
|
|
375
|
-
</div>
|
|
337
|
+
<ScrollArea.Root centered thin orientation='vertical'>
|
|
338
|
+
<ScrollArea.Viewport classNames='flex flex-col gap-2 py-1'>
|
|
339
|
+
{topLevelItems.map((item) => (
|
|
340
|
+
<L0Item
|
|
341
|
+
key={item.id}
|
|
342
|
+
item={item}
|
|
343
|
+
parent={parent}
|
|
344
|
+
path={path}
|
|
345
|
+
onItemHover={onItemHover}
|
|
346
|
+
{...(hasRearrangeableItems && { onRearrange: handleRearrange })}
|
|
347
|
+
/>
|
|
348
|
+
))}
|
|
376
349
|
</ScrollArea.Viewport>
|
|
377
350
|
</ScrollArea.Root>
|
|
378
351
|
|
|
379
352
|
{/* Actions. */}
|
|
380
|
-
<div
|
|
353
|
+
<div className='grid grid-cols-1 auto-rows-(--dx-rail-action) pt-2'>
|
|
381
354
|
{pinnedItems.map((item) => (
|
|
382
355
|
<L0Item key={item.id} item={item} parent={parent} path={path} pinned />
|
|
383
356
|
))}
|
|
384
357
|
</div>
|
|
385
358
|
|
|
386
359
|
{userAccountItem && (
|
|
387
|
-
<div
|
|
360
|
+
<div className='grid dx-app-no-drag'>
|
|
388
361
|
<L0ItemRoot key={userAccountItem.id} item={userAccountItem} parent={parent} path={path}>
|
|
389
362
|
<UserAccountAvatar
|
|
390
363
|
userId={userAccountItem.properties.userId}
|