@dxos/plugin-simple-layout 0.8.4-main.c85a9c8dae → 0.8.4-main.dfabb4ec29

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 (299) hide show
  1. package/dist/lib/neutral/SimpleLayoutPlugin.mjs +52 -0
  2. package/dist/lib/neutral/SimpleLayoutPlugin.mjs.map +7 -0
  3. package/dist/lib/neutral/app-graph-builder-EYQKLRRP.mjs +21 -0
  4. package/dist/lib/neutral/app-graph-builder-EYQKLRRP.mjs.map +7 -0
  5. package/dist/lib/neutral/capabilities/index.mjs +21 -0
  6. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  7. package/dist/lib/neutral/chunk-7UDV3JDT.mjs +22 -0
  8. package/dist/lib/neutral/chunk-7UDV3JDT.mjs.map +7 -0
  9. package/dist/lib/neutral/chunk-AMTEDJHG.mjs +19 -0
  10. package/dist/lib/neutral/chunk-AMTEDJHG.mjs.map +7 -0
  11. package/dist/lib/neutral/chunk-FD2CAY4Q.mjs +26 -0
  12. package/dist/lib/neutral/chunk-FD2CAY4Q.mjs.map +7 -0
  13. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  14. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  15. package/dist/lib/neutral/chunk-XVUAQHKU.mjs +8 -0
  16. package/dist/lib/neutral/chunk-XVUAQHKU.mjs.map +7 -0
  17. package/dist/lib/neutral/close-WKMURGUB.mjs +35 -0
  18. package/dist/lib/neutral/close-WKMURGUB.mjs.map +7 -0
  19. package/dist/lib/neutral/components/index.mjs +924 -0
  20. package/dist/lib/neutral/components/index.mjs.map +7 -0
  21. package/dist/lib/neutral/hooks/index.mjs +332 -0
  22. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  23. package/dist/lib/neutral/index.mjs +14 -0
  24. package/dist/lib/neutral/index.mjs.map +7 -0
  25. package/dist/lib/neutral/meta.json +1 -0
  26. package/dist/lib/neutral/meta.mjs +8 -0
  27. package/dist/lib/neutral/meta.mjs.map +7 -0
  28. package/dist/lib/neutral/open-XI2T7D5O.mjs +49 -0
  29. package/dist/lib/neutral/open-XI2T7D5O.mjs.map +7 -0
  30. package/dist/lib/neutral/operation-handler-EAIE7KPR.mjs +13 -0
  31. package/dist/lib/neutral/operation-handler-EAIE7KPR.mjs.map +7 -0
  32. package/dist/lib/neutral/operations/index.mjs +8 -0
  33. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  34. package/dist/lib/neutral/plugin.mjs +16 -0
  35. package/dist/lib/neutral/plugin.mjs.map +7 -0
  36. package/dist/lib/{browser/react-root-MMB575WY.mjs → neutral/react-root-VE265VX4.mjs} +5 -8
  37. package/dist/lib/neutral/react-root-VE265VX4.mjs.map +7 -0
  38. package/dist/lib/{node-esm/react-surface-ITVNQYLG.mjs → neutral/react-surface-REZMYKQV.mjs} +20 -16
  39. package/dist/lib/neutral/react-surface-REZMYKQV.mjs.map +7 -0
  40. package/dist/lib/neutral/revert-workspace-ST6NZUNG.mjs +22 -0
  41. package/dist/lib/neutral/revert-workspace-ST6NZUNG.mjs.map +7 -0
  42. package/dist/lib/neutral/set-6ZRLWPJS.mjs +22 -0
  43. package/dist/lib/neutral/set-6ZRLWPJS.mjs.map +7 -0
  44. package/dist/lib/neutral/set-layout-mode-L22HRCKS.mjs +13 -0
  45. package/dist/lib/neutral/set-layout-mode-L22HRCKS.mjs.map +7 -0
  46. package/dist/lib/{browser/spotlight-dismiss-67PHYS5B.mjs → neutral/spotlight-dismiss-EIYW5E7M.mjs} +7 -15
  47. package/dist/lib/{node-esm/spotlight-dismiss-RMLRZUVY.mjs.map → neutral/spotlight-dismiss-EIYW5E7M.mjs.map} +3 -3
  48. package/dist/lib/{browser/state-A3PGDWWZ.mjs → neutral/state-7NXKBLPY.mjs} +5 -6
  49. package/dist/lib/neutral/state-7NXKBLPY.mjs.map +7 -0
  50. package/dist/lib/neutral/switch-workspace-PYWPTMFO.mjs +25 -0
  51. package/dist/lib/neutral/switch-workspace-PYWPTMFO.mjs.map +7 -0
  52. package/dist/lib/neutral/translations.mjs +36 -0
  53. package/dist/lib/neutral/translations.mjs.map +7 -0
  54. package/dist/lib/neutral/types/index.mjs +10 -0
  55. package/dist/lib/neutral/types/index.mjs.map +7 -0
  56. package/dist/lib/neutral/update-complementary-HKWF5OXT.mjs +33 -0
  57. package/dist/lib/neutral/update-complementary-HKWF5OXT.mjs.map +7 -0
  58. package/dist/lib/neutral/update-dialog-P4ASXCE7.mjs +30 -0
  59. package/dist/lib/neutral/update-dialog-P4ASXCE7.mjs.map +7 -0
  60. package/dist/lib/neutral/update-popover-REAKC2GN.mjs +34 -0
  61. package/dist/lib/neutral/update-popover-REAKC2GN.mjs.map +7 -0
  62. package/dist/lib/neutral/update-sidebar-O5SQPR6Q.mjs +12 -0
  63. package/dist/lib/neutral/update-sidebar-O5SQPR6Q.mjs.map +7 -0
  64. package/dist/lib/neutral/url-handler-GZXUUAHD.mjs +129 -0
  65. package/dist/lib/neutral/url-handler-GZXUUAHD.mjs.map +7 -0
  66. package/dist/types/src/SimpleLayoutPlugin.d.ts +2 -1
  67. package/dist/types/src/SimpleLayoutPlugin.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/app-graph-builder.d.ts +6 -0
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  70. package/dist/types/src/capabilities/index.d.ts +21 -6
  71. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  73. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  74. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/{spotlight-dismiss/spotlight-dismiss.d.ts → spotlight-dismiss.d.ts} +1 -1
  77. package/dist/types/src/capabilities/spotlight-dismiss.d.ts.map +1 -0
  78. package/dist/types/src/capabilities/{state/state.d.ts → state.d.ts} +3 -3
  79. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  80. package/dist/types/src/capabilities/{url-handler/url-handler.d.ts → url-handler.d.ts} +3 -3
  81. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -0
  82. package/dist/types/src/components/ContentError.stories.d.ts +26 -19
  83. package/dist/types/src/components/ContentError.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/DebugOverlay/DebugOverlay.d.ts +19 -0
  85. package/dist/types/src/components/DebugOverlay/DebugOverlay.d.ts.map +1 -0
  86. package/dist/types/src/components/DebugOverlay/index.d.ts +2 -0
  87. package/dist/types/src/components/DebugOverlay/index.d.ts.map +1 -0
  88. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  89. package/dist/types/src/components/Home/Home.d.ts.map +1 -1
  90. package/dist/types/src/components/Loading/Loading.d.ts +3 -0
  91. package/dist/types/src/components/Loading/Loading.d.ts.map +1 -0
  92. package/dist/types/src/components/{ContentLoading.stories.d.ts → Loading/Loading.stories.d.ts} +1 -1
  93. package/dist/types/src/components/Loading/Loading.stories.d.ts.map +1 -0
  94. package/dist/types/src/components/Loading/index.d.ts +2 -0
  95. package/dist/types/src/components/Loading/index.d.ts.map +1 -0
  96. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts +2 -2
  97. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts.map +1 -1
  98. package/dist/types/src/components/MobileLayout/MobileLayout.stories.d.ts.map +1 -1
  99. package/dist/types/src/components/NavBranch/NavBranch.d.ts +11 -0
  100. package/dist/types/src/components/NavBranch/NavBranch.d.ts.map +1 -0
  101. package/dist/types/src/components/NavBranch/index.d.ts +2 -0
  102. package/dist/types/src/components/NavBranch/index.d.ts.map +1 -0
  103. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  104. package/dist/types/src/components/SimpleLayout/AppBar.d.ts +5 -7
  105. package/dist/types/src/components/SimpleLayout/AppBar.d.ts.map +1 -1
  106. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts +29 -22
  107. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/SimpleLayout/Drawer.d.ts +4 -7
  109. package/dist/types/src/components/SimpleLayout/Drawer.d.ts.map +1 -1
  110. package/dist/types/src/components/SimpleLayout/Main.d.ts +4 -7
  111. package/dist/types/src/components/SimpleLayout/Main.d.ts.map +1 -1
  112. package/dist/types/src/components/SimpleLayout/NavBar.d.ts +5 -7
  113. package/dist/types/src/components/SimpleLayout/NavBar.d.ts.map +1 -1
  114. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts +29 -23
  115. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/SimpleLayout/SimpleLayout.d.ts.map +1 -1
  117. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts +26 -25
  118. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts.map +1 -1
  119. package/dist/types/src/components/hooks.d.ts +4 -2
  120. package/dist/types/src/components/hooks.d.ts.map +1 -1
  121. package/dist/types/src/components/index.d.ts +3 -2
  122. package/dist/types/src/components/index.d.ts.map +1 -1
  123. package/dist/types/src/hooks/actions.d.ts +5 -6
  124. package/dist/types/src/hooks/actions.d.ts.map +1 -1
  125. package/dist/types/src/hooks/useAppBarProps.d.ts +2 -2
  126. package/dist/types/src/hooks/useAppBarProps.d.ts.map +1 -1
  127. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  128. package/dist/types/src/hooks/useDrawerActions.d.ts.map +1 -1
  129. package/dist/types/src/hooks/useNavbarActions.d.ts.map +1 -1
  130. package/dist/types/src/hooks/useSimpleLayoutState.d.ts +3 -3
  131. package/dist/types/src/hooks/useSimpleLayoutState.d.ts.map +1 -1
  132. package/dist/types/src/index.d.ts +2 -1
  133. package/dist/types/src/index.d.ts.map +1 -1
  134. package/dist/types/src/meta.d.ts.map +1 -1
  135. package/dist/types/src/operations/close.d.ts +5 -0
  136. package/dist/types/src/operations/close.d.ts.map +1 -0
  137. package/dist/types/src/operations/index.d.ts +3 -0
  138. package/dist/types/src/operations/index.d.ts.map +1 -0
  139. package/dist/types/src/operations/open.d.ts +5 -0
  140. package/dist/types/src/operations/open.d.ts.map +1 -0
  141. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  142. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  143. package/dist/types/src/operations/set-layout-mode.d.ts +5 -0
  144. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  145. package/dist/types/src/operations/set.d.ts +5 -0
  146. package/dist/types/src/operations/set.d.ts.map +1 -0
  147. package/dist/types/src/operations/state-access.d.ts +8 -0
  148. package/dist/types/src/operations/state-access.d.ts.map +1 -0
  149. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  150. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  151. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  152. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  153. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  154. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  155. package/dist/types/src/operations/update-popover.d.ts +5 -0
  156. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  157. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  158. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  159. package/dist/types/src/plugin.d.ts +4 -0
  160. package/dist/types/src/plugin.d.ts.map +1 -0
  161. package/dist/types/src/translations.d.ts +26 -20
  162. package/dist/types/src/translations.d.ts.map +1 -1
  163. package/dist/types/src/types/{capabilities.d.ts → SimpleLayoutCapabilities.d.ts} +12 -10
  164. package/dist/types/src/types/SimpleLayoutCapabilities.d.ts.map +1 -0
  165. package/dist/types/src/types/SimpleLayoutEvents.d.ts +4 -0
  166. package/dist/types/src/types/SimpleLayoutEvents.d.ts.map +1 -0
  167. package/dist/types/src/types/index.d.ts +2 -2
  168. package/dist/types/src/types/index.d.ts.map +1 -1
  169. package/dist/types/tsconfig.tsbuildinfo +1 -1
  170. package/package.json +87 -33
  171. package/src/SimpleLayoutPlugin.ts +18 -7
  172. package/src/capabilities/app-graph-builder.ts +21 -0
  173. package/src/capabilities/index.ts +13 -6
  174. package/src/capabilities/operation-handler.ts +14 -0
  175. package/src/capabilities/{react-root/react-root.tsx → react-root.tsx} +2 -2
  176. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +17 -8
  177. package/src/capabilities/{state/state.tsx → state.tsx} +5 -6
  178. package/src/capabilities/url-handler.ts +164 -0
  179. package/src/components/ContentError.stories.tsx +1 -1
  180. package/src/components/DebugOverlay/DebugOverlay.tsx +96 -0
  181. package/src/components/DebugOverlay/index.ts +5 -0
  182. package/src/components/Dialog/Dialog.tsx +14 -3
  183. package/src/components/Home/Home.tsx +32 -32
  184. package/src/components/{ContentLoading.stories.tsx → Loading/Loading.stories.tsx} +4 -4
  185. package/src/components/{ContentLoading.tsx → Loading/Loading.tsx} +2 -2
  186. package/src/components/Loading/index.ts +5 -0
  187. package/src/components/MobileLayout/MobileLayout.stories.tsx +21 -17
  188. package/src/components/MobileLayout/MobileLayout.tsx +118 -51
  189. package/src/components/{Workspace/Workspace.tsx → NavBranch/NavBranch.tsx} +40 -41
  190. package/src/components/{Workspace → NavBranch}/index.ts +1 -1
  191. package/src/components/Popover/Popover.tsx +10 -16
  192. package/src/components/SimpleLayout/AppBar.stories.tsx +10 -10
  193. package/src/components/SimpleLayout/AppBar.tsx +60 -60
  194. package/src/components/SimpleLayout/Drawer.tsx +30 -31
  195. package/src/components/SimpleLayout/Main.tsx +21 -26
  196. package/src/components/SimpleLayout/NavBar.stories.tsx +2 -2
  197. package/src/components/SimpleLayout/NavBar.tsx +8 -9
  198. package/src/components/SimpleLayout/SimpleLayout.stories.tsx +46 -69
  199. package/src/components/SimpleLayout/SimpleLayout.tsx +33 -34
  200. package/src/components/hooks.ts +8 -8
  201. package/src/components/index.ts +3 -2
  202. package/src/hooks/actions.ts +18 -17
  203. package/src/hooks/useAppBarProps.ts +10 -31
  204. package/src/hooks/useDrawerActions.ts +14 -12
  205. package/src/hooks/useNavbarActions.ts +9 -8
  206. package/src/hooks/useSimpleLayoutState.ts +7 -5
  207. package/src/index.ts +2 -1
  208. package/src/meta.ts +2 -1
  209. package/src/operations/close.ts +34 -0
  210. package/src/operations/index.ts +16 -0
  211. package/src/operations/open.ts +63 -0
  212. package/src/operations/revert-workspace.ts +22 -0
  213. package/src/operations/set-layout-mode.ts +12 -0
  214. package/src/operations/set.ts +23 -0
  215. package/src/operations/state-access.ts +21 -0
  216. package/src/operations/switch-workspace.ts +26 -0
  217. package/src/operations/update-complementary.ts +35 -0
  218. package/src/operations/update-dialog.ts +28 -0
  219. package/src/operations/update-popover.ts +35 -0
  220. package/src/operations/update-sidebar.ts +12 -0
  221. package/src/plugin.ts +11 -0
  222. package/src/translations.ts +21 -19
  223. package/src/types/{capabilities.ts → SimpleLayoutCapabilities.ts} +6 -18
  224. package/src/types/SimpleLayoutEvents.ts +15 -0
  225. package/src/types/index.ts +2 -2
  226. package/dist/lib/browser/chunk-7VLT3S46.mjs +0 -29
  227. package/dist/lib/browser/chunk-7VLT3S46.mjs.map +0 -7
  228. package/dist/lib/browser/chunk-TMZNLVT2.mjs +0 -1170
  229. package/dist/lib/browser/chunk-TMZNLVT2.mjs.map +0 -7
  230. package/dist/lib/browser/index.mjs +0 -101
  231. package/dist/lib/browser/index.mjs.map +0 -7
  232. package/dist/lib/browser/meta.json +0 -1
  233. package/dist/lib/browser/operation-resolver-BYRIQOQT.mjs +0 -205
  234. package/dist/lib/browser/operation-resolver-BYRIQOQT.mjs.map +0 -7
  235. package/dist/lib/browser/react-root-MMB575WY.mjs.map +0 -7
  236. package/dist/lib/browser/react-surface-M6CURANW.mjs +0 -41
  237. package/dist/lib/browser/react-surface-M6CURANW.mjs.map +0 -7
  238. package/dist/lib/browser/spotlight-dismiss-67PHYS5B.mjs.map +0 -7
  239. package/dist/lib/browser/state-A3PGDWWZ.mjs.map +0 -7
  240. package/dist/lib/browser/url-handler-HTIUY6WL.mjs +0 -152
  241. package/dist/lib/browser/url-handler-HTIUY6WL.mjs.map +0 -7
  242. package/dist/lib/node-esm/chunk-FLOYBAHE.mjs +0 -1171
  243. package/dist/lib/node-esm/chunk-FLOYBAHE.mjs.map +0 -7
  244. package/dist/lib/node-esm/chunk-VIDE5UMB.mjs +0 -31
  245. package/dist/lib/node-esm/chunk-VIDE5UMB.mjs.map +0 -7
  246. package/dist/lib/node-esm/index.mjs +0 -102
  247. package/dist/lib/node-esm/index.mjs.map +0 -7
  248. package/dist/lib/node-esm/meta.json +0 -1
  249. package/dist/lib/node-esm/operation-resolver-BDTFNCS2.mjs +0 -206
  250. package/dist/lib/node-esm/operation-resolver-BDTFNCS2.mjs.map +0 -7
  251. package/dist/lib/node-esm/react-root-ENZKVSY4.mjs +0 -22
  252. package/dist/lib/node-esm/react-root-ENZKVSY4.mjs.map +0 -7
  253. package/dist/lib/node-esm/react-surface-ITVNQYLG.mjs.map +0 -7
  254. package/dist/lib/node-esm/spotlight-dismiss-RMLRZUVY.mjs +0 -68
  255. package/dist/lib/node-esm/state-ZCFZTTPL.mjs +0 -49
  256. package/dist/lib/node-esm/state-ZCFZTTPL.mjs.map +0 -7
  257. package/dist/lib/node-esm/url-handler-WBVVKVPC.mjs +0 -153
  258. package/dist/lib/node-esm/url-handler-WBVVKVPC.mjs.map +0 -7
  259. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  260. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  261. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  262. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  263. package/dist/types/src/capabilities/react-root/index.d.ts +0 -6
  264. package/dist/types/src/capabilities/react-root/index.d.ts.map +0 -1
  265. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +0 -1
  266. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  267. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  268. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  269. package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts +0 -3
  270. package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts.map +0 -1
  271. package/dist/types/src/capabilities/spotlight-dismiss/spotlight-dismiss.d.ts.map +0 -1
  272. package/dist/types/src/capabilities/state/index.d.ts +0 -13
  273. package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
  274. package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
  275. package/dist/types/src/capabilities/url-handler/index.d.ts +0 -3
  276. package/dist/types/src/capabilities/url-handler/index.d.ts.map +0 -1
  277. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +0 -1
  278. package/dist/types/src/components/ContentLoading.d.ts +0 -3
  279. package/dist/types/src/components/ContentLoading.d.ts.map +0 -1
  280. package/dist/types/src/components/ContentLoading.stories.d.ts.map +0 -1
  281. package/dist/types/src/components/Workspace/Workspace.d.ts +0 -11
  282. package/dist/types/src/components/Workspace/Workspace.d.ts.map +0 -1
  283. package/dist/types/src/components/Workspace/index.d.ts +0 -2
  284. package/dist/types/src/components/Workspace/index.d.ts.map +0 -1
  285. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  286. package/dist/types/src/types/events.d.ts +0 -6
  287. package/dist/types/src/types/events.d.ts.map +0 -1
  288. package/src/capabilities/operation-resolver/index.ts +0 -10
  289. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -217
  290. package/src/capabilities/react-root/index.ts +0 -7
  291. package/src/capabilities/react-surface/index.ts +0 -7
  292. package/src/capabilities/spotlight-dismiss/index.ts +0 -7
  293. package/src/capabilities/state/index.ts +0 -9
  294. package/src/capabilities/url-handler/index.ts +0 -7
  295. package/src/capabilities/url-handler/url-handler.ts +0 -157
  296. package/src/types/events.ts +0 -15
  297. /package/dist/types/src/capabilities/{react-root/react-root.d.ts → react-root.d.ts} +0 -0
  298. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
  299. /package/src/capabilities/{spotlight-dismiss/spotlight-dismiss.ts → spotlight-dismiss.ts} +0 -0
@@ -5,30 +5,29 @@
5
5
  import { type Atom } from '@effect-atom/atom-react';
6
6
  import React from 'react';
7
7
 
8
- import { type ThemedClassName } from '@dxos/react-ui';
9
8
  import { type ActionExecutor, type ActionGraphProps, Menu, useMenuActions } from '@dxos/react-ui-menu';
10
- import { mx } from '@dxos/ui-theme';
9
+ import { composable, composableProps } from '@dxos/ui-theme';
11
10
 
12
11
  const NAVBAR_NAME = 'SimpleLayout.NavBar';
13
12
 
14
- export type NavBarProps = ThemedClassName<{
13
+ export type NavBarProps = {
15
14
  /** Action graph atom for the toolbar. */
16
15
  actions: Atom.Atom<ActionGraphProps>;
17
16
  /** Action executor callback. */
18
17
  onAction?: ActionExecutor;
19
- }>;
18
+ };
20
19
 
21
20
  /**
22
21
  * Presentational navbar component that renders a toolbar from an action graph.
23
22
  */
24
- export const NavBar = ({ classNames, actions, onAction }: NavBarProps) => {
25
- const menu = useMenuActions(actions);
23
+ export const NavBar = composable<HTMLDivElement, NavBarProps>(({ actions, onAction, ...props }, forwardedRef) => {
24
+ const menuActions = useMenuActions(actions);
26
25
 
27
26
  return (
28
- <Menu.Root {...menu} alwaysActive onAction={onAction}>
29
- <Menu.Toolbar density='coarse' classNames={mx(classNames)} />
27
+ <Menu.Root {...menuActions} alwaysActive onAction={onAction}>
28
+ <Menu.Toolbar {...composableProps(props)} ref={forwardedRef} />
30
29
  </Menu.Root>
31
30
  );
32
- };
31
+ });
33
32
 
34
33
  NavBar.displayName = NAVBAR_NAME;
@@ -5,80 +5,69 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import * as Effect from 'effect/Effect';
7
7
 
8
- import { ActivationEvents, Capabilities, Capability, Plugin } from '@dxos/app-framework';
8
+ import { ActivationEvents, Capability, Plugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
- import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
10
+ import { AppActivationEvents } from '@dxos/app-toolkit';
11
11
  import { Collection } from '@dxos/echo';
12
- import { ClientOperation, ClientPlugin } from '@dxos/plugin-client';
13
- import { SearchPlugin } from '@dxos/plugin-search';
14
- import { SpacePlugin } from '@dxos/plugin-space';
15
- import { SpaceOperation } from '@dxos/plugin-space/types';
12
+ import { ClientPlugin } from '@dxos/plugin-client/plugin';
13
+ import { SearchPlugin } from '@dxos/plugin-search/plugin';
14
+ import { SpacePlugin } from '@dxos/plugin-space/plugin';
16
15
  import { corePlugins } from '@dxos/plugin-testing';
17
- import { withLayout, withTheme } from '@dxos/react-ui/testing';
18
- import { translations as searchTranslation } from '@dxos/react-ui-searchlist';
16
+ import { translations as searchTranslation } from '@dxos/react-ui-search/translations';
17
+ import { withLayout } from '@dxos/react-ui/testing';
19
18
 
20
- import { OperationResolver, type SimpleLayoutStateOptions, State } from '../../capabilities';
21
- import { meta as pluginMeta } from '../../meta';
22
- import { type SimpleLayoutPluginOptions } from '../../SimpleLayoutPlugin';
23
- import { translations } from '../../translations';
19
+ import { ReactRoot, ReactSurface, State } from '#capabilities';
20
+ import { meta as pluginMeta } from '#meta';
21
+ import { translations } from '#translations';
22
+ import { SimpleLayoutEvents } from '#types';
24
23
 
24
+ import { type SimpleLayoutPluginOptions } from '../../SimpleLayoutPlugin';
25
25
  import { SimpleLayout } from './SimpleLayout';
26
26
 
27
- const TestPlugin = Plugin.define<SimpleLayoutPluginOptions>(pluginMeta).pipe(
28
- AppPlugin.addOperationResolverModule({ activate: OperationResolver }),
29
- Plugin.addModule(({ isPopover = false }) => ({
30
- id: Capability.getModuleTag(State),
31
- activatesOn: ActivationEvents.Startup,
32
- activatesAfter: [AppActivationEvents.LayoutReady],
33
- activate: () => State({ initialState: { isPopover } } satisfies SimpleLayoutStateOptions),
34
- })),
35
- Plugin.addModule({
36
- id: 'setup',
37
- activatesOn: ActivationEvents.OperationInvokerReady,
38
- activate: Effect.fnUntraced(function* () {
39
- const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
40
- yield* invoke(ClientOperation.CreateIdentity, {});
41
- const { space: work } = yield* invoke(SpaceOperation.Create, { name: 'Work Space' });
42
- const { space: sharedProject } = yield* invoke(SpaceOperation.Create, { name: 'Shared Project' });
43
-
44
- // Add collections to Work Space.
45
- yield* invoke(SpaceOperation.AddObject, {
46
- target: work.db,
47
- object: Collection.make({ name: 'Projects', objects: [] }),
48
- });
49
- yield* invoke(SpaceOperation.AddObject, {
50
- target: work.db,
51
- object: Collection.make({ name: 'Documents', objects: [] }),
52
- });
53
-
54
- // Add collections to Shared Project.
55
- yield* invoke(SpaceOperation.AddObject, {
56
- target: sharedProject.db,
57
- object: Collection.make({ name: 'Tasks', objects: [] }),
58
- });
59
- yield* invoke(SpaceOperation.AddObject, {
60
- target: sharedProject.db,
61
- object: Collection.make({ name: 'Notes', objects: [] }),
62
- });
63
- }),
64
- }),
65
- Plugin.make,
66
- );
67
-
68
- const createPluginManager = ({ isPopover }: { isPopover: boolean }) => {
27
+ const createPluginManager = ({ isPopover }: { isPopover?: boolean }) => {
69
28
  return withPluginManager({
29
+ setupEvents: [AppActivationEvents.SetupSettings],
70
30
  plugins: [
71
31
  ...corePlugins(),
72
32
  ClientPlugin({
73
33
  types: [Collection.Collection],
34
+ onClientInitialized: ({ client }) =>
35
+ Effect.gen(function* () {
36
+ yield* Effect.promise(() => client.halo.createIdentity());
37
+ }),
74
38
  }),
39
+
75
40
  SearchPlugin(),
76
41
  SpacePlugin({}),
77
- TestPlugin({ isPopover }),
42
+
43
+ // TODO(burdon): This should be factored ouf from SimpleLayoutPlugin.
44
+ Plugin.define<SimpleLayoutPluginOptions>(pluginMeta).pipe(
45
+ Plugin.addModule(({ isPopover = false }) => ({
46
+ id: Capability.getModuleTag(State),
47
+ activatesOn: ActivationEvents.Startup,
48
+ firesAfterActivation: [SimpleLayoutEvents.StateReady, AppActivationEvents.LayoutReady],
49
+ activate: () => State({ initialState: { isPopover } }),
50
+ })),
51
+ Plugin.addModule({
52
+ id: Capability.getModuleTag(ReactRoot),
53
+ activatesOn: ActivationEvents.Startup,
54
+ activate: ReactRoot,
55
+ }),
56
+ Plugin.addModule({
57
+ id: Capability.getModuleTag(ReactSurface),
58
+ activatesOn: ActivationEvents.Startup,
59
+ activate: ReactSurface,
60
+ }),
61
+ Plugin.make,
62
+ )({ isPopover }),
78
63
  ],
79
64
  });
80
65
  };
81
66
 
67
+ /**
68
+ * NOTE: To expose to iphone on network:
69
+ * `moon run storybook-react:serve dev -H 0.0.0.0`
70
+ */
82
71
  const meta = {
83
72
  title: 'plugins/plugin-simple-layout/components/SimpleLayout',
84
73
  component: SimpleLayout,
@@ -92,22 +81,10 @@ export default meta;
92
81
 
93
82
  type Story = StoryObj<typeof meta>;
94
83
 
95
- /**
96
- * NOTE: To expose to iphone on network:
97
- * `moon run storybook-react:serve dev -H 0.0.0.0`
98
- */
99
84
  export const Default: Story = {
100
- decorators: [
101
- withTheme(),
102
- withLayout({ layout: 'column', classNames: 'relative' }),
103
- createPluginManager({ isPopover: false }),
104
- ],
85
+ decorators: [withLayout({ layout: 'column', classNames: 'relative' }), createPluginManager({})],
105
86
  };
106
87
 
107
88
  export const Popover: Story = {
108
- decorators: [
109
- withTheme(),
110
- withLayout({ layout: 'column', classNames: 'relative' }),
111
- createPluginManager({ isPopover: true }),
112
- ],
89
+ decorators: [withLayout({ layout: 'column', classNames: 'relative' }), createPluginManager({ isPopover: true })],
113
90
  };
@@ -2,58 +2,57 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import React, { useEffect, useRef, useState } from 'react';
5
+ import React, { useLayoutEffect, useRef, useState } from 'react';
6
6
 
7
7
  import { Splitter, type SplitterMode } from '@dxos/react-ui';
8
8
  import { Mosaic } from '@dxos/react-ui-mosaic';
9
9
 
10
- import { useSimpleLayoutState } from '../../hooks';
10
+ import { useSimpleLayoutState } from '#hooks';
11
+
12
+ import { DebugOverlay } from '../DebugOverlay';
11
13
  import { Dialog } from '../Dialog';
12
14
  import { MobileLayout } from '../MobileLayout';
13
15
  import { PopoverContent, PopoverRoot } from '../Popover';
14
-
15
16
  import { Drawer } from './Drawer';
16
17
  import { Main } from './Main';
17
18
 
18
- // TODO(burdon): Mobile/Desktop variance?
19
19
  export const SimpleLayout = () => {
20
20
  const { state } = useSimpleLayoutState();
21
21
  const [keyboardOpen, setKeyboardOpen] = useState(false);
22
- const [splitterMode, setSplitterMode] = useState<SplitterMode>('upper');
22
+ const [splitterMode, setSplitterMode] = useState<SplitterMode>('top');
23
23
 
24
24
  const drawerRef = useRef<HTMLDivElement>(null);
25
- useEffect(() => {
26
- if (keyboardOpen) {
27
- // Determine which panel has focus and expand that one.
28
- const activeElement = document.activeElement;
29
- const drawerHasFocus = drawerRef.current?.contains(activeElement);
30
- setSplitterMode(drawerHasFocus ? 'lower' : 'upper');
31
- } else {
32
- setSplitterMode(state.drawerState === 'closed' ? 'upper' : state.drawerState === 'open' ? 'both' : 'lower');
25
+
26
+ // Restore Splitter mode when keyboard closes.
27
+ useLayoutEffect(() => {
28
+ if (!keyboardOpen) {
29
+ setSplitterMode(state.drawerState === 'closed' ? 'top' : state.drawerState === 'open' ? 'split' : 'bottom');
33
30
  }
34
31
  }, [state.drawerState, keyboardOpen]);
35
32
 
36
33
  return (
37
- <Mosaic.Root classNames='contents'>
38
- <MobileLayout.Root
39
- classNames='bg-toolbar-surface'
40
- onKeyboardOpenChange={(keyboardOpen: boolean) => setKeyboardOpen(keyboardOpen)}
41
- >
42
- <MobileLayout.Panel safe={{ top: true, bottom: splitterMode === 'upper' }}>
43
- <PopoverRoot>
44
- <Splitter.Root mode={splitterMode} ratio={0.55}>
45
- <Splitter.Panel position='upper'>
46
- <Main />
47
- </Splitter.Panel>
48
- <Splitter.Panel position='lower' ref={drawerRef}>
49
- <Drawer />
50
- </Splitter.Panel>
51
- </Splitter.Root>
52
- <Dialog />
53
- <PopoverContent />
54
- </PopoverRoot>
55
- </MobileLayout.Panel>
56
- </MobileLayout.Root>
57
- </Mosaic.Root>
34
+ <DebugOverlay.Root enabled={false}>
35
+ <PopoverRoot>
36
+ <Mosaic.Root>
37
+ <MobileLayout.Root
38
+ classNames='dx-container grid relative bg-toolbar-surface'
39
+ onKeyboardOpenChange={(nextKeyboardOpen) => setKeyboardOpen(nextKeyboardOpen)}
40
+ >
41
+ <MobileLayout.Panel safe={{ top: true, bottom: splitterMode === 'top' }}>
42
+ <Splitter.Root mode={splitterMode} ratio={0.55}>
43
+ <Splitter.Panel position='top'>
44
+ <Main />
45
+ </Splitter.Panel>
46
+ <Splitter.Panel position='bottom' ref={drawerRef}>
47
+ <Drawer />
48
+ </Splitter.Panel>
49
+ </Splitter.Root>
50
+ <Dialog />
51
+ <PopoverContent />
52
+ </MobileLayout.Panel>
53
+ </MobileLayout.Root>
54
+ </Mosaic.Root>
55
+ </PopoverRoot>
56
+ </DebugOverlay.Root>
58
57
  );
59
58
  };
@@ -6,21 +6,21 @@ import { useEffect } from 'react';
6
6
 
7
7
  import { useAppGraph } from '@dxos/app-toolkit/ui';
8
8
  import { Graph } from '@dxos/plugin-graph';
9
+ import { expandAttendableId } from '@dxos/react-ui-attention';
9
10
 
10
11
  /**
11
- * Hook to expand graph nodes two levels deep when directly linked to.
12
+ * Expand graph nodes along the full path from root to the given node ID.
13
+ * Walks each progressive prefix, ensuring ancestor nodes are materialized
14
+ * before attempting to access their children.
12
15
  */
13
- export const useLoadDescendents = (nodeId?: string) => {
16
+ export const useExpandPath = (nodeId?: string) => {
14
17
  const { graph } = useAppGraph();
15
18
 
16
19
  useEffect(() => {
17
20
  if (nodeId) {
18
- // First level: expand the node itself.
19
- Graph.expand(graph, nodeId, 'child');
20
- // Second level: expand each child.
21
- Graph.getConnections(graph, nodeId, 'child').forEach((child) => {
22
- Graph.expand(graph, child.id, 'child');
23
- });
21
+ for (const prefix of expandAttendableId(nodeId)) {
22
+ Graph.expand(graph, prefix, 'child');
23
+ }
24
24
  }
25
25
  }, [nodeId, graph]);
26
26
  };
@@ -2,9 +2,10 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './ContentLoading';
5
+ export * from './DebugOverlay';
6
6
  export * from './Home';
7
+ export * from './Loading';
7
8
  export * from './MobileLayout';
8
9
  export * from './Popover';
9
10
  export * from './SimpleLayout';
10
- export * from './Workspace';
11
+ export * from './NavBranch';
@@ -5,25 +5,26 @@
5
5
  import { type Atom } from '@effect-atom/atom-react';
6
6
  import * as Effect from 'effect/Effect';
7
7
 
8
- import { type Capabilities } from '@dxos/app-framework';
9
- import { type AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
8
+ import { type AppCapabilities } from '@dxos/app-toolkit';
10
9
  import { Node } from '@dxos/plugin-graph';
11
- import { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';
10
+ import { getLinkedVariant } from '@dxos/react-ui-attention';
12
11
  import { type ActionGraphProps } from '@dxos/react-ui-menu';
13
12
  import { byPosition } from '@dxos/util';
14
13
 
15
- import { type SimpleLayoutState } from '../types';
14
+ import { SimpleLayoutCapabilities } from '#types';
16
15
 
17
16
  // TODO(wittjosiah): Factor out to shared location with plugin-deck.
18
- export const PLANK_COMPANION_TYPE = 'dxos.org/plugin/deck/plank-companion';
17
+ export const PLANK_COMPANION_TYPE = 'org.dxos.plugin.deck.plank-companion';
19
18
 
20
19
  export type CompanionActionsConfig = {
21
20
  /** Prefix for companion action IDs (e.g. 'navbar' or 'drawer') */
22
21
  idPrefix: string;
23
22
  /** Optional: highlight companion with this variant */
24
23
  selectedVariant?: string;
25
- /** invokeSync function for dispatching operations */
26
- invokeSync: Capabilities.OperationInvoker['invokeSync'];
24
+ /** State updater for toggling the drawer. */
25
+ updateState: (
26
+ fn: (state: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState,
27
+ ) => void;
27
28
  };
28
29
 
29
30
  /**
@@ -33,11 +34,11 @@ export type CompanionActionsConfig = {
33
34
  // TODO(burdon): Use builder pattern.
34
35
  export const createCompanionActions = (
35
36
  graph: AppCapabilities.AppGraph['graph'],
36
- stateAtom: Atom.Atom<SimpleLayoutState>,
37
+ stateAtom: Atom.Atom<SimpleLayoutCapabilities.SimpleLayoutState>,
37
38
  get: (atom: Atom.Atom<any>) => any,
38
39
  config: CompanionActionsConfig,
39
40
  ): Pick<ActionGraphProps, 'nodes' | 'edges'> => {
40
- const { idPrefix, selectedVariant, invokeSync } = config;
41
+ const { idPrefix, selectedVariant, updateState } = config;
41
42
 
42
43
  // Derive activeId from state atom.
43
44
  const state = get(stateAtom);
@@ -52,12 +53,8 @@ export const createCompanionActions = (
52
53
  const nodes: ActionGraphProps['nodes'] = [];
53
54
  const edges: ActionGraphProps['edges'] = [];
54
55
 
55
- // Add companion actions.
56
- // TODO(burdon): Cap at 6 items.
57
56
  companions.forEach((companion: Node.Node) => {
58
- // Extract variant for highlighting if needed.
59
- const [, companionVariant] = companion.id.split(ATTENDABLE_PATH_SEPARATOR);
60
-
57
+ const companionVariant = getLinkedVariant(companion.id);
61
58
  const companionAction = {
62
59
  id: `${idPrefix}-companion-${companion.id}`,
63
60
  type: Node.ActionType,
@@ -65,15 +62,19 @@ export const createCompanionActions = (
65
62
  icon: companion.properties.icon ?? 'ph--placeholder--regular',
66
63
  label: companion.properties.label,
67
64
  iconOnly: true,
68
- // Conditionally add variant highlighting.
69
65
  ...(selectedVariant !== undefined && {
70
66
  variant: selectedVariant === companionVariant ? 'primary' : 'ghost',
71
67
  }),
72
68
  },
73
69
  data: () =>
74
70
  Effect.sync(() =>
75
- invokeSync(LayoutOperation.Open, {
76
- subject: [companion.id],
71
+ updateState((current) => {
72
+ const closing = current.companionVariant === companionVariant && current.drawerState !== 'closed';
73
+ return {
74
+ ...current,
75
+ companionVariant: closing ? undefined : companionVariant,
76
+ drawerState: closing ? 'closed' : 'open',
77
+ };
77
78
  }),
78
79
  ),
79
80
  };
@@ -3,7 +3,6 @@
3
3
  //
4
4
 
5
5
  import { Atom, useAtomValue } from '@effect-atom/atom-react';
6
- import * as Effect from 'effect/Effect';
7
6
  import * as Option from 'effect/Option';
8
7
  import { useCallback, useMemo } from 'react';
9
8
 
@@ -14,9 +13,9 @@ import { Graph, Node, useActionRunner, useNode } from '@dxos/plugin-graph';
14
13
  import { toLocalizedString, useTranslation } from '@dxos/react-ui';
15
14
  import { type ActionGraphProps } from '@dxos/react-ui-menu';
16
15
 
17
- import { type AppBarProps } from '../components';
18
- import { meta } from '../meta';
19
- import { SimpleLayoutState as SimpleLayoutStateCapability } from '../types';
16
+ import { type AppBarProps } from '#components';
17
+ import { meta } from '#meta';
18
+ import { SimpleLayoutCapabilities } from '#types';
20
19
 
21
20
  /**
22
21
  * Hook that computes all AppBar props from the app graph.
@@ -24,10 +23,10 @@ import { SimpleLayoutState as SimpleLayoutStateCapability } from '../types';
24
23
  */
25
24
  export const useAppBarProps = (): Omit<AppBarProps, 'classNames'> => {
26
25
  const { t } = useTranslation(meta.id);
27
- const stateAtom = useCapability(SimpleLayoutStateCapability);
26
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
28
27
  const state = useAtomValue(stateAtom);
29
28
  const { graph } = useAppGraph();
30
- const { invokeSync } = useOperationInvoker();
29
+ const { invokePromise } = useOperationInvoker();
31
30
  const runAction = useActionRunner();
32
31
 
33
32
  // Derive activeId from state.
@@ -55,25 +54,6 @@ export const useAppBarProps = (): Omit<AppBarProps, 'classNames'> => {
55
54
  relation: 'child',
56
55
  }));
57
56
 
58
- // Add alternate-tree action (e.g. Settings) from the workspace node.
59
- const workspaceConnections = state.workspace ? get(graph.connections(state.workspace, 'child')) : [];
60
- const alternateTreeNode = workspaceConnections.find(
61
- (node: Node.Node) => node.properties.disposition === 'alternate-tree',
62
- );
63
- if (alternateTreeNode && activeId !== alternateTreeNode.id) {
64
- const settingsAction = {
65
- id: `appbar-settings-${alternateTreeNode.id}`,
66
- type: Node.ActionType,
67
- data: () => Effect.sync(() => invokeSync(LayoutOperation.Open, { subject: [alternateTreeNode.id] })),
68
- properties: {
69
- label: alternateTreeNode.properties.label ?? alternateTreeNode.id,
70
- icon: alternateTreeNode.properties.icon ?? 'ph--placeholder--regular',
71
- },
72
- };
73
- nodes.push(settingsAction);
74
- edges.push({ source: 'root', target: settingsAction.id, relation: 'child' });
75
- }
76
-
77
57
  return { nodes, edges };
78
58
  }),
79
59
  [graph, stateAtom],
@@ -91,19 +71,18 @@ export const useAppBarProps = (): Omit<AppBarProps, 'classNames'> => {
91
71
 
92
72
  // If history is empty and this is a workspace, go to home.
93
73
  if (state.history.length === 0 && isWorkspace) {
94
- invokeSync(LayoutOperation.SwitchWorkspace, { subject: Node.RootId });
74
+ void invokePromise(LayoutOperation.SwitchWorkspace, { subject: Node.RootId });
95
75
  } else {
96
76
  // Otherwise, close (which will pop from history or clear active).
97
- invokeSync(LayoutOperation.Close, { subject: [state.active] });
77
+ void invokePromise(LayoutOperation.Close, { subject: [state.active] });
98
78
  }
99
79
  } else {
100
- invokeSync(LayoutOperation.SwitchWorkspace, { subject: Node.RootId });
80
+ void invokePromise(LayoutOperation.SwitchWorkspace, { subject: Node.RootId });
101
81
  }
102
- }, [graph, invokeSync, state.active, state.history.length]);
82
+ }, [graph, invokePromise, state.active, state.history.length]);
103
83
 
104
84
  // Compute popover anchor ID.
105
- const popoverAnchorId =
106
- node && state.popoverAnchorId === `dxos.org/ui/${meta.id}/${node.id}` ? state.popoverAnchorId : undefined;
85
+ const popoverAnchorId = node && state.popoverAnchorId === `${meta.id}:${node.id}` ? state.popoverAnchorId : undefined;
107
86
 
108
87
  return {
109
88
  title,
@@ -6,15 +6,15 @@ import { Atom } from '@effect-atom/atom-react';
6
6
  import * as Effect from 'effect/Effect';
7
7
  import { useMemo } from 'react';
8
8
 
9
- import { useCapability, useOperationInvoker } from '@dxos/app-framework/ui';
9
+ import { useCapability } from '@dxos/app-framework/ui';
10
10
  import { useAppGraph } from '@dxos/app-toolkit/ui';
11
11
  import { Node, useActionRunner } from '@dxos/plugin-graph';
12
12
  import { useTranslation } from '@dxos/react-ui';
13
13
  import { type ActionExecutor, type ActionGraphProps, createGapSeparator } from '@dxos/react-ui-menu';
14
14
 
15
- import { useMobileLayout } from '../components';
16
- import { meta } from '../meta';
17
- import { SimpleLayoutState as SimpleLayoutStateCapability } from '../types';
15
+ import { useMobileLayout } from '#components';
16
+ import { meta } from '#meta';
17
+ import { SimpleLayoutCapabilities } from '#types';
18
18
 
19
19
  import { createCompanionActions } from './actions';
20
20
  import { useSimpleLayoutState } from './useSimpleLayoutState';
@@ -31,10 +31,9 @@ export type DrawerActions = {
31
31
  */
32
32
  export const useDrawerActions = (consumerName: string): DrawerActions => {
33
33
  const { t } = useTranslation(meta.id);
34
- const stateAtom = useCapability(SimpleLayoutStateCapability);
34
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
35
35
  const { graph } = useAppGraph();
36
36
  const runAction = useActionRunner();
37
- const { invokeSync } = useOperationInvoker();
38
37
  const { updateState } = useSimpleLayoutState();
39
38
  const { keyboardOpen } = useMobileLayout(consumerName);
40
39
 
@@ -48,8 +47,8 @@ export const useDrawerActions = (consumerName: string): DrawerActions => {
48
47
  // Add companion tab actions.
49
48
  const { nodes, edges } = createCompanionActions(graph, stateAtom, get, {
50
49
  idPrefix: 'drawer',
51
- selectedVariant: state.companionVariant,
52
- invokeSync,
50
+ selectedVariant: state.drawerState !== 'closed' ? state.companionVariant : undefined,
51
+ updateState,
53
52
  });
54
53
 
55
54
  // Add gap separator before toolbar buttons.
@@ -65,7 +64,7 @@ export const useDrawerActions = (consumerName: string): DrawerActions => {
65
64
  type: Node.ActionType,
66
65
  properties: {
67
66
  icon: isExpanded ? 'ph--arrow-down--regular' : 'ph--arrow-up--regular',
68
- label: isExpanded ? t('collapse drawer label') : t('expand drawer label'),
67
+ label: isExpanded ? t('collapse-drawer.label') : t('expand-drawer.label'),
69
68
  iconOnly: true,
70
69
  },
71
70
  data: () =>
@@ -81,17 +80,20 @@ export const useDrawerActions = (consumerName: string): DrawerActions => {
81
80
  type: Node.ActionType,
82
81
  properties: {
83
82
  icon: 'ph--x--regular',
84
- label: t('close drawer label'),
83
+ label: t('close-drawer.label'),
85
84
  iconOnly: true,
86
85
  },
87
- data: () => Effect.sync(() => updateState((state) => ({ ...state, drawerState: 'closed' }))),
86
+ data: () =>
87
+ Effect.sync(() =>
88
+ updateState((state) => ({ ...state, drawerState: 'closed', companionVariant: undefined })),
89
+ ),
88
90
  };
89
91
  nodes.push(closeAction);
90
92
  edges.push({ source: 'root', target: closeAction.id, relation: 'child' });
91
93
 
92
94
  return { nodes, edges };
93
95
  }),
94
- [graph, stateAtom, invokeSync, updateState, keyboardOpen, t],
96
+ [graph, stateAtom, updateState, keyboardOpen, t],
95
97
  );
96
98
 
97
99
  return { actions: actionsAtom, onAction: runAction };
@@ -5,7 +5,7 @@
5
5
  import { Atom } from '@effect-atom/atom-react';
6
6
  import { useMemo } from 'react';
7
7
 
8
- import { useCapability, useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { useCapability } from '@dxos/app-framework/ui';
9
9
  import { useAppGraph } from '@dxos/app-toolkit/ui';
10
10
  import { Node, useActionRunner } from '@dxos/plugin-graph';
11
11
  import { useTranslation } from '@dxos/react-ui';
@@ -16,10 +16,11 @@ import {
16
16
  createMenuItemGroup,
17
17
  } from '@dxos/react-ui-menu';
18
18
 
19
- import { meta } from '../meta';
20
- import { SimpleLayoutState } from '../types';
19
+ import { meta } from '#meta';
20
+ import { SimpleLayoutCapabilities } from '#types';
21
21
 
22
22
  import { createCompanionActions } from './actions';
23
+ import { useSimpleLayoutState } from './useSimpleLayoutState';
23
24
 
24
25
  const MAIN_MENU_GROUP_ID = 'navbar-main-menu';
25
26
 
@@ -38,8 +39,8 @@ export const useNavbarActions = (): NavbarActions => {
38
39
  const { t } = useTranslation(meta.id);
39
40
  const { graph } = useAppGraph();
40
41
  const runAction = useActionRunner();
41
- const { invokeSync } = useOperationInvoker();
42
- const stateAtom = useCapability(SimpleLayoutState);
42
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
43
+ const { updateState } = useSimpleLayoutState();
43
44
 
44
45
  // Create a computed atom that derives everything from graph connections and state.
45
46
  const actionsAtom = useMemo(
@@ -48,7 +49,7 @@ export const useNavbarActions = (): NavbarActions => {
48
49
  // Add companion actions.
49
50
  const { nodes, edges } = createCompanionActions(graph, stateAtom, get, {
50
51
  idPrefix: 'navbar',
51
- invokeSync,
52
+ updateState,
52
53
  });
53
54
 
54
55
  // Add gap separator.
@@ -61,7 +62,7 @@ export const useNavbarActions = (): NavbarActions => {
61
62
  variant: 'dropdownMenu',
62
63
  icon: 'ph--list--regular',
63
64
  iconOnly: true,
64
- label: t('main menu label'),
65
+ label: t('main-menu.label'),
65
66
  testId: 'simpleLayoutPlugin.addSpace',
66
67
  });
67
68
  nodes.push(mainMenuGroup);
@@ -79,7 +80,7 @@ export const useNavbarActions = (): NavbarActions => {
79
80
 
80
81
  return { nodes, edges };
81
82
  }),
82
- [graph, stateAtom, invokeSync, t],
83
+ [graph, stateAtom, updateState, t],
83
84
  );
84
85
 
85
86
  return { actions: actionsAtom, onAction: runAction };
@@ -7,20 +7,22 @@ import { useCallback, useContext } from 'react';
7
7
 
8
8
  import { useCapability } from '@dxos/app-framework/ui';
9
9
 
10
- import { SimpleLayoutState } from '../types';
10
+ import { SimpleLayoutCapabilities } from '#types';
11
11
 
12
12
  export type UseSimpleLayoutState = {
13
- state: SimpleLayoutState;
14
- updateState: (fn: (current: SimpleLayoutState) => SimpleLayoutState) => void;
13
+ state: SimpleLayoutCapabilities.SimpleLayoutState;
14
+ updateState: (
15
+ fn: (current: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState,
16
+ ) => void;
15
17
  };
16
18
 
17
19
  export const useSimpleLayoutState = (): UseSimpleLayoutState => {
18
20
  const registry = useContext(RegistryContext);
19
- const stateAtom = useCapability(SimpleLayoutState);
21
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
20
22
  const state = useAtomValue(stateAtom);
21
23
 
22
24
  const updateState = useCallback(
23
- (fn: (current: SimpleLayoutState) => SimpleLayoutState) => {
25
+ (fn: (current: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState) => {
24
26
  registry.set(stateAtom, fn(registry.get(stateAtom)));
25
27
  },
26
28
  [registry, stateAtom],