@dxos/plugin-navtree 0.8.4-main.c1de068 → 0.8.4-main.c4373fc
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/{app-graph-builder-5J4LRWDX.mjs → app-graph-builder-YAPMENYT.mjs} +12 -11
- package/dist/lib/browser/app-graph-builder-YAPMENYT.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SICQTLXC.mjs → chunk-IMFXKPSB.mjs} +290 -250
- package/dist/lib/browser/chunk-IMFXKPSB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-WCARAZ7J.mjs → chunk-LPAREX6J.mjs} +4 -4
- package/dist/lib/browser/chunk-LPAREX6J.mjs.map +7 -0
- package/dist/lib/browser/chunk-ZENLR72O.mjs +14 -0
- package/dist/lib/browser/chunk-ZENLR72O.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +8 -11
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-3XYN2CBU.mjs → intent-resolver-TCQXGF6U.mjs} +7 -7
- package/dist/lib/browser/intent-resolver-TCQXGF6U.mjs.map +7 -0
- package/dist/lib/browser/{keyboard-QRS6WOQH.mjs → keyboard-AHSAWKXA.mjs} +4 -4
- package/dist/lib/browser/{keyboard-QRS6WOQH.mjs.map → keyboard-AHSAWKXA.mjs.map} +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-WURHCBQQ.mjs → react-surface-AH2TP73M.mjs} +10 -10
- package/dist/lib/browser/react-surface-AH2TP73M.mjs.map +7 -0
- package/dist/lib/browser/{state-54DY3DOY.mjs → state-2Q623V7U.mjs} +7 -7
- package/dist/lib/browser/state-2Q623V7U.mjs.map +7 -0
- package/dist/types/src/NavTreePlugin.d.ts +1 -1
- package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +18 -15
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/keyboard.d.ts +1 -1
- package/dist/types/src/capabilities/keyboard.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/state.d.ts +2 -2
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.d.ts +2 -2
- package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts +26 -4
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +32 -4
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +2 -2
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L0Menu.d.ts +2 -0
- package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Panel.d.ts +5 -6
- package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Tabs.d.ts +12 -0
- package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -0
- package/dist/types/src/components/Sidebar/index.d.ts +1 -0
- package/dist/types/src/components/Sidebar/index.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 +8 -5
- package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/types.d.ts +2 -2
- package/dist/types/src/components/types.d.ts.map +1 -1
- package/dist/types/src/events.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.d.ts +1 -2
- package/dist/types/src/experimental/Tree.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.stories.d.ts +10 -4
- package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -3
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/testing/generator.d.ts +1 -1
- package/dist/types/src/testing/generator.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +4 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util.d.ts +1 -2
- package/dist/types/src/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +48 -47
- package/src/NavTreePlugin.tsx +75 -76
- package/src/capabilities/app-graph-builder.ts +8 -7
- package/src/capabilities/capabilities.ts +2 -2
- package/src/capabilities/intent-resolver.ts +2 -2
- package/src/capabilities/keyboard.ts +2 -2
- package/src/capabilities/react-surface.tsx +5 -5
- package/src/capabilities/state.ts +4 -3
- package/src/components/CommandsDialog/CommandsDialog.tsx +5 -5
- package/src/components/CommandsDialog/CommandsTrigger.tsx +3 -3
- package/src/components/NavTree/NavTree.stories.tsx +65 -51
- package/src/components/NavTree/NavTree.tsx +7 -3
- package/src/components/NavTreeContainer.tsx +52 -19
- package/src/components/NavTreeDocumentTitle.tsx +2 -2
- package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +4 -6
- package/src/components/NavTreeItem/NavTreeItemAction.tsx +7 -6
- package/src/components/NavTreeItem/NavTreeItemColumns.tsx +33 -27
- package/src/components/Sidebar/L0Menu.tsx +52 -51
- package/src/components/Sidebar/L1Panel.tsx +74 -97
- package/src/components/Sidebar/L1Tabs.tsx +58 -0
- package/src/components/Sidebar/index.ts +1 -0
- package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +9 -8
- package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +20 -12
- package/src/components/types.ts +3 -2
- package/src/events.ts +2 -2
- package/src/experimental/Tree.stories.tsx +29 -28
- package/src/experimental/Tree.tsx +5 -22
- package/src/meta.ts +5 -7
- package/src/testing/app-graph-builder.ts +10 -9
- package/src/testing/generator.ts +2 -2
- package/src/translations.ts +1 -0
- package/src/types.ts +4 -3
- package/src/util.ts +2 -20
- package/dist/lib/browser/app-graph-builder-5J4LRWDX.mjs.map +0 -7
- package/dist/lib/browser/chunk-ERDGQTH5.mjs +0 -16
- package/dist/lib/browser/chunk-ERDGQTH5.mjs.map +0 -7
- package/dist/lib/browser/chunk-SICQTLXC.mjs.map +0 -7
- package/dist/lib/browser/chunk-WCARAZ7J.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-3XYN2CBU.mjs.map +0 -7
- package/dist/lib/browser/react-surface-WURHCBQQ.mjs.map +0 -7
- package/dist/lib/browser/state-54DY3DOY.mjs.map +0 -7
|
@@ -2,15 +2,13 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import '@dxos-theme';
|
|
6
|
-
|
|
7
5
|
import { type Meta } from '@storybook/react-vite';
|
|
8
6
|
import React, { type JSX, type PropsWithChildren, useEffect, useState } from 'react';
|
|
9
7
|
|
|
10
8
|
import { faker } from '@dxos/random';
|
|
11
9
|
import { Icon, IconButton } from '@dxos/react-ui';
|
|
12
|
-
import {
|
|
13
|
-
import {
|
|
10
|
+
import { withTheme } from '@dxos/react-ui/testing';
|
|
11
|
+
import { mx } from '@dxos/react-ui-theme';
|
|
14
12
|
|
|
15
13
|
import { type ItemMap, Tree, type TreeNodeData, type TreeProps, visitNodes, visitor } from './Tree';
|
|
16
14
|
|
|
@@ -105,27 +103,6 @@ const data: TreeNodeData[] = [
|
|
|
105
103
|
},
|
|
106
104
|
];
|
|
107
105
|
|
|
108
|
-
export const Default = () => {
|
|
109
|
-
return <Container sidebar={<Sidebar mutate />} />;
|
|
110
|
-
};
|
|
111
|
-
|
|
112
|
-
export const Visitor = () => {
|
|
113
|
-
const [items] = useState(data);
|
|
114
|
-
const root = items[0];
|
|
115
|
-
const [openItems] = useState<ItemMap>({ [root.children![0].id]: true });
|
|
116
|
-
return (
|
|
117
|
-
<div className='flex flex-col'>
|
|
118
|
-
{Array.from(visitor(root, openItems)).map(({ node: { id, title }, depth }) => (
|
|
119
|
-
<div key={id} className='grid grid-cols-[40px_400px_400px] font-mono'>
|
|
120
|
-
<div>{depth}</div>
|
|
121
|
-
<div>{id}</div>
|
|
122
|
-
<div>{title}</div>
|
|
123
|
-
</div>
|
|
124
|
-
))}
|
|
125
|
-
</div>
|
|
126
|
-
);
|
|
127
|
-
};
|
|
128
|
-
|
|
129
106
|
const Sidebar = ({ mutate }: { mutate?: boolean }) => {
|
|
130
107
|
const [items, setItems] = useState(data);
|
|
131
108
|
const root = items[0];
|
|
@@ -223,10 +200,34 @@ const Sidebar = ({ mutate }: { mutate?: boolean }) => {
|
|
|
223
200
|
);
|
|
224
201
|
};
|
|
225
202
|
|
|
226
|
-
const meta
|
|
203
|
+
const meta = {
|
|
227
204
|
title: 'plugins/plugin-navtree/experimental/Tree',
|
|
228
205
|
component: Tree,
|
|
229
|
-
decorators: [withTheme
|
|
230
|
-
|
|
206
|
+
decorators: [withTheme],
|
|
207
|
+
parameters: {
|
|
208
|
+
layout: 'column',
|
|
209
|
+
},
|
|
210
|
+
} satisfies Meta<typeof Tree>;
|
|
231
211
|
|
|
232
212
|
export default meta;
|
|
213
|
+
|
|
214
|
+
export const Default = () => {
|
|
215
|
+
return <Container sidebar={<Sidebar mutate />} />;
|
|
216
|
+
};
|
|
217
|
+
|
|
218
|
+
export const Visitor = () => {
|
|
219
|
+
const [items] = useState(data);
|
|
220
|
+
const root = items[0];
|
|
221
|
+
const [openItems] = useState<ItemMap>({ [root.children![0].id]: true });
|
|
222
|
+
return (
|
|
223
|
+
<div className='flex flex-col'>
|
|
224
|
+
{Array.from(visitor(root, openItems)).map(({ node: { id, title }, depth }) => (
|
|
225
|
+
<div key={id} className='grid grid-cols-[40px_400px_400px] font-mono'>
|
|
226
|
+
<div>{depth}</div>
|
|
227
|
+
<div>{id}</div>
|
|
228
|
+
<div>{title}</div>
|
|
229
|
+
</div>
|
|
230
|
+
))}
|
|
231
|
+
</div>
|
|
232
|
+
);
|
|
233
|
+
};
|
|
@@ -7,23 +7,15 @@ import React, { type HTMLAttributes, type PropsWithChildren } from 'react';
|
|
|
7
7
|
import { type ClassNameValue, Icon, type Size } from '@dxos/react-ui';
|
|
8
8
|
import { mx } from '@dxos/react-ui-theme';
|
|
9
9
|
|
|
10
|
-
// TODO(burdon): Rounded border if first/last.
|
|
11
|
-
const styles = {
|
|
12
|
-
hover: 'hover:bg-slate-400 dark:hover:bg-slate-800',
|
|
13
|
-
selected: '!bg-slate-300 dark:!bg-slate-700',
|
|
14
|
-
};
|
|
15
|
-
|
|
16
10
|
export const IconButton = ({
|
|
17
11
|
iconName,
|
|
18
12
|
classNames,
|
|
19
13
|
size = 4,
|
|
20
14
|
onClick,
|
|
21
|
-
weight = 'regular',
|
|
22
15
|
}: {
|
|
23
16
|
iconName: string;
|
|
24
17
|
classNames?: ClassNameValue;
|
|
25
18
|
size?: Size;
|
|
26
|
-
weight?: 'regular' | 'duotone' | 'fill';
|
|
27
19
|
} & Pick<HTMLAttributes<HTMLDivElement>, 'onClick'>) => {
|
|
28
20
|
// TODO(burdon): Density aware.
|
|
29
21
|
return (
|
|
@@ -124,7 +116,6 @@ const StateIcon = ({ node, open, selected, active }: TreeNodeProps) => {
|
|
|
124
116
|
<IconButton
|
|
125
117
|
iconName={isActive ? 'ph--user-circle--regular' : 'ph--circle--regular'}
|
|
126
118
|
size={4}
|
|
127
|
-
weight={selected?.[id] ? 'fill' : 'duotone'}
|
|
128
119
|
classNames={mx(
|
|
129
120
|
'text-slate-500',
|
|
130
121
|
!isChildActive && 'opacity-0 transition duration-500',
|
|
@@ -158,15 +149,7 @@ const OpenIcon = ({
|
|
|
158
149
|
const ItemIcon = ({
|
|
159
150
|
node: { children, iconName = children?.length ? 'ph--folder--regular' : 'ph--file--regular', color },
|
|
160
151
|
}: Pick<TreeNodeProps, 'node'>) => {
|
|
161
|
-
return (
|
|
162
|
-
(iconName && (
|
|
163
|
-
<IconButton
|
|
164
|
-
iconName={iconName}
|
|
165
|
-
classNames={color ?? 'text-neutral-700 dark:text-neutral-300'}
|
|
166
|
-
weight={color ? 'duotone' : 'regular'}
|
|
167
|
-
/>
|
|
168
|
-
)) || <div />
|
|
169
|
-
);
|
|
152
|
+
return (iconName && <IconButton iconName={iconName} classNames={color ?? 'text-subdued'} />) || <div />;
|
|
170
153
|
};
|
|
171
154
|
|
|
172
155
|
const MenuItem = ({ node: { id }, onMenuAction }: Pick<TreeNodeProps, 'node' | 'onMenuAction'>) => {
|
|
@@ -210,9 +193,9 @@ export const TreeNodeRow = (props: TreeNodeProps & { className?: string }) => {
|
|
|
210
193
|
<Grid
|
|
211
194
|
style={{ paddingLeft: `${(depth - 1) * 24}px` }}
|
|
212
195
|
className={mx(
|
|
213
|
-
'group w-full items-center cursor-pointer',
|
|
214
|
-
|
|
215
|
-
selected?.[id] &&
|
|
196
|
+
'group w-full items-center cursor-pointer bg-hoverSurface',
|
|
197
|
+
// TODO(burdon): Use data-active.
|
|
198
|
+
selected?.[id] && 'bg-activeSurface',
|
|
216
199
|
className,
|
|
217
200
|
)}
|
|
218
201
|
onClick={() => selected && onChangeSelected?.(id, !selected[id])}
|
|
@@ -255,7 +238,7 @@ export const TreeChildNodes = ({
|
|
|
255
238
|
} = props;
|
|
256
239
|
return (
|
|
257
240
|
<div className={mx('flex flex-col mt-0.5 gap-0.5', className)}>
|
|
258
|
-
{children?.map((child
|
|
241
|
+
{children?.map((child) => (
|
|
259
242
|
<TreeNode key={child.id} {...props} depth={depth + 1} node={child} ancestors={[...ancestors, props.node]} />
|
|
260
243
|
))}
|
|
261
244
|
</div>
|
package/src/meta.ts
CHANGED
|
@@ -4,14 +4,12 @@
|
|
|
4
4
|
|
|
5
5
|
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
6
|
|
|
7
|
-
export const
|
|
7
|
+
export const meta: PluginMeta = {
|
|
8
|
+
id: 'dxos.org/plugin/navtree',
|
|
9
|
+
name: 'Navtree',
|
|
10
|
+
};
|
|
8
11
|
|
|
9
12
|
// TODO(wittjosiah): Factor out.
|
|
10
13
|
export const KEY_BINDING = 'KeyBinding';
|
|
11
14
|
// TODO(wittjosiah): Factor out.
|
|
12
|
-
export const COMMANDS_DIALOG = `${
|
|
13
|
-
|
|
14
|
-
export const meta: PluginMeta = {
|
|
15
|
-
id: NAVTREE_PLUGIN,
|
|
16
|
-
name: 'Navtree',
|
|
17
|
-
};
|
|
15
|
+
export const COMMANDS_DIALOG = `${meta.id}/CommandsDialog`;
|
|
@@ -3,11 +3,12 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { Rx } from '@effect-rx/rx-react';
|
|
6
|
-
import
|
|
6
|
+
import * as Function from 'effect/Function';
|
|
7
|
+
import * as Option from 'effect/Option';
|
|
7
8
|
|
|
8
9
|
import { type PluginContext } from '@dxos/app-framework';
|
|
9
10
|
import { log } from '@dxos/log';
|
|
10
|
-
import {
|
|
11
|
+
import { type BuilderExtensions, ROOT_ID, createExtension } from '@dxos/plugin-graph';
|
|
11
12
|
import { faker } from '@dxos/random';
|
|
12
13
|
|
|
13
14
|
export const storybookGraphBuilders = (context: PluginContext): BuilderExtensions => {
|
|
@@ -28,7 +29,7 @@ export const storybookGraphBuilders = (context: PluginContext): BuilderExtension
|
|
|
28
29
|
id: 'app-menu',
|
|
29
30
|
actions: (node) =>
|
|
30
31
|
Rx.make((get) =>
|
|
31
|
-
pipe(
|
|
32
|
+
Function.pipe(
|
|
32
33
|
get(node),
|
|
33
34
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
34
35
|
Option.map((node) => {
|
|
@@ -55,7 +56,7 @@ export const storybookGraphBuilders = (context: PluginContext): BuilderExtension
|
|
|
55
56
|
id: 'user-account',
|
|
56
57
|
connector: (node) =>
|
|
57
58
|
Rx.make((get) =>
|
|
58
|
-
pipe(
|
|
59
|
+
Function.pipe(
|
|
59
60
|
get(node),
|
|
60
61
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
61
62
|
Option.map(() => {
|
|
@@ -112,7 +113,7 @@ export const storybookGraphBuilders = (context: PluginContext): BuilderExtension
|
|
|
112
113
|
position: 'hoist',
|
|
113
114
|
connector: (node) =>
|
|
114
115
|
Rx.make((get) =>
|
|
115
|
-
pipe(
|
|
116
|
+
Function.pipe(
|
|
116
117
|
get(node),
|
|
117
118
|
Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),
|
|
118
119
|
Option.map(() => {
|
|
@@ -153,7 +154,7 @@ export const storybookGraphBuilders = (context: PluginContext): BuilderExtension
|
|
|
153
154
|
});
|
|
154
155
|
|
|
155
156
|
return Rx.make((get) =>
|
|
156
|
-
pipe(
|
|
157
|
+
Function.pipe(
|
|
157
158
|
get(node),
|
|
158
159
|
Option.flatMap((node) => (node.id === 'spaces-root' ? Option.some(node) : Option.none())),
|
|
159
160
|
Option.map(() => {
|
|
@@ -179,7 +180,7 @@ export const storybookGraphBuilders = (context: PluginContext): BuilderExtension
|
|
|
179
180
|
id: 'space-actions',
|
|
180
181
|
actions: (node) =>
|
|
181
182
|
Rx.make((get) =>
|
|
182
|
-
pipe(
|
|
183
|
+
Function.pipe(
|
|
183
184
|
get(node),
|
|
184
185
|
Option.flatMap((node) => (node.type === 'space' ? Option.some(node) : Option.none())),
|
|
185
186
|
Option.map((node) => {
|
|
@@ -220,7 +221,7 @@ export const storybookGraphBuilders = (context: PluginContext): BuilderExtension
|
|
|
220
221
|
});
|
|
221
222
|
|
|
222
223
|
return Rx.make((get) =>
|
|
223
|
-
pipe(
|
|
224
|
+
Function.pipe(
|
|
224
225
|
get(node),
|
|
225
226
|
Option.flatMap((node) => (node.type === 'space' ? Option.some(node) : Option.none())),
|
|
226
227
|
Option.map((node) => {
|
|
@@ -245,7 +246,7 @@ export const storybookGraphBuilders = (context: PluginContext): BuilderExtension
|
|
|
245
246
|
id: 'object-actions',
|
|
246
247
|
actions: (node) =>
|
|
247
248
|
Rx.make((get) =>
|
|
248
|
-
pipe(
|
|
249
|
+
Function.pipe(
|
|
249
250
|
get(node),
|
|
250
251
|
Option.flatMap((node) => (node.type === 'object' ? Option.some(node) : Option.none())),
|
|
251
252
|
Option.map((node) => {
|
package/src/testing/generator.ts
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
6
|
|
|
7
7
|
import { type NodeArg } from '@dxos/app-graph';
|
|
8
8
|
import { type Live, Obj, Type } from '@dxos/echo';
|
|
9
|
-
import { TypedObject } from '@dxos/echo
|
|
9
|
+
import { TypedObject } from '@dxos/echo/internal';
|
|
10
10
|
import { faker } from '@dxos/random';
|
|
11
11
|
import { range } from '@dxos/util';
|
|
12
12
|
|
package/src/translations.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -28,13 +28,14 @@ export type FlattenedActions = {
|
|
|
28
28
|
};
|
|
29
29
|
|
|
30
30
|
type SharedProperties = {
|
|
31
|
-
|
|
32
|
-
icon?: string;
|
|
31
|
+
testId?: string;
|
|
33
32
|
disabled?: boolean;
|
|
34
33
|
position?: Position;
|
|
35
|
-
|
|
34
|
+
label: Label;
|
|
36
35
|
className?: string;
|
|
37
36
|
headingClassName?: string;
|
|
37
|
+
icon?: string;
|
|
38
|
+
iconClassName?: string;
|
|
38
39
|
};
|
|
39
40
|
|
|
40
41
|
export type NodeProperties = SharedProperties & {
|
package/src/util.ts
CHANGED
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type Action, type Node, type ReadableGraph,
|
|
5
|
+
import { type Action, type Node, type ReadableGraph, isActionLike } from '@dxos/app-graph';
|
|
6
6
|
import { isNonNullable } from '@dxos/util';
|
|
7
7
|
|
|
8
|
-
import { type
|
|
8
|
+
import { type NavTreeItemGraphNode } from './types';
|
|
9
9
|
|
|
10
10
|
export const getParent = (
|
|
11
11
|
graph: ReadableGraph,
|
|
@@ -88,24 +88,6 @@ export const getChildren = (
|
|
|
88
88
|
.filter(isNonNullable) as NavTreeItemGraphNode[];
|
|
89
89
|
};
|
|
90
90
|
|
|
91
|
-
export const getActions = (graph: ReadableGraph, node: Node): FlattenedActions => {
|
|
92
|
-
return graph.getActions(node.id).reduce(
|
|
93
|
-
(acc: FlattenedActions, arg) => {
|
|
94
|
-
if (arg.properties.disposition === 'item') {
|
|
95
|
-
return acc;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
acc.actions.push(arg);
|
|
99
|
-
if (!isAction(arg)) {
|
|
100
|
-
const actionGroup = graph.getActions(arg.id);
|
|
101
|
-
acc.groupedActions[arg.id] = actionGroup;
|
|
102
|
-
}
|
|
103
|
-
return acc;
|
|
104
|
-
},
|
|
105
|
-
{ actions: [], groupedActions: {} },
|
|
106
|
-
);
|
|
107
|
-
};
|
|
108
|
-
|
|
109
91
|
export const l0ItemType = (item: Node<any>) => {
|
|
110
92
|
if (item.properties.disposition === 'collection') {
|
|
111
93
|
return 'collection';
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport { Capabilities, contributes, type PluginContext, createIntent, LayoutAction } from '@dxos/app-framework';\nimport { createExtension, ROOT_ID } from '@dxos/plugin-graph';\n\nimport { COMMANDS_DIALOG, NAVTREE_PLUGIN } from '../meta';\n\nexport default (context: PluginContext) =>\n contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: NAVTREE_PLUGIN,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: COMMANDS_DIALOG,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n );\n },\n properties: {\n label: ['open commands label', { ns: NAVTREE_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'meta+k',\n windows: 'ctrl+k',\n },\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n );\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,UAAU;AACnB,SAASC,QAAQC,YAAY;AAE7B,SAASC,cAAcC,aAAiCC,cAAcC,oBAAoB;AAC1F,SAASC,iBAAiBC,eAAe;AAIzC,IAAA,4BAAe,CAACC,YACdC,YACEC,aAAaC,iBACbC,gBAAgB;EACdC,IAAIC;EACJC,SAAS,CAACC,SACRC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN,UAAUA,MAAKH,OAAOU,UAAUF,OAAOG,KAAKR,KAAAA,IAAQK,OAAOI,KAAI,CAAA,GAC/EJ,OAAOK,IAAI,MAAM;IACf;MACEb,IAAIc;MACJC,MAAM,YAAA;AACJ,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKtB,QAAQuB,cAAcrB,aAAasB,gBAAgB;AACzF,cAAMF,SACJG,aAAaC,aAAaC,cAAc;UACtCC,MAAM;UACNC,SAASV;UACTW,SAAS;YACPC,YAAY;UACd;QACF,CAAA,CAAA;MAEJ;MACAC,YAAY;QACVC,OAAO;UAAC;UAAuB;YAAEC,IAAI5B;UAAe;;QACpD6B,MAAM;QACNC,YAAY;UACVC,OAAO;UACPC,SAAS;QACX;MACF;IACF;GACD,GACDzB,OAAO0B,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;AAGjC,CAAA,CAAA;",
|
|
6
|
-
"names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "LayoutAction", "createExtension", "ROOT_ID", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "NAVTREE_PLUGIN", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "COMMANDS_DIALOG", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "options", "blockAlign", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows", "getOrElse"]
|
|
7
|
-
}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
// src/meta.ts
|
|
2
|
-
var NAVTREE_PLUGIN = "dxos.org/plugin/navtree";
|
|
3
|
-
var KEY_BINDING = "KeyBinding";
|
|
4
|
-
var COMMANDS_DIALOG = `${NAVTREE_PLUGIN}/CommandsDialog`;
|
|
5
|
-
var meta = {
|
|
6
|
-
id: NAVTREE_PLUGIN,
|
|
7
|
-
name: "Navtree"
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
NAVTREE_PLUGIN,
|
|
12
|
-
KEY_BINDING,
|
|
13
|
-
COMMANDS_DIALOG,
|
|
14
|
-
meta
|
|
15
|
-
};
|
|
16
|
-
//# sourceMappingURL=chunk-ERDGQTH5.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const NAVTREE_PLUGIN = 'dxos.org/plugin/navtree';\n\n// TODO(wittjosiah): Factor out.\nexport const KEY_BINDING = 'KeyBinding';\n// TODO(wittjosiah): Factor out.\nexport const COMMANDS_DIALOG = `${NAVTREE_PLUGIN}/CommandsDialog`;\n\nexport const meta: PluginMeta = {\n id: NAVTREE_PLUGIN,\n name: 'Navtree',\n};\n"],
|
|
5
|
-
"mappings": ";AAMO,IAAMA,iBAAiB;AAGvB,IAAMC,cAAc;AAEpB,IAAMC,kBAAkB,GAAGF,cAAAA;AAE3B,IAAMG,OAAmB;EAC9BC,IAAIJ;EACJK,MAAM;AACR;",
|
|
6
|
-
"names": ["NAVTREE_PLUGIN", "KEY_BINDING", "COMMANDS_DIALOG", "meta", "id", "name"]
|
|
7
|
-
}
|