@dxos/plugin-navtree 0.8.4-main.fd6878d → 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 (275) 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-HMTMA33N.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 -105
  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 +25 -5
  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 +33 -4
  96. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
  97. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +1 -1
  98. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
  99. package/dist/types/src/components/Sidebar/L0Menu.d.ts +10 -5
  100. package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
  101. package/dist/types/src/components/Sidebar/L1Panel.d.ts +4 -7
  102. package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
  103. package/dist/types/src/components/Sidebar/L1Tabs.d.ts +5 -4
  104. package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -1
  105. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -1
  106. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts +8 -5
  107. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/index.d.ts +0 -3
  109. package/dist/types/src/components/index.d.ts.map +1 -1
  110. package/dist/types/src/components/types.d.ts +8 -17
  111. package/dist/types/src/components/types.d.ts.map +1 -1
  112. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts +6 -0
  113. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -0
  114. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts +28 -0
  115. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts.map +1 -0
  116. package/dist/types/src/containers/CommandsDialogContent/index.d.ts +2 -0
  117. package/dist/types/src/containers/CommandsDialogContent/index.d.ts.map +1 -0
  118. package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -0
  119. package/dist/types/src/containers/CommandsTrigger/index.d.ts +2 -0
  120. package/dist/types/src/containers/CommandsTrigger/index.d.ts.map +1 -0
  121. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts +9 -0
  122. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -0
  123. package/dist/types/src/containers/NavTreeContainer/index.d.ts +3 -0
  124. package/dist/types/src/containers/NavTreeContainer/index.d.ts.map +1 -0
  125. package/dist/types/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.d.ts +1 -1
  126. package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -0
  127. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts +2 -0
  128. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts.map +1 -0
  129. package/dist/types/src/containers/index.d.ts +7 -0
  130. package/dist/types/src/containers/index.d.ts.map +1 -0
  131. package/dist/types/src/experimental/Tree.d.ts +3 -4
  132. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  133. package/dist/types/src/experimental/Tree.stories.d.ts +23 -6
  134. package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
  135. package/dist/types/src/hooks/index.d.ts +5 -0
  136. package/dist/types/src/hooks/index.d.ts.map +1 -0
  137. package/dist/types/src/hooks/useActions.d.ts +11 -0
  138. package/dist/types/src/hooks/useActions.d.ts.map +1 -0
  139. package/dist/types/src/hooks/useLoadDescendents.d.ts +6 -0
  140. package/dist/types/src/hooks/useLoadDescendents.d.ts.map +1 -0
  141. package/dist/types/src/hooks/useNavTreeModel.d.ts +7 -0
  142. package/dist/types/src/hooks/useNavTreeModel.d.ts.map +1 -0
  143. package/dist/types/src/hooks/useNavTreeState.d.ts +18 -0
  144. package/dist/types/src/hooks/useNavTreeState.d.ts.map +1 -0
  145. package/dist/types/src/index.d.ts +1 -3
  146. package/dist/types/src/index.d.ts.map +1 -1
  147. package/dist/types/src/meta.d.ts +4 -4
  148. package/dist/types/src/meta.d.ts.map +1 -1
  149. package/dist/types/src/operations/expose.d.ts +5 -0
  150. package/dist/types/src/operations/expose.d.ts.map +1 -0
  151. package/dist/types/src/operations/index.d.ts +3 -0
  152. package/dist/types/src/operations/index.d.ts.map +1 -0
  153. package/dist/types/src/plugin.d.ts +4 -0
  154. package/dist/types/src/plugin.d.ts.map +1 -0
  155. package/dist/types/src/testing/app-graph-builder.d.ts +2 -3
  156. package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
  157. package/dist/types/src/testing/generator.d.ts +5 -6
  158. package/dist/types/src/testing/generator.d.ts.map +1 -1
  159. package/dist/types/src/testing/update-state.d.ts +2 -2
  160. package/dist/types/src/testing/update-state.d.ts.map +1 -1
  161. package/dist/types/src/translations.d.ts +8 -11
  162. package/dist/types/src/translations.d.ts.map +1 -1
  163. package/dist/types/src/types/NavTreeCapabilities.d.ts +13 -0
  164. package/dist/types/src/types/NavTreeCapabilities.d.ts.map +1 -0
  165. package/dist/types/src/types/NavTreeEvents.d.ts +3 -0
  166. package/dist/types/src/types/NavTreeEvents.d.ts.map +1 -0
  167. package/dist/types/src/types/index.d.ts +4 -0
  168. package/dist/types/src/types/index.d.ts.map +1 -0
  169. package/dist/types/src/{types.d.ts → types/schema.d.ts} +14 -9
  170. package/dist/types/src/types/schema.d.ts.map +1 -0
  171. package/dist/types/src/util.d.ts +12 -8
  172. package/dist/types/src/util.d.ts.map +1 -1
  173. package/dist/types/tsconfig.tsbuildinfo +1 -1
  174. package/package.json +124 -62
  175. package/src/NavTreePlugin.node.ts +17 -0
  176. package/src/NavTreePlugin.test.ts +27 -0
  177. package/src/NavTreePlugin.tsx +56 -87
  178. package/src/NavTreePlugin.workerd.ts +16 -0
  179. package/src/capabilities/app-graph-builder.ts +34 -44
  180. package/src/capabilities/index.ts +10 -8
  181. package/src/capabilities/keyboard.ts +58 -51
  182. package/src/capabilities/operation-handler.ts +16 -0
  183. package/src/capabilities/react-surface.tsx +46 -38
  184. package/src/capabilities/state.ts +132 -84
  185. package/src/components/NavTree/NavTree.stories.tsx +112 -106
  186. package/src/components/NavTree/NavTree.tsx +69 -33
  187. package/src/components/{NavTreeContext.tsx → NavTreeContext/NavTreeContext.tsx} +1 -1
  188. package/src/components/NavTreeContext/index.ts +5 -0
  189. package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +25 -19
  190. package/src/components/NavTreeItem/NavTreeItemAction.tsx +78 -54
  191. package/src/components/NavTreeItem/NavTreeItemColumns.tsx +40 -51
  192. package/src/components/Sidebar/L0Menu.tsx +182 -210
  193. package/src/components/Sidebar/L1Panel.tsx +185 -110
  194. package/src/components/Sidebar/L1Tabs.tsx +18 -34
  195. package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +9 -9
  196. package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +20 -12
  197. package/src/components/index.ts +1 -3
  198. package/src/components/types.ts +13 -19
  199. package/src/containers/CommandsDialogContent/CommandsDialogContent.stories.tsx +46 -0
  200. package/src/containers/CommandsDialogContent/CommandsDialogContent.tsx +127 -0
  201. package/src/containers/CommandsDialogContent/index.ts +5 -0
  202. package/src/containers/CommandsTrigger/CommandsTrigger.tsx +28 -0
  203. package/src/containers/CommandsTrigger/index.ts +5 -0
  204. package/src/containers/NavTreeContainer/NavTreeContainer.tsx +271 -0
  205. package/src/containers/NavTreeContainer/index.ts +6 -0
  206. package/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.tsx +5 -4
  207. package/src/containers/NavTreeDocumentTitle/index.ts +5 -0
  208. package/src/containers/index.ts +12 -0
  209. package/src/experimental/Tree.stories.tsx +105 -110
  210. package/src/experimental/Tree.tsx +7 -24
  211. package/src/hooks/index.ts +8 -0
  212. package/src/hooks/useActions.ts +44 -0
  213. package/src/hooks/useLoadDescendents.ts +23 -0
  214. package/src/hooks/useNavTreeModel.ts +120 -0
  215. package/src/hooks/useNavTreeState.ts +35 -0
  216. package/src/index.ts +1 -3
  217. package/src/meta.ts +26 -8
  218. package/src/operations/expose.ts +42 -0
  219. package/src/operations/index.ts +7 -0
  220. package/src/plugin.ts +11 -0
  221. package/src/testing/app-graph-builder.ts +169 -238
  222. package/src/testing/generator.ts +36 -39
  223. package/src/testing/update-state.ts +6 -6
  224. package/src/translations.ts +8 -10
  225. package/src/types/NavTreeCapabilities.ts +21 -0
  226. package/src/types/NavTreeEvents.ts +12 -0
  227. package/src/types/index.ts +8 -0
  228. package/src/{types.ts → types/schema.ts} +13 -8
  229. package/src/util.ts +28 -17
  230. package/src/vite-env.d.ts +10 -0
  231. package/dist/lib/browser/app-graph-builder-6JDBQ25U.mjs +0 -45
  232. package/dist/lib/browser/app-graph-builder-6JDBQ25U.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-ERDGQTH5.mjs +0 -16
  234. package/dist/lib/browser/chunk-ERDGQTH5.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-SNGLGBFJ.mjs +0 -1469
  236. package/dist/lib/browser/chunk-SNGLGBFJ.mjs.map +0 -7
  237. package/dist/lib/browser/chunk-WCARAZ7J.mjs +0 -15
  238. package/dist/lib/browser/chunk-WCARAZ7J.mjs.map +0 -7
  239. package/dist/lib/browser/index.mjs +0 -148
  240. package/dist/lib/browser/index.mjs.map +0 -7
  241. package/dist/lib/browser/intent-resolver-N35ZIHFD.mjs +0 -47
  242. package/dist/lib/browser/intent-resolver-N35ZIHFD.mjs.map +0 -7
  243. package/dist/lib/browser/keyboard-HMTMA33N.mjs.map +0 -7
  244. package/dist/lib/browser/meta.json +0 -1
  245. package/dist/lib/browser/react-surface-WKWXMM2N.mjs +0 -51
  246. package/dist/lib/browser/react-surface-WKWXMM2N.mjs.map +0 -7
  247. package/dist/lib/browser/state-P5DGL7KS.mjs +0 -117
  248. package/dist/lib/browser/state-P5DGL7KS.mjs.map +0 -7
  249. package/dist/types/src/capabilities/capabilities.d.ts +0 -21
  250. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  251. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  252. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  253. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts +0 -5
  254. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts.map +0 -1
  255. package/dist/types/src/components/CommandsDialog/CommandsTrigger.d.ts.map +0 -1
  256. package/dist/types/src/components/CommandsDialog/index.d.ts +0 -3
  257. package/dist/types/src/components/CommandsDialog/index.d.ts.map +0 -1
  258. package/dist/types/src/components/NavTreeContainer.d.ts +0 -9
  259. package/dist/types/src/components/NavTreeContainer.d.ts.map +0 -1
  260. package/dist/types/src/components/NavTreeContext.d.ts.map +0 -1
  261. package/dist/types/src/components/NavTreeDocumentTitle.d.ts.map +0 -1
  262. package/dist/types/src/events.d.ts +0 -4
  263. package/dist/types/src/events.d.ts.map +0 -1
  264. package/dist/types/src/hooks.d.ts +0 -3
  265. package/dist/types/src/hooks.d.ts.map +0 -1
  266. package/dist/types/src/types.d.ts.map +0 -1
  267. package/src/capabilities/capabilities.ts +0 -20
  268. package/src/capabilities/intent-resolver.ts +0 -37
  269. package/src/components/CommandsDialog/CommandsDialog.tsx +0 -118
  270. package/src/components/CommandsDialog/CommandsTrigger.tsx +0 -35
  271. package/src/components/CommandsDialog/index.ts +0 -6
  272. package/src/components/NavTreeContainer.tsx +0 -337
  273. package/src/events.ts +0 -11
  274. package/src/hooks.ts +0 -21
  275. /package/dist/types/src/{components/CommandsDialog → containers/CommandsTrigger}/CommandsTrigger.d.ts +0 -0
@@ -2,105 +2,129 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import React from 'react';
5
+ import React, { useCallback } from 'react';
6
6
 
7
- import { type Action, type Node } from '@dxos/app-graph';
7
+ import { type Node } from '@dxos/app-graph';
8
+ import { useActionRunner } from '@dxos/plugin-graph';
8
9
  import { IconButton, toLocalizedString, useDensityContext, useTranslation } from '@dxos/react-ui';
9
- import { DropdownMenu, type MenuItem, MenuProvider } from '@dxos/react-ui-menu';
10
- import { hoverableControlItem, hoverableOpenControlItem } from '@dxos/react-ui-theme';
10
+ import { composable, composableProps } from '@dxos/react-ui';
11
+ import { Menu, type MenuItem } from '@dxos/react-ui-menu';
12
+ import { hoverableControlItem, hoverableOpenControlItem } from '@dxos/ui-theme';
11
13
 
12
- import { NAVTREE_PLUGIN } from '../../meta';
13
- import { type ActionProperties } from '../../types';
14
+ import { meta } from '#meta';
15
+ import { type ActionProperties } from '#types';
14
16
 
15
- export type NavTreeItemActionMenuProps = ActionProperties & {
16
- parent: Node;
17
- caller?: string;
18
- monolithic?: boolean;
19
- menuActions?: Action[];
20
- };
17
+ const fallbackIcon = 'ph--circle-dashed--regular';
21
18
 
22
- const fallbackIcon = 'ph--placeholder--regular';
23
-
24
- const fineActionButtonProps = {
19
+ const mdActionButtonProps = {
25
20
  size: 4 as const,
26
- density: 'fine' as const,
21
+ density: 'md' as const,
27
22
  };
28
- const coarseActionButtonProps = {
23
+
24
+ const lgActionButtonProps = {
29
25
  size: 5 as const,
30
- density: 'coarse' as const,
26
+ density: 'lg' as const,
31
27
  };
32
28
 
33
- export const NavTreeItemActionDropdownMenu = ({
34
- parent,
35
- label,
36
- icon,
37
- testId,
38
- menuActions,
39
- caller,
40
- }: NavTreeItemActionMenuProps) => {
41
- const { t } = useTranslation(NAVTREE_PLUGIN);
42
- const density = useDensityContext();
43
- return (
44
- <MenuProvider>
45
- <DropdownMenu.Root group={parent} items={menuActions as MenuItem[]} caller={caller}>
46
- <DropdownMenu.Trigger asChild>
29
+ export type NavTreeItemActionMenuProps = ActionProperties & {
30
+ parent: Node.Node;
31
+ path?: string[];
32
+ caller?: string;
33
+ monolithic?: boolean;
34
+ menuActions?: Node.Action[];
35
+ };
36
+
37
+ export const NavTreeItemActionDropdownMenu = composable<HTMLButtonElement, NavTreeItemActionMenuProps>(
38
+ ({ parent, path, label, icon, testId, menuActions, caller, ...props }, forwardedRef) => {
39
+ const { t } = useTranslation(meta.id);
40
+ const density = useDensityContext();
41
+ const runAction = useActionRunner();
42
+ const handleAction = useCallback(
43
+ (action: Node.Action, params: Node.InvokeProps = {}) => runAction(action, { ...params, path }),
44
+ [runAction, path],
45
+ );
46
+
47
+ return (
48
+ <Menu.Root caller={caller} onAction={handleAction}>
49
+ <Menu.Trigger asChild>
47
50
  <IconButton
48
- {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}
49
- classNames={['shrink-0 pli-2 pointer-fine:pli-1', hoverableControlItem, hoverableOpenControlItem]}
51
+ {...(density === 'lg' ? lgActionButtonProps : mdActionButtonProps)}
52
+ {...composableProps(props)}
53
+ classNames={['shrink-0 px-2 pointer-fine:px-1', hoverableControlItem, hoverableOpenControlItem]}
50
54
  variant='ghost'
51
55
  icon={icon ?? fallbackIcon}
52
56
  iconOnly
53
57
  label={toLocalizedString(label, t)}
54
58
  data-testid={testId}
59
+ ref={forwardedRef}
55
60
  />
56
- </DropdownMenu.Trigger>
57
- </DropdownMenu.Root>
58
- </MenuProvider>
59
- );
60
- };
61
+ </Menu.Trigger>
62
+ <Menu.Content group={parent} items={menuActions as MenuItem[]} />
63
+ </Menu.Root>
64
+ );
65
+ },
66
+ );
61
67
 
62
- export const NavTreeItemMonolithicAction = ({
63
- parent,
64
- properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },
65
- data: invoke,
66
- baseLabel,
67
- }: Action & { parent: Node; onAction?: (action: Action) => void; baseLabel: string }) => {
68
+ NavTreeItemActionDropdownMenu.displayName = 'NavTreeItemActionDropdownMenu';
69
+
70
+ export const NavTreeItemMonolithicAction = (
71
+ props: Node.Action & {
72
+ parent: Node.Node;
73
+ path?: string[];
74
+ onAction?: (action: Node.Action) => void;
75
+ baseLabel: string;
76
+ },
77
+ ) => {
78
+ const {
79
+ parent,
80
+ path,
81
+ properties: { disabled, caller, testId, icon, variant = 'ghost', iconOnly = true } = { label: 'never' },
82
+ baseLabel,
83
+ } = props;
68
84
  const density = useDensityContext();
85
+ const runAction = useActionRunner();
69
86
  return (
70
87
  <IconButton
71
- {...(density === 'coarse' ? coarseActionButtonProps : fineActionButtonProps)}
88
+ {...(density === 'lg' ? lgActionButtonProps : mdActionButtonProps)}
72
89
  variant={variant}
73
90
  classNames={[
74
91
  'shrink-0',
75
92
  hoverableControlItem,
76
93
  hoverableOpenControlItem,
77
- iconOnly ? 'pli-2 pointer-fine:pli-1' : 'p-2 pointer-fine:p-2 mie-1',
94
+ iconOnly ? 'px-2 pointer-fine:px-1' : 'p-2 pointer-fine:p-2 me-1',
78
95
  ]}
79
96
  icon={icon ?? fallbackIcon}
80
97
  iconOnly={iconOnly}
81
98
  label={baseLabel}
82
99
  disabled={disabled}
83
100
  onClick={(event) => {
101
+ event.stopPropagation();
84
102
  if (disabled) {
85
103
  return;
86
104
  }
87
- event.stopPropagation();
88
- void invoke?.(caller ? { parent, caller } : { parent });
105
+
106
+ void runAction(props, caller ? { parent, caller, path } : { parent, path });
89
107
  }}
90
108
  data-testid={testId}
91
109
  />
92
110
  );
93
111
  };
94
112
 
95
- export const NavTreeItemAction = ({ monolithic, menuActions, parent: node, ...props }: NavTreeItemActionMenuProps) => {
96
- const { t } = useTranslation(NAVTREE_PLUGIN);
113
+ export const NavTreeItemAction = ({
114
+ monolithic,
115
+ menuActions,
116
+ menuType,
117
+ parent,
118
+ path,
119
+ ...props
120
+ }: NavTreeItemActionMenuProps) => {
121
+ const { t } = useTranslation(meta.id);
97
122
 
98
123
  const monolithicAction = menuActions?.length === 1 && menuActions[0];
99
124
  const baseLabel = toLocalizedString(monolithicAction ? monolithicAction.properties!.label : props.label, t);
100
-
101
125
  return monolithic && menuActions?.length === 1 ? (
102
- <NavTreeItemMonolithicAction baseLabel={baseLabel} parent={node} {...menuActions[0]} />
126
+ <NavTreeItemMonolithicAction baseLabel={baseLabel} parent={parent} path={path} {...menuActions[0]} />
103
127
  ) : (
104
- <NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={node} menuActions={menuActions} />
128
+ <NavTreeItemActionDropdownMenu {...props} label={baseLabel} parent={parent} path={path} menuActions={menuActions} />
105
129
  );
106
130
  };
@@ -2,72 +2,61 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { Fragment, memo } from 'react';
5
+ import React, { Fragment, memo, useMemo } from 'react';
6
6
 
7
- import { isAction } from '@dxos/app-graph';
8
- import { DensityProvider, Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';
7
+ import { Popover, Treegrid, toLocalizedString, useTranslation } from '@dxos/react-ui';
8
+
9
+ import { getListActions, useActions } from '#hooks';
10
+ import { meta } from '#meta';
9
11
 
10
- import { useLoadDescendents } from '../../hooks';
11
- import { NAVTREE_PLUGIN } from '../../meta';
12
12
  import { NAV_TREE_ITEM } from '../NavTree';
13
13
  import { useNavTreeContext } from '../NavTreeContext';
14
14
  import { type NavTreeItemColumnsProps } from '../types';
15
+ import { NavTreeItemActionDropdownMenu, NavTreeItemMonolithicAction } from './NavTreeItemAction';
15
16
 
16
- import { NavTreeItemAction } from './NavTreeItemAction';
17
-
18
- export const NavTreeItemColumns = memo(({ path, item, open, density = 'fine' }: NavTreeItemColumnsProps) => {
19
- const { t } = useTranslation(NAVTREE_PLUGIN);
20
- const { useActions, renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();
17
+ export const NavTreeItemColumns = memo(({ path, item, open }: NavTreeItemColumnsProps) => {
18
+ const { t } = useTranslation(meta.id);
19
+ const { renderItemEnd: ItemEnd, popoverAnchorId } = useNavTreeContext();
21
20
 
22
21
  const level = path.length - 2;
23
- const { actions: _actions, groupedActions } = useActions(item);
24
- const [primaryAction, ...secondaryActions] = _actions.toSorted((a, _b) =>
25
- a.properties?.disposition === 'list-item-primary' ? -1 : 1,
26
- );
27
-
28
- const actions = (primaryAction?.properties?.disposition === 'list-item-primary' ? secondaryActions : _actions)
29
- .flatMap((action) => (isAction(action) ? [action] : []))
30
- .filter((a) => ['list-item', 'list-item-primary'].includes(a.properties?.disposition));
22
+ const flattenedActions = useActions(item);
23
+ const allActions = useMemo(() => getListActions(flattenedActions), [flattenedActions]);
31
24
 
32
- const ActionRoot = popoverAnchorId === `dxos.org/ui/${NAV_TREE_ITEM}/${item.id}` ? Popover.Anchor : Fragment;
33
-
34
- useLoadDescendents(item);
35
- useLoadDescendents(primaryAction && !isAction(primaryAction) ? primaryAction : undefined);
25
+ const ActionRoot = popoverAnchorId === `${NAV_TREE_ITEM}:${item.id}` ? Popover.Anchor : Fragment;
36
26
 
37
27
  return (
38
- <DensityProvider density={density}>
39
- <div role='none' className='contents app-no-drag'>
40
- {primaryAction?.properties?.disposition === 'list-item-primary' && !primaryAction?.properties?.disabled ? (
41
- <NavTreeItemAction
42
- testId={primaryAction.properties?.testId}
43
- label={toLocalizedString(primaryAction.properties?.label, t)}
44
- icon={primaryAction.properties?.icon ?? 'ph--placeholder--regular'}
45
- parent={item}
46
- monolithic={isAction(primaryAction)}
47
- menuActions={isAction(primaryAction) ? [primaryAction] : groupedActions[primaryAction.id]}
48
- menuType={primaryAction.properties?.menuType}
49
- caller={NAV_TREE_ITEM}
50
- />
51
- ) : (
52
- <Treegrid.Cell />
53
- )}
54
- <ActionRoot>
55
- {actions.length > 0 ? (
56
- <NavTreeItemAction
28
+ <div className='contents dx-app-no-drag'>
29
+ <ActionRoot>
30
+ {allActions.length === 1 ? (
31
+ <Treegrid.Cell classNames='contents'>
32
+ <NavTreeItemMonolithicAction
33
+ baseLabel={toLocalizedString(allActions[0].properties?.label, t)}
34
+ parent={item}
35
+ path={path}
36
+ {...allActions[0]}
37
+ />
38
+ </Treegrid.Cell>
39
+ ) : allActions.length > 1 ? (
40
+ <Treegrid.Cell classNames='contents'>
41
+ <NavTreeItemActionDropdownMenu
57
42
  testId={`navtree.treeItem.actionsLevel${level}`}
58
- label={t('tree item actions label')}
43
+ label={t('tree-item-actions.label')}
59
44
  icon='ph--dots-three-vertical--regular'
60
45
  parent={item}
61
- menuActions={actions}
62
- menuType='dropdown'
46
+ path={path}
47
+ menuActions={allActions}
63
48
  caller={NAV_TREE_ITEM}
64
49
  />
65
- ) : (
66
- <Treegrid.Cell />
67
- )}
68
- </ActionRoot>
69
- {ItemEnd && <ItemEnd node={item} open={open} />}
70
- </div>
71
- </DensityProvider>
50
+ </Treegrid.Cell>
51
+ ) : (
52
+ <Treegrid.Cell />
53
+ )}
54
+ </ActionRoot>
55
+ {ItemEnd && (
56
+ <Treegrid.Cell classNames='contents'>
57
+ <ItemEnd node={item} open={open} />
58
+ </Treegrid.Cell>
59
+ )}
60
+ </div>
72
61
  );
73
62
  });