@dxos/plugin-navtree 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{app-graph-builder-BCXDEDN7.mjs → app-graph-builder-D7NLWZLU.mjs} +5 -4
- package/dist/lib/browser/app-graph-builder-D7NLWZLU.mjs.map +7 -0
- package/dist/lib/browser/{chunk-LPAREX6J.mjs → chunk-5VLWX4PK.mjs} +2 -2
- package/dist/lib/browser/{chunk-6AZKY5WZ.mjs → chunk-BNGPXJB7.mjs} +46 -34
- package/dist/lib/browser/chunk-BNGPXJB7.mjs.map +7 -0
- package/dist/lib/browser/chunk-E6MZBCU5.mjs +19 -0
- package/dist/lib/browser/chunk-E6MZBCU5.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3 -3
- package/dist/lib/browser/{intent-resolver-G6COWRWW.mjs → intent-resolver-YUVXVPHG.mjs} +4 -4
- package/dist/lib/browser/intent-resolver-YUVXVPHG.mjs.map +7 -0
- package/dist/lib/browser/{keyboard-AHSAWKXA.mjs → keyboard-YYTYJW4M.mjs} +2 -2
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-FOCB4Y5R.mjs → react-surface-7OUBD57A.mjs} +4 -4
- package/dist/lib/browser/{state-2Q623V7U.mjs → state-EUSVT6BI.mjs} +3 -3
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +12 -9
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts +0 -1
- package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeContainer.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +1 -1
- package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
- package/dist/types/src/experimental/Tree.stories.d.ts +0 -3
- package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/testing/generator.d.ts +1 -1
- package/dist/types/src/testing/generator.d.ts.map +1 -1
- package/dist/types/src/types.d.ts +4 -3
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +38 -39
- package/src/capabilities/app-graph-builder.ts +3 -2
- package/src/capabilities/intent-resolver.ts +1 -1
- package/src/components/NavTree/NavTree.stories.tsx +56 -45
- package/src/components/NavTreeContainer.tsx +11 -4
- package/src/components/NavTreeItem/NavTreeItemAction.tsx +2 -1
- package/src/components/NavTreeItem/NavTreeItemColumns.tsx +25 -19
- package/src/components/Sidebar/L0Menu.tsx +1 -1
- package/src/components/Sidebar/L1Panel.tsx +6 -7
- package/src/experimental/Tree.stories.tsx +2 -5
- package/src/meta.ts +5 -0
- package/src/testing/app-graph-builder.ts +9 -8
- package/src/testing/generator.ts +2 -2
- package/src/types.ts +4 -3
- package/dist/lib/browser/app-graph-builder-BCXDEDN7.mjs.map +0 -7
- package/dist/lib/browser/chunk-6AZKY5WZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-ZENLR72O.mjs +0 -14
- package/dist/lib/browser/chunk-ZENLR72O.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-G6COWRWW.mjs.map +0 -7
- /package/dist/lib/browser/{chunk-LPAREX6J.mjs.map → chunk-5VLWX4PK.mjs.map} +0 -0
- /package/dist/lib/browser/{keyboard-AHSAWKXA.mjs.map → keyboard-YYTYJW4M.mjs.map} +0 -0
- /package/dist/lib/browser/{react-surface-FOCB4Y5R.mjs.map → react-surface-7OUBD57A.mjs.map} +0 -0
- /package/dist/lib/browser/{state-2Q623V7U.mjs.map → state-EUSVT6BI.mjs.map} +0 -0
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import {
|
|
2
2
|
COMMANDS_DIALOG,
|
|
3
3
|
meta
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-E6MZBCU5.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/app-graph-builder.ts
|
|
7
7
|
import { Rx } from "@effect-rx/rx-react";
|
|
8
|
-
import
|
|
8
|
+
import * as Function from "effect/Function";
|
|
9
|
+
import * as Option from "effect/Option";
|
|
9
10
|
import { Capabilities, LayoutAction, contributes, createIntent } from "@dxos/app-framework";
|
|
10
11
|
import { ROOT_ID, createExtension } from "@dxos/plugin-graph";
|
|
11
12
|
var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphBuilder, createExtension({
|
|
12
13
|
id: meta.id,
|
|
13
|
-
actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map(() => [
|
|
14
|
+
actions: (node) => Rx.make((get) => Function.pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map(() => [
|
|
14
15
|
{
|
|
15
16
|
id: COMMANDS_DIALOG,
|
|
16
17
|
data: async () => {
|
|
@@ -42,4 +43,4 @@ var app_graph_builder_default = ((context) => contributes(Capabilities.AppGraphB
|
|
|
42
43
|
export {
|
|
43
44
|
app_graph_builder_default as default
|
|
44
45
|
};
|
|
45
|
-
//# sourceMappingURL=app-graph-builder-
|
|
46
|
+
//# sourceMappingURL=app-graph-builder-D7NLWZLU.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Rx } from '@effect-rx/rx-react';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, LayoutAction, type PluginContext, contributes, createIntent } from '@dxos/app-framework';\nimport { ROOT_ID, createExtension } from '@dxos/plugin-graph';\n\nimport { COMMANDS_DIALOG, meta } from '../meta';\n\nexport default (context: PluginContext) =>\n contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: meta.id,\n actions: (node) =>\n Rx.make((get) =>\n Function.pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: COMMANDS_DIALOG,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n );\n },\n properties: {\n label: ['open commands label', { ns: meta.id }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'meta+k',\n windows: 'ctrl+k',\n },\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n );\n"],
|
|
5
|
+
"mappings": ";;;;;;AAIA,SAASA,UAAU;AACnB,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AAExB,SAASC,cAAcC,cAAkCC,aAAaC,oBAAoB;AAC1F,SAASC,SAASC,uBAAuB;AAIzC,IAAA,6BAAe,CAACC,YACdC,YACEC,aAAaC,iBACbC,gBAAgB;EACdC,IAAIC,KAAKD;EACTE,SAAS,CAACC,SACRC,GAAGC,KAAK,CAACC,QACEC,cACPD,IAAIH,IAAAA,GACGK,eAAQ,CAACL,UAAUA,MAAKH,OAAOS,UAAiBC,YAAKP,KAAAA,IAAeQ,YAAI,CAAA,GACxEC,WAAI,MAAM;IACf;MACEZ,IAAIa;MACJC,MAAM,YAAA;AACJ,cAAM,EAAEC,iBAAiBC,SAAQ,IAAKrB,QAAQsB,cAAcpB,aAAaqB,gBAAgB;AACzF,cAAMF,SACJG,aAAaC,aAAaC,cAAc;UACtCC,MAAM;UACNC,SAASV;UACTW,SAAS;YACPC,YAAY;UACd;QACF,CAAA,CAAA;MAEJ;MACAC,YAAY;QACVC,OAAO;UAAC;UAAuB;YAAEC,IAAI3B,KAAKD;UAAG;;QAC7C6B,MAAM;QACNC,YAAY;UACVC,OAAO;UACPC,SAAS;QACX;MACF;IACF;GACD,GACMC,iBAAU,MAAM,CAAA,CAAE,CAAA,CAAA;AAGjC,CAAA,CAAA;",
|
|
6
|
+
"names": ["Rx", "Function", "Option", "Capabilities", "LayoutAction", "contributes", "createIntent", "ROOT_ID", "createExtension", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "actions", "node", "Rx", "make", "get", "pipe", "flatMap", "ROOT_ID", "some", "none", "map", "COMMANDS_DIALOG", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "options", "blockAlign", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows", "getOrElse"]
|
|
7
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
meta
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-E6MZBCU5.mjs";
|
|
4
4
|
|
|
5
5
|
// src/capabilities/capabilities.ts
|
|
6
6
|
import { defineCapability } from "@dxos/app-framework";
|
|
@@ -12,4 +12,4 @@ var NavTreeCapabilities;
|
|
|
12
12
|
export {
|
|
13
13
|
NavTreeCapabilities
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-5VLWX4PK.mjs.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import {
|
|
2
2
|
NavTreeCapabilities
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-5VLWX4PK.mjs";
|
|
4
4
|
import {
|
|
5
5
|
COMMANDS_DIALOG,
|
|
6
6
|
KEY_BINDING,
|
|
7
7
|
meta
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-E6MZBCU5.mjs";
|
|
9
9
|
|
|
10
10
|
// src/components/CommandsDialog/CommandsDialog.tsx
|
|
11
11
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
|
@@ -227,11 +227,11 @@ import { arrayMove as arrayMove2, byPosition } from "@dxos/util";
|
|
|
227
227
|
|
|
228
228
|
// src/capabilities/index.ts
|
|
229
229
|
import { lazy } from "@dxos/app-framework";
|
|
230
|
-
var AppGraphBuilder = lazy(() => import("./app-graph-builder-
|
|
231
|
-
var IntentResolver = lazy(() => import("./intent-resolver-
|
|
232
|
-
var Keyboard2 = lazy(() => import("./keyboard-
|
|
233
|
-
var ReactSurface = lazy(() => import("./react-surface-
|
|
234
|
-
var State = lazy(() => import("./state-
|
|
230
|
+
var AppGraphBuilder = lazy(() => import("./app-graph-builder-D7NLWZLU.mjs"));
|
|
231
|
+
var IntentResolver = lazy(() => import("./intent-resolver-YUVXVPHG.mjs"));
|
|
232
|
+
var Keyboard2 = lazy(() => import("./keyboard-YYTYJW4M.mjs"));
|
|
233
|
+
var ReactSurface = lazy(() => import("./react-surface-7OUBD57A.mjs"));
|
|
234
|
+
var State = lazy(() => import("./state-EUSVT6BI.mjs"));
|
|
235
235
|
|
|
236
236
|
// src/components/NavTree/NavTree.tsx
|
|
237
237
|
import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking";
|
|
@@ -324,9 +324,7 @@ var UserAccountAvatar = ({ size, userId, hue, emoji, status }) => {
|
|
|
324
324
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-navtree/src/components/Sidebar/L0Menu.tsx";
|
|
325
325
|
var useL0ItemClick = ({ item, parent, path }, type) => {
|
|
326
326
|
const { tab, isCurrent, onSelect, onTabChange } = useNavTreeContext();
|
|
327
|
-
const [isLg] = useMediaQuery("lg"
|
|
328
|
-
ssr: false
|
|
329
|
-
});
|
|
327
|
+
const [isLg] = useMediaQuery("lg");
|
|
330
328
|
return useCallback((event) => {
|
|
331
329
|
switch (type) {
|
|
332
330
|
case "action": {
|
|
@@ -707,7 +705,7 @@ var L0Menu = ({ menuActions, topLevelItems, pinnedItems, userAccountItem, parent
|
|
|
707
705
|
// src/components/Sidebar/L1Panel.tsx
|
|
708
706
|
import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
|
|
709
707
|
import React7, { useCallback as useCallback2, useMemo as useMemo3 } from "react";
|
|
710
|
-
import { IconButton as IconButton2, toLocalizedString as toLocalizedString6, useTranslation as useTranslation7 } from "@dxos/react-ui";
|
|
708
|
+
import { DensityProvider, IconButton as IconButton2, toLocalizedString as toLocalizedString6, useTranslation as useTranslation7 } from "@dxos/react-ui";
|
|
711
709
|
import { Tree } from "@dxos/react-ui-list";
|
|
712
710
|
import { Tabs as Tabs2 } from "@dxos/react-ui-tabs";
|
|
713
711
|
import { hoverableControlItem as hoverableControlItem2, hoverableOpenControlItem as hoverableOpenControlItem2 } from "@dxos/react-ui-theme";
|
|
@@ -775,10 +773,10 @@ var NavTreeItemMonolithicAction = ({ parent, properties: { disabled, caller, tes
|
|
|
775
773
|
label: baseLabel,
|
|
776
774
|
disabled,
|
|
777
775
|
onClick: (event) => {
|
|
776
|
+
event.stopPropagation();
|
|
778
777
|
if (disabled) {
|
|
779
778
|
return;
|
|
780
779
|
}
|
|
781
|
-
event.stopPropagation();
|
|
782
780
|
void invoke?.(caller ? {
|
|
783
781
|
parent,
|
|
784
782
|
caller
|
|
@@ -817,8 +815,8 @@ var NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }) =>
|
|
|
817
815
|
import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
|
|
818
816
|
import React6, { Fragment, memo } from "react";
|
|
819
817
|
import { isAction as isAction2 } from "@dxos/app-graph";
|
|
820
|
-
import {
|
|
821
|
-
var NavTreeItemColumns = /* @__PURE__ */ memo(({ path, item, open
|
|
818
|
+
import { Popover, Treegrid, toLocalizedString as toLocalizedString5, useTranslation as useTranslation6 } from "@dxos/react-ui";
|
|
819
|
+
var NavTreeItemColumns = /* @__PURE__ */ memo(({ path, item, open }) => {
|
|
822
820
|
var _effect = _useSignals6();
|
|
823
821
|
try {
|
|
824
822
|
const { t } = useTranslation6(meta.id);
|
|
@@ -832,15 +830,15 @@ var NavTreeItemColumns = /* @__PURE__ */ memo(({ path, item, open, density = "fi
|
|
|
832
830
|
"list-item",
|
|
833
831
|
"list-item-primary"
|
|
834
832
|
].includes(a.properties?.disposition));
|
|
835
|
-
const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;
|
|
836
833
|
useLoadDescendents(item);
|
|
837
834
|
useLoadDescendents(primaryAction && !isAction2(primaryAction) ? primaryAction : void 0);
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
}, /* @__PURE__ */ React6.createElement("div", {
|
|
835
|
+
const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;
|
|
836
|
+
return /* @__PURE__ */ React6.createElement("div", {
|
|
841
837
|
role: "none",
|
|
842
838
|
className: "contents app-no-drag"
|
|
843
|
-
}, primaryAction?.properties?.disposition === "list-item-primary" && !primaryAction?.properties?.disabled ? /* @__PURE__ */ React6.createElement(
|
|
839
|
+
}, primaryAction?.properties?.disposition === "list-item-primary" && !primaryAction?.properties?.disabled ? /* @__PURE__ */ React6.createElement(Treegrid.Cell, {
|
|
840
|
+
classNames: "contents"
|
|
841
|
+
}, /* @__PURE__ */ React6.createElement(NavTreeItemAction, {
|
|
844
842
|
testId: primaryAction.properties?.testId,
|
|
845
843
|
label: toLocalizedString5(primaryAction.properties?.label, t),
|
|
846
844
|
icon: primaryAction.properties?.icon ?? "ph--placeholder--regular",
|
|
@@ -851,7 +849,11 @@ var NavTreeItemColumns = /* @__PURE__ */ memo(({ path, item, open, density = "fi
|
|
|
851
849
|
] : groupedActions[primaryAction.id],
|
|
852
850
|
menuType: primaryAction.properties?.menuType,
|
|
853
851
|
caller: NAV_TREE_ITEM
|
|
854
|
-
}) : /* @__PURE__ */ React6.createElement(Treegrid.Cell,
|
|
852
|
+
})) : /* @__PURE__ */ React6.createElement(Treegrid.Cell, {
|
|
853
|
+
role: "none"
|
|
854
|
+
}), /* @__PURE__ */ React6.createElement(ActionRoot, null, actions.length > 0 ? /* @__PURE__ */ React6.createElement(Treegrid.Cell, {
|
|
855
|
+
classNames: "contents"
|
|
856
|
+
}, /* @__PURE__ */ React6.createElement(NavTreeItemAction, {
|
|
855
857
|
testId: `navtree.treeItem.actionsLevel${level}`,
|
|
856
858
|
label: t("tree item actions label"),
|
|
857
859
|
icon: "ph--dots-three-vertical--regular",
|
|
@@ -859,7 +861,11 @@ var NavTreeItemColumns = /* @__PURE__ */ memo(({ path, item, open, density = "fi
|
|
|
859
861
|
menuActions: actions,
|
|
860
862
|
menuType: "dropdown",
|
|
861
863
|
caller: NAV_TREE_ITEM
|
|
862
|
-
}) : /* @__PURE__ */ React6.createElement(Treegrid.Cell,
|
|
864
|
+
})) : /* @__PURE__ */ React6.createElement(Treegrid.Cell, {
|
|
865
|
+
role: "none"
|
|
866
|
+
})), ItemEnd && /* @__PURE__ */ React6.createElement(Treegrid.Cell, {
|
|
867
|
+
classNames: "contents"
|
|
868
|
+
}, /* @__PURE__ */ React6.createElement(ItemEnd, {
|
|
863
869
|
node: item,
|
|
864
870
|
open
|
|
865
871
|
})));
|
|
@@ -874,8 +880,8 @@ var L1Panel = ({ open, path, item, currentItemId, onBack }) => {
|
|
|
874
880
|
try {
|
|
875
881
|
const { t } = useTranslation7(meta.id);
|
|
876
882
|
const { isAlternateTree, ...navTreeContext } = useNavTreeContext();
|
|
877
|
-
const { useItems: useItems2 } = navTreeContext;
|
|
878
883
|
const title = toLocalizedString6(item.properties.label, t);
|
|
884
|
+
const { useItems: useItems2 } = navTreeContext;
|
|
879
885
|
const alternateTree = useItems2(item, {
|
|
880
886
|
disposition: "alternate-tree"
|
|
881
887
|
})[0];
|
|
@@ -910,7 +916,9 @@ var L1Panel = ({ open, path, item, currentItemId, onBack }) => {
|
|
|
910
916
|
...!open && {
|
|
911
917
|
inert: true
|
|
912
918
|
}
|
|
913
|
-
}, item.id === currentItemId && /* @__PURE__ */ React7.createElement(
|
|
919
|
+
}, item.id === currentItemId && /* @__PURE__ */ React7.createElement(DensityProvider, {
|
|
920
|
+
density: "fine"
|
|
921
|
+
}, /* @__PURE__ */ React7.createElement(L1PanelHeader, {
|
|
914
922
|
path,
|
|
915
923
|
item,
|
|
916
924
|
currentItemId,
|
|
@@ -920,22 +928,22 @@ var L1Panel = ({ open, path, item, currentItemId, onBack }) => {
|
|
|
920
928
|
className: "overflow-y-auto"
|
|
921
929
|
}, isAlternate ? /* @__PURE__ */ React7.createElement(Tree, {
|
|
922
930
|
...navTreeContext,
|
|
923
|
-
useItems: useAlternateItems,
|
|
924
931
|
id: alternateTree.id,
|
|
925
932
|
root: alternateTree,
|
|
926
933
|
path: alternatePath,
|
|
927
934
|
levelOffset: 5,
|
|
928
935
|
gridTemplateColumns: "[tree-row-start] 1fr min-content min-content min-content [tree-row-end]",
|
|
929
|
-
renderColumns: NavTreeItemColumns
|
|
936
|
+
renderColumns: NavTreeItemColumns,
|
|
937
|
+
useItems: useAlternateItems
|
|
930
938
|
}) : /* @__PURE__ */ React7.createElement(Tree, {
|
|
931
939
|
...navTreeContext,
|
|
932
940
|
id: item.id,
|
|
933
941
|
root: item,
|
|
934
942
|
path,
|
|
935
943
|
levelOffset: 5,
|
|
936
|
-
draggable: true,
|
|
937
944
|
gridTemplateColumns: "[tree-row-start] 1fr min-content min-content min-content [tree-row-end]",
|
|
938
|
-
renderColumns: NavTreeItemColumns
|
|
945
|
+
renderColumns: NavTreeItemColumns,
|
|
946
|
+
draggable: true
|
|
939
947
|
}))));
|
|
940
948
|
} finally {
|
|
941
949
|
_effect.f();
|
|
@@ -1211,9 +1219,7 @@ var useActions2 = (node) => {
|
|
|
1211
1219
|
var NavTreeContainer = /* @__PURE__ */ memo2(({ tab, popoverAnchorId, topbar }) => {
|
|
1212
1220
|
var _effect = _useSignals10();
|
|
1213
1221
|
try {
|
|
1214
|
-
const [isLg] = useMediaQuery2("lg"
|
|
1215
|
-
ssr: false
|
|
1216
|
-
});
|
|
1222
|
+
const [isLg] = useMediaQuery2("lg");
|
|
1217
1223
|
const { dispatchPromise: dispatch } = useIntentDispatcher3();
|
|
1218
1224
|
const { graph } = useAppGraph2();
|
|
1219
1225
|
const { isOpen, isCurrent, isAlternateTree, setItem } = useCapability(NavTreeCapabilities.State);
|
|
@@ -1224,12 +1230,13 @@ var NavTreeContainer = /* @__PURE__ */ memo2(({ tab, popoverAnchorId, topbar })
|
|
|
1224
1230
|
const parentOf = children.length > 0 ? children.map(({ id }) => id) : node.properties.role === "branch" ? [] : void 0;
|
|
1225
1231
|
return {
|
|
1226
1232
|
id: node.id,
|
|
1227
|
-
label: node.properties.label ?? node.id,
|
|
1228
1233
|
parentOf,
|
|
1229
|
-
icon: node.properties.icon,
|
|
1230
1234
|
disabled: node.properties.disabled,
|
|
1231
|
-
|
|
1235
|
+
label: node.properties.label ?? node.id,
|
|
1236
|
+
className: mx3(node.properties.className, node.properties.modified && "italic"),
|
|
1232
1237
|
headingClassName: node.properties.headingClassName,
|
|
1238
|
+
icon: node.properties.icon,
|
|
1239
|
+
iconHue: node.properties.iconHue,
|
|
1233
1240
|
testId: node.properties.testId
|
|
1234
1241
|
};
|
|
1235
1242
|
}, [
|
|
@@ -1281,6 +1288,9 @@ var NavTreeContainer = /* @__PURE__ */ memo2(({ tab, popoverAnchorId, topbar })
|
|
|
1281
1288
|
const canDrop = useCallback3(({ source, target }) => {
|
|
1282
1289
|
return target.item.properties.canDrop?.(source) ?? false;
|
|
1283
1290
|
}, []);
|
|
1291
|
+
const canSelect = useCallback3(({ item }) => {
|
|
1292
|
+
return item.properties.selectable ?? true;
|
|
1293
|
+
}, []);
|
|
1284
1294
|
const handleSelect = useCallback3(({ item: node, path, option }) => {
|
|
1285
1295
|
if (!node.data) {
|
|
1286
1296
|
return;
|
|
@@ -1413,6 +1423,7 @@ var NavTreeContainer = /* @__PURE__ */ memo2(({ tab, popoverAnchorId, topbar })
|
|
|
1413
1423
|
isCurrent,
|
|
1414
1424
|
isOpen,
|
|
1415
1425
|
canDrop,
|
|
1426
|
+
canSelect,
|
|
1416
1427
|
isAlternateTree,
|
|
1417
1428
|
setAlternateTree,
|
|
1418
1429
|
onTabChange: handleTabChange,
|
|
@@ -1430,6 +1441,7 @@ var NavTreeContainer = /* @__PURE__ */ memo2(({ tab, popoverAnchorId, topbar })
|
|
|
1430
1441
|
isCurrent,
|
|
1431
1442
|
isOpen,
|
|
1432
1443
|
canDrop,
|
|
1444
|
+
canSelect,
|
|
1433
1445
|
isAlternateTree,
|
|
1434
1446
|
setAlternateTree,
|
|
1435
1447
|
handleTabChange,
|
|
@@ -1467,4 +1479,4 @@ export {
|
|
|
1467
1479
|
ReactSurface,
|
|
1468
1480
|
State
|
|
1469
1481
|
};
|
|
1470
|
-
//# sourceMappingURL=chunk-
|
|
1482
|
+
//# sourceMappingURL=chunk-BNGPXJB7.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/CommandsDialog/CommandsDialog.tsx", "../../../src/components/CommandsDialog/CommandsTrigger.tsx", "../../../src/util.ts", "../../../src/components/NavTreeContainer.tsx", "../../../src/capabilities/index.ts", "../../../src/components/NavTree/NavTree.tsx", "../../../src/hooks.ts", "../../../src/components/NavTreeContext.tsx", "../../../src/components/NavTreeDocumentTitle.tsx", "../../../src/components/Sidebar/L0Menu.tsx", "../../../src/components/UserAccountAvatar/UserAccountAvatar.tsx", "../../../src/components/Sidebar/L1Panel.tsx", "../../../src/components/NavTreeItem/NavTreeItemAction.tsx", "../../../src/components/NavTreeItem/NavTreeItemColumns.tsx", "../../../src/components/Sidebar/L1Tabs.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { LayoutAction, createIntent, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';\nimport { type ActionLike, isAction, isActionGroup } from '@dxos/app-graph';\nimport { Keyboard, keySymbols } from '@dxos/keyboard';\nimport { useActions } from '@dxos/plugin-graph';\nimport { Button, Dialog, Icon, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { SearchList } from '@dxos/react-ui-searchlist';\nimport {\n cardDialogContent,\n cardDialogHeader,\n cardDialogPaddedOverflow,\n cardDialogSearchListRoot,\n} from '@dxos/react-ui-stack';\nimport { descriptionText, mx } from '@dxos/react-ui-theme';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING, meta } 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(meta.id);\n const [selected, setSelected] = useState<string | undefined>(initial);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n\n // Traverse graph.\n // TODO(burdon): Factor out commonality with shortcut dialog.\n const allActions = useMemo(() => {\n // TODO(burdon): Get from navtree (not keyboard).\n const current = Keyboard.singleton.getCurrentContext();\n const actionMap = new Set<string>();\n const actions: ActionLike[] = [];\n graph.traverse({\n visitor: (node, path) => {\n if (\n (isAction(node) || isActionGroup(node)) &&\n !actionMap.has(node.id) &&\n current.startsWith(path.slice(0, -1).join('/'))\n ) {\n actionMap.add(node.id);\n actions.push(node);\n }\n },\n });\n\n actions.sort((a, b) => {\n return toLocalizedString(a.properties.label, t)\n ?.toLowerCase()\n .localeCompare(toLocalizedString(b.properties.label, t)?.toLowerCase());\n });\n\n return actions;\n }, [graph]);\n\n const group = allActions.find(({ id }) => id === selected);\n const groupActions = useActions(graph, group?.id);\n const actions = isActionGroup(group) ? groupActions : allActions;\n\n return (\n <Dialog.Content classNames={cardDialogContent}>\n <Dialog.Title classNames={cardDialogHeader}>{t('commands dialog title', { ns: meta.id })}</Dialog.Title>\n\n {/* TODO(burdon): BUG: Overscrolls container. */}\n <SearchList.Root label={t('command list input placeholder')} classNames={cardDialogSearchListRoot}>\n <SearchList.Input placeholder={t('command list input placeholder')} />\n <SearchList.Content classNames={cardDialogPaddedOverflow}>\n {actions?.map((action) => {\n const label = toLocalizedString(action.properties.label, t);\n const shortcut =\n typeof action.properties.keyBinding === 'string'\n ? action.properties.keyBinding\n : action.properties.keyBinding?.[getHostPlatform()];\n return (\n <SearchList.Item\n value={label}\n key={action.id}\n onSelect={() => {\n if (action.properties.disabled) {\n return;\n }\n\n if (isActionGroup(action)) {\n setSelected(action.id);\n return;\n }\n\n void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));\n setTimeout(() => {\n const node = graph.getConnections(group?.id ?? action.id, 'inbound')[0];\n void (node && isAction(action) && action.data({ parent: node, caller: KEY_BINDING }));\n });\n }}\n classNames='flex items-center gap-2'\n disabled={action.properties.disabled}\n {...(action.properties?.testId && { 'data-testid': action.properties.testId })}\n >\n <Icon icon={action.properties.icon} size={4} />\n <span className='grow truncate'>{label}</span>\n {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}\n </SearchList.Item>\n );\n })}\n </SearchList.Content>\n </SearchList.Root>\n\n <div role='none' className='pli-cardSpacingInline pbe-cardSpacingBlock'>\n <Dialog.Close asChild>\n <Button classNames='is-full'>{t('close label', { ns: 'os' })}</Button>\n </Dialog.Close>\n </div>\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { Button, Icon, useTranslation } from '@dxos/react-ui';\n\nimport { COMMANDS_DIALOG, meta } from '../../meta';\n\n// TODO(thure): Refactor to be handled by a more appropriate plugin.\nexport const CommandsTrigger = () => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { t } = useTranslation(meta.id);\n return (\n <Button\n classNames='m-1 pli-1 lg:pli-2'\n onClick={() =>\n dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: COMMANDS_DIALOG,\n options: {\n blockAlign: 'start',\n },\n }),\n )\n }\n >\n <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>\n <Icon icon='ph--magnifying-glass--regular' size={5} />\n </Button>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Action, type Node, type ReadableGraph, isActionLike } from '@dxos/app-graph';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type NavTreeItemGraphNode } from './types';\n\nexport const getParent = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return graph.getConnections(node.id, 'inbound').find((n) => n.id === parentId) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: string[],\n persistenceClass: string,\n): NavTreeItemGraphNode | null => {\n if (node.properties.acceptPersistenceClass?.has(persistenceClass)) {\n return node;\n } else {\n const parent = getParent(graph, node, path);\n return parent ? getPersistenceParent(graph, parent, path.slice(0, path.length - 1), persistenceClass) : null;\n }\n};\n\nexport const resolveMigrationOperation = (\n graph: ReadableGraph,\n activeNode: NavTreeItemGraphNode,\n destinationPath: string[],\n destinationRelatedNode?: NavTreeItemGraphNode,\n): 'transfer' | 'copy' | 'reject' => {\n const activeClass = activeNode.properties.persistenceClass;\n if (destinationRelatedNode && activeClass) {\n const persistenceParent = getPersistenceParent(graph, destinationRelatedNode, destinationPath, activeClass);\n if (persistenceParent) {\n const activeKey = activeNode.properties.persistenceKey;\n if (activeKey && persistenceParent?.properties.acceptPersistenceKey) {\n return persistenceParent.properties.acceptPersistenceKey.has(activeKey) &&\n persistenceParent.properties.onTransferStart\n ? 'transfer'\n : persistenceParent.properties.onCopy\n ? 'copy'\n : 'reject';\n } else {\n return 'reject';\n }\n } else {\n return 'reject';\n }\n } else {\n return 'reject';\n }\n};\n\n// TODO(wittjosiah): Move into node implementation?\nexport const sortActions = (actions: Action[]): Action[] =>\n actions.sort((a, b) => {\n if (a.properties.disposition === b.properties.disposition) {\n return 0;\n }\n\n if (a.properties.disposition === 'list-item-primary') {\n return -1;\n }\n\n return 1;\n });\n\nexport const getChildren = (\n graph: ReadableGraph,\n node: NavTreeItemGraphNode,\n path: readonly string[] = [],\n): NavTreeItemGraphNode[] => {\n return graph\n .getConnections(node.id, 'outbound')\n .map((n) => {\n // Break cycles.\n const nextPath = [...path, node.id];\n return nextPath.includes(n.id) ? undefined : (n as NavTreeItemGraphNode);\n })\n .filter(isNonNullable) as NavTreeItemGraphNode[];\n};\n\nexport const l0ItemType = (item: Node<any>) => {\n if (item.properties.disposition === 'collection') {\n return 'collection';\n } else if (isActionLike(item)) {\n return 'action';\n } else if (item.properties.disposition === 'navigation') {\n return 'link';\n } else {\n return 'tab';\n }\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { type Instruction, extractInstruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { untracked } from '@preact/signals-core';\nimport React, { memo, useCallback, useEffect, useMemo } from 'react';\n\nimport {\n LayoutAction,\n Surface,\n createIntent,\n useAppGraph,\n useCapability,\n useIntentDispatcher,\n useLayout,\n} from '@dxos/app-framework';\nimport { type Node, ROOT_ID, type ReadableGraph, isAction, isActionLike } from '@dxos/app-graph';\nimport { PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { useConnections, useActions as useGraphActions } from '@dxos/plugin-graph';\nimport { useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { type TreeData, type TreeItemDataProps, isTreeData } from '@dxos/react-ui-list';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove, byPosition } from '@dxos/util';\n\nimport { NavTreeCapabilities } from '../capabilities';\nimport { meta } from '../meta';\nimport { type FlattenedActions, type NavTreeItemGraphNode } from '../types';\nimport { getChildren, getParent, resolveMigrationOperation } from '../util';\n\nimport { NAV_TREE_ITEM, NavTree } from './NavTree';\nimport { NavTreeContext } from './NavTreeContext';\nimport { type NavTreeContextValue } from './types';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\nconst renderItemEnd = ({ node, open }: { node: Node; open: boolean }) => (\n <Surface role='navtree-item-end' data={{ id: node.id, subject: node.data, open }} limit={1} />\n);\n\nconst getChildrenFilter = (node: Node): node is Node =>\n untracked(\n () => !isActionLike(node) && node.type !== PLANK_COMPANION_TYPE && node.properties.disposition !== 'hidden',\n );\n\nconst filterItems = (node: Node, disposition?: string) => {\n if (!disposition && (node.properties.disposition === 'hidden' || node.properties.disposition === 'alternate-tree')) {\n return false;\n } else if (!disposition) {\n const action = isAction(node);\n return !action || node.properties.disposition === 'item';\n } else {\n return node.properties.disposition === disposition;\n }\n};\n\nconst getItems = (graph: ReadableGraph, node?: Node, disposition?: string) => {\n return graph.getConnections(node?.id ?? ROOT_ID, 'outbound').filter((node) => filterItems(node, disposition));\n};\n\nconst useItems = (node?: Node, options?: { disposition?: string; sort?: boolean }) => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, node?.id ?? ROOT_ID);\n const filtered = connections.filter((node) => filterItems(node, options?.disposition));\n return options?.sort ? filtered.toSorted((a, b) => byPosition(a.properties, b.properties)) : filtered;\n};\n\nconst useActions = (node: Node): FlattenedActions => {\n const { graph } = useAppGraph();\n const actions = useGraphActions(graph, node.id);\n\n return useMemo(\n () =>\n actions.reduce(\n (acc: FlattenedActions, arg) => {\n if (arg.properties.disposition === 'item') {\n return acc;\n }\n\n acc.actions.push(arg);\n if (!isAction(arg)) {\n const actionGroup = graph.getActions(arg.id);\n acc.groupedActions[arg.id] = actionGroup;\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n ),\n [actions],\n );\n};\n\nexport type NavTreeContainerProps = {\n popoverAnchorId?: string;\n topbar?: boolean;\n} & Pick<NavTreeContextValue, 'tab'>;\n\nexport const NavTreeContainer = memo(({ tab, popoverAnchorId, topbar }: NavTreeContainerProps) => {\n const [isLg] = useMediaQuery('lg');\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n const { isOpen, isCurrent, isAlternateTree, setItem } = useCapability(NavTreeCapabilities.State);\n const layout = useLayout();\n const { navigationSidebarState } = useSidebars(meta.id);\n\n const getProps = useCallback(\n (node: Node, path: string[]): TreeItemDataProps => {\n const children = getChildren(graph, node, path).filter(getChildrenFilter);\n const parentOf =\n children.length > 0 ? children.map(({ id }) => id) : node.properties.role === 'branch' ? [] : undefined;\n return {\n id: node.id,\n parentOf,\n disabled: node.properties.disabled,\n label: node.properties.label ?? node.id,\n className: mx(node.properties.className, node.properties.modified && 'italic'), // TODO(burdon): Italic?\n headingClassName: node.properties.headingClassName,\n icon: node.properties.icon,\n iconHue: node.properties.iconHue,\n testId: node.properties.testId,\n };\n },\n [graph],\n );\n\n const loadDescendents = useCallback(\n (node: Node) => {\n graph.expand(node.id, 'outbound');\n // Load one level deeper, which resolves some juddering observed on open/close.\n graph.getConnections(node.id, 'outbound').forEach((child) => {\n graph.expand(child.id, 'outbound');\n });\n },\n [graph],\n );\n\n const handleOpenChange = useCallback(\n ({ item: { id }, path, open }: { item: Node; path: string[]; open: boolean }) => {\n // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.\n setItem(path, 'open', open);\n graph.expand(id, 'outbound');\n },\n [graph],\n );\n\n const handleTabChange = useCallback(\n async (node: NavTreeItemGraphNode) => {\n await dispatch(\n createIntent(LayoutAction.UpdateSidebar, {\n part: 'sidebar',\n options: {\n state:\n node.id === tab\n ? navigationSidebarState === 'expanded'\n ? isLg\n ? 'collapsed'\n : 'closed'\n : 'expanded'\n : 'expanded',\n },\n }),\n );\n\n await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: node.id }));\n\n // Open the first item if the workspace is empty.\n if (layout.active.length === 0) {\n const [item] = getItems(graph, node).filter((node) => !isActionLike(node));\n if (item && item.data) {\n await dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [item.id] }));\n }\n }\n },\n [dispatch, layout.active, tab, navigationSidebarState, isLg],\n );\n\n const canDrop = useCallback(({ source, target }: { source: TreeData; target: TreeData }) => {\n return target.item.properties.canDrop?.(source) ?? false;\n }, []);\n\n const canSelect = useCallback(({ item }: { item: Node }) => {\n return item.properties.selectable ?? true;\n }, []);\n\n const handleSelect = useCallback(\n ({ item: node, path, option }: { item: Node; path: string[]; option: boolean }) => {\n if (!node.data) {\n return;\n }\n\n if (isAction(node)) {\n const [parent] = graph.getConnections(node.id, 'inbound');\n void (parent && node.data({ parent, caller: NAV_TREE_ITEM }));\n return;\n }\n\n const current = isCurrent(path, node);\n if (!current) {\n void dispatch(\n createIntent(LayoutAction.Open, {\n part: 'main',\n subject: [node.id],\n options: { key: node.properties.key },\n }),\n );\n } else if (option) {\n void dispatch(\n createIntent(LayoutAction.Close, { part: 'main', subject: [node.id], options: { state: false } }),\n );\n } else {\n void dispatch(createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: node.id }));\n }\n\n const defaultAction = graph.getActions(node.id).find((action) => action.properties?.disposition === 'default');\n if (isAction(defaultAction)) {\n void (defaultAction.data as () => void)();\n }\n\n if (!isLg) {\n void dispatch(createIntent(LayoutAction.UpdateSidebar, { part: 'sidebar', options: { state: 'closed' } }));\n }\n },\n [graph, dispatch, isCurrent, isLg],\n );\n\n const handleBack = useCallback(\n () => dispatch(createIntent(LayoutAction.RevertWorkspace, { part: 'workspace', options: { revert: true } })),\n [dispatch],\n );\n\n // TODO(wittjosiah): Factor out hook.\n useEffect(() => {\n return monitorForElements({\n canMonitor: ({ source }) => isTreeData(source.data),\n onDrop: ({ location, source }) => {\n // Didn't drop on anything.\n if (!location.current.dropTargets.length) {\n return;\n }\n const target = location.current.dropTargets[0];\n const instruction: Instruction | null = extractInstruction(target.data);\n if (instruction !== null && instruction.type !== 'instruction-blocked') {\n const sourceNode = source.data.item as NavTreeItemGraphNode;\n const targetNode = target.data.item as NavTreeItemGraphNode;\n const sourcePath = source.data.path as string[];\n const targetPath = target.data.path as string[];\n const operation =\n sourcePath.slice(0, -1).join() === targetPath.slice(0, -1).join() && instruction.type !== 'make-child'\n ? 'rearrange'\n : resolveMigrationOperation(graph, sourceNode, targetPath, targetNode);\n const sourceParent = getParent(graph, sourceNode, sourcePath);\n const targetParent = getParent(graph, targetNode, targetPath);\n const sourceItems = getItems(graph, sourceParent);\n const targetItems = getItems(graph, targetParent);\n const sourceIndex = sourceItems.findIndex(({ id }) => id === sourceNode.id);\n const targetIndex = targetItems.findIndex(({ id }) => id === targetNode.id);\n const migrationIndex =\n instruction.type === 'make-child'\n ? undefined\n : instruction.type === 'reorder-below'\n ? targetIndex + 1\n : targetIndex;\n switch (operation) {\n case 'rearrange': {\n const nextItems = sourceItems.map(({ data }) => data);\n arrayMove(nextItems, sourceIndex, targetIndex);\n void sourceParent?.properties.onRearrangeChildren?.(nextItems);\n break;\n }\n case 'copy': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n void target?.properties.onCopy?.(sourceNode, migrationIndex);\n break;\n }\n case 'transfer': {\n const target = instruction.type === 'make-child' ? targetNode : targetParent;\n if (!target?.properties.onTransferStart || !sourceParent?.properties.onTransferEnd) {\n break;\n }\n void target?.properties.onTransferStart(sourceNode, migrationIndex);\n void sourceParent?.properties.onTransferEnd?.(sourceNode, target);\n break;\n }\n }\n }\n },\n });\n }, [graph]);\n\n const setAlternateTree = useCallback(\n (path: string[], open: boolean) => {\n setItem(path, 'alternateTree', open);\n },\n [setItem],\n );\n\n const navTreeContextValue = useMemo(\n () => ({\n useItems,\n tab,\n useActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n canSelect,\n isAlternateTree,\n setAlternateTree,\n onTabChange: handleTabChange,\n onOpenChange: handleOpenChange,\n onSelect: handleSelect,\n onBack: handleBack,\n }),\n [\n tab,\n useActions,\n loadDescendents,\n renderItemEnd,\n popoverAnchorId,\n topbar,\n getProps,\n isCurrent,\n isOpen,\n canDrop,\n canSelect,\n isAlternateTree,\n setAlternateTree,\n handleTabChange,\n handleOpenChange,\n handleSelect,\n handleBack,\n ],\n );\n\n return (\n <NavTreeContext.Provider value={navTreeContextValue}>\n <NavTree id={ROOT_ID} root={graph.root} open={layout.sidebarOpen} />\n </NavTreeContext.Provider>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { lazy } from '@dxos/app-framework';\n\nexport const AppGraphBuilder = lazy(() => import('./app-graph-builder'));\nexport const IntentResolver = lazy(() => import('./intent-resolver'));\nexport const Keyboard = lazy(() => import('./keyboard'));\nexport const ReactSurface = lazy(() => import('./react-surface'));\nexport const State = lazy(() => import('./state'));\n\nexport * from './capabilities';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type TreeProps } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { type NavTreeItemGraphNode } from '../../types';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { L0Menu, L1Tabs, type L1TabsProps } from '../Sidebar';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = Pick<TreeProps<NavTreeItemGraphNode>, 'id' | 'root'> & Pick<L1TabsProps, 'open'>;\n\nexport const NavTree = ({ id, root, ...props }: NavTreeProps) => {\n const { tab, useItems, onBack } = useNavTreeContext();\n const topLevelActions = useItems(root, { disposition: 'menu', sort: true });\n const topLevelCollections = useItems(root, { disposition: 'collection' });\n const topLevelWorkspaces = useItems(root, { disposition: 'workspace' });\n const topLevelNavigation = useItems(root, { disposition: 'navigation' });\n const l0Items = useMemo(\n () => [\n // prettier-ignore\n ...topLevelCollections,\n ...topLevelWorkspaces,\n ...topLevelNavigation,\n ],\n [topLevelCollections, topLevelWorkspaces, topLevelNavigation],\n );\n const pinnedItems = useItems(root, { disposition: 'pin-end', sort: true });\n const userAccountItem = useItems(root, { disposition: 'user-account' })[0];\n const topLevelItems = useMemo(\n () => [\n // prettier-ignore\n ...l0Items,\n ...pinnedItems,\n ...(userAccountItem ? [userAccountItem] : []),\n ],\n [l0Items, pinnedItems, userAccountItem],\n );\n\n useLoadDescendents(root);\n const path = useMemo(() => [id], [id]);\n\n return (\n // TODO(thure): `Tabs.Root` forces all items that should be able to receive focus to use `Tabs.Tab(Primitive)` since\n // it uses RovingFocus and doesn’t support moving focus to an item that is not a tab. Assess whether this situation\n // should change including whether it should motivate a change in the design/taxonomy, or if this means this should\n // not use `react-ui-tabs` at all.\n <Tabs.Root value={tab} orientation='vertical' verticalVariant='stateless' classNames='relative'>\n <L0Menu\n menuActions={topLevelActions}\n topLevelItems={l0Items}\n pinnedItems={pinnedItems}\n userAccountItem={userAccountItem}\n path={path}\n parent={root}\n />\n <L1Tabs topLevelItems={topLevelItems} path={path} currentItemId={tab} onBack={onBack} {...props} />\n </Tabs.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { useNavTreeContext } from './components';\n\nexport const useLoadDescendents = (root?: Node) => {\n const { loadDescendents } = useNavTreeContext();\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n if (root) {\n void loadDescendents?.(root);\n }\n });\n return () => cancelAnimationFrame(frame);\n }, [root]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type NavTreeContextValue } from './types';\n\nexport const NavTreeContext = createContext<NavTreeContextValue | null>(null);\n\nexport const useNavTreeContext = () => useContext(NavTreeContext) ?? raise(new Error('Missing NavTreeContext'));\n", "//\n// Copyright 2023 DXOS.org\n//\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '../meta';\n\nexport const NavTreeDocumentTitle = ({ node }: { node?: Node }) => {\n const { t } = useTranslation(meta.id);\n useEffect(() => {\n document.title = node ? toLocalizedString(node.properties.label, t) : t('current app name', { ns: 'appkit' });\n }, [node?.properties?.label]);\n return null;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';\nimport { draggable, dropTargetForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { preserveOffsetOnSource } from '@atlaskit/pragmatic-drag-and-drop/element/preserve-offset-on-source';\nimport { scrollJustEnoughIntoView } from '@atlaskit/pragmatic-drag-and-drop/element/scroll-just-enough-into-view';\nimport {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\nimport React, {\n type MouseEvent,\n type PropsWithChildren,\n forwardRef,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { invariant } from '@dxos/invariant';\nimport { DxAvatar } from '@dxos/lit-ui/react';\nimport {\n Icon,\n ListItem,\n ScrollArea,\n type ThemedClassName,\n Tooltip,\n toLocalizedString,\n useMediaQuery,\n useTranslation,\n} from '@dxos/react-ui';\nimport { DropdownMenu, type MenuItem, MenuProvider } from '@dxos/react-ui-menu';\nimport type { StackItemRearrangeHandler } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/react-ui-theme';\nimport { arrayMove } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { meta } from '../../meta';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { UserAccountAvatar } from '../UserAccountAvatar';\n\n//\n// L0Item\n//\n\ntype L0ItemData = {\n id: L0ItemProps['item']['id'];\n type: 'l0Item';\n};\n\ntype L0ItemRootProps = {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\ntype L0ItemProps = L0ItemRootProps & {\n item: Node<any>;\n parent?: Node<any>;\n path: string[];\n pinned?: boolean;\n onRearrange?: StackItemRearrangeHandler<L0ItemData>;\n};\n\nconst useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {\n const { tab, isCurrent, onSelect, onTabChange } = useNavTreeContext();\n const [isLg] = useMediaQuery('lg');\n\n return useCallback(\n (event: MouseEvent) => {\n switch (type) {\n case 'action': {\n const {\n data: invoke,\n properties: { caller },\n } = item;\n\n return invoke?.(caller ? { node: parent, caller } : { node: parent });\n }\n\n case 'tab':\n return onTabChange?.(item);\n\n case 'link':\n return onSelect?.({ item, path, current: !isCurrent(path, item), option: event.altKey });\n }\n },\n [item, parent, type, tab, isCurrent, onSelect, onTabChange, isLg],\n );\n};\n\nconst l0Breakpoints: Record<string, string> = {\n lg: 'hidden lg:grid',\n};\n\nconst l0ItemRoot =\n 'group/l0item flex w-full justify-center items-center relative data[type!=\"collection\"]:cursor-pointer app-no-drag dx-focus-ring-group';\n\nconst l0ItemContent = 'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded-sm';\n\nconst L0ItemRoot = forwardRef<HTMLElement, PropsWithChildren<L0ItemRootProps>>(\n ({ item, parent, path, children }, forwardedRef) => {\n const { getProps } = useNavTreeContext();\n const { id, testId } = getProps?.(item, path) ?? {};\n const type = l0ItemType(item);\n const itemPath = useMemo(() => [...path, item.id], [item.id, path]);\n\n const { t } = useTranslation(meta.id);\n const localizedString = toLocalizedString(item.properties.label, t);\n\n const handleClick = useL0ItemClick({ item, parent, path: itemPath }, type);\n const rootProps =\n type === 'tab'\n ? { value: item.id, tabIndex: 0, onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : type !== 'collection'\n ? { onClick: handleClick, 'data-testid': testId, 'data-itemid': id }\n : { onClick: handleClick, role: 'button' };\n\n return (\n <Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>\n <Tabs.TabPrimitive\n {...(rootProps as any)}\n data-type={type}\n className={mx(l0ItemRoot, l0Breakpoints[item.properties.l0Breakpoint])}\n ref={forwardedRef}\n >\n {children}\n </Tabs.TabPrimitive>\n </Tooltip.Trigger>\n );\n },\n);\n\nexport const L0ItemActiveTabIndicator = ({ classNames }: ThemedClassName<{}>) => (\n <div\n role='none'\n className={mx(\n 'hidden group-aria-selected/l0item:block absolute inline-start-0 inset-block-2 is-1 bg-accentSurface rounded-ie',\n classNames,\n )}\n />\n);\n\n// TODO(burdon): Factor out pinned (non-draggable) items.\nconst L0Item = ({ item, parent, path, pinned, onRearrange }: L0ItemProps) => {\n const { t } = useTranslation(meta.id);\n const itemElement = useRef<HTMLElement | null>(null);\n const [closestEdge, setEdge] = useState<Edge | null>(null);\n const localizedString = toLocalizedString(item.properties.label, t);\n const hue = item.properties.hue ?? null;\n\n useLayoutEffect(() => {\n // NOTE(thure): This is copied from StackItem, perhaps this should be DRYed out.\n if (!itemElement.current || !onRearrange) {\n return;\n }\n\n return combine(\n draggable({\n element: itemElement.current,\n getInitialData: () => ({ id: item.id, type: 'l0Item' }) satisfies L0ItemData,\n onGenerateDragPreview: ({ nativeSetDragImage, source, location }) => {\n document.body.setAttribute('data-drag-preview', 'true');\n const element = source.element.querySelector('[data-frame]') as HTMLElement;\n scrollJustEnoughIntoView({ element });\n const { x, y } = preserveOffsetOnSource({ element, input: location.current.input })({\n container: (element.offsetParent ?? document.body) as HTMLElement,\n });\n nativeSetDragImage?.(element, x, y);\n },\n onDragStart: () => {\n document.body.removeAttribute('data-drag-preview');\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'active');\n },\n onDrop: () => {\n itemElement.current!.closest('[data-drag-autoscroll]')?.setAttribute('data-drag-autoscroll', 'idle');\n },\n }),\n dropTargetForElements({\n element: itemElement.current,\n getData: ({ input, element }) => {\n return attachClosestEdge(\n { id: item.id, type: 'l0Item' },\n { input, element, allowedEdges: ['top', 'bottom'] },\n );\n },\n onDragEnter: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDrag: ({ self, source }) => {\n if (source.data.type === self.data.type) {\n setEdge(extractClosestEdge(self.data));\n }\n },\n onDragLeave: () => setEdge(null),\n onDrop: ({ self, source }) => {\n setEdge(null);\n if (source.data.type === self.data.type) {\n onRearrange(source.data as L0ItemData, self.data as L0ItemData, extractClosestEdge(self.data));\n }\n },\n }),\n );\n }, [item, onRearrange]);\n\n return (\n <L0ItemRoot ref={itemElement} item={item} parent={parent} path={path}>\n <div\n role='none'\n data-frame={true}\n {...(hue && { style: { background: `var(--dx-${hue}Surface)` } })}\n className={mx(\n l0ItemContent,\n pinned\n ? 'p-2 group-hover/l0item:bg-activeSurface'\n : 'is-[--l0-avatar-size] bs-[--l0-avatar-size] bg-activeSurface',\n )}\n >\n <ItemAvatar item={item} />\n </div>\n <L0ItemActiveTabIndicator />\n <span id={`${item.id}__label`} className='sr-only'>\n {localizedString}\n </span>\n {closestEdge && <ListItem.DropIndicator edge={closestEdge} />}\n </L0ItemRoot>\n );\n};\n\nconst ItemAvatar = ({ item }: Pick<L0ItemProps, 'item'>) => {\n const { t } = useTranslation(meta.id);\n const type = l0ItemType(item);\n if (item.properties.icon) {\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--dx-${hue}SurfaceText)` } };\n return <Icon icon={item.properties.icon} size={6} {...hueFgStyle} />;\n }\n\n if (type === 'tab' && item.properties.disposition !== 'pin-end') {\n const hue = item.properties.hue ?? null;\n const localizedString = toLocalizedString(item.properties.label, t);\n return <DxAvatar hue={hue} hueVariant='surface' variant='square' size={12} fallback={localizedString} />;\n }\n\n return null;\n};\n\n//\n// L0Collection\n//\n\nconst L0Collection = ({ item, path }: L0ItemProps) => {\n const navTreeContext = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = navTreeContext.useItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n const { id, testId } = navTreeContext.getProps?.(item, path) ?? {};\n\n const handleRearrange = useCallback<StackItemRearrangeHandler<L0ItemData>>(\n (source, target, closestEdge) => {\n invariant(item.properties.onRearrangeChildren);\n const sourceIndex = collectionItems.findIndex((i) => i.id === source.id);\n const targetIndex = collectionItems.findIndex((i) => i.id === target.id);\n const insertIndex =\n source.id === target.id\n ? sourceIndex\n : targetIndex +\n (sourceIndex < targetIndex ? (closestEdge === 'top' ? -1 : 0) : closestEdge === 'bottom' ? 1 : 0);\n const nextOrder = arrayMove([...collectionItems], sourceIndex, insertIndex);\n return item.properties.onRearrangeChildren(nextOrder);\n },\n [collectionItems, item.properties.onRearrangeChildren],\n );\n\n return (\n <div\n role='group'\n className='contents group/l0c'\n aria-labelledby={`${item.id}__label`}\n data-itemid={id}\n data-testid={testId}\n >\n {collectionItems.map((collectionItem) => (\n <L0Item\n key={collectionItem.id}\n item={collectionItem}\n parent={item}\n path={groupPath}\n {...(item.properties.onRearrangeChildren && { onRearrange: handleRearrange })}\n />\n ))}\n </div>\n );\n};\n\n//\n// L0Menu\n//\n\nexport type L0MenuProps = {\n menuActions: MenuItem[];\n topLevelItems: Node<any>[];\n pinnedItems: Node<any>[];\n userAccountItem?: Node<any>;\n parent?: Node<any>;\n path: string[];\n};\n\nexport const L0Menu = ({ menuActions, topLevelItems, pinnedItems, userAccountItem, parent, path }: L0MenuProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <Tabs.Tablist\n classNames={[\n 'group/l0 absolute z-[1] inset-block-0 inline-start-0 rounded-is',\n 'grid grid-cols-[var(--l0-size)] grid-rows-[var(--rail-size)_1fr_min-content_var(--l0-size)] contain-layout',\n '!is-[--l0-size] bg-baseSurface border-ie border-subduedSeparator app-drag pbe-[env(safe-area-inset-bottom)]',\n ]}\n >\n {/* TODO(wittjosiah): Use L0Item trigger. */}\n <MenuProvider>\n <DropdownMenu.Root group={parent} items={menuActions}>\n <Tooltip.Trigger content={t('app menu label')} side='right' asChild>\n <Tabs.TabPrimitive value='options' asChild role='button'>\n <DropdownMenu.Trigger\n data-testid='spacePlugin.addSpace'\n className={mx(l0ItemRoot, 'grid place-items-center dx-focus-ring-group')}\n >\n <div\n role='none'\n className={mx(\n l0ItemContent,\n 'is-[--rail-action] bs-[--rail-action] group-hover/l0item:bg-hoverSurface',\n )}\n >\n <Icon icon='ph--list--regular' size={5} />\n </div>\n </DropdownMenu.Trigger>\n </Tabs.TabPrimitive>\n </Tooltip.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n\n {/* Space list. */}\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <div\n role='none'\n className={mx([\n 'flex flex-col gap-1 pbs-1',\n '[body[data-platform=\"darwin\"]_&]:pbs-[calc(30px+0.25rem)]',\n '[body[data-platform=\"ios\"]_&]:pbs-[max(env(safe-area-inset-top),0.25rem)]',\n ])}\n >\n {topLevelItems.map((item) => {\n if (l0ItemType(item) === 'collection') {\n return <L0Collection key={item.id} item={item} parent={parent} path={path} />;\n } else {\n return <L0Item key={item.id} item={item} parent={parent} path={path} />;\n }\n })}\n </div>\n <ScrollArea.Scrollbar orientation='vertical'>\n <ScrollArea.Thumb />\n </ScrollArea.Scrollbar>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n\n {/* Actions. */}\n <div role='none' className='grid grid-cols-1 auto-rows-[--rail-action] pbs-2'>\n {pinnedItems\n .filter((item) => l0ItemType(item) !== 'collection')\n .map((item) => (\n <L0Item key={item.id} item={item} parent={parent} path={path} pinned />\n ))}\n </div>\n\n {userAccountItem && (\n <div role='none' className='grid app-no-drag'>\n <L0ItemRoot key={userAccountItem.id} item={userAccountItem} parent={parent} path={path}>\n <UserAccountAvatar\n userId={userAccountItem.properties.userId}\n hue={userAccountItem.properties.hue}\n emoji={userAccountItem.properties.emoji}\n status={userAccountItem.properties.status}\n size={10}\n />\n </L0ItemRoot>\n </div>\n )}\n <div\n role='none'\n className='hidden [body[data-platform=\"darwin\"]_&]:block absolute block-start-0 is-[calc(var(--l0-size)-1px)] bs-[calc(40px+0.25rem)]'\n style={{\n background:\n 'linear-gradient(to bottom, var(--dx-sidebarSurface) 0%, var(--dx-sidebarSurface) 70%, transparent 100%)',\n }}\n />\n </Tabs.Tablist>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Avatar, type AvatarStatus, type Size } from '@dxos/react-ui';\nimport { hexToFallback } from '@dxos/util';\n\nimport { L0ItemActiveTabIndicator } from '../Sidebar';\n\nexport type UserAccountAvatarProps = {\n size?: Size;\n userId?: string;\n hue?: string;\n emoji?: string;\n status?: AvatarStatus;\n};\n\nexport const UserAccountAvatar = ({ size, userId, hue, emoji, status }: UserAccountAvatarProps) => {\n const fallbackValue = hexToFallback(userId ?? '0');\n\n return (\n <>\n <L0ItemActiveTabIndicator classNames='inset-block-6' />\n <div\n className='grid place-items-center dx-focus-ring-group-indicator rounded-full'\n data-joyride='welcome/account'\n >\n <Avatar.Root>\n <Avatar.Content\n variant='circle'\n size={size ?? 12}\n status={status ?? 'active'}\n hue={hue || fallbackValue.hue}\n fallback={emoji || fallbackValue.emoji}\n data-testid='treeView.userAccount'\n />\n </Avatar.Root>\n </div>\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { DensityProvider, IconButton, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tree } from '@dxos/react-ui-list';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { NavTreeItemColumns } from '../NavTreeItem';\n\nexport type L1PanelProps = {\n open?: boolean;\n path: string[];\n item: Node<any>;\n currentItemId: string;\n onBack?: () => void;\n};\n\n/**\n * Space or settings panel.\n */\nexport const L1Panel = ({ open, path, item, currentItemId, onBack }: L1PanelProps) => {\n const { t } = useTranslation(meta.id);\n const { isAlternateTree, ...navTreeContext } = useNavTreeContext();\n const title = toLocalizedString(item.properties.label, t);\n\n // TODO(wittjosiah): Support multiple alternate trees.\n const { useItems } = navTreeContext;\n const alternateTree = useItems(item, { disposition: 'alternate-tree' })[0];\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const isAlternate = isAlternateTree?.(alternatePath, item) ?? false;\n const useAlternateItems = useCallback(\n (node?: Node, { disposition }: { disposition?: string } = {}) => {\n // TODO(wittjosiah): Sorting is expensive, limit to necessary items for now.\n return useItems(node, { disposition, sort: node?.id === alternateTree.id });\n },\n [alternateTree, useItems],\n );\n\n return (\n <Tabs.Tabpanel\n key={item.id}\n value={item.id}\n classNames={[\n 'absolute inset-block-0 inline-end-0',\n 'is-[calc(100%-var(--l0-size))] lg:is-[--l1-size] grid-cols-1 grid-rows-[var(--rail-size)_1fr]',\n 'pbs-[env(safe-area-inset-top)]',\n item.id === currentItemId && 'grid',\n ]}\n tabIndex={-1}\n aria-label={title}\n {...(!open && { inert: true })}\n >\n {item.id === currentItemId && (\n <DensityProvider density='fine'>\n <L1PanelHeader path={path} item={item} currentItemId={currentItemId} onBack={onBack} />\n <div role='none' className='overflow-y-auto'>\n {isAlternate ? (\n <Tree\n {...navTreeContext}\n id={alternateTree.id}\n root={alternateTree}\n path={alternatePath}\n levelOffset={5}\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n useItems={useAlternateItems}\n />\n ) : (\n <Tree\n {...navTreeContext}\n id={item.id}\n root={item}\n path={path}\n levelOffset={5}\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n renderColumns={NavTreeItemColumns}\n draggable\n />\n )}\n </div>\n </DensityProvider>\n )}\n </Tabs.Tabpanel>\n );\n};\n\n/**\n * Header row.\n */\nconst L1PanelHeader = ({ item, path, onBack }: L1PanelProps) => {\n const { t } = useTranslation(meta.id);\n const { isAlternateTree, setAlternateTree, ...navTreeContext } = useNavTreeContext();\n const title = toLocalizedString(item.properties.label, t);\n\n // TODO(wittjosiah): Support multiple alternate trees.\n const alternateTree = navTreeContext.useItems(item, { disposition: 'alternate-tree' })[0];\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const isAlternate = isAlternateTree?.(alternatePath, item) ?? false;\n const backCapable = item.id.startsWith('!') || isAlternate;\n\n const handleOpen = useCallback(() => {\n setAlternateTree?.(alternatePath, true);\n }, [alternatePath, setAlternateTree]);\n\n const handleBack = useCallback(() => {\n if (isAlternate) {\n setAlternateTree?.(alternatePath, false);\n } else {\n onBack?.();\n }\n }, [isAlternate, alternatePath, setAlternateTree, onBack]);\n\n // TODO(burdon): Reuse same grid as tree?\n return (\n <div className='flex is-full items-center border-be border-subduedSeparator app-drag density-coarse'>\n <div className='is-6' />\n <h2 className='flex-1 truncate min-is-0'>{title}</h2>\n {(backCapable && (\n <IconButton\n variant='ghost'\n icon='ph--arrow-u-down-left--regular'\n iconOnly\n size={5}\n label={t('button back')}\n classNames={[hoverableControlItem, hoverableOpenControlItem, 'pointer-fine:pli-1']}\n onClick={handleBack}\n />\n )) ||\n (alternateTree && !isAlternate && (\n <IconButton\n data-testid='treeView.alternateTreeButton'\n variant='ghost'\n icon={alternateTree.properties.icon ?? 'ph--placeholder--regular'}\n iconOnly\n size={5}\n label={toLocalizedString(alternateTree.properties.label ?? alternateTree.id, t)}\n classNames={[hoverableControlItem, hoverableOpenControlItem, 'pointer-fine:pli-1']}\n onClick={handleOpen}\n />\n ))}\n <NavTreeItemColumns open path={path} item={item} density='coarse' />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Action, type Node } from '@dxos/app-graph';\nimport { IconButton, toLocalizedString, useDensityContext, useTranslation } from '@dxos/react-ui';\nimport { DropdownMenu, type MenuItem, MenuProvider } from '@dxos/react-ui-menu';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\nimport { type ActionProperties } from '../../types';\n\nexport type NavTreeItemActionMenuProps = ActionProperties & {\n parent: Node;\n caller?: string;\n monolithic?: boolean;\n menuActions?: Action[];\n};\n\nconst fallbackIcon = 'ph--placeholder--regular';\n\nconst fineActionButtonProps = {\n size: 4 as const,\n density: 'fine' as const,\n};\nconst coarseActionButtonProps = {\n size: 5 as const,\n density: 'coarse' as const,\n};\n\nexport const NavTreeItemActionDropdownMenu = ({\n parent,\n label,\n icon,\n testId,\n menuActions,\n caller,\n}: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(meta.id);\n const density = useDensityContext();\n return (\n <MenuProvider>\n <DropdownMenu.Root group={parent} items={menuActions as MenuItem[]} caller={caller}>\n <DropdownMenu.Trigger asChild>\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n classNames={['shrink-0 pli-2 pointer-fine:pli-1', hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon={icon ?? fallbackIcon}\n iconOnly\n label={toLocalizedString(label, t)}\n data-testid={testId}\n />\n </DropdownMenu.Trigger>\n </DropdownMenu.Root>\n </MenuProvider>\n );\n};\n\nexport const NavTreeItemMonolithicAction = ({\n parent,\n properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },\n data: invoke,\n baseLabel,\n}: Action & { parent: Node; onAction?: (action: Action) => void; baseLabel: string }) => {\n const density = useDensityContext();\n return (\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n variant={variant}\n classNames={[\n 'shrink-0',\n hoverableControlItem,\n hoverableOpenControlItem,\n iconOnly ? 'pli-2 pointer-fine:pli-1' : 'p-2 pointer-fine:p-2 mie-1',\n ]}\n icon={icon ?? fallbackIcon}\n iconOnly={iconOnly}\n label={baseLabel}\n disabled={disabled}\n onClick={(event) => {\n event.stopPropagation();\n if (disabled) {\n return;\n }\n\n void invoke?.(caller ? { parent, caller } : { parent });\n }}\n data-testid={testId}\n />\n );\n};\n\nexport const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {\n const { t } = useTranslation(meta.id);\n\n const monolithicAction = menuActions?.length === 1 && menuActions[0];\n const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);\n\n return monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction baseLabel={baseLabel} parent={node} {...menuActions[0]} />\n ) : (\n <NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={node} menuActions={menuActions} />\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, memo } from 'react';\n\nimport { isAction } from '@dxos/app-graph';\nimport { Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { meta } from '../../meta';\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { type NavTreeItemColumnsProps } from '../types';\n\nimport { NavTreeItemAction } from './NavTreeItemAction';\n\nexport const NavTreeItemColumns = memo(({ path, item, open }: NavTreeItemColumnsProps) => {\n const { t } = useTranslation(meta.id);\n const { useActions, renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();\n\n const level = path.length - 2;\n const { actions: _actions, groupedActions } = useActions(item);\n const [primaryAction, ...secondaryActions] = _actions.toSorted((a, _b) =>\n a.properties?.disposition === 'list-item-primary' ? -1 : 1,\n );\n\n const actions = (primaryAction?.properties?.disposition === 'list-item-primary' ? secondaryActions : _actions)\n .flatMap((action) => (isAction(action) ? [action] : []))\n .filter((a) => ['list-item', 'list-item-primary'].includes(a.properties?.disposition));\n\n useLoadDescendents(item);\n useLoadDescendents(primaryAction && !isAction(primaryAction) ? primaryAction : undefined);\n\n const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;\n\n return (\n <div role='none' className='contents app-no-drag'>\n {primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled ? (\n <Treegrid.Cell classNames='contents'>\n <NavTreeItemAction\n testId={primaryAction.properties?.testId}\n label={toLocalizedString(primaryAction.properties?.label, t)}\n icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}\n parent={item}\n monolithic={isAction(primaryAction)}\n menuActions={isAction(primaryAction) ? [primaryAction] : groupedActions[primaryAction.id]}\n menuType={primaryAction.properties?.menuType}\n caller={NAV_TREE_ITEM}\n />\n </Treegrid.Cell>\n ) : (\n <Treegrid.Cell role='none' />\n )}\n <ActionRoot>\n {actions.length > 0 ? (\n <Treegrid.Cell classNames='contents'>\n <NavTreeItemAction\n testId={`navtree.treeItem.actionsLevel${level}`}\n label={t('tree item actions label')}\n icon='ph--dots-three-vertical--regular'\n parent={item}\n menuActions={actions}\n menuType='dropdown'\n caller={NAV_TREE_ITEM}\n />\n </Treegrid.Cell>\n ) : (\n <Treegrid.Cell role='none' />\n )}\n </ActionRoot>\n {ItemEnd && (\n <Treegrid.Cell classNames='contents'>\n <ItemEnd node={item} open={open} />\n </Treegrid.Cell>\n )}\n </div>\n );\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { l0ItemType } from '../../util';\nimport { useNavTreeContext } from '../NavTreeContext';\n\nimport { L1Panel, type L1PanelProps } from './L1Panel';\n\nexport type L1TabsProps = Pick<L1PanelProps, 'open' | 'currentItemId' | 'onBack'> & {\n path: string[];\n topLevelItems: Node<any>[];\n};\n\n/**\n * Each space is an L1 tab.\n */\nexport const L1Tabs = ({ topLevelItems, onBack, ...props }: L1TabsProps) => {\n return (\n <>\n {topLevelItems.map((item) => {\n const type = l0ItemType(item);\n switch (type) {\n case 'tab':\n return <L1Panel key={item.id} item={item} {...props} onBack={onBack} />;\n case 'collection':\n return <L1PanelCollection key={item.id} item={item} {...props} />;\n default:\n return null;\n }\n })}\n </>\n );\n};\n\n/**\n *\n */\nconst L1PanelCollection = ({ item, path, ...props }: L1PanelProps) => {\n const { useItems } = useNavTreeContext();\n useLoadDescendents(item);\n const collectionItems = useItems(item);\n const groupPath = useMemo(() => [...path, item.id], [item.id, path]);\n return (\n <>\n {collectionItems\n .filter((item) => l0ItemType(item) === 'tab')\n .map((item) => (\n <L1Panel key={item.id} item={item} path={groupPath} {...props} />\n ))}\n </>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "useMemo", "useState", "LayoutAction", "createIntent", "useAppGraph", "useIntentDispatcher", "isAction", "isActionGroup", "Keyboard", "keySymbols", "useActions", "Button", "Dialog", "Icon", "toLocalizedString", "useTranslation", "SearchList", "cardDialogContent", "cardDialogHeader", "cardDialogPaddedOverflow", "cardDialogSearchListRoot", "descriptionText", "mx", "getHostPlatform", "CommandsDialogContent", "selected", "initial", "t", "useTranslation", "meta", "id", "setSelected", "useState", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "allActions", "useMemo", "current", "Keyboard", "singleton", "getCurrentContext", "actionMap", "Set", "actions", "traverse", "visitor", "node", "path", "isAction", "isActionGroup", "has", "startsWith", "slice", "join", "add", "push", "sort", "a", "b", "toLocalizedString", "properties", "label", "toLowerCase", "localeCompare", "group", "find", "groupActions", "useActions", "Dialog", "Content", "classNames", "cardDialogContent", "Title", "cardDialogHeader", "ns", "SearchList", "Root", "cardDialogSearchListRoot", "Input", "placeholder", "cardDialogPaddedOverflow", "map", "action", "shortcut", "keyBinding", "getHostPlatform", "Item", "value", "key", "onSelect", "disabled", "createIntent", "LayoutAction", "UpdateDialog", "part", "options", "state", "setTimeout", "getConnections", "data", "parent", "caller", "KEY_BINDING", "testId", "Icon", "icon", "size", "span", "className", "mx", "descriptionText", "keySymbols", "div", "role", "Close", "asChild", "Button", "React", "LayoutAction", "createIntent", "useIntentDispatcher", "Button", "Icon", "useTranslation", "CommandsTrigger", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "meta", "id", "React", "Button", "classNames", "onClick", "createIntent", "LayoutAction", "UpdateDialog", "part", "subject", "COMMANDS_DIALOG", "options", "blockAlign", "span", "className", "Icon", "icon", "size", "isActionLike", "isNonNullable", "getParent", "graph", "node", "path", "parentId", "length", "getConnections", "id", "find", "n", "getPersistenceParent", "persistenceClass", "properties", "acceptPersistenceClass", "has", "parent", "slice", "resolveMigrationOperation", "activeNode", "destinationPath", "destinationRelatedNode", "activeClass", "persistenceParent", "activeKey", "persistenceKey", "acceptPersistenceKey", "onTransferStart", "onCopy", "sortActions", "actions", "sort", "a", "b", "disposition", "getChildren", "map", "nextPath", "includes", "undefined", "filter", "isNonNullable", "l0ItemType", "item", "isActionLike", "monitorForElements", "extractInstruction", "untracked", "React", "memo", "useCallback", "useEffect", "useMemo", "LayoutAction", "Surface", "createIntent", "useAppGraph", "useCapability", "useIntentDispatcher", "useLayout", "ROOT_ID", "isAction", "isActionLike", "PLANK_COMPANION_TYPE", "useConnections", "useActions", "useGraphActions", "useMediaQuery", "useSidebars", "isTreeData", "mx", "arrayMove", "byPosition", "lazy", "AppGraphBuilder", "lazy", "IntentResolver", "Keyboard", "ReactSurface", "State", "React", "useMemo", "Tabs", "useEffect", "createContext", "useContext", "raise", "NavTreeContext", "createContext", "useNavTreeContext", "useContext", "raise", "Error", "useEffect", "toLocalizedString", "useTranslation", "NavTreeDocumentTitle", "node", "t", "useTranslation", "meta", "id", "useEffect", "document", "title", "toLocalizedString", "properties", "label", "ns", "useLoadDescendents", "root", "loadDescendents", "useNavTreeContext", "useEffect", "frame", "requestAnimationFrame", "cancelAnimationFrame", "combine", "draggable", "dropTargetForElements", "preserveOffsetOnSource", "scrollJustEnoughIntoView", "attachClosestEdge", "extractClosestEdge", "React", "forwardRef", "useCallback", "useLayoutEffect", "useMemo", "useRef", "useState", "invariant", "DxAvatar", "Icon", "ListItem", "ScrollArea", "Tooltip", "toLocalizedString", "useMediaQuery", "useTranslation", "DropdownMenu", "MenuProvider", "Tabs", "mx", "arrayMove", "React", "Avatar", "hexToFallback", "UserAccountAvatar", "size", "userId", "hue", "emoji", "status", "fallbackValue", "hexToFallback", "React", "L0ItemActiveTabIndicator", "classNames", "div", "className", "data-joyride", "Avatar", "Root", "Content", "variant", "fallback", "data-testid", "useL0ItemClick", "item", "parent", "path", "type", "tab", "isCurrent", "onSelect", "onTabChange", "useNavTreeContext", "isLg", "useMediaQuery", "useCallback", "event", "data", "invoke", "properties", "caller", "node", "current", "option", "altKey", "l0Breakpoints", "lg", "l0ItemRoot", "l0ItemContent", "L0ItemRoot", "forwardRef", "children", "forwardedRef", "getProps", "id", "testId", "l0ItemType", "itemPath", "useMemo", "t", "useTranslation", "meta", "localizedString", "toLocalizedString", "label", "handleClick", "rootProps", "value", "tabIndex", "onClick", "role", "React", "Tooltip", "Trigger", "asChild", "delayDuration", "side", "content", "Tabs", "TabPrimitive", "data-type", "className", "mx", "l0Breakpoint", "ref", "L0ItemActiveTabIndicator", "classNames", "div", "L0Item", "pinned", "onRearrange", "itemElement", "useRef", "closestEdge", "setEdge", "useState", "hue", "useLayoutEffect", "combine", "draggable", "element", "getInitialData", "onGenerateDragPreview", "nativeSetDragImage", "source", "location", "document", "body", "setAttribute", "querySelector", "scrollJustEnoughIntoView", "x", "y", "preserveOffsetOnSource", "input", "container", "offsetParent", "onDragStart", "removeAttribute", "closest", "onDrop", "dropTargetForElements", "getData", "attachClosestEdge", "allowedEdges", "onDragEnter", "self", "extractClosestEdge", "onDrag", "onDragLeave", "data-frame", "style", "background", "ItemAvatar", "span", "ListItem", "DropIndicator", "edge", "icon", "hueFgStyle", "color", "Icon", "size", "disposition", "DxAvatar", "hueVariant", "variant", "fallback", "L0Collection", "navTreeContext", "useLoadDescendents", "collectionItems", "useItems", "groupPath", "handleRearrange", "target", "invariant", "onRearrangeChildren", "sourceIndex", "findIndex", "i", "targetIndex", "insertIndex", "nextOrder", "arrayMove", "aria-labelledby", "data-itemid", "data-testid", "map", "collectionItem", "key", "L0Menu", "menuActions", "topLevelItems", "pinnedItems", "userAccountItem", "Tablist", "MenuProvider", "DropdownMenu", "Root", "group", "items", "ScrollArea", "Viewport", "Scrollbar", "orientation", "Thumb", "filter", "UserAccountAvatar", "userId", "emoji", "status", "React", "useCallback", "useMemo", "DensityProvider", "IconButton", "toLocalizedString", "useTranslation", "Tree", "Tabs", "hoverableControlItem", "hoverableOpenControlItem", "React", "IconButton", "toLocalizedString", "useDensityContext", "useTranslation", "DropdownMenu", "MenuProvider", "hoverableControlItem", "hoverableOpenControlItem", "fallbackIcon", "fineActionButtonProps", "size", "density", "coarseActionButtonProps", "NavTreeItemActionDropdownMenu", "parent", "label", "icon", "testId", "menuActions", "caller", "t", "useTranslation", "meta", "id", "useDensityContext", "React", "MenuProvider", "DropdownMenu", "Root", "group", "items", "Trigger", "asChild", "IconButton", "classNames", "hoverableControlItem", "hoverableOpenControlItem", "variant", "iconOnly", "toLocalizedString", "data-testid", "NavTreeItemMonolithicAction", "properties", "disabled", "data", "invoke", "baseLabel", "onClick", "event", "stopPropagation", "NavTreeItemAction", "monolithic", "node", "props", "monolithicAction", "length", "React", "Fragment", "memo", "isAction", "Popover", "Treegrid", "toLocalizedString", "useTranslation", "NavTreeItemColumns", "memo", "path", "item", "open", "t", "useTranslation", "meta", "id", "useActions", "renderItemEnd", "ItemEnd", "popoverAnchorId", "useNavTreeContext", "level", "length", "actions", "_actions", "groupedActions", "primaryAction", "secondaryActions", "toSorted", "a", "_b", "properties", "disposition", "flatMap", "action", "isAction", "filter", "includes", "useLoadDescendents", "undefined", "ActionRoot", "NAV_TREE_ITEM", "Popover", "Anchor", "Fragment", "React", "div", "role", "className", "disabled", "Treegrid", "Cell", "classNames", "NavTreeItemAction", "testId", "label", "toLocalizedString", "icon", "parent", "monolithic", "menuActions", "menuType", "caller", "node", "L1Panel", "open", "path", "item", "currentItemId", "onBack", "t", "useTranslation", "meta", "id", "isAlternateTree", "navTreeContext", "useNavTreeContext", "title", "toLocalizedString", "properties", "label", "useItems", "alternateTree", "disposition", "alternatePath", "useMemo", "isAlternate", "useAlternateItems", "useCallback", "node", "sort", "React", "Tabs", "Tabpanel", "key", "value", "classNames", "tabIndex", "aria-label", "inert", "DensityProvider", "density", "L1PanelHeader", "div", "role", "className", "Tree", "root", "levelOffset", "gridTemplateColumns", "renderColumns", "NavTreeItemColumns", "draggable", "setAlternateTree", "backCapable", "startsWith", "handleOpen", "handleBack", "h2", "IconButton", "variant", "icon", "iconOnly", "size", "hoverableControlItem", "hoverableOpenControlItem", "onClick", "data-testid", "React", "useMemo", "L1Tabs", "topLevelItems", "onBack", "props", "React", "map", "item", "type", "l0ItemType", "L1Panel", "key", "id", "L1PanelCollection", "path", "useItems", "useNavTreeContext", "useLoadDescendents", "collectionItems", "groupPath", "useMemo", "filter", "NAV_TREE_ITEM", "NavTree", "id", "root", "props", "tab", "useItems", "onBack", "useNavTreeContext", "topLevelActions", "disposition", "sort", "topLevelCollections", "topLevelWorkspaces", "topLevelNavigation", "l0Items", "useMemo", "pinnedItems", "userAccountItem", "topLevelItems", "useLoadDescendents", "path", "React", "Tabs", "Root", "value", "orientation", "verticalVariant", "classNames", "L0Menu", "menuActions", "parent", "L1Tabs", "currentItemId", "NODE_TYPE", "renderItemEnd", "node", "open", "React", "Surface", "role", "data", "id", "subject", "limit", "getChildrenFilter", "untracked", "isActionLike", "type", "PLANK_COMPANION_TYPE", "properties", "disposition", "filterItems", "action", "isAction", "getItems", "graph", "getConnections", "ROOT_ID", "filter", "useItems", "options", "useAppGraph", "connections", "useConnections", "filtered", "sort", "toSorted", "a", "b", "byPosition", "useActions", "actions", "useGraphActions", "useMemo", "reduce", "acc", "arg", "push", "actionGroup", "getActions", "groupedActions", "NavTreeContainer", "memo", "tab", "popoverAnchorId", "topbar", "isLg", "useMediaQuery", "dispatchPromise", "dispatch", "useIntentDispatcher", "isOpen", "isCurrent", "isAlternateTree", "setItem", "useCapability", "NavTreeCapabilities", "State", "layout", "useLayout", "navigationSidebarState", "useSidebars", "meta", "getProps", "useCallback", "path", "children", "getChildren", "parentOf", "length", "map", "undefined", "disabled", "label", "className", "mx", "modified", "headingClassName", "icon", "iconHue", "testId", "loadDescendents", "expand", "forEach", "child", "handleOpenChange", "item", "handleTabChange", "createIntent", "LayoutAction", "UpdateSidebar", "part", "state", "SwitchWorkspace", "active", "Open", "canDrop", "source", "target", "canSelect", "selectable", "handleSelect", "option", "parent", "caller", "NAV_TREE_ITEM", "current", "key", "Close", "ScrollIntoView", "defaultAction", "find", "handleBack", "RevertWorkspace", "revert", "useEffect", "monitorForElements", "canMonitor", "isTreeData", "onDrop", "location", "dropTargets", "instruction", "extractInstruction", "sourceNode", "targetNode", "sourcePath", "targetPath", "operation", "slice", "join", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceItems", "targetItems", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "nextItems", "arrayMove", "onRearrangeChildren", "onCopy", "onTransferStart", "onTransferEnd", "setAlternateTree", "navTreeContextValue", "onTabChange", "onOpenChange", "onSelect", "onBack", "NavTreeContext", "Provider", "value", "NavTree", "root", "sidebarOpen"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/meta.ts
|
|
2
|
+
import { trim } from "@dxos/util";
|
|
3
|
+
var meta = {
|
|
4
|
+
id: "dxos.org/plugin/navtree",
|
|
5
|
+
name: "Navtree",
|
|
6
|
+
description: trim`
|
|
7
|
+
Hierarchical navigation tree for browsing spaces, folders, and objects.
|
|
8
|
+
Provides sidebar navigation with collapsible sections and quick access to workspace content.
|
|
9
|
+
`
|
|
10
|
+
};
|
|
11
|
+
var KEY_BINDING = "KeyBinding";
|
|
12
|
+
var COMMANDS_DIALOG = `${meta.id}/CommandsDialog`;
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
meta,
|
|
16
|
+
KEY_BINDING,
|
|
17
|
+
COMMANDS_DIALOG
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=chunk-E6MZBCU5.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/navtree',\n name: 'Navtree',\n description: trim`\n Hierarchical navigation tree for browsing spaces, folders, and objects.\n Provides sidebar navigation with collapsible sections and quick access to workspace content.\n `,\n};\n\n// TODO(wittjosiah): Factor out.\nexport const KEY_BINDING = 'KeyBinding';\n// TODO(wittjosiah): Factor out.\nexport const COMMANDS_DIALOG = `${meta.id}/CommandsDialog`;\n"],
|
|
5
|
+
"mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;AAIf;AAGO,IAAMC,cAAc;AAEpB,IAAMC,kBAAkB,GAAGN,KAAKC,EAAE;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "trim", "KEY_BINDING", "COMMANDS_DIALOG"]
|
|
7
|
+
}
|
|
@@ -11,15 +11,15 @@ import {
|
|
|
11
11
|
l0ItemType,
|
|
12
12
|
resolveMigrationOperation,
|
|
13
13
|
sortActions
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BNGPXJB7.mjs";
|
|
15
15
|
import {
|
|
16
16
|
NavTreeCapabilities
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-5VLWX4PK.mjs";
|
|
18
18
|
import {
|
|
19
19
|
COMMANDS_DIALOG,
|
|
20
20
|
KEY_BINDING,
|
|
21
21
|
meta
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-E6MZBCU5.mjs";
|
|
23
23
|
|
|
24
24
|
// src/events.ts
|
|
25
25
|
import { Events } from "@dxos/app-framework";
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
NavTreeCapabilities
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import "./chunk-
|
|
3
|
+
} from "./chunk-5VLWX4PK.mjs";
|
|
4
|
+
import "./chunk-E6MZBCU5.mjs";
|
|
5
5
|
|
|
6
6
|
// src/capabilities/intent-resolver.ts
|
|
7
|
-
import
|
|
7
|
+
import * as Schema from "effect/Schema";
|
|
8
8
|
import { Capabilities, LayoutAction, contributes, createResolver } from "@dxos/app-framework";
|
|
9
9
|
import { log } from "@dxos/log";
|
|
10
10
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-navtree/src/capabilities/intent-resolver.ts";
|
|
@@ -44,4 +44,4 @@ var intent_resolver_default = ((context) => contributes(Capabilities.IntentResol
|
|
|
44
44
|
export {
|
|
45
45
|
intent_resolver_default as default
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=intent-resolver-
|
|
47
|
+
//# sourceMappingURL=intent-resolver-YUVXVPHG.mjs.map
|