@dxos/plugin-navtree 0.8.4-main.dedc0f3 → 0.8.4-main.ead640a

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.
Files changed (89) hide show
  1. package/dist/lib/browser/{app-graph-builder-6JDBQ25U.mjs → app-graph-builder-YAPMENYT.mjs} +10 -9
  2. package/dist/lib/browser/app-graph-builder-YAPMENYT.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-ZKVY35IG.mjs → chunk-IMFXKPSB.mjs} +115 -102
  4. package/dist/lib/browser/chunk-IMFXKPSB.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-WCARAZ7J.mjs → chunk-LPAREX6J.mjs} +4 -4
  6. package/dist/lib/browser/chunk-LPAREX6J.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-ZENLR72O.mjs +14 -0
  8. package/dist/lib/browser/chunk-ZENLR72O.mjs.map +7 -0
  9. package/dist/lib/browser/index.mjs +5 -7
  10. package/dist/lib/browser/index.mjs.map +3 -3
  11. package/dist/lib/browser/{intent-resolver-N35ZIHFD.mjs → intent-resolver-TCQXGF6U.mjs} +6 -6
  12. package/dist/lib/browser/intent-resolver-TCQXGF6U.mjs.map +7 -0
  13. package/dist/lib/browser/{keyboard-HMTMA33N.mjs → keyboard-AHSAWKXA.mjs} +4 -4
  14. package/dist/lib/browser/{keyboard-HMTMA33N.mjs.map → keyboard-AHSAWKXA.mjs.map} +1 -1
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/{react-surface-5PZ4XJT7.mjs → react-surface-AH2TP73M.mjs} +10 -10
  17. package/dist/lib/browser/react-surface-AH2TP73M.mjs.map +7 -0
  18. package/dist/lib/browser/{state-P5DGL7KS.mjs → state-2Q623V7U.mjs} +7 -7
  19. package/dist/lib/browser/state-2Q623V7U.mjs.map +7 -0
  20. package/dist/types/src/NavTreePlugin.d.ts +1 -1
  21. package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
  22. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  23. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  24. package/dist/types/src/capabilities/index.d.ts +12 -9
  25. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  26. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  27. package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
  28. package/dist/types/src/components/NavTree/NavTree.stories.d.ts +1 -2
  29. package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
  31. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
  32. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +1 -2
  33. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
  34. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +1 -1
  35. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
  36. package/dist/types/src/components/Sidebar/L0Menu.d.ts +2 -0
  37. package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
  38. package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
  39. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -1
  40. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts +1 -2
  41. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
  42. package/dist/types/src/events.d.ts.map +1 -1
  43. package/dist/types/src/experimental/Tree.d.ts +1 -2
  44. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  45. package/dist/types/src/experimental/Tree.stories.d.ts +2 -3
  46. package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
  47. package/dist/types/src/meta.d.ts +2 -3
  48. package/dist/types/src/meta.d.ts.map +1 -1
  49. package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
  50. package/dist/types/src/testing/generator.d.ts +1 -1
  51. package/dist/types/src/testing/generator.d.ts.map +1 -1
  52. package/dist/types/src/types.d.ts +4 -3
  53. package/dist/types/src/types.d.ts.map +1 -1
  54. package/dist/types/tsconfig.tsbuildinfo +1 -1
  55. package/package.json +47 -47
  56. package/src/NavTreePlugin.tsx +70 -71
  57. package/src/capabilities/app-graph-builder.ts +6 -5
  58. package/src/capabilities/capabilities.ts +2 -2
  59. package/src/capabilities/intent-resolver.ts +1 -1
  60. package/src/capabilities/react-surface.tsx +4 -4
  61. package/src/capabilities/state.ts +2 -2
  62. package/src/components/CommandsDialog/CommandsDialog.tsx +3 -3
  63. package/src/components/CommandsDialog/CommandsTrigger.tsx +2 -2
  64. package/src/components/NavTree/NavTree.stories.tsx +61 -47
  65. package/src/components/NavTree/NavTree.tsx +4 -0
  66. package/src/components/NavTreeContainer.tsx +13 -6
  67. package/src/components/NavTreeDocumentTitle.tsx +2 -2
  68. package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +2 -4
  69. package/src/components/NavTreeItem/NavTreeItemAction.tsx +5 -4
  70. package/src/components/NavTreeItem/NavTreeItemColumns.tsx +27 -21
  71. package/src/components/Sidebar/L0Menu.tsx +50 -49
  72. package/src/components/Sidebar/L1Panel.tsx +7 -8
  73. package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +3 -4
  74. package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +20 -12
  75. package/src/events.ts +2 -2
  76. package/src/experimental/Tree.stories.tsx +24 -28
  77. package/src/experimental/Tree.tsx +5 -22
  78. package/src/meta.ts +5 -7
  79. package/src/testing/app-graph-builder.ts +9 -8
  80. package/src/testing/generator.ts +2 -2
  81. package/src/types.ts +4 -3
  82. package/dist/lib/browser/app-graph-builder-6JDBQ25U.mjs.map +0 -7
  83. package/dist/lib/browser/chunk-ERDGQTH5.mjs +0 -16
  84. package/dist/lib/browser/chunk-ERDGQTH5.mjs.map +0 -7
  85. package/dist/lib/browser/chunk-WCARAZ7J.mjs.map +0 -7
  86. package/dist/lib/browser/chunk-ZKVY35IG.mjs.map +0 -7
  87. package/dist/lib/browser/intent-resolver-N35ZIHFD.mjs.map +0 -7
  88. package/dist/lib/browser/react-surface-5PZ4XJT7.mjs.map +0 -7
  89. package/dist/lib/browser/state-P5DGL7KS.mjs.map +0 -7
@@ -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
- styles.hover,
215
- selected?.[id] && styles.selected,
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, i) => (
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 NAVTREE_PLUGIN = 'dxos.org/plugin/navtree';
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 = `${NAVTREE_PLUGIN}/CommandsDialog`;
13
-
14
- export const meta: PluginMeta = {
15
- id: NAVTREE_PLUGIN,
16
- name: 'Navtree',
17
- };
15
+ export const COMMANDS_DIALOG = `${meta.id}/CommandsDialog`;
@@ -3,7 +3,8 @@
3
3
  //
4
4
 
5
5
  import { Rx } from '@effect-rx/rx-react';
6
- import { Option, pipe } from 'effect';
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';
@@ -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) => {
@@ -2,11 +2,11 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
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-schema';
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/types.ts CHANGED
@@ -28,13 +28,14 @@ export type FlattenedActions = {
28
28
  };
29
29
 
30
30
  type SharedProperties = {
31
- label: Label;
32
- icon?: string;
31
+ testId?: string;
33
32
  disabled?: boolean;
34
33
  position?: Position;
35
- testId?: string;
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 & {
@@ -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, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';\nimport { ROOT_ID, createExtension } 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,cAAkCC,aAAaC,oBAAoB;AAC1F,SAASC,SAASC,uBAAuB;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", "LayoutAction", "contributes", "createIntent", "ROOT_ID", "createExtension", "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
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/capabilities.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type Live } from '@dxos/live-object';\n\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type NavTreeItemGraphNode } from '../types';\n\nexport namespace NavTreeCapabilities {\n export const State = defineCapability<{\n state: Map<string, Live<{ open: boolean; current: boolean; alternateTree?: boolean }>>;\n getItem: (path: string[]) => Live<{ open: boolean; current: boolean; alternateTree?: boolean }>;\n setItem: (path: string[], key: 'open' | 'current' | 'alternateTree', next: boolean) => void;\n isOpen: (path: string[], item: NavTreeItemGraphNode) => boolean;\n isCurrent: (path: string[], item: NavTreeItemGraphNode) => boolean;\n isAlternateTree: (path: string[], item: NavTreeItemGraphNode) => boolean;\n }>(`${NAVTREE_PLUGIN}/capability/state`);\n}\n"],
5
- "mappings": ";;;;;AAIA,SAASA,wBAAwB;UAMhBC,sBAAAA;uBACFC,QAAQC,iBAOlB,GAAGC,cAAAA,mBAAiC;AACzC,GATiBH,wBAAAA,sBAAAA,CAAAA,EAAAA;;",
6
- "names": ["defineCapability", "NavTreeCapabilities", "State", "defineCapability", "NAVTREE_PLUGIN"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/CommandsDialog/CommandsDialog.tsx", "../../../src/components/CommandsDialog/CommandsTrigger.tsx", "../../../src/util.ts", "../../../src/components/NavTreeContainer.tsx", "../../../src/capabilities/index.ts", "../../../src/components/NavTree/NavTree.tsx", "../../../src/hooks.ts", "../../../src/components/NavTreeContext.tsx", "../../../src/components/NavTreeDocumentTitle.tsx", "../../../src/components/Sidebar/L0Menu.tsx", "../../../src/components/UserAccountAvatar/UserAccountAvatar.tsx", "../../../src/components/Sidebar/L1Panel.tsx", "../../../src/components/NavTreeItem/NavTreeItemAction.tsx", "../../../src/components/NavTreeItem/NavTreeItemColumns.tsx", "../../../src/components/Sidebar/L1Tabs.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { LayoutAction, createIntent, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ActionLike, isAction, isActionGroup } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useActions } from '@dxos/plugin-graph';\nimport { Button, Dialog, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport {\n cardDialogContent,\n cardDialogHeader,\n cardDialogPaddedOverflow,\n cardDialogSearchListRoot,\n} from '@dxos/react-ui-stack';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING, NAVTREE_PLUGIN } from '../../meta';\n\n// TODO(wittjosiah): This probably deserves its own plugin but for now it lives here w/ other navigation UI.\nexport const CommandsDialogContent = ({ selected: initial }: { selected?: string }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const [selected, setSelected] = useState<string | undefined>(initial);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n\n // Traverse graph.\n // TODO(burdon): Factor out commonality with shortcut dialog.\n const allActions = useMemo(() => {\n // TODO(burdon): Get from navtree (not keyboard).\n const current = Keyboard.singleton.getCurrentContext();\n const actionMap = new Set<string>();\n const actions: ActionLike[] = [];\n graph.traverse({\n visitor: (node, path) => {\n if (\n (isAction(node) || isActionGroup(node)) &&\n !actionMap.has(node.id) &&\n current.startsWith(path.slice(0, -1).join('/'))\n ) {\n actionMap.add(node.id);\n actions.push(node);\n }\n },\n });\n\n actions.sort((a, b) => {\n return toLocalizedString(a.properties.label, t)\n ?.toLowerCase()\n .localeCompare(toLocalizedString(b.properties.label, t)?.toLowerCase());\n });\n\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const groupActions = useActions(graph, group?.id);\n const actions = isActionGroup(group) ? groupActions : allActions;\n\n return (\n <Dialog.Content classNames={cardDialogContent}>\n <Dialog.Title classNames={cardDialogHeader}>{t('commands dialog title', { ns: NAVTREE_PLUGIN })}</Dialog.Title>\n\n {/* TODO(burdon): BUG: Overscrolls container. */}\n <SearchList.Root label={t('command list input placeholder')} classNames={cardDialogSearchListRoot}>\n <SearchList.Input placeholder={t('command list input placeholder')} />\n <SearchList.Content classNames={cardDialogPaddedOverflow}>\n {actions?.map((action) => {\n const label = toLocalizedString(action.properties.label, t);\n const shortcut =\n typeof action.properties.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties.keyBinding?.[getHostPlatform()];\n return (\n <SearchList.Item\n value={label}\n key={action.id}\n onSelect={() => {\n if (action.properties.disabled) {\n return;\n }\n\n if (isActionGroup(action)) {\n setSelected(action.id);\n return;\n }\n\n void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n setTimeout(() => {\n const node = graph.getConnections(group?.id ?? action.id, 'inbound')[0];\n void (node && isAction(action) && action.data({ parent: node, caller: KEY_BINDING }));\n });\n }}\n classNames='flex items-center gap-2'\n disabled={action.properties.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon} size={4} />\n <span className='grow truncate'>{label}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n </SearchList.Root>\n\n <div role='none' className='pli-cardSpacingInline pbe-cardSpacingBlock'>\n <Dialog.Close asChild>\n <Button classNames='is-full'>{t('close label', { ns: 'os' })}</Button>\n </Dialog.Close>\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, Icon, useTranslation } from '@dxos/react-ui';\n\nimport { COMMANDS_DIALOG, NAVTREE_PLUGIN } from '../../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='m-1 pli-1 lg:pli-2'\n onClick={() =>\n dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n )\n }\n >\n <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>\n <Icon icon='ph--magnifying-glass--regular' size={5} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Action, type Node, type ReadableGraph, isActionLike } from '@dxos/app-graph';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type NavTreeItemGraphNode } from './types';\n\nexport const getParent = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return graph.getConnections(node.id, 'inbound').find((n) => n.id === parentId) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: string[],\n persistenceClass: string,\n): NavTreeItemGraphNode | null => {\n if (node.properties.acceptPersistenceClass?.has(persistenceClass)) {\n return node;\n } else {\n const parent = getParent(graph, node, path);\n return parent ? getPersistenceParent(graph, parent, path.slice(0, path.length - 1), persistenceClass) : null;\n }\n};\n\nexport const resolveMigrationOperation = (\n graph: ReadableGraph,\n activeNode: NavTreeItemGraphNode,\n destinationPath: string[],\n destinationRelatedNode?: NavTreeItemGraphNode,\n): 'transfer' | 'copy' | 'reject' => {\n const activeClass = activeNode.properties.persistenceClass;\n if (destinationRelatedNode && activeClass) {\n const persistenceParent = getPersistenceParent(graph, destinationRelatedNode, destinationPath, activeClass);\n if (persistenceParent) {\n const activeKey = activeNode.properties.persistenceKey;\n if (activeKey && persistenceParent?.properties.acceptPersistenceKey) {\n return persistenceParent.properties.acceptPersistenceKey.has(activeKey) &&\n persistenceParent.properties.onTransferStart\n ? 'transfer'\n : persistenceParent.properties.onCopy\n ? 'copy'\n : 'reject';\n } else {\n return 'reject';\n }\n } else {\n return 'reject';\n }\n } else {\n return 'reject';\n }\n};\n\n// TODO(wittjosiah): Move into node implementation?\nexport const sortActions = (actions: Action[]): Action[] =>\n actions.sort((a, b) => {\n if (a.properties.disposition === b.properties.disposition) {\n return 0;\n }\n\n if (a.properties.disposition === 'list-item-primary') {\n return -1;\n }\n\n return 1;\n });\n\nexport const getChildren = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: readonly string[] = [],\n): NavTreeItemGraphNode[] => {\n return graph\n .getConnections(node.id, 'outbound')\n .map((n) => {\n // Break cycles.\n const nextPath = [...path, node.id];\n return nextPath.includes(n.id) ? undefined : (n as NavTreeItemGraphNode);\n })\n .filter(isNonNullable) as NavTreeItemGraphNode[];\n};\n\nexport const l0ItemType = (item: Node<any>) => {\n if (item.properties.disposition === 'collection') {\n return 'collection';\n } else if (isActionLike(item)) {\n return 'action';\n } else if (item.properties.disposition === 'navigation') {\n return 'link';\n } else {\n return 'tab';\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { type Instruction, extractInstruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { untracked } from '@preact/signals-core';\nimport React, { memo, useCallback, useEffect, useMemo } from 'react';\n\nimport {\n LayoutAction,\n Surface,\n createIntent,\n useAppGraph,\n useCapability,\n useIntentDispatcher,\n useLayout,\n} from '@dxos/app-framework';\nimport { type Node, ROOT_ID, type ReadableGraph, isAction, isActionLike } from '@dxos/app-graph';\nimport { PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { useConnections, useActions as useGraphActions } from '@dxos/plugin-graph';\nimport { useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { type TreeData, type TreeItemDataProps, isTreeData } from '@dxos/react-ui-list';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove, byPosition } from '@dxos/util';\n\nimport { NavTreeCapabilities } from '../capabilities';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport { type FlattenedActions, type NavTreeItemGraphNode } from '../types';\nimport { getChildren, getParent, resolveMigrationOperation } from '../util';\n\nimport { NAV_TREE_ITEM, NavTree } from './NavTree';\nimport { NavTreeContext } from './NavTreeContext';\nimport { type NavTreeContextValue } from './types';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderItemEnd = ({ node, open }: { node: Node; open: boolean }) => (\n <Surface role='navtree-item-end' data={{ id: node.id, subject: node.data, open }} limit={1} />\n);\n\nconst getChildrenFilter = (node: Node): node is Node =>\n untracked(\n () => !isActionLike(node) && node.type !== PLANK_COMPANION_TYPE && node.properties.disposition !== 'hidden',\n );\n\nconst filterItems = (node: Node, disposition?: string) => {\n if (!disposition && (node.properties.disposition === 'hidden' || node.properties.disposition === 'alternate-tree')) {\n return false;\n } else if (!disposition) {\n const action = isAction(node);\n return !action || node.properties.disposition === 'item';\n } else {\n return node.properties.disposition === disposition;\n }\n};\n\nconst getItems = (graph: ReadableGraph, node?: Node, disposition?: string) => {\n return graph.getConnections(node?.id ?? ROOT_ID, 'outbound').filter((node) => filterItems(node, disposition));\n};\n\nconst useItems = (node?: Node, options?: { disposition?: string; sort?: boolean }) => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, node?.id ?? ROOT_ID);\n const filtered = connections.filter((node) => filterItems(node, options?.disposition));\n return options?.sort ? filtered.toSorted((a, b) => byPosition(a.properties, b.properties)) : filtered;\n};\n\nconst useActions = (node: Node): FlattenedActions => {\n const { graph } = useAppGraph();\n const actions = useGraphActions(graph, node.id);\n\n return useMemo(\n () =>\n actions.reduce(\n (acc: FlattenedActions, arg) => {\n if (arg.properties.disposition === 'item') {\n return acc;\n }\n\n acc.actions.push(arg);\n if (!isAction(arg)) {\n const actionGroup = graph.getActions(arg.id);\n acc.groupedActions[arg.id] = actionGroup;\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n ),\n [actions],\n );\n};\n\nexport type NavTreeContainerProps = {\n popoverAnchorId?: string;\n topbar?: boolean;\n} & Pick<NavTreeContextValue, 'tab'>;\n\nexport const NavTreeContainer = memo(({ tab, popoverAnchorId, topbar }: NavTreeContainerProps) => {\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n const { isOpen, isCurrent, isAlternateTree, setItem } = useCapability(NavTreeCapabilities.State);\n const layout = useLayout();\n const { navigationSidebarState } = useSidebars(NAVTREE_PLUGIN);\n\n const getProps = useCallback(\n (node: Node, path: string[]): TreeItemDataProps => {\n const children = getChildren(graph, node, path).filter(getChildrenFilter);\n const parentOf =\n children.length > 0 ? children.map(({ id }) => id) : node.properties.role === 'branch' ? [] : undefined;\n return {\n id: node.id,\n label: node.properties.label ?? node.id,\n parentOf,\n icon: node.properties.icon,\n disabled: node.properties.disabled,\n className: mx(node.properties.modified && 'italic', node.properties.className),\n headingClassName: node.properties.headingClassName,\n testId: node.properties.testId,\n };\n },\n [graph],\n );\n\n const loadDescendents = useCallback(\n (node: Node) => {\n graph.expand(node.id, 'outbound');\n // Load one level deeper, which resolves some juddering observed on open/close.\n graph.getConnections(node.id, 'outbound').forEach((child) => {\n graph.expand(child.id, 'outbound');\n });\n },\n [graph],\n );\n\n const handleOpenChange = useCallback(\n ({ item: { id }, path, open }: { item: Node; path: string[]; open: boolean }) => {\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n setItem(path, 'open', open);\n graph.expand(id, 'outbound');\n },\n [graph],\n );\n\n const handleTabChange = useCallback(\n async (node: NavTreeItemGraphNode) => {\n await dispatch(\n createIntent(LayoutAction.UpdateSidebar, {\n part: 'sidebar',\n options: {\n state:\n node.id === tab\n ? navigationSidebarState === 'expanded'\n ? isLg\n ? 'collapsed'\n : 'closed'\n : 'expanded'\n : 'expanded',\n },\n }),\n );\n\n await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: node.id }));\n\n // Open the first item if the workspace is empty.\n if (layout.active.length === 0) {\n const [item] = getItems(graph, node).filter((node) => !isActionLike(node));\n if (item && item.data) {\n await dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [item.id] }));\n }\n }\n },\n [dispatch, layout.active, tab, navigationSidebarState, isLg],\n );\n\n const canDrop = useCallback(({ source, target }: { source: TreeData; target: TreeData }) => {\n return target.item.properties.canDrop?.(source) ?? false;\n }, []);\n\n const handleSelect = useCallback(\n ({ item: node, path, option }: { item: Node; path: string[]; option: boolean }) => {\n if (!node.data) {\n return;\n }\n\n if (isAction(node)) {\n const [parent] = graph.getConnections(node.id, 'inbound');\n void (parent && node.data({ parent, caller: NAV_TREE_ITEM }));\n return;\n }\n\n const current = isCurrent(path, node);\n if (!current) {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [node.id],\n options: { key: node.properties.key },\n }),\n );\n } else if (option) {\n void dispatch(\n createIntent(LayoutAction.Close, { part: 'main', subject: [node.id], options: { state: false } }),\n );\n } else {\n void dispatch(createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: node.id }));\n }\n\n const defaultAction = graph.getActions(node.id).find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n\n if (!isLg) {\n void dispatch(createIntent(LayoutAction.UpdateSidebar, { part: 'sidebar', options: { state: 'closed' } }));\n }\n },\n [graph, dispatch, isCurrent, isLg],\n );\n\n const handleBack = useCallback(\n () => dispatch(createIntent(LayoutAction.RevertWorkspace, { part: 'workspace', options: { revert: true } })),\n [dispatch],\n );\n\n // TODO(wittjosiah): Factor out hook.\n useEffect(() => {\n return monitorForElements({\n canMonitor: ({ source }) => isTreeData(source.data),\n onDrop: ({ location, source }) => {\n // Didn't drop on anything.\n if (!location.current.dropTargets.length) {\n return;\n }\n const target = location.current.dropTargets[0];\n const instruction: Instruction | null = extractInstruction(target.data);\n if (instruction !== null && instruction.type !== 'instruction-blocked') {\n const sourceNode = source.data.item as NavTreeItemGraphNode;\n const targetNode = target.data.item as NavTreeItemGraphNode;\n const sourcePath = source.data.path as string[];\n const targetPath = target.data.path as string[];\n const operation =\n sourcePath.slice(0, -1).join() === targetPath.slice(0, -1).join() && instruction.type !== 'make-child'\n ? 'rearrange'\n : resolveMigrationOperation(graph, sourceNode, targetPath, targetNode);\n const sourceParent = getParent(graph, sourceNode, sourcePath);\n const targetParent = getParent(graph, targetNode, targetPath);\n const sourceItems = getItems(graph, sourceParent);\n const targetItems = getItems(graph, targetParent);\n const sourceIndex = sourceItems.findIndex(({ id }) => id === sourceNode.id);\n const targetIndex = targetItems.findIndex(({ id }) => id === targetNode.id);\n const migrationIndex =\n instruction.type === 'make-child'\n ? undefined\n : instruction.type === 'reorder-below'\n ? targetIndex + 1\n : targetIndex;\n switch (operation) {\n case 'rearrange': {\n const nextItems = sourceItems.map(({ data }) => data);\n arrayMove(nextItems, sourceIndex, targetIndex);\n void sourceParent?.properties.onRearrangeChildren?.(nextItems);\n break;\n }\n case 'copy': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n void target?.properties.onCopy?.(sourceNode, migrationIndex);\n break;\n }\n case 'transfer': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n if (!target?.properties.onTransferStart || !sourceParent?.properties.onTransferEnd) {\n break;\n }\n void target?.properties.onTransferStart(sourceNode, migrationIndex);\n void sourceParent?.properties.onTransferEnd?.(sourceNode, target);\n break;\n }\n }\n }\n },\n });\n }, [graph]);\n\n const setAlternateTree = useCallback(\n (path: string[], open: boolean) => {\n setItem(path, 'alternateTree', open);\n },\n [setItem],\n );\n\n const navTreeContextValue = useMemo(\n () => ({\n useItems,\n tab,\n useActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n isAlternateTree,\n setAlternateTree,\n onTabChange: handleTabChange,\n onOpenChange: handleOpenChange,\n onSelect: handleSelect,\n onBack: handleBack,\n }),\n [\n tab,\n useActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n isAlternateTree,\n setAlternateTree,\n handleTabChange,\n handleOpenChange,\n handleSelect,\n handleBack,\n ],\n );\n\n return (\n <NavTreeContext.Provider value={navTreeContextValue}>\n <NavTree id={ROOT_ID} root={graph.root} open={layout.sidebarOpen} />\n </NavTreeContext.Provider>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Keyboard = lazy(() => import('./keyboard'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const State = lazy(() => import('./state'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type TreeProps } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { type NavTreeItemGraphNode } from '../../types';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { L0Menu, L1Tabs, type L1TabsProps } from '../Sidebar';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Pick<TreeProps<NavTreeItemGraphNode>, 'id' | 'root'> & Pick<L1TabsProps, 'open'>;\n\nexport const NavTree = ({ id, root, ...props }: NavTreeProps) => {\n const { tab, useItems, onBack } = useNavTreeContext();\n const topLevelActions = useItems(root, { disposition: 'menu', sort: true });\n const topLevelCollections = useItems(root, { disposition: 'collection' });\n const topLevelWorkspaces = useItems(root, { disposition: 'workspace' });\n const topLevelNavigation = useItems(root, { disposition: 'navigation' });\n const l0Items = useMemo(\n () => [\n // prettier-ignore\n ...topLevelCollections,\n ...topLevelWorkspaces,\n ...topLevelNavigation,\n ],\n [topLevelCollections, topLevelWorkspaces, topLevelNavigation],\n );\n const pinnedItems = useItems(root, { disposition: 'pin-end', sort: true });\n const userAccountItem = useItems(root, { disposition: 'user-account' })[0];\n const topLevelItems = useMemo(\n () => [\n // prettier-ignore\n ...l0Items,\n ...pinnedItems,\n ...(userAccountItem ? [userAccountItem] : []),\n ],\n [l0Items, pinnedItems, userAccountItem],\n );\n\n useLoadDescendents(root);\n const path = useMemo(() => [id], [id]);\n\n return (\n <Tabs.Root value={tab} orientation='vertical' verticalVariant='stateless' classNames='relative'>\n <L0Menu\n menuActions={topLevelActions}\n topLevelItems={l0Items}\n pinnedItems={pinnedItems}\n userAccountItem={userAccountItem}\n path={path}\n parent={root}\n />\n <L1Tabs topLevelItems={topLevelItems} path={path} currentItemId={tab} onBack={onBack} {...props} />\n </Tabs.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { useNavTreeContext } from './components';\n\nexport const useLoadDescendents = (root?: Node) => {\n const { loadDescendents } = useNavTreeContext();\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n if (root) {\n void loadDescendents?.(root);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [root]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type NavTreeContextValue } from './types';\n\nexport const NavTreeContext = createContext<NavTreeContextValue | null>(null);\n\nexport const useNavTreeContext = () => useContext(NavTreeContext) ?? raise(new Error('Missing NavTreeContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nexport const NavTreeDocumentTitle = ({ node }: { node?: Node }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n useEffect(() => {\n document.title = node ? toLocalizedString(node.properties.label, t) : t('current app name', { ns: 'appkit' });\n }, [node?.properties?.label]);\n return null;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport React, {\n type MouseEvent,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { invariant } from '@dxos/invariant';\nimport { Icon, ListItem, ScrollArea, Tooltip, toLocalizedString, useMediaQuery, useTranslation } from '@dxos/react-ui';\nimport { DropdownMenu, type MenuItem, MenuProvider } from '@dxos/react-ui-menu';\nimport type { StackItemRearrangeHandler } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove, getFirstTwoRenderableChars } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { UserAccountAvatar } from '../UserAccountAvatar';\n\n//\n// L0Item\n//\n\ntype L0ItemData = {\n id: L0ItemProps['item']['id'];\n type: 'l0Item';\n};\n\ntype L0ItemRootProps = {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\ntype L0ItemProps = L0ItemRootProps & {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n pinned?: boolean;\n onRearrange?: StackItemRearrangeHandler<L0ItemData>;\n};\n\nconst useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {\n const { tab, isCurrent, onSelect, onTabChange } = useNavTreeContext();\n const [isLg] = useMediaQuery('lg', { ssr: false });\n\n return useCallback(\n (event: MouseEvent) => {\n switch (type) {\n case 'action': {\n const {\n data: invoke,\n properties: { caller },\n } = item;\n\n return invoke?.(caller ? { node: parent, caller } : { node: parent });\n }\n\n case 'tab':\n return onTabChange?.(item);\n\n case 'link':\n return onSelect?.({ item, path, current: !isCurrent(path, item), option: event.altKey });\n }\n },\n [item, parent, type, tab, isCurrent, onSelect, onTabChange, isLg],\n );\n};\n\nconst l0Breakpoints: Record<string, string> = {\n lg: 'hidden lg:grid',\n};\n\nconst l0ItemRoot =\n 'group/l0item flex w-full justify-center items-center relative data[type!=\"collection\"]:cursor-pointer app-no-drag dx-focus-ring-group';\n\nconst l0ItemContent = 'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded-sm';\n\nconst L0ItemRoot = forwardRef<HTMLElement, PropsWithChildren<L0ItemRootProps>>(\n ({ item, parent, path, children }, forwardedRef) => {\n const { getProps } = useNavTreeContext();\n const { id, testId } = getProps?.(item, path) ?? {};\n const type = l0ItemType(item);\n const itemPath = useMemo(() => [...path, item.id], [item.id, path]);\n\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const localizedString = toLocalizedString(item.properties.label, t);\n\n const handleClick = useL0ItemClick({ item, parent, path: itemPath }, type);\n const rootProps =\n type === 'tab'\n ? { value: item.id, tabIndex: 0, onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : type !== 'collection'\n ? { onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : { onClick: handleClick };\n\n const Root = type === 'collection' ? 'h2' : type === 'tab' ? Tabs.TabPrimitive : 'button';\n\n return (\n <Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>\n <Root\n {...(rootProps as any)}\n data-type={type}\n className={mx(l0ItemRoot, l0Breakpoints[item.properties.l0Breakpoint])}\n ref={forwardedRef}\n >\n {children}\n </Root>\n </Tooltip.Trigger>\n );\n },\n);\n\nconst L0Avatar = ({ item }: Pick<L0ItemProps, 'item'>) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const type = l0ItemType(item);\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--dx-${hue}SurfaceText)` } };\n const localizedString = toLocalizedString(item.properties.label, t);\n const avatarValue = useMemo(\n () => (type === 'tab' ? getFirstTwoRenderableChars(localizedString).join('').toUpperCase() : []),\n [type, item.properties.label, t],\n );\n\n return (\n <span role='img' className='place-self-center text-xl font-light' {...hueFgStyle}>\n {avatarValue}\n </span>\n );\n};\n\n// TODO(burdon): Factor out pinned (non-draggable) items.\nconst L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const itemElement = useRef<HTMLElement | null>(null);\n const [closestEdge, setEdge] = useState<Edge | null>(null);\n const localizedString = toLocalizedString(item.properties.label, t);\n const hue = item.properties.hue ?? null;\n\n useLayoutEffect(() => {\n // NOTE(thure): This is copied from StackItem, perhaps this should be DRYed out.\n if (!itemElement.current || !onRearrange) {\n return;\n }\n\n return combine(\n draggable({\n element: itemElement.current,\n getInitialData: () => ({ id: item.id, type: 'l0Item' }) satisfies L0ItemData,\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n document.body.setAttribute('data-drag-preview', 'true');\n const element = source.element.querySelector('[data-frame]') as HTMLElement;\n scrollJustEnoughIntoView({ element });\n const { x, y } = preserveOffsetOnSource({ element, input: location.current.input })({\n container: (element.offsetParent ?? document.body) as HTMLElement,\n });\n nativeSetDragImage?.(element, x, y);\n },\n onDragStart: () => {\n document.body.removeAttribute('data-drag-preview');\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'active');\n },\n onDrop: () => {\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'idle');\n },\n }),\n dropTargetForElements({\n element: itemElement.current,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: item.id, type: 'l0Item' },\n { input, element, allowedEdges: ['top', 'bottom'] },\n );\n },\n onDragEnter: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDrag: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDragLeave: () => setEdge(null),\n onDrop: ({ self, source }) => {\n setEdge(null);\n if (source.data.type === self.data.type) {\n onRearrange(source.data as L0ItemData, self.data as L0ItemData, extractClosestEdge(self.data));\n }\n },\n }),\n );\n }, [item, onRearrange]);\n\n return (\n <L0ItemRoot ref={itemElement} item={item} parent={parent} path={path}>\n <div\n role='none'\n data-frame={true}\n {...(hue && { style: { background: `var(--dx-${hue}Surface)` } })}\n className={mx(\n l0ItemContent,\n pinned\n ? 'p-2 group-hover/l0item:bg-activeSurface'\n : 'is-[--l0-avatar-size] bs-[--l0-avatar-size] bg-activeSurface',\n )}\n >\n <ItemAvatar item={item} />\n </div>\n <div\n role='none'\n className='hidden group-aria-selected/l0item:block absolute inline-start-0 inset-block-2 is-1 bg-accentSurface rounded-ie'\n />\n <span id={`${item.id}__label`} className='sr-only'>\n {localizedString}\n </span>\n {closestEdge && <ListItem.DropIndicator edge={closestEdge} />}\n </L0ItemRoot>\n );\n};\n\nconst ItemAvatar = ({ item }: Pick<L0ItemProps, 'item'>) => {\n const type = l0ItemType(item);\n if (item.properties.icon) {\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--dx-${hue}SurfaceText)` } };\n return <Icon icon={item.properties.icon} size={5} {...hueFgStyle} />;\n }\n\n if (type === 'tab' && item.properties.disposition !== 'pin-end') {\n return <L0Avatar item={item} />;\n }\n\n return null;\n};\n\n//\n// L0Collection\n//\n\nconst L0Collection = ({ item, path }: L0ItemProps) => {\n const navTreeContext = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = navTreeContext.useItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n const { id, testId } = navTreeContext.getProps?.(item, path) ?? {};\n\n const handleRearrange = useCallback<StackItemRearrangeHandler<L0ItemData>>(\n (source, target, closestEdge) => {\n invariant(item.properties.onRearrangeChildren);\n const sourceIndex = collectionItems.findIndex((i) => i.id === source.id);\n const targetIndex = collectionItems.findIndex((i) => i.id === target.id);\n const insertIndex =\n source.id === target.id\n ? sourceIndex\n : targetIndex +\n (sourceIndex < targetIndex ? (closestEdge === 'top' ? -1 : 0) : closestEdge === 'bottom' ? 1 : 0);\n const nextOrder = arrayMove([...collectionItems], sourceIndex, insertIndex);\n return item.properties.onRearrangeChildren(nextOrder);\n },\n [collectionItems, item.properties.onRearrangeChildren],\n );\n\n return (\n <div\n role='group'\n className='contents group/l0c'\n aria-labelledby={`${item.id}__label`}\n data-itemid={id}\n data-testid={testId}\n >\n {collectionItems.map((collectionItem) => (\n <L0Item\n key={collectionItem.id}\n item={collectionItem}\n parent={item}\n path={groupPath}\n {...(item.properties.onRearrangeChildren && { onRearrange: handleRearrange })}\n />\n ))}\n </div>\n );\n};\n\n//\n// L0Menu\n//\n\nexport type L0MenuProps = {\n menuActions: MenuItem[];\n topLevelItems: Node<any>[];\n pinnedItems: Node<any>[];\n userAccountItem?: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\nexport const L0Menu = ({ menuActions, topLevelItems, pinnedItems, userAccountItem, parent, path }: L0MenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n return (\n <Tabs.Tablist\n classNames={[\n 'group/l0 absolute z-[1] inset-block-0 inline-start-0 rounded-is',\n 'grid grid-cols-[var(--l0-size)] grid-rows-[var(--rail-size)_1fr_min-content_var(--l0-size)] contain-layout',\n '!is-[--l0-size] bg-baseSurface border-ie border-subduedSeparator app-drag pbe-[env(safe-area-inset-bottom)]',\n ]}\n >\n {/* TODO(wittjosiah): Use L0Item trigger. */}\n <MenuProvider>\n <DropdownMenu.Root group={parent} items={menuActions}>\n <Tooltip.Trigger content={t('app menu label')} side='right' asChild>\n <DropdownMenu.Trigger\n data-testid='spacePlugin.addSpace'\n className={mx(l0ItemRoot, 'grid place-items-center')}\n >\n <div\n role='none'\n className={mx(\n l0ItemContent,\n 'is-[--rail-action] bs-[--rail-action] group-hover/l0item:bg-hoverSurface',\n )}\n >\n <Icon icon='ph--list--regular' size={5} />\n </div>\n </DropdownMenu.Trigger>\n </Tooltip.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n\n {/* Space list. */}\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <div\n role='none'\n className={mx([\n 'flex flex-col gap-1 pbs-1',\n '[body[data-platform=\"darwin\"]_&]:pbs-[calc(30px+0.25rem)]',\n '[body[data-platform=\"ios\"]_&]:pbs-[max(env(safe-area-inset-top),0.25rem)]',\n ])}\n >\n {topLevelItems.map((item) => {\n if (l0ItemType(item) === 'collection') {\n return <L0Collection key={item.id} item={item} parent={parent} path={path} />;\n } else {\n return <L0Item key={item.id} item={item} parent={parent} path={path} />;\n }\n })}\n </div>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n\n {/* Actions. */}\n <div role='none' className='grid grid-cols-1 auto-rows-[--rail-action] pbs-2'>\n {pinnedItems\n .filter((item) => l0ItemType(item) !== 'collection')\n .map((item) => (\n <L0Item key={item.id} item={item} parent={parent} path={path} pinned />\n ))}\n </div>\n\n {userAccountItem && (\n <div role='none' className='grid app-no-drag'>\n <L0ItemRoot key={userAccountItem.id} item={userAccountItem} parent={parent} path={path}>\n <UserAccountAvatar\n userId={userAccountItem.properties.userId}\n hue={userAccountItem.properties.hue}\n emoji={userAccountItem.properties.emoji}\n status={userAccountItem.properties.status}\n size={10}\n />\n </L0ItemRoot>\n </div>\n )}\n\n <div\n role='none'\n className='hidden [body[data-platform=\"darwin\"]_&]:block absolute block-start-0 is-[calc(var(--l0-size)-1px)] bs-[calc(40px+0.25rem)]'\n style={{\n background:\n 'linear-gradient(to bottom, var(--dx-sidebarSurface) 0%, var(--dx-sidebarSurface) 70%, transparent 100%)',\n }}\n />\n </Tabs.Tablist>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Avatar, type AvatarStatus, type Size } from '@dxos/react-ui';\nimport { hexToFallback } from '@dxos/util';\n\nexport type UserAccountAvatarProps = {\n size?: Size;\n userId?: string;\n hue?: string;\n emoji?: string;\n status?: AvatarStatus;\n};\n\nexport const UserAccountAvatar = ({ size, userId, hue, emoji, status }: UserAccountAvatarProps) => {\n const fallbackValue = hexToFallback(userId ?? '0');\n\n return (\n <div className='grid place-items-center' data-joyride='welcome/account'>\n <Avatar.Root>\n <Avatar.Content\n variant='circle'\n size={size ?? 12}\n status={status ?? 'active'}\n hue={hue || fallbackValue.hue}\n fallback={emoji || fallbackValue.emoji}\n data-testid='treeView.userAccount'\n />\n </Avatar.Root>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { IconButton, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tree } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { NavTreeItemColumns } from '../NavTreeItem';\n\nexport type L1PanelProps = {\n open?: boolean;\n path: string[];\n item: Node<any>;\n currentItemId: string;\n onBack?: () => void;\n};\n\n/**\n * Space or settings panel.\n */\nexport const L1Panel = ({ open, path, item, currentItemId, onBack }: L1PanelProps) => {\n const { t } = useTranslation(meta.id);\n const { isAlternateTree, ...navTreeContext } = useNavTreeContext();\n // NOTE(burdon): I'm very uneasy about this pattern of declaring hooks as context props.\n const { useItems } = navTreeContext;\n const title = toLocalizedString(item.properties.label, t);\n\n // TODO(wittjosiah): Support multiple alternate trees.\n const alternateTree = useItems(item, { disposition: 'alternate-tree' })[0];\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const isAlternate = isAlternateTree?.(alternatePath, item) ?? false;\n const useAlternateItems = useCallback(\n (node?: Node, { disposition }: { disposition?: string } = {}) => {\n // TODO(wittjosiah): Sorting is expensive, limit to necessary items for now.\n return useItems(node, { disposition, sort: node?.id === alternateTree.id });\n },\n [alternateTree, useItems],\n );\n\n return (\n <Tabs.Tabpanel\n key={item.id}\n value={item.id}\n classNames={[\n 'absolute inset-block-0 inline-end-0',\n 'is-[calc(100%-var(--l0-size))] lg:is-[--l1-size] grid-cols-1 grid-rows-[var(--rail-size)_1fr]',\n 'pbs-[env(safe-area-inset-top)]',\n item.id === currentItemId && 'grid',\n ]}\n tabIndex={-1}\n aria-label={title}\n {...(!open && { inert: 'true' })}\n >\n {item.id === currentItemId && (\n <>\n <L1PanelHeader path={path} item={item} currentItemId={currentItemId} onBack={onBack} />\n <div role='none' className='overflow-y-auto'>\n {isAlternate ? (\n <Tree\n {...navTreeContext}\n useItems={useAlternateItems}\n id={alternateTree.id}\n root={alternateTree}\n path={alternatePath}\n levelOffset={5}\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n />\n ) : (\n <Tree\n {...navTreeContext}\n id={item.id}\n root={item}\n path={path}\n levelOffset={5}\n draggable\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n />\n )}\n </div>\n </>\n )}\n </Tabs.Tabpanel>\n );\n};\n\n/**\n * Header row.\n */\nconst L1PanelHeader = ({ item, path, onBack }: L1PanelProps) => {\n const { t } = useTranslation(meta.id);\n const { isAlternateTree, setAlternateTree, ...navTreeContext } = useNavTreeContext();\n const title = toLocalizedString(item.properties.label, t);\n\n // TODO(wittjosiah): Support multiple alternate trees.\n const alternateTree = navTreeContext.useItems(item, { disposition: 'alternate-tree' })[0];\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const isAlternate = isAlternateTree?.(alternatePath, item) ?? false;\n const backCapable = item.id.startsWith('!') || isAlternate;\n\n const handleOpen = useCallback(() => {\n setAlternateTree?.(alternatePath, true);\n }, [alternatePath, setAlternateTree]);\n\n const handleBack = useCallback(() => {\n if (isAlternate) {\n setAlternateTree?.(alternatePath, false);\n } else {\n onBack?.();\n }\n }, [isAlternate, alternatePath, setAlternateTree, onBack]);\n\n // TODO(burdon): Reuse same grid as tree?\n return (\n <div className='flex is-full items-center border-be border-subduedSeparator app-drag density-coarse'>\n <div className='is-6' />\n <h2 className='flex-1 truncate min-is-0'>{title}</h2>\n {(backCapable && (\n <IconButton\n variant='ghost'\n icon='ph--arrow-u-down-left--regular'\n iconOnly\n size={5}\n label={t('button back')}\n classNames={[hoverableControlItem, hoverableOpenControlItem, 'pointer-fine:pli-1']}\n onClick={handleBack}\n />\n )) ||\n (alternateTree && !isAlternate && (\n <IconButton\n data-testid='treeView.alternateTreeButton'\n variant='ghost'\n icon={alternateTree.properties.icon ?? 'ph--placeholder--regular'}\n iconOnly\n size={5}\n label={toLocalizedString(alternateTree.properties.label ?? alternateTree.id, t)}\n classNames={[hoverableControlItem, hoverableOpenControlItem, 'pointer-fine:pli-1']}\n onClick={handleOpen}\n />\n ))}\n <NavTreeItemColumns open path={path} item={item} density='coarse' />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Action, type Node } from '@dxos/app-graph';\nimport { IconButton, toLocalizedString, useDensityContext, useTranslation } from '@dxos/react-ui';\nimport { DropdownMenu, type MenuItem, MenuProvider } from '@dxos/react-ui-menu';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { type ActionProperties } from '../../types';\n\nexport type NavTreeItemActionMenuProps = ActionProperties & {\n parent: Node;\n caller?: string;\n monolithic?: boolean;\n menuActions?: Action[];\n};\n\nconst fallbackIcon = 'ph--placeholder--regular';\n\nconst fineActionButtonProps = {\n size: 4 as const,\n density: 'fine' as const,\n};\nconst coarseActionButtonProps = {\n size: 5 as const,\n density: 'coarse' as const,\n};\n\nexport const NavTreeItemActionDropdownMenu = ({\n parent,\n label,\n icon,\n testId,\n menuActions,\n caller,\n}: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const density = useDensityContext();\n return (\n <MenuProvider>\n <DropdownMenu.Root group={parent} items={menuActions as MenuItem[]} caller={caller}>\n <DropdownMenu.Trigger asChild>\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n classNames={['shrink-0 pli-2 pointer-fine:pli-1', hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon={icon ?? fallbackIcon}\n iconOnly\n label={toLocalizedString(label, t)}\n data-testid={testId}\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n );\n};\n\nexport const NavTreeItemMonolithicAction = ({\n parent,\n properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },\n data: invoke,\n baseLabel,\n}: Action & { parent: Node; onAction?: (action: Action) => void; baseLabel: string }) => {\n const density = useDensityContext();\n return (\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n variant={variant}\n classNames={[\n 'shrink-0',\n hoverableControlItem,\n hoverableOpenControlItem,\n iconOnly ? 'pli-2 pointer-fine:pli-1' : 'p-2 pointer-fine:p-2 mie-1',\n ]}\n icon={icon ?? fallbackIcon}\n iconOnly={iconOnly}\n label={baseLabel}\n disabled={disabled}\n onClick={(event) => {\n if (disabled) {\n return;\n }\n event.stopPropagation();\n void invoke?.(caller ? { parent, caller } : { parent });\n }}\n data-testid={testId}\n />\n );\n};\n\nexport const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const monolithicAction = menuActions?.length === 1 && menuActions[0];\n const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);\n\n return monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction baseLabel={baseLabel} parent={node} {...menuActions[0]} />\n ) : (\n <NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={node} menuActions={menuActions} />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, memo } from 'react';\n\nimport { isAction } from '@dxos/app-graph';\nimport { DensityProvider, Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { NAVTREE_PLUGIN } from '../../meta';\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { type NavTreeItemColumnsProps } from '../types';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\n\nexport const NavTreeItemColumns = memo(({ path, item, open, density = 'fine' }: NavTreeItemColumnsProps) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { useActions, renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();\n\n const level = path.length - 2;\n const { actions: _actions, groupedActions } = useActions(item);\n const [primaryAction, ...secondaryActions] = _actions.toSorted((a, _b) =>\n a.properties?.disposition === 'list-item-primary' ? -1 : 1,\n );\n\n const actions = (primaryAction?.properties?.disposition === 'list-item-primary' ? secondaryActions : _actions)\n .flatMap((action) => (isAction(action) ? [action] : []))\n .filter((a) => ['list-item', 'list-item-primary'].includes(a.properties?.disposition));\n\n const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;\n\n useLoadDescendents(item);\n useLoadDescendents(primaryAction && !isAction(primaryAction) ? primaryAction : undefined);\n\n return (\n <DensityProvider density={density}>\n <div role='none' className='contents app-no-drag'>\n {primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled ? (\n <NavTreeItemAction\n testId={primaryAction.properties?.testId}\n label={toLocalizedString(primaryAction.properties?.label, t)}\n icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}\n parent={item}\n monolithic={isAction(primaryAction)}\n menuActions={isAction(primaryAction) ? [primaryAction] : groupedActions[primaryAction.id]}\n menuType={primaryAction.properties?.menuType}\n caller={NAV_TREE_ITEM}\n />\n ) : (\n <Treegrid.Cell />\n )}\n <ActionRoot>\n {actions.length > 0 ? (\n <NavTreeItemAction\n testId={`navtree.treeItem.actionsLevel${level}`}\n label={t('tree item actions label')}\n icon='ph--dots-three-vertical--regular'\n parent={item}\n menuActions={actions}\n menuType='dropdown'\n caller={NAV_TREE_ITEM}\n />\n ) : (\n <Treegrid.Cell />\n )}\n </ActionRoot>\n {ItemEnd && <ItemEnd node={item} open={open} />}\n </div>\n </DensityProvider>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\n\nimport { L1Panel, type L1PanelProps } from './L1Panel';\n\nexport type L1TabsProps = Pick<L1PanelProps, 'open' | 'currentItemId' | 'onBack'> & {\n path: string[];\n topLevelItems: Node<any>[];\n};\n\n/**\n * Each space is an L1 tab.\n */\nexport const L1Tabs = ({ topLevelItems, onBack, ...props }: L1TabsProps) => {\n return (\n <>\n {topLevelItems.map((item) => {\n const type = l0ItemType(item);\n switch (type) {\n case 'tab':\n return <L1Panel key={item.id} item={item} {...props} onBack={onBack} />;\n case 'collection':\n return <L1PanelCollection key={item.id} item={item} {...props} />;\n default:\n return null;\n }\n })}\n </>\n );\n};\n\n/**\n *\n */\nconst L1PanelCollection = ({ item, path, ...props }: L1PanelProps) => {\n const { useItems } = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = useItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n return (\n <>\n {collectionItems\n .filter((item) => l0ItemType(item) === 'tab')\n .map((item) => (\n <L1Panel key={item.id} item={item} path={groupPath} {...props} />\n ))}\n </>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useMemo", "useState", "LayoutAction", "createIntent", "useAppGraph", "useIntentDispatcher", "isAction", "isActionGroup", "Keyboard", "keySymbols", "useActions", "Button", "Dialog", "Icon", "toLocalizedString", "useTranslation", "SearchList", "cardDialogContent", "cardDialogHeader", "cardDialogPaddedOverflow", "cardDialogSearchListRoot", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "allActions", "useMemo", "current", "Keyboard", "singleton", "getCurrentContext", "actionMap", "Set", "actions", "traverse", "visitor", "node", "path", "isAction", "isActionGroup", "has", "id", "startsWith", "slice", "join", "add", "push", "sort", "a", "b", "toLocalizedString", "properties", "label", "toLowerCase", "localeCompare", "group", "find", "groupActions", "useActions", "Dialog", "Content", "classNames", "cardDialogContent", "Title", "cardDialogHeader", "ns", "SearchList", "Root", "cardDialogSearchListRoot", "Input", "placeholder", "cardDialogPaddedOverflow", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "createIntent", "LayoutAction", "UpdateDialog", "part", "options", "state", "setTimeout", "getConnections", "data", "parent", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "div", "role", "Close", "asChild", "Button", "React", "LayoutAction", "createIntent", "useIntentDispatcher", "Button", "Icon", "useTranslation", "CommandsTrigger", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "COMMANDS_DIALOG", "options", "blockAlign", "span", "className", "Icon", "icon", "size", "isActionLike", "isNonNullable", "getParent", "graph", "node", "path", "parentId", "length", "getConnections", "id", "find", "n", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getChildren", "map", "nextPath", "includes", "undefined", "filter", "isNonNullable", "l0ItemType", "item", "isActionLike", "monitorForElements", "extractInstruction", "untracked", "React", "memo", "useCallback", "useEffect", "useMemo", "LayoutAction", "Surface", "createIntent", "useAppGraph", "useCapability", "useIntentDispatcher", "useLayout", "ROOT_ID", "isAction", "isActionLike", "PLANK_COMPANION_TYPE", "useConnections", "useActions", "useGraphActions", "useMediaQuery", "useSidebars", "isTreeData", "mx", "arrayMove", "byPosition", "lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Keyboard", "ReactSurface", "State", "React", "useMemo", "Tabs", "useEffect", "createContext", "useContext", "raise", "NavTreeContext", "createContext", "useNavTreeContext", "useContext", "raise", "Error", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "useLoadDescendents", "root", "loadDescendents", "useNavTreeContext", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "combine", "draggable", "dropTargetForElements", "preserveOffsetOnSource", "scrollJustEnoughIntoView", "attachClosestEdge", "extractClosestEdge", "React", "forwardRef", "useCallback", "useLayoutEffect", "useMemo", "useRef", "useState", "invariant", "Icon", "ListItem", "ScrollArea", "Tooltip", "toLocalizedString", "useMediaQuery", "useTranslation", "DropdownMenu", "MenuProvider", "Tabs", "mx", "arrayMove", "getFirstTwoRenderableChars", "React", "Avatar", "hexToFallback", "UserAccountAvatar", "size", "userId", "hue", "emoji", "status", "fallbackValue", "hexToFallback", "React", "div", "className", "data-joyride", "Avatar", "Root", "Content", "variant", "fallback", "data-testid", "useL0ItemClick", "item", "parent", "path", "type", "tab", "isCurrent", "onSelect", "onTabChange", "useNavTreeContext", "isLg", "useMediaQuery", "ssr", "useCallback", "event", "data", "invoke", "properties", "caller", "node", "current", "option", "altKey", "l0Breakpoints", "lg", "l0ItemRoot", "l0ItemContent", "L0ItemRoot", "forwardRef", "children", "forwardedRef", "getProps", "id", "testId", "l0ItemType", "itemPath", "useMemo", "t", "useTranslation", "NAVTREE_PLUGIN", "localizedString", "toLocalizedString", "label", "handleClick", "rootProps", "value", "tabIndex", "onClick", "Root", "Tabs", "TabPrimitive", "React", "Tooltip", "Trigger", "asChild", "delayDuration", "side", "content", "data-type", "className", "mx", "l0Breakpoint", "ref", "L0Avatar", "hue", "hueFgStyle", "style", "color", "avatarValue", "getFirstTwoRenderableChars", "join", "toUpperCase", "span", "role", "L0Item", "pinned", "onRearrange", "itemElement", "useRef", "closestEdge", "setEdge", "useState", "useLayoutEffect", "combine", "draggable", "element", "getInitialData", "onGenerateDragPreview", "nativeSetDragImage", "source", "location", "document", "body", "setAttribute", "querySelector", "scrollJustEnoughIntoView", "x", "y", "preserveOffsetOnSource", "input", "container", "offsetParent", "onDragStart", "removeAttribute", "closest", "onDrop", "dropTargetForElements", "getData", "attachClosestEdge", "allowedEdges", "onDragEnter", "self", "extractClosestEdge", "onDrag", "onDragLeave", "div", "data-frame", "background", "ItemAvatar", "ListItem", "DropIndicator", "edge", "icon", "Icon", "size", "disposition", "L0Collection", "navTreeContext", "useLoadDescendents", "collectionItems", "useItems", "groupPath", "handleRearrange", "target", "invariant", "onRearrangeChildren", "sourceIndex", "findIndex", "i", "targetIndex", "insertIndex", "nextOrder", "arrayMove", "aria-labelledby", "data-itemid", "data-testid", "map", "collectionItem", "key", "L0Menu", "menuActions", "topLevelItems", "pinnedItems", "userAccountItem", "Tablist", "classNames", "MenuProvider", "DropdownMenu", "group", "items", "ScrollArea", "Viewport", "Scrollbar", "orientation", "Thumb", "filter", "UserAccountAvatar", "userId", "emoji", "status", "React", "useCallback", "useMemo", "IconButton", "toLocalizedString", "useTranslation", "Tree", "Tabs", "hoverableControlItem", "hoverableOpenControlItem", "React", "IconButton", "toLocalizedString", "useDensityContext", "useTranslation", "DropdownMenu", "MenuProvider", "hoverableControlItem", "hoverableOpenControlItem", "fallbackIcon", "fineActionButtonProps", "size", "density", "coarseActionButtonProps", "NavTreeItemActionDropdownMenu", "parent", "label", "icon", "testId", "menuActions", "caller", "t", "useTranslation", "NAVTREE_PLUGIN", "useDensityContext", "React", "MenuProvider", "DropdownMenu", "Root", "group", "items", "Trigger", "asChild", "IconButton", "classNames", "hoverableControlItem", "hoverableOpenControlItem", "variant", "iconOnly", "toLocalizedString", "data-testid", "NavTreeItemMonolithicAction", "properties", "disabled", "data", "invoke", "baseLabel", "onClick", "event", "stopPropagation", "NavTreeItemAction", "monolithic", "node", "props", "monolithicAction", "length", "React", "Fragment", "memo", "isAction", "DensityProvider", "Popover", "Treegrid", "toLocalizedString", "useTranslation", "NavTreeItemColumns", "memo", "path", "item", "open", "density", "t", "useTranslation", "NAVTREE_PLUGIN", "useActions", "renderItemEnd", "ItemEnd", "popoverAnchorId", "useNavTreeContext", "level", "length", "actions", "_actions", "groupedActions", "primaryAction", "secondaryActions", "toSorted", "a", "_b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "includes", "ActionRoot", "NAV_TREE_ITEM", "id", "Popover", "Anchor", "Fragment", "useLoadDescendents", "undefined", "React", "DensityProvider", "div", "role", "className", "disabled", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "menuType", "caller", "Treegrid", "Cell", "node", "L1Panel", "open", "path", "item", "currentItemId", "onBack", "t", "useTranslation", "meta", "id", "isAlternateTree", "navTreeContext", "useNavTreeContext", "useItems", "title", "toLocalizedString", "properties", "label", "alternateTree", "disposition", "alternatePath", "useMemo", "isAlternate", "useAlternateItems", "useCallback", "node", "sort", "React", "Tabs", "Tabpanel", "key", "value", "classNames", "tabIndex", "aria-label", "inert", "L1PanelHeader", "div", "role", "className", "Tree", "root", "levelOffset", "gridTemplateColumns", "renderColumns", "NavTreeItemColumns", "draggable", "setAlternateTree", "backCapable", "startsWith", "handleOpen", "handleBack", "h2", "IconButton", "variant", "icon", "iconOnly", "size", "hoverableControlItem", "hoverableOpenControlItem", "onClick", "data-testid", "density", "React", "useMemo", "L1Tabs", "topLevelItems", "onBack", "props", "React", "map", "item", "type", "l0ItemType", "L1Panel", "key", "id", "L1PanelCollection", "path", "useItems", "useNavTreeContext", "useLoadDescendents", "collectionItems", "groupPath", "useMemo", "filter", "NAV_TREE_ITEM", "NavTree", "id", "root", "props", "tab", "useItems", "onBack", "useNavTreeContext", "topLevelActions", "disposition", "sort", "topLevelCollections", "topLevelWorkspaces", "topLevelNavigation", "l0Items", "useMemo", "pinnedItems", "userAccountItem", "topLevelItems", "useLoadDescendents", "path", "React", "Tabs", "Root", "value", "orientation", "verticalVariant", "classNames", "L0Menu", "menuActions", "parent", "L1Tabs", "currentItemId", "NODE_TYPE", "renderItemEnd", "node", "open", "React", "Surface", "role", "data", "id", "subject", "limit", "getChildrenFilter", "untracked", "isActionLike", "type", "PLANK_COMPANION_TYPE", "properties", "disposition", "filterItems", "action", "isAction", "getItems", "graph", "getConnections", "ROOT_ID", "filter", "useItems", "options", "useAppGraph", "connections", "useConnections", "filtered", "sort", "toSorted", "a", "b", "byPosition", "useActions", "actions", "useGraphActions", "useMemo", "reduce", "acc", "arg", "push", "actionGroup", "getActions", "groupedActions", "NavTreeContainer", "memo", "tab", "popoverAnchorId", "topbar", "isLg", "useMediaQuery", "ssr", "dispatchPromise", "dispatch", "useIntentDispatcher", "isOpen", "isCurrent", "isAlternateTree", "setItem", "useCapability", "NavTreeCapabilities", "State", "layout", "useLayout", "navigationSidebarState", "useSidebars", "NAVTREE_PLUGIN", "getProps", "useCallback", "path", "children", "getChildren", "parentOf", "length", "map", "undefined", "label", "icon", "disabled", "className", "mx", "modified", "headingClassName", "testId", "loadDescendents", "expand", "forEach", "child", "handleOpenChange", "item", "handleTabChange", "createIntent", "LayoutAction", "UpdateSidebar", "part", "state", "SwitchWorkspace", "active", "Open", "canDrop", "source", "target", "handleSelect", "option", "parent", "caller", "NAV_TREE_ITEM", "current", "key", "Close", "ScrollIntoView", "defaultAction", "find", "handleBack", "RevertWorkspace", "revert", "useEffect", "monitorForElements", "canMonitor", "isTreeData", "onDrop", "location", "dropTargets", "instruction", "extractInstruction", "sourceNode", "targetNode", "sourcePath", "targetPath", "operation", "slice", "join", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceItems", "targetItems", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "nextItems", "arrayMove", "onRearrangeChildren", "onCopy", "onTransferStart", "onTransferEnd", "setAlternateTree", "navTreeContextValue", "onTabChange", "onOpenChange", "onSelect", "onBack", "NavTreeContext", "Provider", "value", "NavTree", "root", "sidebarOpen"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { Capabilities, LayoutAction, type PluginContext, contributes, createResolver } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\n\nimport { NavTreeCapabilities } from './capabilities';\n\nexport default (context: PluginContext) =>\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.Expose.fields.input> =>\n Schema.is(LayoutAction.Expose.fields.input)(data),\n resolve: async ({ subject }) => {\n const { graph } = context.getCapability(Capabilities.AppGraph);\n const { getItem, setItem } = context.getCapability(NavTreeCapabilities.State);\n\n try {\n const path = await graph.waitForPath({ target: subject }, { timeout: 1_000 });\n [...Array(path.length)].forEach((_, index) => {\n const subpath = path.slice(0, index);\n const value = getItem(subpath);\n if (!value.open) {\n setItem(subpath, 'open', true);\n }\n });\n } catch {\n log('Path to node not found', { subject });\n }\n },\n }),\n );\n"],
5
- "mappings": ";;;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,cAAcC,cAAkCC,aAAaC,sBAAsB;AAC5F,SAASC,WAAW;;AAIpB,IAAA,0BAAe,CAACC,YACdC,YACEC,aAAaC,gBACbC,eAAe;EACbC,QAAQC,aAAaC;EACrBC,QAAQ,CAACC,SACPC,OAAOC,GAAGL,aAAaM,OAAOC,OAAOC,KAAK,EAAEL,IAAAA;EAC9CM,SAAS,OAAO,EAAEC,QAAO,MAAE;AACzB,UAAM,EAAEC,MAAK,IAAKjB,QAAQkB,cAAchB,aAAaiB,QAAQ;AAC7D,UAAM,EAAEC,SAASC,QAAO,IAAKrB,QAAQkB,cAAcI,oBAAoBC,KAAK;AAE5E,QAAI;AACF,YAAMC,OAAO,MAAMP,MAAMQ,YAAY;QAAEC,QAAQV;MAAQ,GAAG;QAAEW,SAAS;MAAM,CAAA;AAC3E;WAAIC,MAAMJ,KAAKK,MAAM;QAAGC,QAAQ,CAACC,GAAGC,UAAAA;AAClC,cAAMC,UAAUT,KAAKU,MAAM,GAAGF,KAAAA;AAC9B,cAAMG,QAAQf,QAAQa,OAAAA;AACtB,YAAI,CAACE,MAAMC,MAAM;AACff,kBAAQY,SAAS,QAAQ,IAAA;QAC3B;MACF,CAAA;IACF,QAAQ;AACNI,UAAI,0BAA0B;QAAErB;MAAQ,GAAA;;;;;;IAC1C;EACF;AACF,CAAA,CAAA;",
6
- "names": ["Schema", "Capabilities", "LayoutAction", "contributes", "createResolver", "log", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "LayoutAction", "UpdateLayout", "filter", "data", "Schema", "is", "Expose", "fields", "input", "resolve", "subject", "graph", "getCapability", "AppGraph", "getItem", "setItem", "NavTreeCapabilities", "State", "path", "waitForPath", "target", "timeout", "Array", "length", "forEach", "_", "index", "subpath", "slice", "value", "open", "log"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { isGraphNode } from '@dxos/plugin-graph';\n\nimport { CommandsDialogContent, CommandsTrigger, NavTreeContainer, NavTreeDocumentTitle } from '../components';\nimport { COMMANDS_DIALOG, NAVTREE_PLUGIN } from '../meta';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: COMMANDS_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { selected?: string } } => data.component === COMMANDS_DIALOG,\n component: ({ data }) => <CommandsDialogContent {...data.props} />,\n }),\n createSurface({\n id: `${NAVTREE_PLUGIN}/navigation`,\n role: 'navigation',\n filter: (data): data is { popoverAnchorId?: string; topbar: boolean; current: string } =>\n typeof data.current === 'string',\n component: ({ data }) => (\n <NavTreeContainer\n tab={data.current}\n popoverAnchorId={data.popoverAnchorId as string | undefined}\n topbar={data.topbar as boolean}\n />\n ),\n }),\n createSurface({\n id: `${NAVTREE_PLUGIN}/document-title`,\n role: 'document-title',\n component: ({ data }) => <NavTreeDocumentTitle node={isGraphNode(data.subject) ? data.subject : undefined} />,\n }),\n createSurface({\n id: `${NAVTREE_PLUGIN}/search-input`,\n role: 'search-input',\n position: 'fallback',\n component: () => <CommandsTrigger />,\n }),\n ]);\n"],
5
- "mappings": ";;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,mBAAmB;AAK5B,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAIC;IACJC,MAAM;IACNC,QAAQ,CAACC,SAAmDA,KAAKC,cAAcJ;IAC/EI,WAAW,CAAC,EAAED,KAAI,MAAO,sBAAA,cAACE,uBAA0BF,KAAKG,KAAK;EAChE,CAAA;EACAR,cAAc;IACZC,IAAI,GAAGQ,cAAAA;IACPN,MAAM;IACNC,QAAQ,CAACC,SACP,OAAOA,KAAKK,YAAY;IAC1BJ,WAAW,CAAC,EAAED,KAAI,MAChB,sBAAA,cAACM,kBAAAA;MACCC,KAAKP,KAAKK;MACVG,iBAAiBR,KAAKQ;MACtBC,QAAQT,KAAKS;;EAGnB,CAAA;EACAd,cAAc;IACZC,IAAI,GAAGQ,cAAAA;IACPN,MAAM;IACNG,WAAW,CAAC,EAAED,KAAI,MAAO,sBAAA,cAACU,sBAAAA;MAAqBC,MAAMC,YAAYZ,KAAKa,OAAO,IAAIb,KAAKa,UAAUC;;EAClG,CAAA;EACAnB,cAAc;IACZC,IAAI,GAAGQ,cAAAA;IACPN,MAAM;IACNiB,UAAU;IACVd,WAAW,MAAM,sBAAA,cAACe,iBAAAA,IAAAA;EACpB,CAAA;CACD;",
6
- "names": ["React", "Capabilities", "contributes", "createSurface", "isGraphNode", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "COMMANDS_DIALOG", "role", "filter", "data", "component", "CommandsDialogContent", "props", "NAVTREE_PLUGIN", "current", "NavTreeContainer", "tab", "popoverAnchorId", "topbar", "NavTreeDocumentTitle", "node", "isGraphNode", "subject", "undefined", "position", "CommandsTrigger"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/state.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect, untracked } from '@preact/signals-core';\n\nimport { Capabilities, type PluginContext, contributes } from '@dxos/app-framework';\nimport { type Live } from '@dxos/echo';\nimport { live } from '@dxos/live-object';\nimport { Path } from '@dxos/react-ui-list';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nimport { NavTreeCapabilities } from './capabilities';\n\nconst KEY = `${NAVTREE_PLUGIN}/state/v1`;\n\nconst getInitialState = () => {\n const stringified = localStorage.getItem(KEY);\n if (!stringified) {\n return;\n }\n\n try {\n const cached: [string, { open: boolean; current: boolean }][] = JSON.parse(stringified);\n return cached.map(([key, value]): [string, Live<{ open: boolean; current: boolean }>] => [\n key,\n live({ open: value.open, current: false }),\n ]);\n } catch {}\n};\n\nexport default (context: PluginContext) => {\n const layout = context.getCapability(Capabilities.Layout);\n\n // TODO(wittjosiah): This currently needs to be not a Live at the root.\n // If it is a Live then React errors when initializing new paths because of state change during render.\n // Ideally this could be a Live but be able to access and update the root level without breaking render.\n // Wrapping accesses and updates in `untracked` didn't seem to work in all cases.\n const state = new Map<string, Live<{ open: boolean; current: boolean; alternateTree?: boolean }>>(\n getInitialState() ?? [\n // TODO(thure): Initialize these dynamically.\n ['root', live({ open: true, current: false })],\n ['root~dxos.org/plugin/space-spaces', live({ open: true, current: false })],\n ['root~dxos.org/plugin/files', live({ open: true, current: false })],\n ],\n );\n\n const getItem = (_path: string[]) => {\n const path = Path.create(..._path);\n const value = state.get(path) ?? live({ open: false, current: false, alternateTree: false });\n if (!state.has(path)) {\n state.set(path, value);\n }\n\n return value;\n };\n\n const setItem = (path: string[], key: 'open' | 'current' | 'alternateTree', next: boolean) => {\n const value = getItem(path);\n value[key] = next;\n\n localStorage.setItem(KEY, JSON.stringify(Array.from(state.entries())));\n };\n\n const isOpen = (path: string[]) => getItem(path).open;\n const isCurrent = (path: string[]) => getItem(path).current;\n const isAlternateTree = (path: string[]) => {\n const item = getItem(path);\n return item.alternateTree ?? false;\n };\n\n let previous: string[] = [];\n const unsubscribe = effect(() => {\n const removed = previous.filter((id) => !layout.active.includes(id));\n previous = layout.active;\n\n const handleUpdate = () => {\n removed.forEach((id) => {\n const keys = Array.from(state.keys()).filter((key) => Path.last(key) === id);\n keys.forEach((key) => {\n setItem(Path.parts(key), 'current', false);\n });\n });\n\n layout.active.forEach((id) => {\n const keys = Array.from(new Set([...state.keys(), id])).filter((key) => Path.last(key) === id);\n keys.forEach((key) => {\n setItem(Path.parts(key), 'current', true);\n });\n });\n };\n\n // TODO(wittjosiah): This is setTimeout because there's a race between the keys be initialized.\n // Keys are initialized on the first render of an item in the navtree.\n // This could be avoided if the location was a path as well and not just an id.\n const timeout = setTimeout(handleUpdate, 500);\n untracked(() => handleUpdate());\n return () => clearTimeout(timeout);\n });\n\n return contributes(NavTreeCapabilities.State, { state, getItem, setItem, isOpen, isCurrent, isAlternateTree }, () =>\n unsubscribe(),\n );\n};\n"],
5
- "mappings": ";;;;;;;;AAIA,SAASA,QAAQC,iBAAiB;AAElC,SAASC,cAAkCC,mBAAmB;AAE9D,SAASC,YAAY;AACrB,SAASC,YAAY;AAMrB,IAAMC,MAAM,GAAGC,cAAAA;AAEf,IAAMC,kBAAkB,MAAA;AACtB,QAAMC,cAAcC,aAAaC,QAAQL,GAAAA;AACzC,MAAI,CAACG,aAAa;AAChB;EACF;AAEA,MAAI;AACF,UAAMG,SAA0DC,KAAKC,MAAML,WAAAA;AAC3E,WAAOG,OAAOG,IAAI,CAAC,CAACC,KAAKC,KAAAA,MAAgE;MACvFD;MACAE,KAAK;QAAEC,MAAMF,MAAME;QAAMC,SAAS;MAAM,CAAA;KACzC;EACH,QAAQ;EAAC;AACX;AAEA,IAAA,gBAAe,CAACC,YAAAA;AACd,QAAMC,SAASD,QAAQE,cAAcC,aAAaC,MAAM;AAMxD,QAAMC,QAAQ,IAAIC,IAChBnB,gBAAAA,KAAqB;;IAEnB;MAAC;MAAQU,KAAK;QAAEC,MAAM;QAAMC,SAAS;MAAM,CAAA;;IAC3C;MAAC;MAAqCF,KAAK;QAAEC,MAAM;QAAMC,SAAS;MAAM,CAAA;;IACxE;MAAC;MAA8BF,KAAK;QAAEC,MAAM;QAAMC,SAAS;MAAM,CAAA;;GAClE;AAGH,QAAMT,UAAU,CAACiB,UAAAA;AACf,UAAMC,OAAOC,KAAKC,OAAM,GAAIH,KAAAA;AAC5B,UAAMX,QAAQS,MAAMM,IAAIH,IAAAA,KAASX,KAAK;MAAEC,MAAM;MAAOC,SAAS;MAAOa,eAAe;IAAM,CAAA;AAC1F,QAAI,CAACP,MAAMQ,IAAIL,IAAAA,GAAO;AACpBH,YAAMS,IAAIN,MAAMZ,KAAAA;IAClB;AAEA,WAAOA;EACT;AAEA,QAAMmB,UAAU,CAACP,MAAgBb,KAA2CqB,SAAAA;AAC1E,UAAMpB,QAAQN,QAAQkB,IAAAA;AACtBZ,UAAMD,GAAAA,IAAOqB;AAEb3B,iBAAa0B,QAAQ9B,KAAKO,KAAKyB,UAAUC,MAAMC,KAAKd,MAAMe,QAAO,CAAA,CAAA,CAAA;EACnE;AAEA,QAAMC,SAAS,CAACb,SAAmBlB,QAAQkB,IAAAA,EAAMV;AACjD,QAAMwB,YAAY,CAACd,SAAmBlB,QAAQkB,IAAAA,EAAMT;AACpD,QAAMwB,kBAAkB,CAACf,SAAAA;AACvB,UAAMgB,OAAOlC,QAAQkB,IAAAA;AACrB,WAAOgB,KAAKZ,iBAAiB;EAC/B;AAEA,MAAIa,WAAqB,CAAA;AACzB,QAAMC,cAAcC,OAAO,MAAA;AACzB,UAAMC,UAAUH,SAASI,OAAO,CAACC,OAAO,CAAC7B,OAAO8B,OAAOC,SAASF,EAAAA,CAAAA;AAChEL,eAAWxB,OAAO8B;AAElB,UAAME,eAAe,MAAA;AACnBL,cAAQM,QAAQ,CAACJ,OAAAA;AACf,cAAMK,OAAOjB,MAAMC,KAAKd,MAAM8B,KAAI,CAAA,EAAIN,OAAO,CAAClC,QAAQc,KAAK2B,KAAKzC,GAAAA,MAASmC,EAAAA;AACzEK,aAAKD,QAAQ,CAACvC,QAAAA;AACZoB,kBAAQN,KAAK4B,MAAM1C,GAAAA,GAAM,WAAW,KAAA;QACtC,CAAA;MACF,CAAA;AAEAM,aAAO8B,OAAOG,QAAQ,CAACJ,OAAAA;AACrB,cAAMK,OAAOjB,MAAMC,KAAK,oBAAImB,IAAI;aAAIjC,MAAM8B,KAAI;UAAIL;SAAG,CAAA,EAAGD,OAAO,CAAClC,QAAQc,KAAK2B,KAAKzC,GAAAA,MAASmC,EAAAA;AAC3FK,aAAKD,QAAQ,CAACvC,QAAAA;AACZoB,kBAAQN,KAAK4B,MAAM1C,GAAAA,GAAM,WAAW,IAAA;QACtC,CAAA;MACF,CAAA;IACF;AAKA,UAAM4C,UAAUC,WAAWP,cAAc,GAAA;AACzCQ,cAAU,MAAMR,aAAAA,CAAAA;AAChB,WAAO,MAAMS,aAAaH,OAAAA;EAC5B,CAAA;AAEA,SAAOI,YAAYC,oBAAoBC,OAAO;IAAExC;IAAOf;IAASyB;IAASM;IAAQC;IAAWC;EAAgB,GAAG,MAC7GG,YAAAA,CAAAA;AAEJ;",
6
- "names": ["effect", "untracked", "Capabilities", "contributes", "live", "Path", "KEY", "NAVTREE_PLUGIN", "getInitialState", "stringified", "localStorage", "getItem", "cached", "JSON", "parse", "map", "key", "value", "live", "open", "current", "context", "layout", "getCapability", "Capabilities", "Layout", "state", "Map", "_path", "path", "Path", "create", "get", "alternateTree", "has", "set", "setItem", "next", "stringify", "Array", "from", "entries", "isOpen", "isCurrent", "isAlternateTree", "item", "previous", "unsubscribe", "effect", "removed", "filter", "id", "active", "includes", "handleUpdate", "forEach", "keys", "last", "parts", "Set", "timeout", "setTimeout", "untracked", "clearTimeout", "contributes", "NavTreeCapabilities", "State"]
7
- }