@dxos/plugin-navtree 0.6.13-main.548ca8d → 0.6.13-staging.1e988a3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{chunk-PSVCPL4T.mjs → chunk-U7MTKDFQ.mjs} +1 -1
- package/dist/lib/browser/chunk-U7MTKDFQ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +36 -19
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/meta.mjs +1 -1
- package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
- package/dist/types/src/components/CommandsDialog.d.ts.map +1 -1
- package/dist/types/src/components/NavBarStart.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeContainer.d.ts +1 -1
- package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/stories/Graph.stories.d.ts.map +1 -1
- package/package.json +30 -30
- package/src/NavTreePlugin.tsx +4 -2
- package/src/components/CommandsDialog.tsx +4 -2
- package/src/components/NavBarStart.tsx +4 -2
- package/src/components/NavTreeContainer.tsx +48 -38
- package/src/components/NavTreeFooter.tsx +1 -1
- package/src/experimental/Tree.tsx +2 -2
- package/src/meta.ts +1 -3
- package/src/stories/Graph.stories.tsx +2 -2
- package/dist/lib/browser/chunk-PSVCPL4T.mjs.map +0 -7
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport const NAVTREE_PLUGIN = 'dxos.org/plugin/navtree';\n\n// TODO(wittjosiah): Factor out.\nexport const KEY_BINDING = 'KeyBinding';\n\nexport default {\n id: NAVTREE_PLUGIN,\n};\n"],
|
|
5
|
+
"mappings": ";AAIO,IAAMA,iBAAiB;AAGvB,IAAMC,cAAc;AAE3B,IAAA,eAAe;EACbC,IAAIF;AACN;",
|
|
6
|
+
"names": ["NAVTREE_PLUGIN", "KEY_BINDING", "id"]
|
|
7
|
+
}
|
|
@@ -2,11 +2,12 @@ import {
|
|
|
2
2
|
KEY_BINDING,
|
|
3
3
|
NAVTREE_PLUGIN,
|
|
4
4
|
meta_default
|
|
5
|
-
} from "./chunk-
|
|
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
|
-
import { resolvePlugin, parseIntentPlugin, LayoutAction as
|
|
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";
|
|
11
12
|
import { Keyboard as Keyboard2 } from "@dxos/keyboard";
|
|
12
13
|
import { LocalStorageStore } from "@dxos/local-storage";
|
|
@@ -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,
|
|
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
|
-
|
|
104
|
-
|
|
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,17 +130,16 @@ 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
|
-
|
|
139
|
+
Icon,
|
|
135
140
|
attendableId: activeNode.id,
|
|
136
141
|
triggerLabel: menuTriggerLabel,
|
|
137
|
-
actions
|
|
138
|
-
actions
|
|
139
|
-
],
|
|
142
|
+
actions,
|
|
140
143
|
onAction: (action) => typeof action.data === "function" && action.data({
|
|
141
144
|
node: action,
|
|
142
145
|
caller: TREE_ITEM_MAIN_HEADING
|
|
@@ -148,10 +151,10 @@ var NavBarStart = ({ activeNode, popoverAnchorId }) => {
|
|
|
148
151
|
|
|
149
152
|
// packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx
|
|
150
153
|
import React4, { useCallback, useMemo as useMemo2 } from "react";
|
|
151
|
-
import { NavigationAction, 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";
|
|
152
155
|
import { getGraph as getGraph2, isAction as isAction3, isActionLike } from "@dxos/app-graph";
|
|
153
156
|
import { ElevationProvider, useMediaQuery, useSidebars as useSidebars2 } from "@dxos/react-ui";
|
|
154
|
-
import {
|
|
157
|
+
import { Path as Path2 } from "@dxos/react-ui-mosaic";
|
|
155
158
|
import { NavTree, getLevel } from "@dxos/react-ui-navtree";
|
|
156
159
|
import { arrayMove } from "@dxos/util";
|
|
157
160
|
|
|
@@ -167,7 +170,7 @@ import { getSize, mx as mx2 } from "@dxos/react-ui-theme";
|
|
|
167
170
|
var buttonStyles = "pli-1.5 text-xs font-normal";
|
|
168
171
|
var repo = "https://github.com/dxos/dxos";
|
|
169
172
|
var NavTreeFooter = (props) => {
|
|
170
|
-
const layoutPart = useDefaultValue(props.layoutPart,
|
|
173
|
+
const layoutPart = useDefaultValue(props.layoutPart, "sidebar");
|
|
171
174
|
const config = useConfig();
|
|
172
175
|
const { t } = useTranslation3(NAVTREE_PLUGIN);
|
|
173
176
|
const { navigationSidebarOpen } = useSidebars(NAVTREE_PLUGIN);
|
|
@@ -448,13 +451,26 @@ var NavTreeContainer = ({ root, activeIds, openItemIds, onOpenItemIdsChange, att
|
|
|
448
451
|
await dispatch({
|
|
449
452
|
action: NavigationAction.OPEN,
|
|
450
453
|
data: {
|
|
451
|
-
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
|
+
} : {
|
|
452
462
|
main: [
|
|
453
463
|
node.id
|
|
454
464
|
]
|
|
455
465
|
}
|
|
456
466
|
}
|
|
457
467
|
});
|
|
468
|
+
await dispatch({
|
|
469
|
+
action: LayoutAction2.SCROLL_INTO_VIEW,
|
|
470
|
+
data: {
|
|
471
|
+
id: node.id
|
|
472
|
+
}
|
|
473
|
+
});
|
|
458
474
|
const defaultAction = actions?.find((action) => action.properties?.disposition === "default");
|
|
459
475
|
if (isAction3(defaultAction)) {
|
|
460
476
|
void defaultAction.data();
|
|
@@ -664,7 +680,7 @@ var NavTreeContainer = ({ root, activeIds, openItemIds, onOpenItemIdsChange, att
|
|
|
664
680
|
onOpenItemIdsChange,
|
|
665
681
|
openItemIds
|
|
666
682
|
]);
|
|
667
|
-
return /* @__PURE__ */ React4.createElement(
|
|
683
|
+
return /* @__PURE__ */ React4.createElement(ElevationProvider, {
|
|
668
684
|
elevation: "chrome"
|
|
669
685
|
}, /* @__PURE__ */ React4.createElement("div", {
|
|
670
686
|
role: "none",
|
|
@@ -691,7 +707,7 @@ var NavTreeContainer = ({ root, activeIds, openItemIds, onOpenItemIdsChange, att
|
|
|
691
707
|
renderPresence,
|
|
692
708
|
resolveItemLevel,
|
|
693
709
|
loadDescendents
|
|
694
|
-
})), /* @__PURE__ */ React4.createElement(NavTreeFooter, null)))
|
|
710
|
+
})), /* @__PURE__ */ React4.createElement(NavTreeFooter, null)));
|
|
695
711
|
};
|
|
696
712
|
|
|
697
713
|
// packages/plugins/plugin-navtree/src/components/NavTreeDocumentTitle.tsx
|
|
@@ -765,7 +781,7 @@ var NotchStart = () => {
|
|
|
765
781
|
// packages/plugins/plugin-navtree/src/components/CommandsTrigger.tsx
|
|
766
782
|
import { MagnifyingGlass } from "@phosphor-icons/react";
|
|
767
783
|
import React7 from "react";
|
|
768
|
-
import { LayoutAction as
|
|
784
|
+
import { LayoutAction as LayoutAction3, useIntent } from "@dxos/app-framework";
|
|
769
785
|
import { Button as Button3, useTranslation as useTranslation5 } from "@dxos/react-ui";
|
|
770
786
|
import { getSize as getSize2 } from "@dxos/react-ui-theme";
|
|
771
787
|
var CommandsTrigger = () => {
|
|
@@ -774,7 +790,7 @@ var CommandsTrigger = () => {
|
|
|
774
790
|
return /* @__PURE__ */ React7.createElement(Button3, {
|
|
775
791
|
classNames: "pis-3 pie-2 gap-2 mli-1 mbs-1 min-bs-0 bs-[--rail-action] justify-start",
|
|
776
792
|
onClick: () => dispatch({
|
|
777
|
-
action:
|
|
793
|
+
action: LayoutAction3.SET_LAYOUT,
|
|
778
794
|
data: {
|
|
779
795
|
element: "dialog",
|
|
780
796
|
component: `${NAVTREE_PLUGIN}/Commands`,
|
|
@@ -988,7 +1004,7 @@ var NavTreePlugin = () => {
|
|
|
988
1004
|
id: "dxos.org/plugin/navtree/open-commands",
|
|
989
1005
|
data: async () => {
|
|
990
1006
|
await intentPlugin?.provides.intent.dispatch({
|
|
991
|
-
action:
|
|
1007
|
+
action: LayoutAction4.SET_LAYOUT,
|
|
992
1008
|
data: {
|
|
993
1009
|
element: "dialog",
|
|
994
1010
|
component: `${NAVTREE_PLUGIN}/Commands`,
|
|
@@ -1003,7 +1019,8 @@ var NavTreePlugin = () => {
|
|
|
1003
1019
|
ns: NAVTREE_PLUGIN
|
|
1004
1020
|
}
|
|
1005
1021
|
],
|
|
1006
|
-
icon:
|
|
1022
|
+
icon: (props) => /* @__PURE__ */ React8.createElement(MagnifyingGlass2, props),
|
|
1023
|
+
iconSymbol: "ph--magnifying-glass--regular",
|
|
1007
1024
|
keyBinding: {
|
|
1008
1025
|
macos: "meta+k",
|
|
1009
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, 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 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", "
|
|
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": ";;;;;;;AAIA,SAASA,mBAAAA,wBAAuC;AAChD,OAAOC,YAAW;AAElB,SAEEC,eAOAC,mBACAC,gBAAAA,eAEAC,kBACAC,oBAAAA,yBACK;AACP,SAASC,iBAA6BC,YAAAA,WAAUC,mBAA8B;AAC9E,SAASC,YAAAA,iBAAgB;AACzB,SAASC,yBAAyB;AAClC,SAASC,QAAAA,aAAY;AAErB,SAASC,mBAAAA,wBAAuB;;;ACvBhC,SAASC,kBAAkB;AAC3B,OAAOC,SAASC,SAASC,gBAAgB;AAEzC,SAASC,qBAAqBC,oBAAoB;AAClD,SAA0BC,eAAeC,gBAAgB;AACzD,SAASC,UAAUC,kBAAkB;AACrC,SAASC,gBAAgB;AACzB,SAASC,QAAQC,QAAQC,gBAAgBC,yBAAyB;AAClE,SAASC,kBAAkB;AAC3B,SAASC,iBAAiBC,UAAU;AACpC,SAASC,uBAAuB;AAKzB,IAAMC,wBAAwB,CAAC,EAAEC,UAAUC,QAAO,MAAyB;AAChF,QAAM,EAAEC,EAAC,IAAKC,eAAeC,cAAAA;AAC7B,QAAM,CAACJ,UAAUK,WAAAA,IAAeC,SAA6BL,OAAAA;AAC7D,QAAMM,WAAWC,oBAAAA;AACjB,QAAM,EAAEC,MAAK,IAAKC,SAAAA;AAIlB,QAAMC,aAAaC,QAAQ,MAAA;AAEzB,UAAMC,UAAUC,SAASC,UAAUC,kBAAiB;AACpD,UAAMC,YAAY,oBAAIC,IAAAA;AACtB,UAAMC,WAAwB,CAAA;AAC9BV,WAAOW,SAAS;MACdC,SAAS,CAACC,MAAMC,SAAAA;AACd,aACGC,SAASF,IAAAA,KAASG,cAAcH,IAAAA,MACjC,CAACL,UAAUS,IAAIJ,KAAKK,EAAE,KACtBd,QAAQe,WAAWL,KAAKM,MAAM,GAAG,EAAC,EAAGC,KAAK,GAAA,CAAA,GAC1C;AACAb,oBAAUc,IAAIT,KAAKK,EAAE;AACrBR,UAAAA,SAAQa,KAAKV,IAAAA;QACf;MACF;IACF,CAAA;AAEAH,IAAAA,SAAQc,KAAK,CAACC,GAAGC,MAAAA;AACf,aAAOC,kBAAkBF,EAAEG,WAAWC,OAAOpC,CAAAA,GACzCqC,YAAAA,EACDC,cAAcJ,kBAAkBD,EAAEE,WAAWC,OAAOpC,CAAAA,GAAIqC,YAAAA,CAAAA;IAC7D,CAAA;AAGA,WAAOpB;EACT,GAAG;IAACV;GAAM;AAEV,QAAMgC,QAAQ9B,WAAW+B,KAAK,CAAC,EAAEf,GAAE,MAAOA,OAAO3B,QAAAA;AACjD,QAAMmB,UAAUM,cAAcgB,KAAAA,IAAShC,MAAMU,QAAQsB,KAAAA,IAAS9B;AAE9D,SACE,sBAAA,cAACgC,OAAOC,SAAO;IAACC,YAAY;MAAC;;KAC3B,sBAAA,cAACF,OAAOG,OAAK,MAAE5C,EAAE,yBAAyB;IAAE6C,IAAI3C;EAAe,CAAA,CAAA,GAG/D,sBAAA,cAAC4C,WAAWC,MAAI;IAACX,OAAOpC,EAAE,gCAAA;IAAmC2C,YAAW;KACtE,sBAAA,cAACG,WAAWE,OAAK;IAACC,aAAajD,EAAE,gCAAA;IAAmC2C,YAAW;MAC/E,sBAAA,cAACG,WAAWJ,SAAO;IAACC,YAAW;KAC5B1B,SAASiC,IAAI,CAACC,WAAAA;AACb,UAAMf,QAAQF,kBAAkBiB,OAAOhB,WAAWC,OAAOpC,CAAAA;AACzD,UAAMoD,WACJ,OAAOD,OAAOhB,WAAWkB,eAAe,WACpCF,OAAOhB,WAAWkB,aAClBF,OAAOhB,WAAWkB,aAAaC,gBAAAA,CAAAA;AACrC,UAAMC,OAAOJ,OAAOhB,WAAWqB,QAAQC;AACvC,WACE,sBAAA,cAACX,WAAWY,MAAI;MACdC,OAAOvB;MACPwB,KAAKT,OAAO1B;MACZoC,UAAU,MAAA;AACR,YAAIV,OAAOhB,WAAW2B,UAAU;AAC9B;QACF;AAEA,YAAIvC,cAAc4B,MAAAA,GAAS;AACzBhD,sBAAYgD,OAAO1B,EAAE;AACrB;QACF;AAEA,aAAKpB,SAAS;UAAE8C,QAAQY,aAAaC;UAAYC,MAAM;YAAEC,SAAS;YAAUC,OAAO;UAAM;QAAE,CAAA;AAC3FC,mBAAW,MAAA;AACT,gBAAMhD,OAAOb,MAAM8D,MAAM9B,SAASY,QAAQ;YAAEmB,UAAU;UAAU,CAAA,EAAG,CAAA;AACnE,gBAAMlD,QAAQE,SAAS6B,MAAAA,KAAWA,OAAOc,KAAK;YAAE7C;YAAMmD,QAAQC;UAAY,CAAA;QAC5E,CAAA;MACF;MACA7B,YAAW;MACXmB,UAAUX,OAAOhB,WAAW2B;MAC3B,GAAIX,OAAOhB,YAAYsC,UAAU;QAAE,eAAetB,OAAOhB,WAAWsC;MAAO;OAE5E,sBAAA,cAAClB,MAAAA;MAAKmB,MAAM;MAAGC,WAAWC,GAAG,CAACzB,OAAOhB,WAAWqB,QAAQ,WAAA;QACxD,sBAAA,cAACqB,QAAAA;MAAKF,WAAU;OAAiBvC,KAAAA,GAChCgB,YAAY,sBAAA,cAACyB,QAAAA;MAAKF,WAAWC,GAAG,YAAYE,eAAAA;OAAmBC,WAAW3B,QAAAA,EAAUxB,KAAK,EAAA,CAAA,CAAA;EAGhG,CAAA,CAAA,CAAA,GAIJ,sBAAA,cAACa,OAAOuC,OAAK;IAACC,SAAAA;KACZ,sBAAA,cAACC,QAAAA;IAAOC,SAAQ;IAAUxC,YAAW;KAClC3C,EAAE,eAAe;IAAE6C,IAAI;EAAK,CAAA,CAAA,CAAA,CAAA;AAKvC;;;AC7GA,SAASuC,yBAAyB;AAClC,OAAOC,UAASC,gBAAgB;AAEhC,SAASC,gBAA2B;AACpC,SAASC,SAASC,qBAAAA,oBAAmBC,kBAAAA,uBAAsB;AAC3D,SAASC,oBAAoB;AAI7B,IAAMC,yBAAyB;AAExB,IAAMC,cAAc,CAAC,EAAEC,YAAYC,gBAAe,MAAkD;AACzG,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAE7B,QAAMC,aACJJ,oBAAoB,eAAeH,sBAAAA,IAA0BE,WAAWM,EAAE,MAC1EL,oBAAoB,eAAeM,WAAAA,IAAeP,WAAWM,EAAE,KAC3DE,QAAQC,SACRC;AAEN,QAAMC,OAAOX,WAAWY,YAAYC,QAAQC;AAC5C,QAAMC,QAAQC,SAAShB,UAAAA;AACvB,QAAMiB,UAAUF,MAAME,QAAQjB,UAAAA;AAC9B,QAAMkB,QAAQC,mBAAkBnB,WAAWY,YAAYM,OAAOhB,CAAAA;AAE9D,QAAMkB,mBAAmBlB,EAAE,iCAAA;AAE3B,SACE,gBAAAmB,OAAA,cAAAA,OAAA,UAAA,MACE,gBAAAA,OAAA,cAAChB,YAAAA,MACC,gBAAAgB,OAAA,cAACC,aAAaC,aAAW;IACvBZ;IACAa,cAAcxB,WAAWM;IACzBmB,cAAcL;IACdH;IACAS,UAAU,CAACC,WACT,OAAOA,OAAOC,SAAS,cAAcD,OAAOC,KAAK;MAAEC,MAAMF;MAAgBG,QAAQhC;IAAuB,CAAA;OAI9G,gBAAAuB,OAAA,cAACC,aAAaS,OAAK;IAACP,cAAcxB,WAAWM;KAAKY,KAAAA,CAAAA;AAGxD;;;AC3CA,OAAOc,UAAyBC,aAAaC,WAAAA,gBAAe;AAE5D,SACEC,kBACAC,gBAAAA,eACAC,SACAC,qBACAC,2BACAC,uBAAAA,4BACK;AACP,SAASC,YAAAA,WAAUC,YAAAA,WAAUC,oBAAoB;AACjD,SAASC,mBAAmBC,eAAeC,eAAAA,oBAAmB;AAC9D,SAAqDC,QAAAA,aAAY;AACjE,SACEC,SAGAC,gBAIK;AACP,SAASC,iBAAiB;;;ACtB1B,SAASC,gBAAgBC,SAASC,eAAe;AACjD,SAASC,sBAAsB;AAC/B,OAAOC,YAAW;AAElB,SACEC,gBACAC,kBACAC,uBACAC,uBAAAA,4BAEK;AACP,SAASC,iBAAiB;AAC1B,SACEC,UAAAA,SACAC,SACAC,WAAAA,UACAC,aACAC,kBAAAA,iBACAC,MACAC,SACAC,OACAC,uBACK;AACP,SAASC,gBAAAA,qBAAoB;AAC7B,SAASC,SAASC,MAAAA,WAAU;AAI5B,IAAMC,eAAe;AAErB,IAAMC,OAAO;AAEN,IAAMC,gBAAgB,CAACC,UAAAA;AAC5B,QAAMC,aAAaC,gBAAgBF,MAAMC,YAAY,SAAA;AACrD,QAAME,SAASC,UAAAA;AACf,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,QAAM,EAAEC,sBAAqB,IAAKC,YAAYF,cAAAA;AAC9C,QAAMG,WAAWC,qBAAAA;AACjB,QAAM,EAAEC,SAASC,WAAWC,WAAU,IAAKX,OAAOY,OAAOC,SAASC,KAAKC,SAAS,CAAC;AACjF,QAAMC,mBAAmBC,iBAAiBC,qBAAAA;AAE1C,QAAMC,aACJnB,OAAOY,OAAOC,SAASC,KAAKM,KAAKC,mBAAmB,eAChD,GAAG1B,IAAAA,kBAAsBc,OAAAA,KACzB,GAAGd,IAAAA,WAAegB,UAAAA;AAExB,QAAMW,aAAa;AAEnB,SACE,gBAAAC,OAAA,cAACC,OAAAA;IACCC,MAAK;IACLC,WAAWC,IACT,oHACA7B,eAAe,mBAAmB,iCAAA;KAGpC,gBAAAyB,OAAA,cAACK,SAAQC,MAAI,MACX,gBAAAN,OAAA,cAACK,SAAQE,SAAO;IAACC,SAAAA;KACf,gBAAAR,OAAA,cAACS,SAAAA;IAAOC,SAAQ;IAAQC,YAAYxC;IAAe,GAAI,CAACW,yBAAyB;MAAE8B,UAAU;IAAG;KAAI,KAChG1B,OAAAA,CAAAA,GAGN,gBAAAc,OAAA,cAACK,SAAQQ,QAAM,MACb,gBAAAb,OAAA,cAACK,SAAQS,SAAO;IACdC,MAAK;IACLb,MAAK;IACLS,YAAW;KAEX,gBAAAX,OAAA,cAACgB,QAAQV,MAAI;IAACW,SAAQ;IAAUd,WAAU;KACxC,gBAAAH,OAAA,cAACgB,QAAQE,OAAK,MACZ,gBAAAlB,OAAA,cAACmB,SAAAA;IAAQC,QAAO;IAAUjB,WAAU;MACpC,gBAAAH,OAAA,cAACqB,QAAAA,MAAM1C,EAAE,eAAA,CAAA,CAAA,GAEX,gBAAAqB,OAAA,cAACgB,QAAQM,MAAI,MACV3C,EAAE,4BAAA,GACH,gBAAAqB,OAAA,cAACuB,MAAAA,IAAAA,GACD,gBAAAvB,OAAA,cAACwB,MAAAA;IAAKC,MAAM1B;IAAY2B,QAAO;IAASC,KAAI;IAAajB,SAAQ;KAC9D/B,EAAE,kBAAA,GACH,gBAAAqB,OAAA,cAAC4B,gBAAAA;IAAezB,WAAU;IAAeiB,QAAO;SAItD,gBAAApB,OAAA,cAACC,OAAAA;IAAIC,MAAK;IAAOC,WAAU;KACxBhB,aACC,gBAAAa,OAAA,cAAC6B,KAAAA,MACElD,EAAE,oBAAoB;IACrBmD,UAAUC,eAAe,IAAIC,KAAK7C,SAAAA,GAAY,oBAAI6C,KAAAA,GAAQ;MAAEC,WAAW;IAAK,CAAA;EAC9E,CAAA,GACA,gBAAAjC,OAAA,cAACuB,MAAAA,IAAAA,GACD,gBAAAvB,OAAA,cAACwB,MAAAA;IAAKC,MAAM7B;IAAY8B,QAAO;IAASC,KAAI;IAAajB,SAAQ;KAC9D/B,EAAE,mBAAA,GACH,gBAAAqB,OAAA,cAAC4B,gBAAAA;IAAezB,WAAU;IAAeiB,QAAO;QAItD,gBAAApB,OAAA,cAAC6B,KAAAA,MACC,gBAAA7B,OAAA,cAACkC,OACK;IACFvD;IACAwD,SAAS;IACTC,YAAY;MACVC,MAAM,gBAAArC,OAAA,cAACwB,MAAAA;QAAKC,MAAK;QAAmBC,QAAO;QAASC,KAAI;QAAajB,SAAQ;;IAC/E;EACF,CAAA,CAAA,CAAA,GAIN,gBAAAV,OAAA,cAACK,SAAQiC,OAAK,IAAA,CAAA,CAAA,CAAA,GAKpB,gBAAAtC,OAAA,cAACuC,QAAQjC,MAAI,MACX,gBAAAN,OAAA,cAACuC,QAAQhC,SAAO;IAACC,SAAAA;KAEf,gBAAAR,OAAA,cAACS,SAAAA;IACCC,SAAQ;IACRC,YAAYxC;IACZqE,eAAY;IACZC,gBAAa;IACZ,GAAI,CAAC3D,yBAAyB;MAAE8B,UAAU;IAAG;IAC9C8B,SAAS,MAAM1D,SAAS;MAAE2D,QAAQC,eAAeC;IAAK,CAAA;KAEtD,gBAAA7C,OAAA,cAACqB,QAAAA;IAAKlB,WAAU;KAAWxB,EAAE,qBAAA,CAAA,GAC7B,gBAAAqB,OAAA,cAAC8C,SAAAA;IAAQ3C,WAAWC,IAAG2C,QAAQ,CAAA,GAAI,WAAA;QAGvC,gBAAA/C,OAAA,cAACuC,QAAQ1B,QAAM,MACb,gBAAAb,OAAA,cAACuC,QAAQzB,SAAO;IAACH,YAAW;KACzBhC,EAAE,qBAAA,GACH,gBAAAqB,OAAA,cAACuC,QAAQD,OAAK,IAAA,CAAA,CAAA,CAAA,GAMnB7C,kBAAkBuD,KAAKC,OAAO,0BAC7B,gBAAAjD,OAAA,cAACkD,cAAaC,UAAQ;IACpBzC,SAAQ;IACR0C,cAAc;MACZC,gBAAgB;MAChBC,cAAc;IAChB;IACAZ,SAAS,CAACa,UAAAA;IAEV;;AAKV;;;ACtJA,SAKEC,aACAC,mBACAC,YAAAA,iBACK;AACP,SAASC,YAAY;AAQrB,SAA4BC,mBAAmB;AAkBxC,IAAMC,YAAY,CACvBC,OACAC,MACAC,SAAAA;AAEA,QAAMC,WAAWD,KAAKA,KAAKE,SAAS,CAAA;AACpC,SAAOJ,MAAMK,MAAMJ,MAAM;IAAEK,UAAU;EAAU,CAAA,EAAGC,KAAK,CAACC,MAAMA,EAAEC,OAAON,QAAAA;AACzE;AAEO,IAAMO,uBAAuB,CAClCV,OACAC,MACAC,MACAS,qBAAAA;AAEA,MAAIV,KAAKW,WAAWC,wBAAwBC,IAAIH,gBAAAA,GAAmB;AACjE,WAAOV;EACT,OAAO;AACL,UAAMc,SAAShB,UAAUC,OAAOC,MAAMC,IAAAA;AACtC,WAAOa,SAASL,qBAAqBV,OAAOe,QAAQb,KAAKc,MAAM,GAAGd,KAAKE,SAAS,CAAA,GAAIO,gBAAAA,IAAoB;EAC1G;AACF;AAEO,IAAMM,4BAA4B,CACvCjB,OACAkB,YACAC,iBACAC,2BAAAA;AAEA,QAAMC,cAAcH,WAAWN,WAAWD;AAC1C,MAAIS,0BAA0BC,aAAa;AACzC,UAAMC,oBAAoBZ,qBAAqBV,OAAOoB,wBAAwBD,iBAAiBE,WAAAA;AAC/F,QAAIC,mBAAmB;AACrB,YAAMC,YAAYL,WAAWN,WAAWY;AACxC,UAAID,aAAaD,mBAAmBV,WAAWa,sBAAsB;AACnE,eAAOH,kBAAkBV,WAAWa,qBAAqBX,IAAIS,SAAAA,KAC3DH,uBAAuBR,WAAWc,kBAChC,aACAN,uBAAuBR,WAAWe,SAChC,SACA;MACR,OAAO;AACL,eAAO;MACT;IACF,OAAO;AACL,aAAO;IACT;EACF,OAAO;AACL,WAAO;EACT;AACF;AAGO,IAAMC,cAAc,CAACC,YAC1BA,QAAQC,KAAK,CAACC,GAAGC,MAAAA;AACf,MAAID,EAAEnB,WAAWqB,gBAAgBD,EAAEpB,WAAWqB,aAAa;AACzD,WAAO;EACT;AAEA,MAAIF,EAAEnB,WAAWqB,gBAAgB,WAAW;AAC1C,WAAO;EACT;AAEA,SAAO;AACT,CAAA;AAEK,IAAMC,kBAAkB,CAACC,WAA8BjC,SAAAA;AAC5D,MAAI,CAACA,MAAM;AACT,WAAOkC;EACT;AAEA,SAAOD,UAAU5B,KAAK,CAAC8B,aAAAA;AACrB,WAAOA,SAASnC,QAAQ,CAACmC,SAASnC,KAAKK,KAAK,CAACE,IAAI6B,UAAUpC,KAAKoC,KAAAA,MAAW7B,EAAAA;EAC7E,CAAA;AACF;AAEO,IAAM8B,cAAc,CACzBvC,OACAC,MACAuC,QACAtC,OAAiB,CAAA,MAAE;AAEnB,SAAOF,MACJK,MAAMJ,MAAM;IAAEK,UAAU;IAAYkC;EAAO,CAAA,EAC3CC,IAAI,CAACjC,MAAAA;AAEJ,UAAMkC,WAAW;SAAIxC;MAAMD,KAAKQ;;AAChC,WAAOiC,SAASC,SAASnC,EAAEC,EAAE,IAAI2B,SAAa5B;EAChD,CAAA,EACCgC,OAAOI,WAAAA;AACZ;AAIO,IAAMC,aAAa,CAAC7C,OAAcC,SAAAA;AACvC,SAAOD,MAAM6B,QAAQ5B,IAAAA,EAAM6C,OACzB,CAACC,KAAuBC,QAAAA;AACtBD,QAAIlB,QAAQoB,KAAKD,GAAAA;AACjB,QAAI,CAACE,UAASF,GAAAA,GAAM;AAClB,YAAMG,cAAcnD,MAAM6B,QAAQmB,GAAAA;AAClCD,UAAIK,eAAeJ,IAAIvC,EAAE,IAAI0C;IAC/B;AACA,WAAOJ;EACT,GACA;IAAElB,SAAS,CAAA;IAAIuB,gBAAgB,CAAC;EAAE,CAAA;AAEtC;AAEO,IAAMC,2BAA2B,CAACrD,OAAcC,SAAAA;AACrD,SAAOqD,QAAQC,IAAI;IAACC,eAAexD,OAAOC,IAAAA;IAAOwD,cAAczD,OAAOC,IAAAA;GAAM;AAC9E;AAEO,IAAMuD,iBAAiB,CAACxD,OAAcC,SAAAA;AAC3C,SAAOD,MAAM0D,OAAOzD,MAAM,UAAA;AAC5B;AAEO,IAAMwD,gBAAgB,CAACzD,OAAcC,SAAAA;AAC1C,SAAOqD,QAAQC,IAAI;IAACvD,MAAM0D,OAAOzD,MAAM,YAAY0D,WAAAA;IAAc3D,MAAM0D,OAAOzD,MAAM,YAAY2D,iBAAAA;GAAmB;AACrH;AAEA,UAAUC,mBACR7D,OACAC,MACA6D,aACA5D,OAAiB,CAAA,GACjBsC,QAAmB;AAEnB,QAAMuB,aAAaxB,YAAYvC,OAAOC,MAAMuC,QAAQtC,IAAAA;AACpD,QAAM,EAAE2B,SAASmC,WAAWZ,gBAAgBa,iBAAgB,IAAKpB,WAAW7C,OAAOC,IAAAA;AAEnF,QAAMiE,QAAuB;IAC3B;MACEzD,IAAIR,KAAKQ;MACTR;MACAC,MAAM,CAAA;MACNiE,WAAWJ,cAAc,CAAA,GAAItB,IAAI,CAAC,EAAEhC,GAAE,MAAOA,EAAAA;MAC7CoB,SAASmC;MACTZ,gBAAgBa;IAClB;;AAGF,SAAOC,MAAM9D,SAAS,GAAG;AACvB,UAAMgE,WAAWF,MAAMG,IAAG;AAC1B,SAAKD,SAASlE,MAAME,UAAU,KAAK,GAAG;AACpC,YAAMgE;IACR;AACA,UAAM,EAAE3D,IAAIR,MAAAA,OAAMC,MAAAA,MAAI,IAAKkE;AAC3B,UAAME,WAAW/B,YAAYvC,OAAOC,OAAMuC,QAAQtC,KAAAA;AAClD,QAAIA,OAAME,WAAW,MAAMK,MAAM,YAAYqD,aAAa;AACxD,eAASS,IAAID,SAASlE,SAAS,GAAGmE,KAAK,GAAGA,KAAK;AAC7C,cAAMC,QAAQF,SAASC,CAAAA;AACvB,cAAME,YAAYvE,QAAO;aAAIA;UAAMsE,MAAM/D;YAAM;UAAC+D,MAAM/D;;AACtD,cAAMiE,gBAAgBnC,YAAYvC,OAAOwE,OAAOhC,QAAQiC,SAAAA;AACxD,cAAM,EAAE5C,SAAS8C,cAAcvB,gBAAgBwB,oBAAmB,IAAK/B,WAAW7C,OAAOwE,KAAAA;AACzFN,cAAMjB,KAAK;UACTxC,IAAIoE,KAAKC,OAAM,GAAIL,SAAAA;UACnBxE,MAAMuE;UACNtE,MAAMuE;UACN,IAAKC,eAAetE,UAAU,KAAK,KAAK;YACtC+D,UAAUO,cAAejC,IAAI,CAAC,EAAEhC,IAAAA,IAAE,MAAOoE,KAAKC,OAAM,GAAIL,WAAWhE,GAAAA,CAAAA;UACrE;UACAoB,SAAS8C;UACTvB,gBAAgBwB;QAClB,CAAA;MACF;IACF;EACF;AACF;AAKO,IAAMG,wBAAwB,CACnC/E,OACAgF,UACAlB,aACA5D,OAAiB,CAAA,GACjBsC,WAAAA;AAEA,SAAOyC,MAAMC,KAAKrB,mBAAmB7D,OAAOgF,UAAUlB,aAAa5D,MAAMsC,MAAAA,CAAAA;AAC3E;AAEO,IAAM2C,uBAAuB,CAACnF,OAAc8D,gBAAAA;AACjD,SAAOR,QAAQC,IACb6B,OAAOC,KAAKvB,WAAAA,EACTrB,IAAI,CAAC6C,eAAAA;AACJ,UAAMrF,OAAOD,MAAMuF,SAASV,KAAKW,KAAKF,UAAAA,CAAAA;AACtC,WAAOrF,QAAQoD,yBAAyBrD,OAAOC,IAAAA;EACjD,CAAA,EACCuC,OAAOI,WAAAA,CAAAA;AAEd;;;AF5LO,IAAM6C,YAAY;AAEzB,IAAMC,iBAAiB,CAACC,SACtB,gBAAAC,OAAA,cAACC,SAAAA;EAAQC,MAAK;EAAkBC,MAAM;IAAEC,QAAQL,KAAKI;EAAK;;AAGrD,IAAME,mBAAmB,CAAC,EAC/BC,MACAC,WACAC,aACAC,qBACAC,UACAC,gBAAe,MAQhB;AACC,QAAM,EAAEC,uBAAsB,IAAKC,aAAYC,cAAAA;AAC/C,QAAM,CAACC,IAAAA,IAAQC,cAAc,MAAM;IAAEC,KAAK;EAAM,CAAA;AAChD,QAAMC,WAAWC,qBAAAA;AAEjB,QAAMC,QAAQC,SAAQ,MAAMC,UAAShB,IAAAA,GAAO;IAACA;GAAK;AAElD,QAAMiB,QAAQC,sBAAsBJ,OAAOd,MAAME,WAAAA;AAEjD,QAAMiB,kBAAkBC,YACtB,CAAC3B,SAAAA;AACC,SAAK4B,cAAcP,OAAOrB,IAAAA;AAC1B,QAAI,CAAC6B,aAAa7B,IAAAA,GAAO;AACvB,WAAK8B,eAAeT,OAAOrB,IAAAA,EAA8B+B,KAAK;;QAE5DC,QAAQC,IACNC,YAAYb,OAAOrB,IAAAA,EAA8BmC,QAAQ,CAACC,UAAU;UAClER,cAAcP,OAAOe,KAAAA;UACrBN,eAAeT,OAAOe,KAAAA;SACvB,CAAA;OAAA;IAGP;EACF,GACA;IAACf;GAAM;AAGT,QAAMgB,iBAAiB,OAAO,EAAErC,MAAMsC,QAAO,MAAmB;AAC9D,QAAI,CAACtC,KAAKI,MAAM;AACd;IACF;AAGA,UAAMe,SAAS;MACboB,QAAQC,iBAAiBC;MACzBrC,MAAM;QACJsC,aAAa1C,KAAKI,MAAMuC,WACpB;UACEC,MAAM;YAAC5C,KAAK6C;;UACZC,eAAe;YAAC,GAAG9C,KAAK6C,EAAE,GAAGE,mBAAAA,WAA8BC,yBAAAA;;QAC7D,IACA;UACEJ,MAAM;YAAC5C,KAAK6C;;QACd;MACN;IACF,CAAA;AAEA,UAAM1B,SAAS;MAAEoB,QAAQU,cAAaC;MAAkB9C,MAAM;QAAEyC,IAAI7C,KAAK6C;MAAG;IAAE,CAAA;AAE9E,UAAMM,gBAAgBb,SAASc,KAAK,CAACb,WAAWA,OAAOc,YAAYC,gBAAgB,SAAA;AACnF,QAAIC,UAASJ,aAAAA,GAAgB;AAC3B,WAAMA,cAAc/C,KAAI;IAC1B;AACA,QAAI,CAACY,MAAM;AACTH,6BAAAA;IACF;EACF;AAEA,QAAM2C,uBAAuB,CAAC,EAAEX,IAAIP,SAASmB,KAAI,GAAqBC,aAAAA;AACpE,QAAID,MAAM;AACR,UAAIC,UAAU;AACZhD,4BAAoB;UAAE,GAAGD;UAAa,CAACoC,EAAAA,GAAK;QAAK,CAAA;MACnD,OAAO;AAEL,cAAM,EAAE,CAACA,EAAAA,GAAKc,GAAG,GAAGC,gBAAAA,IAAoBnD;AACxCC,4BAAoBkD,eAAAA;MACtB;IACF;AAGA,UAAMT,gBAAgBb,SAASc,KAAK,CAACb,WAAWA,OAAOc,YAAYC,gBAAgB,SAAA;AACnF,QAAIC,UAASJ,aAAAA,GAAgB;AAC3B,WAAMA,cAAc/C,KAAI;IAC1B;EACF;AAEA,QAAMyD,mBAAmBlC,YACvB,CAACmC,cAAkCC,UAA8BC,gBAAAA;AAC/D,QAAI,EAAE,OAAOF,iBAAiB,YAAYC,WAAW;AACnD,aAAO;IACT,OAAO;AACL,YAAME,YAAYC,UAChB1C,OACAA,MAAM2C,UAAU,CAAC,EAAEtB,GAAE,MAAOA,OAAOkB,QAAAA,GACnCD,YAAAA;AAEF,YAAMM,eAAwCH,UAAUH,eAAe,CAAA;AACvE,YAAMO,WAAoCJ,UAAUH,eAAe,CAAA;AACnE,aAAOQ,KAAKC,IACVH,eAAeI,SAASJ,cAAcX,IAAAA,IAAQ,IAAI,GAClDa,KAAKG,IAAIJ,WAAWG,SAASH,UAAUZ,IAAAA,IAAQ,GAAGe,SAASP,UAAUH,YAAAA,EAAcL,IAAI,IAAIO,WAAAA,CAAAA;IAE/F;EACF,GACA;IAACxC;GAAM;AAGT,QAAMkD,aAAqC/C,YACzC,CAAC,EAAEgD,QAAQC,MAAMC,QAAO,MAAmD;AACzE,UAAMb,cAAcM,KAAKQ,OAAOD,SAASE,OAAOC,KAAK,KAAK,EAAA;AAC1D,UAAMlB,eAAec,KAAKK,YAAY;AAEtC,UAAMhB,YAAYC,UAChB1C,OACAA,MAAM2C,UAAU,CAAC,EAAEtB,GAAE,MAAOA,OAAO8B,OAAOO,KAAKrC,EAAE,GACjDiB,YAAAA;AAGF,UAAMM,eAAwCH,UAAUH,eAAe,CAAA;AACvE,UAAMO,WAAoCJ,UAAUH,eAAe,CAAA;AAEnE,UAAMqB,aAAa,UAAUR,OAAOO,OAAQP,OAAOO,KAAqBlF,OAAOoF;AAE/E,QAAI,CAACD,cAAc,CAACf,gBAAgB,CAACA,aAAaX,MAAM;AAGtD,aAAO;QAAE4B,WAAW;QAAmBR,SAAS;UAAEb;QAAY;MAAE;IAClE;AAEA,UAAMsB,YAAYzB,iBAAiBC,cAAca,OAAOO,KAAKrC,IAAImB,WAAAA;AAEjE,UAAMuB,gBAAgBf,SAASJ,aAAaX,IAAI;AAIhD,QAAI8B,kBAAkBD,YAAY,GAAG;AACnC,UAAIE,MAAKC,SAASrB,aAAavB,IAAI8B,OAAOO,KAAKrC,EAAE,GAAG;AAElD,cAAMwC,YAAYjB,aAAapE,KAAKqD,WAAWqC,sBAC1C,cACA;AACL,eAAO;UAAEL;UAAWR,SAAS;YAAEb;UAAY;QAAE;MAC/C,OAAO;AAEL,cAAMqB,YAAYM,0BAA0BtE,OAAO8D,YAAYf,aAAaX,MAAMW,aAAapE,IAAI;AAEnG,eAAO;UAAEqF;UAAWR,SAAS;YAAEb;UAAY;QAAE;MAC/C;IACF,WAAWuB,kBAAkBD,WAAW;AACtC,YAAMM,SAASC,UAAUxE,OAAO+C,aAAapE,MAAMoE,aAAaX,IAAI;AACpE,YAAMqC,aAAa1B,aAAaX,KAAKsC,MAAM,GAAG3B,aAAaX,KAAKuC,SAAS,CAAA;AACzE,UAAIR,MAAKS,SAAS7B,aAAavB,IAAI8B,OAAOO,KAAKrC,EAAE,GAAG;AAElD,cAAMwC,YAAYO,QAAQvC,WAAWqC,sBAAuB,cAAyB;AACrF,eAAO;UAAEL;UAAWR,SAAS;YAAEb;UAAY;QAAE;MAC/C,OAAO;AAEL,cAAMqB,YAAYM,0BAA0BtE,OAAO8D,YAAYW,YAAYF,MAAAA;AAM3E,eAAO;UAAEP;UAAWR,SAAS;YAAEb;UAAY;QAAE;MAC/C;IACF,WAAWK,YAAYA,SAASZ,MAAM;AACpC,YAAMyC,YAAY1B,SAASH,SAASZ,IAAI;AACxC,UAAIyC,cAAcZ,WAAW;AAC3B,cAAMM,SAASC,UAAUxE,OAAOgD,SAASrE,MAAMqE,SAASZ,IAAI;AAC5D,cAAMqC,aAAazB,SAASZ,KAAKsC,MAAM,GAAG1B,SAASZ,KAAKuC,SAAS,CAAA;AACjE,YAAIR,MAAKS,SAAS5B,SAASxB,IAAI8B,OAAOO,KAAKrC,EAAE,GAAG;AAE9C,gBAAMwC,YAAYO,QAAQvC,WAAWqC,sBAAuB,cAAyB;AACrF,iBAAO;YAAEL;YAAWR,SAAS;cAAEb;YAAY;UAAE;QAC/C,OAAO;AAEL,gBAAMqB,YAAYM,0BAA0BtE,OAAO8D,YAAYW,YAAYF,MAAAA;AAM3E,iBAAO;YAAEP;YAAWR,SAAS;cAAEb;YAAY;UAAE;QAC/C;MACF,OAAO;AAEL,eAAO;UAAEqB,WAAW;UAAmBR,SAAS;YAAEb;UAAY;QAAE;MAClE;IACF,OAAO;AAEL,aAAO;QAAEqB,WAAW;QAAmBR,SAAS;UAAEb;QAAY;MAAE;IAClE;EACF,GACA;IAACzD;IAAMiB;GAAM;AAGf,QAAM2E,aAAaxE,YACjB,CAAC,EAAE0D,WAAWV,QAAQC,MAAMC,UAAU,CAAC,EAAC,MAAmD;AACzF,QAAIW,MAAKY,MAAMxB,KAAKnB,IAAI,MAAMlD,KAAKsC,IAAI;AACrC,aAAOuC;IACT;AACA,UAAM,EAAEpB,cAAc,EAAC,IAAKa;AAC5B,UAAMf,eAAec,KAAKK,YAAY;AAEtC,UAAMhB,YAAYC,UAChB1C,OACAA,MAAM2C,UAAU,CAAC,EAAEtB,GAAE,MAAOA,OAAO8B,OAAOO,KAAKrC,EAAE,GACjDiB,YAAAA;AAGF,UAAMqB,aAAa,UAAUR,OAAOO,OAAQP,OAAOO,KAAqBlF,OAAOoF;AAC/E,UAAMiB,iBAAiBb,MAAKI,OAAOjB,OAAOO,KAAKrC,EAAE;AAEjD,QAAI,CAACsC,YAAY;AACf,aAAOC;IACT;AAEA,UAAMkB,eAAeT,UAAUxE,OAAO8D,YAAaR,OAAOO,KAAqBzB,QAAQ,CAAA,CAAE;AAEzF,QAAI4B,cAAc,aAAa;AAC7B,WAAKiB,cAAcjD,WAAWqC,sBAC5BzB,UAAUsC,OAAO,CAAC,EAAE1D,GAAE,MAAO2C,MAAKC,SAASY,gBAAgBxD,EAAAA,CAAAA,EAAK2D,IAAI,CAAC,EAAExG,KAAI,MAAOA,KAAKI,IAAI,CAAA;AAE7F,aAAO;IACT,OAAO;AACL,YAAMgE,eAAwCH,UAAUH,eAAe,CAAA;AACvE,YAAMO,WAAoCJ,UAAUH,eAAe,CAAA;AAEnE,YAAMwB,YAAYzB,iBAAiBC,cAAca,OAAOO,KAAKrC,IAAImB,WAAAA;AAEjE,YAAMuB,gBAAgBf,SAASJ,aAAaX,IAAI;AAEhD,UAAI4B,cAAc,QAAQ;AACxB,YAAIE,kBAAkBD,YAAY,GAAG;AACnC,eAAKlB,aAAapE,KAAKqD,WAAWoD,SAAStB,YAAY,CAAA;AACvD,iBAAO;QACT,WAAWI,kBAAkBD,WAAW;AACtC,gBAAMM,SAASC,UAAUxE,OAAO+C,aAAapE,MAAMoE,aAAaX,QAAQ,CAAA,CAAE;AAC1E,eAAKmC,QAAQvC,WAAWoD,SACtBtB,YACAjD,YAAYb,OAAOuE,MAAAA,EAAQzB,UAAU,CAAC,EAAEtB,GAAE,MAAOA,OAAOuB,aAAapE,KAAK6C,EAAE,IAAI,CAAA;AAElF,iBAAO;QACT,WAAWwB,YAAYA,SAASZ,MAAM;AACpC,gBAAMmC,SAASC,UAAUxE,OAAOgD,SAASrE,MAAMqE,SAASZ,QAAQ,CAAA,CAAE;AAClE,eAAKmC,QAAQvC,WAAWoD,SACtBtB,YACAjD,YAAYb,OAAOuE,MAAAA,EAAQzB,UAAU,CAAC,EAAEtB,GAAE,MAAOA,OAAOwB,SAASrE,KAAK6C,EAAE,CAAA;AAE1E,iBAAO;QACT;MACF,WAAWwC,cAAc,YAAY;AACnC,cAAMqB,gBAAgBJ,cAAcjD,WAAWqD;AAC/C,YAAI,CAACA,eAAe;AAClB,iBAAOtB;QACT,WAAWG,kBAAkBD,YAAY,GAAG;AAC1C,gBAAMqB,kBAAkBvC,aAAapE,KAAKqD,WAAWsD;AACrD,cAAIA,iBAAiB;AACnB,iBAAKD,cAAcvB,YAAYf,aAAapE,IAAI;AAChD,iBAAK2G,gBAAgBxB,YAAY,CAAA;AACjC,mBAAO;UACT;QACF,WAAWI,kBAAkBD,aAAalB,aAAaX,MAAM;AAC3D,gBAAMmC,SAASC,UAAUxE,OAAO+C,aAAapE,MAAMoE,aAAaX,IAAI;AACpE,cAAImC,QAAQvC,WAAWsD,iBAAiB;AACtC,iBAAKD,cAAcvB,YAAYf,aAAapE,IAAI;AAChD,iBAAK4F,OAAOvC,WAAWsD,gBACrBxB,YACAjD,YAAYb,OAAOuE,MAAAA,EAAQzB,UAAU,CAAC,EAAEtB,GAAE,MAAOA,OAAOuB,aAAapE,KAAK6C,EAAE,IAAI,CAAA;AAElF,mBAAO;UACT;QACF,WAAWwB,YAAYA,SAASZ,MAAM;AACpC,gBAAMmC,SAASC,UAAUxE,OAAOgD,SAASrE,MAAMqE,SAASZ,IAAI;AAC5D,cAAImC,QAAQvC,WAAWsD,iBAAiB;AACtC,iBAAKD,cAAcvB,YAAYf,aAAapE,IAAI;AAChD,iBAAK4F,OAAOvC,WAAWsD,gBACrBxB,YACAjD,YAAYb,OAAOuE,MAAAA,EAAQzB,UAAU,CAAC,EAAEtB,GAAE,MAAOA,OAAOwB,SAASrE,KAAK6C,EAAE,CAAA;AAE1E,mBAAO;UACT;QACF;MACF;IACF;AACA,WAAOuC;EACT,GACA;IAAC7E;IAAMiB;GAAM;AAGf,QAAMoF,gBAAgBjF,YAAY,MAAA;AAChCjB,wBAAoB;MAAE,GAAGD;IAAY,CAAA;EACvC,GAAG;IAACC;IAAqBD;GAAY;AAErC,SACE,gBAAAR,OAAA,cAAC4G,mBAAAA;IAAkBC,WAAU;KAC3B,gBAAA7G,OAAA,cAAC8G,OAAAA;IACC5G,MAAK;IACL6G,WAAU;KAEV,gBAAA/G,OAAA,cAACC,SAAAA;IAAQC,MAAK;IAAe8G,OAAO;MAEpC,gBAAAhH,OAAA,cAAC8G,OAAAA;IAAI5G,MAAK;IAAO6G,WAAU;KACzB,gBAAA/G,OAAA,cAACiH,SAAAA;IACCrE,IAAItC,KAAKsC;IACTrB;IACA2F,SAAS3G;IACTG;IACAyG,MAAMtH;IACNuH,MAAM5G;IACN6G,YAAYjF;IACZkF,kBAAkB/D;IAClBgE,QAAQ9C;IACR+C,QAAQtB;IACRuB,WAAWd;IACXhG;IACAb;IACA8D;IACAnC;OAGJ,gBAAAzB,OAAA,cAAC0H,eAAAA,IAAAA,CAAAA,CAAAA;AAIT;;;AGtXA,SAASC,iBAAiB;AAG1B,SAASC,qBAAAA,oBAAmBC,kBAAAA,uBAAsB;AAI3C,IAAMC,uBAAuB,CAAC,EAAEC,KAAI,MAAmB;AAC5D,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7BC,YAAU,MAAA;AACRC,aAASC,QAAQN,OAAOO,mBAAkBP,KAAKQ,WAAWC,OAAOR,CAAAA,IAAKA,EAAE,oBAAoB;MAAES,IAAI;IAAS,CAAA;EAC7G,GAAG;IAACV,MAAMQ,YAAYC;GAAM;AAC5B,SAAO;AACT;;;ACZA,OAAOE,YAAW;AAElB,SAASC,uBAAAA,sBAAqBC,oBAAAA,yBAAwB;AACtD,SAASC,oBAAoB;AAC7B,SAASC,gCAAgC;AACzC,SAASC,mBAAmB;;;ACL5B,OAAOC,YAAW;AAElB,SAASC,iBAAiBC,wBAAwB;AAClD,SAASC,cAAyB;AAClC,SAASC,WAAWC,MAAAA,WAAU;AAC9B,SAASC,qBAAqB;AAE9B,IAAMC,WAAW;AAWV,IAAMC,aAAa,CAACC,UAAAA;AACzB,QAAM,EAAEC,SAASC,aAAaC,UAAUC,OAAO,EAAC,IAAKJ;AACrD,QAAMK,gBAAgBC,cAAcJ,eAAe,GAAA;AACnD,QAAM,EAAEK,OAAOC,gBAAe,IAAKC,iBAAAA;AACnC,SACE,gBAAAC,OAAA,cAACC,UAAAA;IAAOC,WAAWC,IAAGC,WAAW,iCAAA;IAAoCb;KACnE,gBAAAS,OAAA,cAACK,OAAOC,MAAI;IACVZ;IACAa,SAAQ;IACRC,QAAQV,oBAAoBW,gBAAgBC,UAAU,UAAUjB,WAAW,aAAa;IACxFkB,KAAKrB,MAAMqB,OAAOhB,cAAcgB;KAEhC,gBAAAX,OAAA,cAACK,OAAOO,OAAK;IAACC,eAAY;IAAsBC,gBAAa;KAC1DrB,WAAW,gBAAAO,OAAA,cAACK,OAAOU,OAAK;IAACC,MAAM5B;OAAe,gBAAAY,OAAA,cAACK,OAAOY,UAAQ;IAACC,MAAM5B,MAAM6B,SAASxB,cAAcwB;;AAK7G;;;AD1BO,IAAMC,aAAa,MAAA;AACxB,QAAMC,WAAWC,YAAAA;AACjB,QAAMC,sBAAsBC,kBAAiBC,wBAAAA;AAC7C,QAAMC,WAAWC,qBAAAA;AACjB,SACE,gBAAAC,OAAA,cAACC,YAAAA;IACCC,MAAM;IACNC,aAAaV,UAAUU,YAAYC,MAAAA;IACnCC,KAAKZ,UAAUa,SAASC,MAAMF;IAC9BG,OAAOf,UAAUa,SAASC,MAAMC;IAChCC,UAAUd,qBAAqBe,UAAUC,eAAeC,UAAU;IAClEC,SAAS,MAAMf,SAAS;MAAEgB,QAAQC,aAAaC;IAAe,CAAA;;AAGpE;;;AExBA,SAASC,uBAAuB;AAChC,OAAOC,YAAW;AAElB,SAASC,gBAAAA,eAAcC,iBAAiB;AACxC,SAASC,UAAAA,SAAQC,kBAAAA,uBAAsB;AACvC,SAASC,WAAAA,gBAAe;AAKjB,IAAMC,kBAAkB,MAAA;AAC7B,QAAM,EAAEC,SAAQ,IAAKC,UAAAA;AACrB,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,cAAAA;AAC7B,SACE,gBAAAC,OAAA,cAACC,SAAAA;IACCC,YAAW;IACXC,SAAS,MACPR,SAAS;MACPS,QAAQC,cAAaC;MACrBC,MAAM;QAAEC,SAAS;QAAUC,WAAW,GAAGV,cAAAA;QAA2BW,kBAAkB;MAAQ;IAChG,CAAA;KAGF,gBAAAV,OAAA,cAACW,QAAAA;IAAKC,WAAU;KAAgDf,EAAE,gCAAA,CAAA,GAClE,gBAAAG,OAAA,cAACa,iBAAAA;IAAgBD,WAAWE,SAAQ,CAAA;;AAG1C;;;AC3BA,SAASC,gBAAgBC,2BAA2B;AAIpD,IAAA,uBAAe;EACb;IACE,SAAS;MACP,CAACC,cAAAA,GAAiB;QAChB,uBAAuB;QACvB,uBAAuB;QACvB,yBAAyB;QACzB,kCAAkC;QAClC,mCAAmC;QACnC,iBAAiB;QACjB,8BAA8B;QAC9B,oBAAoB;QACpB,oBAAoB;QACpB,qBAAqB;QACrB,2BAA2B;MAC7B;IACF;EACF;KACGC;;;;AVwBE,IAAMC,gBAAgB,MAAA;AAC3B,QAAMC,QAAQ,IAAIC,kBAAgC,6BAA6B;;IAE7EC,aAAa;MAAEC,MAAM;MAAM,gCAAgC;MAAM,yBAAyB;IAAK;EACjG,CAAA;AAEA,MAAIC;AACJ,MAAIC;AAEJ,QAAMC,0BAA0B,CAACC,oBAAAA;AAE/BP,UAAMQ,OAAON,cAAcK;AAC3B,QAAIF,OAAO;AACT,WAAKI,qBAAqBJ,OAAOE,eAAAA;IACnC;EACF;AAEA,SAAO;IACLG;IACAC,OAAO,OAAOC,YAAAA;AACZR,oBAAcS,cAAcD,SAASE,gBAAAA;AACrCT,cAAQD,aAAaW,SAASV;AAC9B,UAAI,CAACA,OAAO;AACV;MACF;AAEAL,YAAMQ,OAAOL,OAAOE,MAAMF;AAC1Ba,kBAAYX,OAAOL,MAAMQ,OAAOL,IAAI;AACpCc,iBAAWZ,OAAOL,MAAMQ,OAAOL,IAAI;AAEnCH,YAAMkB,KAAK;QAAEC,KAAK;QAAeC,YAAY;QAAeC,MAAMpB,kBAAkBqB,KAAI;MAAgB,CAAA;AAExG,WAAKb,qBAAqBJ,OAAOL,MAAMQ,OAAON,WAAW;AAIzDG,YAAMkB,kBAAkB;QACtBC,SAAS,CAACC,MAAMC,SAAAA;AACd,cAAIC;AACJ,cAAI,OAAOF,KAAKG,WAAWC,eAAe,UAAU;AAClD,kBAAMC,qBAAqBC,OAAOC,KAAKP,KAAKG,WAAWC,UAAU;AACjE,kBAAMI,WAAWC,iBAAAA;AACjBP,uBAAWG,mBAAmBK,SAASF,QAAAA,IACnCR,KAAKG,WAAWC,WAAWI,QAAAA,IAC3BA,aAAa,QACXR,KAAKG,WAAWC,WAAWO,QAC3BH,aAAa,WAAWA,aAAa,YACnCR,KAAKG,WAAWC,WAAWQ,UAC3BC;UACV,OAAO;AACLX,uBAAWF,KAAKG,WAAWC;UAC7B;AAEA,cAAIF,YAAYY,UAASd,IAAAA,GAAO;AAC9Be,YAAAA,UAASC,UAAUC,WAAWhB,KAAKiB,MAAM,GAAG,EAAC,EAAGC,KAAK,GAAA,CAAA,EAAMC,KAAK;cAC9DlB;cACAmB,SAAS,MAAA;AACP,qBAAKrB,KAAKsB,KAAK;kBAAEtB;kBAAMuB,QAAQC;gBAAY,CAAA;cAC7C;cACAF,MAAMtB,KAAKG,WAAWsB;YACxB,CAAA;UACF;QACF;MACF,CAAA;AAGAV,MAAAA,UAASC,UAAUU,WAAU;AAC7BX,MAAAA,UAASC,UAAUW,kBAAkBhD,aAAaW,SAASV,MAAMF,KAAKkD,EAAAA;IACxE;IACAC,QAAQ,YAAA;AACNd,MAAAA,UAASC,UAAUc,QAAO;IAC5B;IACAxC,UAAU;MACRyC,UAAU;QACRC,SAAS;UACP,CAACC,SAAAA,GAAY;YACXC,OAAO,CAACC,MAAmBvC,SAAAA;AACzB,sBAAQA,MAAAA;gBACN,KAAK;AACH,yBAAOuC,KAAKnC;gBACd,KAAK;AACH,yBAAOmC,KAAKnC,KAAKsB;gBACnB,KAAK;AACH,yBAAO;oBAAEM,IAAI,GAAGO,KAAKP,EAAE;oBAASQ,QAAQD,KAAKnC,KAAKsB;kBAAK;cAC3D;YACF;UACF;QACF;MACF;MACAe,SAAS;QACPC,WAAW,CAAC,EAAEhB,MAAMiB,KAAI,MAAE;AACxB,kBAAQjB,KAAKgB,WAAS;YACpB,KAAK,GAAGE,cAAAA,aAA2B;AACjC,oBAAMC,WAAW,OAAOnB,KAAKoB,YAAY,WAAWpB,KAAKoB,UAAU7B;AACnE,qBAAO,gBAAA8B,OAAA,cAACC,uBAAAA;gBAAsBH;;YAChC;UACF;AAEA,kBAAQF,MAAAA;YACN,KAAK;AACH,kBAAIhE,MAAMQ,OAAOL,QAAQH,MAAMQ,OAAON,aAAa;AACjD,uBACE,gBAAAkE,OAAA,cAACE,kBAAAA;kBACCnE,MAAMH,MAAMQ,OAAOL;kBACnBoE,WAAWxB,KAAKwB;kBAChBrE,aAAaF,MAAMQ,OAAON;kBAC1BsE,qBAAqBlE;kBACrBmE,UAAU1B,KAAK0B;kBACfC,iBAAiB3B,KAAK2B;;cAG5B;AACA;YAEF,KAAK,kBAAkB;AACrB,qBAAO,gBAAAN,OAAA,cAACO,sBAAAA;gBAAqBlD,MAAMmD,YAAY7B,KAAK8B,UAAU,IAAI9B,KAAK8B,aAAavC;;YACtF;YAEA,KAAK,gBAAgB;AACnB,kBAAItC,MAAMQ,OAAOL,QAAQ4C,KAAK8B,YAAY;AACxC,uBAAO;kBACLpD,MACE,gBAAA2C,OAAA,cAACU,aAAAA;oBACCD,YAAY9B,KAAK8B;oBACjBH,iBAAiB3B,KAAK2B;;kBAG1BK,aAAa;gBACf;cACF;AACA;YACF;YAEA,KAAK;AACH,qBAAO,gBAAAX,OAAA,cAACY,YAAAA,IAAAA;YAEV,KAAK;AACH,qBAAO;gBACLvD,MAAM,gBAAA2C,OAAA,cAACa,iBAAAA,IAAAA;gBACPF,aAAa;cACf;UACJ;AAEA,iBAAO;QACT;MACF;MACAG,QAAQ;QACNC,UAAU,CAACD,WAAAA;AACT,kBAAQA,OAAOE,QAAM;YACnB,KAAKC,kBAAiBC,QAAQ;AAC5B,kBAAIjF,SAAS6E,OAAOnC,MAAMM,IAAI;AAC5B,sBAAM3B,OAAOrB,MAAMkF,QAAQ;kBAAEC,QAAQN,OAAOnC,KAAKM;gBAAG,CAAA;AACpD,oBAAIoC,MAAMC,QAAQhE,IAAAA,GAAO;AACvB,wBAAMiE,sBAAsB;uBAAIF,MAAM/D,KAAKkE,SAAS,CAAA;oBAAIC,OAAO,CAACC,KAAkBC,GAAGC,UAAAA;AACnF,0BAAMC,SAASC,MAAKC,OAAM,GAAIzE,KAAKiB,MAAM,GAAGqD,QAAQ,CAAA,CAAA;AACpD,wBAAIC,OAAOL,SAAS,GAAG;AACrBE,0BAAIG,MAAAA,IAAU;oBAChB;AACA,2BAAOH;kBACT,GAAG,CAAC,CAAA;AACJ9F,wBAAMQ,OAAON,cAAc;oBACzB,GAAGyF;oBACH,GAAG3F,MAAMQ,OAAON;kBAClB;gBACF;cACF;AACA;YACF;UACF;QACF;MACF;MACAG,OAAO;QACL+F,SAAS,CAACxF,YAAAA;AAER,gBAAMyF,eAAexF,cAAcD,SAAS0F,iBAAAA;AAE5C,iBAAO;YACLC,gBAAgB;cACdlD,IAAIY;cACJuC,QAAQ,CAAC/E,SAA6BA,KAAK4B,OAAO;cAClDoD,SAAS,MAAM;gBACb;kBACEpD,IAAI;kBACJN,MAAM,YAAA;AACJ,0BAAMsD,cAActF,SAASmE,OAAOwB,SAAS;sBAC3CtB,QAAQuB,cAAaC;sBACrB7D,MAAM;wBACJ8D,SAAS;wBACT9C,WAAW,GAAGE,cAAAA;wBACd6C,kBAAkB;sBACpB;oBACF,CAAA;kBACF;kBACAlF,YAAY;oBACVsB,OAAO;sBAAC;sBAAuB;wBAAE6D,IAAI9C;sBAAe;;oBACpD+C,MAAM,CAACC,UAAqB,gBAAA7C,OAAA,cAAC8C,kBAAoBD,KAAAA;oBACjDE,YAAY;oBACZtF,YAAY;sBACVO,OAAO;sBACPC,SAAS;oBACX;kBACF;gBACF;;YAEJ,CAAA;;QAEJ;MACF;MACA+E;IACF;EACF;AACF;;;AW/PA,IAAA,cAAeC;",
|
|
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":1128,"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":5792,"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":47568,"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":81701},"packages/plugins/plugin-navtree/dist/lib/browser/index.mjs":{"imports":[{"path":"packages/plugins/plugin-navtree/dist/lib/browser/chunk-PSVCPL4T.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":1454},"packages/plugins/plugin-navtree/src/components/NavTreeContainer.tsx":{"bytesInOutput":10750},"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":39765},"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-PSVCPL4T.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-PSVCPL4T.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":523},"packages/plugins/plugin-navtree/dist/lib/browser/chunk-PSVCPL4T.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":"
|
|
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":"
|
|
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":"
|
|
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;
|
|
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":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../../src/meta.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,cAAc,4BAA4B,CAAC;AAGxD,eAAO,MAAM,WAAW,eAAe,CAAC;;;;AAExC,wBAEE"}
|
|
@@ -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
|
|
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.13-
|
|
3
|
+
"version": "0.6.13-staging.1e988a3",
|
|
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.13-
|
|
35
|
-
"@dxos/app-graph": "0.6.13-
|
|
36
|
-
"@dxos/
|
|
37
|
-
"@dxos/
|
|
38
|
-
"@dxos/echo-schema": "0.6.13-
|
|
39
|
-
"@dxos/keyboard": "0.6.13-
|
|
40
|
-
"@dxos/local-storage": "0.6.13-
|
|
41
|
-
"@dxos/log": "0.6.13-
|
|
42
|
-
"@dxos/plugin-client": "0.6.13-
|
|
43
|
-
"@dxos/plugin-
|
|
44
|
-
"@dxos/plugin-
|
|
45
|
-
"@dxos/plugin-theme": "0.6.13-
|
|
46
|
-
"@dxos/react-
|
|
47
|
-
"@dxos/
|
|
48
|
-
"@dxos/
|
|
49
|
-
"@dxos/react-ui-mosaic": "0.6.13-
|
|
50
|
-
"@dxos/react-ui-
|
|
51
|
-
"@dxos/react-ui-
|
|
52
|
-
"@dxos/util": "0.6.13-
|
|
34
|
+
"@dxos/app-framework": "0.6.13-staging.1e988a3",
|
|
35
|
+
"@dxos/app-graph": "0.6.13-staging.1e988a3",
|
|
36
|
+
"@dxos/debug": "0.6.13-staging.1e988a3",
|
|
37
|
+
"@dxos/async": "0.6.13-staging.1e988a3",
|
|
38
|
+
"@dxos/echo-schema": "0.6.13-staging.1e988a3",
|
|
39
|
+
"@dxos/keyboard": "0.6.13-staging.1e988a3",
|
|
40
|
+
"@dxos/local-storage": "0.6.13-staging.1e988a3",
|
|
41
|
+
"@dxos/log": "0.6.13-staging.1e988a3",
|
|
42
|
+
"@dxos/plugin-client": "0.6.13-staging.1e988a3",
|
|
43
|
+
"@dxos/plugin-graph": "0.6.13-staging.1e988a3",
|
|
44
|
+
"@dxos/plugin-observability": "0.6.13-staging.1e988a3",
|
|
45
|
+
"@dxos/plugin-theme": "0.6.13-staging.1e988a3",
|
|
46
|
+
"@dxos/react-ui-deck": "0.6.13-staging.1e988a3",
|
|
47
|
+
"@dxos/protocols": "0.6.13-staging.1e988a3",
|
|
48
|
+
"@dxos/react-client": "0.6.13-staging.1e988a3",
|
|
49
|
+
"@dxos/react-ui-mosaic": "0.6.13-staging.1e988a3",
|
|
50
|
+
"@dxos/react-ui-searchlist": "0.6.13-staging.1e988a3",
|
|
51
|
+
"@dxos/react-ui-navtree": "0.6.13-staging.1e988a3",
|
|
52
|
+
"@dxos/util": "0.6.13-staging.1e988a3"
|
|
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
|
|
61
|
-
"@dxos/
|
|
62
|
-
"@dxos/
|
|
63
|
-
"@dxos/react-ui": "0.6.13-
|
|
64
|
-
"@dxos/
|
|
65
|
-
"@dxos/
|
|
60
|
+
"vite": "^5.3.4",
|
|
61
|
+
"@dxos/random": "0.6.13-staging.1e988a3",
|
|
62
|
+
"@dxos/echo-signals": "0.6.13-staging.1e988a3",
|
|
63
|
+
"@dxos/react-ui": "0.6.13-staging.1e988a3",
|
|
64
|
+
"@dxos/react-ui-theme": "0.6.13-staging.1e988a3",
|
|
65
|
+
"@dxos/storybook-utils": "0.6.13-staging.1e988a3"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
68
68
|
"@phosphor-icons/react": "^2.1.5",
|
|
69
|
-
"react": "
|
|
70
|
-
"react-dom": "
|
|
71
|
-
"@dxos/react-ui": "0.6.13-
|
|
72
|
-
"@dxos/react-ui-theme": "0.6.13-
|
|
69
|
+
"react": "^18.0.0",
|
|
70
|
+
"react-dom": "^18.0.0",
|
|
71
|
+
"@dxos/react-ui": "0.6.13-staging.1e988a3",
|
|
72
|
+
"@dxos/react-ui-theme": "0.6.13-staging.1e988a3"
|
|
73
73
|
},
|
|
74
74
|
"publishConfig": {
|
|
75
75
|
"access": "public"
|
package/src/NavTreePlugin.tsx
CHANGED
|
@@ -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:
|
|
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,
|
|
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
|
|
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,10 +33,10 @@ export const NavBarStart = ({ activeNode, popoverAnchorId }: { activeNode: Node;
|
|
|
31
33
|
<>
|
|
32
34
|
<ActionRoot>
|
|
33
35
|
<PlankHeading.ActionsMenu
|
|
34
|
-
|
|
36
|
+
Icon={Icon}
|
|
35
37
|
attendableId={activeNode.id}
|
|
36
38
|
triggerLabel={menuTriggerLabel}
|
|
37
|
-
actions={
|
|
39
|
+
actions={actions}
|
|
38
40
|
onAction={(action) =>
|
|
39
41
|
typeof action.data === 'function' && action.data({ node: action as Node, caller: TREE_ITEM_MAIN_HEADING })
|
|
40
42
|
}
|
|
@@ -4,10 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { type ReactNode, useCallback, useMemo } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
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,
|
|
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
|
-
|
|
55
|
-
attended: string[];
|
|
61
|
+
attended: Set<string>;
|
|
56
62
|
popoverAnchorId?: string;
|
|
57
63
|
}) => {
|
|
58
64
|
const { closeNavigationSidebar } = useSidebars(NAVTREE_PLUGIN);
|
|
@@ -90,12 +96,19 @@ export const NavTreeContainer = ({
|
|
|
90
96
|
await dispatch({
|
|
91
97
|
action: NavigationAction.OPEN,
|
|
92
98
|
data: {
|
|
93
|
-
activeParts:
|
|
94
|
-
|
|
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
|
|
|
110
|
+
await dispatch({ action: LayoutAction.SCROLL_INTO_VIEW, data: { id: node.id } });
|
|
111
|
+
|
|
99
112
|
const defaultAction = actions?.find((action) => action.properties?.disposition === 'default');
|
|
100
113
|
if (isAction(defaultAction)) {
|
|
101
114
|
void (defaultAction.data as () => void)();
|
|
@@ -332,37 +345,34 @@ export const NavTreeContainer = ({
|
|
|
332
345
|
}, [onOpenItemIdsChange, openItemIds]);
|
|
333
346
|
|
|
334
347
|
return (
|
|
335
|
-
<
|
|
336
|
-
<
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
loadDescendents={loadDescendents}
|
|
361
|
-
/>
|
|
362
|
-
</div>
|
|
363
|
-
<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
|
+
/>
|
|
364
373
|
</div>
|
|
365
|
-
|
|
366
|
-
|
|
374
|
+
<NavTreeFooter />
|
|
375
|
+
</div>
|
|
376
|
+
</ElevationProvider>
|
|
367
377
|
);
|
|
368
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,
|
|
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 {
|
|
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=
|
|
32
|
+
<Icon size={size} className='cursor-pointer' {...props} />
|
|
33
33
|
</div>
|
|
34
34
|
);
|
|
35
35
|
};
|
package/src/meta.ts
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type PluginMeta } from '@dxos/app-framework';
|
|
6
|
-
|
|
7
5
|
export const NAVTREE_PLUGIN = 'dxos.org/plugin/navtree';
|
|
8
6
|
|
|
9
7
|
// TODO(wittjosiah): Factor out.
|
|
@@ -11,4 +9,4 @@ export const KEY_BINDING = 'KeyBinding';
|
|
|
11
9
|
|
|
12
10
|
export default {
|
|
13
11
|
id: NAVTREE_PLUGIN,
|
|
14
|
-
}
|
|
12
|
+
};
|
|
@@ -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 {
|
|
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
|
-
|
|
22
|
+
registerSignalRuntime();
|
|
23
23
|
|
|
24
24
|
const createGraph = () => {
|
|
25
25
|
const graph = new Graph();
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/meta.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const NAVTREE_PLUGIN = 'dxos.org/plugin/navtree';\n\n// TODO(wittjosiah): Factor out.\nexport const KEY_BINDING = 'KeyBinding';\n\nexport default {\n id: NAVTREE_PLUGIN,\n} satisfies PluginMeta;\n"],
|
|
5
|
-
"mappings": ";AAMO,IAAMA,iBAAiB;AAGvB,IAAMC,cAAc;AAE3B,IAAA,eAAe;EACbC,IAAIF;AACN;",
|
|
6
|
-
"names": ["NAVTREE_PLUGIN", "KEY_BINDING", "id"]
|
|
7
|
-
}
|