@dxos/plugin-navtree 0.8.3 → 0.8.4-main.1c7ec43d41

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 (212) hide show
  1. package/dist/lib/browser/NavTreePlugin-3KLPENH6.mjs +54 -0
  2. package/dist/lib/browser/NavTreePlugin-3KLPENH6.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +98 -125
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/translations.mjs +21 -0
  7. package/dist/lib/browser/translations.mjs.map +7 -0
  8. package/dist/types/src/NavTreePlugin.d.ts +3 -1
  9. package/dist/types/src/NavTreePlugin.d.ts.map +1 -1
  10. package/dist/types/src/NavTreePlugin.node.d.ts +4 -0
  11. package/dist/types/src/NavTreePlugin.node.d.ts.map +1 -0
  12. package/dist/types/src/NavTreePlugin.test.d.ts +2 -0
  13. package/dist/types/src/NavTreePlugin.test.d.ts.map +1 -0
  14. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  15. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  16. package/dist/types/src/capabilities/index.d.ts +7 -105
  17. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  18. package/dist/types/src/capabilities/keyboard.d.ts +3 -2
  19. package/dist/types/src/capabilities/keyboard.d.ts.map +1 -1
  20. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  21. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  22. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  23. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  24. package/dist/types/src/capabilities/state.d.ts +4 -18
  25. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  26. package/dist/types/src/components/NavTree/NavTree.d.ts +12 -5
  27. package/dist/types/src/components/NavTree/NavTree.d.ts.map +1 -1
  28. package/dist/types/src/components/NavTree/NavTree.stories.d.ts +25 -5
  29. package/dist/types/src/components/NavTree/NavTree.stories.d.ts.map +1 -1
  30. package/dist/types/src/components/{NavTreeContext.d.ts → NavTreeContext/NavTreeContext.d.ts} +1 -1
  31. package/dist/types/src/components/NavTreeContext/NavTreeContext.d.ts.map +1 -0
  32. package/dist/types/src/components/NavTreeContext/index.d.ts +2 -0
  33. package/dist/types/src/components/NavTreeContext/index.d.ts.map +1 -0
  34. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts +13 -9
  35. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.d.ts.map +1 -1
  36. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts +33 -4
  37. package/dist/types/src/components/NavTreeItem/NavTreeItemAction.stories.d.ts.map +1 -1
  38. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts +2 -2
  39. package/dist/types/src/components/NavTreeItem/NavTreeItemColumns.d.ts.map +1 -1
  40. package/dist/types/src/components/Sidebar/L0Menu.d.ts +10 -5
  41. package/dist/types/src/components/Sidebar/L0Menu.d.ts.map +1 -1
  42. package/dist/types/src/components/Sidebar/L1Panel.d.ts +4 -8
  43. package/dist/types/src/components/Sidebar/L1Panel.d.ts.map +1 -1
  44. package/dist/types/src/components/Sidebar/L1Tabs.d.ts +13 -0
  45. package/dist/types/src/components/Sidebar/L1Tabs.d.ts.map +1 -0
  46. package/dist/types/src/components/Sidebar/index.d.ts +1 -0
  47. package/dist/types/src/components/Sidebar/index.d.ts.map +1 -1
  48. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.d.ts.map +1 -1
  49. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts +8 -5
  50. package/dist/types/src/components/UserAccountAvatar/UserAccountAvatar.stories.d.ts.map +1 -1
  51. package/dist/types/src/components/index.d.ts +1 -4
  52. package/dist/types/src/components/index.d.ts.map +1 -1
  53. package/dist/types/src/components/types.d.ts +8 -17
  54. package/dist/types/src/components/types.d.ts.map +1 -1
  55. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts +6 -0
  56. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.d.ts.map +1 -0
  57. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts +28 -0
  58. package/dist/types/src/containers/CommandsDialogContent/CommandsDialogContent.stories.d.ts.map +1 -0
  59. package/dist/types/src/containers/CommandsDialogContent/index.d.ts +2 -0
  60. package/dist/types/src/containers/CommandsDialogContent/index.d.ts.map +1 -0
  61. package/dist/types/src/containers/CommandsTrigger/CommandsTrigger.d.ts.map +1 -0
  62. package/dist/types/src/containers/CommandsTrigger/index.d.ts +2 -0
  63. package/dist/types/src/containers/CommandsTrigger/index.d.ts.map +1 -0
  64. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts +9 -0
  65. package/dist/types/src/containers/NavTreeContainer/NavTreeContainer.d.ts.map +1 -0
  66. package/dist/types/src/containers/NavTreeContainer/index.d.ts +3 -0
  67. package/dist/types/src/containers/NavTreeContainer/index.d.ts.map +1 -0
  68. package/dist/types/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.d.ts +1 -1
  69. package/dist/types/src/containers/NavTreeDocumentTitle/NavTreeDocumentTitle.d.ts.map +1 -0
  70. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts +2 -0
  71. package/dist/types/src/containers/NavTreeDocumentTitle/index.d.ts.map +1 -0
  72. package/dist/types/src/containers/index.d.ts +7 -0
  73. package/dist/types/src/containers/index.d.ts.map +1 -0
  74. package/dist/types/src/experimental/Tree.d.ts +5 -6
  75. package/dist/types/src/experimental/Tree.d.ts.map +1 -1
  76. package/dist/types/src/experimental/Tree.stories.d.ts +23 -6
  77. package/dist/types/src/experimental/Tree.stories.d.ts.map +1 -1
  78. package/dist/types/src/hooks/index.d.ts +5 -0
  79. package/dist/types/src/hooks/index.d.ts.map +1 -0
  80. package/dist/types/src/hooks/useActions.d.ts +5 -0
  81. package/dist/types/src/hooks/useActions.d.ts.map +1 -0
  82. package/dist/types/src/hooks/useLoadDescendents.d.ts +6 -0
  83. package/dist/types/src/hooks/useLoadDescendents.d.ts.map +1 -0
  84. package/dist/types/src/hooks/useNavTreeModel.d.ts +7 -0
  85. package/dist/types/src/hooks/useNavTreeModel.d.ts.map +1 -0
  86. package/dist/types/src/hooks/useNavTreeState.d.ts +18 -0
  87. package/dist/types/src/hooks/useNavTreeState.d.ts.map +1 -0
  88. package/dist/types/src/index.d.ts +3 -3
  89. package/dist/types/src/index.d.ts.map +1 -1
  90. package/dist/types/src/meta.d.ts +3 -4
  91. package/dist/types/src/meta.d.ts.map +1 -1
  92. package/dist/types/src/operations/expose.d.ts +5 -0
  93. package/dist/types/src/operations/expose.d.ts.map +1 -0
  94. package/dist/types/src/operations/index.d.ts +3 -0
  95. package/dist/types/src/operations/index.d.ts.map +1 -0
  96. package/dist/types/src/testing/app-graph-builder.d.ts +2 -3
  97. package/dist/types/src/testing/app-graph-builder.d.ts.map +1 -1
  98. package/dist/types/src/testing/generator.d.ts +5 -6
  99. package/dist/types/src/testing/generator.d.ts.map +1 -1
  100. package/dist/types/src/testing/update-state.d.ts +2 -2
  101. package/dist/types/src/testing/update-state.d.ts.map +1 -1
  102. package/dist/types/src/translations.d.ts +11 -13
  103. package/dist/types/src/translations.d.ts.map +1 -1
  104. package/dist/types/src/types/capabilities.d.ts +15 -0
  105. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  106. package/dist/types/src/types/events.d.ts +5 -0
  107. package/dist/types/src/types/events.d.ts.map +1 -0
  108. package/dist/types/src/types/index.d.ts +4 -0
  109. package/dist/types/src/types/index.d.ts.map +1 -0
  110. package/dist/types/src/{types.d.ts → types/schema.d.ts} +10 -9
  111. package/dist/types/src/types/schema.d.ts.map +1 -0
  112. package/dist/types/src/util.d.ts +12 -9
  113. package/dist/types/src/util.d.ts.map +1 -1
  114. package/dist/types/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +79 -59
  116. package/src/NavTreePlugin.node.ts +17 -0
  117. package/src/NavTreePlugin.test.ts +27 -0
  118. package/src/NavTreePlugin.tsx +51 -88
  119. package/src/capabilities/app-graph-builder.ts +34 -44
  120. package/src/capabilities/index.ts +10 -8
  121. package/src/capabilities/keyboard.ts +58 -51
  122. package/src/capabilities/operation-handler.ts +16 -0
  123. package/src/capabilities/react-surface.tsx +46 -38
  124. package/src/capabilities/state.ts +129 -84
  125. package/src/components/NavTree/NavTree.stories.tsx +111 -103
  126. package/src/components/NavTree/NavTree.tsx +71 -35
  127. package/src/components/{NavTreeContext.tsx → NavTreeContext/NavTreeContext.tsx} +1 -1
  128. package/src/components/NavTreeContext/index.ts +5 -0
  129. package/src/components/NavTreeItem/NavTreeItemAction.stories.tsx +26 -20
  130. package/src/components/NavTreeItem/NavTreeItemAction.tsx +73 -50
  131. package/src/components/NavTreeItem/NavTreeItemColumns.tsx +70 -38
  132. package/src/components/Sidebar/L0Menu.tsx +176 -210
  133. package/src/components/Sidebar/L1Panel.tsx +212 -136
  134. package/src/components/Sidebar/L1Tabs.tsx +42 -0
  135. package/src/components/Sidebar/index.ts +1 -0
  136. package/src/components/UserAccountAvatar/UserAccountAvatar.stories.tsx +9 -9
  137. package/src/components/UserAccountAvatar/UserAccountAvatar.tsx +20 -12
  138. package/src/components/index.ts +2 -4
  139. package/src/components/types.ts +14 -19
  140. package/src/containers/CommandsDialogContent/CommandsDialogContent.stories.tsx +46 -0
  141. package/src/containers/CommandsDialogContent/CommandsDialogContent.tsx +127 -0
  142. package/src/containers/CommandsDialogContent/index.ts +5 -0
  143. package/src/containers/CommandsTrigger/CommandsTrigger.tsx +28 -0
  144. package/src/containers/CommandsTrigger/index.ts +5 -0
  145. package/src/containers/NavTreeContainer/NavTreeContainer.tsx +271 -0
  146. package/src/containers/NavTreeContainer/index.ts +6 -0
  147. package/src/{components → containers/NavTreeDocumentTitle}/NavTreeDocumentTitle.tsx +5 -4
  148. package/src/containers/NavTreeDocumentTitle/index.ts +5 -0
  149. package/src/containers/index.ts +12 -0
  150. package/src/experimental/Tree.stories.tsx +111 -116
  151. package/src/experimental/Tree.tsx +16 -34
  152. package/src/hooks/index.ts +8 -0
  153. package/src/hooks/useActions.ts +34 -0
  154. package/src/hooks/useLoadDescendents.ts +23 -0
  155. package/src/hooks/useNavTreeModel.ts +118 -0
  156. package/src/hooks/useNavTreeState.ts +35 -0
  157. package/src/index.ts +8 -3
  158. package/src/meta.ts +12 -8
  159. package/src/operations/expose.ts +42 -0
  160. package/src/operations/index.ts +7 -0
  161. package/src/testing/app-graph-builder.ts +167 -238
  162. package/src/testing/generator.ts +41 -39
  163. package/src/testing/update-state.ts +6 -6
  164. package/src/translations.ts +13 -12
  165. package/src/types/capabilities.ts +21 -0
  166. package/src/types/events.ts +12 -0
  167. package/src/types/index.ts +7 -0
  168. package/src/{types.ts → types/schema.ts} +9 -8
  169. package/src/util.ts +26 -33
  170. package/dist/lib/browser/app-graph-builder-P7AY3K72.mjs +0 -45
  171. package/dist/lib/browser/app-graph-builder-P7AY3K72.mjs.map +0 -7
  172. package/dist/lib/browser/chunk-33VLL4IJ.mjs +0 -15
  173. package/dist/lib/browser/chunk-33VLL4IJ.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-IEW3JD5C.mjs +0 -16
  175. package/dist/lib/browser/chunk-IEW3JD5C.mjs.map +0 -7
  176. package/dist/lib/browser/chunk-ZJPL4XJD.mjs +0 -1429
  177. package/dist/lib/browser/chunk-ZJPL4XJD.mjs.map +0 -7
  178. package/dist/lib/browser/intent-resolver-NAYKKAOP.mjs +0 -47
  179. package/dist/lib/browser/intent-resolver-NAYKKAOP.mjs.map +0 -7
  180. package/dist/lib/browser/keyboard-DDFATRUG.mjs +0 -51
  181. package/dist/lib/browser/keyboard-DDFATRUG.mjs.map +0 -7
  182. package/dist/lib/browser/react-surface-H3JRTVNU.mjs +0 -51
  183. package/dist/lib/browser/react-surface-H3JRTVNU.mjs.map +0 -7
  184. package/dist/lib/browser/state-J6AKZRB4.mjs +0 -117
  185. package/dist/lib/browser/state-J6AKZRB4.mjs.map +0 -7
  186. package/dist/types/src/capabilities/capabilities.d.ts +0 -21
  187. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  188. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  189. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  190. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts +0 -5
  191. package/dist/types/src/components/CommandsDialog/CommandsDialog.d.ts.map +0 -1
  192. package/dist/types/src/components/CommandsDialog/CommandsTrigger.d.ts.map +0 -1
  193. package/dist/types/src/components/CommandsDialog/index.d.ts +0 -3
  194. package/dist/types/src/components/CommandsDialog/index.d.ts.map +0 -1
  195. package/dist/types/src/components/NavTreeContainer.d.ts +0 -9
  196. package/dist/types/src/components/NavTreeContainer.d.ts.map +0 -1
  197. package/dist/types/src/components/NavTreeContext.d.ts.map +0 -1
  198. package/dist/types/src/components/NavTreeDocumentTitle.d.ts.map +0 -1
  199. package/dist/types/src/events.d.ts +0 -4
  200. package/dist/types/src/events.d.ts.map +0 -1
  201. package/dist/types/src/hooks.d.ts +0 -3
  202. package/dist/types/src/hooks.d.ts.map +0 -1
  203. package/dist/types/src/types.d.ts.map +0 -1
  204. package/src/capabilities/capabilities.ts +0 -20
  205. package/src/capabilities/intent-resolver.ts +0 -37
  206. package/src/components/CommandsDialog/CommandsDialog.tsx +0 -118
  207. package/src/components/CommandsDialog/CommandsTrigger.tsx +0 -37
  208. package/src/components/CommandsDialog/index.ts +0 -6
  209. package/src/components/NavTreeContainer.tsx +0 -314
  210. package/src/events.ts +0 -11
  211. package/src/hooks.ts +0 -21
  212. /package/dist/types/src/{components/CommandsDialog → containers/CommandsTrigger}/CommandsTrigger.d.ts +0 -0
@@ -1,4 +0,0 @@
1
- import { type PluginContext, Capabilities } from '@dxos/app-framework';
2
- declare const _default: (context: PluginContext) => import("@dxos/app-framework").Capability<Capabilities.IntentResolver>;
3
- export default _default;
4
- //# sourceMappingURL=intent-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"intent-resolver.d.ts","sourceRoot":"","sources":["../../../../src/capabilities/intent-resolver.ts"],"names":[],"mappings":"AAMA,OAAO,EAAe,KAAK,aAAa,EAAE,YAAY,EAAgC,MAAM,qBAAqB,CAAC;yBAKlG,SAAS,aAAa;AAAtC,wBAyBI"}
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const CommandsDialogContent: ({ selected: initial }: {
3
- selected?: string;
4
- }) => React.JSX.Element;
5
- //# sourceMappingURL=CommandsDialog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommandsDialog.d.ts","sourceRoot":"","sources":["../../../../../src/components/CommandsDialog/CommandsDialog.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA4B,MAAM,OAAO,CAAC;AAoBjD,eAAO,MAAM,qBAAqB,GAAI,uBAAuB;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,sBA6FjF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommandsTrigger.d.ts","sourceRoot":"","sources":["../../../../../src/components/CommandsDialog/CommandsTrigger.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,OAAO,CAAC;AAS1B,eAAO,MAAM,eAAe,yBAsB3B,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from './CommandsDialog';
2
- export * from './CommandsTrigger';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/CommandsDialog/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC"}
@@ -1,9 +0,0 @@
1
- import React from 'react';
2
- import { type NavTreeContextValue } from './types';
3
- export declare const NODE_TYPE = "dxos/app-graph/node";
4
- export type NavTreeContainerProps = {
5
- popoverAnchorId?: string;
6
- topbar?: boolean;
7
- } & Pick<NavTreeContextValue, 'tab'>;
8
- export declare const NavTreeContainer: React.MemoExoticComponent<({ tab, popoverAnchorId, topbar }: NavTreeContainerProps) => React.JSX.Element>;
9
- //# sourceMappingURL=NavTreeContainer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"NavTreeContainer.d.ts","sourceRoot":"","sources":["../../../../src/components/NavTreeContainer.tsx"],"names":[],"mappings":"AAOA,OAAO,KAAgD,MAAM,OAAO,CAAC;AAqBrE,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAOnD,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAgC/C,MAAM,MAAM,qBAAqB,GAAG;IAClC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,IAAI,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AAErC,eAAO,MAAM,gBAAgB,+DAA2C,qBAAqB,uBAiP3F,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NavTreeContext.d.ts","sourceRoot":"","sources":["../../../../src/components/NavTreeContext.tsx"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnD,eAAO,MAAM,cAAc,qDAAkD,CAAC;AAE9E,eAAO,MAAM,iBAAiB,2BAAiF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NavTreeDocumentTitle.d.ts","sourceRoot":"","sources":["../../../../src/components/NavTreeDocumentTitle.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAK5C,eAAO,MAAM,oBAAoB,GAAI,UAAU;IAAE,IAAI,CAAC,EAAE,IAAI,CAAA;CAAE,SAM7D,CAAC"}
@@ -1,4 +0,0 @@
1
- export declare namespace NavTreeEvents {
2
- const StateReady: import("@dxos/app-framework").ActivationEvent;
3
- }
4
- //# sourceMappingURL=events.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../../src/events.ts"],"names":[],"mappings":"AAQA,yBAAiB,aAAa,CAAC;IACtB,MAAM,UAAU,+CAA0C,CAAC;CACnE"}
@@ -1,3 +0,0 @@
1
- import { type Node } from '@dxos/app-graph';
2
- export declare const useLoadDescendents: (root?: Node) => void;
3
- //# sourceMappingURL=hooks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/hooks.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAI5C,eAAO,MAAM,kBAAkB,GAAI,OAAO,IAAI,SAU7C,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,GAAG,EACH,OAAO,CACL,cAAc,GAAG;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACpC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAClC,mBAAmB,EAAE,CAAC,SAAS,EAAE,oBAAoB,EAAE,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/E,MAAM,EAAE,CAAC,UAAU,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IACjF,eAAe,EAAE,CAAC,UAAU,EAAE,oBAAoB,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;IAC1F,aAAa,EAAE,CAAC,UAAU,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,oBAAoB,KAAK,YAAY,CAAC,IAAI,CAAC,CAAC;CAClH,CACF,CACF,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC1C,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,gBAAgB,GAAG;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CAClC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IAGvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC"}
@@ -1,20 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { defineCapability } from '@dxos/app-framework';
6
- import { type Live } from '@dxos/live-object';
7
-
8
- import { NAVTREE_PLUGIN } from '../meta';
9
- import { type NavTreeItemGraphNode } from '../types';
10
-
11
- export namespace NavTreeCapabilities {
12
- export const State = defineCapability<{
13
- state: Map<string, Live<{ open: boolean; current: boolean; alternateTree?: boolean }>>;
14
- getItem: (path: string[]) => Live<{ open: boolean; current: boolean; alternateTree?: boolean }>;
15
- setItem: (path: string[], key: 'open' | 'current' | 'alternateTree', next: boolean) => void;
16
- isOpen: (path: string[], item: NavTreeItemGraphNode) => boolean;
17
- isCurrent: (path: string[], item: NavTreeItemGraphNode) => boolean;
18
- isAlternateTree: (path: string[], item: NavTreeItemGraphNode) => boolean;
19
- }>(`${NAVTREE_PLUGIN}/capability/state`);
20
- }
@@ -1,37 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Schema } from 'effect';
6
-
7
- import { contributes, type PluginContext, Capabilities, createResolver, LayoutAction } from '@dxos/app-framework';
8
- import { log } from '@dxos/log';
9
-
10
- import { NavTreeCapabilities } from './capabilities';
11
-
12
- export default (context: PluginContext) =>
13
- contributes(
14
- Capabilities.IntentResolver,
15
- createResolver({
16
- intent: LayoutAction.UpdateLayout,
17
- filter: (data): data is Schema.Schema.Type<typeof LayoutAction.Expose.fields.input> =>
18
- Schema.is(LayoutAction.Expose.fields.input)(data),
19
- resolve: async ({ subject }) => {
20
- const { graph } = context.getCapability(Capabilities.AppGraph);
21
- const { getItem, setItem } = context.getCapability(NavTreeCapabilities.State);
22
-
23
- try {
24
- const path = await graph.waitForPath({ target: subject }, { timeout: 1_000 });
25
- [...Array(path.length)].forEach((_, index) => {
26
- const subpath = path.slice(0, index);
27
- const value = getItem(subpath);
28
- if (!value.open) {
29
- setItem(subpath, 'open', true);
30
- }
31
- });
32
- } catch {
33
- log('Path to node not found', { subject });
34
- }
35
- },
36
- }),
37
- );
@@ -1,118 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import React, { useMemo, useState } from 'react';
6
-
7
- import { createIntent, LayoutAction, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type ActionLike, isAction, isActionGroup } from '@dxos/app-graph';
9
- import { Keyboard, keySymbols } from '@dxos/keyboard';
10
- import { useActions } from '@dxos/plugin-graph';
11
- import { Button, Dialog, Icon, useTranslation, toLocalizedString } from '@dxos/react-ui';
12
- import { SearchList } from '@dxos/react-ui-searchlist';
13
- import {
14
- cardDialogContent,
15
- cardDialogHeader,
16
- cardDialogPaddedOverflow,
17
- cardDialogSearchListRoot,
18
- } from '@dxos/react-ui-stack';
19
- import { descriptionText, mx } from '@dxos/react-ui-theme';
20
- import { getHostPlatform } from '@dxos/util';
21
-
22
- import { KEY_BINDING, NAVTREE_PLUGIN } from '../../meta';
23
-
24
- // TODO(wittjosiah): This probably deserves its own plugin but for now it lives here w/ other navigation UI.
25
- export const CommandsDialogContent = ({ selected: initial }: { selected?: string }) => {
26
- const { t } = useTranslation(NAVTREE_PLUGIN);
27
- const [selected, setSelected] = useState<string | undefined>(initial);
28
- const { dispatchPromise: dispatch } = useIntentDispatcher();
29
- const { graph } = useAppGraph();
30
-
31
- // Traverse graph.
32
- // TODO(burdon): Factor out commonality with shortcut dialog.
33
- const allActions = useMemo(() => {
34
- // TODO(burdon): Get from navtree (not keyboard).
35
- const current = Keyboard.singleton.getCurrentContext();
36
- const actionMap = new Set<string>();
37
- const actions: ActionLike[] = [];
38
- graph.traverse({
39
- visitor: (node, path) => {
40
- if (
41
- (isAction(node) || isActionGroup(node)) &&
42
- !actionMap.has(node.id) &&
43
- current.startsWith(path.slice(0, -1).join('/'))
44
- ) {
45
- actionMap.add(node.id);
46
- actions.push(node);
47
- }
48
- },
49
- });
50
-
51
- actions.sort((a, b) => {
52
- return toLocalizedString(a.properties.label, t)
53
- ?.toLowerCase()
54
- .localeCompare(toLocalizedString(b.properties.label, t)?.toLowerCase());
55
- });
56
-
57
- return actions;
58
- }, [graph]);
59
-
60
- const group = allActions.find(({ id }) => id === selected);
61
- const groupActions = useActions(graph, group?.id);
62
- const actions = isActionGroup(group) ? groupActions : allActions;
63
-
64
- return (
65
- <Dialog.Content classNames={cardDialogContent}>
66
- <Dialog.Title classNames={cardDialogHeader}>{t('commands dialog title', { ns: NAVTREE_PLUGIN })}</Dialog.Title>
67
-
68
- {/* TODO(burdon): BUG: Overscrolls container. */}
69
- <SearchList.Root label={t('command list input placeholder')} classNames={cardDialogSearchListRoot}>
70
- <SearchList.Input placeholder={t('command list input placeholder')} />
71
- <SearchList.Content classNames={cardDialogPaddedOverflow}>
72
- {actions?.map((action) => {
73
- const label = toLocalizedString(action.properties.label, t);
74
- const shortcut =
75
- typeof action.properties.keyBinding === 'string'
76
- ? action.properties.keyBinding
77
- : action.properties.keyBinding?.[getHostPlatform()];
78
- return (
79
- <SearchList.Item
80
- value={label}
81
- key={action.id}
82
- onSelect={() => {
83
- if (action.properties.disabled) {
84
- return;
85
- }
86
-
87
- if (isActionGroup(action)) {
88
- setSelected(action.id);
89
- return;
90
- }
91
-
92
- void dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } }));
93
- setTimeout(() => {
94
- const node = graph.getConnections(group?.id ?? action.id, 'inbound')[0];
95
- void (node && isAction(action) && action.data({ parent: node, caller: KEY_BINDING }));
96
- });
97
- }}
98
- classNames='flex items-center gap-2'
99
- disabled={action.properties.disabled}
100
- {...(action.properties?.testId && { 'data-testid': action.properties.testId })}
101
- >
102
- <Icon icon={action.properties.icon} size={4} />
103
- <span className='grow truncate'>{label}</span>
104
- {shortcut && <span className={mx('shrink-0', descriptionText)}>{keySymbols(shortcut).join('')}</span>}
105
- </SearchList.Item>
106
- );
107
- })}
108
- </SearchList.Content>
109
- </SearchList.Root>
110
-
111
- <div role='none' className='pli-cardSpacingInline pbe-cardSpacingBlock'>
112
- <Dialog.Close asChild>
113
- <Button classNames='is-full'>{t('close label', { ns: 'os' })}</Button>
114
- </Dialog.Close>
115
- </div>
116
- </Dialog.Content>
117
- );
118
- };
@@ -1,37 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { MagnifyingGlass } from '@phosphor-icons/react';
6
- import React from 'react';
7
-
8
- import { createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
9
- import { Button, useTranslation } from '@dxos/react-ui';
10
- import { getSize } from '@dxos/react-ui-theme';
11
-
12
- import { COMMANDS_DIALOG, NAVTREE_PLUGIN } from '../../meta';
13
-
14
- // TODO(thure): Refactor to be handled by a more appropriate plugin.
15
- export const CommandsTrigger = () => {
16
- const { dispatchPromise: dispatch } = useIntentDispatcher();
17
- const { t } = useTranslation(NAVTREE_PLUGIN);
18
- return (
19
- <Button
20
- classNames='m-1 pli-1 lg:pli-2'
21
- onClick={() =>
22
- dispatch(
23
- createIntent(LayoutAction.UpdateDialog, {
24
- part: 'dialog',
25
- subject: COMMANDS_DIALOG,
26
- options: {
27
- blockAlign: 'start',
28
- },
29
- }),
30
- )
31
- }
32
- >
33
- <span className='text-description font-normal grow text-start'>{t('command list input placeholder')}</span>
34
- <MagnifyingGlass className={getSize(5)} />
35
- </Button>
36
- );
37
- };
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './CommandsDialog';
6
- export * from './CommandsTrigger';
@@ -1,314 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/adapter';
6
- import { extractInstruction, type Instruction } from '@atlaskit/pragmatic-drag-and-drop-hitbox/tree-item';
7
- import { untracked } from '@preact/signals-core';
8
- import React, { memo, useCallback, useEffect, useMemo } from 'react';
9
-
10
- import {
11
- createIntent,
12
- LayoutAction,
13
- Surface,
14
- useAppGraph,
15
- useCapability,
16
- useIntentDispatcher,
17
- useLayout,
18
- } from '@dxos/app-framework';
19
- import { isAction, isActionLike, ROOT_ID, type Node, type ReadableGraph } from '@dxos/app-graph';
20
- import { PLANK_COMPANION_TYPE } from '@dxos/plugin-deck/types';
21
- import { useConnections } from '@dxos/plugin-graph';
22
- import { useMediaQuery, useSidebars } from '@dxos/react-ui';
23
- import { isTreeData, type TreeItemDataProps, type TreeData } from '@dxos/react-ui-list';
24
- import { mx } from '@dxos/react-ui-theme';
25
- import { arrayMove, byPosition } from '@dxos/util';
26
-
27
- import { NAV_TREE_ITEM, NavTree } from './NavTree';
28
- import { NavTreeContext } from './NavTreeContext';
29
- import { type NavTreeContextValue } from './types';
30
- import { NavTreeCapabilities } from '../capabilities';
31
- import { NAVTREE_PLUGIN } from '../meta';
32
- import { type NavTreeItemGraphNode } from '../types';
33
- import { getChildren, getParent, getActions as naturalGetActions, resolveMigrationOperation } from '../util';
34
-
35
- // TODO(thure): Is NavTree truly authoritative in this regard?
36
- export const NODE_TYPE = 'dxos/app-graph/node';
37
-
38
- const renderItemEnd = ({ node, open }: { node: Node; open: boolean }) => (
39
- <Surface role='navtree-item-end' data={{ id: node.id, subject: node.data, open }} limit={1} />
40
- );
41
-
42
- const getChildrenFilter = (node: Node): node is Node =>
43
- untracked(() => !isActionLike(node) && node.type !== PLANK_COMPANION_TYPE);
44
-
45
- const filterItems = (node: Node, disposition?: string) => {
46
- if (!disposition && (node.properties.disposition === 'hidden' || node.properties.disposition === 'alternate-tree')) {
47
- return false;
48
- } else if (!disposition) {
49
- const action = isAction(node);
50
- return !action || node.properties.disposition === 'item';
51
- } else {
52
- return node.properties.disposition === disposition;
53
- }
54
- };
55
-
56
- const getItems = (graph: ReadableGraph, node?: Node, disposition?: string) => {
57
- return graph.getConnections(node?.id ?? ROOT_ID, 'outbound').filter((node) => filterItems(node, disposition));
58
- };
59
-
60
- const useItems = (node?: Node, options?: { disposition?: string; sort?: boolean }) => {
61
- const { graph } = useAppGraph();
62
- const connections = useConnections(graph, node?.id ?? ROOT_ID).filter((node) =>
63
- filterItems(node, options?.disposition),
64
- );
65
- return options?.sort ? connections.toSorted((a, b) => byPosition(a.properties, b.properties)) : connections;
66
- };
67
-
68
- export type NavTreeContainerProps = {
69
- popoverAnchorId?: string;
70
- topbar?: boolean;
71
- } & Pick<NavTreeContextValue, 'tab'>;
72
-
73
- export const NavTreeContainer = memo(({ tab, popoverAnchorId, topbar }: NavTreeContainerProps) => {
74
- const [isLg] = useMediaQuery('lg', { ssr: false });
75
- const { dispatchPromise: dispatch } = useIntentDispatcher();
76
- const { graph } = useAppGraph();
77
- const { isOpen, isCurrent, isAlternateTree, setItem } = useCapability(NavTreeCapabilities.State);
78
- const layout = useLayout();
79
- const { navigationSidebarState } = useSidebars(NAVTREE_PLUGIN);
80
-
81
- const getActions = useCallback((node: Node) => naturalGetActions(graph, node), [graph]);
82
-
83
- const getProps = useCallback(
84
- (node: Node, path: string[]): TreeItemDataProps => {
85
- const children = getChildren(graph, node, path).filter(getChildrenFilter);
86
- const parentOf =
87
- children.length > 0 ? children.map(({ id }) => id) : node.properties.role === 'branch' ? [] : undefined;
88
- return {
89
- id: node.id,
90
- label: node.properties.label ?? node.id,
91
- parentOf,
92
- icon: node.properties.icon,
93
- disabled: node.properties.disabled,
94
- className: mx(node.properties.modified && 'italic', node.properties.className),
95
- headingClassName: node.properties.headingClassName,
96
- testId: node.properties.testId,
97
- };
98
- },
99
- [graph],
100
- );
101
-
102
- const loadDescendents = useCallback(
103
- (node: Node) => {
104
- graph.expand(node.id, 'outbound');
105
- // Load one level deeper, which resolves some juddering observed on open/close.
106
- graph.getConnections(node.id, 'outbound').forEach((child) => {
107
- graph.expand(child.id, 'outbound');
108
- });
109
- },
110
- [graph],
111
- );
112
-
113
- const handleOpenChange = useCallback(
114
- ({ item: { id }, path, open }: { item: Node; path: string[]; open: boolean }) => {
115
- // TODO(thure): This might become a localstorage leak; openItemIds that no longer exist should be removed from this map.
116
- setItem(path, 'open', open);
117
- graph.expand(id, 'outbound');
118
- },
119
- [graph],
120
- );
121
-
122
- const handleTabChange = useCallback(
123
- async (node: NavTreeItemGraphNode) => {
124
- await dispatch(
125
- createIntent(LayoutAction.UpdateSidebar, {
126
- part: 'sidebar',
127
- options: {
128
- state:
129
- node.id === tab
130
- ? navigationSidebarState === 'expanded'
131
- ? isLg
132
- ? 'collapsed'
133
- : 'closed'
134
- : 'expanded'
135
- : 'expanded',
136
- },
137
- }),
138
- );
139
-
140
- await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: node.id }));
141
-
142
- // Open the first item if the workspace is empty.
143
- if (layout.active.length === 0) {
144
- const [item] = getItems(graph, node).filter((node) => !isActionLike(node));
145
- if (item && item.data) {
146
- await dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [item.id] }));
147
- }
148
- }
149
- },
150
- [dispatch, layout.active, tab, navigationSidebarState, isLg],
151
- );
152
-
153
- const canDrop = useCallback(({ source, target }: { source: TreeData; target: TreeData }) => {
154
- return target.item.properties.canDrop?.(source) ?? false;
155
- }, []);
156
-
157
- const handleSelect = useCallback(
158
- ({ item: node, path, option }: { item: Node; path: string[]; option: boolean }) => {
159
- if (!node.data) {
160
- return;
161
- }
162
-
163
- if (isAction(node)) {
164
- const [parent] = graph.getConnections(node.id, 'inbound');
165
- void (parent && node.data({ parent, caller: NAV_TREE_ITEM }));
166
- return;
167
- }
168
-
169
- const current = isCurrent(path, node);
170
- if (!current) {
171
- void dispatch(
172
- createIntent(LayoutAction.Open, {
173
- part: 'main',
174
- subject: [node.id],
175
- options: { key: node.properties.key },
176
- }),
177
- );
178
- } else if (option) {
179
- void dispatch(
180
- createIntent(LayoutAction.Close, { part: 'main', subject: [node.id], options: { state: false } }),
181
- );
182
- } else {
183
- void dispatch(createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: node.id }));
184
- }
185
-
186
- const defaultAction = graph.getActions(node.id).find((action) => action.properties?.disposition === 'default');
187
- if (isAction(defaultAction)) {
188
- void (defaultAction.data as () => void)();
189
- }
190
-
191
- if (!isLg) {
192
- void dispatch(createIntent(LayoutAction.UpdateSidebar, { part: 'sidebar', options: { state: 'closed' } }));
193
- }
194
- },
195
- [graph, dispatch, isCurrent, isLg],
196
- );
197
-
198
- const handleBack = useCallback(
199
- () => dispatch(createIntent(LayoutAction.RevertWorkspace, { part: 'workspace', options: { revert: true } })),
200
- [dispatch],
201
- );
202
-
203
- // TODO(wittjosiah): Factor out hook.
204
- useEffect(() => {
205
- return monitorForElements({
206
- canMonitor: ({ source }) => isTreeData(source.data),
207
- onDrop: ({ location, source }) => {
208
- // Didn't drop on anything.
209
- if (!location.current.dropTargets.length) {
210
- return;
211
- }
212
- const target = location.current.dropTargets[0];
213
- const instruction: Instruction | null = extractInstruction(target.data);
214
- if (instruction !== null && instruction.type !== 'instruction-blocked') {
215
- const sourceNode = source.data.item as NavTreeItemGraphNode;
216
- const targetNode = target.data.item as NavTreeItemGraphNode;
217
- const sourcePath = source.data.path as string[];
218
- const targetPath = target.data.path as string[];
219
- const operation =
220
- sourcePath.slice(0, -1).join() === targetPath.slice(0, -1).join() && instruction.type !== 'make-child'
221
- ? 'rearrange'
222
- : resolveMigrationOperation(graph, sourceNode, targetPath, targetNode);
223
- const sourceParent = getParent(graph, sourceNode, sourcePath);
224
- const targetParent = getParent(graph, targetNode, targetPath);
225
- const sourceItems = getItems(graph, sourceParent);
226
- const targetItems = getItems(graph, targetParent);
227
- const sourceIndex = sourceItems.findIndex(({ id }) => id === sourceNode.id);
228
- const targetIndex = targetItems.findIndex(({ id }) => id === targetNode.id);
229
- const migrationIndex =
230
- instruction.type === 'make-child'
231
- ? undefined
232
- : instruction.type === 'reorder-below'
233
- ? targetIndex + 1
234
- : targetIndex;
235
- switch (operation) {
236
- case 'rearrange': {
237
- const nextItems = sourceItems.map(({ data }) => data);
238
- arrayMove(nextItems, sourceIndex, targetIndex);
239
- void sourceParent?.properties.onRearrangeChildren?.(nextItems);
240
- break;
241
- }
242
- case 'copy': {
243
- const target = instruction.type === 'make-child' ? targetNode : targetParent;
244
- void target?.properties.onCopy?.(sourceNode, migrationIndex);
245
- break;
246
- }
247
- case 'transfer': {
248
- const target = instruction.type === 'make-child' ? targetNode : targetParent;
249
- if (!target?.properties.onTransferStart || !sourceParent?.properties.onTransferEnd) {
250
- break;
251
- }
252
- void target?.properties.onTransferStart(sourceNode, migrationIndex);
253
- void sourceParent?.properties.onTransferEnd?.(sourceNode, target);
254
- break;
255
- }
256
- }
257
- }
258
- },
259
- });
260
- }, [graph]);
261
-
262
- const setAlternateTree = useCallback(
263
- (path: string[], open: boolean) => {
264
- setItem(path, 'alternateTree', open);
265
- },
266
- [setItem],
267
- );
268
-
269
- const navTreeContextValue = useMemo(
270
- () => ({
271
- useItems,
272
- tab,
273
- getActions,
274
- loadDescendents,
275
- renderItemEnd,
276
- popoverAnchorId,
277
- topbar,
278
- getProps,
279
- isCurrent,
280
- isOpen,
281
- canDrop,
282
- isAlternateTree,
283
- setAlternateTree,
284
- onTabChange: handleTabChange,
285
- onOpenChange: handleOpenChange,
286
- onSelect: handleSelect,
287
- onBack: handleBack,
288
- }),
289
- [
290
- tab,
291
- getActions,
292
- loadDescendents,
293
- renderItemEnd,
294
- popoverAnchorId,
295
- topbar,
296
- getProps,
297
- isCurrent,
298
- isOpen,
299
- canDrop,
300
- isAlternateTree,
301
- setAlternateTree,
302
- handleTabChange,
303
- handleOpenChange,
304
- handleSelect,
305
- handleBack,
306
- ],
307
- );
308
-
309
- return (
310
- <NavTreeContext.Provider value={navTreeContextValue}>
311
- <NavTree id={ROOT_ID} root={graph.root} open={layout.sidebarOpen} />
312
- </NavTreeContext.Provider>
313
- );
314
- });
package/src/events.ts DELETED
@@ -1,11 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Events } from '@dxos/app-framework';
6
-
7
- import { NAVTREE_PLUGIN } from './meta';
8
-
9
- export namespace NavTreeEvents {
10
- export const StateReady = Events.createStateEvent(NAVTREE_PLUGIN);
11
- }
package/src/hooks.ts DELETED
@@ -1,21 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { useEffect } from 'react';
6
-
7
- import { type Node } from '@dxos/app-graph';
8
-
9
- import { useNavTreeContext } from './components';
10
-
11
- export const useLoadDescendents = (root?: Node) => {
12
- const { loadDescendents } = useNavTreeContext();
13
- useEffect(() => {
14
- const frame = requestAnimationFrame(() => {
15
- if (root) {
16
- void loadDescendents?.(root);
17
- }
18
- });
19
- return () => cancelAnimationFrame(frame);
20
- }, [root]);
21
- };