@dxos/plugin-navtree 0.6.12-staging.e11e696 → 0.6.12

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.
@@ -5,6 +5,7 @@ import {
5
5
  } from "./chunk-U7MTKDFQ.mjs";
6
6
 
7
7
  // packages/plugins/plugin-navtree/src/NavTreePlugin.tsx
8
+ import { MagnifyingGlass as MagnifyingGlass2 } from "@phosphor-icons/react";
8
9
  import React8 from "react";
9
10
  import { resolvePlugin, parseIntentPlugin, LayoutAction as LayoutAction4, parseGraphPlugin, NavigationAction as NavigationAction2 } from "@dxos/app-framework";
10
11
  import { createExtension, isAction as isAction4, isGraphNode } from "@dxos/app-graph";
@@ -14,12 +15,13 @@ import { Path as Path3 } from "@dxos/react-ui-mosaic";
14
15
  import { getHostPlatform as getHostPlatform2 } from "@dxos/util";
15
16
 
16
17
  // packages/plugins/plugin-navtree/src/components/CommandsDialog.tsx
18
+ import { DotOutline } from "@phosphor-icons/react";
17
19
  import React, { useMemo, useState } from "react";
18
20
  import { useIntentDispatcher, LayoutAction } from "@dxos/app-framework";
19
21
  import { isActionGroup, isAction } from "@dxos/app-graph";
20
22
  import { Keyboard, keySymbols } from "@dxos/keyboard";
21
23
  import { useGraph } from "@dxos/plugin-graph";
22
- import { Button, Dialog, Icon, useTranslation, toLocalizedString } from "@dxos/react-ui";
24
+ import { Button, Dialog, useTranslation, toLocalizedString } from "@dxos/react-ui";
23
25
  import { SearchList } from "@dxos/react-ui-searchlist";
24
26
  import { descriptionText, mx } from "@dxos/react-ui-theme";
25
27
  import { getHostPlatform } from "@dxos/util";
@@ -66,6 +68,7 @@ var CommandsDialogContent = ({ selected: initial }) => {
66
68
  }, actions?.map((action) => {
67
69
  const label = toLocalizedString(action.properties.label, t);
68
70
  const shortcut = typeof action.properties.keyBinding === "string" ? action.properties.keyBinding : action.properties.keyBinding?.[getHostPlatform()];
71
+ const Icon = action.properties.icon ?? DotOutline;
69
72
  return /* @__PURE__ */ React.createElement(SearchList.Item, {
70
73
  value: label,
71
74
  key: action.id,
@@ -100,8 +103,8 @@ var CommandsDialogContent = ({ selected: initial }) => {
100
103
  "data-testid": action.properties.testId
101
104
  }
102
105
  }, /* @__PURE__ */ React.createElement(Icon, {
103
- icon: action.properties.icon,
104
- size: 4
106
+ size: 4,
107
+ className: mx(!action.properties.icon && "invisible")
105
108
  }), /* @__PURE__ */ React.createElement("span", {
106
109
  className: "grow truncate"
107
110
  }, label), shortcut && /* @__PURE__ */ React.createElement("span", {
@@ -118,6 +121,7 @@ var CommandsDialogContent = ({ selected: initial }) => {
118
121
  };
119
122
 
120
123
  // packages/plugins/plugin-navtree/src/components/NavBarStart.tsx
124
+ import { DotsThreeVertical } from "@phosphor-icons/react";
121
125
  import React2, { Fragment } from "react";
122
126
  import { getGraph } from "@dxos/app-graph";
123
127
  import { Popover, toLocalizedString as toLocalizedString2, useTranslation as useTranslation2 } from "@dxos/react-ui";
@@ -126,12 +130,13 @@ var TREE_ITEM_MAIN_HEADING = "TreeItemMainHeading";
126
130
  var NavBarStart = ({ activeNode, popoverAnchorId }) => {
127
131
  const { t } = useTranslation2(NAVTREE_PLUGIN);
128
132
  const ActionRoot = popoverAnchorId === `dxos.org/ui/${TREE_ITEM_MAIN_HEADING}/${activeNode.id}` || popoverAnchorId === `dxos.org/ui/${KEY_BINDING}/${activeNode.id}` ? Popover.Anchor : Fragment;
133
+ const Icon = activeNode.properties?.icon ?? DotsThreeVertical;
129
134
  const graph = getGraph(activeNode);
130
135
  const actions = graph.actions(activeNode);
131
136
  const label = toLocalizedString2(activeNode.properties?.label, t);
132
137
  const menuTriggerLabel = t("node actions menu invoker label");
133
138
  return /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(ActionRoot, null, /* @__PURE__ */ React2.createElement(PlankHeading.ActionsMenu, {
134
- icon: activeNode.properties?.icon ?? "ph--dots-three-vertical--regular",
139
+ Icon,
135
140
  attendableId: activeNode.id,
136
141
  triggerLabel: menuTriggerLabel,
137
142
  actions,
@@ -146,10 +151,10 @@ var NavBarStart = ({ activeNode, popoverAnchorId }) => {
146
151
 
147
152
  // packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx
148
153
  import React4, { useCallback, useMemo as useMemo2 } from "react";
149
- import { NavigationAction, LayoutAction as LayoutAction2, Surface, useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework";
154
+ import { NavigationAction, LayoutAction as LayoutAction2, Surface, SLUG_PATH_SEPARATOR, SLUG_COLLECTION_INDICATOR, useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework";
150
155
  import { getGraph as getGraph2, isAction as isAction3, isActionLike } from "@dxos/app-graph";
151
156
  import { ElevationProvider, useMediaQuery, useSidebars as useSidebars2 } from "@dxos/react-ui";
152
- import { Mosaic, Path as Path2 } from "@dxos/react-ui-mosaic";
157
+ import { Path as Path2 } from "@dxos/react-ui-mosaic";
153
158
  import { NavTree, getLevel } from "@dxos/react-ui-navtree";
154
159
  import { arrayMove } from "@dxos/util";
155
160
 
@@ -165,7 +170,7 @@ import { getSize, mx as mx2 } from "@dxos/react-ui-theme";
165
170
  var buttonStyles = "pli-1.5 text-xs font-normal";
166
171
  var repo = "https://github.com/dxos/dxos";
167
172
  var NavTreeFooter = (props) => {
168
- const layoutPart = useDefaultValue(props.layoutPart, () => "sidebar");
173
+ const layoutPart = useDefaultValue(props.layoutPart, "sidebar");
169
174
  const config = useConfig();
170
175
  const { t } = useTranslation3(NAVTREE_PLUGIN);
171
176
  const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);
@@ -446,7 +451,14 @@ var NavTreeContainer = ({ root, activeIds, openItemIds, onOpenItemIdsChange, att
446
451
  await dispatch({
447
452
  action: NavigationAction.OPEN,
448
453
  data: {
449
- activeParts: {
454
+ activeParts: node.data?.comments ? {
455
+ main: [
456
+ node.id
457
+ ],
458
+ complementary: [
459
+ `${node.id}${SLUG_PATH_SEPARATOR}comments${SLUG_COLLECTION_INDICATOR}`
460
+ ]
461
+ } : {
450
462
  main: [
451
463
  node.id
452
464
  ]
@@ -668,7 +680,7 @@ var NavTreeContainer = ({ root, activeIds, openItemIds, onOpenItemIdsChange, att
668
680
  onOpenItemIdsChange,
669
681
  openItemIds
670
682
  ]);
671
- return /* @__PURE__ */ React4.createElement(Mosaic.Root, null, /* @__PURE__ */ React4.createElement(Mosaic.DragOverlay, null), /* @__PURE__ */ React4.createElement(ElevationProvider, {
683
+ return /* @__PURE__ */ React4.createElement(ElevationProvider, {
672
684
  elevation: "chrome"
673
685
  }, /* @__PURE__ */ React4.createElement("div", {
674
686
  role: "none",
@@ -695,7 +707,7 @@ var NavTreeContainer = ({ root, activeIds, openItemIds, onOpenItemIdsChange, att
695
707
  renderPresence,
696
708
  resolveItemLevel,
697
709
  loadDescendents
698
- })), /* @__PURE__ */ React4.createElement(NavTreeFooter, null))));
710
+ })), /* @__PURE__ */ React4.createElement(NavTreeFooter, null)));
699
711
  };
700
712
 
701
713
  // packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx
@@ -1007,7 +1019,8 @@ var NavTreePlugin = () => {
1007
1019
  ns: NAVTREE_PLUGIN
1008
1020
  }
1009
1021
  ],
1010
- icon: "ph--magnifying-glass--regular",
1022
+ icon: (props) => /* @__PURE__ */ React8.createElement(MagnifyingGlass2, props),
1023
+ iconSymbol: "ph--magnifying-glass--regular",
1011
1024
  keyBinding: {
1012
1025
  macos: "meta+k",
1013
1026
  windows: "ctrl+k"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/NavTreePlugin.tsx", "../../../src/components/CommandsDialog.tsx", "../../../src/components/NavBarStart.tsx", "../../../src/components/NavTreeContainer.tsx", "../../../src/components/NavTreeFooter.tsx", "../../../src/util.ts", "../../../src/components/NavTreeDocumentTitle.tsx", "../../../src/components/NotchStart.tsx", "../../../src/components/HaloButton.tsx", "../../../src/components/CommandsTrigger.tsx", "../../../src/translations.ts", "../../../src/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport {\n type GraphBuilderProvides,\n resolvePlugin,\n type MetadataRecordsProvides,\n type PluginDefinition,\n type SurfaceProvides,\n type TranslationsProvides,\n type Plugin,\n type IntentResolverProvides,\n parseIntentPlugin,\n LayoutAction,\n type GraphProvides,\n parseGraphPlugin,\n NavigationAction,\n} from '@dxos/app-framework';\nimport { createExtension, type Graph, isAction, isGraphNode, type Node } from '@dxos/app-graph';\nimport { Keyboard } from '@dxos/keyboard';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport { type OpenItemIds } from '@dxos/react-ui-navtree';\nimport { getHostPlatform } from '@dxos/util';\n\nimport {\n CommandsDialogContent,\n NODE_TYPE,\n NavBarStart,\n NavTreeContainer,\n NavTreeDocumentTitle,\n NotchStart,\n} from './components';\nimport { CommandsTrigger } from './components/CommandsTrigger';\nimport meta, { KEY_BINDING, NAVTREE_PLUGIN } from './meta';\nimport translations from './translations';\nimport { expandOpenGraphNodes, getActions, getChildren, type NavTreeItem, type NavTreeItemGraphNode } from './util';\n\nexport type NavTreePluginProvides = SurfaceProvides &\n MetadataRecordsProvides &\n GraphBuilderProvides &\n TranslationsProvides &\n IntentResolverProvides;\n\ntype NavTreeState = { root?: NavTreeItemGraphNode; openItemIds: OpenItemIds };\n\nexport const NavTreePlugin = (): PluginDefinition<NavTreePluginProvides> => {\n const state = new LocalStorageStore<NavTreeState>('dxos.org/settings/navtree', {\n // TODO(thure): Do this dynamically.\n openItemIds: { root: true, 'dxos.org/plugin/space-spaces': true, 'dxos.org/plugin/files': true },\n });\n\n let graphPlugin: Plugin<GraphProvides> | undefined;\n let graph: Graph | undefined;\n\n const handleOpenItemIdsChange = (nextOpenItemIds: OpenItemIds) => {\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n state.values.openItemIds = nextOpenItemIds;\n if (graph) {\n void expandOpenGraphNodes(graph, nextOpenItemIds);\n }\n };\n\n return {\n meta,\n ready: async (plugins) => {\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n graph = graphPlugin?.provides.graph;\n if (!graph) {\n return;\n }\n\n state.values.root = graph.root as NavTreeItemGraphNode;\n getChildren(graph, state.values.root);\n getActions(graph, state.values.root);\n\n state.prop({ key: 'openItemIds', storageKey: 'openItemIds', type: LocalStorageStore.json<OpenItemIds>() });\n\n void expandOpenGraphNodes(graph, state.values.openItemIds);\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n graph.subscribeTraverse({\n visitor: (node, path) => {\n let shortcut: string | undefined;\n if (typeof node.properties.keyBinding === 'object') {\n const availablePlatforms = Object.keys(node.properties.keyBinding);\n const platform = getHostPlatform();\n shortcut = availablePlatforms.includes(platform)\n ? node.properties.keyBinding[platform]\n : platform === 'ios'\n ? node.properties.keyBinding.macos // Fallback to macos if ios-specific bindings not provided.\n : platform === 'linux' || platform === 'unknown'\n ? node.properties.keyBinding.windows // Fallback to windows if platform-specific bindings not provided.\n : undefined;\n } else {\n shortcut = node.properties.keyBinding;\n }\n\n if (shortcut && isAction(node)) {\n Keyboard.singleton.getContext(path.slice(0, -1).join('/')).bind({\n shortcut,\n handler: () => {\n void node.data({ node, caller: KEY_BINDING });\n },\n data: node.properties.label,\n });\n }\n },\n });\n\n // TODO(burdon): Create context and plugin.\n Keyboard.singleton.initialize();\n Keyboard.singleton.setCurrentContext(graphPlugin?.provides.graph.root.id);\n },\n unload: async () => {\n Keyboard.singleton.destroy();\n },\n provides: {\n metadata: {\n records: {\n [NODE_TYPE]: {\n parse: (item: NavTreeItem, type: string) => {\n switch (type) {\n case 'node':\n return item.node;\n case 'object':\n return item.node.data;\n case 'view-object':\n return { id: `${item.id}-view`, object: item.node.data };\n }\n },\n },\n },\n },\n surface: {\n component: ({ data, role }) => {\n switch (data.component) {\n case `${NAVTREE_PLUGIN}/Commands`: {\n const selected = typeof data.subject === 'string' ? data.subject : undefined;\n return <CommandsDialogContent selected={selected} />;\n }\n }\n\n switch (role) {\n case 'navigation':\n if (state.values.root && state.values.openItemIds) {\n return (\n <NavTreeContainer\n root={state.values.root}\n activeIds={data.activeIds as Set<string>}\n openItemIds={state.values.openItemIds}\n onOpenItemIdsChange={handleOpenItemIdsChange}\n attended={data.attended as string[]}\n popoverAnchorId={data.popoverAnchorId as string}\n />\n );\n }\n break;\n\n case 'document-title': {\n return <NavTreeDocumentTitle node={isGraphNode(data.activeNode) ? data.activeNode : undefined} />;\n }\n\n case 'navbar-start': {\n if (state.values.root && data.activeNode) {\n return {\n node: (\n <NavBarStart\n activeNode={data.activeNode as Node}\n popoverAnchorId={data.popoverAnchorId as string | undefined}\n />\n ),\n disposition: 'hoist',\n };\n }\n break;\n }\n\n case 'notch-start':\n return <NotchStart />;\n\n case 'search-input':\n return {\n node: <CommandsTrigger />,\n disposition: 'fallback',\n };\n }\n\n return null;\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case NavigationAction.EXPOSE: {\n if (graph && intent.data?.id) {\n const path = graph.getPath({ target: intent.data.id });\n if (Array.isArray(path)) {\n const additionalOpenItems = [...Array(path.length - 1)].reduce((acc: OpenItemIds, _, index) => {\n const itemId = Path.create(...path.slice(1, index + 1));\n if (itemId.length > 0) {\n acc[itemId] = true;\n }\n return acc;\n }, {});\n state.values.openItemIds = {\n ...additionalOpenItems,\n ...state.values.openItemIds,\n };\n }\n }\n break;\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n // TODO(burdon): Move to separate plugin (for keys and command k). Move bindings from LayoutPlugin.\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return [\n createExtension({\n id: NAVTREE_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: 'dxos.org/plugin/navtree/open-commands',\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${NAVTREE_PLUGIN}/Commands`,\n dialogBlockAlign: 'start',\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 }),\n ];\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { useIntentDispatcher, LayoutAction } from '@dxos/app-framework';\nimport { type ActionLike, isActionGroup, isAction } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { Button, Dialog, Icon, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\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 dispatch = useIntentDispatcher();\n const { graph } = useGraph();\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 // console.log(JSON.stringify(actions, undefined, 2));\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const actions = isActionGroup(group) ? graph.actions(group) : allActions;\n\n return (\n <Dialog.Content classNames={['md:max-is-[30rem] overflow-hidden mbs-12']}>\n <Dialog.Title>{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='flex flex-col grow overflow-hidden my-2'>\n <SearchList.Input placeholder={t('command list input placeholder')} classNames='px-1 my-2' />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\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({ action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } });\n setTimeout(() => {\n const node = graph.nodes(group ?? action, { relation: 'inbound' })[0];\n void (node && isAction(action) && action.data({ 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 <Dialog.Close asChild>\n <Button variant='primary' classNames='mbs-2'>\n {t('close label', { ns: 'os' })}\n </Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { Fragment } from 'react';\n\nimport { getGraph, type Node } from '@dxos/app-graph';\nimport { Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { PlankHeading } from '@dxos/react-ui-deck';\n\nimport { KEY_BINDING, NAVTREE_PLUGIN } from '../meta';\n\nconst TREE_ITEM_MAIN_HEADING = 'TreeItemMainHeading';\n\nexport const NavBarStart = ({ activeNode, popoverAnchorId }: { activeNode: Node; popoverAnchorId?: string }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const ActionRoot =\n popoverAnchorId === `dxos.org/ui/${TREE_ITEM_MAIN_HEADING}/${activeNode.id}` ||\n popoverAnchorId === `dxos.org/ui/${KEY_BINDING}/${activeNode.id}`\n ? Popover.Anchor\n : Fragment;\n\n const graph = getGraph(activeNode);\n const actions = graph.actions(activeNode);\n const label = toLocalizedString(activeNode.properties?.label, t);\n\n const menuTriggerLabel = t('node actions menu invoker label');\n\n return (\n <>\n <ActionRoot>\n <PlankHeading.ActionsMenu\n icon={activeNode.properties?.icon ?? 'ph--dots-three-vertical--regular'}\n attendableId={activeNode.id}\n triggerLabel={menuTriggerLabel}\n actions={actions}\n onAction={(action) =>\n typeof action.data === 'function' && action.data({ node: action as Node, caller: TREE_ITEM_MAIN_HEADING })\n }\n />\n </ActionRoot>\n <PlankHeading.Label attendableId={activeNode.id}>{label}</PlankHeading.Label>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ReactNode, useCallback, useMemo } from 'react';\n\nimport { NavigationAction, LayoutAction, Surface, useIntentDispatcher } from '@dxos/app-framework';\nimport { getGraph, isAction, isActionLike } from '@dxos/app-graph';\nimport { ElevationProvider, useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { type MosaicDropEvent, type MosaicMoveEvent, Mosaic, Path } from '@dxos/react-ui-mosaic';\nimport {\n NavTree,\n type NavTreeItemNode,\n type NavTreeNode,\n getLevel,\n type NavTreeActionsNode,\n type NavTreeProps,\n type NavTreeItemMoveDetails,\n} from '@dxos/react-ui-navtree';\nimport { arrayMove } from '@dxos/util';\n\nimport { NavTreeFooter } from './NavTreeFooter';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport {\n expandActions,\n expandChildren,\n getChildren,\n getParent,\n type NavTreeItem,\n type NavTreeItemGraphNode,\n resolveMigrationOperation,\n treeItemsFromRootNode,\n} from '../util';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderPresence = (node: NavTreeNode): ReactNode => (\n <Surface role='presence--glyph' data={{ object: node.data }} />\n);\n\nexport const NavTreeContainer = ({\n root,\n activeIds,\n openItemIds,\n onOpenItemIdsChange,\n attended,\n popoverAnchorId,\n}: {\n root: NavTreeItemGraphNode;\n activeIds: Set<string>;\n openItemIds: Record<string, true>;\n onOpenItemIdsChange: (nextOpenItemIds: Record<string, true>) => void;\n // TODO(wittjosiah): Use attention context directly?\n attended: string[];\n popoverAnchorId?: string;\n}) => {\n const { closeNavigationSidebar } = useSidebars(NAVTREE_PLUGIN);\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const dispatch = useIntentDispatcher();\n\n const graph = useMemo(() => getGraph(root), [root]);\n\n const items = treeItemsFromRootNode(graph, root, openItemIds);\n\n const loadDescendents = useCallback(\n (node: NavTreeNode | NavTreeActionsNode) => {\n void expandActions(graph, node as NavTreeItemGraphNode);\n if (!isActionLike(node)) {\n void expandChildren(graph, node as NavTreeItemGraphNode).then(() =>\n // Load one level deeper, which resolves some juddering observed on open/close.\n Promise.all(\n getChildren(graph, node as NavTreeItemGraphNode).flatMap((child) => [\n expandActions(graph, child),\n expandChildren(graph, child),\n ]),\n ),\n );\n }\n },\n [graph],\n );\n\n const handleNavigate = async ({ node, actions }: NavTreeItemNode) => {\n if (!node.data) {\n return;\n }\n\n // TODO(thure): Refactor opening related planks (comments in this case) to a generalized approach.\n await dispatch({\n action: NavigationAction.OPEN,\n data: {\n activeParts: {\n main: [node.id],\n },\n },\n });\n\n await dispatch({ action: LayoutAction.SCROLL_INTO_VIEW, data: { id: node.id } });\n\n const defaultAction = actions?.find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n if (!isLg) {\n closeNavigationSidebar();\n }\n };\n\n const handleItemOpenChange = ({ id, actions, path }: NavTreeItemNode, nextOpen: boolean) => {\n if (path) {\n if (nextOpen) {\n onOpenItemIdsChange({ ...openItemIds, [id]: true });\n } else {\n // TODO(thure): Filter vs single-remove, make setting?\n const { [id]: _, ...nextOpenItemIds } = openItemIds;\n onOpenItemIdsChange(nextOpenItemIds);\n }\n }\n\n // TODO(wittjosiah): This is a temporary solution to ensure spaces get enabled when they are expanded.\n const defaultAction = actions?.find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n };\n\n const resolveItemLevel = useCallback(\n (overPosition: number | undefined, activeId: string | undefined, levelOffset: number) => {\n if (!(typeof overPosition === 'number' && activeId)) {\n return 1;\n } else {\n const nextItems = arrayMove(\n items,\n items.findIndex(({ id }) => id === activeId),\n overPosition,\n );\n const previousItem: NavTreeItem | undefined = nextItems[overPosition - 1];\n const nextItem: NavTreeItem | undefined = nextItems[overPosition + 1];\n return Math.min(\n previousItem ? getLevel(previousItem?.path) + 1 : 1,\n Math.max(nextItem ? getLevel(nextItem?.path) : 1, getLevel(nextItems[overPosition].path) + levelOffset),\n );\n }\n },\n [items],\n );\n\n const handleMove: NavTreeProps['onMove'] = useCallback(\n ({ active, over, details }: MosaicMoveEvent<number, NavTreeItemMoveDetails>) => {\n const levelOffset = Math.floor((details?.delta?.x ?? 0) / 16);\n const overPosition = over.position ?? 0;\n\n const nextItems = arrayMove(\n items,\n items.findIndex(({ id }) => id === active.item.id),\n overPosition,\n );\n\n const previousItem: NavTreeItem | undefined = nextItems[overPosition - 1];\n const nextItem: NavTreeItem | undefined = nextItems[overPosition + 1];\n\n const activeNode = 'node' in active.item ? (active.item as NavTreeItem).node : undefined;\n\n if (!activeNode || !previousItem || !previousItem.path) {\n // console.log('[reject]', !activeNode, !previousItem, !previousItem.path);\n // log.warn('Top-level rearrange before the first item of the NavTree is unsupported at this time.');\n return { operation: 'reject' as const, details: { levelOffset } };\n }\n\n const overLevel = resolveItemLevel(overPosition, active.item.id, levelOffset);\n\n const previousLevel = getLevel(previousItem.path);\n\n // console.log('[over]', overLevel, previousLevel, levelOffset);\n\n if (previousLevel === overLevel - 1) {\n if (Path.hasChild(previousItem.id, active.item.id)) {\n // Previous is already parent of Active, rearrange.\n const operation = previousItem.node.properties.onRearrangeChildren\n ? ('rearrange' as const)\n : ('reject' as const);\n return { operation, details: { levelOffset } };\n } else {\n // Previous is not yet parent of Active, check transfer or copy.\n const operation = resolveMigrationOperation(graph, activeNode, previousItem.path, previousItem.node);\n // console.log('[migration result]', operation, 'Previous is not yet parent of Active, check transfer or copy.');\n return { operation, details: { levelOffset } };\n }\n } else if (previousLevel === overLevel) {\n const parent = getParent(graph, previousItem.node, previousItem.path);\n const parentPath = previousItem.path.slice(0, previousItem.path.length - 1);\n if (Path.siblings(previousItem.id, active.item.id)) {\n // Previous is already a sibling of Active, rearrange.\n const operation = parent?.properties.onRearrangeChildren ? ('rearrange' as const) : ('reject' as const);\n return { operation, details: { levelOffset } };\n } else {\n // Previous is not yet a sibling of Active, transfer/copy to Previous’s parent.\n const operation = resolveMigrationOperation(graph, activeNode, parentPath, parent);\n // console.log(\n // '[migration result]',\n // operation,\n // 'Previous is not yet a sibling of Active, transfer/copy to Previous’s parent.',\n // );\n return { operation, details: { levelOffset } };\n }\n } else if (nextItem && nextItem.path) {\n const nextLevel = getLevel(nextItem.path);\n if (nextLevel === overLevel) {\n const parent = getParent(graph, nextItem.node, nextItem.path);\n const parentPath = nextItem.path.slice(0, nextItem.path.length - 1);\n if (Path.siblings(nextItem.id, active.item.id)) {\n // Next is already a sibling of Active, rearrange.\n const operation = parent?.properties.onRearrangeChildren ? ('rearrange' as const) : ('reject' as const);\n return { operation, details: { levelOffset } };\n } else {\n // Next is not yet a sibling of Active, transfer to Next’s parent.\n const operation = resolveMigrationOperation(graph, activeNode, parentPath, parent);\n // console.log(\n // '[migration result]',\n // operation,\n // 'Next is not yet a sibling of Active, transfer to Next’s parent.',\n // );\n return { operation, details: { levelOffset } };\n }\n } else {\n // console.log('[migration result]', 'reject');\n return { operation: 'reject' as const, details: { levelOffset } };\n }\n } else {\n // console.log('[migration result]', 'reject');\n return { operation: 'reject' as const, details: { levelOffset } };\n }\n },\n [root, items],\n );\n\n const handleDrop = useCallback(\n ({ operation, active, over, details = {} }: MosaicDropEvent<number, NavTreeItemMoveDetails>) => {\n if (Path.first(over.path) !== root.id) {\n return undefined;\n }\n const { levelOffset = 0 } = details;\n const overPosition = over.position ?? 0;\n\n const nextItems = arrayMove(\n items,\n items.findIndex(({ id }) => id === active.item.id),\n overPosition,\n );\n\n const activeNode = 'node' in active.item ? (active.item as NavTreeItem).node : undefined;\n const activeParentId = Path.parent(active.item.id);\n\n if (!activeNode) {\n return undefined;\n }\n\n const activeParent = getParent(graph, activeNode, (active.item as NavTreeItem).path ?? []);\n\n if (operation === 'rearrange') {\n void activeParent?.properties.onRearrangeChildren?.(\n nextItems.filter(({ id }) => Path.hasChild(activeParentId, id)).map(({ node }) => node.data),\n );\n return null;\n } else {\n const previousItem: NavTreeItem | undefined = nextItems[overPosition - 1];\n const nextItem: NavTreeItem | undefined = nextItems[overPosition + 1];\n\n const overLevel = resolveItemLevel(overPosition, active.item.id, levelOffset);\n\n const previousLevel = getLevel(previousItem.path);\n\n if (operation === 'copy') {\n if (previousLevel === overLevel - 1) {\n void previousItem.node.properties.onCopy?.(activeNode, 0);\n return null;\n } else if (previousLevel === overLevel) {\n const parent = getParent(graph, previousItem.node, previousItem.path ?? []);\n void parent?.properties.onCopy?.(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === previousItem.node.id) + 1,\n );\n return null;\n } else if (nextItem && nextItem.path) {\n const parent = getParent(graph, nextItem.node, nextItem.path ?? []);\n void parent?.properties.onCopy?.(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === nextItem.node.id),\n );\n return null;\n }\n } else if (operation === 'transfer') {\n const onTransferEnd = activeParent?.properties.onTransferEnd;\n if (!onTransferEnd) {\n return undefined;\n } else if (previousLevel === overLevel - 1) {\n const onTransferStart = previousItem.node.properties.onTransferStart;\n if (onTransferStart) {\n void onTransferEnd(activeNode, previousItem.node);\n void onTransferStart(activeNode, 0);\n return null;\n }\n } else if (previousLevel === overLevel && previousItem.path) {\n const parent = getParent(graph, previousItem.node, previousItem.path);\n if (parent?.properties.onTransferStart) {\n void onTransferEnd(activeNode, previousItem.node);\n void parent.properties.onTransferStart(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === previousItem.node.id) + 1,\n );\n return null;\n }\n } else if (nextItem && nextItem.path) {\n const parent = getParent(graph, nextItem.node, nextItem.path);\n if (parent?.properties.onTransferStart) {\n void onTransferEnd(activeNode, previousItem.node);\n void parent.properties.onTransferStart(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === nextItem.node.id),\n );\n return null;\n }\n }\n }\n }\n return undefined;\n },\n [root, items],\n );\n\n const handleDragEnd = useCallback(() => {\n onOpenItemIdsChange({ ...openItemIds });\n }, [onOpenItemIdsChange, openItemIds]);\n\n return (\n <Mosaic.Root>\n <Mosaic.DragOverlay />\n <ElevationProvider elevation='chrome'>\n <div\n role='none'\n className='bs-full overflow-hidden row-span-3 grid grid-cols-1 grid-rows-[min-content_1fr_min-content]'\n >\n <Surface role='search-input' limit={1} />\n {/* TODO(thure): what gives this an inline `overflow: initial`? */}\n <div role='none' className='!overflow-y-auto'>\n <NavTree\n id={root.id}\n items={items}\n current={activeIds}\n attended={attended}\n type={NODE_TYPE}\n open={openItemIds}\n onNavigate={handleNavigate}\n onItemOpenChange={handleItemOpenChange}\n onMove={handleMove}\n onDrop={handleDrop}\n onDragEnd={handleDragEnd}\n popoverAnchorId={popoverAnchorId}\n renderPresence={renderPresence}\n resolveItemLevel={resolveItemLevel}\n loadDescendents={loadDescendents}\n />\n </div>\n <NavTreeFooter />\n </div>\n </ElevationProvider>\n </Mosaic.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowSquareOut, GearSix, Warning } from '@phosphor-icons/react';\nimport { formatDistance } from 'date-fns/formatDistance';\nimport React from 'react';\n\nimport {\n SettingsAction,\n useResolvePlugin,\n parseNavigationPlugin,\n useIntentDispatcher,\n type LayoutPart,\n} from '@dxos/app-framework';\nimport { useConfig } from '@dxos/react-client';\nimport {\n Button,\n Tooltip,\n Popover,\n useSidebars,\n useTranslation,\n Link,\n Message,\n Trans,\n useDefaultValue,\n} from '@dxos/react-ui';\nimport { PlankHeading } from '@dxos/react-ui-deck';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nconst buttonStyles = 'pli-1.5 text-xs font-normal';\n\nconst repo = 'https://github.com/dxos/dxos';\n\nexport const NavTreeFooter = (props: { layoutPart?: LayoutPart }) => {\n const layoutPart = useDefaultValue(props.layoutPart, () => 'sidebar');\n const config = useConfig();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const { version, timestamp, commitHash } = config.values.runtime?.app?.build ?? {};\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n\n const releaseUrl =\n config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production'\n ? `${repo}/releases/tag/v${version}`\n : `${repo}/commit/${commitHash}`;\n\n const previewUrl = 'https://docs.dxos.org/composer#technology-preview';\n\n return (\n <div\n role='none'\n className={mx(\n 'bs-[--rail-size] pbe-[env(safe-area-inset-bottom)] box-content border-separator border-bs pli-1 flex justify-end',\n layoutPart === 'complementary' && 'md:justify-end flex-row-reverse',\n )}\n >\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button variant='ghost' classNames={buttonStyles} {...(!navigationSidebarOpen && { tabIndex: -1 })}>\n v{version}\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side='top'\n role='message'\n classNames='z-[12] bg-warning-500 max-is-[min(calc(100vw-16px),40ch)]'\n >\n <Message.Root valence='warning' className='rounded-be-none p-5'>\n <Message.Title>\n <Warning weight='duotone' className='inline mie-2 is-6 bs-6' />\n <span>{t('warning title')}</span>\n </Message.Title>\n <Message.Body>\n {t('technology preview message')}\n <br />\n <Link href={previewUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('learn more label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </Message.Body>\n </Message.Root>\n <div role='none' className='plb-4 pli-5 space-b-2 text-baseText'>\n {timestamp && (\n <p>\n {t('released message', {\n released: formatDistance(new Date(timestamp), new Date(), { addSuffix: true }),\n })}\n <br />\n <Link href={releaseUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('see release label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </p>\n )}\n <p>\n <Trans\n {...{\n t,\n i18nKey: 'powered by dxos message',\n components: {\n dxos: <Link href='https://dxos.org' target='_blank' rel='noreferrer' variant='neutral' />,\n },\n }}\n />\n </p>\n </div>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(burdon): Reconcile with action created by LayoutPlugin. */}\n <Button\n variant='ghost'\n classNames={buttonStyles}\n data-testid='treeView.openSettings'\n data-joyride='welcome/settings'\n {...(!navigationSidebarOpen && { tabIndex: -1 })}\n onClick={() => dispatch({ action: SettingsAction.OPEN })}\n >\n <span className='sr-only'>{t('open settings label')}</span>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[12]'>\n {t('open settings label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {/* NOTE(thure): Unpinning from the NavTree’s default position in Deck is temporarily disabled. */}\n {navigationPlugin?.meta.id === 'dxos.org/plugin/deck' && (\n <PlankHeading.Controls\n variant='hide-disabled'\n capabilities={{\n incrementStart: false,\n incrementEnd: false,\n }}\n onClick={(_type) => {\n // TODO(Zan): If we inmplement pinning again, we should dispatch here.\n }}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Action,\n type Node,\n type NodeFilter,\n type Graph,\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n isAction,\n} from '@dxos/app-graph';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport {\n type NavTreeActionNode,\n type NavTreeItemActions,\n type NavTreeItemNode,\n type NavTreeItemNodeProperties,\n type OpenItemIds,\n} from '@dxos/react-ui-navtree';\nimport { type MaybePromise, nonNullable } from '@dxos/util';\n\nexport type NavTreeItemGraphNode = Node<\n any,\n NavTreeItemNodeProperties &\n Partial<{\n persistenceClass: string;\n persistenceKey: string;\n acceptPersistenceClass: Set<string>;\n acceptPersistenceKey: Set<string>;\n onRearrangeChildren: (nextOrder: NavTreeItemGraphNode[]) => MaybePromise<void>;\n onCopy: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferStart: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferEnd: (activeNode: NavTreeItemGraphNode, destinationParent: NavTreeItemGraphNode) => MaybePromise<void>;\n }>\n>;\nexport type NavTreeItem = NavTreeItemNode<NavTreeItemGraphNode>;\n\nexport const getParent = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return graph.nodes(node, { relation: 'inbound' }).find((n) => n.id === parentId) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: Graph,\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: Graph,\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 destinationRelatedNode.properties.onTransferStart\n ? 'transfer'\n : destinationRelatedNode.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 === 'toolbar') {\n return -1;\n }\n\n return 1;\n });\n\nexport const getTreeItemNode = (treeItems: NavTreeItemNode[], path?: string[]): NavTreeItemNode | undefined => {\n if (!path) {\n return undefined;\n }\n\n return treeItems.find((treeItem) => {\n return treeItem.path && !treeItem.path.find((id, index) => path[index] !== id);\n });\n};\n\nexport const getChildren = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n filter?: NodeFilter,\n path: string[] = [],\n): NavTreeItemGraphNode[] => {\n return graph\n .nodes(node, { relation: 'outbound', filter })\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(nonNullable) as NavTreeItemGraphNode[];\n};\n\ntype FlattenedActions = Required<Pick<NavTreeItemNode, 'actions' | 'groupedActions'>>;\n\nexport const getActions = (graph: Graph, node: NavTreeItemGraphNode): FlattenedActions => {\n return graph.actions(node).reduce(\n (acc: FlattenedActions, arg) => {\n acc.actions.push(arg as unknown as NavTreeItemActions[number]);\n if (!isAction(arg)) {\n const actionGroup = graph.actions(arg);\n acc.groupedActions[arg.id] = actionGroup as unknown as NavTreeActionNode[];\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n );\n};\n\nexport const expandChildrenAndActions = (graph: Graph, node: Node) => {\n return Promise.all([expandChildren(graph, node), expandActions(graph, node)]);\n};\n\nexport const expandChildren = (graph: Graph, node: Node) => {\n return graph.expand(node, 'outbound');\n};\n\nexport const expandActions = (graph: Graph, node: Node) => {\n return Promise.all([graph.expand(node, 'outbound', ACTION_TYPE), graph.expand(node, 'outbound', ACTION_GROUP_TYPE)]);\n};\n\nfunction* navTreeItemVisitor(\n graph: Graph,\n node: NavTreeItemGraphNode,\n openItemIds: OpenItemIds,\n path: string[] = [],\n filter?: NodeFilter,\n): Generator<NavTreeItem> {\n const l0Children = getChildren(graph, node, filter, path);\n const { actions: l0Actions, groupedActions: l0GroupedActions } = getActions(graph, node);\n\n const stack: NavTreeItem[] = [\n {\n id: node.id,\n node,\n path: [],\n parentOf: (l0Children ?? []).map(({ id }) => id),\n actions: l0Actions,\n groupedActions: l0GroupedActions,\n },\n ];\n\n while (stack.length > 0) {\n const nextItem = stack.pop()!;\n if ((nextItem.path?.length ?? 0) > 0) {\n yield nextItem;\n }\n const { id, node, path } = nextItem;\n const children = getChildren(graph, node, filter, path);\n if (path?.length === 0 || (id ?? 'never') in openItemIds) {\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i] as NavTreeItemGraphNode;\n const childPath = path ? [...path, child.id] : [child.id];\n const childChildren = getChildren(graph, child, filter, childPath);\n const { actions: childActions, groupedActions: childGroupedActions } = getActions(graph, child);\n stack.push({\n id: Path.create(...childPath),\n node: child,\n path: childPath,\n ...((childChildren?.length ?? 0) > 0 && {\n parentOf: childChildren!.map(({ id }) => Path.create(...childPath, id)),\n }),\n actions: childActions,\n groupedActions: childGroupedActions,\n });\n }\n }\n }\n}\n\n/**\n * Get a reactive tree node from a graph node.\n */\nexport const treeItemsFromRootNode = (\n graph: Graph,\n rootNode: NavTreeItemGraphNode,\n openItemIds: OpenItemIds,\n path: string[] = [],\n filter?: NodeFilter,\n): NavTreeItem[] => {\n return Array.from(navTreeItemVisitor(graph, rootNode, openItemIds, path, filter));\n};\n\nexport const expandOpenGraphNodes = (graph: Graph, openItemIds: OpenItemIds) => {\n return Promise.all(\n Object.keys(openItemIds)\n .map((openItemId) => {\n const node = graph.findNode(Path.last(openItemId));\n return node && expandChildrenAndActions(graph, node as NavTreeItemGraphNode);\n })\n .filter(nonNullable),\n );\n};\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 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher, useResolvePlugin } from '@dxos/app-framework';\nimport { ClientAction } from '@dxos/plugin-client/meta';\nimport { parseObservabilityPlugin } from '@dxos/plugin-observability';\nimport { useIdentity } from '@dxos/react-client/halo';\n\nimport { HaloButton } from './HaloButton';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin (ClientPlugin?).\nexport const NotchStart = () => {\n const identity = useIdentity();\n const observabilityPlugin = useResolvePlugin(parseObservabilityPlugin);\n const dispatch = useIntentDispatcher();\n return (\n <HaloButton\n size={8}\n identityKey={identity?.identityKey.toHex()}\n hue={identity?.profile?.data?.hue}\n emoji={identity?.profile?.data?.emoji}\n internal={observabilityPlugin?.provides?.observability?.group === 'dxos'}\n onClick={() => dispatch({ action: ClientAction.SHARE_IDENTITY })}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { ConnectionState, useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Avatar, type Size } from '@dxos/react-ui';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\nimport { hexToFallback } from '@dxos/util';\n\nconst INTERNAL = 'https://avatars.githubusercontent.com/u/57182821';\n\nexport type HaloButtonProps = {\n size?: Size;\n identityKey?: string;\n hue?: string;\n emoji?: string;\n internal?: boolean;\n onClick?: () => void;\n};\n\nexport const HaloButton = (props: HaloButtonProps) => {\n const { onClick, identityKey, internal, size = 8 } = props;\n const fallbackValue = hexToFallback(identityKey ?? '0');\n const { swarm: connectionState } = useNetworkStatus();\n return (\n <button className={mx(focusRing, 'rounded grid place-items-center')} onClick={onClick}>\n <Avatar.Root\n size={size}\n variant='circle'\n status={connectionState === ConnectionState.OFFLINE ? 'error' : internal ? 'internal' : 'active'}\n hue={props.hue || fallbackValue.hue}\n >\n <Avatar.Frame data-testid='treeView.haloButton' data-joyride='welcome/halo'>\n {internal ? <Avatar.Image href={INTERNAL} /> : <Avatar.Fallback text={props.emoji || fallbackValue.emoji} />}\n </Avatar.Frame>\n </Avatar.Root>\n </button>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { LayoutAction, useIntent } from '@dxos/app-framework';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatch } = useIntent();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='pis-3 pie-2 gap-2 mli-1 mbs-1 min-bs-0 bs-[--rail-action] justify-start'\n onClick={() =>\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'dialog', component: `${NAVTREE_PLUGIN}/Commands`, dialogBlockAlign: 'start' },\n })\n }\n >\n <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>\n <MagnifyingGlass className={getSize(5)} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { translations as navtreeTranslations } from '@dxos/react-ui-navtree';\n\nimport { NAVTREE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [NAVTREE_PLUGIN]: {\n 'open settings label': 'Settings',\n 'open commands label': 'Search commands',\n 'commands dialog title': 'Commands',\n 'command list input placeholder': 'Search for commands…',\n 'node actions menu invoker label': 'More options',\n 'warning title': 'WARNING',\n 'technology preview message': 'Composer is still in technology preview.',\n 'learn more label': 'Learn more',\n 'released message': 'This version released {{released}}.',\n 'see release label': 'See release on GitHub',\n 'powered by dxos message': 'Powered by <dxos>DXOS</dxos>',\n },\n },\n },\n ...navtreeTranslations,\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NavTreePlugin } from './NavTreePlugin';\n\nexport default NavTreePlugin;\n\nexport * from './NavTreePlugin';\nexport * from './util';\n"],
5
- "mappings": "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",
6
- "names": ["React", "resolvePlugin", "parseIntentPlugin", "LayoutAction", "parseGraphPlugin", "NavigationAction", "createExtension", "isAction", "isGraphNode", "Keyboard", "LocalStorageStore", "Path", "getHostPlatform", "React", "useMemo", "useState", "useIntentDispatcher", "LayoutAction", "isActionGroup", "isAction", "Keyboard", "keySymbols", "useGraph", "Button", "Dialog", "Icon", "useTranslation", "toLocalizedString", "SearchList", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatch", "useIntentDispatcher", "graph", "useGraph", "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", "Dialog", "Content", "classNames", "Title", "ns", "SearchList", "Root", "Input", "placeholder", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "LayoutAction", "SET_LAYOUT", "data", "element", "state", "setTimeout", "nodes", "relation", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "Close", "asChild", "Button", "variant", "React", "Fragment", "getGraph", "Popover", "toLocalizedString", "useTranslation", "PlankHeading", "TREE_ITEM_MAIN_HEADING", "NavBarStart", "activeNode", "popoverAnchorId", "t", "useTranslation", "NAVTREE_PLUGIN", "ActionRoot", "id", "KEY_BINDING", "Popover", "Anchor", "Fragment", "graph", "getGraph", "actions", "label", "toLocalizedString", "properties", "menuTriggerLabel", "React", "PlankHeading", "ActionsMenu", "icon", "attendableId", "triggerLabel", "onAction", "action", "data", "node", "caller", "Label", "React", "useCallback", "useMemo", "NavigationAction", "LayoutAction", "Surface", "useIntentDispatcher", "getGraph", "isAction", "isActionLike", "ElevationProvider", "useMediaQuery", "useSidebars", "Mosaic", "Path", "NavTree", "getLevel", "arrayMove", "ArrowSquareOut", "GearSix", "Warning", "formatDistance", "React", "SettingsAction", "useResolvePlugin", "parseNavigationPlugin", "useIntentDispatcher", "useConfig", "Button", "Tooltip", "Popover", "useSidebars", "useTranslation", "Link", "Message", "Trans", "useDefaultValue", "PlankHeading", "getSize", "mx", "buttonStyles", "repo", "NavTreeFooter", "props", "layoutPart", "useDefaultValue", "config", "useConfig", "t", "useTranslation", "NAVTREE_PLUGIN", "navigationSidebarOpen", "useSidebars", "dispatch", "useIntentDispatcher", "version", "timestamp", "commitHash", "values", "runtime", "app", "build", "navigationPlugin", "useResolvePlugin", "parseNavigationPlugin", "releaseUrl", "env", "DX_ENVIRONMENT", "previewUrl", "React", "div", "role", "className", "mx", "Popover", "Root", "Trigger", "asChild", "Button", "variant", "classNames", "tabIndex", "Portal", "Content", "side", "Message", "valence", "Title", "Warning", "weight", "span", "Body", "br", "Link", "href", "target", "rel", "ArrowSquareOut", "p", "released", "formatDistance", "Date", "addSuffix", "Trans", "i18nKey", "components", "dxos", "Arrow", "Tooltip", "data-testid", "data-joyride", "onClick", "action", "SettingsAction", "OPEN", "GearSix", "getSize", "meta", "id", "PlankHeading", "Controls", "capabilities", "incrementStart", "incrementEnd", "_type", "ACTION_TYPE", "ACTION_GROUP_TYPE", "isAction", "Path", "nonNullable", "getParent", "graph", "node", "path", "parentId", "length", "nodes", "relation", "find", "n", "id", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getTreeItemNode", "treeItems", "undefined", "treeItem", "index", "getChildren", "filter", "map", "nextPath", "includes", "nonNullable", "getActions", "reduce", "acc", "arg", "push", "isAction", "actionGroup", "groupedActions", "expandChildrenAndActions", "Promise", "all", "expandChildren", "expandActions", "expand", "ACTION_TYPE", "ACTION_GROUP_TYPE", "navTreeItemVisitor", "openItemIds", "l0Children", "l0Actions", "l0GroupedActions", "stack", "parentOf", "nextItem", "pop", "children", "i", "child", "childPath", "childChildren", "childActions", "childGroupedActions", "Path", "create", "treeItemsFromRootNode", "rootNode", "Array", "from", "expandOpenGraphNodes", "Object", "keys", "openItemId", "findNode", "last", "NODE_TYPE", "renderPresence", "node", "React", "Surface", "role", "data", "object", "NavTreeContainer", "root", "activeIds", "openItemIds", "onOpenItemIdsChange", "attended", "popoverAnchorId", "closeNavigationSidebar", "useSidebars", "NAVTREE_PLUGIN", "isLg", "useMediaQuery", "ssr", "dispatch", "useIntentDispatcher", "graph", "useMemo", "getGraph", "items", "treeItemsFromRootNode", "loadDescendents", "useCallback", "expandActions", "isActionLike", "expandChildren", "then", "Promise", "all", "getChildren", "flatMap", "child", "handleNavigate", "actions", "action", "NavigationAction", "OPEN", "activeParts", "main", "id", "LayoutAction", "SCROLL_INTO_VIEW", "defaultAction", "find", "properties", "disposition", "isAction", "handleItemOpenChange", "path", "nextOpen", "_", "nextOpenItemIds", "resolveItemLevel", "overPosition", "activeId", "levelOffset", "nextItems", "arrayMove", "findIndex", "previousItem", "nextItem", "Math", "min", "getLevel", "max", "handleMove", "active", "over", "details", "floor", "delta", "x", "position", "item", "activeNode", "undefined", "operation", "overLevel", "previousLevel", "Path", "hasChild", "onRearrangeChildren", "resolveMigrationOperation", "parent", "getParent", "parentPath", "slice", "length", "siblings", "nextLevel", "handleDrop", "first", "activeParentId", "activeParent", "filter", "map", "onCopy", "onTransferEnd", "onTransferStart", "handleDragEnd", "Mosaic", "Root", "DragOverlay", "ElevationProvider", "elevation", "div", "className", "limit", "NavTree", "current", "type", "open", "onNavigate", "onItemOpenChange", "onMove", "onDrop", "onDragEnd", "NavTreeFooter", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "React", "useIntentDispatcher", "useResolvePlugin", "ClientAction", "parseObservabilityPlugin", "useIdentity", "React", "ConnectionState", "useNetworkStatus", "Avatar", "focusRing", "mx", "hexToFallback", "INTERNAL", "HaloButton", "props", "onClick", "identityKey", "internal", "size", "fallbackValue", "hexToFallback", "swarm", "connectionState", "useNetworkStatus", "React", "button", "className", "mx", "focusRing", "Avatar", "Root", "variant", "status", "ConnectionState", "OFFLINE", "hue", "Frame", "data-testid", "data-joyride", "Image", "href", "Fallback", "text", "emoji", "NotchStart", "identity", "useIdentity", "observabilityPlugin", "useResolvePlugin", "parseObservabilityPlugin", "dispatch", "useIntentDispatcher", "React", "HaloButton", "size", "identityKey", "toHex", "hue", "profile", "data", "emoji", "internal", "provides", "observability", "group", "onClick", "action", "ClientAction", "SHARE_IDENTITY", "MagnifyingGlass", "React", "LayoutAction", "useIntent", "Button", "useTranslation", "getSize", "CommandsTrigger", "dispatch", "useIntent", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "component", "dialogBlockAlign", "span", "className", "MagnifyingGlass", "getSize", "translations", "navtreeTranslations", "NAVTREE_PLUGIN", "navtreeTranslations", "NavTreePlugin", "state", "LocalStorageStore", "openItemIds", "root", "graphPlugin", "graph", "handleOpenItemIdsChange", "nextOpenItemIds", "values", "expandOpenGraphNodes", "meta", "ready", "plugins", "resolvePlugin", "parseGraphPlugin", "provides", "getChildren", "getActions", "prop", "key", "storageKey", "type", "json", "subscribeTraverse", "visitor", "node", "path", "shortcut", "properties", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "getHostPlatform", "includes", "macos", "windows", "undefined", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "data", "caller", "KEY_BINDING", "label", "initialize", "setCurrentContext", "id", "unload", "destroy", "metadata", "records", "NODE_TYPE", "parse", "item", "object", "surface", "component", "role", "NAVTREE_PLUGIN", "selected", "subject", "React", "CommandsDialogContent", "NavTreeContainer", "activeIds", "onOpenItemIdsChange", "attended", "popoverAnchorId", "NavTreeDocumentTitle", "isGraphNode", "activeNode", "NavBarStart", "disposition", "NotchStart", "CommandsTrigger", "intent", "resolver", "action", "NavigationAction", "EXPOSE", "getPath", "target", "Array", "isArray", "additionalOpenItems", "length", "reduce", "acc", "_", "index", "itemId", "Path", "create", "builder", "intentPlugin", "parseIntentPlugin", "createExtension", "filter", "actions", "dispatch", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "ns", "icon", "translations", "NavTreePlugin"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { MagnifyingGlass, type IconProps } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n type GraphBuilderProvides,\n resolvePlugin,\n type MetadataRecordsProvides,\n type PluginDefinition,\n type SurfaceProvides,\n type TranslationsProvides,\n type Plugin,\n type IntentResolverProvides,\n parseIntentPlugin,\n LayoutAction,\n type GraphProvides,\n parseGraphPlugin,\n NavigationAction,\n} from '@dxos/app-framework';\nimport { createExtension, type Graph, isAction, isGraphNode, type Node } from '@dxos/app-graph';\nimport { Keyboard } from '@dxos/keyboard';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport { type OpenItemIds } from '@dxos/react-ui-navtree';\nimport { getHostPlatform } from '@dxos/util';\n\nimport {\n CommandsDialogContent,\n NODE_TYPE,\n NavBarStart,\n NavTreeContainer,\n NavTreeDocumentTitle,\n NotchStart,\n} from './components';\nimport { CommandsTrigger } from './components/CommandsTrigger';\nimport meta, { KEY_BINDING, NAVTREE_PLUGIN } from './meta';\nimport translations from './translations';\nimport { expandOpenGraphNodes, getActions, getChildren, type NavTreeItem, type NavTreeItemGraphNode } from './util';\n\nexport type NavTreePluginProvides = SurfaceProvides &\n MetadataRecordsProvides &\n GraphBuilderProvides &\n TranslationsProvides &\n IntentResolverProvides;\n\ntype NavTreeState = { root?: NavTreeItemGraphNode; openItemIds: OpenItemIds };\n\nexport const NavTreePlugin = (): PluginDefinition<NavTreePluginProvides> => {\n const state = new LocalStorageStore<NavTreeState>('dxos.org/settings/navtree', {\n // TODO(thure): Do this dynamically.\n openItemIds: { root: true, 'dxos.org/plugin/space-spaces': true, 'dxos.org/plugin/files': true },\n });\n\n let graphPlugin: Plugin<GraphProvides> | undefined;\n let graph: Graph | undefined;\n\n const handleOpenItemIdsChange = (nextOpenItemIds: OpenItemIds) => {\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n state.values.openItemIds = nextOpenItemIds;\n if (graph) {\n void expandOpenGraphNodes(graph, nextOpenItemIds);\n }\n };\n\n return {\n meta,\n ready: async (plugins) => {\n graphPlugin = resolvePlugin(plugins, parseGraphPlugin);\n graph = graphPlugin?.provides.graph;\n if (!graph) {\n return;\n }\n\n state.values.root = graph.root as NavTreeItemGraphNode;\n getChildren(graph, state.values.root);\n getActions(graph, state.values.root);\n\n state.prop({ key: 'openItemIds', storageKey: 'openItemIds', type: LocalStorageStore.json<OpenItemIds>() });\n\n void expandOpenGraphNodes(graph, state.values.openItemIds);\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n graph.subscribeTraverse({\n visitor: (node, path) => {\n let shortcut: string | undefined;\n if (typeof node.properties.keyBinding === 'object') {\n const availablePlatforms = Object.keys(node.properties.keyBinding);\n const platform = getHostPlatform();\n shortcut = availablePlatforms.includes(platform)\n ? node.properties.keyBinding[platform]\n : platform === 'ios'\n ? node.properties.keyBinding.macos // Fallback to macos if ios-specific bindings not provided.\n : platform === 'linux' || platform === 'unknown'\n ? node.properties.keyBinding.windows // Fallback to windows if platform-specific bindings not provided.\n : undefined;\n } else {\n shortcut = node.properties.keyBinding;\n }\n\n if (shortcut && isAction(node)) {\n Keyboard.singleton.getContext(path.slice(0, -1).join('/')).bind({\n shortcut,\n handler: () => {\n void node.data({ node, caller: KEY_BINDING });\n },\n data: node.properties.label,\n });\n }\n },\n });\n\n // TODO(burdon): Create context and plugin.\n Keyboard.singleton.initialize();\n Keyboard.singleton.setCurrentContext(graphPlugin?.provides.graph.root.id);\n },\n unload: async () => {\n Keyboard.singleton.destroy();\n },\n provides: {\n metadata: {\n records: {\n [NODE_TYPE]: {\n parse: (item: NavTreeItem, type: string) => {\n switch (type) {\n case 'node':\n return item.node;\n case 'object':\n return item.node.data;\n case 'view-object':\n return { id: `${item.id}-view`, object: item.node.data };\n }\n },\n },\n },\n },\n surface: {\n component: ({ data, role }) => {\n switch (data.component) {\n case `${NAVTREE_PLUGIN}/Commands`: {\n const selected = typeof data.subject === 'string' ? data.subject : undefined;\n return <CommandsDialogContent selected={selected} />;\n }\n }\n\n switch (role) {\n case 'navigation':\n if (state.values.root && state.values.openItemIds) {\n return (\n <NavTreeContainer\n root={state.values.root}\n activeIds={data.activeIds as Set<string>}\n openItemIds={state.values.openItemIds}\n onOpenItemIdsChange={handleOpenItemIdsChange}\n attended={data.attended as Set<string>}\n popoverAnchorId={data.popoverAnchorId as string}\n />\n );\n }\n break;\n\n case 'document-title': {\n return <NavTreeDocumentTitle node={isGraphNode(data.activeNode) ? data.activeNode : undefined} />;\n }\n\n case 'navbar-start': {\n if (state.values.root && data.activeNode) {\n return {\n node: (\n <NavBarStart\n activeNode={data.activeNode as Node}\n popoverAnchorId={data.popoverAnchorId as string | undefined}\n />\n ),\n disposition: 'hoist',\n };\n }\n break;\n }\n\n case 'notch-start':\n return <NotchStart />;\n\n case 'search-input':\n return {\n node: <CommandsTrigger />,\n disposition: 'fallback',\n };\n }\n\n return null;\n },\n },\n intent: {\n resolver: (intent) => {\n switch (intent.action) {\n case NavigationAction.EXPOSE: {\n if (graph && intent.data?.id) {\n const path = graph.getPath({ target: intent.data.id });\n if (Array.isArray(path)) {\n const additionalOpenItems = [...Array(path.length - 1)].reduce((acc: OpenItemIds, _, index) => {\n const itemId = Path.create(...path.slice(1, index + 1));\n if (itemId.length > 0) {\n acc[itemId] = true;\n }\n return acc;\n }, {});\n state.values.openItemIds = {\n ...additionalOpenItems,\n ...state.values.openItemIds,\n };\n }\n }\n break;\n }\n }\n },\n },\n graph: {\n builder: (plugins) => {\n // TODO(burdon): Move to separate plugin (for keys and command k). Move bindings from LayoutPlugin.\n const intentPlugin = resolvePlugin(plugins, parseIntentPlugin);\n\n return [\n createExtension({\n id: NAVTREE_PLUGIN,\n filter: (node): node is Node<null> => node.id === 'root',\n actions: () => [\n {\n id: 'dxos.org/plugin/navtree/open-commands',\n data: async () => {\n await intentPlugin?.provides.intent.dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: {\n element: 'dialog',\n component: `${NAVTREE_PLUGIN}/Commands`,\n dialogBlockAlign: 'start',\n },\n });\n },\n properties: {\n label: ['open commands label', { ns: NAVTREE_PLUGIN }],\n icon: (props: IconProps) => <MagnifyingGlass {...props} />,\n iconSymbol: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'meta+k',\n windows: 'ctrl+k',\n },\n },\n },\n ],\n }),\n ];\n },\n },\n translations,\n },\n };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DotOutline } from '@phosphor-icons/react';\nimport React, { useMemo, useState } from 'react';\n\nimport { useIntentDispatcher, LayoutAction } from '@dxos/app-framework';\nimport { type ActionLike, isActionGroup, isAction } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useGraph } from '@dxos/plugin-graph';\nimport { Button, Dialog, useTranslation, toLocalizedString } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\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 dispatch = useIntentDispatcher();\n const { graph } = useGraph();\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 // console.log(JSON.stringify(actions, undefined, 2));\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const actions = isActionGroup(group) ? graph.actions(group) : allActions;\n\n return (\n <Dialog.Content classNames={['md:max-is-[30rem] overflow-hidden mbs-12']}>\n <Dialog.Title>{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='flex flex-col grow overflow-hidden my-2'>\n <SearchList.Input placeholder={t('command list input placeholder')} classNames='px-1 my-2' />\n <SearchList.Content classNames='max-bs-[24rem] overflow-auto'>\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 const Icon = action.properties.icon ?? DotOutline;\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({ action: LayoutAction.SET_LAYOUT, data: { element: 'dialog', state: false } });\n setTimeout(() => {\n const node = graph.nodes(group ?? action, { relation: 'inbound' })[0];\n void (node && isAction(action) && action.data({ 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 size={4} className={mx(!action.properties.icon && 'invisible')} />\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 <Dialog.Close asChild>\n <Button variant='primary' classNames='mbs-2'>\n {t('close label', { ns: 'os' })}\n </Button>\n </Dialog.Close>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { DotsThreeVertical } from '@phosphor-icons/react';\nimport React, { Fragment } from 'react';\n\nimport { getGraph, type Node } from '@dxos/app-graph';\nimport { Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { PlankHeading } from '@dxos/react-ui-deck';\n\nimport { KEY_BINDING, NAVTREE_PLUGIN } from '../meta';\n\nconst TREE_ITEM_MAIN_HEADING = 'TreeItemMainHeading';\n\nexport const NavBarStart = ({ activeNode, popoverAnchorId }: { activeNode: Node; popoverAnchorId?: string }) => {\n const { t } = useTranslation(NAVTREE_PLUGIN);\n\n const ActionRoot =\n popoverAnchorId === `dxos.org/ui/${TREE_ITEM_MAIN_HEADING}/${activeNode.id}` ||\n popoverAnchorId === `dxos.org/ui/${KEY_BINDING}/${activeNode.id}`\n ? Popover.Anchor\n : Fragment;\n\n const Icon = activeNode.properties?.icon ?? DotsThreeVertical;\n const graph = getGraph(activeNode);\n const actions = graph.actions(activeNode);\n const label = toLocalizedString(activeNode.properties?.label, t);\n\n const menuTriggerLabel = t('node actions menu invoker label');\n\n return (\n <>\n <ActionRoot>\n <PlankHeading.ActionsMenu\n Icon={Icon}\n attendableId={activeNode.id}\n triggerLabel={menuTriggerLabel}\n actions={actions}\n onAction={(action) =>\n typeof action.data === 'function' && action.data({ node: action as Node, caller: TREE_ITEM_MAIN_HEADING })\n }\n />\n </ActionRoot>\n <PlankHeading.Label attendableId={activeNode.id}>{label}</PlankHeading.Label>\n </>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type ReactNode, useCallback, useMemo } from 'react';\n\nimport {\n NavigationAction,\n LayoutAction,\n Surface,\n SLUG_PATH_SEPARATOR,\n SLUG_COLLECTION_INDICATOR,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { getGraph, isAction, isActionLike } from '@dxos/app-graph';\nimport { ElevationProvider, useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { type MosaicDropEvent, type MosaicMoveEvent, Path } from '@dxos/react-ui-mosaic';\nimport {\n NavTree,\n type NavTreeItemNode,\n type NavTreeNode,\n getLevel,\n type NavTreeActionsNode,\n type NavTreeProps,\n type NavTreeItemMoveDetails,\n} from '@dxos/react-ui-navtree';\nimport { arrayMove } from '@dxos/util';\n\nimport { NavTreeFooter } from './NavTreeFooter';\nimport { NAVTREE_PLUGIN } from '../meta';\nimport {\n expandActions,\n expandChildren,\n getChildren,\n getParent,\n type NavTreeItem,\n type NavTreeItemGraphNode,\n resolveMigrationOperation,\n treeItemsFromRootNode,\n} from '../util';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderPresence = (node: NavTreeNode): ReactNode => (\n <Surface role='presence--glyph' data={{ object: node.data }} />\n);\n\nexport const NavTreeContainer = ({\n root,\n activeIds,\n openItemIds,\n onOpenItemIdsChange,\n attended,\n popoverAnchorId,\n}: {\n root: NavTreeItemGraphNode;\n activeIds: Set<string>;\n openItemIds: Record<string, true>;\n onOpenItemIdsChange: (nextOpenItemIds: Record<string, true>) => void;\n attended: Set<string>;\n popoverAnchorId?: string;\n}) => {\n const { closeNavigationSidebar } = useSidebars(NAVTREE_PLUGIN);\n const [isLg] = useMediaQuery('lg', { ssr: false });\n const dispatch = useIntentDispatcher();\n\n const graph = useMemo(() => getGraph(root), [root]);\n\n const items = treeItemsFromRootNode(graph, root, openItemIds);\n\n const loadDescendents = useCallback(\n (node: NavTreeNode | NavTreeActionsNode) => {\n void expandActions(graph, node as NavTreeItemGraphNode);\n if (!isActionLike(node)) {\n void expandChildren(graph, node as NavTreeItemGraphNode).then(() =>\n // Load one level deeper, which resolves some juddering observed on open/close.\n Promise.all(\n getChildren(graph, node as NavTreeItemGraphNode).flatMap((child) => [\n expandActions(graph, child),\n expandChildren(graph, child),\n ]),\n ),\n );\n }\n },\n [graph],\n );\n\n const handleNavigate = async ({ node, actions }: NavTreeItemNode) => {\n if (!node.data) {\n return;\n }\n\n // TODO(thure): Refactor opening related planks (comments in this case) to a generalized approach.\n await dispatch({\n action: NavigationAction.OPEN,\n data: {\n activeParts: node.data?.comments\n ? {\n main: [node.id],\n complementary: [`${node.id}${SLUG_PATH_SEPARATOR}comments${SLUG_COLLECTION_INDICATOR}`],\n }\n : {\n main: [node.id],\n },\n },\n });\n\n await dispatch({ action: LayoutAction.SCROLL_INTO_VIEW, data: { id: node.id } });\n\n const defaultAction = actions?.find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n if (!isLg) {\n closeNavigationSidebar();\n }\n };\n\n const handleItemOpenChange = ({ id, actions, path }: NavTreeItemNode, nextOpen: boolean) => {\n if (path) {\n if (nextOpen) {\n onOpenItemIdsChange({ ...openItemIds, [id]: true });\n } else {\n // TODO(thure): Filter vs single-remove, make setting?\n const { [id]: _, ...nextOpenItemIds } = openItemIds;\n onOpenItemIdsChange(nextOpenItemIds);\n }\n }\n\n // TODO(wittjosiah): This is a temporary solution to ensure spaces get enabled when they are expanded.\n const defaultAction = actions?.find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n };\n\n const resolveItemLevel = useCallback(\n (overPosition: number | undefined, activeId: string | undefined, levelOffset: number) => {\n if (!(typeof overPosition === 'number' && activeId)) {\n return 1;\n } else {\n const nextItems = arrayMove(\n items,\n items.findIndex(({ id }) => id === activeId),\n overPosition,\n );\n const previousItem: NavTreeItem | undefined = nextItems[overPosition - 1];\n const nextItem: NavTreeItem | undefined = nextItems[overPosition + 1];\n return Math.min(\n previousItem ? getLevel(previousItem?.path) + 1 : 1,\n Math.max(nextItem ? getLevel(nextItem?.path) : 1, getLevel(nextItems[overPosition].path) + levelOffset),\n );\n }\n },\n [items],\n );\n\n const handleMove: NavTreeProps['onMove'] = useCallback(\n ({ active, over, details }: MosaicMoveEvent<number, NavTreeItemMoveDetails>) => {\n const levelOffset = Math.floor((details?.delta?.x ?? 0) / 16);\n const overPosition = over.position ?? 0;\n\n const nextItems = arrayMove(\n items,\n items.findIndex(({ id }) => id === active.item.id),\n overPosition,\n );\n\n const previousItem: NavTreeItem | undefined = nextItems[overPosition - 1];\n const nextItem: NavTreeItem | undefined = nextItems[overPosition + 1];\n\n const activeNode = 'node' in active.item ? (active.item as NavTreeItem).node : undefined;\n\n if (!activeNode || !previousItem || !previousItem.path) {\n // console.log('[reject]', !activeNode, !previousItem, !previousItem.path);\n // log.warn('Top-level rearrange before the first item of the NavTree is unsupported at this time.');\n return { operation: 'reject' as const, details: { levelOffset } };\n }\n\n const overLevel = resolveItemLevel(overPosition, active.item.id, levelOffset);\n\n const previousLevel = getLevel(previousItem.path);\n\n // console.log('[over]', overLevel, previousLevel, levelOffset);\n\n if (previousLevel === overLevel - 1) {\n if (Path.hasChild(previousItem.id, active.item.id)) {\n // Previous is already parent of Active, rearrange.\n const operation = previousItem.node.properties.onRearrangeChildren\n ? ('rearrange' as const)\n : ('reject' as const);\n return { operation, details: { levelOffset } };\n } else {\n // Previous is not yet parent of Active, check transfer or copy.\n const operation = resolveMigrationOperation(graph, activeNode, previousItem.path, previousItem.node);\n // console.log('[migration result]', operation, 'Previous is not yet parent of Active, check transfer or copy.');\n return { operation, details: { levelOffset } };\n }\n } else if (previousLevel === overLevel) {\n const parent = getParent(graph, previousItem.node, previousItem.path);\n const parentPath = previousItem.path.slice(0, previousItem.path.length - 1);\n if (Path.siblings(previousItem.id, active.item.id)) {\n // Previous is already a sibling of Active, rearrange.\n const operation = parent?.properties.onRearrangeChildren ? ('rearrange' as const) : ('reject' as const);\n return { operation, details: { levelOffset } };\n } else {\n // Previous is not yet a sibling of Active, transfer/copy to Previous’s parent.\n const operation = resolveMigrationOperation(graph, activeNode, parentPath, parent);\n // console.log(\n // '[migration result]',\n // operation,\n // 'Previous is not yet a sibling of Active, transfer/copy to Previous’s parent.',\n // );\n return { operation, details: { levelOffset } };\n }\n } else if (nextItem && nextItem.path) {\n const nextLevel = getLevel(nextItem.path);\n if (nextLevel === overLevel) {\n const parent = getParent(graph, nextItem.node, nextItem.path);\n const parentPath = nextItem.path.slice(0, nextItem.path.length - 1);\n if (Path.siblings(nextItem.id, active.item.id)) {\n // Next is already a sibling of Active, rearrange.\n const operation = parent?.properties.onRearrangeChildren ? ('rearrange' as const) : ('reject' as const);\n return { operation, details: { levelOffset } };\n } else {\n // Next is not yet a sibling of Active, transfer to Next’s parent.\n const operation = resolveMigrationOperation(graph, activeNode, parentPath, parent);\n // console.log(\n // '[migration result]',\n // operation,\n // 'Next is not yet a sibling of Active, transfer to Next’s parent.',\n // );\n return { operation, details: { levelOffset } };\n }\n } else {\n // console.log('[migration result]', 'reject');\n return { operation: 'reject' as const, details: { levelOffset } };\n }\n } else {\n // console.log('[migration result]', 'reject');\n return { operation: 'reject' as const, details: { levelOffset } };\n }\n },\n [root, items],\n );\n\n const handleDrop = useCallback(\n ({ operation, active, over, details = {} }: MosaicDropEvent<number, NavTreeItemMoveDetails>) => {\n if (Path.first(over.path) !== root.id) {\n return undefined;\n }\n const { levelOffset = 0 } = details;\n const overPosition = over.position ?? 0;\n\n const nextItems = arrayMove(\n items,\n items.findIndex(({ id }) => id === active.item.id),\n overPosition,\n );\n\n const activeNode = 'node' in active.item ? (active.item as NavTreeItem).node : undefined;\n const activeParentId = Path.parent(active.item.id);\n\n if (!activeNode) {\n return undefined;\n }\n\n const activeParent = getParent(graph, activeNode, (active.item as NavTreeItem).path ?? []);\n\n if (operation === 'rearrange') {\n void activeParent?.properties.onRearrangeChildren?.(\n nextItems.filter(({ id }) => Path.hasChild(activeParentId, id)).map(({ node }) => node.data),\n );\n return null;\n } else {\n const previousItem: NavTreeItem | undefined = nextItems[overPosition - 1];\n const nextItem: NavTreeItem | undefined = nextItems[overPosition + 1];\n\n const overLevel = resolveItemLevel(overPosition, active.item.id, levelOffset);\n\n const previousLevel = getLevel(previousItem.path);\n\n if (operation === 'copy') {\n if (previousLevel === overLevel - 1) {\n void previousItem.node.properties.onCopy?.(activeNode, 0);\n return null;\n } else if (previousLevel === overLevel) {\n const parent = getParent(graph, previousItem.node, previousItem.path ?? []);\n void parent?.properties.onCopy?.(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === previousItem.node.id) + 1,\n );\n return null;\n } else if (nextItem && nextItem.path) {\n const parent = getParent(graph, nextItem.node, nextItem.path ?? []);\n void parent?.properties.onCopy?.(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === nextItem.node.id),\n );\n return null;\n }\n } else if (operation === 'transfer') {\n const onTransferEnd = activeParent?.properties.onTransferEnd;\n if (!onTransferEnd) {\n return undefined;\n } else if (previousLevel === overLevel - 1) {\n const onTransferStart = previousItem.node.properties.onTransferStart;\n if (onTransferStart) {\n void onTransferEnd(activeNode, previousItem.node);\n void onTransferStart(activeNode, 0);\n return null;\n }\n } else if (previousLevel === overLevel && previousItem.path) {\n const parent = getParent(graph, previousItem.node, previousItem.path);\n if (parent?.properties.onTransferStart) {\n void onTransferEnd(activeNode, previousItem.node);\n void parent.properties.onTransferStart(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === previousItem.node.id) + 1,\n );\n return null;\n }\n } else if (nextItem && nextItem.path) {\n const parent = getParent(graph, nextItem.node, nextItem.path);\n if (parent?.properties.onTransferStart) {\n void onTransferEnd(activeNode, previousItem.node);\n void parent.properties.onTransferStart(\n activeNode,\n getChildren(graph, parent).findIndex(({ id }) => id === nextItem.node.id),\n );\n return null;\n }\n }\n }\n }\n return undefined;\n },\n [root, items],\n );\n\n const handleDragEnd = useCallback(() => {\n onOpenItemIdsChange({ ...openItemIds });\n }, [onOpenItemIdsChange, openItemIds]);\n\n return (\n <ElevationProvider elevation='chrome'>\n <div\n role='none'\n className='bs-full overflow-hidden row-span-3 grid grid-cols-1 grid-rows-[min-content_1fr_min-content]'\n >\n <Surface role='search-input' limit={1} />\n {/* TODO(thure): what gives this an inline `overflow: initial`? */}\n <div role='none' className='!overflow-y-auto'>\n <NavTree\n id={root.id}\n items={items}\n current={activeIds}\n attended={attended}\n type={NODE_TYPE}\n open={openItemIds}\n onNavigate={handleNavigate}\n onItemOpenChange={handleItemOpenChange}\n onMove={handleMove}\n onDrop={handleDrop}\n onDragEnd={handleDragEnd}\n popoverAnchorId={popoverAnchorId}\n renderPresence={renderPresence}\n resolveItemLevel={resolveItemLevel}\n loadDescendents={loadDescendents}\n />\n </div>\n <NavTreeFooter />\n </div>\n </ElevationProvider>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ArrowSquareOut, GearSix, Warning } from '@phosphor-icons/react';\nimport { formatDistance } from 'date-fns/formatDistance';\nimport React from 'react';\n\nimport {\n SettingsAction,\n useResolvePlugin,\n parseNavigationPlugin,\n useIntentDispatcher,\n type LayoutPart,\n} from '@dxos/app-framework';\nimport { useConfig } from '@dxos/react-client';\nimport {\n Button,\n Tooltip,\n Popover,\n useSidebars,\n useTranslation,\n Link,\n Message,\n Trans,\n useDefaultValue,\n} from '@dxos/react-ui';\nimport { PlankHeading } from '@dxos/react-ui-deck';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\nconst buttonStyles = 'pli-1.5 text-xs font-normal';\n\nconst repo = 'https://github.com/dxos/dxos';\n\nexport const NavTreeFooter = (props: { layoutPart?: LayoutPart }) => {\n const layoutPart = useDefaultValue(props.layoutPart, 'sidebar');\n const config = useConfig();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);\n const dispatch = useIntentDispatcher();\n const { version, timestamp, commitHash } = config.values.runtime?.app?.build ?? {};\n const navigationPlugin = useResolvePlugin(parseNavigationPlugin);\n\n const releaseUrl =\n config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production'\n ? `${repo}/releases/tag/v${version}`\n : `${repo}/commit/${commitHash}`;\n\n const previewUrl = 'https://docs.dxos.org/composer#technology-preview';\n\n return (\n <div\n role='none'\n className={mx(\n 'bs-[--rail-size] pbe-[env(safe-area-inset-bottom)] box-content border-separator border-bs pli-1 flex justify-end',\n layoutPart === 'complementary' && 'md:justify-end flex-row-reverse',\n )}\n >\n <Popover.Root>\n <Popover.Trigger asChild>\n <Button variant='ghost' classNames={buttonStyles} {...(!navigationSidebarOpen && { tabIndex: -1 })}>\n v{version}\n </Button>\n </Popover.Trigger>\n <Popover.Portal>\n <Popover.Content\n side='top'\n role='message'\n classNames='z-[12] bg-warning-500 max-is-[min(calc(100vw-16px),40ch)]'\n >\n <Message.Root valence='warning' className='rounded-be-none p-5'>\n <Message.Title>\n <Warning weight='duotone' className='inline mie-2 is-6 bs-6' />\n <span>{t('warning title')}</span>\n </Message.Title>\n <Message.Body>\n {t('technology preview message')}\n <br />\n <Link href={previewUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('learn more label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </Message.Body>\n </Message.Root>\n <div role='none' className='plb-4 pli-5 space-b-2 text-baseText'>\n {timestamp && (\n <p>\n {t('released message', {\n released: formatDistance(new Date(timestamp), new Date(), { addSuffix: true }),\n })}\n <br />\n <Link href={releaseUrl} target='_blank' rel='noreferrer' variant='neutral'>\n {t('see release label')}\n <ArrowSquareOut className='inline mis-1' weight='bold' />\n </Link>\n </p>\n )}\n <p>\n <Trans\n {...{\n t,\n i18nKey: 'powered by dxos message',\n components: {\n dxos: <Link href='https://dxos.org' target='_blank' rel='noreferrer' variant='neutral' />,\n },\n }}\n />\n </p>\n </div>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n {/* TODO(burdon): Reconcile with action created by LayoutPlugin. */}\n <Button\n variant='ghost'\n classNames={buttonStyles}\n data-testid='treeView.openSettings'\n data-joyride='welcome/settings'\n {...(!navigationSidebarOpen && { tabIndex: -1 })}\n onClick={() => dispatch({ action: SettingsAction.OPEN })}\n >\n <span className='sr-only'>{t('open settings label')}</span>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content classNames='z-[12]'>\n {t('open settings label')}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n\n {/* NOTE(thure): Unpinning from the NavTree’s default position in Deck is temporarily disabled. */}\n {navigationPlugin?.meta.id === 'dxos.org/plugin/deck' && (\n <PlankHeading.Controls\n variant='hide-disabled'\n capabilities={{\n incrementStart: false,\n incrementEnd: false,\n }}\n onClick={(_type) => {\n // TODO(Zan): If we inmplement pinning again, we should dispatch here.\n }}\n />\n )}\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport {\n type Action,\n type Node,\n type NodeFilter,\n type Graph,\n ACTION_TYPE,\n ACTION_GROUP_TYPE,\n isAction,\n} from '@dxos/app-graph';\nimport { Path } from '@dxos/react-ui-mosaic';\nimport {\n type NavTreeActionNode,\n type NavTreeItemActions,\n type NavTreeItemNode,\n type NavTreeItemNodeProperties,\n type OpenItemIds,\n} from '@dxos/react-ui-navtree';\nimport { type MaybePromise, nonNullable } from '@dxos/util';\n\nexport type NavTreeItemGraphNode = Node<\n any,\n NavTreeItemNodeProperties &\n Partial<{\n persistenceClass: string;\n persistenceKey: string;\n acceptPersistenceClass: Set<string>;\n acceptPersistenceKey: Set<string>;\n onRearrangeChildren: (nextOrder: NavTreeItemGraphNode[]) => MaybePromise<void>;\n onCopy: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferStart: (activeNode: NavTreeItemGraphNode, index?: number) => MaybePromise<void>;\n onTransferEnd: (activeNode: NavTreeItemGraphNode, destinationParent: NavTreeItemGraphNode) => MaybePromise<void>;\n }>\n>;\nexport type NavTreeItem = NavTreeItemNode<NavTreeItemGraphNode>;\n\nexport const getParent = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return graph.nodes(node, { relation: 'inbound' }).find((n) => n.id === parentId) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: Graph,\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: Graph,\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 destinationRelatedNode.properties.onTransferStart\n ? 'transfer'\n : destinationRelatedNode.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 === 'toolbar') {\n return -1;\n }\n\n return 1;\n });\n\nexport const getTreeItemNode = (treeItems: NavTreeItemNode[], path?: string[]): NavTreeItemNode | undefined => {\n if (!path) {\n return undefined;\n }\n\n return treeItems.find((treeItem) => {\n return treeItem.path && !treeItem.path.find((id, index) => path[index] !== id);\n });\n};\n\nexport const getChildren = (\n graph: Graph,\n node: NavTreeItemGraphNode,\n filter?: NodeFilter,\n path: string[] = [],\n): NavTreeItemGraphNode[] => {\n return graph\n .nodes(node, { relation: 'outbound', filter })\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(nonNullable) as NavTreeItemGraphNode[];\n};\n\ntype FlattenedActions = Required<Pick<NavTreeItemNode, 'actions' | 'groupedActions'>>;\n\nexport const getActions = (graph: Graph, node: NavTreeItemGraphNode): FlattenedActions => {\n return graph.actions(node).reduce(\n (acc: FlattenedActions, arg) => {\n acc.actions.push(arg as unknown as NavTreeItemActions[number]);\n if (!isAction(arg)) {\n const actionGroup = graph.actions(arg);\n acc.groupedActions[arg.id] = actionGroup as unknown as NavTreeActionNode[];\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n );\n};\n\nexport const expandChildrenAndActions = (graph: Graph, node: Node) => {\n return Promise.all([expandChildren(graph, node), expandActions(graph, node)]);\n};\n\nexport const expandChildren = (graph: Graph, node: Node) => {\n return graph.expand(node, 'outbound');\n};\n\nexport const expandActions = (graph: Graph, node: Node) => {\n return Promise.all([graph.expand(node, 'outbound', ACTION_TYPE), graph.expand(node, 'outbound', ACTION_GROUP_TYPE)]);\n};\n\nfunction* navTreeItemVisitor(\n graph: Graph,\n node: NavTreeItemGraphNode,\n openItemIds: OpenItemIds,\n path: string[] = [],\n filter?: NodeFilter,\n): Generator<NavTreeItem> {\n const l0Children = getChildren(graph, node, filter, path);\n const { actions: l0Actions, groupedActions: l0GroupedActions } = getActions(graph, node);\n\n const stack: NavTreeItem[] = [\n {\n id: node.id,\n node,\n path: [],\n parentOf: (l0Children ?? []).map(({ id }) => id),\n actions: l0Actions,\n groupedActions: l0GroupedActions,\n },\n ];\n\n while (stack.length > 0) {\n const nextItem = stack.pop()!;\n if ((nextItem.path?.length ?? 0) > 0) {\n yield nextItem;\n }\n const { id, node, path } = nextItem;\n const children = getChildren(graph, node, filter, path);\n if (path?.length === 0 || (id ?? 'never') in openItemIds) {\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i] as NavTreeItemGraphNode;\n const childPath = path ? [...path, child.id] : [child.id];\n const childChildren = getChildren(graph, child, filter, childPath);\n const { actions: childActions, groupedActions: childGroupedActions } = getActions(graph, child);\n stack.push({\n id: Path.create(...childPath),\n node: child,\n path: childPath,\n ...((childChildren?.length ?? 0) > 0 && {\n parentOf: childChildren!.map(({ id }) => Path.create(...childPath, id)),\n }),\n actions: childActions,\n groupedActions: childGroupedActions,\n });\n }\n }\n }\n}\n\n/**\n * Get a reactive tree node from a graph node.\n */\nexport const treeItemsFromRootNode = (\n graph: Graph,\n rootNode: NavTreeItemGraphNode,\n openItemIds: OpenItemIds,\n path: string[] = [],\n filter?: NodeFilter,\n): NavTreeItem[] => {\n return Array.from(navTreeItemVisitor(graph, rootNode, openItemIds, path, filter));\n};\n\nexport const expandOpenGraphNodes = (graph: Graph, openItemIds: OpenItemIds) => {\n return Promise.all(\n Object.keys(openItemIds)\n .map((openItemId) => {\n const node = graph.findNode(Path.last(openItemId));\n return node && expandChildrenAndActions(graph, node as NavTreeItemGraphNode);\n })\n .filter(nonNullable),\n );\n};\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 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { useIntentDispatcher, useResolvePlugin } from '@dxos/app-framework';\nimport { ClientAction } from '@dxos/plugin-client/meta';\nimport { parseObservabilityPlugin } from '@dxos/plugin-observability';\nimport { useIdentity } from '@dxos/react-client/halo';\n\nimport { HaloButton } from './HaloButton';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin (ClientPlugin?).\nexport const NotchStart = () => {\n const identity = useIdentity();\n const observabilityPlugin = useResolvePlugin(parseObservabilityPlugin);\n const dispatch = useIntentDispatcher();\n return (\n <HaloButton\n size={8}\n identityKey={identity?.identityKey.toHex()}\n hue={identity?.profile?.data?.hue}\n emoji={identity?.profile?.data?.emoji}\n internal={observabilityPlugin?.provides?.observability?.group === 'dxos'}\n onClick={() => dispatch({ action: ClientAction.SHARE_IDENTITY })}\n />\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { ConnectionState, useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Avatar, type Size } from '@dxos/react-ui';\nimport { focusRing, mx } from '@dxos/react-ui-theme';\nimport { hexToFallback } from '@dxos/util';\n\nconst INTERNAL = 'https://avatars.githubusercontent.com/u/57182821';\n\nexport type HaloButtonProps = {\n size?: Size;\n identityKey?: string;\n hue?: string;\n emoji?: string;\n internal?: boolean;\n onClick?: () => void;\n};\n\nexport const HaloButton = (props: HaloButtonProps) => {\n const { onClick, identityKey, internal, size = 8 } = props;\n const fallbackValue = hexToFallback(identityKey ?? '0');\n const { swarm: connectionState } = useNetworkStatus();\n return (\n <button className={mx(focusRing, 'rounded grid place-items-center')} onClick={onClick}>\n <Avatar.Root\n size={size}\n variant='circle'\n status={connectionState === ConnectionState.OFFLINE ? 'error' : internal ? 'internal' : 'active'}\n hue={props.hue || fallbackValue.hue}\n >\n <Avatar.Frame data-testid='treeView.haloButton' data-joyride='welcome/halo'>\n {internal ? <Avatar.Image href={INTERNAL} /> : <Avatar.Fallback text={props.emoji || fallbackValue.emoji} />}\n </Avatar.Frame>\n </Avatar.Root>\n </button>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { MagnifyingGlass } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport { LayoutAction, useIntent } from '@dxos/app-framework';\nimport { Button, useTranslation } from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\nimport { NAVTREE_PLUGIN } from '../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatch } = useIntent();\n const { t } = useTranslation(NAVTREE_PLUGIN);\n return (\n <Button\n classNames='pis-3 pie-2 gap-2 mli-1 mbs-1 min-bs-0 bs-[--rail-action] justify-start'\n onClick={() =>\n dispatch({\n action: LayoutAction.SET_LAYOUT,\n data: { element: 'dialog', component: `${NAVTREE_PLUGIN}/Commands`, dialogBlockAlign: 'start' },\n })\n }\n >\n <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>\n <MagnifyingGlass className={getSize(5)} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { translations as navtreeTranslations } from '@dxos/react-ui-navtree';\n\nimport { NAVTREE_PLUGIN } from './meta';\n\nexport default [\n {\n 'en-US': {\n [NAVTREE_PLUGIN]: {\n 'open settings label': 'Settings',\n 'open commands label': 'Search commands',\n 'commands dialog title': 'Commands',\n 'command list input placeholder': 'Search for commands…',\n 'node actions menu invoker label': 'More options',\n 'warning title': 'WARNING',\n 'technology preview message': 'Composer is still in technology preview.',\n 'learn more label': 'Learn more',\n 'released message': 'This version released {{released}}.',\n 'see release label': 'See release on GitHub',\n 'powered by dxos message': 'Powered by <dxos>DXOS</dxos>',\n },\n },\n },\n ...navtreeTranslations,\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { NavTreePlugin } from './NavTreePlugin';\n\nexport default NavTreePlugin;\n\nexport * from './NavTreePlugin';\nexport * from './util';\n"],
5
+ "mappings": "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",
6
+ "names": ["MagnifyingGlass", "React", "resolvePlugin", "parseIntentPlugin", "LayoutAction", "parseGraphPlugin", "NavigationAction", "createExtension", "isAction", "isGraphNode", "Keyboard", "LocalStorageStore", "Path", "getHostPlatform", "DotOutline", "React", "useMemo", "useState", "useIntentDispatcher", "LayoutAction", "isActionGroup", "isAction", "Keyboard", "keySymbols", "useGraph", "Button", "Dialog", "useTranslation", "toLocalizedString", "SearchList", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "NAVTREE_PLUGIN", "setSelected", "useState", "dispatch", "useIntentDispatcher", "graph", "useGraph", "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", "Dialog", "Content", "classNames", "Title", "ns", "SearchList", "Root", "Input", "placeholder", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Icon", "icon", "DotOutline", "Item", "value", "key", "onSelect", "disabled", "LayoutAction", "SET_LAYOUT", "data", "element", "state", "setTimeout", "nodes", "relation", "caller", "KEY_BINDING", "testId", "size", "className", "mx", "span", "descriptionText", "keySymbols", "Close", "asChild", "Button", "variant", "DotsThreeVertical", "React", "Fragment", "getGraph", "Popover", "toLocalizedString", "useTranslation", "PlankHeading", "TREE_ITEM_MAIN_HEADING", "NavBarStart", "activeNode", "popoverAnchorId", "t", "useTranslation", "NAVTREE_PLUGIN", "ActionRoot", "id", "KEY_BINDING", "Popover", "Anchor", "Fragment", "Icon", "properties", "icon", "DotsThreeVertical", "graph", "getGraph", "actions", "label", "toLocalizedString", "menuTriggerLabel", "React", "PlankHeading", "ActionsMenu", "attendableId", "triggerLabel", "onAction", "action", "data", "node", "caller", "Label", "React", "useCallback", "useMemo", "NavigationAction", "LayoutAction", "Surface", "SLUG_PATH_SEPARATOR", "SLUG_COLLECTION_INDICATOR", "useIntentDispatcher", "getGraph", "isAction", "isActionLike", "ElevationProvider", "useMediaQuery", "useSidebars", "Path", "NavTree", "getLevel", "arrayMove", "ArrowSquareOut", "GearSix", "Warning", "formatDistance", "React", "SettingsAction", "useResolvePlugin", "parseNavigationPlugin", "useIntentDispatcher", "useConfig", "Button", "Tooltip", "Popover", "useSidebars", "useTranslation", "Link", "Message", "Trans", "useDefaultValue", "PlankHeading", "getSize", "mx", "buttonStyles", "repo", "NavTreeFooter", "props", "layoutPart", "useDefaultValue", "config", "useConfig", "t", "useTranslation", "NAVTREE_PLUGIN", "navigationSidebarOpen", "useSidebars", "dispatch", "useIntentDispatcher", "version", "timestamp", "commitHash", "values", "runtime", "app", "build", "navigationPlugin", "useResolvePlugin", "parseNavigationPlugin", "releaseUrl", "env", "DX_ENVIRONMENT", "previewUrl", "React", "div", "role", "className", "mx", "Popover", "Root", "Trigger", "asChild", "Button", "variant", "classNames", "tabIndex", "Portal", "Content", "side", "Message", "valence", "Title", "Warning", "weight", "span", "Body", "br", "Link", "href", "target", "rel", "ArrowSquareOut", "p", "released", "formatDistance", "Date", "addSuffix", "Trans", "i18nKey", "components", "dxos", "Arrow", "Tooltip", "data-testid", "data-joyride", "onClick", "action", "SettingsAction", "OPEN", "GearSix", "getSize", "meta", "id", "PlankHeading", "Controls", "capabilities", "incrementStart", "incrementEnd", "_type", "ACTION_TYPE", "ACTION_GROUP_TYPE", "isAction", "Path", "nonNullable", "getParent", "graph", "node", "path", "parentId", "length", "nodes", "relation", "find", "n", "id", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getTreeItemNode", "treeItems", "undefined", "treeItem", "index", "getChildren", "filter", "map", "nextPath", "includes", "nonNullable", "getActions", "reduce", "acc", "arg", "push", "isAction", "actionGroup", "groupedActions", "expandChildrenAndActions", "Promise", "all", "expandChildren", "expandActions", "expand", "ACTION_TYPE", "ACTION_GROUP_TYPE", "navTreeItemVisitor", "openItemIds", "l0Children", "l0Actions", "l0GroupedActions", "stack", "parentOf", "nextItem", "pop", "children", "i", "child", "childPath", "childChildren", "childActions", "childGroupedActions", "Path", "create", "treeItemsFromRootNode", "rootNode", "Array", "from", "expandOpenGraphNodes", "Object", "keys", "openItemId", "findNode", "last", "NODE_TYPE", "renderPresence", "node", "React", "Surface", "role", "data", "object", "NavTreeContainer", "root", "activeIds", "openItemIds", "onOpenItemIdsChange", "attended", "popoverAnchorId", "closeNavigationSidebar", "useSidebars", "NAVTREE_PLUGIN", "isLg", "useMediaQuery", "ssr", "dispatch", "useIntentDispatcher", "graph", "useMemo", "getGraph", "items", "treeItemsFromRootNode", "loadDescendents", "useCallback", "expandActions", "isActionLike", "expandChildren", "then", "Promise", "all", "getChildren", "flatMap", "child", "handleNavigate", "actions", "action", "NavigationAction", "OPEN", "activeParts", "comments", "main", "id", "complementary", "SLUG_PATH_SEPARATOR", "SLUG_COLLECTION_INDICATOR", "LayoutAction", "SCROLL_INTO_VIEW", "defaultAction", "find", "properties", "disposition", "isAction", "handleItemOpenChange", "path", "nextOpen", "_", "nextOpenItemIds", "resolveItemLevel", "overPosition", "activeId", "levelOffset", "nextItems", "arrayMove", "findIndex", "previousItem", "nextItem", "Math", "min", "getLevel", "max", "handleMove", "active", "over", "details", "floor", "delta", "x", "position", "item", "activeNode", "undefined", "operation", "overLevel", "previousLevel", "Path", "hasChild", "onRearrangeChildren", "resolveMigrationOperation", "parent", "getParent", "parentPath", "slice", "length", "siblings", "nextLevel", "handleDrop", "first", "activeParentId", "activeParent", "filter", "map", "onCopy", "onTransferEnd", "onTransferStart", "handleDragEnd", "ElevationProvider", "elevation", "div", "className", "limit", "NavTree", "current", "type", "open", "onNavigate", "onItemOpenChange", "onMove", "onDrop", "onDragEnd", "NavTreeFooter", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "NAVTREE_PLUGIN", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "React", "useIntentDispatcher", "useResolvePlugin", "ClientAction", "parseObservabilityPlugin", "useIdentity", "React", "ConnectionState", "useNetworkStatus", "Avatar", "focusRing", "mx", "hexToFallback", "INTERNAL", "HaloButton", "props", "onClick", "identityKey", "internal", "size", "fallbackValue", "hexToFallback", "swarm", "connectionState", "useNetworkStatus", "React", "button", "className", "mx", "focusRing", "Avatar", "Root", "variant", "status", "ConnectionState", "OFFLINE", "hue", "Frame", "data-testid", "data-joyride", "Image", "href", "Fallback", "text", "emoji", "NotchStart", "identity", "useIdentity", "observabilityPlugin", "useResolvePlugin", "parseObservabilityPlugin", "dispatch", "useIntentDispatcher", "React", "HaloButton", "size", "identityKey", "toHex", "hue", "profile", "data", "emoji", "internal", "provides", "observability", "group", "onClick", "action", "ClientAction", "SHARE_IDENTITY", "MagnifyingGlass", "React", "LayoutAction", "useIntent", "Button", "useTranslation", "getSize", "CommandsTrigger", "dispatch", "useIntent", "t", "useTranslation", "NAVTREE_PLUGIN", "React", "Button", "classNames", "onClick", "action", "LayoutAction", "SET_LAYOUT", "data", "element", "component", "dialogBlockAlign", "span", "className", "MagnifyingGlass", "getSize", "translations", "navtreeTranslations", "NAVTREE_PLUGIN", "navtreeTranslations", "NavTreePlugin", "state", "LocalStorageStore", "openItemIds", "root", "graphPlugin", "graph", "handleOpenItemIdsChange", "nextOpenItemIds", "values", "expandOpenGraphNodes", "meta", "ready", "plugins", "resolvePlugin", "parseGraphPlugin", "provides", "getChildren", "getActions", "prop", "key", "storageKey", "type", "json", "subscribeTraverse", "visitor", "node", "path", "shortcut", "properties", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "getHostPlatform", "includes", "macos", "windows", "undefined", "isAction", "Keyboard", "singleton", "getContext", "slice", "join", "bind", "handler", "data", "caller", "KEY_BINDING", "label", "initialize", "setCurrentContext", "id", "unload", "destroy", "metadata", "records", "NODE_TYPE", "parse", "item", "object", "surface", "component", "role", "NAVTREE_PLUGIN", "selected", "subject", "React", "CommandsDialogContent", "NavTreeContainer", "activeIds", "onOpenItemIdsChange", "attended", "popoverAnchorId", "NavTreeDocumentTitle", "isGraphNode", "activeNode", "NavBarStart", "disposition", "NotchStart", "CommandsTrigger", "intent", "resolver", "action", "NavigationAction", "EXPOSE", "getPath", "target", "Array", "isArray", "additionalOpenItems", "length", "reduce", "acc", "_", "index", "itemId", "Path", "create", "builder", "intentPlugin", "parseIntentPlugin", "createExtension", "filter", "actions", "dispatch", "LayoutAction", "SET_LAYOUT", "element", "dialogBlockAlign", "ns", "icon", "props", "MagnifyingGlass", "iconSymbol", "translations", "NavTreePlugin"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"packages/plugins/plugin-navtree/src/meta.ts":{"bytes":1024,"imports":[],"format":"esm"},"packages/plugins/plugin-navtree/src/components/CommandsDialog.tsx":{"bytes":16433,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavBarStart.tsx":{"bytes":5748,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavTreeFooter.tsx":{"bytes":18093,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"date-fns/formatDistance","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/util.ts":{"bytes":23279,"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx":{"bytes":48072,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/components/NavTreeFooter.tsx","kind":"import-statement","original":"./NavTreeFooter"},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-navtree/src/util.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx":{"bytes":2287,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/HaloButton.tsx":{"bytes":4991,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/mesh","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NotchStart.tsx":{"bytes":3865,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/meta","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability","kind":"import-statement","external":true},{"path":"@dxos/react-client/halo","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/components/HaloButton.tsx","kind":"import-statement","original":"./HaloButton"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/index.ts":{"bytes":953,"imports":[{"path":"packages/plugins/plugin-navtree/src/components/CommandsDialog.tsx","kind":"import-statement","original":"./CommandsDialog"},{"path":"packages/plugins/plugin-navtree/src/components/NavBarStart.tsx","kind":"import-statement","original":"./NavBarStart"},{"path":"packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx","kind":"import-statement","original":"./NavTreeContainer"},{"path":"packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx","kind":"import-statement","original":"./NavTreeDocumentTitle"},{"path":"packages/plugins/plugin-navtree/src/components/NotchStart.tsx","kind":"import-statement","original":"./NotchStart"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/CommandsTrigger.tsx":{"bytes":4096,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/translations.ts":{"bytes":3044,"imports":[{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx":{"bytes":32163,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-navtree/src/components/CommandsTrigger.tsx","kind":"import-statement","original":"./components/CommandsTrigger"},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-navtree/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/plugin-navtree/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/plugins/plugin-navtree/src/index.ts":{"bytes":875,"imports":[{"path":"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx","kind":"import-statement","original":"./NavTreePlugin"},{"path":"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx","kind":"import-statement","original":"./NavTreePlugin"},{"path":"packages/plugins/plugin-navtree/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-navtree/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":81943},"packages/plugins/plugin-navtree/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs","kind":"import-statement"},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"date-fns/formatDistance","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/meta","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability","kind":"import-statement","external":true},{"path":"@dxos/react-client/halo","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/mesh","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true}],"exports":["NavTreePlugin","default","expandActions","expandChildren","expandChildrenAndActions","expandOpenGraphNodes","getActions","getChildren","getParent","getPersistenceParent","getTreeItemNode","resolveMigrationOperation","sortActions","treeItemsFromRootNode"],"entryPoint":"packages/plugins/plugin-navtree/src/index.ts","inputs":{"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx":{"bytesInOutput":7568},"packages/plugins/plugin-navtree/src/components/CommandsDialog.tsx":{"bytesInOutput":4002},"packages/plugins/plugin-navtree/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-navtree/src/components/NavBarStart.tsx":{"bytesInOutput":1431},"packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx":{"bytesInOutput":10898},"packages/plugins/plugin-navtree/src/components/NavTreeFooter.tsx":{"bytesInOutput":5269},"packages/plugins/plugin-navtree/src/util.ts":{"bytesInOutput":4902},"packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx":{"bytesInOutput":441},"packages/plugins/plugin-navtree/src/components/NotchStart.tsx":{"bytesInOutput":879},"packages/plugins/plugin-navtree/src/components/HaloButton.tsx":{"bytesInOutput":1237},"packages/plugins/plugin-navtree/src/components/CommandsTrigger.tsx":{"bytesInOutput":1034},"packages/plugins/plugin-navtree/src/translations.ts":{"bytesInOutput":814},"packages/plugins/plugin-navtree/src/index.ts":{"bytesInOutput":33}},"bytes":39890},"packages/plugins/plugin-navtree/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-navtree/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs","kind":"import-statement"}],"exports":["KEY_BINDING","NAVTREE_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-navtree/src/meta.ts","inputs":{},"bytes":193},"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":444},"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs":{"imports":[],"exports":["KEY_BINDING","NAVTREE_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-navtree/src/meta.ts":{"bytesInOutput":125}},"bytes":277}}}
1
+ {"inputs":{"packages/plugins/plugin-navtree/src/meta.ts":{"bytes":1024,"imports":[],"format":"esm"},"packages/plugins/plugin-navtree/src/components/CommandsDialog.tsx":{"bytes":16879,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavBarStart.tsx":{"bytes":6009,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavTreeFooter.tsx":{"bytes":18077,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"date-fns/formatDistance","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/util.ts":{"bytes":23279,"imports":[{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx":{"bytes":48642,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/components/NavTreeFooter.tsx","kind":"import-statement","original":"./NavTreeFooter"},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"},{"path":"packages/plugins/plugin-navtree/src/util.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx":{"bytes":2287,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/HaloButton.tsx":{"bytes":4991,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/mesh","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/NotchStart.tsx":{"bytes":3865,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/meta","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability","kind":"import-statement","external":true},{"path":"@dxos/react-client/halo","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/components/HaloButton.tsx","kind":"import-statement","original":"./HaloButton"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/index.ts":{"bytes":953,"imports":[{"path":"packages/plugins/plugin-navtree/src/components/CommandsDialog.tsx","kind":"import-statement","original":"./CommandsDialog"},{"path":"packages/plugins/plugin-navtree/src/components/NavBarStart.tsx","kind":"import-statement","original":"./NavBarStart"},{"path":"packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx","kind":"import-statement","original":"./NavTreeContainer"},{"path":"packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx","kind":"import-statement","original":"./NavTreeDocumentTitle"},{"path":"packages/plugins/plugin-navtree/src/components/NotchStart.tsx","kind":"import-statement","original":"./NotchStart"}],"format":"esm"},"packages/plugins/plugin-navtree/src/components/CommandsTrigger.tsx":{"bytes":4096,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"../meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/translations.ts":{"bytes":3044,"imports":[{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"./meta"}],"format":"esm"},"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx":{"bytes":32716,"imports":[{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"packages/plugins/plugin-navtree/src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"packages/plugins/plugin-navtree/src/components/CommandsTrigger.tsx","kind":"import-statement","original":"./components/CommandsTrigger"},{"path":"packages/plugins/plugin-navtree/src/meta.ts","kind":"import-statement","original":"./meta"},{"path":"packages/plugins/plugin-navtree/src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"packages/plugins/plugin-navtree/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"packages/plugins/plugin-navtree/src/index.ts":{"bytes":875,"imports":[{"path":"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx","kind":"import-statement","original":"./NavTreePlugin"},{"path":"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx","kind":"import-statement","original":"./NavTreePlugin"},{"path":"packages/plugins/plugin-navtree/src/util.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"packages/plugins/plugin-navtree/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":82848},"packages/plugins/plugin-navtree/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs","kind":"import-statement"},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/local-storage","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/keyboard","kind":"import-statement","external":true},{"path":"@dxos/plugin-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-searchlist","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"date-fns/formatDistance","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-client","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-deck","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/app-graph","kind":"import-statement","external":true},{"path":"@dxos/react-ui-mosaic","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/plugin-client/meta","kind":"import-statement","external":true},{"path":"@dxos/plugin-observability","kind":"import-statement","external":true},{"path":"@dxos/react-client/halo","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-client/mesh","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/util","kind":"import-statement","external":true},{"path":"@phosphor-icons/react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/app-framework","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/react-ui-theme","kind":"import-statement","external":true},{"path":"@dxos/react-ui-navtree","kind":"import-statement","external":true}],"exports":["NavTreePlugin","default","expandActions","expandChildren","expandChildrenAndActions","expandOpenGraphNodes","getActions","getChildren","getParent","getPersistenceParent","getTreeItemNode","resolveMigrationOperation","sortActions","treeItemsFromRootNode"],"entryPoint":"packages/plugins/plugin-navtree/src/index.ts","inputs":{"packages/plugins/plugin-navtree/src/NavTreePlugin.tsx":{"bytesInOutput":7751},"packages/plugins/plugin-navtree/src/components/CommandsDialog.tsx":{"bytesInOutput":4128},"packages/plugins/plugin-navtree/src/components/index.ts":{"bytesInOutput":0},"packages/plugins/plugin-navtree/src/components/NavBarStart.tsx":{"bytesInOutput":1488},"packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx":{"bytesInOutput":11026},"packages/plugins/plugin-navtree/src/components/NavTreeFooter.tsx":{"bytesInOutput":5263},"packages/plugins/plugin-navtree/src/util.ts":{"bytesInOutput":4902},"packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx":{"bytesInOutput":441},"packages/plugins/plugin-navtree/src/components/NotchStart.tsx":{"bytesInOutput":879},"packages/plugins/plugin-navtree/src/components/HaloButton.tsx":{"bytesInOutput":1237},"packages/plugins/plugin-navtree/src/components/CommandsTrigger.tsx":{"bytesInOutput":1034},"packages/plugins/plugin-navtree/src/translations.ts":{"bytesInOutput":814},"packages/plugins/plugin-navtree/src/index.ts":{"bytesInOutput":33}},"bytes":40378},"packages/plugins/plugin-navtree/dist/lib/browser/meta.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"packages/plugins/plugin-navtree/dist/lib/browser/meta.mjs":{"imports":[{"path":"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs","kind":"import-statement"}],"exports":["KEY_BINDING","NAVTREE_PLUGIN","default"],"entryPoint":"packages/plugins/plugin-navtree/src/meta.ts","inputs":{},"bytes":193},"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":444},"packages/plugins/plugin-navtree/dist/lib/browser/chunk-U7MTKDFQ.mjs":{"imports":[],"exports":["KEY_BINDING","NAVTREE_PLUGIN","meta_default"],"inputs":{"packages/plugins/plugin-navtree/src/meta.ts":{"bytesInOutput":125}},"bytes":277}}}
@@ -1 +1 @@
1
- {"version":3,"file":"NavTreePlugin.d.ts","sourceRoot":"","sources":["../../../src/NavTreePlugin.tsx"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAEzB,KAAK,sBAAsB,EAM5B,MAAM,qBAAqB,CAAC;AAqB7B,MAAM,MAAM,qBAAqB,GAAG,eAAe,GACjD,uBAAuB,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,sBAAsB,CAAC;AAIzB,eAAO,MAAM,aAAa,QAAO,gBAAgB,CAAC,qBAAqB,CAkNtE,CAAC"}
1
+ {"version":3,"file":"NavTreePlugin.d.ts","sourceRoot":"","sources":["../../../src/NavTreePlugin.tsx"],"names":[],"mappings":"AAOA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAEzB,KAAK,sBAAsB,EAM5B,MAAM,qBAAqB,CAAC;AAqB7B,MAAM,MAAM,qBAAqB,GAAG,eAAe,GACjD,uBAAuB,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,sBAAsB,CAAC;AAIzB,eAAO,MAAM,aAAa,QAAO,gBAAgB,CAAC,qBAAqB,CAmNtE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CommandsDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/CommandsDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAcjD,eAAO,MAAM,qBAAqB,0BAA2B;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,sBA6FjF,CAAC"}
1
+ {"version":3,"file":"CommandsDialog.d.ts","sourceRoot":"","sources":["../../../../src/components/CommandsDialog.tsx"],"names":[],"mappings":"AAKA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAcjD,eAAO,MAAM,qBAAqB,0BAA2B;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,sBA8FjF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavBarStart.d.ts","sourceRoot":"","sources":["../../../../src/components/NavBarStart.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAQtD,eAAO,MAAM,WAAW,oCAAqC;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,sBA+B1G,CAAC"}
1
+ {"version":3,"file":"NavBarStart.d.ts","sourceRoot":"","sources":["../../../../src/components/NavBarStart.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAQtD,eAAO,MAAM,WAAW,oCAAqC;IAAE,UAAU,EAAE,IAAI,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,sBAgC1G,CAAC"}
@@ -6,7 +6,7 @@ export declare const NavTreeContainer: ({ root, activeIds, openItemIds, onOpenIt
6
6
  activeIds: Set<string>;
7
7
  openItemIds: Record<string, true>;
8
8
  onOpenItemIdsChange: (nextOpenItemIds: Record<string, true>) => void;
9
- attended: string[];
9
+ attended: Set<string>;
10
10
  popoverAnchorId?: string;
11
11
  }) => React.JSX.Element;
12
12
  //# sourceMappingURL=NavTreeContainer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"NavTreeContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/NavTreeContainer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAmBpE,OAAO,EAML,KAAK,oBAAoB,EAG1B,MAAM,SAAS,CAAC;AAGjB,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAM/C,eAAO,MAAM,gBAAgB,sFAO1B;IACD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,mBAAmB,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;IAErE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,sBAyTA,CAAC"}
1
+ {"version":3,"file":"NavTreeContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/NavTreeContainer.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA+C,MAAM,OAAO,CAAC;AA0BpE,OAAO,EAML,KAAK,oBAAoB,EAG1B,MAAM,SAAS,CAAC;AAGjB,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAM/C,eAAO,MAAM,gBAAgB,sFAO1B;IACD,IAAI,EAAE,oBAAoB,CAAC;IAC3B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAClC,mBAAmB,EAAE,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC;IACrE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,sBA2TA,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Graph.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/Graph.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAGrB,OAAO,KAA4B,MAAM,OAAO,CAAC;;;qRAuBK,GAAG,CAAC,OAAO;;;AAwGjE,wBAIE;AAEF,eAAO,MAAM,OAAO;wBACE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAMxC,CAAC"}
1
+ {"version":3,"file":"Graph.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/Graph.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAGrB,OAAO,KAA4B,MAAM,OAAO,CAAC;;;;;;AA+HjD,wBAIE;AAEF,eAAO,MAAM,OAAO;wBACE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE;CAMxC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-navtree",
3
- "version": "0.6.12-staging.e11e696",
3
+ "version": "0.6.12",
4
4
  "description": "DXOS Surface plugin for a tree view visualization of the graph.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -31,25 +31,25 @@
31
31
  "dependencies": {
32
32
  "@preact/signals-core": "^1.6.0",
33
33
  "date-fns": "^3.3.1",
34
- "@dxos/app-framework": "0.6.12-staging.e11e696",
35
- "@dxos/app-graph": "0.6.12-staging.e11e696",
36
- "@dxos/debug": "0.6.12-staging.e11e696",
37
- "@dxos/echo-schema": "0.6.12-staging.e11e696",
38
- "@dxos/keyboard": "0.6.12-staging.e11e696",
39
- "@dxos/async": "0.6.12-staging.e11e696",
40
- "@dxos/local-storage": "0.6.12-staging.e11e696",
41
- "@dxos/plugin-client": "0.6.12-staging.e11e696",
42
- "@dxos/plugin-graph": "0.6.12-staging.e11e696",
43
- "@dxos/log": "0.6.12-staging.e11e696",
44
- "@dxos/plugin-theme": "0.6.12-staging.e11e696",
45
- "@dxos/protocols": "0.6.12-staging.e11e696",
46
- "@dxos/react-client": "0.6.12-staging.e11e696",
47
- "@dxos/react-ui-mosaic": "0.6.12-staging.e11e696",
48
- "@dxos/plugin-observability": "0.6.12-staging.e11e696",
49
- "@dxos/react-ui-deck": "0.6.12-staging.e11e696",
50
- "@dxos/react-ui-navtree": "0.6.12-staging.e11e696",
51
- "@dxos/react-ui-searchlist": "0.6.12-staging.e11e696",
52
- "@dxos/util": "0.6.12-staging.e11e696"
34
+ "@dxos/app-framework": "0.6.12",
35
+ "@dxos/async": "0.6.12",
36
+ "@dxos/debug": "0.6.12",
37
+ "@dxos/echo-schema": "0.6.12",
38
+ "@dxos/app-graph": "0.6.12",
39
+ "@dxos/local-storage": "0.6.12",
40
+ "@dxos/log": "0.6.12",
41
+ "@dxos/keyboard": "0.6.12",
42
+ "@dxos/plugin-client": "0.6.12",
43
+ "@dxos/plugin-graph": "0.6.12",
44
+ "@dxos/plugin-theme": "0.6.12",
45
+ "@dxos/plugin-observability": "0.6.12",
46
+ "@dxos/protocols": "0.6.12",
47
+ "@dxos/react-client": "0.6.12",
48
+ "@dxos/react-ui-deck": "0.6.12",
49
+ "@dxos/react-ui-mosaic": "0.6.12",
50
+ "@dxos/react-ui-navtree": "0.6.12",
51
+ "@dxos/react-ui-searchlist": "0.6.12",
52
+ "@dxos/util": "0.6.12"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@phosphor-icons/react": "^2.1.5",
@@ -57,19 +57,19 @@
57
57
  "@types/react-dom": "~18.2.0",
58
58
  "react": "~18.2.0",
59
59
  "react-dom": "~18.2.0",
60
- "vite": "5.4.7",
61
- "@dxos/echo-signals": "0.6.12-staging.e11e696",
62
- "@dxos/react-ui": "0.6.12-staging.e11e696",
63
- "@dxos/random": "0.6.12-staging.e11e696",
64
- "@dxos/storybook-utils": "0.6.12-staging.e11e696",
65
- "@dxos/react-ui-theme": "0.6.12-staging.e11e696"
60
+ "vite": "^5.3.4",
61
+ "@dxos/echo-signals": "0.6.12",
62
+ "@dxos/random": "0.6.12",
63
+ "@dxos/react-ui": "0.6.12",
64
+ "@dxos/storybook-utils": "0.6.12",
65
+ "@dxos/react-ui-theme": "0.6.12"
66
66
  },
67
67
  "peerDependencies": {
68
68
  "@phosphor-icons/react": "^2.1.5",
69
- "react": "~18.2.0",
70
- "react-dom": "~18.2.0",
71
- "@dxos/react-ui": "0.6.12-staging.e11e696",
72
- "@dxos/react-ui-theme": "0.6.12-staging.e11e696"
69
+ "react": "^18.0.0",
70
+ "react-dom": "^18.0.0",
71
+ "@dxos/react-ui": "0.6.12",
72
+ "@dxos/react-ui-theme": "0.6.12"
73
73
  },
74
74
  "publishConfig": {
75
75
  "access": "public"
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { MagnifyingGlass, type IconProps } from '@phosphor-icons/react';
5
6
  import React from 'react';
6
7
 
7
8
  import {
@@ -154,7 +155,7 @@ export const NavTreePlugin = (): PluginDefinition<NavTreePluginProvides> => {
154
155
  activeIds={data.activeIds as Set<string>}
155
156
  openItemIds={state.values.openItemIds}
156
157
  onOpenItemIdsChange={handleOpenItemIdsChange}
157
- attended={data.attended as string[]}
158
+ attended={data.attended as Set<string>}
158
159
  popoverAnchorId={data.popoverAnchorId as string}
159
160
  />
160
161
  );
@@ -242,7 +243,8 @@ export const NavTreePlugin = (): PluginDefinition<NavTreePluginProvides> => {
242
243
  },
243
244
  properties: {
244
245
  label: ['open commands label', { ns: NAVTREE_PLUGIN }],
245
- icon: 'ph--magnifying-glass--regular',
246
+ icon: (props: IconProps) => <MagnifyingGlass {...props} />,
247
+ iconSymbol: 'ph--magnifying-glass--regular',
246
248
  keyBinding: {
247
249
  macos: 'meta+k',
248
250
  windows: 'ctrl+k',
@@ -2,13 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { DotOutline } from '@phosphor-icons/react';
5
6
  import React, { useMemo, useState } from 'react';
6
7
 
7
8
  import { useIntentDispatcher, LayoutAction } from '@dxos/app-framework';
8
9
  import { type ActionLike, isActionGroup, isAction } from '@dxos/app-graph';
9
10
  import { Keyboard, keySymbols } from '@dxos/keyboard';
10
11
  import { useGraph } from '@dxos/plugin-graph';
11
- import { Button, Dialog, Icon, useTranslation, toLocalizedString } from '@dxos/react-ui';
12
+ import { Button, Dialog, useTranslation, toLocalizedString } from '@dxos/react-ui';
12
13
  import { SearchList } from '@dxos/react-ui-searchlist';
13
14
  import { descriptionText, mx } from '@dxos/react-ui-theme';
14
15
  import { getHostPlatform } from '@dxos/util';
@@ -69,6 +70,7 @@ export const CommandsDialogContent = ({ selected: initial }: { selected?: string
69
70
  typeof action.properties.keyBinding === 'string'
70
71
  ? action.properties.keyBinding
71
72
  : action.properties.keyBinding?.[getHostPlatform()];
73
+ const Icon = action.properties.icon ?? DotOutline;
72
74
  return (
73
75
  <SearchList.Item
74
76
  value={label}
@@ -93,7 +95,7 @@ export const CommandsDialogContent = ({ selected: initial }: { selected?: string
93
95
  disabled={action.properties.disabled}
94
96
  {...(action.properties?.testId && { 'data-testid': action.properties.testId })}
95
97
  >
96
- <Icon icon={action.properties.icon} size={4} />
98
+ <Icon size={4} className={mx(!action.properties.icon && 'invisible')} />
97
99
  <span className='grow truncate'>{label}</span>
98
100
  {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}
99
101
  </SearchList.Item>
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { DotsThreeVertical } from '@phosphor-icons/react';
5
6
  import React, { Fragment } from 'react';
6
7
 
7
8
  import { getGraph, type Node } from '@dxos/app-graph';
@@ -21,6 +22,7 @@ export const NavBarStart = ({ activeNode, popoverAnchorId }: { activeNode: Node;
21
22
  ? Popover.Anchor
22
23
  : Fragment;
23
24
 
25
+ const Icon = activeNode.properties?.icon ?? DotsThreeVertical;
24
26
  const graph = getGraph(activeNode);
25
27
  const actions = graph.actions(activeNode);
26
28
  const label = toLocalizedString(activeNode.properties?.label, t);
@@ -31,7 +33,7 @@ export const NavBarStart = ({ activeNode, popoverAnchorId }: { activeNode: Node;
31
33
  <>
32
34
  <ActionRoot>
33
35
  <PlankHeading.ActionsMenu
34
- icon={activeNode.properties?.icon ?? 'ph--dots-three-vertical--regular'}
36
+ Icon={Icon}
35
37
  attendableId={activeNode.id}
36
38
  triggerLabel={menuTriggerLabel}
37
39
  actions={actions}
@@ -4,10 +4,17 @@
4
4
 
5
5
  import React, { type ReactNode, useCallback, useMemo } from 'react';
6
6
 
7
- import { NavigationAction, LayoutAction, Surface, useIntentDispatcher } from '@dxos/app-framework';
7
+ import {
8
+ NavigationAction,
9
+ LayoutAction,
10
+ Surface,
11
+ SLUG_PATH_SEPARATOR,
12
+ SLUG_COLLECTION_INDICATOR,
13
+ useIntentDispatcher,
14
+ } from '@dxos/app-framework';
8
15
  import { getGraph, isAction, isActionLike } from '@dxos/app-graph';
9
16
  import { ElevationProvider, useMediaQuery, useSidebars } from '@dxos/react-ui';
10
- import { type MosaicDropEvent, type MosaicMoveEvent, Mosaic, Path } from '@dxos/react-ui-mosaic';
17
+ import { type MosaicDropEvent, type MosaicMoveEvent, Path } from '@dxos/react-ui-mosaic';
11
18
  import {
12
19
  NavTree,
13
20
  type NavTreeItemNode,
@@ -51,8 +58,7 @@ export const NavTreeContainer = ({
51
58
  activeIds: Set<string>;
52
59
  openItemIds: Record<string, true>;
53
60
  onOpenItemIdsChange: (nextOpenItemIds: Record<string, true>) => void;
54
- // TODO(wittjosiah): Use attention context directly?
55
- attended: string[];
61
+ attended: Set<string>;
56
62
  popoverAnchorId?: string;
57
63
  }) => {
58
64
  const { closeNavigationSidebar } = useSidebars(NAVTREE_PLUGIN);
@@ -90,9 +96,14 @@ export const NavTreeContainer = ({
90
96
  await dispatch({
91
97
  action: NavigationAction.OPEN,
92
98
  data: {
93
- activeParts: {
94
- main: [node.id],
95
- },
99
+ activeParts: node.data?.comments
100
+ ? {
101
+ main: [node.id],
102
+ complementary: [`${node.id}${SLUG_PATH_SEPARATOR}comments${SLUG_COLLECTION_INDICATOR}`],
103
+ }
104
+ : {
105
+ main: [node.id],
106
+ },
96
107
  },
97
108
  });
98
109
 
@@ -334,37 +345,34 @@ export const NavTreeContainer = ({
334
345
  }, [onOpenItemIdsChange, openItemIds]);
335
346
 
336
347
  return (
337
- <Mosaic.Root>
338
- <Mosaic.DragOverlay />
339
- <ElevationProvider elevation='chrome'>
340
- <div
341
- role='none'
342
- className='bs-full overflow-hidden row-span-3 grid grid-cols-1 grid-rows-[min-content_1fr_min-content]'
343
- >
344
- <Surface role='search-input' limit={1} />
345
- {/* TODO(thure): what gives this an inline `overflow: initial`? */}
346
- <div role='none' className='!overflow-y-auto'>
347
- <NavTree
348
- id={root.id}
349
- items={items}
350
- current={activeIds}
351
- attended={attended}
352
- type={NODE_TYPE}
353
- open={openItemIds}
354
- onNavigate={handleNavigate}
355
- onItemOpenChange={handleItemOpenChange}
356
- onMove={handleMove}
357
- onDrop={handleDrop}
358
- onDragEnd={handleDragEnd}
359
- popoverAnchorId={popoverAnchorId}
360
- renderPresence={renderPresence}
361
- resolveItemLevel={resolveItemLevel}
362
- loadDescendents={loadDescendents}
363
- />
364
- </div>
365
- <NavTreeFooter />
348
+ <ElevationProvider elevation='chrome'>
349
+ <div
350
+ role='none'
351
+ className='bs-full overflow-hidden row-span-3 grid grid-cols-1 grid-rows-[min-content_1fr_min-content]'
352
+ >
353
+ <Surface role='search-input' limit={1} />
354
+ {/* TODO(thure): what gives this an inline `overflow: initial`? */}
355
+ <div role='none' className='!overflow-y-auto'>
356
+ <NavTree
357
+ id={root.id}
358
+ items={items}
359
+ current={activeIds}
360
+ attended={attended}
361
+ type={NODE_TYPE}
362
+ open={openItemIds}
363
+ onNavigate={handleNavigate}
364
+ onItemOpenChange={handleItemOpenChange}
365
+ onMove={handleMove}
366
+ onDrop={handleDrop}
367
+ onDragEnd={handleDragEnd}
368
+ popoverAnchorId={popoverAnchorId}
369
+ renderPresence={renderPresence}
370
+ resolveItemLevel={resolveItemLevel}
371
+ loadDescendents={loadDescendents}
372
+ />
366
373
  </div>
367
- </ElevationProvider>
368
- </Mosaic.Root>
374
+ <NavTreeFooter />
375
+ </div>
376
+ </ElevationProvider>
369
377
  );
370
378
  };
@@ -35,7 +35,7 @@ const buttonStyles = 'pli-1.5 text-xs font-normal';
35
35
  const repo = 'https://github.com/dxos/dxos';
36
36
 
37
37
  export const NavTreeFooter = (props: { layoutPart?: LayoutPart }) => {
38
- const layoutPart = useDefaultValue(props.layoutPart, () => 'sidebar');
38
+ const layoutPart = useDefaultValue(props.layoutPart, 'sidebar');
39
39
  const config = useConfig();
40
40
  const { t } = useTranslation(NAVTREE_PLUGIN);
41
41
  const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);
@@ -6,7 +6,7 @@ import { CaretRight, Circle, File, Folder, type Icon, type IconProps, Plus, User
6
6
  import React, { type HTMLAttributes, type PropsWithChildren } from 'react';
7
7
 
8
8
  import { type ClassNameValue, type Size } from '@dxos/react-ui';
9
- import { getSize, mx } from '@dxos/react-ui-theme';
9
+ import { mx } from '@dxos/react-ui-theme';
10
10
 
11
11
  // TODO(burdon): Rounded border if first/last.
12
12
  const styles = {
@@ -29,7 +29,7 @@ export const IconButton = ({
29
29
  // TODO(burdon): Density aware.
30
30
  return (
31
31
  <div className={mx('flex w-6 h-6 items-center justify-center select-none', classNames)} onClick={onClick}>
32
- <Icon className={mx('cursor-pointer', getSize(size))} {...props} />
32
+ <Icon size={size} className='cursor-pointer' {...props} />
33
33
  </div>
34
34
  );
35
35
  };
@@ -8,7 +8,7 @@ import { batch } from '@preact/signals-core';
8
8
  import React, { useMemo, useState } from 'react';
9
9
 
10
10
  import { Graph } from '@dxos/app-graph';
11
- import { registerSignalsRuntime } from '@dxos/echo-signals/react';
11
+ import { registerSignalRuntime } from '@dxos/echo-signals/react';
12
12
  import { faker } from '@dxos/random';
13
13
  import { Treegrid } from '@dxos/react-ui';
14
14
  import { Mosaic, Path, type MosaicDropEvent, type MosaicMoveEvent, type MosaicOperation } from '@dxos/react-ui-mosaic';
@@ -19,7 +19,7 @@ import { arrayMove } from '@dxos/util';
19
19
  import { type NavTreeItemGraphNode, treeItemsFromRootNode } from '../util';
20
20
 
21
21
  faker.seed(3);
22
- registerSignalsRuntime();
22
+ registerSignalRuntime();
23
23
 
24
24
  const createGraph = () => {
25
25
  const graph = new Graph();