@dxos/plugin-simple-layout 0.8.4-main.d05673bc65 → 0.8.4-main.d9fc60f731

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 (293) hide show
  1. package/LICENSE +102 -5
  2. package/dist/lib/neutral/SimpleLayoutPlugin.mjs +52 -0
  3. package/dist/lib/neutral/SimpleLayoutPlugin.mjs.map +7 -0
  4. package/dist/lib/neutral/app-graph-builder-MSPO34DT.mjs +21 -0
  5. package/dist/lib/neutral/app-graph-builder-MSPO34DT.mjs.map +7 -0
  6. package/dist/lib/neutral/capabilities/index.mjs +21 -0
  7. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  8. package/dist/lib/neutral/chunk-7UDV3JDT.mjs +22 -0
  9. package/dist/lib/neutral/chunk-7UDV3JDT.mjs.map +7 -0
  10. package/dist/lib/neutral/chunk-FD2CAY4Q.mjs +26 -0
  11. package/dist/lib/neutral/chunk-FD2CAY4Q.mjs.map +7 -0
  12. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  13. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  14. package/dist/lib/neutral/chunk-OK5336TS.mjs +22 -0
  15. package/dist/lib/neutral/chunk-OK5336TS.mjs.map +7 -0
  16. package/dist/lib/neutral/chunk-QRTV5UNX.mjs +8 -0
  17. package/dist/lib/neutral/chunk-QRTV5UNX.mjs.map +7 -0
  18. package/dist/lib/neutral/close-WKMURGUB.mjs +35 -0
  19. package/dist/lib/neutral/close-WKMURGUB.mjs.map +7 -0
  20. package/dist/lib/neutral/components/index.mjs +929 -0
  21. package/dist/lib/neutral/components/index.mjs.map +7 -0
  22. package/dist/lib/neutral/hooks/index.mjs +332 -0
  23. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  24. package/dist/lib/neutral/index.mjs +14 -0
  25. package/dist/lib/neutral/index.mjs.map +7 -0
  26. package/dist/lib/neutral/meta.json +1 -0
  27. package/dist/lib/neutral/meta.mjs +8 -0
  28. package/dist/lib/neutral/meta.mjs.map +7 -0
  29. package/dist/lib/neutral/open-APISM3AA.mjs +63 -0
  30. package/dist/lib/neutral/open-APISM3AA.mjs.map +7 -0
  31. package/dist/lib/neutral/operation-handler-EAIE7KPR.mjs +13 -0
  32. package/dist/lib/neutral/operation-handler-EAIE7KPR.mjs.map +7 -0
  33. package/dist/lib/neutral/operations/index.mjs +8 -0
  34. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  35. package/dist/lib/neutral/plugin.mjs +16 -0
  36. package/dist/lib/neutral/plugin.mjs.map +7 -0
  37. package/dist/lib/{browser/react-root-WVQYY2JA.mjs → neutral/react-root-VE265VX4.mjs} +5 -8
  38. package/dist/lib/neutral/react-root-VE265VX4.mjs.map +7 -0
  39. package/dist/lib/{browser/react-surface-VLBR37ED.mjs → neutral/react-surface-N3PGKIYV.mjs} +16 -14
  40. package/dist/lib/neutral/react-surface-N3PGKIYV.mjs.map +7 -0
  41. package/dist/lib/neutral/revert-workspace-ST6NZUNG.mjs +22 -0
  42. package/dist/lib/neutral/revert-workspace-ST6NZUNG.mjs.map +7 -0
  43. package/dist/lib/neutral/set-6ZRLWPJS.mjs +22 -0
  44. package/dist/lib/neutral/set-6ZRLWPJS.mjs.map +7 -0
  45. package/dist/lib/neutral/set-layout-mode-L22HRCKS.mjs +13 -0
  46. package/dist/lib/neutral/set-layout-mode-L22HRCKS.mjs.map +7 -0
  47. package/dist/lib/{browser/spotlight-dismiss-67PHYS5B.mjs → neutral/spotlight-dismiss-EIYW5E7M.mjs} +7 -15
  48. package/dist/lib/{node-esm/spotlight-dismiss-RMLRZUVY.mjs.map → neutral/spotlight-dismiss-EIYW5E7M.mjs.map} +3 -3
  49. package/dist/lib/{browser/state-TXSMUWYI.mjs → neutral/state-7NXKBLPY.mjs} +5 -6
  50. package/dist/lib/neutral/state-7NXKBLPY.mjs.map +7 -0
  51. package/dist/lib/neutral/switch-workspace-PYWPTMFO.mjs +25 -0
  52. package/dist/lib/neutral/switch-workspace-PYWPTMFO.mjs.map +7 -0
  53. package/dist/lib/neutral/translations.mjs +36 -0
  54. package/dist/lib/neutral/translations.mjs.map +7 -0
  55. package/dist/lib/neutral/types/index.mjs +10 -0
  56. package/dist/lib/neutral/types/index.mjs.map +7 -0
  57. package/dist/lib/neutral/update-complementary-HKWF5OXT.mjs +33 -0
  58. package/dist/lib/neutral/update-complementary-HKWF5OXT.mjs.map +7 -0
  59. package/dist/lib/neutral/update-dialog-P4ASXCE7.mjs +30 -0
  60. package/dist/lib/neutral/update-dialog-P4ASXCE7.mjs.map +7 -0
  61. package/dist/lib/neutral/update-popover-REAKC2GN.mjs +34 -0
  62. package/dist/lib/neutral/update-popover-REAKC2GN.mjs.map +7 -0
  63. package/dist/lib/neutral/update-sidebar-O5SQPR6Q.mjs +12 -0
  64. package/dist/lib/neutral/update-sidebar-O5SQPR6Q.mjs.map +7 -0
  65. package/dist/lib/neutral/url-handler-GZXUUAHD.mjs +129 -0
  66. package/dist/lib/neutral/url-handler-GZXUUAHD.mjs.map +7 -0
  67. package/dist/types/src/SimpleLayoutPlugin.d.ts +2 -1
  68. package/dist/types/src/SimpleLayoutPlugin.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/app-graph-builder.d.ts +6 -0
  70. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/index.d.ts +21 -6
  72. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  74. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  76. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/{spotlight-dismiss/spotlight-dismiss.d.ts → spotlight-dismiss.d.ts} +1 -1
  78. package/dist/types/src/capabilities/spotlight-dismiss.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/{state/state.d.ts → state.d.ts} +3 -3
  80. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/{url-handler/url-handler.d.ts → url-handler.d.ts} +1 -1
  82. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -0
  83. package/dist/types/src/components/ContentError.stories.d.ts +26 -19
  84. package/dist/types/src/components/ContentError.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/DebugOverlay/DebugOverlay.d.ts +19 -0
  86. package/dist/types/src/components/DebugOverlay/DebugOverlay.d.ts.map +1 -0
  87. package/dist/types/src/components/DebugOverlay/index.d.ts +2 -0
  88. package/dist/types/src/components/DebugOverlay/index.d.ts.map +1 -0
  89. package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
  90. package/dist/types/src/components/Home/Home.d.ts.map +1 -1
  91. package/dist/types/src/components/Loading/Loading.d.ts +3 -0
  92. package/dist/types/src/components/Loading/Loading.d.ts.map +1 -0
  93. package/dist/types/src/components/{ContentLoading/ContentLoading.stories.d.ts → Loading/Loading.stories.d.ts} +1 -1
  94. package/dist/types/src/components/Loading/Loading.stories.d.ts.map +1 -0
  95. package/dist/types/src/components/Loading/index.d.ts +2 -0
  96. package/dist/types/src/components/Loading/index.d.ts.map +1 -0
  97. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts +2 -2
  98. package/dist/types/src/components/MobileLayout/MobileLayout.d.ts.map +1 -1
  99. package/dist/types/src/components/MobileLayout/MobileLayout.stories.d.ts.map +1 -1
  100. package/dist/types/src/components/NavBranch/NavBranch.d.ts.map +1 -1
  101. package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
  102. package/dist/types/src/components/SimpleLayout/AppBar.d.ts +5 -7
  103. package/dist/types/src/components/SimpleLayout/AppBar.d.ts.map +1 -1
  104. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts +29 -22
  105. package/dist/types/src/components/SimpleLayout/AppBar.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/SimpleLayout/Drawer.d.ts +4 -7
  107. package/dist/types/src/components/SimpleLayout/Drawer.d.ts.map +1 -1
  108. package/dist/types/src/components/SimpleLayout/Main.d.ts +4 -7
  109. package/dist/types/src/components/SimpleLayout/Main.d.ts.map +1 -1
  110. package/dist/types/src/components/SimpleLayout/NavBar.d.ts +5 -7
  111. package/dist/types/src/components/SimpleLayout/NavBar.d.ts.map +1 -1
  112. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts +29 -23
  113. package/dist/types/src/components/SimpleLayout/NavBar.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/SimpleLayout/SimpleLayout.d.ts.map +1 -1
  115. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts +26 -25
  116. package/dist/types/src/components/SimpleLayout/SimpleLayout.stories.d.ts.map +1 -1
  117. package/dist/types/src/components/hooks.d.ts.map +1 -1
  118. package/dist/types/src/components/index.d.ts +2 -1
  119. package/dist/types/src/components/index.d.ts.map +1 -1
  120. package/dist/types/src/hooks/actions.d.ts +3 -3
  121. package/dist/types/src/hooks/actions.d.ts.map +1 -1
  122. package/dist/types/src/hooks/useAppBarProps.d.ts +2 -2
  123. package/dist/types/src/hooks/useAppBarProps.d.ts.map +1 -1
  124. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  125. package/dist/types/src/hooks/useDrawerActions.d.ts.map +1 -1
  126. package/dist/types/src/hooks/useSimpleLayoutState.d.ts +3 -3
  127. package/dist/types/src/hooks/useSimpleLayoutState.d.ts.map +1 -1
  128. package/dist/types/src/index.d.ts +2 -1
  129. package/dist/types/src/index.d.ts.map +1 -1
  130. package/dist/types/src/meta.d.ts +1 -1
  131. package/dist/types/src/meta.d.ts.map +1 -1
  132. package/dist/types/src/operations/close.d.ts +5 -0
  133. package/dist/types/src/operations/close.d.ts.map +1 -0
  134. package/dist/types/src/operations/index.d.ts +3 -0
  135. package/dist/types/src/operations/index.d.ts.map +1 -0
  136. package/dist/types/src/operations/open.d.ts +5 -0
  137. package/dist/types/src/operations/open.d.ts.map +1 -0
  138. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  139. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  140. package/dist/types/src/operations/set-layout-mode.d.ts +5 -0
  141. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  142. package/dist/types/src/operations/set.d.ts +5 -0
  143. package/dist/types/src/operations/set.d.ts.map +1 -0
  144. package/dist/types/src/operations/state-access.d.ts +8 -0
  145. package/dist/types/src/operations/state-access.d.ts.map +1 -0
  146. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  147. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  148. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  149. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  150. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  151. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  152. package/dist/types/src/operations/update-popover.d.ts +5 -0
  153. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  154. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  155. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  156. package/dist/types/src/plugin.d.ts +4 -0
  157. package/dist/types/src/plugin.d.ts.map +1 -0
  158. package/dist/types/src/translations.d.ts +26 -20
  159. package/dist/types/src/translations.d.ts.map +1 -1
  160. package/dist/types/src/types/{capabilities.d.ts → SimpleLayoutCapabilities.d.ts} +12 -10
  161. package/dist/types/src/types/SimpleLayoutCapabilities.d.ts.map +1 -0
  162. package/dist/types/src/types/SimpleLayoutEvents.d.ts +4 -0
  163. package/dist/types/src/types/SimpleLayoutEvents.d.ts.map +1 -0
  164. package/dist/types/src/types/index.d.ts +2 -2
  165. package/dist/types/src/types/index.d.ts.map +1 -1
  166. package/dist/types/tsconfig.tsbuildinfo +1 -1
  167. package/package.json +87 -37
  168. package/src/SimpleLayoutPlugin.ts +19 -8
  169. package/src/capabilities/app-graph-builder.ts +21 -0
  170. package/src/capabilities/index.ts +13 -6
  171. package/src/capabilities/operation-handler.ts +14 -0
  172. package/src/capabilities/{react-root/react-root.tsx → react-root.tsx} +2 -2
  173. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +13 -6
  174. package/src/capabilities/{state/state.tsx → state.tsx} +5 -6
  175. package/src/capabilities/url-handler.ts +164 -0
  176. package/src/components/ContentError.stories.tsx +1 -1
  177. package/src/components/DebugOverlay/DebugOverlay.tsx +96 -0
  178. package/src/components/DebugOverlay/index.ts +5 -0
  179. package/src/components/Dialog/Dialog.tsx +14 -3
  180. package/src/components/Home/Home.tsx +31 -31
  181. package/src/components/{ContentLoading/ContentLoading.stories.tsx → Loading/Loading.stories.tsx} +4 -4
  182. package/src/components/{ContentLoading/ContentLoading.tsx → Loading/Loading.tsx} +2 -2
  183. package/src/components/{ContentLoading → Loading}/index.ts +1 -1
  184. package/src/components/MobileLayout/MobileLayout.stories.tsx +21 -17
  185. package/src/components/MobileLayout/MobileLayout.tsx +118 -51
  186. package/src/components/NavBranch/NavBranch.tsx +27 -33
  187. package/src/components/Popover/Popover.tsx +17 -21
  188. package/src/components/SimpleLayout/AppBar.stories.tsx +10 -10
  189. package/src/components/SimpleLayout/AppBar.tsx +63 -60
  190. package/src/components/SimpleLayout/Drawer.tsx +30 -22
  191. package/src/components/SimpleLayout/Main.tsx +19 -23
  192. package/src/components/SimpleLayout/NavBar.stories.tsx +2 -2
  193. package/src/components/SimpleLayout/NavBar.tsx +8 -9
  194. package/src/components/SimpleLayout/SimpleLayout.stories.tsx +46 -69
  195. package/src/components/SimpleLayout/SimpleLayout.tsx +33 -34
  196. package/src/components/hooks.ts +1 -1
  197. package/src/components/index.ts +2 -1
  198. package/src/hooks/actions.ts +9 -6
  199. package/src/hooks/useAppBarProps.ts +9 -29
  200. package/src/hooks/useDrawerActions.ts +7 -7
  201. package/src/hooks/useNavbarActions.ts +4 -4
  202. package/src/hooks/useSimpleLayoutState.ts +7 -5
  203. package/src/index.ts +2 -1
  204. package/src/meta.ts +7 -4
  205. package/src/operations/close.ts +34 -0
  206. package/src/operations/index.ts +16 -0
  207. package/src/operations/open.ts +82 -0
  208. package/src/operations/revert-workspace.ts +22 -0
  209. package/src/operations/set-layout-mode.ts +12 -0
  210. package/src/operations/set.ts +23 -0
  211. package/src/operations/state-access.ts +21 -0
  212. package/src/operations/switch-workspace.ts +26 -0
  213. package/src/operations/update-complementary.ts +35 -0
  214. package/src/operations/update-dialog.ts +28 -0
  215. package/src/operations/update-popover.ts +35 -0
  216. package/src/operations/update-sidebar.ts +12 -0
  217. package/src/plugin.ts +11 -0
  218. package/src/translations.ts +21 -19
  219. package/src/types/{capabilities.ts → SimpleLayoutCapabilities.ts} +6 -18
  220. package/src/types/SimpleLayoutEvents.ts +15 -0
  221. package/src/types/index.ts +2 -2
  222. package/dist/lib/browser/chunk-MDPEKLKR.mjs +0 -1163
  223. package/dist/lib/browser/chunk-MDPEKLKR.mjs.map +0 -7
  224. package/dist/lib/browser/chunk-MRR7PXSM.mjs +0 -29
  225. package/dist/lib/browser/chunk-MRR7PXSM.mjs.map +0 -7
  226. package/dist/lib/browser/index.mjs +0 -101
  227. package/dist/lib/browser/index.mjs.map +0 -7
  228. package/dist/lib/browser/meta.json +0 -1
  229. package/dist/lib/browser/operation-resolver-VTZ6HZ4B.mjs +0 -194
  230. package/dist/lib/browser/operation-resolver-VTZ6HZ4B.mjs.map +0 -7
  231. package/dist/lib/browser/react-root-WVQYY2JA.mjs.map +0 -7
  232. package/dist/lib/browser/react-surface-VLBR37ED.mjs.map +0 -7
  233. package/dist/lib/browser/spotlight-dismiss-67PHYS5B.mjs.map +0 -7
  234. package/dist/lib/browser/state-TXSMUWYI.mjs.map +0 -7
  235. package/dist/lib/browser/url-handler-RBRONH7S.mjs +0 -151
  236. package/dist/lib/browser/url-handler-RBRONH7S.mjs.map +0 -7
  237. package/dist/lib/node-esm/chunk-DCKASLMP.mjs +0 -1164
  238. package/dist/lib/node-esm/chunk-DCKASLMP.mjs.map +0 -7
  239. package/dist/lib/node-esm/chunk-WMNTJ2MK.mjs +0 -31
  240. package/dist/lib/node-esm/chunk-WMNTJ2MK.mjs.map +0 -7
  241. package/dist/lib/node-esm/index.mjs +0 -102
  242. package/dist/lib/node-esm/index.mjs.map +0 -7
  243. package/dist/lib/node-esm/meta.json +0 -1
  244. package/dist/lib/node-esm/operation-resolver-R7CQ6ERU.mjs +0 -195
  245. package/dist/lib/node-esm/operation-resolver-R7CQ6ERU.mjs.map +0 -7
  246. package/dist/lib/node-esm/react-root-XBNDM7BE.mjs +0 -22
  247. package/dist/lib/node-esm/react-root-XBNDM7BE.mjs.map +0 -7
  248. package/dist/lib/node-esm/react-surface-U5NHA367.mjs +0 -45
  249. package/dist/lib/node-esm/react-surface-U5NHA367.mjs.map +0 -7
  250. package/dist/lib/node-esm/spotlight-dismiss-RMLRZUVY.mjs +0 -68
  251. package/dist/lib/node-esm/state-JMX6FAG4.mjs +0 -49
  252. package/dist/lib/node-esm/state-JMX6FAG4.mjs.map +0 -7
  253. package/dist/lib/node-esm/url-handler-QSMCH3JB.mjs +0 -152
  254. package/dist/lib/node-esm/url-handler-QSMCH3JB.mjs.map +0 -7
  255. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  256. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  257. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  258. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  259. package/dist/types/src/capabilities/react-root/index.d.ts +0 -6
  260. package/dist/types/src/capabilities/react-root/index.d.ts.map +0 -1
  261. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +0 -1
  262. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  263. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  264. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  265. package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts +0 -3
  266. package/dist/types/src/capabilities/spotlight-dismiss/index.d.ts.map +0 -1
  267. package/dist/types/src/capabilities/spotlight-dismiss/spotlight-dismiss.d.ts.map +0 -1
  268. package/dist/types/src/capabilities/state/index.d.ts +0 -13
  269. package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
  270. package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
  271. package/dist/types/src/capabilities/url-handler/index.d.ts +0 -3
  272. package/dist/types/src/capabilities/url-handler/index.d.ts.map +0 -1
  273. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +0 -1
  274. package/dist/types/src/components/ContentLoading/ContentLoading.d.ts +0 -3
  275. package/dist/types/src/components/ContentLoading/ContentLoading.d.ts.map +0 -1
  276. package/dist/types/src/components/ContentLoading/ContentLoading.stories.d.ts.map +0 -1
  277. package/dist/types/src/components/ContentLoading/index.d.ts +0 -2
  278. package/dist/types/src/components/ContentLoading/index.d.ts.map +0 -1
  279. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  280. package/dist/types/src/types/events.d.ts +0 -6
  281. package/dist/types/src/types/events.d.ts.map +0 -1
  282. package/src/capabilities/operation-resolver/index.ts +0 -10
  283. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -202
  284. package/src/capabilities/react-root/index.ts +0 -7
  285. package/src/capabilities/react-surface/index.ts +0 -7
  286. package/src/capabilities/spotlight-dismiss/index.ts +0 -7
  287. package/src/capabilities/state/index.ts +0 -9
  288. package/src/capabilities/url-handler/index.ts +0 -7
  289. package/src/capabilities/url-handler/url-handler.ts +0 -133
  290. package/src/types/events.ts +0 -15
  291. /package/dist/types/src/capabilities/{react-root/react-root.d.ts → react-root.d.ts} +0 -0
  292. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
  293. /package/src/capabilities/{spotlight-dismiss/spotlight-dismiss.ts → spotlight-dismiss.ts} +0 -0
@@ -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/testing';
13
+ import { SearchPlugin } from '@dxos/plugin-search/testing';
14
+ import { SpacePlugin } from '@dxos/plugin-space/testing';
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
  };
@@ -4,9 +4,9 @@
4
4
 
5
5
  import { useEffect } from 'react';
6
6
 
7
- import { expandAttendableId } from '@dxos/react-ui-attention';
8
7
  import { useAppGraph } from '@dxos/app-toolkit/ui';
9
8
  import { Graph } from '@dxos/plugin-graph';
9
+ import { expandAttendableId } from '@dxos/react-ui-attention';
10
10
 
11
11
  /**
12
12
  * Expand graph nodes along the full path from root to the given node ID.
@@ -2,8 +2,9 @@
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';
@@ -5,12 +5,13 @@
5
5
  import { type Atom } from '@effect-atom/atom-react';
6
6
  import * as Effect from 'effect/Effect';
7
7
 
8
- import { type AppCapabilities, getCompanionVariant } from '@dxos/app-toolkit';
8
+ import { type AppCapabilities } from '@dxos/app-toolkit';
9
9
  import { Node } from '@dxos/plugin-graph';
10
+ import { getLinkedVariant } from '@dxos/react-ui-attention';
10
11
  import { type ActionGraphProps } from '@dxos/react-ui-menu';
11
12
  import { byPosition } from '@dxos/util';
12
13
 
13
- import { type SimpleLayoutState } from '../types';
14
+ import { SimpleLayoutCapabilities } from '#types';
14
15
 
15
16
  // TODO(wittjosiah): Factor out to shared location with plugin-deck.
16
17
  export const PLANK_COMPANION_TYPE = 'org.dxos.plugin.deck.plank-companion';
@@ -21,7 +22,9 @@ export type CompanionActionsConfig = {
21
22
  /** Optional: highlight companion with this variant */
22
23
  selectedVariant?: string;
23
24
  /** State updater for toggling the drawer. */
24
- updateState: (fn: (state: SimpleLayoutState) => SimpleLayoutState) => void;
25
+ updateState: (
26
+ fn: (state: SimpleLayoutCapabilities.SimpleLayoutState) => SimpleLayoutCapabilities.SimpleLayoutState,
27
+ ) => void;
25
28
  };
26
29
 
27
30
  /**
@@ -31,7 +34,7 @@ export type CompanionActionsConfig = {
31
34
  // TODO(burdon): Use builder pattern.
32
35
  export const createCompanionActions = (
33
36
  graph: AppCapabilities.AppGraph['graph'],
34
- stateAtom: Atom.Atom<SimpleLayoutState>,
37
+ stateAtom: Atom.Atom<SimpleLayoutCapabilities.SimpleLayoutState>,
35
38
  get: (atom: Atom.Atom<any>) => any,
36
39
  config: CompanionActionsConfig,
37
40
  ): Pick<ActionGraphProps, 'nodes' | 'edges'> => {
@@ -51,12 +54,12 @@ export const createCompanionActions = (
51
54
  const edges: ActionGraphProps['edges'] = [];
52
55
 
53
56
  companions.forEach((companion: Node.Node) => {
54
- const companionVariant = getCompanionVariant(companion.id);
57
+ const companionVariant = getLinkedVariant(companion.id);
55
58
  const companionAction = {
56
59
  id: `${idPrefix}-companion-${companion.id}`,
57
60
  type: Node.ActionType,
58
61
  properties: {
59
- icon: companion.properties.icon ?? 'ph--placeholder--regular',
62
+ icon: companion.properties.icon ?? 'ph--circle-dashed--regular',
60
63
  label: companion.properties.label,
61
64
  iconOnly: true,
62
65
  ...(selectedVariant !== undefined && {
@@ -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,15 +71,15 @@ 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
85
  const popoverAnchorId = node && state.popoverAnchorId === `${meta.id}:${node.id}` ? state.popoverAnchorId : undefined;
@@ -12,9 +12,9 @@ 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,7 +31,7 @@ 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
37
  const { updateState } = useSimpleLayoutState();
@@ -47,7 +47,7 @@ export const useDrawerActions = (consumerName: string): DrawerActions => {
47
47
  // Add companion tab actions.
48
48
  const { nodes, edges } = createCompanionActions(graph, stateAtom, get, {
49
49
  idPrefix: 'drawer',
50
- selectedVariant: state.companionVariant,
50
+ selectedVariant: state.drawerState !== 'closed' ? state.companionVariant : undefined,
51
51
  updateState,
52
52
  });
53
53
 
@@ -64,7 +64,7 @@ export const useDrawerActions = (consumerName: string): DrawerActions => {
64
64
  type: Node.ActionType,
65
65
  properties: {
66
66
  icon: isExpanded ? 'ph--arrow-down--regular' : 'ph--arrow-up--regular',
67
- label: isExpanded ? t('collapse drawer label') : t('expand drawer label'),
67
+ label: isExpanded ? t('collapse-drawer.label') : t('expand-drawer.label'),
68
68
  iconOnly: true,
69
69
  },
70
70
  data: () =>
@@ -80,7 +80,7 @@ export const useDrawerActions = (consumerName: string): DrawerActions => {
80
80
  type: Node.ActionType,
81
81
  properties: {
82
82
  icon: 'ph--x--regular',
83
- label: t('close drawer label'),
83
+ label: t('close-drawer.label'),
84
84
  iconOnly: true,
85
85
  },
86
86
  data: () =>
@@ -16,8 +16,8 @@ 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
23
  import { useSimpleLayoutState } from './useSimpleLayoutState';
@@ -39,7 +39,7 @@ export const useNavbarActions = (): NavbarActions => {
39
39
  const { t } = useTranslation(meta.id);
40
40
  const { graph } = useAppGraph();
41
41
  const runAction = useActionRunner();
42
- const stateAtom = useCapability(SimpleLayoutState);
42
+ const stateAtom = useCapability(SimpleLayoutCapabilities.State);
43
43
  const { updateState } = useSimpleLayoutState();
44
44
 
45
45
  // Create a computed atom that derives everything from graph connections and state.
@@ -62,7 +62,7 @@ export const useNavbarActions = (): NavbarActions => {
62
62
  variant: 'dropdownMenu',
63
63
  icon: 'ph--list--regular',
64
64
  iconOnly: true,
65
- label: t('main menu label'),
65
+ label: t('main-menu.label'),
66
66
  testId: 'simpleLayoutPlugin.addSpace',
67
67
  });
68
68
  nodes.push(mainMenuGroup);
@@ -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],
package/src/index.ts CHANGED
@@ -2,4 +2,5 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './SimpleLayoutPlugin';
5
+ export * from './meta';
6
+ export * from './types';
package/src/meta.ts CHANGED
@@ -2,15 +2,18 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Plugin } from '@dxos/app-framework';
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { DXN } from '@dxos/keys';
6
7
  import { trim } from '@dxos/util';
7
8
 
8
- export const meta: Plugin.Meta = {
9
- id: 'org.dxos.plugin.simple-layout',
9
+ export const meta = Plugin.makeMeta({
10
+ key: DXN.make('org.dxos.plugin.simpleLayout'),
10
11
  name: 'Simple Layout',
12
+ author: 'DXOS',
11
13
  description: trim`
12
14
  Minimal layout plugin for simplified UI contexts like popover windows.
13
15
  Provides basic content rendering without sidebars or complex navigation.
14
16
  `,
15
17
  icon: 'ph--layout--regular',
16
- };
18
+ tags: ['system'],
19
+ });
@@ -0,0 +1,34 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import * as Effect from 'effect/Effect';
4
+
5
+ import { LayoutOperation } from '@dxos/app-toolkit';
6
+ import { Operation } from '@dxos/compute';
7
+
8
+ import { layoutStateAccess } from './state-access';
9
+
10
+ const handler: Operation.WithHandler<typeof LayoutOperation.Close> = LayoutOperation.Close.pipe(
11
+ Operation.withHandler(
12
+ Effect.fnUntraced(function* () {
13
+ const { updateState } = yield* layoutStateAccess;
14
+
15
+ updateState((state) => {
16
+ if (state.history.length > 0) {
17
+ const newHistory = [...state.history];
18
+ const previousActive = newHistory.pop();
19
+ return {
20
+ ...state,
21
+ active: previousActive,
22
+ history: newHistory,
23
+ };
24
+ }
25
+ return {
26
+ ...state,
27
+ active: undefined,
28
+ };
29
+ });
30
+ }),
31
+ ),
32
+ );
33
+
34
+ export default handler;
@@ -0,0 +1,16 @@
1
+ // Copyright 2025 DXOS.org
2
+
3
+ import { OperationHandlerSet } from '@dxos/compute';
4
+
5
+ export const SimpleLayoutOperationHandlerSet = OperationHandlerSet.lazy(
6
+ () => import('./close'),
7
+ () => import('./open'),
8
+ () => import('./revert-workspace'),
9
+ () => import('./set'),
10
+ () => import('./set-layout-mode'),
11
+ () => import('./switch-workspace'),
12
+ () => import('./update-complementary'),
13
+ () => import('./update-dialog'),
14
+ () => import('./update-popover'),
15
+ () => import('./update-sidebar'),
16
+ );