@dxos/plugin-navtree 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/PLUGIN.mdl +8 -6
  2. package/dist/lib/NavTreePlugin.mjs +40 -0
  3. package/dist/lib/NavTreePlugin.mjs.map +1 -0
  4. package/dist/lib/capabilities.mjs +11 -0
  5. package/dist/lib/capabilities.mjs.map +1 -0
  6. package/dist/lib/chunk-CommandsDialogContent.mjs +100 -0
  7. package/dist/lib/chunk-CommandsDialogContent.mjs.map +1 -0
  8. package/dist/lib/chunk-CommandsTrigger.mjs +27 -0
  9. package/dist/lib/chunk-CommandsTrigger.mjs.map +1 -0
  10. package/dist/lib/chunk-NavTreeDocumentTitle.mjs +17 -0
  11. package/dist/lib/chunk-NavTreeDocumentTitle.mjs.map +1 -0
  12. package/dist/lib/chunk-app-graph-builder.mjs +33 -0
  13. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  14. package/dist/lib/chunk-expose.mjs +31 -0
  15. package/dist/lib/chunk-expose.mjs.map +1 -0
  16. package/dist/lib/chunk-keyboard.mjs +49 -0
  17. package/dist/lib/chunk-keyboard.mjs.map +1 -0
  18. package/dist/lib/{neutral/chunk-IRQMJLRY.mjs → chunk-meta.mjs} +14 -23
  19. package/dist/lib/chunk-meta.mjs.map +1 -0
  20. package/dist/lib/chunk-operation-handler.mjs +11 -0
  21. package/dist/lib/chunk-operation-handler.mjs.map +1 -0
  22. package/dist/lib/chunk-react-surface.mjs +46 -0
  23. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  24. package/dist/lib/chunk-state.mjs +106 -0
  25. package/dist/lib/chunk-state.mjs.map +1 -0
  26. package/dist/lib/chunk-types.mjs +26 -0
  27. package/dist/lib/chunk-types.mjs.map +1 -0
  28. package/dist/lib/chunk-util.mjs +51 -0
  29. package/dist/lib/chunk-util.mjs.map +1 -0
  30. package/dist/lib/components.mjs +723 -0
  31. package/dist/lib/components.mjs.map +1 -0
  32. package/dist/lib/containers.mjs +231 -0
  33. package/dist/lib/containers.mjs.map +1 -0
  34. package/dist/lib/hooks.mjs +162 -0
  35. package/dist/lib/hooks.mjs.map +1 -0
  36. package/dist/lib/index.mjs +4 -0
  37. package/dist/lib/meta.mjs +2 -0
  38. package/dist/lib/operations.mjs +7 -0
  39. package/dist/lib/operations.mjs.map +1 -0
  40. package/dist/lib/plugin.mjs +9 -0
  41. package/dist/lib/plugin.mjs.map +1 -0
  42. package/dist/lib/testing.mjs +397 -0
  43. package/dist/lib/testing.mjs.map +1 -0
  44. package/dist/lib/translations.mjs +17 -0
  45. package/dist/lib/translations.mjs.map +1 -0
  46. package/dist/lib/types.mjs +2 -0
  47. package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
  48. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  49. package/dist/types/src/capabilities/keyboard.d.ts +1 -1
  50. package/dist/types/src/capabilities/nav-tree-view-state.d.ts +12 -0
  51. package/dist/types/src/capabilities/nav-tree-view-state.d.ts.map +1 -0
  52. package/dist/types/src/capabilities/nav-tree-view-state.test.d.ts +2 -0
  53. package/dist/types/src/capabilities/nav-tree-view-state.test.d.ts.map +1 -0
  54. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  55. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  56. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  57. package/dist/types/src/capabilities/state.d.ts +1 -1
  58. package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
  59. package/dist/types/src/components/NavTree/NavTree.stories.d.ts +3 -0
  60. package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
  61. package/dist/types/src/components/NavTreeContext/NavTreeContext.d.ts.map +1 -1
  62. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts +1 -1
  63. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
  64. package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
  65. package/dist/types/src/components/Sidebar/L1Panel.d.ts +5 -2
  66. package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
  67. package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -1
  68. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -1
  69. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts +2 -0
  70. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts.map +1 -1
  71. package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts +4 -1
  72. package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -1
  73. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -1
  74. package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts +5 -2
  75. package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -1
  76. package/dist/types/src/experimental/Tree.d.ts +0 -1
  77. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  78. package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
  79. package/dist/types/src/experimental/visit-nodes.d.ts +3 -0
  80. package/dist/types/src/experimental/visit-nodes.d.ts.map +1 -0
  81. package/dist/types/src/hooks/useActions.d.ts +3 -1
  82. package/dist/types/src/hooks/useActions.d.ts.map +1 -1
  83. package/dist/types/src/translations.d.ts +2 -0
  84. package/dist/types/src/translations.d.ts.map +1 -1
  85. package/dist/types/src/types/NavTreeCapabilities.d.ts +1 -1
  86. package/dist/types/src/types/NavTreeCapabilities.d.ts.map +1 -1
  87. package/dist/types/src/types/schema.d.ts +1 -1
  88. package/dist/types/src/types/schema.d.ts.map +1 -1
  89. package/dist/types/src/util.d.ts.map +1 -1
  90. package/dist/types/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +47 -52
  92. package/src/NavTreePlugin.tsx +3 -1
  93. package/src/capabilities/nav-tree-view-state.test.ts +55 -0
  94. package/src/capabilities/nav-tree-view-state.ts +19 -0
  95. package/src/capabilities/{react-surface.tsx → react-surface.ts} +8 -9
  96. package/src/capabilities/state.ts +47 -38
  97. package/src/components/NavTree/NavTree.stories.tsx +26 -5
  98. package/src/components/NavTree/NavTree.tsx +10 -13
  99. package/src/components/NavTreeItem/NavTreeItemAction.tsx +1 -1
  100. package/src/components/Sidebar/L0Menu.tsx +9 -3
  101. package/src/components/Sidebar/L1Panel.tsx +52 -20
  102. package/src/components/Sidebar/L1Tabs.tsx +6 -0
  103. package/src/containers/CommandsDialogContent/CommandsDialogContent.tsx +49 -44
  104. package/src/containers/CommandsTrigger/CommandsTrigger.tsx +2 -0
  105. package/src/containers/NavTreeContainer/NavTreeContainer.tsx +17 -18
  106. package/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.tsx +2 -0
  107. package/src/experimental/Tree.stories.tsx +2 -1
  108. package/src/experimental/Tree.tsx +2 -18
  109. package/src/experimental/visit-nodes.ts +27 -0
  110. package/src/hooks/useActions.ts +15 -4
  111. package/src/hooks/useNavTreeModel.ts +1 -1
  112. package/src/operations/expose.ts +2 -2
  113. package/src/testing/app-graph-builder.ts +1 -1
  114. package/src/translations.ts +3 -0
  115. package/src/types/NavTreeCapabilities.ts +1 -1
  116. package/src/types/schema.ts +1 -1
  117. package/src/util.ts +7 -9
  118. package/dist/lib/neutral/CommandsDialogContent-TEKBCQ3U.mjs +0 -112
  119. package/dist/lib/neutral/CommandsDialogContent-TEKBCQ3U.mjs.map +0 -7
  120. package/dist/lib/neutral/CommandsTrigger-HGCI22SP.mjs +0 -27
  121. package/dist/lib/neutral/CommandsTrigger-HGCI22SP.mjs.map +0 -7
  122. package/dist/lib/neutral/NavTreeContainer-ICDKC2GI.mjs +0 -12
  123. package/dist/lib/neutral/NavTreeContainer-ICDKC2GI.mjs.map +0 -7
  124. package/dist/lib/neutral/NavTreeDocumentTitle-RMERXZGK.mjs +0 -22
  125. package/dist/lib/neutral/NavTreeDocumentTitle-RMERXZGK.mjs.map +0 -7
  126. package/dist/lib/neutral/NavTreePlugin.mjs +0 -68
  127. package/dist/lib/neutral/NavTreePlugin.mjs.map +0 -7
  128. package/dist/lib/neutral/NavTreePlugin.node.mjs +0 -18
  129. package/dist/lib/neutral/NavTreePlugin.node.mjs.map +0 -7
  130. package/dist/lib/neutral/NavTreePlugin.workerd.mjs +0 -16
  131. package/dist/lib/neutral/NavTreePlugin.workerd.mjs.map +0 -7
  132. package/dist/lib/neutral/app-graph-builder-2DYAIROU.mjs +0 -42
  133. package/dist/lib/neutral/app-graph-builder-2DYAIROU.mjs.map +0 -7
  134. package/dist/lib/neutral/capabilities/index.mjs +0 -17
  135. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  136. package/dist/lib/neutral/chunk-4RN6TH36.mjs +0 -292
  137. package/dist/lib/neutral/chunk-4RN6TH36.mjs.map +0 -7
  138. package/dist/lib/neutral/chunk-BAVI2K7A.mjs +0 -27
  139. package/dist/lib/neutral/chunk-BAVI2K7A.mjs.map +0 -7
  140. package/dist/lib/neutral/chunk-EAN4K6OL.mjs +0 -8
  141. package/dist/lib/neutral/chunk-EAN4K6OL.mjs.map +0 -7
  142. package/dist/lib/neutral/chunk-IRQMJLRY.mjs.map +0 -7
  143. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  144. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  145. package/dist/lib/neutral/chunk-JOSNCOV4.mjs +0 -79
  146. package/dist/lib/neutral/chunk-JOSNCOV4.mjs.map +0 -7
  147. package/dist/lib/neutral/components/index.mjs +0 -814
  148. package/dist/lib/neutral/components/index.mjs.map +0 -7
  149. package/dist/lib/neutral/containers/index.mjs +0 -20
  150. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  151. package/dist/lib/neutral/expose-HIBA2NQG.mjs +0 -38
  152. package/dist/lib/neutral/expose-HIBA2NQG.mjs.map +0 -7
  153. package/dist/lib/neutral/hooks/index.mjs +0 -181
  154. package/dist/lib/neutral/hooks/index.mjs.map +0 -7
  155. package/dist/lib/neutral/index.mjs +0 -34
  156. package/dist/lib/neutral/index.mjs.map +0 -7
  157. package/dist/lib/neutral/keyboard-JM2HCF5N.mjs +0 -58
  158. package/dist/lib/neutral/keyboard-JM2HCF5N.mjs.map +0 -7
  159. package/dist/lib/neutral/meta.json +0 -1
  160. package/dist/lib/neutral/meta.mjs +0 -12
  161. package/dist/lib/neutral/meta.mjs.map +0 -7
  162. package/dist/lib/neutral/operation-handler-ORDOJUL2.mjs +0 -13
  163. package/dist/lib/neutral/operation-handler-ORDOJUL2.mjs.map +0 -7
  164. package/dist/lib/neutral/operations/index.mjs +0 -8
  165. package/dist/lib/neutral/operations/index.mjs.map +0 -7
  166. package/dist/lib/neutral/plugin.mjs +0 -16
  167. package/dist/lib/neutral/plugin.mjs.map +0 -7
  168. package/dist/lib/neutral/react-surface-QPMUEDZX.mjs +0 -48
  169. package/dist/lib/neutral/react-surface-QPMUEDZX.mjs.map +0 -7
  170. package/dist/lib/neutral/state-PDZU4PIP.mjs +0 -126
  171. package/dist/lib/neutral/state-PDZU4PIP.mjs.map +0 -7
  172. package/dist/lib/neutral/testing/index.mjs +0 -439
  173. package/dist/lib/neutral/testing/index.mjs.map +0 -7
  174. package/dist/lib/neutral/translations.mjs +0 -23
  175. package/dist/lib/neutral/translations.mjs.map +0 -7
  176. package/dist/lib/neutral/types/index.mjs +0 -10
  177. package/dist/lib/neutral/types/index.mjs.map +0 -7
  178. package/dist/types/src/NavTreePlugin.node.d.ts +0 -4
  179. package/dist/types/src/NavTreePlugin.node.d.ts.map +0 -1
  180. package/dist/types/src/NavTreePlugin.test.d.ts +0 -2
  181. package/dist/types/src/NavTreePlugin.test.d.ts.map +0 -1
  182. package/dist/types/src/NavTreePlugin.workerd.d.ts +0 -4
  183. package/dist/types/src/NavTreePlugin.workerd.d.ts.map +0 -1
  184. package/src/NavTreePlugin.node.ts +0 -17
  185. package/src/NavTreePlugin.test.ts +0 -27
  186. package/src/NavTreePlugin.workerd.ts +0 -16
  187. /package/src/components/NavTreeContext/{NavTreeContext.tsx → NavTreeContext.ts} +0 -0
@@ -1,292 +0,0 @@
1
- import {
2
- filterItems,
3
- getParent,
4
- resolveMigrationOperation
5
- } from "./chunk-JOSNCOV4.mjs";
6
-
7
- // src/containers/NavTreeContainer/NavTreeContainer.tsx
8
- import { extractInstruction } from "@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item";
9
- import { monitorForElements } from "@atlaskit/pragmatic-drag-and-drop/element/adapter";
10
- import { useAtomValue } from "@effect-atom/atom-react";
11
- import React, { forwardRef, memo, useCallback, useEffect, useMemo, useRef } from "react";
12
- import { Surface, useOperationInvoker } from "@dxos/app-framework/ui";
13
- import { LayoutOperation } from "@dxos/app-toolkit";
14
- import { AppSurface, useAppGraph, useLayout } from "@dxos/app-toolkit/ui";
15
- import { Graph, Node, useActionRunner } from "@dxos/plugin-graph";
16
- import { useMediaQuery, useSidebars } from "@dxos/react-ui";
17
- import { isTreeData } from "@dxos/react-ui-list";
18
- import { arrayMove } from "@dxos/util";
19
- import { NAV_TREE_ITEM, NavTree, NavTreeContext } from "#components";
20
- import { useNavTreeModel, useNavTreeState } from "#hooks";
21
- import { meta } from "#meta";
22
- var NODE_TYPE = "dxos/app-graph/node";
23
- var NavTreeItemEnd = ({ node, open }) => {
24
- const data = useMemo(() => ({
25
- id: node.id,
26
- subject: node.data,
27
- open
28
- }), [
29
- node.id,
30
- node.data,
31
- open
32
- ]);
33
- return /* @__PURE__ */ React.createElement(Surface.Surface, {
34
- type: AppSurface.NavtreeItemEnd,
35
- data,
36
- limit: 1
37
- });
38
- };
39
- var getItems = (graph, node, disposition) => {
40
- return Graph.getConnections(graph, node?.id ?? Node.RootId, "child").filter((node2) => filterItems(node2, disposition));
41
- };
42
- var NavTreeContainer$ = /* @__PURE__ */ forwardRef(({ tab, popoverAnchorId }, forwardedRef) => {
43
- const [isLg] = useMediaQuery("lg");
44
- const { invokePromise } = useOperationInvoker();
45
- const runAction = useActionRunner();
46
- const { graph } = useAppGraph();
47
- const { getItem, setItem } = useNavTreeState();
48
- const layout = useLayout();
49
- const model = useNavTreeModel(Node.RootId);
50
- const { navigationSidebarState } = useSidebars(meta.profile.key);
51
- const latestRef = useRef({
52
- tab,
53
- activeItems: layout.active,
54
- navigationSidebarState,
55
- isLg
56
- });
57
- useEffect(() => {
58
- latestRef.current = {
59
- tab,
60
- activeItems: layout.active,
61
- navigationSidebarState,
62
- isLg
63
- };
64
- }, [
65
- tab,
66
- layout.active,
67
- navigationSidebarState,
68
- isLg
69
- ]);
70
- const handleOpenChange = useCallback(({ item: { id }, path, open }) => {
71
- setItem(path, "open", open);
72
- Graph.expand(graph, id, "child");
73
- }, [
74
- graph,
75
- setItem
76
- ]);
77
- const handleTabChange = useCallback((node) => {
78
- Graph.expand(graph, node.id, "child");
79
- const { tab: activeTab, activeItems, navigationSidebarState: currentSidebarState, isLg: latestIsLg } = latestRef.current;
80
- void invokePromise(LayoutOperation.UpdateSidebar, {
81
- state: node.id === activeTab ? currentSidebarState === "expanded" ? latestIsLg ? "collapsed" : "closed" : "expanded" : "expanded"
82
- });
83
- void invokePromise(LayoutOperation.SwitchWorkspace, {
84
- subject: node.id
85
- });
86
- if (activeItems.length === 0) {
87
- const [item] = getItems(graph, node).filter((node2) => !Node.isActionLike(node2));
88
- if (item && item.data) {
89
- if (layout.mode === "multi") {
90
- void invokePromise(LayoutOperation.Set, {
91
- subject: [
92
- item.id
93
- ]
94
- });
95
- } else {
96
- void invokePromise(LayoutOperation.Open, {
97
- subject: [
98
- item.id
99
- ]
100
- });
101
- }
102
- }
103
- }
104
- }, [
105
- invokePromise,
106
- graph,
107
- layout.mode
108
- ]);
109
- const blockInstruction = useCallback(({ instruction, source, target }) => {
110
- return target.item.properties.blockInstruction?.(source, instruction) ?? false;
111
- }, []);
112
- const canDrop = useCallback(({ source, target }) => {
113
- return target.item.properties.canDrop?.(source) ?? false;
114
- }, []);
115
- const canSelect = useCallback(({ item }) => {
116
- return item.properties.selectable ?? true;
117
- }, []);
118
- const handleSelect = useCallback(({ item: node, path, option }) => {
119
- if (!node.data) {
120
- return;
121
- }
122
- if (Node.isAction(node)) {
123
- const [parent] = Graph.getConnections(graph, node.id, Node.childRelation("inbound"));
124
- if (parent) {
125
- void runAction(node, {
126
- parent,
127
- path,
128
- caller: NAV_TREE_ITEM
129
- });
130
- }
131
- return;
132
- }
133
- const current = getItem(path).current;
134
- if (!current) {
135
- if (layout.mode === "multi") {
136
- void invokePromise(LayoutOperation.Set, {
137
- subject: [
138
- node.id
139
- ]
140
- });
141
- } else {
142
- void invokePromise(LayoutOperation.Open, {
143
- subject: [
144
- node.id
145
- ],
146
- key: node.properties.key
147
- });
148
- }
149
- } else if (option) {
150
- void invokePromise(LayoutOperation.Close, {
151
- subject: [
152
- node.id
153
- ]
154
- });
155
- } else {
156
- void invokePromise(LayoutOperation.ScrollIntoView, {
157
- subject: node.id
158
- });
159
- }
160
- const defaultAction = Graph.getActions(graph, node.id).find((action) => action.properties?.disposition === "default");
161
- if (Node.isAction(defaultAction)) {
162
- void runAction(defaultAction);
163
- }
164
- if (!isLg) {
165
- void invokePromise(LayoutOperation.UpdateSidebar, {
166
- state: "closed"
167
- });
168
- }
169
- }, [
170
- graph,
171
- invokePromise,
172
- getItem,
173
- runAction,
174
- isLg,
175
- layout.mode
176
- ]);
177
- const handleBack = useCallback(() => void invokePromise(LayoutOperation.RevertWorkspace), [
178
- invokePromise
179
- ]);
180
- useEffect(() => {
181
- return monitorForElements({
182
- canMonitor: ({ source }) => isTreeData(source.data),
183
- onDrop: ({ location, source }) => {
184
- if (!location.current.dropTargets.length) {
185
- return;
186
- }
187
- const target = location.current.dropTargets[0];
188
- const instruction = extractInstruction(target.data);
189
- if (instruction !== null && instruction.type !== "instruction-blocked") {
190
- const sourceNode = source.data.item;
191
- const targetNode = target.data.item;
192
- const sourcePath = source.data.path;
193
- const targetPath = target.data.path;
194
- const sameParent = sourcePath.slice(0, -1).join() === targetPath.slice(0, -1).join();
195
- const operation = sameParent && instruction.type !== "make-child" ? "rearrange" : resolveMigrationOperation(graph, sourceNode, targetPath, targetNode);
196
- const sourceParent = getParent(graph, sourceNode, sourcePath);
197
- const targetParent = getParent(graph, targetNode, targetPath);
198
- const sourceItems = getItems(graph, sourceParent);
199
- const targetItems = getItems(graph, targetParent);
200
- const sourceIndex = sourceItems.findIndex(({ id }) => id === sourceNode.id);
201
- const targetIndex = targetItems.findIndex(({ id }) => id === targetNode.id);
202
- const migrationIndex = instruction.type === "make-child" ? void 0 : instruction.type === "reorder-below" ? targetIndex + 1 : targetIndex;
203
- switch (operation) {
204
- case "rearrange": {
205
- const nextItems = sourceItems.map(({ data }) => data);
206
- arrayMove(nextItems, sourceIndex, targetIndex);
207
- void sourceNode.properties.onRearrange?.(nextItems);
208
- break;
209
- }
210
- case "copy": {
211
- const target2 = instruction.type === "make-child" ? targetNode : targetParent;
212
- void target2?.properties.onCopy?.(sourceNode, migrationIndex);
213
- break;
214
- }
215
- case "transfer": {
216
- const target2 = instruction.type === "make-child" ? targetNode : targetParent;
217
- if (!target2?.properties.onTransferStart || target2?.id === sourceParent?.id) {
218
- break;
219
- }
220
- void target2?.properties.onTransferStart(sourceNode, migrationIndex);
221
- void sourceParent?.properties.onTransferEnd?.(sourceNode, target2);
222
- break;
223
- }
224
- }
225
- }
226
- }
227
- });
228
- }, [
229
- graph
230
- ]);
231
- const workspaceChildren = useAtomValue(graph.connections(tab, "child"));
232
- useEffect(() => {
233
- for (const child of workspaceChildren) {
234
- if (child.properties.disposition === "group") {
235
- setItem([
236
- Node.RootId,
237
- tab,
238
- child.id
239
- ], "open", true);
240
- Graph.expand(graph, child.id, "child");
241
- }
242
- }
243
- }, [
244
- workspaceChildren,
245
- tab,
246
- setItem,
247
- graph
248
- ]);
249
- const onItemHover = useCallback(({ item }) => Graph.expand(graph, item.id, "child"), [
250
- graph
251
- ]);
252
- const navTreeContextValue = useMemo(() => ({
253
- model,
254
- popoverAnchorId,
255
- renderItemEnd: NavTreeItemEnd,
256
- blockInstruction,
257
- canDrop,
258
- canSelect,
259
- onBack: handleBack,
260
- onOpenChange: handleOpenChange,
261
- onSelect: handleSelect,
262
- onTabChange: handleTabChange,
263
- onItemHover
264
- }), [
265
- model,
266
- popoverAnchorId,
267
- blockInstruction,
268
- canDrop,
269
- canSelect,
270
- handleBack,
271
- handleOpenChange,
272
- handleSelect,
273
- handleTabChange,
274
- onItemHover
275
- ]);
276
- return /* @__PURE__ */ React.createElement(NavTreeContext.Provider, {
277
- value: navTreeContextValue
278
- }, /* @__PURE__ */ React.createElement(NavTree, {
279
- id: Node.RootId,
280
- root: Graph.getRoot(graph),
281
- tab,
282
- open: layout.sidebarOpen,
283
- ref: forwardedRef
284
- }));
285
- });
286
- var NavTreeContainer = /* @__PURE__ */ memo(NavTreeContainer$);
287
-
288
- export {
289
- NODE_TYPE,
290
- NavTreeContainer
291
- };
292
- //# sourceMappingURL=chunk-4RN6TH36.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/NavTreeContainer/NavTreeContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Instruction, extractInstruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';\nimport { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport React, { forwardRef, memo, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { Surface, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { AppSurface, useAppGraph, useLayout } from '@dxos/app-toolkit/ui';\nimport { Graph, Node, useActionRunner } from '@dxos/plugin-graph';\nimport { useMediaQuery, useSidebars } from '@dxos/react-ui';\nimport { type TreeData, isTreeData } from '@dxos/react-ui-list';\nimport { arrayMove } from '@dxos/util';\n\nimport { NAV_TREE_ITEM, NavTree, NavTreeContext } from '#components';\nimport { useNavTreeModel, useNavTreeState } from '#hooks';\nimport { meta } from '#meta';\nimport { type NavTreeItemGraphNode } from '#types';\n\nimport { filterItems, getParent, resolveMigrationOperation } from '../../util';\n\n// TODO(thure): Is NavTree truly authoritative in this regard?\nexport const NODE_TYPE = 'dxos/app-graph/node';\n\n// TODO(wittjosiah): Avoid using Surface within the navtree, prefer declarative data flow.\nconst NavTreeItemEnd = ({ node, open }: { node: Node.Node; open: boolean }) => {\n const data = useMemo(() => ({ id: node.id, subject: node.data, open }), [node.id, node.data, open]);\n return <Surface.Surface type={AppSurface.NavtreeItemEnd} data={data} limit={1} />;\n};\n\nconst getItems = (graph: Graph.ReadableGraph, node?: Node.Node, disposition?: string) => {\n return Graph.getConnections(graph, node?.id ?? Node.RootId, 'child').filter((node) => filterItems(node, disposition));\n};\n\nexport type NavTreeContainerProps = {\n popoverAnchorId?: string;\n tab: string;\n};\n\nexport const NavTreeContainer$ = forwardRef<HTMLDivElement, NavTreeContainerProps>(\n ({ tab, popoverAnchorId }, forwardedRef) => {\n const [isLg] = useMediaQuery('lg');\n const { invokePromise } = useOperationInvoker();\n const runAction = useActionRunner();\n const { graph } = useAppGraph();\n const { getItem, setItem } = useNavTreeState();\n const layout = useLayout();\n const model = useNavTreeModel(Node.RootId);\n const { navigationSidebarState } = useSidebars(meta.profile.key);\n const latestRef = useRef({\n tab,\n activeItems: layout.active,\n navigationSidebarState,\n isLg,\n });\n\n useEffect(() => {\n latestRef.current = {\n tab,\n activeItems: layout.active,\n navigationSidebarState,\n isLg,\n };\n }, [tab, layout.active, navigationSidebarState, isLg]);\n\n const handleOpenChange = useCallback(\n ({ item: { id }, path, open }: { item: Node.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(graph, id, 'child');\n },\n [graph, setItem],\n );\n\n const handleTabChange = useCallback(\n (node: NavTreeItemGraphNode) => {\n Graph.expand(graph, node.id, 'child');\n\n const {\n tab: activeTab,\n activeItems,\n navigationSidebarState: currentSidebarState,\n isLg: latestIsLg,\n } = latestRef.current;\n void invokePromise(LayoutOperation.UpdateSidebar, {\n state:\n node.id === activeTab\n ? currentSidebarState === 'expanded'\n ? latestIsLg\n ? 'collapsed'\n : 'closed'\n : 'expanded'\n : 'expanded',\n });\n\n void invokePromise(LayoutOperation.SwitchWorkspace, { subject: node.id });\n\n // Open the first item if the workspace is empty.\n if (activeItems.length === 0) {\n const [item] = getItems(graph, node).filter((node) => !Node.isActionLike(node));\n if (item && item.data) {\n if (layout.mode === 'multi') {\n void invokePromise(LayoutOperation.Set, { subject: [item.id] });\n } else {\n void invokePromise(LayoutOperation.Open, { subject: [item.id] });\n }\n }\n }\n },\n [invokePromise, graph, layout.mode],\n );\n\n const blockInstruction = useCallback(\n ({ instruction, source, target }: { instruction: Instruction; source: TreeData; target: TreeData }) => {\n return target.item.properties.blockInstruction?.(source, instruction) ?? false;\n },\n [],\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.Node }) => {\n return item.properties.selectable ?? true;\n }, []);\n\n const handleSelect = useCallback(\n ({ item: node, path, option }: { item: Node.Node; path: string[]; option: boolean }) => {\n if (!node.data) {\n return;\n }\n\n if (Node.isAction(node)) {\n const [parent] = Graph.getConnections(graph, node.id, Node.childRelation('inbound'));\n if (parent) {\n void runAction(node, { parent, path, caller: NAV_TREE_ITEM });\n }\n return;\n }\n\n const current = getItem(path).current;\n if (!current) {\n if (layout.mode === 'multi') {\n void invokePromise(LayoutOperation.Set, { subject: [node.id] });\n } else {\n void invokePromise(LayoutOperation.Open, { subject: [node.id], key: node.properties.key });\n }\n } else if (option) {\n void invokePromise(LayoutOperation.Close, { subject: [node.id] });\n } else {\n void invokePromise(LayoutOperation.ScrollIntoView, { subject: node.id });\n }\n\n const defaultAction = Graph.getActions(graph, node.id).find(\n (action) => action.properties?.disposition === 'default',\n );\n if (Node.isAction(defaultAction)) {\n void runAction(defaultAction);\n }\n\n if (!isLg) {\n void invokePromise(LayoutOperation.UpdateSidebar, { state: 'closed' });\n }\n },\n [graph, invokePromise, getItem, runAction, isLg, layout.mode],\n );\n\n const handleBack = useCallback(() => void invokePromise(LayoutOperation.RevertWorkspace), [invokePromise]);\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 sameParent = sourcePath.slice(0, -1).join() === targetPath.slice(0, -1).join();\n const operation =\n sameParent && 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 sourceNode.properties.onRearrange?.(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 || target?.id === sourceParent?.id) {\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 // Group nodes are always expanded and have no toggle, so they never trigger Graph.expand through\n // user interaction. Watch the workspace's children reactively and mark any group nodes as open\n // so the state machinery treats them consistently with regular open nodes (including on next load).\n const workspaceChildren = useAtomValue(graph.connections(tab, 'child'));\n useEffect(() => {\n for (const child of workspaceChildren) {\n if (child.properties.disposition === 'group') {\n setItem([Node.RootId, tab, child.id], 'open', true);\n Graph.expand(graph, child.id, 'child');\n }\n }\n }, [workspaceChildren, tab, setItem, graph]);\n\n const onItemHover = useCallback(({ item }: { item: Node.Node }) => Graph.expand(graph, item.id, 'child'), [graph]);\n\n const navTreeContextValue = useMemo(\n () => ({\n model,\n popoverAnchorId,\n renderItemEnd: NavTreeItemEnd,\n blockInstruction,\n canDrop,\n canSelect,\n onBack: handleBack,\n onOpenChange: handleOpenChange,\n onSelect: handleSelect,\n onTabChange: handleTabChange,\n onItemHover,\n }),\n [\n model,\n popoverAnchorId,\n blockInstruction,\n canDrop,\n canSelect,\n handleBack,\n handleOpenChange,\n handleSelect,\n handleTabChange,\n onItemHover,\n ],\n );\n\n return (\n <NavTreeContext.Provider value={navTreeContextValue}>\n <NavTree id={Node.RootId} root={Graph.getRoot(graph)} tab={tab} open={layout.sidebarOpen} ref={forwardedRef} />\n </NavTreeContext.Provider>\n );\n },\n);\n\nexport const NavTreeContainer = memo(NavTreeContainer$);\n"],
5
- "mappings": ";;;;;;;AAIA,SAA2BA,0BAA0B;AACrD,SAASC,0BAA0B;AACnC,SAASC,oBAAoB;AAC7B,OAAOC,SAASC,YAAYC,MAAMC,aAAaC,WAAWC,SAASC,cAAc;AAEjF,SAASC,SAASC,2BAA2B;AAC7C,SAASC,uBAAuB;AAChC,SAASC,YAAYC,aAAaC,iBAAiB;AACnD,SAASC,OAAOC,MAAMC,uBAAuB;AAC7C,SAASC,eAAeC,mBAAmB;AAC3C,SAAwBC,kBAAkB;AAC1C,SAASC,iBAAiB;AAE1B,SAASC,eAAeC,SAASC,sBAAsB;AACvD,SAASC,iBAAiBC,uBAAuB;AACjD,SAASC,YAAY;AAMd,IAAMC,YAAY;AAGzB,IAAMC,iBAAiB,CAAC,EAAEC,MAAMC,KAAI,MAAsC;AACxE,QAAMC,OAAOC,QAAQ,OAAO;IAAEC,IAAIJ,KAAKI;IAAIC,SAASL,KAAKE;IAAMD;EAAK,IAAI;IAACD,KAAKI;IAAIJ,KAAKE;IAAMD;GAAK;AAClG,SAAO,sBAAA,cAACK,QAAQA,SAAO;IAACC,MAAMC,WAAWC;IAAgBP;IAAYQ,OAAO;;AAC9E;AAEA,IAAMC,WAAW,CAACC,OAA4BZ,MAAkBa,gBAAAA;AAC9D,SAAOC,MAAMC,eAAeH,OAAOZ,MAAMI,MAAMY,KAAKC,QAAQ,OAAA,EAASC,OAAO,CAAClB,UAASmB,YAAYnB,OAAMa,WAAAA,CAAAA;AAC1G;AAOO,IAAMO,oBAAoBC,2BAC/B,CAAC,EAAEC,KAAKC,gBAAe,GAAIC,iBAAAA;AACzB,QAAM,CAACC,IAAAA,IAAQC,cAAc,IAAA;AAC7B,QAAM,EAAEC,cAAa,IAAKC,oBAAAA;AAC1B,QAAMC,YAAYC,gBAAAA;AAClB,QAAM,EAAElB,MAAK,IAAKmB,YAAAA;AAClB,QAAM,EAAEC,SAASC,QAAO,IAAKC,gBAAAA;AAC7B,QAAMC,SAASC,UAAAA;AACf,QAAMC,QAAQC,gBAAgBtB,KAAKC,MAAM;AACzC,QAAM,EAAEsB,uBAAsB,IAAKC,YAAYC,KAAKC,QAAQC,GAAG;AAC/D,QAAMC,YAAYC,OAAO;IACvBvB;IACAwB,aAAaX,OAAOY;IACpBR;IACAd;EACF,CAAA;AAEAuB,YAAU,MAAA;AACRJ,cAAUK,UAAU;MAClB3B;MACAwB,aAAaX,OAAOY;MACpBR;MACAd;IACF;EACF,GAAG;IAACH;IAAKa,OAAOY;IAAQR;IAAwBd;GAAK;AAErD,QAAMyB,mBAAmBC,YACvB,CAAC,EAAEC,MAAM,EAAEhD,GAAE,GAAIiD,MAAMpD,KAAI,MAAsD;AAE/EgC,YAAQoB,MAAM,QAAQpD,IAAAA;AACtBa,UAAMwC,OAAO1C,OAAOR,IAAI,OAAA;EAC1B,GACA;IAACQ;IAAOqB;GAAQ;AAGlB,QAAMsB,kBAAkBJ,YACtB,CAACnD,SAAAA;AACCc,UAAMwC,OAAO1C,OAAOZ,KAAKI,IAAI,OAAA;AAE7B,UAAM,EACJkB,KAAKkC,WACLV,aACAP,wBAAwBkB,qBACxBhC,MAAMiC,WAAU,IACdd,UAAUK;AACd,SAAKtB,cAAcgC,gBAAgBC,eAAe;MAChDC,OACE7D,KAAKI,OAAOoD,YACRC,wBAAwB,aACtBC,aACE,cACA,WACF,aACF;IACR,CAAA;AAEA,SAAK/B,cAAcgC,gBAAgBG,iBAAiB;MAAEzD,SAASL,KAAKI;IAAG,CAAA;AAGvE,QAAI0C,YAAYiB,WAAW,GAAG;AAC5B,YAAM,CAACX,IAAAA,IAAQzC,SAASC,OAAOZ,IAAAA,EAAMkB,OAAO,CAAClB,UAAS,CAACgB,KAAKgD,aAAahE,KAAAA,CAAAA;AACzE,UAAIoD,QAAQA,KAAKlD,MAAM;AACrB,YAAIiC,OAAO8B,SAAS,SAAS;AAC3B,eAAKtC,cAAcgC,gBAAgBO,KAAK;YAAE7D,SAAS;cAAC+C,KAAKhD;;UAAI,CAAA;QAC/D,OAAO;AACL,eAAKuB,cAAcgC,gBAAgBQ,MAAM;YAAE9D,SAAS;cAAC+C,KAAKhD;;UAAI,CAAA;QAChE;MACF;IACF;EACF,GACA;IAACuB;IAAef;IAAOuB,OAAO8B;GAAK;AAGrC,QAAMG,mBAAmBjB,YACvB,CAAC,EAAEkB,aAAaC,QAAQC,OAAM,MAAoE;AAChG,WAAOA,OAAOnB,KAAKoB,WAAWJ,mBAAmBE,QAAQD,WAAAA,KAAgB;EAC3E,GACA,CAAA,CAAE;AAGJ,QAAMI,UAAUtB,YAAY,CAAC,EAAEmB,QAAQC,OAAM,MAA0C;AACrF,WAAOA,OAAOnB,KAAKoB,WAAWC,UAAUH,MAAAA,KAAW;EACrD,GAAG,CAAA,CAAE;AAEL,QAAMI,YAAYvB,YAAY,CAAC,EAAEC,KAAI,MAAuB;AAC1D,WAAOA,KAAKoB,WAAWG,cAAc;EACvC,GAAG,CAAA,CAAE;AAEL,QAAMC,eAAezB,YACnB,CAAC,EAAEC,MAAMpD,MAAMqD,MAAMwB,OAAM,MAAwD;AACjF,QAAI,CAAC7E,KAAKE,MAAM;AACd;IACF;AAEA,QAAIc,KAAK8D,SAAS9E,IAAAA,GAAO;AACvB,YAAM,CAAC+E,MAAAA,IAAUjE,MAAMC,eAAeH,OAAOZ,KAAKI,IAAIY,KAAKgE,cAAc,SAAA,CAAA;AACzE,UAAID,QAAQ;AACV,aAAKlD,UAAU7B,MAAM;UAAE+E;UAAQ1B;UAAM4B,QAAQC;QAAc,CAAA;MAC7D;AACA;IACF;AAEA,UAAMjC,UAAUjB,QAAQqB,IAAAA,EAAMJ;AAC9B,QAAI,CAACA,SAAS;AACZ,UAAId,OAAO8B,SAAS,SAAS;AAC3B,aAAKtC,cAAcgC,gBAAgBO,KAAK;UAAE7D,SAAS;YAACL,KAAKI;;QAAI,CAAA;MAC/D,OAAO;AACL,aAAKuB,cAAcgC,gBAAgBQ,MAAM;UAAE9D,SAAS;YAACL,KAAKI;;UAAKuC,KAAK3C,KAAKwE,WAAW7B;QAAI,CAAA;MAC1F;IACF,WAAWkC,QAAQ;AACjB,WAAKlD,cAAcgC,gBAAgBwB,OAAO;QAAE9E,SAAS;UAACL,KAAKI;;MAAI,CAAA;IACjE,OAAO;AACL,WAAKuB,cAAcgC,gBAAgByB,gBAAgB;QAAE/E,SAASL,KAAKI;MAAG,CAAA;IACxE;AAEA,UAAMiF,gBAAgBvE,MAAMwE,WAAW1E,OAAOZ,KAAKI,EAAE,EAAEmF,KACrD,CAACC,WAAWA,OAAOhB,YAAY3D,gBAAgB,SAAA;AAEjD,QAAIG,KAAK8D,SAASO,aAAAA,GAAgB;AAChC,WAAKxD,UAAUwD,aAAAA;IACjB;AAEA,QAAI,CAAC5D,MAAM;AACT,WAAKE,cAAcgC,gBAAgBC,eAAe;QAAEC,OAAO;MAAS,CAAA;IACtE;EACF,GACA;IAACjD;IAAOe;IAAeK;IAASH;IAAWJ;IAAMU,OAAO8B;GAAK;AAG/D,QAAMwB,aAAatC,YAAY,MAAM,KAAKxB,cAAcgC,gBAAgB+B,eAAe,GAAG;IAAC/D;GAAc;AAGzGqB,YAAU,MAAA;AACR,WAAO2C,mBAAmB;MACxBC,YAAY,CAAC,EAAEtB,OAAM,MAAOuB,WAAWvB,OAAOpE,IAAI;MAClD4F,QAAQ,CAAC,EAAEC,UAAUzB,OAAM,MAAE;AAE3B,YAAI,CAACyB,SAAS9C,QAAQ+C,YAAYjC,QAAQ;AACxC;QACF;AACA,cAAMQ,SAASwB,SAAS9C,QAAQ+C,YAAY,CAAA;AAC5C,cAAM3B,cAAkC4B,mBAAmB1B,OAAOrE,IAAI;AACtE,YAAImE,gBAAgB,QAAQA,YAAY9D,SAAS,uBAAuB;AACtE,gBAAM2F,aAAa5B,OAAOpE,KAAKkD;AAC/B,gBAAM+C,aAAa5B,OAAOrE,KAAKkD;AAC/B,gBAAMgD,aAAa9B,OAAOpE,KAAKmD;AAC/B,gBAAMgD,aAAa9B,OAAOrE,KAAKmD;AAC/B,gBAAMiD,aAAaF,WAAWG,MAAM,GAAG,EAAC,EAAGC,KAAI,MAAOH,WAAWE,MAAM,GAAG,EAAC,EAAGC,KAAI;AAClF,gBAAMC,YACJH,cAAcjC,YAAY9D,SAAS,eAC/B,cACAmG,0BAA0B9F,OAAOsF,YAAYG,YAAYF,UAAAA;AAC/D,gBAAMQ,eAAeC,UAAUhG,OAAOsF,YAAYE,UAAAA;AAClD,gBAAMS,eAAeD,UAAUhG,OAAOuF,YAAYE,UAAAA;AAClD,gBAAMS,cAAcnG,SAASC,OAAO+F,YAAAA;AACpC,gBAAMI,cAAcpG,SAASC,OAAOiG,YAAAA;AACpC,gBAAMG,cAAcF,YAAYG,UAAU,CAAC,EAAE7G,GAAE,MAAOA,OAAO8F,WAAW9F,EAAE;AAC1E,gBAAM8G,cAAcH,YAAYE,UAAU,CAAC,EAAE7G,GAAE,MAAOA,OAAO+F,WAAW/F,EAAE;AAC1E,gBAAM+G,iBACJ9C,YAAY9D,SAAS,eACjB6G,SACA/C,YAAY9D,SAAS,kBACnB2G,cAAc,IACdA;AACR,kBAAQT,WAAAA;YACN,KAAK,aAAa;AAChB,oBAAMY,YAAYP,YAAYQ,IAAI,CAAC,EAAEpH,KAAI,MAAOA,IAAAA;AAChDqH,wBAAUF,WAAWL,aAAaE,WAAAA;AAClC,mBAAKhB,WAAW1B,WAAWgD,cAAcH,SAAAA;AACzC;YACF;YACA,KAAK,QAAQ;AACX,oBAAM9C,UAASF,YAAY9D,SAAS,eAAe4F,aAAaU;AAChE,mBAAKtC,SAAQC,WAAWiD,SAASvB,YAAYiB,cAAAA;AAC7C;YACF;YACA,KAAK,YAAY;AACf,oBAAM5C,UAASF,YAAY9D,SAAS,eAAe4F,aAAaU;AAChE,kBAAI,CAACtC,SAAQC,WAAWkD,mBAAmBnD,SAAQnE,OAAOuG,cAAcvG,IAAI;AAC1E;cACF;AACA,mBAAKmE,SAAQC,WAAWkD,gBAAgBxB,YAAYiB,cAAAA;AACpD,mBAAKR,cAAcnC,WAAWmD,gBAAgBzB,YAAY3B,OAAAA;AAC1D;YACF;UACF;QACF;MACF;IACF,CAAA;EACF,GAAG;IAAC3D;GAAM;AAKV,QAAMgH,oBAAoBC,aAAajH,MAAMkH,YAAYxG,KAAK,OAAA,CAAA;AAC9D0B,YAAU,MAAA;AACR,eAAW+E,SAASH,mBAAmB;AACrC,UAAIG,MAAMvD,WAAW3D,gBAAgB,SAAS;AAC5CoB,gBAAQ;UAACjB,KAAKC;UAAQK;UAAKyG,MAAM3H;WAAK,QAAQ,IAAA;AAC9CU,cAAMwC,OAAO1C,OAAOmH,MAAM3H,IAAI,OAAA;MAChC;IACF;EACF,GAAG;IAACwH;IAAmBtG;IAAKW;IAASrB;GAAM;AAE3C,QAAMoH,cAAc7E,YAAY,CAAC,EAAEC,KAAI,MAA4BtC,MAAMwC,OAAO1C,OAAOwC,KAAKhD,IAAI,OAAA,GAAU;IAACQ;GAAM;AAEjH,QAAMqH,sBAAsB9H,QAC1B,OAAO;IACLkC;IACAd;IACA2G,eAAenI;IACfqE;IACAK;IACAC;IACAyD,QAAQ1C;IACR2C,cAAclF;IACdmF,UAAUzD;IACV0D,aAAa/E;IACbyE;EACF,IACA;IACE3F;IACAd;IACA6C;IACAK;IACAC;IACAe;IACAvC;IACA0B;IACArB;IACAyE;GACD;AAGH,SACE,sBAAA,cAACO,eAAeC,UAAQ;IAACC,OAAOR;KAC9B,sBAAA,cAACS,SAAAA;IAAQtI,IAAIY,KAAKC;IAAQ0H,MAAM7H,MAAM8H,QAAQhI,KAAAA;IAAQU;IAAUrB,MAAMkC,OAAO0G;IAAaC,KAAKtH;;AAGrG,CAAA;AAGK,IAAMuH,mBAAmBC,qBAAK5H,iBAAAA;",
6
- "names": ["extractInstruction", "monitorForElements", "useAtomValue", "React", "forwardRef", "memo", "useCallback", "useEffect", "useMemo", "useRef", "Surface", "useOperationInvoker", "LayoutOperation", "AppSurface", "useAppGraph", "useLayout", "Graph", "Node", "useActionRunner", "useMediaQuery", "useSidebars", "isTreeData", "arrayMove", "NAV_TREE_ITEM", "NavTree", "NavTreeContext", "useNavTreeModel", "useNavTreeState", "meta", "NODE_TYPE", "NavTreeItemEnd", "node", "open", "data", "useMemo", "id", "subject", "Surface", "type", "AppSurface", "NavtreeItemEnd", "limit", "getItems", "graph", "disposition", "Graph", "getConnections", "Node", "RootId", "filter", "filterItems", "NavTreeContainer$", "forwardRef", "tab", "popoverAnchorId", "forwardedRef", "isLg", "useMediaQuery", "invokePromise", "useOperationInvoker", "runAction", "useActionRunner", "useAppGraph", "getItem", "setItem", "useNavTreeState", "layout", "useLayout", "model", "useNavTreeModel", "navigationSidebarState", "useSidebars", "meta", "profile", "key", "latestRef", "useRef", "activeItems", "active", "useEffect", "current", "handleOpenChange", "useCallback", "item", "path", "expand", "handleTabChange", "activeTab", "currentSidebarState", "latestIsLg", "LayoutOperation", "UpdateSidebar", "state", "SwitchWorkspace", "length", "isActionLike", "mode", "Set", "Open", "blockInstruction", "instruction", "source", "target", "properties", "canDrop", "canSelect", "selectable", "handleSelect", "option", "isAction", "parent", "childRelation", "caller", "NAV_TREE_ITEM", "Close", "ScrollIntoView", "defaultAction", "getActions", "find", "action", "handleBack", "RevertWorkspace", "monitorForElements", "canMonitor", "isTreeData", "onDrop", "location", "dropTargets", "extractInstruction", "sourceNode", "targetNode", "sourcePath", "targetPath", "sameParent", "slice", "join", "operation", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceItems", "targetItems", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "undefined", "nextItems", "map", "arrayMove", "onRearrange", "onCopy", "onTransferStart", "onTransferEnd", "workspaceChildren", "useAtomValue", "connections", "child", "onItemHover", "navTreeContextValue", "renderItemEnd", "onBack", "onOpenChange", "onSelect", "onTabChange", "NavTreeContext", "Provider", "value", "NavTree", "root", "getRoot", "sidebarOpen", "ref", "NavTreeContainer", "memo"]
7
- }
@@ -1,27 +0,0 @@
1
- import {
2
- __export
3
- } from "./chunk-J5LGTIGS.mjs";
4
-
5
- // src/types/NavTreeCapabilities.ts
6
- var NavTreeCapabilities_exports = {};
7
- __export(NavTreeCapabilities_exports, {
8
- State: () => State
9
- });
10
- import { Capability } from "@dxos/app-framework";
11
- import { meta } from "#meta";
12
- var State = Capability.make(`${meta.profile.key}.capability.state`);
13
-
14
- // src/types/NavTreeEvents.ts
15
- var NavTreeEvents_exports = {};
16
- __export(NavTreeEvents_exports, {
17
- StateReady: () => StateReady
18
- });
19
- import { AppActivationEvents } from "@dxos/app-toolkit";
20
- import { meta as meta2 } from "#meta";
21
- var StateReady = AppActivationEvents.createStateEvent(meta2.profile.key);
22
-
23
- export {
24
- NavTreeCapabilities_exports,
25
- NavTreeEvents_exports
26
- };
27
- //# sourceMappingURL=chunk-BAVI2K7A.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/NavTreeCapabilities.ts", "../../../src/types/NavTreeEvents.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type Atom } from '@effect-atom/atom-react';\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { meta } from '#meta';\n\nexport type NavTreeItemState = { open: boolean; current: boolean };\n\nexport type NavTreeStateStore = {\n getItem: (path: string[]) => NavTreeItemState;\n getItemAtom: (path: string[]) => Atom.Atom<NavTreeItemState>;\n setItem: (path: string[], key: 'open' | 'current', next: boolean) => void;\n};\n\nexport const State = Capability.make<NavTreeStateStore>(`${meta.profile.key}.capability.state`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { meta } from '#meta';\n\nexport const StateReady: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(meta.profile.key);\n"],
5
- "mappings": ";;;;;AAAA;;;;AAQA,SAASA,kBAAkB;AAE3B,SAASC,YAAY;AAUd,IAAMC,QAAQF,WAAWG,KAAwB,GAAGF,KAAKG,QAAQC,GAAG,mBAAmB;;;ACpB9F;;;;AAOA,SAASC,2BAA2B;AAEpC,SAASC,QAAAA,aAAY;AAEd,IAAMC,aAA8CF,oBAAoBG,iBAAiBF,MAAKG,QAAQC,GAAG;",
6
- "names": ["Capability", "meta", "State", "make", "profile", "key", "AppActivationEvents", "meta", "StateReady", "createStateEvent", "profile", "key"]
7
- }
@@ -1,8 +0,0 @@
1
- // src/operations/index.ts
2
- import { OperationHandlerSet } from "@dxos/compute";
3
- var NavTreeOperationHandlerSet = OperationHandlerSet.lazy(() => import("./expose-HIBA2NQG.mjs"));
4
-
5
- export {
6
- NavTreeOperationHandlerSet
7
- };
8
- //# sourceMappingURL=chunk-EAN4K6OL.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/operations/index.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const NavTreeOperationHandlerSet = OperationHandlerSet.lazy(() => import('./expose'));\n"],
5
- "mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,6BAA6BD,oBAAoBE,KAAK,MAAM,OAAO,uBAAA,CAAA;",
6
- "names": ["OperationHandlerSet", "NavTreeOperationHandlerSet", "lazy"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/meta.ts", "../../../dx.config.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { DXN } from '@dxos/keys';\n\nimport config from '../dx.config';\n\nexport const meta = Plugin.getMetaFromConfig(config);\n\n// TODO(wittjosiah): Factor out.\nexport const KEY_BINDING = 'KeyBinding';\n// TODO(wittjosiah): Factor out.\nexport const COMMANDS_DIALOG = DXN.make(`${meta.profile.key}.commandsDialog`);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Config2 } from '@dxos/app-framework/config';\nimport { trim } from '@dxos/util';\n\nexport default Config2.make({\n plugin: {\n key: 'org.dxos.plugin.navtree',\n name: 'Navtree',\n author: 'DXOS',\n description: trim`\n NavTreePlugin renders the application graph as a collapsible hierarchical tree in the Composer sidebar.\n It manages workspace tabs at the root level and provides expand/collapse navigation for spaces, folders,\n and objects, with open/current state persisted to localStorage across sessions.\n\n The plugin wires drag-and-drop rearrangement and cross-parent transfer of tree items via Pragmatic DnD,\n and registers graph-action keyboard shortcuts (including the ⌘K / Ctrl+K command palette) through a\n global Keyboard singleton that tracks context as the user navigates.\n\n An operation handler for LayoutOperation.Expose expands ancestor paths on demand so that any\n programmatically activated item is scrolled into view in the tree.\n\n A commands dialog surfaces all discoverable graph actions as a searchable palette, making it the primary\n keyboard-first entry point for power users.\n `,\n spec: 'PLUGIN.mdl',\n tags: ['system'],\n },\n});\n"],
5
- "mappings": ";AAIA,SAASA,cAAc;AACvB,SAASC,WAAW;;;ACDpB,SAASC,eAAe;AACxB,SAASC,YAAY;AAErB,IAAA,oBAAeD,QAAQE,KAAK;EAC1BC,QAAQ;IACNC,KAAK;IACLC,MAAM;IACNC,QAAQ;IACRC,aAAaN;;;;;;;;;;;;;;;IAebO,MAAM;IACNC,MAAM;MAAC;;EACT;AACF,CAAA;;;ADrBO,IAAMC,OAAOC,OAAOC,kBAAkBC,iBAAAA;AAGtC,IAAMC,cAAc;AAEpB,IAAMC,kBAAkBC,IAAIC,KAAK,GAAGP,KAAKQ,QAAQC,GAAG,iBAAiB;",
6
- "names": ["Plugin", "DXN", "Config2", "trim", "make", "plugin", "key", "name", "author", "description", "spec", "tags", "meta", "Plugin", "getMetaFromConfig", "config", "KEY_BINDING", "COMMANDS_DIALOG", "DXN", "make", "profile", "key"]
7
- }
@@ -1,10 +0,0 @@
1
- var __defProp = Object.defineProperty;
2
- var __export = (target, all) => {
3
- for (var name in all)
4
- __defProp(target, name, { get: all[name], enumerable: true });
5
- };
6
-
7
- export {
8
- __export
9
- };
10
- //# sourceMappingURL=chunk-J5LGTIGS.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,79 +0,0 @@
1
- // src/util.ts
2
- import { Graph, Node } from "@dxos/plugin-graph";
3
- import { isNonNullable } from "@dxos/util";
4
- var getParent = (graph, node, path) => {
5
- const parentId = path[path.length - 2];
6
- return Graph.getConnections(graph, node.id, Node.childRelation("inbound")).find((n) => n.id === parentId);
7
- };
8
- var getPersistenceParent = (graph, node, path, persistenceClass) => {
9
- if (node.properties.acceptPersistenceClass?.has(persistenceClass)) {
10
- return node;
11
- } else {
12
- const parent = getParent(graph, node, path);
13
- return parent ? getPersistenceParent(graph, parent, path.slice(0, path.length - 1), persistenceClass) : null;
14
- }
15
- };
16
- var resolveMigrationOperation = (graph, activeNode, destinationPath, destinationRelatedNode) => {
17
- const activeClass = activeNode.properties.persistenceClass;
18
- if (destinationRelatedNode && activeClass) {
19
- const persistenceParent = getPersistenceParent(graph, destinationRelatedNode, destinationPath, activeClass);
20
- if (persistenceParent) {
21
- const activeKey = activeNode.properties.persistenceKey;
22
- if (activeKey && persistenceParent?.properties.acceptPersistenceKey) {
23
- return persistenceParent.properties.acceptPersistenceKey.has(activeKey) && persistenceParent.properties.onTransferStart ? "transfer" : persistenceParent.properties.onCopy ? "copy" : "reject";
24
- } else {
25
- return "reject";
26
- }
27
- } else {
28
- return "reject";
29
- }
30
- } else {
31
- return "reject";
32
- }
33
- };
34
- var sortActions = (actions) => actions.sort((a, b) => {
35
- if (a.properties.disposition === b.properties.disposition) {
36
- return 0;
37
- }
38
- if (a.properties.disposition === "list-item-primary") {
39
- return -1;
40
- }
41
- return 1;
42
- });
43
- var getChildren = (graph, node, path = []) => {
44
- return Graph.getConnections(graph, node.id, "child").map((n) => {
45
- const nextPath = [
46
- ...path,
47
- node.id
48
- ];
49
- return nextPath.includes(n.id) ? void 0 : n;
50
- }).filter(isNonNullable);
51
- };
52
- var filterItems = (node, disposition) => {
53
- if (!disposition && node.properties.disposition === "hidden") {
54
- return false;
55
- } else if (!disposition) {
56
- const action = Node.isAction(node);
57
- return !action || node.properties.disposition === "item";
58
- } else {
59
- return node.properties.disposition === disposition;
60
- }
61
- };
62
- var l0ItemType = (item) => {
63
- if (Node.isActionLike(item)) {
64
- return "action";
65
- } else {
66
- return "tab";
67
- }
68
- };
69
-
70
- export {
71
- getParent,
72
- getPersistenceParent,
73
- resolveMigrationOperation,
74
- sortActions,
75
- getChildren,
76
- filterItems,
77
- l0ItemType
78
- };
79
- //# sourceMappingURL=chunk-JOSNCOV4.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/util.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Graph, Node } from '@dxos/plugin-graph';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type NavTreeItemGraphNode } from '#types';\n\nexport const getParent = (\n graph: Graph.ReadableGraph,\n node: NavTreeItemGraphNode,\n path: string[],\n): NavTreeItemGraphNode | undefined => {\n const parentId = path[path.length - 2];\n return Graph.getConnections(graph, node.id, Node.childRelation('inbound')).find(\n (n: Node.Node) => n.id === parentId,\n ) as NavTreeItemGraphNode | undefined;\n};\n\nexport const getPersistenceParent = (\n graph: 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: 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: Node.Action[]): Node.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: Graph.ReadableGraph,\n node: NavTreeItemGraphNode,\n path: readonly string[] = [],\n): NavTreeItemGraphNode[] => {\n return Graph.getConnections(graph, node.id, 'child')\n .map((n: Node.Node) => {\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\n/**\n * Determines whether a node should be visible based on its disposition.\n */\nexport const filterItems = (node: Node.Node, disposition?: string) => {\n if (!disposition && node.properties.disposition === 'hidden') {\n return false;\n } else if (!disposition) {\n const action = Node.isAction(node);\n return !action || node.properties.disposition === 'item';\n } else {\n return node.properties.disposition === disposition;\n }\n};\n\nexport const l0ItemType = (item: Node.Node) => {\n if (Node.isActionLike(item)) {\n return 'action';\n } else {\n return 'tab';\n }\n};\n"],
5
- "mappings": ";AAIA,SAASA,OAAOC,YAAY;AAC5B,SAASC,qBAAqB;AAIvB,IAAMC,YAAY,CACvBC,OACAC,MACAC,SAAAA;AAEA,QAAMC,WAAWD,KAAKA,KAAKE,SAAS,CAAA;AACpC,SAAOR,MAAMS,eAAeL,OAAOC,KAAKK,IAAIT,KAAKU,cAAc,SAAA,CAAA,EAAYC,KACzE,CAACC,MAAiBA,EAAEH,OAAOH,QAAAA;AAE/B;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,KAC3DD,kBAAkBV,WAAWc,kBAC3B,aACAJ,kBAAkBV,WAAWe,SAC3B,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,qBAAqB;AACpD,WAAO;EACT;AAEA,SAAO;AACT,CAAA;AAEK,IAAMC,cAAc,CACzBlC,OACAC,MACAC,OAA0B,CAAA,MAAE;AAE5B,SAAON,MAAMS,eAAeL,OAAOC,KAAKK,IAAI,OAAA,EACzC6B,IAAI,CAAC1B,MAAAA;AAEJ,UAAM2B,WAAW;SAAIlC;MAAMD,KAAKK;;AAChC,WAAO8B,SAASC,SAAS5B,EAAEH,EAAE,IAAIgC,SAAa7B;EAChD,CAAA,EACC8B,OAAOzC,aAAAA;AACZ;AAKO,IAAM0C,cAAc,CAACvC,MAAiBgC,gBAAAA;AAC3C,MAAI,CAACA,eAAehC,KAAKW,WAAWqB,gBAAgB,UAAU;AAC5D,WAAO;EACT,WAAW,CAACA,aAAa;AACvB,UAAMQ,SAAS5C,KAAK6C,SAASzC,IAAAA;AAC7B,WAAO,CAACwC,UAAUxC,KAAKW,WAAWqB,gBAAgB;EACpD,OAAO;AACL,WAAOhC,KAAKW,WAAWqB,gBAAgBA;EACzC;AACF;AAEO,IAAMU,aAAa,CAACC,SAAAA;AACzB,MAAI/C,KAAKgD,aAAaD,IAAAA,GAAO;AAC3B,WAAO;EACT,OAAO;AACL,WAAO;EACT;AACF;",
6
- "names": ["Graph", "Node", "isNonNullable", "getParent", "graph", "node", "path", "parentId", "length", "getConnections", "id", "childRelation", "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", "filterItems", "action", "isAction", "l0ItemType", "item", "isActionLike"]
7
- }