@dxos/plugin-navtree 0.8.4-main.c1de068 → 0.8.4-main.c85a9c8dae

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 (238) hide show
  1. package/dist/lib/browser/CommandsDialogContent-A27AKTHH.mjs +111 -0
  2. package/dist/lib/browser/CommandsDialogContent-A27AKTHH.mjs.map +7 -0
  3. package/dist/lib/browser/CommandsTrigger-HBZYQCGV.mjs +33 -0
  4. package/dist/lib/browser/CommandsTrigger-HBZYQCGV.mjs.map +7 -0
  5. package/dist/lib/browser/NavTreeContainer-B5K4FUJS.mjs +12 -0
  6. package/dist/lib/browser/NavTreeContainer-B5K4FUJS.mjs.map +7 -0
  7. package/dist/lib/browser/NavTreeDocumentTitle-GEE3URWH.mjs +26 -0
  8. package/dist/lib/browser/NavTreeDocumentTitle-GEE3URWH.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-XGA4GPGL.mjs +44 -0
  10. package/dist/lib/browser/app-graph-builder-XGA4GPGL.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-DQCYMXEU.mjs +1426 -0
  12. package/dist/lib/browser/chunk-DQCYMXEU.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-H3OJ4WLF.mjs +14 -0
  14. package/dist/lib/browser/chunk-H3OJ4WLF.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-X2HDG62A.mjs +23 -0
  16. package/dist/lib/browser/chunk-X2HDG62A.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-YKTYPINZ.mjs +19 -0
  18. package/dist/lib/browser/chunk-YKTYPINZ.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +88 -96
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/{keyboard-QRS6WOQH.mjs → keyboard-OJZC54PK.mjs} +22 -19
  22. package/dist/lib/browser/keyboard-OJZC54PK.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/operation-resolver-BNAMYOHF.mjs +53 -0
  25. package/dist/lib/browser/operation-resolver-BNAMYOHF.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-AYHOAJ4I.mjs +59 -0
  27. package/dist/lib/browser/react-surface-AYHOAJ4I.mjs.map +7 -0
  28. package/dist/lib/browser/state-AC3EETN7.mjs +131 -0
  29. package/dist/lib/browser/state-AC3EETN7.mjs.map +7 -0
  30. package/dist/types/src/NavTreePlugin.d.ts +2 -1
  31. package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
  32. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  33. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  34. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  35. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  36. package/dist/types/src/capabilities/index.d.ts +5 -105
  37. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  38. package/dist/types/src/capabilities/keyboard/index.d.ts +3 -0
  39. package/dist/types/src/capabilities/keyboard/index.d.ts.map +1 -0
  40. package/dist/types/src/capabilities/keyboard/keyboard.d.ts +5 -0
  41. package/dist/types/src/capabilities/keyboard/keyboard.d.ts.map +1 -0
  42. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  43. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  44. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  45. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  46. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  47. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  48. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  49. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  50. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  51. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  52. package/dist/types/src/capabilities/state/state.d.ts +6 -0
  53. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  54. package/dist/types/src/components/NavTree/NavTree.d.ts +12 -5
  55. package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
  56. package/dist/types/src/components/NavTree/NavTree.stories.d.ts +27 -5
  57. package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
  58. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts +6 -6
  59. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
  60. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +33 -4
  61. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
  62. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +2 -2
  63. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
  64. package/dist/types/src/components/Sidebar/L0Menu.d.ts +10 -5
  65. package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
  66. package/dist/types/src/components/Sidebar/L1Panel.d.ts +4 -8
  67. package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
  68. package/dist/types/src/components/Sidebar/L1Tabs.d.ts +13 -0
  69. package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -0
  70. package/dist/types/src/components/Sidebar/index.d.ts +1 -0
  71. package/dist/types/src/components/Sidebar/index.d.ts.map +1 -1
  72. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -1
  73. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts +8 -5
  74. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
  75. package/dist/types/src/components/index.d.ts +0 -3
  76. package/dist/types/src/components/index.d.ts.map +1 -1
  77. package/dist/types/src/components/types.d.ts +8 -16
  78. package/dist/types/src/components/types.d.ts.map +1 -1
  79. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts +6 -0
  80. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -0
  81. package/dist/types/src/containers/CommandsDialogContent/index.d.ts +3 -0
  82. package/dist/types/src/containers/CommandsDialogContent/index.d.ts.map +1 -0
  83. package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -0
  84. package/dist/types/src/containers/CommandsTrigger/index.d.ts +3 -0
  85. package/dist/types/src/containers/CommandsTrigger/index.d.ts.map +1 -0
  86. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts +9 -0
  87. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -0
  88. package/dist/types/src/containers/NavTreeContainer/index.d.ts +3 -0
  89. package/dist/types/src/containers/NavTreeContainer/index.d.ts.map +1 -0
  90. package/dist/types/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.d.ts +1 -1
  91. package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -0
  92. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts +3 -0
  93. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts.map +1 -0
  94. package/dist/types/src/containers/index.d.ts +7 -0
  95. package/dist/types/src/containers/index.d.ts.map +1 -0
  96. package/dist/types/src/experimental/Tree.d.ts +1 -2
  97. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  98. package/dist/types/src/experimental/Tree.stories.d.ts +23 -6
  99. package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
  100. package/dist/types/src/hooks/index.d.ts +5 -0
  101. package/dist/types/src/hooks/index.d.ts.map +1 -0
  102. package/dist/types/src/hooks/useActions.d.ts +7 -0
  103. package/dist/types/src/hooks/useActions.d.ts.map +1 -0
  104. package/dist/types/src/hooks/useLoadDescendents.d.ts +6 -0
  105. package/dist/types/src/hooks/useLoadDescendents.d.ts.map +1 -0
  106. package/dist/types/src/hooks/useNavTreeModel.d.ts +7 -0
  107. package/dist/types/src/hooks/useNavTreeModel.d.ts.map +1 -0
  108. package/dist/types/src/hooks/useNavTreeState.d.ts +22 -0
  109. package/dist/types/src/hooks/useNavTreeState.d.ts.map +1 -0
  110. package/dist/types/src/index.d.ts +1 -2
  111. package/dist/types/src/index.d.ts.map +1 -1
  112. package/dist/types/src/meta.d.ts +3 -4
  113. package/dist/types/src/meta.d.ts.map +1 -1
  114. package/dist/types/src/testing/app-graph-builder.d.ts +2 -3
  115. package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
  116. package/dist/types/src/testing/generator.d.ts +5 -6
  117. package/dist/types/src/testing/generator.d.ts.map +1 -1
  118. package/dist/types/src/testing/update-state.d.ts +2 -2
  119. package/dist/types/src/testing/update-state.d.ts.map +1 -1
  120. package/dist/types/src/translations.d.ts +1 -0
  121. package/dist/types/src/translations.d.ts.map +1 -1
  122. package/dist/types/src/types/capabilities.d.ts +16 -0
  123. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  124. package/dist/types/src/types/events.d.ts +5 -0
  125. package/dist/types/src/types/events.d.ts.map +1 -0
  126. package/dist/types/src/types/index.d.ts +4 -0
  127. package/dist/types/src/types/index.d.ts.map +1 -0
  128. package/dist/types/src/{types.d.ts → types/schema.d.ts} +10 -9
  129. package/dist/types/src/types/schema.d.ts.map +1 -0
  130. package/dist/types/src/util.d.ts +12 -9
  131. package/dist/types/src/util.d.ts.map +1 -1
  132. package/dist/types/tsconfig.tsbuildinfo +1 -1
  133. package/package.json +56 -53
  134. package/src/NavTreePlugin.tsx +64 -84
  135. package/src/capabilities/app-graph-builder/app-graph-builder.ts +42 -0
  136. package/src/capabilities/app-graph-builder/index.ts +7 -0
  137. package/src/capabilities/index.ts +5 -9
  138. package/src/capabilities/keyboard/index.ts +7 -0
  139. package/src/capabilities/keyboard/keyboard.ts +66 -0
  140. package/src/capabilities/operation-resolver/index.ts +7 -0
  141. package/src/capabilities/operation-resolver/operation-resolver.ts +44 -0
  142. package/src/capabilities/react-surface/index.ts +7 -0
  143. package/src/capabilities/react-surface/react-surface.tsx +53 -0
  144. package/src/capabilities/state/index.ts +7 -0
  145. package/src/capabilities/state/state.ts +149 -0
  146. package/src/components/NavTree/NavTree.stories.tsx +105 -98
  147. package/src/components/NavTree/NavTree.tsx +69 -34
  148. package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +21 -13
  149. package/src/components/NavTreeItem/NavTreeItemAction.tsx +39 -33
  150. package/src/components/NavTreeItem/NavTreeItemColumns.tsx +66 -36
  151. package/src/components/Sidebar/L0Menu.tsx +170 -179
  152. package/src/components/Sidebar/L1Panel.tsx +248 -134
  153. package/src/components/Sidebar/L1Tabs.tsx +43 -0
  154. package/src/components/Sidebar/index.ts +1 -0
  155. package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +9 -9
  156. package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +20 -12
  157. package/src/components/index.ts +1 -3
  158. package/src/components/types.ts +15 -19
  159. package/src/containers/CommandsDialogContent/CommandsDialogContent.tsx +133 -0
  160. package/src/containers/CommandsDialogContent/index.ts +7 -0
  161. package/src/containers/CommandsTrigger/CommandsTrigger.tsx +26 -0
  162. package/src/containers/CommandsTrigger/index.ts +7 -0
  163. package/src/containers/NavTreeContainer/NavTreeContainer.tsx +270 -0
  164. package/src/containers/NavTreeContainer/index.ts +7 -0
  165. package/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.tsx +5 -4
  166. package/src/containers/NavTreeDocumentTitle/index.ts +7 -0
  167. package/src/containers/index.ts +12 -0
  168. package/src/experimental/Tree.stories.tsx +78 -83
  169. package/src/experimental/Tree.tsx +6 -23
  170. package/src/hooks/index.ts +8 -0
  171. package/src/hooks/useActions.ts +38 -0
  172. package/src/hooks/useLoadDescendents.ts +23 -0
  173. package/src/hooks/useNavTreeModel.ts +112 -0
  174. package/src/hooks/useNavTreeState.ts +42 -0
  175. package/src/index.ts +1 -2
  176. package/src/meta.ts +11 -8
  177. package/src/testing/app-graph-builder.ts +159 -234
  178. package/src/testing/generator.ts +20 -18
  179. package/src/testing/update-state.ts +6 -6
  180. package/src/translations.ts +1 -0
  181. package/src/types/capabilities.ts +21 -0
  182. package/src/types/events.ts +12 -0
  183. package/src/types/index.ts +7 -0
  184. package/src/{types.ts → types/schema.ts} +9 -8
  185. package/src/util.ts +26 -33
  186. package/dist/lib/browser/app-graph-builder-5J4LRWDX.mjs +0 -45
  187. package/dist/lib/browser/app-graph-builder-5J4LRWDX.mjs.map +0 -7
  188. package/dist/lib/browser/chunk-ERDGQTH5.mjs +0 -16
  189. package/dist/lib/browser/chunk-ERDGQTH5.mjs.map +0 -7
  190. package/dist/lib/browser/chunk-SICQTLXC.mjs +0 -1442
  191. package/dist/lib/browser/chunk-SICQTLXC.mjs.map +0 -7
  192. package/dist/lib/browser/chunk-WCARAZ7J.mjs +0 -15
  193. package/dist/lib/browser/chunk-WCARAZ7J.mjs.map +0 -7
  194. package/dist/lib/browser/intent-resolver-3XYN2CBU.mjs +0 -47
  195. package/dist/lib/browser/intent-resolver-3XYN2CBU.mjs.map +0 -7
  196. package/dist/lib/browser/keyboard-QRS6WOQH.mjs.map +0 -7
  197. package/dist/lib/browser/react-surface-WURHCBQQ.mjs +0 -51
  198. package/dist/lib/browser/react-surface-WURHCBQQ.mjs.map +0 -7
  199. package/dist/lib/browser/state-54DY3DOY.mjs +0 -117
  200. package/dist/lib/browser/state-54DY3DOY.mjs.map +0 -7
  201. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  202. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  203. package/dist/types/src/capabilities/capabilities.d.ts +0 -21
  204. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  205. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  206. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  207. package/dist/types/src/capabilities/keyboard.d.ts +0 -4
  208. package/dist/types/src/capabilities/keyboard.d.ts.map +0 -1
  209. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  210. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  211. package/dist/types/src/capabilities/state.d.ts +0 -20
  212. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  213. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts +0 -5
  214. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts.map +0 -1
  215. package/dist/types/src/components/CommandsDialog/CommandsTrigger.d.ts.map +0 -1
  216. package/dist/types/src/components/CommandsDialog/index.d.ts +0 -3
  217. package/dist/types/src/components/CommandsDialog/index.d.ts.map +0 -1
  218. package/dist/types/src/components/NavTreeContainer.d.ts +0 -9
  219. package/dist/types/src/components/NavTreeContainer.d.ts.map +0 -1
  220. package/dist/types/src/components/NavTreeDocumentTitle.d.ts.map +0 -1
  221. package/dist/types/src/events.d.ts +0 -4
  222. package/dist/types/src/events.d.ts.map +0 -1
  223. package/dist/types/src/hooks.d.ts +0 -3
  224. package/dist/types/src/hooks.d.ts.map +0 -1
  225. package/dist/types/src/types.d.ts.map +0 -1
  226. package/src/capabilities/app-graph-builder.ts +0 -52
  227. package/src/capabilities/capabilities.ts +0 -20
  228. package/src/capabilities/intent-resolver.ts +0 -37
  229. package/src/capabilities/keyboard.ts +0 -59
  230. package/src/capabilities/react-surface.tsx +0 -45
  231. package/src/capabilities/state.ts +0 -104
  232. package/src/components/CommandsDialog/CommandsDialog.tsx +0 -118
  233. package/src/components/CommandsDialog/CommandsTrigger.tsx +0 -35
  234. package/src/components/CommandsDialog/index.ts +0 -6
  235. package/src/components/NavTreeContainer.tsx +0 -313
  236. package/src/events.ts +0 -11
  237. package/src/hooks.ts +0 -21
  238. /package/dist/types/src/{components/CommandsDialog → containers/CommandsTrigger}/CommandsTrigger.d.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util.ts", "../../../src/containers/NavTreeContainer/NavTreeContainer.tsx", "../../../src/components/NavTree/NavTree.tsx", "../../../src/hooks/useActions.ts", "../../../src/hooks/useLoadDescendents.ts", "../../../src/hooks/useNavTreeModel.ts", "../../../src/hooks/useNavTreeState.ts", "../../../src/components/NavTreeContext.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 { 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' || node.properties.disposition === 'alternate-tree')) {\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", "//\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 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 { 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';\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 role='navtree-item-end' 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 { invokeSync, 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.id);\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 invokeSync(LayoutOperation.UpdateSidebar, {\n state:\n node.id === activeTab\n ? currentSidebarState === 'expanded'\n ? latestIsLg\n ? 'collapsed'\n : 'closed'\n : 'expanded'\n : 'expanded',\n });\n\n invokeSync(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 invokeSync(LayoutOperation.Open, { subject: [item.id] });\n }\n }\n },\n [invokeSync, graph],\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, caller: NAV_TREE_ITEM });\n }\n return;\n }\n\n const current = getItem(path).current;\n if (!current) {\n invokeSync(LayoutOperation.Open, { subject: [node.id], key: node.properties.key });\n } else if (option) {\n invokeSync(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 invokeSync(LayoutOperation.UpdateSidebar, { state: 'closed' });\n }\n },\n [graph, invokeSync, invokePromise, getItem, runAction, isLg],\n );\n\n const handleBack = useCallback(() => invokeSync(LayoutOperation.RevertWorkspace), [invokeSync]);\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 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 || !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 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 setAlternateTree,\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 setAlternateTree,\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", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Node, useConnections, useActions as useGraphActions } from '@dxos/plugin-graph';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { byPosition } from '@dxos/util';\n\nimport { useLoadDescendents } from '../../hooks';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { L0Menu, L1Tabs, type L1TabsProps } from '../Sidebar';\n\nexport const NAV_TREE_ITEM = 'NavTreeItem';\n\nexport type NavTreeProps = { id: string; root?: Node.Node; tab: string } & Pick<L1TabsProps, 'open'>;\n\n// TODO(wittjosiah): Refactor to Radix-style.\nexport const NavTree = forwardRef<HTMLDivElement, NavTreeProps>(({ id, root, tab, ...props }, forwardedRef) => {\n const { onBack, onItemHover } = useNavTreeContext();\n const { topLevelActions, l0Items, pinnedItems, userAccountItem, topLevelItems } = useTopLevelNavItems(root);\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' ref={forwardedRef}>\n <L0Menu\n menuActions={topLevelActions}\n topLevelItems={l0Items}\n pinnedItems={pinnedItems}\n userAccountItem={userAccountItem}\n path={path}\n parent={root}\n onItemHover={onItemHover}\n />\n <L1Tabs topLevelItems={topLevelItems} path={path} currentItemId={tab} onBack={onBack} {...props} />\n </Tabs.Root>\n );\n});\n\n/**\n * Partitions root children into workspaces, pinned items, user-account, and top-level actions.\n */\nconst useTopLevelNavItems = (root?: Node.Node) => {\n const { graph } = useAppGraph();\n const rootId = root?.id ?? Node.RootId;\n const rootOutboundItems = useConnections(graph, rootId, 'child');\n const rootActions = useGraphActions(graph, rootId);\n\n const { topLevelActions, l0Items, pinnedItems, userAccountItem } = useMemo(() => {\n const topLevelWorkspaces: Node.Node[] = [];\n const outboundPinnedItems: Node.Node[] = [];\n let userAccountItem: Node.Node | undefined;\n for (const node of rootOutboundItems) {\n switch (node.properties.disposition) {\n case 'workspace':\n topLevelWorkspaces.push(node);\n break;\n case 'pin-end':\n outboundPinnedItems.push(node);\n break;\n case 'user-account':\n userAccountItem ??= node;\n break;\n }\n }\n\n const topLevelActions = rootActions\n .filter((action) => action.properties.disposition === 'menu')\n .toSorted((a, b) => byPosition(a.properties, b.properties));\n const pinnedItems = [\n ...outboundPinnedItems,\n ...rootActions.filter((action) => action.properties.disposition === 'pin-end'),\n ].toSorted((a, b) => byPosition(a.properties, b.properties));\n\n return {\n topLevelActions,\n l0Items: topLevelWorkspaces,\n pinnedItems,\n userAccountItem,\n };\n }, [rootActions, rootOutboundItems]);\n\n const topLevelItems = useMemo(\n () => [...l0Items, ...pinnedItems, ...(userAccountItem ? [userAccountItem] : [])],\n [l0Items, pinnedItems, userAccountItem],\n );\n\n return { topLevelActions, l0Items, pinnedItems, userAccountItem, topLevelItems };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Graph, Node, useActions as useGraphActions } from '@dxos/plugin-graph';\n\nimport { type FlattenedActions } from '../types';\n\n/**\n * Returns flattened actions and grouped sub-actions for a given graph node.\n */\nexport const useActions = (node: 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 (!Node.isAction(arg)) {\n const actionGroup = Graph.getActions(graph, arg.id);\n acc.groupedActions[arg.id] = actionGroup;\n }\n return acc;\n },\n { actions: [], groupedActions: {} },\n ),\n [actions],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Graph } from '@dxos/plugin-graph';\n\n/**\n * Expands a root node in the app graph.\n */\nexport const useLoadDescendents = (root?: Node.Node) => {\n const { graph } = useAppGraph();\n useEffect(() => {\n if (!root) {\n return;\n }\n\n Graph.expand(graph, root.id, 'child');\n }, [graph, root]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Option from 'effect/Option';\nimport { useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { type Node } from '@dxos/plugin-graph';\nimport { Path, type TreeModel } from '@dxos/react-ui-list';\nimport { mx } from '@dxos/ui-theme';\n\nimport { type NavTreeItemGraphNode } from '../types';\nimport { filterItems } from '../util';\n\nimport { useNavTreeState } from './useNavTreeState';\n\n// TODO(wittjosiah): Move companion/hidden nodes to their own edge categories so this filter is unnecessary.\nconst isVisibleChild = (node: Node.Node): boolean =>\n node.type !== PLANK_COMPANION_TYPE && node.properties.disposition !== 'hidden';\n\n/** Create an atom family for item display props keyed by path. */\nconst createItemPropsFamily = (graph: ReturnType<typeof useAppGraph>['graph']) =>\n Atom.family((pathKey: string) => {\n const path = Path.parts(pathKey);\n const id = Path.last(pathKey);\n return Atom.make((get) => {\n const nodeOpt = get(graph.node(id));\n const node = Option.getOrElse(nodeOpt, () => undefined);\n if (!node) {\n return { id, label: id };\n }\n const safeChildren = get(graph.connections(node.id, 'child')).filter((child) => !path.includes(child.id));\n const visibleChildren = safeChildren.filter(isVisibleChild);\n const parentOf =\n visibleChildren.length > 0\n ? visibleChildren.map((child) => child.id)\n : node.properties.role === 'branch'\n ? []\n : 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'),\n headingClassName: node.properties.headingClassName,\n icon: node.properties.icon,\n iconHue: node.properties.iconHue,\n testId: node.properties.testId,\n };\n }).pipe(Atom.keepAlive);\n });\n\n/** Create an atom family for outbound child IDs keyed by parent ID (pre-sorted by position on write). */\nconst createChildIdsFamily = (graph: ReturnType<typeof useAppGraph>['graph']) =>\n Atom.family((id: string) =>\n Atom.make((get) => get(graph.connections(id, 'child')).map((child) => child.id)).pipe(Atom.keepAlive),\n );\n\n/** Create an atom family for item resolution keyed by ID. */\nconst createItemFamily = (graph: ReturnType<typeof useAppGraph>['graph']) =>\n Atom.family((id: string) =>\n Atom.make((get) => {\n const node = Option.getOrElse(get(graph.node(id)), () => undefined);\n const passed = node ? filterItems(node) : false;\n return node && passed ? node : undefined;\n }).pipe(Atom.keepAlive),\n );\n\n/** Create an atom family for open state keyed by path. */\nconst createItemOpenFamily = (getItemAtom: ReturnType<typeof useNavTreeState>['getItemAtom']) =>\n Atom.family((pathKey: string) => {\n const path = Path.parts(pathKey);\n const stateAtom = getItemAtom(path);\n return Atom.make((get) => get(stateAtom).open).pipe(Atom.keepAlive);\n });\n\n/** Create an atom family for current (selected) state keyed by path. */\nconst createItemCurrentFamily = (getItemAtom: ReturnType<typeof useNavTreeState>['getItemAtom']) =>\n Atom.family((pathKey: string) => {\n const path = Path.parts(pathKey);\n const stateAtom = getItemAtom(path);\n return Atom.make((get) => get(stateAtom).current).pipe(Atom.keepAlive);\n });\n\n/**\n * Creates a TreeModel backed by the app graph and navtree state.\n */\nexport const useNavTreeModel = (rootId: string): TreeModel<NavTreeItemGraphNode> => {\n const { graph } = useAppGraph();\n const { getItemAtom } = useNavTreeState();\n\n const itemPropsFamily = useMemo(() => createItemPropsFamily(graph), [graph]);\n const childIdsFamily = useMemo(() => createChildIdsFamily(graph), [graph]);\n const itemFamily = useMemo(() => createItemFamily(graph), [graph]);\n const itemOpenFamily = useMemo(() => createItemOpenFamily(getItemAtom), [getItemAtom]);\n const itemCurrentFamily = useMemo(() => createItemCurrentFamily(getItemAtom), [getItemAtom]);\n\n return useMemo(\n () => ({\n item: (id: string) => itemFamily(id),\n itemProps: (path: string[]) => itemPropsFamily(Path.create(...path)),\n itemOpen: (path: string[]) => itemOpenFamily(Path.create(...path)),\n itemCurrent: (path: string[]) => itemCurrentFamily(Path.create(...path)),\n childIds: (parentId?: string) => childIdsFamily(parentId ?? rootId),\n }),\n [itemFamily, itemPropsFamily, itemOpenFamily, itemCurrentFamily, childIdsFamily, rootId],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom, useAtomValue } from '@effect-atom/atom-react';\nimport { useMemo } from 'react';\n\nimport { useCapability } from '@dxos/app-framework/ui';\n\nimport { NavTreeCapabilities } from '../types';\n\nexport type UseNavTreeStateResult = {\n getItem: (path: string[]) => NavTreeCapabilities.NavTreeItemState;\n getItemAtom: (path: string[]) => Atom.Atom<NavTreeCapabilities.NavTreeItemState>;\n setItem: (path: string[], key: 'open' | 'current' | 'alternateTree', next: boolean) => void;\n};\n\n/**\n * Hook that provides access to navtree state functions.\n * For reactive subscriptions, use `useNavTreeItemState` or `useAtomValue(getItemAtom(path))`.\n */\nexport const useNavTreeState = (): UseNavTreeStateResult => {\n return useCapability(NavTreeCapabilities.State);\n};\n\n/**\n * Hook that subscribes to a single navtree item's state.\n * Use this for fine-grained reactivity.\n */\nexport const useNavTreeItemState = (path: string[]): NavTreeCapabilities.NavTreeItemState => {\n const { getItemAtom } = useCapability(NavTreeCapabilities.State);\n const pathKey = useMemo(() => path.join('~'), [path]);\n const atom = useMemo(() => getItemAtom(path), [getItemAtom, pathKey]);\n return useAtomValue(atom);\n};\n\n/**\n * Hook that subscribes to the alternateTree state for a tree item.\n */\nexport const useIsAlternateTree = (path: string[], _item?: any): boolean => {\n return useNavTreeItemState(path).alternateTree ?? false;\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 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 { useAtomValue } from '@effect-atom/atom-react';\nimport React, {\n type MouseEvent,\n type PropsWithChildren,\n forwardRef,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { DxAvatar } from '@dxos/lit-ui/react';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport {\n Icon,\n ListItem,\n ScrollArea,\n type ThemedClassName,\n Tooltip,\n toLocalizedString,\n useMediaQuery,\n useTranslation,\n} from '@dxos/react-ui';\nimport { Menu, type MenuItem } from '@dxos/react-ui-menu';\nimport type { StackItemRearrangeHandler } from '@dxos/react-ui-stack';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/ui-theme';\nimport { arrayMove } from '@dxos/util';\n\nimport { useNavTreeState } 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.Node;\n parent?: Node.Node;\n path: string[];\n onMouseEnter?: () => void;\n};\n\ntype L0ItemProps = L0ItemRootProps & {\n item: Node.Node;\n parent?: Node.Node;\n path: string[];\n pinned?: boolean;\n onRearrange?: StackItemRearrangeHandler<L0ItemData>;\n onItemHover?: (params: { item: Node.Node }) => void;\n};\n\nconst useL0ItemClick = ({ item, parent, path }: L0ItemProps, type: string) => {\n const { onSelect, onTabChange } = useNavTreeContext();\n const { getItem } = useNavTreeState();\n const [isLg] = useMediaQuery('lg');\n const runAction = useActionRunner();\n\n return useCallback(\n (event: MouseEvent) => {\n switch (type) {\n case 'action': {\n const { properties: { caller } = {} } = item;\n return void runAction(item as Node.Action, caller ? { parent, caller } : { parent });\n }\n\n case 'tab':\n return onTabChange?.(item);\n\n case 'link':\n return onSelect?.({ item, path, current: !getItem(path).current, option: event.altKey });\n }\n },\n [item, parent, type, getItem, onSelect, onTabChange, isLg, runAction],\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 dx-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 = memo(\n forwardRef<HTMLElement, PropsWithChildren<L0ItemRootProps>>(\n ({ item, parent, path, onMouseEnter, children }, forwardedRef) => {\n const { model } = useNavTreeContext();\n const itemPath = useMemo(() => [...path, item.id], [item.id, path]);\n const { id, testId } = useAtomValue(model.itemProps(itemPath));\n const type = l0ItemType(item);\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-object-id': id }\n : { onClick: handleClick, 'data-testid': testId, 'data-object-id': id };\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 onMouseEnter={onMouseEnter}\n >\n {children}\n </Tabs.TabPrimitive>\n </Tooltip.Trigger>\n );\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 start-0 inset-y-2 w-1 bg-accent-surface rounded-ie',\n classNames,\n )}\n />\n);\n\n// TODO(burdon): Factor out pinned (non-draggable) items.\nconst L0Item = memo(({ item, parent, path, pinned, onRearrange, onItemHover }: 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 const handleMouseEnter = useCallback(() => onItemHover?.({ item }), [item, onItemHover]);\n\n return (\n <L0ItemRoot ref={itemElement} item={item} parent={parent} path={path} onMouseEnter={handleMouseEnter}>\n <div\n role='none'\n data-frame={true}\n {...(hue && { style: { background: `var(--color-${hue}-surface)` } })}\n className={mx(\n l0ItemContent,\n pinned\n ? 'p-2 group-hover/l0item:bg-active-surface'\n : 'w-(--dx-l0-avatar-size) h-(--dx-l0-avatar-size) bg-active-surface',\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(--color-${hue}-surface-text)` } };\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// L0Menu\n//\n\nexport type L0MenuProps = {\n menuActions: MenuItem[];\n topLevelItems: Node.Node[];\n pinnedItems: Node.Node[];\n userAccountItem?: Node.Node;\n parent?: Node.Node;\n path: string[];\n onItemHover?: (params: { item: Node.Node }) => void;\n};\n\nexport const L0Menu = ({\n menuActions,\n topLevelItems,\n pinnedItems,\n userAccountItem,\n parent,\n path,\n onItemHover,\n}: L0MenuProps) => {\n const { t } = useTranslation(meta.id);\n const runAction = useActionRunner();\n const handleAction = useCallback(\n (action: Node.Action, params: Node.InvokeProps) => {\n void runAction(action, params);\n },\n [runAction],\n );\n\n const handleRearrange = useCallback<StackItemRearrangeHandler<L0ItemData>>(\n (source, target, closestEdge) => {\n const sourceItem = topLevelItems.find((i) => i.id === source.id);\n if (!sourceItem?.properties.onRearrange) {\n return;\n }\n\n const sourceIndex = topLevelItems.findIndex((i) => i.id === source.id);\n const targetIndex = topLevelItems.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([...topLevelItems], sourceIndex, insertIndex);\n return sourceItem.properties.onRearrange(nextOrder.map((item) => item.data));\n },\n [topLevelItems],\n );\n\n // Check if any items have onRearrange to enable drag-and-drop.\n const hasRearrangeableItems = topLevelItems.some((item) => item.properties.onRearrange);\n\n return (\n <Tabs.Tablist\n classNames={[\n 'group/l0 absolute z-[1] inset-y-0 start-0 rounded-is',\n 'grid grid-cols-[var(--dx-l0-size)] grid-rows-[var(--dx-rail-size)_1fr_min-content_var(--dx-l0-size)] dx-contain-layout',\n '!w-(--dx-l0-size) bg-toolbar-surface border-e border-subdued-separator dx-app-drag pb-[env(safe-area-inset-bottom)]',\n ]}\n >\n {/* TODO(wittjosiah): Use L0Item trigger. */}\n <Menu.Root onAction={handleAction}>\n <Menu.Trigger\n asChild\n data-testid='spacePlugin.addSpace'\n className={mx(\n l0ItemRoot,\n 'grid place-items-center dx-focus-ring-group',\n '[body[data-platform=\"macos\"]_&]:mt-[30px]',\n )}\n >\n <Tooltip.Trigger content={t('app menu label')} side='right' asChild>\n <Tabs.TabPrimitive value='options' asChild role='button'>\n <div\n role='none'\n className={mx(\n l0ItemContent,\n 'h-(--dx-rail-action) w-(--dx-rail-action) group-hover/l0item:bg-hover-surface',\n )}\n >\n <Icon icon='ph--list--regular' size={5} />\n </div>\n </Tabs.TabPrimitive>\n </Tooltip.Trigger>\n </Menu.Trigger>\n <Menu.Content group={parent} items={menuActions} />\n </Menu.Root>\n\n {/* Space list. */}\n <ScrollArea.Root thin orientation='vertical'>\n <ScrollArea.Viewport>\n <div\n role='none'\n className={mx([\n 'flex flex-col gap-1 pt-1',\n '[body[data-platform=\"macos\"]_&]:py-[30px]',\n '[body[data-platform=\"ios\"]_&]:py-[max(env(safe-area-inset-top),0.25rem)]',\n ])}\n >\n {topLevelItems.map((item) => (\n <L0Item\n key={item.id}\n item={item}\n parent={parent}\n path={path}\n onItemHover={onItemHover}\n {...(hasRearrangeableItems && { onRearrange: handleRearrange })}\n />\n ))}\n </div>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n\n {/* Actions. */}\n <div role='none' className='grid grid-cols-1 auto-rows-(--dx-rail-action) pt-2'>\n {pinnedItems.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 dx-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 </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-y-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 * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport React, { memo, useCallback, useMemo } from 'react';\n\nimport { Node } from '@dxos/app-graph';\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Graph, useActionRunner, useConnections, useEdges } from '@dxos/plugin-graph';\nimport { DensityProvider, IconButton, ScrollArea, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tree } from '@dxos/react-ui-list';\nimport { Menu, type MenuItem } from '@dxos/react-ui-menu';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/ui-theme';\n\nimport { useActions, useIsAlternateTree, useLoadDescendents } from '../../hooks';\nimport { meta } from '../../meta';\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { NavTreeItemAction, NavTreeItemColumns } from '../NavTreeItem';\n\nexport type L1PanelProps = {\n open?: boolean;\n path: string[];\n item: Node.Node;\n isCurrent: boolean;\n onBack?: () => void;\n};\n\n/**\n * Space or settings panel.\n */\nconst L1Panel$ = ({ open, path, item, isCurrent, onBack }: L1PanelProps) => {\n const { t } = useTranslation(meta.id);\n const title = toLocalizedString(item.properties.label, t);\n const isActivated = useIsActivatedWorkspace(item);\n const shouldRenderContent = isCurrent || isActivated;\n\n return (\n <Tabs.Tabpanel\n key={item.id}\n value={item.id}\n classNames={[\n 'absolute inset-y-0 end-0',\n 'w-[calc(100%-var(--dx-l0-size))] lg:w-(--dx-l1-size) grid-cols-1 grid-rows-[var(--dx-rail-size)_1fr]',\n 'py-[env(safe-area-inset-top)]',\n isCurrent && 'grid',\n ]}\n tabIndex={-1}\n aria-label={title}\n {...(isCurrent && { 'data-testid': 'navtree.workspace.visible' })}\n {...(!open && { inert: true })}\n >\n {shouldRenderContent && <L1PanelContent open={open} path={path} item={item} onBack={onBack} />}\n </Tabs.Tabpanel>\n );\n};\n\n/** Determines whether a workspace tab has been populated with real child content (i.e. expanded at least once). */\nconst useIsActivatedWorkspace = (item: Node.Node): boolean => {\n const { graph } = useAppGraph();\n const edges = useEdges(graph, item.id);\n\n return useMemo(() => {\n const childIds = edges[Graph.relationKey('child')] ?? [];\n return childIds.some((childId) => {\n const child = Graph.getNode(graph, childId);\n if (Option.isNone(child)) {\n return false;\n }\n return child.value.properties.disposition === undefined;\n });\n }, [edges, graph]);\n};\n\n/**\n * Mounted panel content for active or previously-visited tabs.\n */\nconst L1PanelContent = ({ path, item, onBack }: Pick<L1PanelProps, 'open' | 'path' | 'item' | 'onBack'>) => {\n const navTreeContext = useNavTreeContext();\n\n const alternateTree = useAlternateTreeItem(item);\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const isAlternate = useIsAlternateTree(alternatePath, item);\n\n return (\n <DensityProvider density='fine'>\n <L1PanelHeader path={path} item={item} onBack={onBack} />\n <ScrollArea.Root thin orientation='vertical'>\n <ScrollArea.Viewport>\n {isAlternate && alternateTree ? (\n <Tree\n model={navTreeContext.model}\n id={alternateTree.id}\n rootId={alternateTree.id}\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 blockInstruction={navTreeContext.blockInstruction}\n canDrop={navTreeContext.canDrop}\n canSelect={navTreeContext.canSelect}\n onOpenChange={navTreeContext.onOpenChange}\n onSelect={navTreeContext.onSelect}\n onItemHover={navTreeContext.onItemHover}\n />\n ) : (\n <Tree\n model={navTreeContext.model}\n id={item.id}\n rootId={item.id}\n path={path}\n levelOffset={5}\n gridTemplateColumns='[tree-row-start] 1fr min-content min-content min-content [tree-row-end]'\n draggable\n renderColumns={NavTreeItemColumns}\n blockInstruction={navTreeContext.blockInstruction}\n canDrop={navTreeContext.canDrop}\n canSelect={navTreeContext.canSelect}\n onOpenChange={navTreeContext.onOpenChange}\n onSelect={navTreeContext.onSelect}\n onItemHover={navTreeContext.onItemHover}\n />\n )}\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </DensityProvider>\n );\n};\n\n/**\n * Header row.\n */\nconst L1PanelHeader = ({ item, path, onBack }: Pick<L1PanelProps, 'item' | 'path' | 'onBack'>) => {\n const { t } = useTranslation(meta.id);\n const { renderItemEnd: ItemEnd } = useNavTreeContext();\n const title = toLocalizedString(item.properties.label, t);\n const backCapableWorkspace = item.id.startsWith('!');\n\n const { primaryAction, groupedActions, menuActions, onAction } = useL1MenuActions({ item, path });\n useLoadDescendents(item);\n\n return (\n <div className='flex w-full items-center border-b border-subdued-separator dx-app-drag dx-density-coarse pe-1'>\n {backCapableWorkspace ? (\n <IconButton\n size={5}\n density='coarse'\n classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon='ph--caret-left--regular'\n iconOnly\n label={t('button back')}\n data-testid='treeView.primaryTreeButton'\n onClick={() => onBack?.()}\n />\n ) : (\n <div className='w-6' />\n )}\n <h2 className='flex-1 truncate min-w-0'>{title}</h2>\n {/* TODO(wittjosiah): Reconcile with NavTreeItemColumns. */}\n <div role='none' className='contents dx-app-no-drag'>\n {primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled && (\n <NavTreeItemAction\n testId={primaryAction.properties?.testId}\n label={toLocalizedString(primaryAction.properties?.label, t)}\n icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}\n parent={item}\n monolithic={Node.isAction(primaryAction)}\n menuActions={Node.isAction(primaryAction) ? [primaryAction] : groupedActions[primaryAction?.id ?? '']}\n menuType={primaryAction.properties?.menuType}\n caller={NAV_TREE_ITEM}\n />\n )}\n {menuActions.length === 1 && (\n <IconButton\n size={5}\n density='coarse'\n classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon={menuActions[0].properties?.icon ?? 'ph--placeholder--regular'}\n iconOnly\n label={toLocalizedString(menuActions[0].properties?.label, t)}\n data-testid={menuActions[0].properties?.testId}\n onClick={() => onAction(menuActions[0] as Node.Action)}\n />\n )}\n {menuActions.length > 1 && (\n <Menu.Root caller={NAV_TREE_ITEM} onAction={onAction}>\n <Menu.Trigger asChild>\n <IconButton\n size={5}\n density='coarse'\n classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n iconOnly\n label={t('tree item actions label')}\n data-testid='navtree.treeItem.actionsLevel0'\n />\n </Menu.Trigger>\n <Menu.Content group={item} items={menuActions as MenuItem[]} />\n </Menu.Root>\n )}\n {ItemEnd && <ItemEnd node={item} open />}\n </div>\n </div>\n );\n};\n\n/**\n * Builds the menu actions for the L1 panel header, combining graph actions with a synthetic settings/back action.\n */\nconst useL1MenuActions = ({ item, path }: Pick<L1PanelProps, 'item' | 'path'>) => {\n const { t } = useTranslation(meta.id);\n const { setAlternateTree } = useNavTreeContext();\n const { graph } = useAppGraph();\n const runAction = useActionRunner();\n\n const alternateTree = useAlternateTreeItem(item);\n const alternatePath = useMemo(() => [...path, item.id], [item.id, path]);\n const isAlternate = useIsAlternateTree(alternatePath, item);\n\n // Graph actions.\n const { actions: actionsProp, groupedActions } = useActions(item);\n const [primaryAction, ...secondaryActions] = actionsProp.toSorted((a, _b) =>\n a.properties?.disposition === 'list-item-primary' ? -1 : 1,\n );\n\n const graphMenuActions = (\n primaryAction?.properties?.disposition === 'list-item-primary' ? secondaryActions : actionsProp\n )\n .flatMap((action) => (Node.isAction(action) ? [action] : []))\n .filter((a) => ['list-item', 'list-item-primary'].includes(a.properties?.disposition));\n\n // Synthetic settings/back action.\n const settingsActionId = `${item.id}~settings`;\n const settingsAction = useMemo((): Node.Action | undefined => {\n if (!alternateTree) {\n return undefined;\n }\n return {\n id: settingsActionId,\n type: Node.ActionType,\n data: () => Effect.void,\n properties: {\n label: isAlternate ? ['button back', { ns: meta.id }] : (alternateTree.properties.label ?? alternateTree.id),\n icon: isAlternate\n ? 'ph--arrow-u-down-left--regular'\n : (alternateTree.properties.icon ?? 'ph--placeholder--regular'),\n disposition: 'list-item',\n testId: isAlternate ? 'navtree.backToSpace' : 'navtree.spaceSettings',\n },\n } as Node.Action;\n }, [alternateTree, isAlternate, settingsActionId, t]);\n\n const menuActions = useMemo(\n () => [...graphMenuActions, ...(settingsAction ? [settingsAction] : [])],\n [graphMenuActions, settingsAction],\n );\n\n const onAction = useCallback(\n (action: Node.Action, params?: Node.InvokeProps) => {\n if (action.id === settingsActionId) {\n if (alternateTree && !isAlternate) {\n Graph.expand(graph, alternateTree.id, 'child');\n }\n setAlternateTree?.(alternatePath, !isAlternate);\n } else {\n void runAction(action, params);\n }\n },\n [settingsActionId, setAlternateTree, alternatePath, isAlternate, runAction, graph, alternateTree],\n );\n\n return { primaryAction, groupedActions, menuActions, onAction };\n};\n\n/** Finds the first child with disposition 'alternate-tree' using graph connections directly. */\nconst useAlternateTreeItem = (item: Node.Node): Node.Node | undefined => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, item.id, 'child');\n return connections.find((node) => node.properties.disposition === 'alternate-tree');\n};\n\nexport const L1Panel = memo(L1Panel$);\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Node } from '@dxos/app-graph';\nimport { useActionRunner } from '@dxos/plugin-graph';\nimport { IconButton, toLocalizedString, useDensityContext, useTranslation } from '@dxos/react-ui';\nimport { Menu, type MenuItem } from '@dxos/react-ui-menu';\nimport { hoverableControlItem, hoverableOpenControlItem } from '@dxos/ui-theme';\n\nimport { meta } from '../../meta';\nimport { type ActionProperties } from '../../types';\n\nexport type NavTreeItemActionMenuProps = ActionProperties & {\n parent: Node.Node;\n caller?: string;\n monolithic?: boolean;\n menuActions?: Node.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 const runAction = useActionRunner();\n\n return (\n <Menu.Root caller={caller} onAction={runAction}>\n <Menu.Trigger asChild>\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon={icon ?? fallbackIcon}\n iconOnly\n label={toLocalizedString(label, t)}\n data-testid={testId}\n />\n </Menu.Trigger>\n <Menu.Content group={parent} items={menuActions as MenuItem[]} />\n </Menu.Root>\n );\n};\n\nexport const NavTreeItemMonolithicAction = (\n props: Node.Action & { parent: Node.Node; onAction?: (action: Node.Action) => void; baseLabel: string },\n) => {\n const {\n parent,\n properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },\n baseLabel,\n } = props;\n const density = useDensityContext();\n const runAction = useActionRunner();\n return (\n <IconButton\n {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}\n variant={variant}\n classNames={[\n 'shrink-0',\n hoverableControlItem,\n hoverableOpenControlItem,\n iconOnly ? 'px-2 pointer-fine:px-1' : 'p-2 pointer-fine:p-2 me-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 runAction(props, 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, useMemo } from 'react';\n\nimport { Node } from '@dxos/app-graph';\nimport { Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { useActions } 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 { renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();\n\n const level = path.length - 2;\n const { actions: actionsProp, groupedActions } = useActions(item);\n const sortedActions = useMemo(\n () =>\n actionsProp.toSorted((actionA, actionB) => {\n const primaryA = actionA.properties?.disposition === 'list-item-primary';\n const primaryB = actionB.properties?.disposition === 'list-item-primary';\n if (primaryA && !primaryB) {\n return -1;\n }\n if (primaryB && !primaryA) {\n return 1;\n }\n return 0;\n }),\n [actionsProp],\n );\n const [primaryAction, ...secondaryActions] = sortedActions;\n\n const actions = useMemo(\n () =>\n (primaryAction?.properties?.disposition === 'list-item-primary' ? secondaryActions : sortedActions)\n .flatMap((action) => (Node.isAction(action) ? [action] : []))\n .filter((a) => ['list-item', 'list-item-primary'].includes(a.properties?.disposition)),\n [sortedActions, primaryAction],\n );\n\n const primaryMenuActions = useMemo(\n () =>\n primaryAction\n ? Node.isAction(primaryAction)\n ? [primaryAction]\n : groupedActions[primaryAction?.id ?? '']\n : undefined,\n [primaryAction, groupedActions],\n );\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 dx-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={Node.isAction(primaryAction)}\n menuActions={primaryMenuActions}\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 from 'react';\n\nimport { type Node } from '@dxos/app-graph';\n\nimport { l0ItemType } from '../../util';\n\nimport { L1Panel, type L1PanelProps } from './L1Panel';\n\nexport type L1TabsProps = Pick<L1PanelProps, 'open' | 'onBack'> & {\n currentItemId: string;\n path: string[];\n topLevelItems: Node.Node[];\n};\n\n/**\n * Each workspace is an L1 tab.\n */\nexport const L1Tabs = ({ topLevelItems, currentItemId, onBack, open, path }: L1TabsProps) => {\n return (\n <>\n {topLevelItems.map((item) => {\n const type = l0ItemType(item);\n if (type === 'tab') {\n return (\n <L1Panel\n key={item.id}\n item={item}\n path={path}\n open={open}\n onBack={onBack}\n isCurrent={item.id === currentItemId}\n />\n );\n }\n return null;\n })}\n </>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["Graph", "Node", "isNonNullable", "getParent", "graph", "node", "path", "parentId", "length", "Graph", "getConnections", "id", "Node", "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", "isNonNullable", "filterItems", "action", "isAction", "l0ItemType", "item", "isActionLike", "monitorForElements", "extractInstruction", "React", "forwardRef", "memo", "useCallback", "useEffect", "useMemo", "useRef", "Surface", "useOperationInvoker", "LayoutOperation", "useAppGraph", "useLayout", "Graph", "Node", "useActionRunner", "useMediaQuery", "useSidebars", "isTreeData", "arrayMove", "React", "forwardRef", "useMemo", "useAppGraph", "Node", "useConnections", "useActions", "useGraphActions", "Tabs", "byPosition", "useMemo", "useAppGraph", "Graph", "Node", "useActions", "useGraphActions", "useActions", "node", "graph", "useAppGraph", "actions", "useGraphActions", "id", "useMemo", "reduce", "acc", "arg", "properties", "disposition", "push", "Node", "isAction", "actionGroup", "Graph", "getActions", "groupedActions", "useEffect", "useAppGraph", "Graph", "useLoadDescendents", "root", "graph", "useAppGraph", "useEffect", "Graph", "expand", "id", "Atom", "Option", "useMemo", "useAppGraph", "PLANK_COMPANION_TYPE", "Path", "mx", "useAtomValue", "useMemo", "useCapability", "useNavTreeState", "useCapability", "NavTreeCapabilities", "State", "useNavTreeItemState", "path", "getItemAtom", "pathKey", "useMemo", "join", "atom", "useAtomValue", "useIsAlternateTree", "_item", "alternateTree", "isVisibleChild", "node", "type", "PLANK_COMPANION_TYPE", "properties", "disposition", "createItemPropsFamily", "graph", "Atom", "family", "pathKey", "path", "Path", "parts", "id", "last", "make", "get", "nodeOpt", "getOrElse", "undefined", "label", "safeChildren", "connections", "filter", "child", "includes", "visibleChildren", "parentOf", "length", "map", "role", "disabled", "className", "mx", "modified", "headingClassName", "icon", "iconHue", "testId", "pipe", "keepAlive", "createChildIdsFamily", "createItemFamily", "passed", "filterItems", "createItemOpenFamily", "getItemAtom", "stateAtom", "open", "createItemCurrentFamily", "current", "useNavTreeModel", "rootId", "useAppGraph", "useNavTreeState", "itemPropsFamily", "useMemo", "childIdsFamily", "itemFamily", "itemOpenFamily", "itemCurrentFamily", "item", "itemProps", "create", "itemOpen", "itemCurrent", "childIds", "parentId", "createContext", "useContext", "raise", "NavTreeContext", "createContext", "useNavTreeContext", "useContext", "raise", "Error", "combine", "draggable", "dropTargetForElements", "preserveOffsetOnSource", "scrollJustEnoughIntoView", "attachClosestEdge", "extractClosestEdge", "useAtomValue", "React", "forwardRef", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "useState", "DxAvatar", "useActionRunner", "Icon", "ListItem", "ScrollArea", "Tooltip", "toLocalizedString", "useMediaQuery", "useTranslation", "Menu", "Tabs", "mx", "arrayMove", "React", "Avatar", "hexToFallback", "UserAccountAvatar", "size", "userId", "hue", "emoji", "status", "fallbackValue", "hexToFallback", "L0ItemActiveTabIndicator", "classNames", "div", "className", "data-joyride", "Avatar", "Root", "Content", "variant", "fallback", "data-testid", "useL0ItemClick", "item", "parent", "path", "type", "onSelect", "onTabChange", "useNavTreeContext", "getItem", "useNavTreeState", "isLg", "useMediaQuery", "runAction", "useActionRunner", "useCallback", "event", "properties", "caller", "current", "option", "altKey", "l0Breakpoints", "lg", "l0ItemRoot", "l0ItemContent", "L0ItemRoot", "memo", "forwardRef", "onMouseEnter", "children", "forwardedRef", "model", "itemPath", "useMemo", "id", "testId", "useAtomValue", "itemProps", "l0ItemType", "t", "useTranslation", "meta", "localizedString", "toLocalizedString", "label", "handleClick", "rootProps", "value", "tabIndex", "onClick", "React", "Tooltip", "Trigger", "asChild", "delayDuration", "side", "content", "Tabs", "TabPrimitive", "data-type", "className", "mx", "l0Breakpoint", "ref", "L0ItemActiveTabIndicator", "classNames", "div", "role", "L0Item", "pinned", "onRearrange", "onItemHover", "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", "data", "extractClosestEdge", "onDrag", "onDragLeave", "handleMouseEnter", "data-frame", "style", "background", "ItemAvatar", "span", "ListItem", "DropIndicator", "edge", "icon", "hueFgStyle", "color", "Icon", "size", "disposition", "DxAvatar", "hueVariant", "variant", "fallback", "L0Menu", "menuActions", "topLevelItems", "pinnedItems", "userAccountItem", "handleAction", "action", "params", "handleRearrange", "target", "sourceItem", "find", "i", "sourceIndex", "findIndex", "targetIndex", "insertIndex", "nextOrder", "arrayMove", "map", "hasRearrangeableItems", "some", "Tablist", "Menu", "Root", "onAction", "data-testid", "Content", "group", "items", "ScrollArea", "thin", "orientation", "Viewport", "key", "UserAccountAvatar", "userId", "emoji", "status", "Effect", "Option", "React", "memo", "useCallback", "useMemo", "Node", "useAppGraph", "Graph", "useActionRunner", "useConnections", "useEdges", "DensityProvider", "IconButton", "ScrollArea", "toLocalizedString", "useTranslation", "Tree", "Menu", "Tabs", "hoverableControlItem", "hoverableOpenControlItem", "React", "useActionRunner", "IconButton", "toLocalizedString", "useDensityContext", "useTranslation", "Menu", "hoverableControlItem", "hoverableOpenControlItem", "fallbackIcon", "fineActionButtonProps", "size", "density", "coarseActionButtonProps", "NavTreeItemActionDropdownMenu", "parent", "label", "icon", "testId", "menuActions", "caller", "t", "useTranslation", "meta", "id", "useDensityContext", "runAction", "useActionRunner", "React", "Menu", "Root", "onAction", "Trigger", "asChild", "IconButton", "classNames", "hoverableControlItem", "hoverableOpenControlItem", "variant", "iconOnly", "toLocalizedString", "data-testid", "Content", "group", "items", "NavTreeItemMonolithicAction", "props", "properties", "disabled", "baseLabel", "onClick", "event", "stopPropagation", "NavTreeItemAction", "monolithic", "node", "monolithicAction", "length", "React", "Fragment", "memo", "useMemo", "Node", "Popover", "Treegrid", "toLocalizedString", "useTranslation", "NavTreeItemColumns", "memo", "path", "item", "open", "t", "useTranslation", "meta", "id", "renderItemEnd", "ItemEnd", "popoverAnchorId", "useNavTreeContext", "level", "length", "actions", "actionsProp", "groupedActions", "useActions", "sortedActions", "useMemo", "toSorted", "actionA", "actionB", "primaryA", "properties", "disposition", "primaryB", "primaryAction", "secondaryActions", "flatMap", "action", "Node", "isAction", "filter", "a", "includes", "primaryMenuActions", "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", "isCurrent", "onBack", "t", "useTranslation", "meta", "id", "title", "toLocalizedString", "properties", "label", "isActivated", "useIsActivatedWorkspace", "shouldRenderContent", "React", "Tabs", "Tabpanel", "key", "value", "classNames", "tabIndex", "aria-label", "inert", "L1PanelContent", "graph", "useAppGraph", "edges", "useEdges", "useMemo", "childIds", "Graph", "relationKey", "some", "childId", "child", "getNode", "isNone", "disposition", "undefined", "navTreeContext", "useNavTreeContext", "alternateTree", "useAlternateTreeItem", "alternatePath", "isAlternate", "useIsAlternateTree", "DensityProvider", "density", "L1PanelHeader", "ScrollArea", "Root", "thin", "orientation", "Viewport", "Tree", "model", "rootId", "levelOffset", "gridTemplateColumns", "renderColumns", "NavTreeItemColumns", "blockInstruction", "canDrop", "canSelect", "onOpenChange", "onSelect", "onItemHover", "draggable", "renderItemEnd", "ItemEnd", "backCapableWorkspace", "startsWith", "primaryAction", "groupedActions", "menuActions", "onAction", "useL1MenuActions", "useLoadDescendents", "div", "className", "IconButton", "size", "hoverableControlItem", "hoverableOpenControlItem", "variant", "icon", "iconOnly", "data-testid", "onClick", "h2", "role", "disabled", "NavTreeItemAction", "testId", "parent", "monolithic", "Node", "isAction", "menuType", "caller", "NAV_TREE_ITEM", "length", "Menu", "Trigger", "asChild", "Content", "group", "items", "node", "setAlternateTree", "runAction", "useActionRunner", "actions", "actionsProp", "useActions", "secondaryActions", "toSorted", "a", "_b", "graphMenuActions", "flatMap", "action", "filter", "includes", "settingsActionId", "settingsAction", "type", "ActionType", "data", "void", "ns", "useCallback", "params", "expand", "connections", "useConnections", "find", "L1Panel", "memo", "React", "L1Tabs", "topLevelItems", "currentItemId", "onBack", "open", "path", "React", "map", "item", "type", "l0ItemType", "L1Panel", "key", "id", "isCurrent", "NAV_TREE_ITEM", "NavTree", "forwardRef", "id", "root", "tab", "props", "forwardedRef", "onBack", "onItemHover", "useNavTreeContext", "topLevelActions", "l0Items", "pinnedItems", "userAccountItem", "topLevelItems", "useTopLevelNavItems", "useLoadDescendents", "path", "useMemo", "React", "Tabs", "Root", "value", "orientation", "verticalVariant", "classNames", "ref", "L0Menu", "menuActions", "parent", "L1Tabs", "currentItemId", "graph", "useAppGraph", "rootId", "Node", "RootId", "rootOutboundItems", "useConnections", "rootActions", "useGraphActions", "topLevelWorkspaces", "outboundPinnedItems", "node", "properties", "disposition", "push", "filter", "action", "toSorted", "a", "b", "byPosition", "NODE_TYPE", "NavTreeItemEnd", "node", "open", "data", "useMemo", "id", "subject", "React", "Surface", "role", "limit", "getItems", "graph", "disposition", "Graph", "getConnections", "Node", "RootId", "filter", "filterItems", "NavTreeContainer$", "forwardRef", "tab", "popoverAnchorId", "forwardedRef", "isLg", "useMediaQuery", "invokeSync", "invokePromise", "useOperationInvoker", "runAction", "useActionRunner", "useAppGraph", "getItem", "setItem", "useNavTreeState", "layout", "useLayout", "model", "useNavTreeModel", "navigationSidebarState", "useSidebars", "meta", "latestRef", "useRef", "activeItems", "active", "useEffect", "current", "handleOpenChange", "useCallback", "item", "path", "expand", "handleTabChange", "activeTab", "currentSidebarState", "latestIsLg", "LayoutOperation", "UpdateSidebar", "state", "SwitchWorkspace", "length", "isActionLike", "Open", "blockInstruction", "instruction", "source", "target", "properties", "canDrop", "canSelect", "selectable", "handleSelect", "option", "isAction", "parent", "childRelation", "caller", "NAV_TREE_ITEM", "key", "Close", "ScrollIntoView", "defaultAction", "getActions", "find", "action", "handleBack", "RevertWorkspace", "monitorForElements", "canMonitor", "isTreeData", "onDrop", "location", "dropTargets", "extractInstruction", "type", "sourceNode", "targetNode", "sourcePath", "targetPath", "operation", "slice", "join", "resolveMigrationOperation", "sourceParent", "getParent", "targetParent", "sourceItems", "targetItems", "sourceIndex", "findIndex", "targetIndex", "migrationIndex", "undefined", "nextItems", "map", "arrayMove", "onRearrange", "onCopy", "onTransferStart", "onTransferEnd", "setAlternateTree", "onItemHover", "navTreeContextValue", "renderItemEnd", "onBack", "onOpenChange", "onSelect", "onTabChange", "NavTreeContext", "Provider", "value", "NavTree", "root", "getRoot", "sidebarOpen", "ref", "NavTreeContainer", "memo"]
7
+ }
@@ -0,0 +1,14 @@
1
+ // src/containers/index.ts
2
+ import { lazy } from "react";
3
+ var CommandsDialogContent = lazy(() => import("./CommandsDialogContent-A27AKTHH.mjs"));
4
+ var CommandsTrigger = lazy(() => import("./CommandsTrigger-HBZYQCGV.mjs"));
5
+ var NavTreeContainer = lazy(() => import("./NavTreeContainer-B5K4FUJS.mjs"));
6
+ var NavTreeDocumentTitle = lazy(() => import("./NavTreeDocumentTitle-GEE3URWH.mjs"));
7
+
8
+ export {
9
+ CommandsDialogContent,
10
+ CommandsTrigger,
11
+ NavTreeContainer,
12
+ NavTreeDocumentTitle
13
+ };
14
+ //# sourceMappingURL=chunk-H3OJ4WLF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport { NODE_TYPE } from './NavTreeContainer/NavTreeContainer';\n\nexport const CommandsDialogContent: ComponentType<any> = lazy(() => import('./CommandsDialogContent'));\nexport const CommandsTrigger: ComponentType<any> = lazy(() => import('./CommandsTrigger'));\nexport const NavTreeContainer: ComponentType<any> = lazy(() => import('./NavTreeContainer'));\nexport const NavTreeDocumentTitle: ComponentType<any> = lazy(() => import('./NavTreeDocumentTitle'));\n"],
5
+ "mappings": ";AAIA,SAA6BA,YAAY;AAIlC,IAAMC,wBAA4CC,KAAK,MAAM,OAAO,sCAAA,CAAA;AACpE,IAAMC,kBAAsCD,KAAK,MAAM,OAAO,gCAAA,CAAA;AAC9D,IAAME,mBAAuCF,KAAK,MAAM,OAAO,iCAAA,CAAA;AAC/D,IAAMG,uBAA2CH,KAAK,MAAM,OAAO,qCAAA,CAAA;",
6
+ "names": ["lazy", "CommandsDialogContent", "lazy", "CommandsTrigger", "NavTreeContainer", "NavTreeDocumentTitle"]
7
+ }
@@ -0,0 +1,23 @@
1
+ import {
2
+ meta
3
+ } from "./chunk-YKTYPINZ.mjs";
4
+
5
+ // src/types/capabilities.ts
6
+ import { Capability } from "@dxos/app-framework";
7
+ (function(NavTreeCapabilities2) {
8
+ NavTreeCapabilities2.State = Capability.make(`${meta.id}/capability/state`);
9
+ })(NavTreeCapabilities || (NavTreeCapabilities = {}));
10
+ var NavTreeCapabilities;
11
+
12
+ // src/types/events.ts
13
+ import { AppActivationEvents } from "@dxos/app-toolkit";
14
+ (function(NavTreeEvents2) {
15
+ NavTreeEvents2.StateReady = AppActivationEvents.createStateEvent(meta.id);
16
+ })(NavTreeEvents || (NavTreeEvents = {}));
17
+ var NavTreeEvents;
18
+
19
+ export {
20
+ NavTreeCapabilities,
21
+ NavTreeEvents
22
+ };
23
+ //# sourceMappingURL=chunk-X2HDG62A.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/capabilities.ts", "../../../src/types/events.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Atom } from '@effect-atom/atom-react';\n\nimport { Capability } from '@dxos/app-framework';\n\nimport { meta } from '../meta';\n\nexport namespace NavTreeCapabilities {\n export type NavTreeItemState = { open: boolean; current: boolean; alternateTree?: boolean };\n\n export type NavTreeStateStore = {\n getItem: (path: string[]) => NavTreeItemState;\n getItemAtom: (path: string[]) => Atom.Atom<NavTreeItemState>;\n setItem: (path: string[], key: 'open' | 'current' | 'alternateTree', next: boolean) => void;\n };\n\n export const State = Capability.make<NavTreeStateStore>(`${meta.id}/capability/state`);\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { meta } from '../meta';\n\nexport namespace NavTreeEvents {\n export const StateReady: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(meta.id);\n}\n"],
5
+ "mappings": ";;;;;AAMA,SAASA,kBAAkB;UAIVC,sBAAAA;uBASFC,QAAQC,WAAWC,KAAwB,GAAGC,KAAKC,EAAE,mBAAmB;AACvF,GAViBL,wBAAAA,sBAAAA,CAAAA,EAAAA;;;;ACLjB,SAASM,2BAA2B;UAInBC,gBAAAA;iBACFC,aAA8CC,oBAAoBC,iBAAiBC,KAAKC,EAAE;AACzG,GAFiBL,kBAAAA,gBAAAA,CAAAA,EAAAA;;",
6
+ "names": ["Capability", "NavTreeCapabilities", "State", "Capability", "make", "meta", "id", "AppActivationEvents", "NavTreeEvents", "StateReady", "AppActivationEvents", "createStateEvent", "meta", "id"]
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-YKTYPINZ.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 Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\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,OAAoB;EAC/BC,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
+ }
@@ -1,37 +1,49 @@
1
+ import "./chunk-H3OJ4WLF.mjs";
1
2
  import {
2
- AppGraphBuilder,
3
- IntentResolver,
4
- Keyboard,
5
3
  NODE_TYPE,
6
- ReactSurface,
7
- State,
8
- getActions,
4
+ filterItems,
9
5
  getChildren,
10
6
  getParent,
11
7
  getPersistenceParent,
12
8
  l0ItemType,
13
9
  resolveMigrationOperation,
14
10
  sortActions
15
- } from "./chunk-SICQTLXC.mjs";
11
+ } from "./chunk-DQCYMXEU.mjs";
16
12
  import {
17
- NavTreeCapabilities
18
- } from "./chunk-WCARAZ7J.mjs";
13
+ NavTreeCapabilities,
14
+ NavTreeEvents
15
+ } from "./chunk-X2HDG62A.mjs";
19
16
  import {
20
17
  COMMANDS_DIALOG,
21
18
  KEY_BINDING,
22
- NAVTREE_PLUGIN,
23
19
  meta
24
- } from "./chunk-ERDGQTH5.mjs";
25
-
26
- // src/events.ts
27
- import { Events } from "@dxos/app-framework";
28
- (function(NavTreeEvents2) {
29
- NavTreeEvents2.StateReady = Events.createStateEvent(NAVTREE_PLUGIN);
30
- })(NavTreeEvents || (NavTreeEvents = {}));
31
- var NavTreeEvents;
20
+ } from "./chunk-YKTYPINZ.mjs";
32
21
 
33
22
  // src/NavTreePlugin.tsx
34
- import { definePlugin, defineModule, Events as Events2, contributes, Capabilities, allOf, createIntent, LayoutAction } from "@dxos/app-framework";
23
+ import * as Effect from "effect/Effect";
24
+ import { ActivationEvent, ActivationEvents, Capabilities, Capability as Capability6, Plugin } from "@dxos/app-framework";
25
+ import { AppActivationEvents, AppCapabilities, AppPlugin, LayoutOperation } from "@dxos/app-toolkit";
26
+ import { Graph } from "@dxos/plugin-graph";
27
+
28
+ // src/capabilities/app-graph-builder/index.ts
29
+ import { Capability } from "@dxos/app-framework";
30
+ var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("./app-graph-builder-XGA4GPGL.mjs"));
31
+
32
+ // src/capabilities/keyboard/index.ts
33
+ import { Capability as Capability2 } from "@dxos/app-framework";
34
+ var Keyboard = Capability2.lazy("Keyboard", () => import("./keyboard-OJZC54PK.mjs"));
35
+
36
+ // src/capabilities/operation-resolver/index.ts
37
+ import { Capability as Capability3 } from "@dxos/app-framework";
38
+ var OperationResolver = Capability3.lazy("OperationResolver", () => import("./operation-resolver-BNAMYOHF.mjs"));
39
+
40
+ // src/capabilities/react-surface/index.ts
41
+ import { Capability as Capability4 } from "@dxos/app-framework";
42
+ var ReactSurface = Capability4.lazy("ReactSurface", () => import("./react-surface-AYHOAJ4I.mjs"));
43
+
44
+ // src/capabilities/state/index.ts
45
+ import { Capability as Capability5 } from "@dxos/app-framework";
46
+ var State = Capability5.lazy("State", () => import("./state-AC3EETN7.mjs"));
35
47
 
36
48
  // src/translations.ts
37
49
  var translations = [
@@ -45,99 +57,79 @@ var translations = [
45
57
  "command list input placeholder": "Search for commands\u2026",
46
58
  "node actions menu invoker label": "More options",
47
59
  "tree item actions label": "More actions",
48
- "empty branch message": "\xA0"
60
+ "empty branch message": "\xA0",
61
+ "button back": "Back to Space"
49
62
  }
50
63
  }
51
64
  }
52
65
  ];
53
66
 
54
67
  // src/NavTreePlugin.tsx
55
- var NavTreePlugin = () => definePlugin(meta, [
56
- defineModule({
57
- id: `${meta.id}/module/state`,
58
- activatesOn: Events2.LayoutReady,
59
- activatesAfter: [
60
- NavTreeEvents.StateReady
61
- ],
62
- activate: State
63
- }),
64
- defineModule({
65
- id: `${meta.id}/module/translations`,
66
- activatesOn: Events2.SetupTranslations,
67
- activate: () => contributes(Capabilities.Translations, translations)
68
- }),
69
- defineModule({
70
- id: `${meta.id}/module/metadata`,
71
- activatesOn: Events2.SetupMetadata,
72
- activate: () => contributes(Capabilities.Metadata, {
73
- id: NODE_TYPE,
74
- metadata: {
75
- parse: ({ item }, type) => {
76
- switch (type) {
77
- case "node":
78
- return item;
79
- case "object":
80
- return item.data;
81
- case "view-object":
82
- return {
83
- id: `${item.id}-view`,
84
- object: item.data
85
- };
86
- }
68
+ var NavTreePlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
69
+ activate: AppGraphBuilder
70
+ }), AppPlugin.addMetadataModule({
71
+ metadata: {
72
+ id: NODE_TYPE,
73
+ metadata: {
74
+ parse: ({ item }, type) => {
75
+ switch (type) {
76
+ case "node":
77
+ return item;
78
+ case "object":
79
+ return item.data;
80
+ case "view-object":
81
+ return {
82
+ id: `${item.id}-view`,
83
+ object: item.data
84
+ };
87
85
  }
88
86
  }
89
- })
90
- }),
91
- defineModule({
92
- id: `${meta.id}/module/expose`,
93
- activatesOn: allOf(Events2.DispatcherReady, Events2.AppGraphReady, Events2.LayoutReady, NavTreeEvents.StateReady),
94
- activate: async (context) => {
95
- const layout = context.getCapability(Capabilities.Layout);
96
- const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
97
- const { graph } = context.getCapability(Capabilities.AppGraph);
98
- if (dispatch && layout.active.length === 1) {
99
- void graph.waitForPath({
100
- target: layout.active[0]
101
- }, {
102
- timeout: 3e4
103
- }).then(() => dispatch(createIntent(LayoutAction.Expose, {
104
- part: "navigation",
105
- subject: layout.active[0]
106
- }))).catch(() => {
107
- });
108
- }
109
- return [];
110
87
  }
111
- }),
112
- defineModule({
113
- id: `${meta.id}/module/keyboard`,
114
- activatesOn: Events2.AppGraphReady,
115
- activate: Keyboard
116
- }),
117
- defineModule({
118
- id: `${meta.id}/module/react-surface`,
119
- activatesOn: Events2.SetupReactSurface,
120
- activate: ReactSurface
121
- }),
122
- defineModule({
123
- id: `${meta.id}/module/intent-resolver`,
124
- activatesOn: Events2.SetupIntentResolver,
125
- activate: IntentResolver
126
- }),
127
- defineModule({
128
- id: `${meta.id}/module/app-graph-builder`,
129
- activatesOn: Events2.SetupAppGraph,
130
- activate: AppGraphBuilder
88
+ }
89
+ }), AppPlugin.addOperationResolverModule({
90
+ activate: OperationResolver
91
+ }), AppPlugin.addSurfaceModule({
92
+ activate: ReactSurface
93
+ }), AppPlugin.addTranslationsModule({
94
+ translations
95
+ }), Plugin.addModule({
96
+ id: "state",
97
+ activatesOn: AppActivationEvents.LayoutReady,
98
+ activatesAfter: [
99
+ NavTreeEvents.StateReady
100
+ ],
101
+ activate: State
102
+ }), Plugin.addModule({
103
+ id: "expose",
104
+ activatesOn: ActivationEvent.allOf(ActivationEvents.OperationInvokerReady, AppActivationEvents.AppGraphReady, AppActivationEvents.LayoutReady, NavTreeEvents.StateReady),
105
+ activate: Effect.fnUntraced(function* () {
106
+ const layout = yield* Capabilities.getAtomValue(AppCapabilities.Layout);
107
+ const { invokePromise } = yield* Capability6.get(Capabilities.OperationInvoker);
108
+ const { graph } = yield* Capability6.get(AppCapabilities.AppGraph);
109
+ if (invokePromise && layout.active.length === 1) {
110
+ void Graph.waitForPath(graph, {
111
+ target: layout.active[0]
112
+ }, {
113
+ timeout: 3e4
114
+ }).then(() => invokePromise(LayoutOperation.Expose, {
115
+ subject: layout.active[0]
116
+ })).catch(() => {
117
+ });
118
+ }
119
+ return [];
131
120
  })
132
- ]);
121
+ }), Plugin.addModule({
122
+ id: "keyboard",
123
+ activatesOn: ActivationEvent.allOf(AppActivationEvents.AppGraphReady, ActivationEvents.OperationInvokerReady),
124
+ activate: Keyboard
125
+ }), Plugin.make);
133
126
  export {
134
127
  COMMANDS_DIALOG,
135
128
  KEY_BINDING,
136
- NAVTREE_PLUGIN,
137
129
  NavTreeCapabilities,
138
130
  NavTreeEvents,
139
131
  NavTreePlugin,
140
- getActions,
132
+ filterItems,
141
133
  getChildren,
142
134
  getParent,
143
135
  getPersistenceParent,