@dxos/plugin-navtree 0.8.4-main.fffef41 → 0.8.4-staging.60fe92afc8

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 (273) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +376 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/CommandsDialogContent-UBGIQ5FI.mjs +112 -0
  5. package/dist/lib/neutral/CommandsDialogContent-UBGIQ5FI.mjs.map +7 -0
  6. package/dist/lib/neutral/CommandsTrigger-BH5WLMHK.mjs +27 -0
  7. package/dist/lib/neutral/CommandsTrigger-BH5WLMHK.mjs.map +7 -0
  8. package/dist/lib/neutral/NavTreeContainer-6AR4BFDD.mjs +12 -0
  9. package/dist/lib/neutral/NavTreeContainer-6AR4BFDD.mjs.map +7 -0
  10. package/dist/lib/neutral/NavTreeDocumentTitle-H3E6ZLYE.mjs +22 -0
  11. package/dist/lib/neutral/NavTreeDocumentTitle-H3E6ZLYE.mjs.map +7 -0
  12. package/dist/lib/neutral/NavTreePlugin.mjs +68 -0
  13. package/dist/lib/neutral/NavTreePlugin.mjs.map +7 -0
  14. package/dist/lib/neutral/NavTreePlugin.node.mjs +18 -0
  15. package/dist/lib/neutral/NavTreePlugin.node.mjs.map +7 -0
  16. package/dist/lib/neutral/NavTreePlugin.workerd.mjs +16 -0
  17. package/dist/lib/neutral/NavTreePlugin.workerd.mjs.map +7 -0
  18. package/dist/lib/neutral/app-graph-builder-Z347LKSF.mjs +42 -0
  19. package/dist/lib/neutral/app-graph-builder-Z347LKSF.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +17 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/chunk-5OPDKH6B.mjs +273 -0
  23. package/dist/lib/neutral/chunk-5OPDKH6B.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  25. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-JOSNCOV4.mjs +79 -0
  27. package/dist/lib/neutral/chunk-JOSNCOV4.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-MDGKDQMZ.mjs +37 -0
  29. package/dist/lib/neutral/chunk-MDGKDQMZ.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-T7QS2EFI.mjs +8 -0
  31. package/dist/lib/neutral/chunk-T7QS2EFI.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-ZSWYB7JW.mjs +27 -0
  33. package/dist/lib/neutral/chunk-ZSWYB7JW.mjs.map +7 -0
  34. package/dist/lib/neutral/components/index.mjs +805 -0
  35. package/dist/lib/neutral/components/index.mjs.map +7 -0
  36. package/dist/lib/neutral/containers/index.mjs +20 -0
  37. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  38. package/dist/lib/neutral/expose-26FV4W5D.mjs +38 -0
  39. package/dist/lib/neutral/expose-26FV4W5D.mjs.map +7 -0
  40. package/dist/lib/neutral/hooks/index.mjs +178 -0
  41. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  42. package/dist/lib/neutral/index.mjs +34 -0
  43. package/dist/lib/neutral/index.mjs.map +7 -0
  44. package/dist/lib/{browser/keyboard-YYTYJW4M.mjs → neutral/keyboard-EJ65BVTC.mjs} +25 -20
  45. package/dist/lib/neutral/keyboard-EJ65BVTC.mjs.map +7 -0
  46. package/dist/lib/neutral/meta.json +1 -0
  47. package/dist/lib/neutral/meta.mjs +12 -0
  48. package/dist/lib/neutral/meta.mjs.map +7 -0
  49. package/dist/lib/neutral/operation-handler-ORDOJUL2.mjs +13 -0
  50. package/dist/lib/neutral/operation-handler-ORDOJUL2.mjs.map +7 -0
  51. package/dist/lib/neutral/operations/index.mjs +8 -0
  52. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  53. package/dist/lib/neutral/plugin.mjs +16 -0
  54. package/dist/lib/neutral/plugin.mjs.map +7 -0
  55. package/dist/lib/neutral/react-surface-Q5XMAG7Z.mjs +50 -0
  56. package/dist/lib/neutral/react-surface-Q5XMAG7Z.mjs.map +7 -0
  57. package/dist/lib/neutral/state-VVJEWUHM.mjs +126 -0
  58. package/dist/lib/neutral/state-VVJEWUHM.mjs.map +7 -0
  59. package/dist/lib/neutral/testing/index.mjs +439 -0
  60. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  61. package/dist/lib/neutral/translations.mjs +23 -0
  62. package/dist/lib/neutral/translations.mjs.map +7 -0
  63. package/dist/lib/neutral/types/index.mjs +10 -0
  64. package/dist/lib/neutral/types/index.mjs.map +7 -0
  65. package/dist/types/src/NavTreePlugin.d.ts +3 -1
  66. package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
  67. package/dist/types/src/NavTreePlugin.node.d.ts +4 -0
  68. package/dist/types/src/NavTreePlugin.node.d.ts.map +1 -0
  69. package/dist/types/src/NavTreePlugin.test.d.ts +2 -0
  70. package/dist/types/src/NavTreePlugin.test.d.ts.map +1 -0
  71. package/dist/types/src/NavTreePlugin.workerd.d.ts +4 -0
  72. package/dist/types/src/NavTreePlugin.workerd.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  74. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/index.d.ts +7 -108
  76. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/keyboard.d.ts +3 -2
  78. package/dist/types/src/capabilities/keyboard.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  80. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  82. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/state.d.ts +4 -18
  84. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  85. package/dist/types/src/components/NavTree/NavTree.d.ts +11 -4
  86. package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
  87. package/dist/types/src/components/NavTree/NavTree.stories.d.ts +10 -12
  88. package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/{NavTreeContext.d.ts → NavTreeContext/NavTreeContext.d.ts} +1 -1
  90. package/dist/types/src/components/NavTreeContext/NavTreeContext.d.ts.map +1 -0
  91. package/dist/types/src/components/NavTreeContext/index.d.ts +2 -0
  92. package/dist/types/src/components/NavTreeContext/index.d.ts.map +1 -0
  93. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts +13 -9
  94. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
  95. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +3 -2
  96. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
  97. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
  98. package/dist/types/src/components/Sidebar/L0Menu.d.ts +8 -5
  99. package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
  100. package/dist/types/src/components/Sidebar/L1Panel.d.ts +4 -7
  101. package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
  102. package/dist/types/src/components/Sidebar/L1Tabs.d.ts +5 -4
  103. package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -1
  104. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -1
  105. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/index.d.ts +0 -3
  107. package/dist/types/src/components/index.d.ts.map +1 -1
  108. package/dist/types/src/components/types.d.ts +8 -17
  109. package/dist/types/src/components/types.d.ts.map +1 -1
  110. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts +6 -0
  111. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -0
  112. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts +28 -0
  113. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts.map +1 -0
  114. package/dist/types/src/containers/CommandsDialogContent/index.d.ts +2 -0
  115. package/dist/types/src/containers/CommandsDialogContent/index.d.ts.map +1 -0
  116. package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -0
  117. package/dist/types/src/containers/CommandsTrigger/index.d.ts +2 -0
  118. package/dist/types/src/containers/CommandsTrigger/index.d.ts.map +1 -0
  119. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts +9 -0
  120. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -0
  121. package/dist/types/src/containers/NavTreeContainer/index.d.ts +3 -0
  122. package/dist/types/src/containers/NavTreeContainer/index.d.ts.map +1 -0
  123. package/dist/types/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.d.ts +1 -1
  124. package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -0
  125. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts +2 -0
  126. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts.map +1 -0
  127. package/dist/types/src/containers/index.d.ts +7 -0
  128. package/dist/types/src/containers/index.d.ts.map +1 -0
  129. package/dist/types/src/experimental/Tree.d.ts +2 -2
  130. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  131. package/dist/types/src/experimental/Tree.stories.d.ts +18 -4
  132. package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
  133. package/dist/types/src/hooks/index.d.ts +5 -0
  134. package/dist/types/src/hooks/index.d.ts.map +1 -0
  135. package/dist/types/src/hooks/useActions.d.ts +11 -0
  136. package/dist/types/src/hooks/useActions.d.ts.map +1 -0
  137. package/dist/types/src/hooks/useLoadDescendents.d.ts +6 -0
  138. package/dist/types/src/hooks/useLoadDescendents.d.ts.map +1 -0
  139. package/dist/types/src/hooks/useNavTreeModel.d.ts +7 -0
  140. package/dist/types/src/hooks/useNavTreeModel.d.ts.map +1 -0
  141. package/dist/types/src/hooks/useNavTreeState.d.ts +18 -0
  142. package/dist/types/src/hooks/useNavTreeState.d.ts.map +1 -0
  143. package/dist/types/src/index.d.ts +1 -3
  144. package/dist/types/src/index.d.ts.map +1 -1
  145. package/dist/types/src/meta.d.ts +4 -3
  146. package/dist/types/src/meta.d.ts.map +1 -1
  147. package/dist/types/src/operations/expose.d.ts +5 -0
  148. package/dist/types/src/operations/expose.d.ts.map +1 -0
  149. package/dist/types/src/operations/index.d.ts +3 -0
  150. package/dist/types/src/operations/index.d.ts.map +1 -0
  151. package/dist/types/src/plugin.d.ts +4 -0
  152. package/dist/types/src/plugin.d.ts.map +1 -0
  153. package/dist/types/src/testing/app-graph-builder.d.ts +2 -3
  154. package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
  155. package/dist/types/src/testing/generator.d.ts +5 -6
  156. package/dist/types/src/testing/generator.d.ts.map +1 -1
  157. package/dist/types/src/testing/update-state.d.ts +2 -2
  158. package/dist/types/src/testing/update-state.d.ts.map +1 -1
  159. package/dist/types/src/translations.d.ts +8 -11
  160. package/dist/types/src/translations.d.ts.map +1 -1
  161. package/dist/types/src/types/NavTreeCapabilities.d.ts +13 -0
  162. package/dist/types/src/types/NavTreeCapabilities.d.ts.map +1 -0
  163. package/dist/types/src/types/NavTreeEvents.d.ts +3 -0
  164. package/dist/types/src/types/NavTreeEvents.d.ts.map +1 -0
  165. package/dist/types/src/types/index.d.ts +4 -0
  166. package/dist/types/src/types/index.d.ts.map +1 -0
  167. package/dist/types/src/{types.d.ts → types/schema.d.ts} +10 -6
  168. package/dist/types/src/types/schema.d.ts.map +1 -0
  169. package/dist/types/src/util.d.ts +12 -8
  170. package/dist/types/src/util.d.ts.map +1 -1
  171. package/dist/types/tsconfig.tsbuildinfo +1 -1
  172. package/package.json +124 -62
  173. package/src/NavTreePlugin.node.ts +17 -0
  174. package/src/NavTreePlugin.test.ts +27 -0
  175. package/src/NavTreePlugin.tsx +46 -76
  176. package/src/NavTreePlugin.workerd.ts +16 -0
  177. package/src/capabilities/app-graph-builder.ts +34 -45
  178. package/src/capabilities/index.ts +10 -8
  179. package/src/capabilities/keyboard.ts +58 -51
  180. package/src/capabilities/operation-handler.ts +16 -0
  181. package/src/capabilities/react-surface.tsx +46 -38
  182. package/src/capabilities/state.ts +132 -84
  183. package/src/components/NavTree/NavTree.stories.tsx +55 -63
  184. package/src/components/NavTree/NavTree.tsx +65 -33
  185. package/src/components/{NavTreeContext.tsx → NavTreeContext/NavTreeContext.tsx} +1 -1
  186. package/src/components/NavTreeContext/index.ts +5 -0
  187. package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +23 -15
  188. package/src/components/NavTreeItem/NavTreeItemAction.tsx +75 -52
  189. package/src/components/NavTreeItem/NavTreeItemColumns.tsx +25 -42
  190. package/src/components/Sidebar/L0Menu.tsx +155 -184
  191. package/src/components/Sidebar/L1Panel.tsx +181 -101
  192. package/src/components/Sidebar/L1Tabs.tsx +18 -34
  193. package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +2 -3
  194. package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +1 -1
  195. package/src/components/index.ts +1 -3
  196. package/src/components/types.ts +13 -19
  197. package/src/containers/CommandsDialogContent/CommandsDialogContent.stories.tsx +46 -0
  198. package/src/containers/CommandsDialogContent/CommandsDialogContent.tsx +127 -0
  199. package/src/containers/CommandsDialogContent/index.ts +5 -0
  200. package/src/containers/CommandsTrigger/CommandsTrigger.tsx +28 -0
  201. package/src/containers/CommandsTrigger/index.ts +5 -0
  202. package/src/containers/NavTreeContainer/NavTreeContainer.tsx +271 -0
  203. package/src/containers/NavTreeContainer/index.ts +6 -0
  204. package/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.tsx +4 -3
  205. package/src/containers/NavTreeDocumentTitle/index.ts +5 -0
  206. package/src/containers/index.ts +12 -0
  207. package/src/experimental/Tree.stories.tsx +82 -85
  208. package/src/experimental/Tree.tsx +5 -5
  209. package/src/hooks/index.ts +8 -0
  210. package/src/hooks/useActions.ts +44 -0
  211. package/src/hooks/useLoadDescendents.ts +23 -0
  212. package/src/hooks/useNavTreeModel.ts +120 -0
  213. package/src/hooks/useNavTreeState.ts +35 -0
  214. package/src/index.ts +1 -3
  215. package/src/meta.ts +22 -7
  216. package/src/operations/expose.ts +42 -0
  217. package/src/operations/index.ts +7 -0
  218. package/src/plugin.ts +11 -0
  219. package/src/testing/app-graph-builder.ts +168 -238
  220. package/src/testing/generator.ts +35 -38
  221. package/src/testing/update-state.ts +6 -6
  222. package/src/translations.ts +8 -10
  223. package/src/types/NavTreeCapabilities.ts +21 -0
  224. package/src/types/NavTreeEvents.ts +12 -0
  225. package/src/types/index.ts +8 -0
  226. package/src/{types.ts → types/schema.ts} +9 -5
  227. package/src/util.ts +28 -17
  228. package/src/vite-env.d.ts +10 -0
  229. package/dist/lib/browser/app-graph-builder-OHSCN3GX.mjs +0 -46
  230. package/dist/lib/browser/app-graph-builder-OHSCN3GX.mjs.map +0 -7
  231. package/dist/lib/browser/chunk-5VLWX4PK.mjs +0 -15
  232. package/dist/lib/browser/chunk-5VLWX4PK.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-7D2MPHXV.mjs +0 -1483
  234. package/dist/lib/browser/chunk-7D2MPHXV.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-E6MZBCU5.mjs +0 -19
  236. package/dist/lib/browser/chunk-E6MZBCU5.mjs.map +0 -7
  237. package/dist/lib/browser/index.mjs +0 -146
  238. package/dist/lib/browser/index.mjs.map +0 -7
  239. package/dist/lib/browser/intent-resolver-YUVXVPHG.mjs +0 -47
  240. package/dist/lib/browser/intent-resolver-YUVXVPHG.mjs.map +0 -7
  241. package/dist/lib/browser/keyboard-YYTYJW4M.mjs.map +0 -7
  242. package/dist/lib/browser/meta.json +0 -1
  243. package/dist/lib/browser/react-surface-J7MWWAGD.mjs +0 -51
  244. package/dist/lib/browser/react-surface-J7MWWAGD.mjs.map +0 -7
  245. package/dist/lib/browser/state-EUSVT6BI.mjs +0 -117
  246. package/dist/lib/browser/state-EUSVT6BI.mjs.map +0 -7
  247. package/dist/types/src/capabilities/capabilities.d.ts +0 -21
  248. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  249. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  250. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  251. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts +0 -5
  252. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts.map +0 -1
  253. package/dist/types/src/components/CommandsDialog/CommandsTrigger.d.ts.map +0 -1
  254. package/dist/types/src/components/CommandsDialog/index.d.ts +0 -3
  255. package/dist/types/src/components/CommandsDialog/index.d.ts.map +0 -1
  256. package/dist/types/src/components/NavTreeContainer.d.ts +0 -9
  257. package/dist/types/src/components/NavTreeContainer.d.ts.map +0 -1
  258. package/dist/types/src/components/NavTreeContext.d.ts.map +0 -1
  259. package/dist/types/src/components/NavTreeDocumentTitle.d.ts.map +0 -1
  260. package/dist/types/src/events.d.ts +0 -4
  261. package/dist/types/src/events.d.ts.map +0 -1
  262. package/dist/types/src/hooks.d.ts +0 -3
  263. package/dist/types/src/hooks.d.ts.map +0 -1
  264. package/dist/types/src/types.d.ts.map +0 -1
  265. package/src/capabilities/capabilities.ts +0 -20
  266. package/src/capabilities/intent-resolver.ts +0 -37
  267. package/src/components/CommandsDialog/CommandsDialog.tsx +0 -126
  268. package/src/components/CommandsDialog/CommandsTrigger.tsx +0 -36
  269. package/src/components/CommandsDialog/index.ts +0 -6
  270. package/src/components/NavTreeContainer.tsx +0 -369
  271. package/src/events.ts +0 -11
  272. package/src/hooks.ts +0 -21
  273. /package/dist/types/src/{components/CommandsDialog → containers/CommandsTrigger}/CommandsTrigger.d.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/NavTree/NavTree.tsx", "../../../../src/components/NavTreeContext/NavTreeContext.tsx", "../../../../src/components/Sidebar/L0Menu.tsx", "../../../../src/components/UserAccountAvatar/UserAccountAvatar.tsx", "../../../../src/components/Sidebar/L1Panel.tsx", "../../../../src/components/NavTreeItem/NavTreeItemColumns.tsx", "../../../../src/components/NavTreeItem/NavTreeItemAction.tsx", "../../../../src/components/Sidebar/L1Tabs.tsx"],
4
+ "sourcesContent": ["//\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';\n\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' 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 pinnedItems,\n topLevelActions,\n userAccountItem,\n l0Items: topLevelWorkspaces,\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 { 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 {\n type Edge,\n attachClosestEdge,\n extractClosestEdge,\n} from '@atlaskit/pragmatic-drag-and-drop-hitbox/closest-edge';\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 { 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 IconButton,\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';\n\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, path, caller } : { parent, path });\n }\n case 'tab':\n return onTabChange?.(item);\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 = memo(\n forwardRef<HTMLButtonElement, PropsWithChildren<L0ItemRootProps>>(\n ({ item, parent, path, onMouseEnter, children }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { model } = useNavTreeContext();\n const itemPath = useMemo(() => [...path, item.id], [item.id, path]);\n const { id, testId } = useAtomValue(model.itemProps(itemPath));\n const localizedString = toLocalizedString(item.properties.label, t);\n\n const type = l0ItemType(item);\n const handleClick = useL0ItemClick({ item, parent, path: itemPath }, type);\n\n return (\n <Tooltip.Trigger asChild delayDuration={0} side='right' content={localizedString}>\n <Tabs.TabPrimitive\n className={mx(\n 'group/l0item flex w-full justify-center items-center relative',\n 'dx-app-no-drag dx-focus-ring-group data[type!=\"collection\"]:cursor-pointer',\n l0Breakpoints[item.properties.l0Breakpoint],\n )}\n tabIndex={type === 'tab' ? 0 : undefined}\n data-type={type}\n data-testid={testId}\n data-object-id={id}\n value={item.id}\n onClick={handleClick}\n onMouseEnter={onMouseEnter}\n ref={forwardedRef}\n >\n {children}\n </Tabs.TabPrimitive>\n </Tooltip.Trigger>\n );\n },\n ),\n);\n\nexport const L0ItemActiveTabIndicator = ({ classNames }: ThemedClassName<{}>) => (\n <div\n className={mx(\n 'hidden group-aria-selected/l0item:block absolute start-0 h-6 w-1.5 bg-accent-bg rounded-sm',\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<HTMLButtonElement | 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 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 data-frame={true}\n {...(hue && { style: { background: `var(--color-${hue}-surface)` } })}\n className={mx(\n 'flex justify-center items-center dx-focus-ring-group-indicator transition-colors rounded-sm',\n pinned\n ? 'p-2 group-hover/l0item:bg-current-surface'\n : 'w-(--dx-l0-avatar-size) h-(--dx-l0-avatar-size) bg-current-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\n // Actions.\n if (item.properties.icon) {\n const hue = item.properties.hue ?? null;\n const hueFgStyle = hue && { style: { color: `var(--color-${hue}-fg)` } };\n return <Icon icon={item.properties.icon} size={6} {...hueFgStyle} />;\n }\n\n const type = l0ItemType(item);\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 data-tauri-drag-region\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-l0-surface dx-app-drag pb-[env(safe-area-inset-bottom)]',\n '[body[data-platform=\"macos\"]_&]:pt-[30px]',\n '[body[data-platform=\"ios\"]_&]:pt-[max(env(safe-area-inset-top),0.25rem)]',\n ]}\n >\n {/* TODO(wittjosiah): Use L0Item trigger. */}\n <Menu.Root onAction={handleAction}>\n <Menu.Trigger asChild data-testid='spacePlugin.addSpace'>\n <div className='grid place-items-center'>\n <IconButton\n density='lg'\n variant='ghost'\n size={5}\n icon='ph--list--regular'\n iconOnly\n square\n label={t('app-menu.label')}\n />\n </div>\n </Menu.Trigger>\n <Menu.Content group={parent} items={menuActions} />\n </Menu.Root>\n\n {/* Space list. */}\n <ScrollArea.Root centered thin orientation='vertical'>\n <ScrollArea.Viewport classNames='flex flex-col gap-2 py-1'>\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 </ScrollArea.Viewport>\n </ScrollArea.Root>\n\n {/* Actions. */}\n <div 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 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 Option from 'effect/Option';\nimport React, { memo, useCallback, useMemo } from 'react';\n\nimport { Node } from '@dxos/app-graph';\nimport { isPinnedWorkspace } from '@dxos/app-toolkit';\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { Graph, useActionRunner, 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 { getListActions, useActions, useLoadDescendents } from '#hooks';\nimport { meta } from '#meta';\n\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { NavTreeItemColumns } from '../NavTreeItem/NavTreeItemColumns';\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.Panel\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.Panel>\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 return (\n <DensityProvider density='md'>\n <L1PanelHeader path={path} item={item} onBack={onBack} />\n <ScrollArea.Root thin orientation='vertical'>\n <ScrollArea.Viewport>\n <Tree\n classNames='pt-[2px]'\n model={navTreeContext.model}\n id={item.id}\n rootId={item.id}\n path={path}\n levelOffset={5}\n draggable\n gridTemplateColumns='[tree-row-start] minmax(0, 1fr) 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 </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 = isPinnedWorkspace(item.id);\n\n const { menuActions, onAction } = useL1MenuActions({ item, path });\n useLoadDescendents(item);\n\n return (\n <div\n data-tauri-drag-region\n className='grid grid-cols-[28px_1fr_min-content_min-content] w-full items-center dx-app-drag dx-density-lg'\n >\n {backCapableWorkspace ? (\n <IconButton\n classNames={[hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon='ph--caret-left--regular'\n iconOnly\n size={4}\n label={t('button-back.button')}\n data-testid='treeView.primaryTreeButton'\n onClick={() => onBack?.()}\n />\n ) : (\n <div />\n )}\n <h2 data-tauri-drag-region className='flex-1 truncate min-w-0'>\n {title}\n </h2>\n <div className='contents dx-app-no-drag'>\n <MenuActions item={item} menuActions={menuActions} onAction={onAction} />\n {ItemEnd && <ItemEnd node={item} open />}\n </div>\n </div>\n );\n};\n\ntype L1MenuActions = {\n menuActions: Node.Action[];\n onAction: (action: Node.Action, params?: Node.InvokeProps) => void;\n};\n\n/**\n * Header menu actions for an L1 workspace tab. Renders nothing for an empty\n * `menuActions`, a single inline icon button for one action, and a\n * `…`-menu trigger for multiple.\n */\nconst MenuActions = ({\n item,\n menuActions,\n onAction,\n}: {\n item: Node.Node;\n} & Pick<L1MenuActions, 'menuActions' | 'onAction'>) => {\n const { t } = useTranslation(meta.id);\n\n if (menuActions.length === 0) {\n return null;\n }\n\n if (menuActions.length === 1) {\n return (\n <IconButton\n classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}\n variant='ghost'\n icon={menuActions[0].properties?.icon ?? 'ph--circle-dashed--regular'}\n iconOnly\n size={4}\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 }\n\n return (\n <Menu.Root caller={NAV_TREE_ITEM} onAction={onAction}>\n <Menu.Trigger asChild>\n <IconButton\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 size={4}\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};\n\n/**\n * Builds the menu actions for the L1 panel header.\n */\nconst useL1MenuActions = ({ item, path }: Pick<L1PanelProps, 'item' | 'path'>): L1MenuActions => {\n const runAction = useActionRunner();\n\n const menuActions = getListActions(useActions(item));\n\n const onAction = useCallback(\n (action: Node.Action, params?: Node.InvokeProps) => {\n void runAction(action, { ...params, path });\n },\n [runAction, path],\n );\n\n return { menuActions, onAction };\n};\n\nexport const L1Panel = memo(L1Panel$);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { Fragment, memo, useMemo } from 'react';\n\nimport { Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';\n\nimport { getListActions, useActions } from '#hooks';\nimport { meta } from '#meta';\n\nimport { NAV_TREE_ITEM } from '../NavTree';\nimport { useNavTreeContext } from '../NavTreeContext';\nimport { type NavTreeItemColumnsProps } from '../types';\nimport { NavTreeItemActionDropdownMenu, NavTreeItemMonolithicAction } 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 flattenedActions = useActions(item);\n const allActions = useMemo(() => getListActions(flattenedActions), [flattenedActions]);\n\n const ActionRoot = popoverAnchorId === `${NAV_TREE_ITEM}:${item.id}` ? Popover.Anchor : Fragment;\n\n return (\n <div className='contents dx-app-no-drag'>\n <ActionRoot>\n {allActions.length === 1 ? (\n <Treegrid.Cell classNames='contents'>\n <NavTreeItemMonolithicAction\n baseLabel={toLocalizedString(allActions[0].properties?.label, t)}\n parent={item}\n path={path}\n {...allActions[0]}\n />\n </Treegrid.Cell>\n ) : allActions.length > 1 ? (\n <Treegrid.Cell classNames='contents'>\n <NavTreeItemActionDropdownMenu\n testId={`navtree.treeItem.actionsLevel${level}`}\n label={t('tree-item-actions.label')}\n icon='ph--dots-three-vertical--regular'\n parent={item}\n path={path}\n menuActions={allActions}\n caller={NAV_TREE_ITEM}\n />\n </Treegrid.Cell>\n ) : (\n <Treegrid.Cell />\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 2023 DXOS.org\n//\n\nimport React, { useCallback } 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 { composable, composableProps } 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\nconst fallbackIcon = 'ph--circle-dashed--regular';\n\nconst mdActionButtonProps = {\n size: 4 as const,\n density: 'md' as const,\n};\n\nconst lgActionButtonProps = {\n size: 5 as const,\n density: 'lg' as const,\n};\n\nexport type NavTreeItemActionMenuProps = ActionProperties & {\n parent: Node.Node;\n path?: string[];\n caller?: string;\n monolithic?: boolean;\n menuActions?: Node.Action[];\n};\n\nexport const NavTreeItemActionDropdownMenu = composable<HTMLButtonElement, NavTreeItemActionMenuProps>(\n ({ parent, path, label, icon, testId, menuActions, caller, ...props }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const density = useDensityContext();\n const runAction = useActionRunner();\n const handleAction = useCallback(\n (action: Node.Action, params: Node.InvokeProps = {}) => runAction(action, { ...params, path }),\n [runAction, path],\n );\n\n return (\n <Menu.Root caller={caller} onAction={handleAction}>\n <Menu.Trigger asChild>\n <IconButton\n {...(density === 'lg' ? lgActionButtonProps : mdActionButtonProps)}\n {...composableProps(props)}\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 ref={forwardedRef}\n />\n </Menu.Trigger>\n <Menu.Content group={parent} items={menuActions as MenuItem[]} />\n </Menu.Root>\n );\n },\n);\n\nNavTreeItemActionDropdownMenu.displayName = 'NavTreeItemActionDropdownMenu';\n\nexport const NavTreeItemMonolithicAction = (\n props: Node.Action & {\n parent: Node.Node;\n path?: string[];\n onAction?: (action: Node.Action) => void;\n baseLabel: string;\n },\n) => {\n const {\n parent,\n path,\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 === 'lg' ? lgActionButtonProps : mdActionButtonProps)}\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, path } : { parent, path });\n }}\n data-testid={testId}\n />\n );\n};\n\nexport const NavTreeItemAction = ({\n monolithic,\n menuActions,\n menuType,\n parent,\n path,\n ...props\n}: 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 return monolithic && menuActions?.length === 1 ? (\n <NavTreeItemMonolithicAction baseLabel={baseLabel} parent={parent} path={path} {...menuActions[0]} />\n ) : (\n <NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={parent} path={path} menuActions={menuActions} />\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';\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": ["React", "forwardRef", "useMemo", "useAppGraph", "Node", "useConnections", "useActions", "useGraphActions", "Tabs", "byPosition", "useLoadDescendents", "createContext", "useContext", "raise", "NavTreeContext", "useNavTreeContext", "Error", "attachClosestEdge", "extractClosestEdge", "combine", "draggable", "dropTargetForElements", "preserveOffsetOnSource", "scrollJustEnoughIntoView", "useAtomValue", "React", "forwardRef", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "useState", "DxAvatar", "useActionRunner", "Icon", "IconButton", "ListItem", "ScrollArea", "Tooltip", "toLocalizedString", "useMediaQuery", "useTranslation", "Menu", "Tabs", "mx", "arrayMove", "useNavTreeState", "meta", "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", "memo", "forwardRef", "onMouseEnter", "children", "forwardedRef", "t", "useTranslation", "meta", "id", "model", "itemPath", "useMemo", "testId", "useAtomValue", "itemProps", "localizedString", "toLocalizedString", "label", "l0ItemType", "handleClick", "React", "Tooltip", "Trigger", "asChild", "delayDuration", "side", "content", "Tabs", "TabPrimitive", "className", "mx", "l0Breakpoint", "tabIndex", "undefined", "data-type", "data-testid", "data-object-id", "value", "onClick", "ref", "L0ItemActiveTabIndicator", "classNames", "div", "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", "data-tauri-drag-region", "Menu", "Root", "onAction", "IconButton", "density", "iconOnly", "square", "Content", "group", "items", "ScrollArea", "centered", "thin", "orientation", "Viewport", "key", "UserAccountAvatar", "userId", "emoji", "status", "Option", "React", "memo", "useCallback", "useMemo", "isPinnedWorkspace", "useAppGraph", "Graph", "useActionRunner", "useEdges", "DensityProvider", "IconButton", "ScrollArea", "toLocalizedString", "useTranslation", "Tree", "Menu", "Tabs", "hoverableControlItem", "hoverableOpenControlItem", "getListActions", "useActions", "useLoadDescendents", "meta", "React", "Fragment", "memo", "useMemo", "Popover", "Treegrid", "toLocalizedString", "useTranslation", "getListActions", "useActions", "meta", "React", "useCallback", "useActionRunner", "IconButton", "toLocalizedString", "useDensityContext", "useTranslation", "composable", "composableProps", "Menu", "hoverableControlItem", "hoverableOpenControlItem", "meta", "fallbackIcon", "mdActionButtonProps", "size", "density", "lgActionButtonProps", "NavTreeItemActionDropdownMenu", "parent", "path", "label", "icon", "testId", "menuActions", "caller", "props", "forwardedRef", "t", "id", "runAction", "handleAction", "action", "params", "Root", "onAction", "Trigger", "asChild", "classNames", "variant", "iconOnly", "data-testid", "ref", "Content", "group", "items", "displayName", "NavTreeItemMonolithicAction", "properties", "disabled", "baseLabel", "onClick", "event", "stopPropagation", "NavTreeItemColumns", "memo", "path", "item", "open", "t", "useTranslation", "meta", "id", "renderItemEnd", "ItemEnd", "popoverAnchorId", "useNavTreeContext", "level", "length", "flattenedActions", "useActions", "allActions", "useMemo", "getListActions", "ActionRoot", "NAV_TREE_ITEM", "Popover", "Anchor", "Fragment", "React", "div", "className", "Treegrid", "Cell", "classNames", "NavTreeItemMonolithicAction", "baseLabel", "toLocalizedString", "properties", "label", "parent", "NavTreeItemActionDropdownMenu", "testId", "icon", "menuActions", "caller", "node", "L1Panel$", "open", "path", "item", "isCurrent", "onBack", "t", "useTranslation", "meta", "id", "title", "toLocalizedString", "properties", "label", "isActivated", "useIsActivatedWorkspace", "shouldRenderContent", "React", "Tabs", "Panel", "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", "DensityProvider", "density", "L1PanelHeader", "ScrollArea", "Root", "thin", "orientation", "Viewport", "Tree", "model", "rootId", "levelOffset", "draggable", "gridTemplateColumns", "renderColumns", "NavTreeItemColumns", "blockInstruction", "canDrop", "canSelect", "onOpenChange", "onSelect", "onItemHover", "renderItemEnd", "ItemEnd", "backCapableWorkspace", "isPinnedWorkspace", "menuActions", "onAction", "useL1MenuActions", "useLoadDescendents", "div", "data-tauri-drag-region", "className", "IconButton", "hoverableControlItem", "hoverableOpenControlItem", "variant", "icon", "iconOnly", "size", "data-testid", "onClick", "h2", "MenuActions", "node", "length", "testId", "Menu", "caller", "NAV_TREE_ITEM", "Trigger", "asChild", "Content", "group", "items", "runAction", "useActionRunner", "getListActions", "useActions", "useCallback", "action", "params", "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", "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"]
7
+ }
@@ -0,0 +1,20 @@
1
+ import {
2
+ NODE_TYPE
3
+ } from "../chunk-5OPDKH6B.mjs";
4
+ import "../chunk-JOSNCOV4.mjs";
5
+ import "../chunk-J5LGTIGS.mjs";
6
+
7
+ // src/containers/index.ts
8
+ import { lazy } from "react";
9
+ var CommandsDialogContent = lazy(() => import("../CommandsDialogContent-UBGIQ5FI.mjs"));
10
+ var CommandsTrigger = lazy(() => import("../CommandsTrigger-BH5WLMHK.mjs"));
11
+ var NavTreeContainer = lazy(() => import("../NavTreeContainer-6AR4BFDD.mjs"));
12
+ var NavTreeDocumentTitle = lazy(() => import("../NavTreeDocumentTitle-H3E6ZLYE.mjs"));
13
+ export {
14
+ CommandsDialogContent,
15
+ CommandsTrigger,
16
+ NODE_TYPE,
17
+ NavTreeContainer,
18
+ NavTreeDocumentTitle
19
+ };
20
+ //# sourceMappingURL=index.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';\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,wBAA4CD,KAAK,MAAM,OAAO,uCAAA,CAAA;AACpE,IAAME,kBAAsCF,KAAK,MAAM,OAAO,iCAAA,CAAA;AAC9D,IAAMG,mBAAuCH,KAAK,MAAM,OAAO,kCAAA,CAAA;AAC/D,IAAMI,uBAA2CJ,KAAK,MAAM,OAAO,sCAAA,CAAA;",
6
+ "names": ["lazy", "CommandsDialogContent", "CommandsTrigger", "NavTreeContainer", "NavTreeDocumentTitle"]
7
+ }
@@ -0,0 +1,38 @@
1
+ import {
2
+ NavTreeCapabilities_exports
3
+ } from "./chunk-ZSWYB7JW.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+
6
+ // src/operations/expose.ts
7
+ import * as Effect from "effect/Effect";
8
+ import * as Option from "effect/Option";
9
+ import { Capability } from "@dxos/app-framework";
10
+ import { AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
11
+ import { Operation } from "@dxos/compute";
12
+ import { log } from "@dxos/log";
13
+ import { Graph } from "@dxos/plugin-graph";
14
+ import { expandAttendableId } from "@dxos/react-ui-attention";
15
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-navtree/src/operations/expose.ts";
16
+ var handler = LayoutOperation.Expose.pipe(Operation.withHandler(Effect.fnUntraced(function* ({ subject }) {
17
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
18
+ const { getItem, setItem } = yield* Capability.get(NavTreeCapabilities_exports.State);
19
+ const prefixes = expandAttendableId(subject);
20
+ for (const qualifiedId of prefixes) {
21
+ Graph.expand(graph, qualifiedId, "child");
22
+ const treePath = prefixes.slice(0, prefixes.indexOf(qualifiedId) + 1);
23
+ const state = getItem(treePath);
24
+ if (!state.open) {
25
+ setItem(treePath, "open", true);
26
+ }
27
+ }
28
+ if (Option.isNone(Graph.getNode(graph, subject))) {
29
+ log("Node not found after expansion", {
30
+ subject
31
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 26, S: this });
32
+ }
33
+ })));
34
+ var expose_default = handler;
35
+ export {
36
+ expose_default as default
37
+ };
38
+ //# sourceMappingURL=expose-26FV4W5D.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/expose.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\n\nimport { Capability } from '@dxos/app-framework';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { log } from '@dxos/log';\nimport { Graph } from '@dxos/plugin-graph';\nimport { expandAttendableId } from '@dxos/react-ui-attention';\n\nimport { NavTreeCapabilities } from '../types';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Expose> = LayoutOperation.Expose.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* ({ subject }) {\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n const { getItem, setItem } = yield* Capability.get(NavTreeCapabilities.State);\n\n const prefixes = expandAttendableId(subject);\n\n for (const qualifiedId of prefixes) {\n Graph.expand(graph, qualifiedId, 'child');\n\n const treePath = prefixes.slice(0, prefixes.indexOf(qualifiedId) + 1);\n const state = getItem(treePath);\n if (!state.open) {\n setItem(treePath, 'open', true);\n }\n }\n\n if (Option.isNone(Graph.getNode(graph, subject))) {\n log('Node not found after expansion', { subject });\n }\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,YAAY;AAExB,SAASC,kBAAkB;AAC3B,SAASC,iBAAiBC,uBAAuB;AACjD,SAASC,iBAAiB;AAC1B,SAASC,WAAW;AACpB,SAASC,aAAa;AACtB,SAASC,0BAA0B;AAInC,IAAA,eAAsEC;IAIhE,UAAQC,gBAAkB,OAAG,KAAOC,UAAc,YAACC,kBAAyB,WAAA,EAAA,QAAA,GAAA;AAE5E,QAAMC,EAAAA,MAAAA,IAAWC,OAAAA,WAAmBC,IAAAA,gBAAAA,QAAAA;AAEpC,QAAK,EAAA,SAAMC,QAAAA,IAAeH,OAAU,WAAA,IAAA,4BAAA,KAAA;QAClCI,WAAaC,mBAAOF,OAAa;aAE3BG,eAAWN,UAAc;AAC/B,UAAMO,OAAAA,OAAQV,aAAQS,OAAAA;AACtB,UAAKC,WAAY,SAAA,MAAA,GAAA,SAAA,QAAA,WAAA,IAAA,CAAA;UACfC,QAAQF,QAAU,QAAQ;AAC5B,QAAA,CAAA,MAAA,MAAA;AACF,cAAA,UAAA,QAAA,IAAA;IAEIG;;MACsCP,cAAAA,MAAAA,QAAAA,OAAAA,OAAAA,CAAAA,GAAAA;AAAQ,QAAA,kCAAA;MAClD;IACF,GAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,KAAA,CAAA;EAIJ;;;",
6
+ "names": ["Effect", "Option", "Capability", "AppCapabilities", "LayoutOperation", "Operation", "log", "Graph", "expandAttendableId", "LayoutOperation", "getItem", "Capability", "NavTreeCapabilities", "prefixes", "expandAttendableId", "subject", "qualifiedId", "Graph", "graph", "treePath", "state", "setItem", "Option"]
7
+ }
@@ -0,0 +1,178 @@
1
+ import {
2
+ filterItems
3
+ } from "../chunk-JOSNCOV4.mjs";
4
+ import "../chunk-J5LGTIGS.mjs";
5
+
6
+ // src/hooks/useActions.ts
7
+ import { useMemo } from "react";
8
+ import { useAppGraph } from "@dxos/app-toolkit/ui";
9
+ import { Graph, Node, useActions as useGraphActions } from "@dxos/plugin-graph";
10
+ var getListActions = ({ actions, groupedActions }) => actions.flatMap((action) => Node.isAction(action) ? [
11
+ action
12
+ ] : groupedActions[action.id] ?? []).filter((action) => [
13
+ "list-item",
14
+ "list-item-primary"
15
+ ].includes(action.properties?.disposition));
16
+ var useActions = (node) => {
17
+ const { graph } = useAppGraph();
18
+ const actions = useGraphActions(graph, node.id);
19
+ return useMemo(() => {
20
+ return actions.reduce((acc, arg) => {
21
+ if (arg.properties.disposition === "item") {
22
+ return acc;
23
+ }
24
+ acc.actions.push(arg);
25
+ if (!Node.isAction(arg)) {
26
+ const actionGroup = Graph.getActions(graph, arg.id);
27
+ acc.groupedActions[arg.id] = actionGroup;
28
+ }
29
+ return acc;
30
+ }, {
31
+ actions: [],
32
+ groupedActions: {}
33
+ });
34
+ }, [
35
+ actions
36
+ ]);
37
+ };
38
+
39
+ // src/hooks/useLoadDescendents.ts
40
+ import { useEffect } from "react";
41
+ import { useAppGraph as useAppGraph2 } from "@dxos/app-toolkit/ui";
42
+ import { Graph as Graph2 } from "@dxos/plugin-graph";
43
+ var useLoadDescendents = (root) => {
44
+ const { graph } = useAppGraph2();
45
+ useEffect(() => {
46
+ if (!root) {
47
+ return;
48
+ }
49
+ Graph2.expand(graph, root.id, "child");
50
+ }, [
51
+ graph,
52
+ root
53
+ ]);
54
+ };
55
+
56
+ // src/hooks/useNavTreeModel.ts
57
+ import { Atom } from "@effect-atom/atom-react";
58
+ import * as Option from "effect/Option";
59
+ import { useMemo as useMemo3 } from "react";
60
+ import { useAppGraph as useAppGraph3 } from "@dxos/app-toolkit/ui";
61
+ import { PLANK_COMPANION_TYPE } from "@dxos/plugin-deck";
62
+ import { Path } from "@dxos/react-ui-list";
63
+ import { mx } from "@dxos/ui-theme";
64
+
65
+ // src/hooks/useNavTreeState.ts
66
+ import { useAtomValue } from "@effect-atom/atom-react";
67
+ import { useMemo as useMemo2 } from "react";
68
+ import { useCapability } from "@dxos/app-framework/ui";
69
+ import { NavTreeCapabilities } from "#types";
70
+ var useNavTreeState = () => {
71
+ return useCapability(NavTreeCapabilities.State);
72
+ };
73
+ var useNavTreeItemState = (path) => {
74
+ const { getItemAtom } = useCapability(NavTreeCapabilities.State);
75
+ const pathKey = useMemo2(() => path.join("~"), [
76
+ path
77
+ ]);
78
+ const atom = useMemo2(() => getItemAtom(path), [
79
+ getItemAtom,
80
+ pathKey
81
+ ]);
82
+ return useAtomValue(atom);
83
+ };
84
+
85
+ // src/hooks/useNavTreeModel.ts
86
+ var isVisibleChild = (node) => node.type !== PLANK_COMPANION_TYPE && node.properties.disposition !== "hidden";
87
+ var createItemPropsFamily = (graph) => Atom.family((pathKey) => {
88
+ const path = Path.parts(pathKey);
89
+ const id = Path.last(pathKey);
90
+ return Atom.make((get) => {
91
+ const nodeOpt = get(graph.node(id));
92
+ const node = Option.getOrElse(nodeOpt, () => void 0);
93
+ if (!node) {
94
+ return {
95
+ id,
96
+ label: id
97
+ };
98
+ }
99
+ const safeChildren = get(graph.connections(node.id, "child")).filter((child) => !path.includes(child.id));
100
+ const visibleChildren = safeChildren.filter(isVisibleChild);
101
+ const parentOf = visibleChildren.length > 0 ? visibleChildren.map((child) => child.id) : node.properties.role === "branch" ? [] : void 0;
102
+ const parentId = path.length >= 2 ? path[path.length - 2] : void 0;
103
+ const parentNode = parentId ? Option.getOrElse(get(graph.node(parentId)), () => void 0) : void 0;
104
+ const droppable = node.properties.droppable === false || parentNode?.properties.childrenDroppable === false ? false : void 0;
105
+ return {
106
+ id: node.id,
107
+ parentOf,
108
+ disabled: node.properties.disabled,
109
+ draggable: node.properties.draggable,
110
+ droppable,
111
+ label: node.properties.label ?? node.id,
112
+ className: mx(node.properties.className, node.properties.modified && "italic"),
113
+ headingClassName: node.properties.headingClassName,
114
+ icon: node.properties.icon,
115
+ iconHue: node.properties.iconHue,
116
+ testId: node.properties.testId,
117
+ count: node.properties.count,
118
+ modifiedCount: node.properties.modifiedCount
119
+ };
120
+ }).pipe(Atom.keepAlive);
121
+ });
122
+ var createChildIdsFamily = (graph) => Atom.family((id) => Atom.make((get) => get(graph.connections(id, "child")).map((child) => child.id)).pipe(Atom.keepAlive));
123
+ var createItemFamily = (graph) => Atom.family((id) => Atom.make((get) => {
124
+ const node = Option.getOrElse(get(graph.node(id)), () => void 0);
125
+ return node && filterItems(node) ? node : void 0;
126
+ }).pipe(Atom.keepAlive));
127
+ var createItemOpenFamily = (getItemAtom) => Atom.family((pathKey) => {
128
+ const path = Path.parts(pathKey);
129
+ const stateAtom = getItemAtom(path);
130
+ return Atom.make((get) => get(stateAtom).open).pipe(Atom.keepAlive);
131
+ });
132
+ var createItemCurrentFamily = (getItemAtom) => Atom.family((pathKey) => {
133
+ const path = Path.parts(pathKey);
134
+ const stateAtom = getItemAtom(path);
135
+ return Atom.make((get) => get(stateAtom).current).pipe(Atom.keepAlive);
136
+ });
137
+ var useNavTreeModel = (rootId) => {
138
+ const { graph } = useAppGraph3();
139
+ const { getItemAtom } = useNavTreeState();
140
+ const itemPropsFamily = useMemo3(() => createItemPropsFamily(graph), [
141
+ graph
142
+ ]);
143
+ const childIdsFamily = useMemo3(() => createChildIdsFamily(graph), [
144
+ graph
145
+ ]);
146
+ const itemFamily = useMemo3(() => createItemFamily(graph), [
147
+ graph
148
+ ]);
149
+ const itemOpenFamily = useMemo3(() => createItemOpenFamily(getItemAtom), [
150
+ getItemAtom
151
+ ]);
152
+ const itemCurrentFamily = useMemo3(() => createItemCurrentFamily(getItemAtom), [
153
+ getItemAtom
154
+ ]);
155
+ return useMemo3(() => ({
156
+ item: (id) => itemFamily(id),
157
+ itemProps: (path) => itemPropsFamily(Path.create(...path)),
158
+ itemOpen: (path) => itemOpenFamily(Path.create(...path)),
159
+ itemCurrent: (path) => itemCurrentFamily(Path.create(...path)),
160
+ childIds: (parentId) => childIdsFamily(parentId ?? rootId)
161
+ }), [
162
+ itemFamily,
163
+ itemPropsFamily,
164
+ itemOpenFamily,
165
+ itemCurrentFamily,
166
+ childIdsFamily,
167
+ rootId
168
+ ]);
169
+ };
170
+ export {
171
+ getListActions,
172
+ useActions,
173
+ useLoadDescendents,
174
+ useNavTreeItemState,
175
+ useNavTreeModel,
176
+ useNavTreeState
177
+ };
178
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/hooks/useActions.ts", "../../../../src/hooks/useLoadDescendents.ts", "../../../../src/hooks/useNavTreeModel.ts", "../../../../src/hooks/useNavTreeState.ts"],
4
+ "sourcesContent": ["//\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 * Flattens grouped actions and filters to the list-item dispositions rendered as\n * navtree item actions. Shared by row (`NavTreeItemColumns`) and header (`L1Panel`)\n * so both apply the same normalization rule.\n */\nexport const getListActions = ({ actions, groupedActions }: FlattenedActions): Node.Action[] =>\n actions\n .flatMap((action) => (Node.isAction(action) ? [action] : (groupedActions[action.id] ?? [])))\n .filter((action) => ['list-item', 'list-item-primary'].includes(action.properties?.disposition));\n\n/** Returns flattened actions and grouped sub-actions for a given graph node. */\nexport const useActions = (node: Node.Node): FlattenedActions => {\n const { graph } = useAppGraph();\n const actions = useGraphActions(graph, node.id);\n\n return useMemo(() => {\n return 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// 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';\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';\n\nimport { filterItems } from '../util';\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 const parentId = path.length >= 2 ? path[path.length - 2] : undefined;\n const parentNode = parentId ? Option.getOrElse(get(graph.node(parentId)), () => undefined) : undefined;\n const droppable =\n node.properties.droppable === false || parentNode?.properties.childrenDroppable === false ? false : undefined;\n\n return {\n id: node.id,\n parentOf,\n disabled: node.properties.disabled,\n draggable: node.properties.draggable,\n droppable,\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 count: node.properties.count,\n modifiedCount: node.properties.modifiedCount,\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 return node && filterItems(node) ? 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', 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"],
5
+ "mappings": "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",
6
+ "names": ["useMemo", "useAppGraph", "Graph", "Node", "useActions", "useGraphActions", "getListActions", "actions", "groupedActions", "flatMap", "action", "isAction", "id", "filter", "includes", "properties", "disposition", "node", "graph", "reduce", "acc", "arg", "push", "actionGroup", "getActions", "useEffect", "useAppGraph", "Graph", "useLoadDescendents", "root", "graph", "expand", "id", "Atom", "Option", "useMemo", "useAppGraph", "PLANK_COMPANION_TYPE", "Path", "mx", "useAtomValue", "useMemo", "useCapability", "NavTreeCapabilities", "useNavTreeState", "State", "useNavTreeItemState", "path", "getItemAtom", "pathKey", "join", "atom", "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", "parentId", "parentNode", "droppable", "childrenDroppable", "disabled", "draggable", "className", "mx", "modified", "headingClassName", "icon", "iconHue", "testId", "count", "modifiedCount", "pipe", "keepAlive", "createChildIdsFamily", "createItemFamily", "filterItems", "createItemOpenFamily", "getItemAtom", "stateAtom", "open", "createItemCurrentFamily", "current", "useNavTreeModel", "rootId", "useAppGraph", "useNavTreeState", "itemPropsFamily", "useMemo", "childIdsFamily", "itemFamily", "itemOpenFamily", "itemCurrentFamily", "item", "itemProps", "create", "itemOpen", "itemCurrent", "childIds"]
7
+ }
@@ -0,0 +1,34 @@
1
+ import {
2
+ COMMANDS_DIALOG,
3
+ KEY_BINDING,
4
+ meta
5
+ } from "./chunk-MDGKDQMZ.mjs";
6
+ import {
7
+ NavTreeCapabilities_exports,
8
+ NavTreeEvents_exports
9
+ } from "./chunk-ZSWYB7JW.mjs";
10
+ import {
11
+ filterItems,
12
+ getChildren,
13
+ getParent,
14
+ getPersistenceParent,
15
+ l0ItemType,
16
+ resolveMigrationOperation,
17
+ sortActions
18
+ } from "./chunk-JOSNCOV4.mjs";
19
+ import "./chunk-J5LGTIGS.mjs";
20
+ export {
21
+ COMMANDS_DIALOG,
22
+ KEY_BINDING,
23
+ NavTreeCapabilities_exports as NavTreeCapabilities,
24
+ NavTreeEvents_exports as NavTreeEvents,
25
+ filterItems,
26
+ getChildren,
27
+ getParent,
28
+ getPersistenceParent,
29
+ l0ItemType,
30
+ meta,
31
+ resolveMigrationOperation,
32
+ sortActions
33
+ };
34
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }
@@ -1,15 +1,18 @@
1
- import {
2
- KEY_BINDING
3
- } from "./chunk-E6MZBCU5.mjs";
1
+ import "./chunk-J5LGTIGS.mjs";
4
2
 
5
3
  // src/capabilities/keyboard.ts
6
- import { Capabilities as AppCapabilities, contributes } from "@dxos/app-framework";
4
+ import * as Effect from "effect/Effect";
5
+ import { Capabilities, Capability } from "@dxos/app-framework";
6
+ import { AppCapabilities } from "@dxos/app-toolkit";
7
7
  import { debounce } from "@dxos/async";
8
8
  import { Keyboard } from "@dxos/keyboard";
9
- import { isAction } from "@dxos/plugin-graph";
9
+ import { Graph, Node, runAction } from "@dxos/plugin-graph";
10
10
  import { getHostPlatform } from "@dxos/util";
11
- var keyboard_default = ((context) => {
12
- const { graph } = context.getCapability(AppCapabilities.AppGraph);
11
+ import { KEY_BINDING } from "#meta";
12
+ var keyboard_default = Capability.makeModule(Effect.fnUntraced(function* () {
13
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
14
+ const invoker = yield* Capability.get(Capabilities.OperationInvoker);
15
+ const pluginContext = yield* Capability.Service;
13
16
  const visitor = (node, path) => {
14
17
  let shortcut;
15
18
  if (typeof node.properties.keyBinding === "object") {
@@ -19,33 +22,35 @@ var keyboard_default = ((context) => {
19
22
  } else {
20
23
  shortcut = node.properties.keyBinding;
21
24
  }
22
- if (shortcut && isAction(node)) {
25
+ if (shortcut && Node.isAction(node)) {
23
26
  Keyboard.singleton.getContext(path.slice(0, -1).join("/")).bind({
24
27
  shortcut,
25
- handler: () => {
26
- void node.data({
27
- parent: node,
28
- caller: KEY_BINDING
29
- });
30
- },
28
+ handler: () => void runAction(invoker, pluginContext, node, {
29
+ parent: node,
30
+ caller: KEY_BINDING
31
+ }),
31
32
  data: node.properties.label
32
33
  });
33
34
  }
34
35
  };
35
36
  const eventHandler = debounce(() => {
36
- graph.traverse({
37
+ Graph.traverse(graph, {
38
+ relation: [
39
+ "child",
40
+ "action"
41
+ ],
37
42
  visitor
38
43
  });
39
44
  }, 500);
40
45
  const unsubscribe = graph.onNodeChanged.on(eventHandler);
41
46
  Keyboard.singleton.initialize();
42
- Keyboard.singleton.setCurrentContext(graph.root.id);
43
- return contributes(AppCapabilities.Null, null, () => {
47
+ Keyboard.singleton.setCurrentContext(Node.RootId);
48
+ return Capability.contributes(Capabilities.Null, null, () => Effect.sync(() => {
44
49
  unsubscribe();
45
50
  Keyboard.singleton.destroy();
46
- });
47
- });
51
+ }));
52
+ }));
48
53
  export {
49
54
  keyboard_default as default
50
55
  };
51
- //# sourceMappingURL=keyboard-YYTYJW4M.mjs.map
56
+ //# sourceMappingURL=keyboard-EJ65BVTC.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/keyboard.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities } from '@dxos/app-toolkit';\nimport { debounce } from '@dxos/async';\nimport { Keyboard } from '@dxos/keyboard';\nimport { Graph, Node, runAction } from '@dxos/plugin-graph';\nimport { getHostPlatform } from '@dxos/util';\n\nimport { KEY_BINDING } from '#meta';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n const invoker = yield* Capability.get(Capabilities.OperationInvoker);\n const pluginContext = yield* Capability.Service;\n\n // TODO(wittjosiah): Factor out.\n // TODO(wittjosiah): Handle removal of actions.\n const visitor = (node: Node.Node, path: string[]) => {\n let shortcut: string | undefined;\n if (typeof node.properties.keyBinding === 'object') {\n const availablePlatforms = Object.keys(node.properties.keyBinding);\n const platform = getHostPlatform();\n shortcut = availablePlatforms.includes(platform)\n ? node.properties.keyBinding[platform]\n : platform === 'ios'\n ? node.properties.keyBinding.macos // Fallback to macos if ios-specific bindings not provided.\n : platform === 'linux' || platform === 'unknown'\n ? node.properties.keyBinding.windows // Fallback to windows if platform-specific bindings not provided.\n : undefined;\n } else {\n shortcut = node.properties.keyBinding;\n }\n\n if (shortcut && Node.isAction(node)) {\n Keyboard.singleton.getContext(path.slice(0, -1).join('/')).bind({\n shortcut,\n handler: () => void runAction(invoker, pluginContext, node, { parent: node, caller: KEY_BINDING }),\n data: node.properties.label,\n });\n }\n };\n\n const eventHandler = debounce(() => {\n Graph.traverse(graph, { relation: ['child', 'action'], visitor });\n }, 500);\n\n const unsubscribe = graph.onNodeChanged.on(eventHandler);\n\n // TODO(burdon): Create context and plugin.\n Keyboard.singleton.initialize();\n Keyboard.singleton.setCurrentContext(Node.RootId);\n\n return Capability.contributes(Capabilities.Null, null, () =>\n Effect.sync(() => {\n unsubscribe();\n Keyboard.singleton.destroy();\n }),\n );\n }),\n);\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,uBAAuB;AAChC,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,OAAOC,MAAMC,iBAAiB;AACvC,SAASC,uBAAuB;AAEhC,SAASC,mBAAmB;AAE5B,IAAA,mBAAeR,WAAWS,WACjBC,kBAAW,aAAA;AAChB,QAAM,EAAEC,MAAK,IAAK,OAAOX,WAAWY,IAAIX,gBAAgBY,QAAQ;AAChE,QAAMC,UAAU,OAAOd,WAAWY,IAAIb,aAAagB,gBAAgB;AACnE,QAAMC,gBAAgB,OAAOhB,WAAWiB;AAIxC,QAAMC,UAAU,CAACC,MAAiBC,SAAAA;AAChC,QAAIC;AACJ,QAAI,OAAOF,KAAKG,WAAWC,eAAe,UAAU;AAClD,YAAMC,qBAAqBC,OAAOC,KAAKP,KAAKG,WAAWC,UAAU;AACjE,YAAMI,WAAWpB,gBAAAA;AACjBc,iBAAWG,mBAAmBI,SAASD,QAAAA,IACnCR,KAAKG,WAAWC,WAAWI,QAAAA,IAC3BA,aAAa,QACXR,KAAKG,WAAWC,WAAWM,QAC3BF,aAAa,WAAWA,aAAa,YACnCR,KAAKG,WAAWC,WAAWO,UAC3BC;IACV,OAAO;AACLV,iBAAWF,KAAKG,WAAWC;IAC7B;AAEA,QAAIF,YAAYhB,KAAK2B,SAASb,IAAAA,GAAO;AACnChB,eAAS8B,UAAUC,WAAWd,KAAKe,MAAM,GAAG,EAAC,EAAGC,KAAK,GAAA,CAAA,EAAMC,KAAK;QAC9DhB;QACAiB,SAAS,MAAM,KAAKhC,UAAUQ,SAASE,eAAeG,MAAM;UAAEoB,QAAQpB;UAAMqB,QAAQhC;QAAY,CAAA;QAChGiC,MAAMtB,KAAKG,WAAWoB;MACxB,CAAA;IACF;EACF;AAEA,QAAMC,eAAezC,SAAS,MAAA;AAC5BE,UAAMwC,SAASjC,OAAO;MAAEkC,UAAU;QAAC;QAAS;;MAAW3B;IAAQ,CAAA;EACjE,GAAG,GAAA;AAEH,QAAM4B,cAAcnC,MAAMoC,cAAcC,GAAGL,YAAAA;AAG3CxC,WAAS8B,UAAUgB,WAAU;AAC7B9C,WAAS8B,UAAUiB,kBAAkB7C,KAAK8C,MAAM;AAEhD,SAAOnD,WAAWoD,YAAYrD,aAAasD,MAAM,MAAM,MAC9CC,YAAK,MAAA;AACVR,gBAAAA;AACA3C,aAAS8B,UAAUsB,QAAO;EAC5B,CAAA,CAAA;AAEJ,CAAA,CAAA;",
6
+ "names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "debounce", "Keyboard", "Graph", "Node", "runAction", "getHostPlatform", "KEY_BINDING", "makeModule", "fnUntraced", "graph", "get", "AppGraph", "invoker", "OperationInvoker", "pluginContext", "Service", "visitor", "node", "path", "shortcut", "properties", "keyBinding", "availablePlatforms", "Object", "keys", "platform", "includes", "macos", "windows", "undefined", "isAction", "singleton", "getContext", "slice", "join", "bind", "handler", "parent", "caller", "data", "label", "eventHandler", "traverse", "relation", "unsubscribe", "onNodeChanged", "on", "initialize", "setCurrentContext", "RootId", "contributes", "Null", "sync", "destroy"]
7
+ }