@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
@@ -6,12 +6,12 @@ import { createContext } from '@radix-ui/react-context';
6
6
  import React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';
7
7
 
8
8
  import { Surface } from '@dxos/app-framework/ui';
9
- import { useObjectNavigate } from '@dxos/app-toolkit/ui';
9
+ import { AppSurface } from '@dxos/app-toolkit/ui';
10
10
  import { Popover, type PopoverContentInteractOutsideEvent, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
11
  import { Card } from '@dxos/react-ui';
12
12
 
13
- import { useSimpleLayoutState } from '../../hooks';
14
- import { meta } from '../../meta';
13
+ import { useSimpleLayoutState } from '#hooks';
14
+ import { meta } from '#meta';
15
15
 
16
16
  const DEBOUNCE_DELAY = 40;
17
17
 
@@ -54,16 +54,10 @@ export const PopoverRoot = ({ children }: PropsWithChildren) => {
54
54
  );
55
55
  };
56
56
 
57
- // Extracts the subject from popover content if it has one, otherwise returns the content as-is.
58
- const getPopoverSubject = (content: unknown): unknown =>
59
- content && typeof content === 'object' && 'subject' in content ? (content as { subject: unknown }).subject : content;
60
-
61
57
  export const PopoverContent = () => {
62
58
  const { t } = useTranslation(meta.id);
63
59
  const { state, updateState } = useSimpleLayoutState();
64
60
  const { setOpen } = useLayoutPopoverContext('PopoverContent');
65
- const handleNavigate = useObjectNavigate(getPopoverSubject(state.popoverContent));
66
-
67
61
  const handleClose = useCallback(() => {
68
62
  setOpen(false);
69
63
  updateState((s) => ({
@@ -90,6 +84,7 @@ export const PopoverContent = () => {
90
84
  [handleClose],
91
85
  );
92
86
 
87
+ /* TODO(thure): Make this a constant and document it. */
93
88
  const collisionBoundaries: HTMLElement[] = useMemo(() => {
94
89
  const closest = state.popoverAnchor?.closest('[data-popover-collision-boundary]') as HTMLElement | null | undefined;
95
90
  return closest ? [closest] : [];
@@ -102,24 +97,25 @@ export const PopoverContent = () => {
102
97
  sticky='always'
103
98
  hideWhenDetached
104
99
  collisionBoundary={collisionBoundaries}
100
+ onOpenAutoFocus={(event) => event.preventDefault()}
105
101
  onInteractOutside={handleInteractOutside}
106
102
  onEscapeKeyDown={handleInteractOutside}
107
103
  >
108
104
  <Popover.Viewport>
109
- {state.popoverKind === 'base' && <Surface.Surface role='popover' data={state.popoverContent} limit={1} />}
105
+ {state.popoverKind === 'base' && state.popoverContent && 'component' in state.popoverContent && (
106
+ <Surface.Surface type={AppSurface.Popover} data={state.popoverContent} limit={1} />
107
+ )}
110
108
  {state.popoverKind === 'card' && (
111
109
  <Card.Root border={false} classNames='dx-card-popover'>
112
- <Card.Toolbar>
113
- {/* TODO(wittjosiah): Cleaner way to handle no drag handle in toolbar? */}
114
- <span />
115
- {state.popoverTitle ? (
116
- <Card.Title onClick={handleNavigate}>{toLocalizedString(state.popoverTitle, t)}</Card.Title>
117
- ) : (
118
- <span />
119
- )}
120
- <Card.CloseIconButton onClick={handleClose} />
121
- </Card.Toolbar>
122
- <Surface.Surface role='card--content' data={state.popoverContent} limit={1} />
110
+ <Card.Header>
111
+ {/* Disabled drag handle keeps the toolbar slot layout consistent with regular cards. */}
112
+ <Card.DragHandle />
113
+ {state.popoverTitle ? <Card.Title>{toLocalizedString(state.popoverTitle, t)}</Card.Title> : <span />}
114
+ <Card.ActionIconButton action='close' onClick={handleClose} />
115
+ </Card.Header>
116
+ {state.popoverContent && 'subject' in state.popoverContent && (
117
+ <Surface.Surface type={AppSurface.Card} data={state.popoverContent} limit={1} />
118
+ )}
123
119
  </Card.Root>
124
120
  )}
125
121
  </Popover.Viewport>
@@ -7,13 +7,13 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
7
  import React, { useMemo } from 'react';
8
8
  import { type Mock, expect, fn, screen, userEvent, within } from 'storybook/test';
9
9
 
10
- import { withLayout, withTheme } from '@dxos/react-ui/testing';
11
10
  import { type ActionGraphProps, createMenuAction } from '@dxos/react-ui-menu';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
12
  import { withRegistry } from '@dxos/storybook-utils';
13
13
 
14
- import { translations } from '../../translations';
15
- import { MobileLayout } from '../MobileLayout';
14
+ import { translations } from '#translations';
16
15
 
16
+ import { MobileLayout } from '../MobileLayout';
17
17
  import { AppBar, type AppBarProps } from './AppBar';
18
18
 
19
19
  const buildEmptyActions = (): ActionGraphProps => ({ nodes: [], edges: [] });
@@ -21,15 +21,15 @@ const buildEmptyActions = (): ActionGraphProps => ({ nodes: [], edges: [] });
21
21
  const buildDefaultActions = (): ActionGraphProps => {
22
22
  const result: ActionGraphProps = { nodes: [], edges: [] };
23
23
  const actions = [
24
- createMenuAction('action-edit', () => console.log('Edit'), {
24
+ createMenuAction('action-edit.menu', () => console.log('Edit'), {
25
25
  icon: 'ph--pencil--regular',
26
26
  label: 'Edit',
27
27
  }),
28
- createMenuAction('action-share', () => console.log('Share'), {
28
+ createMenuAction('action-share.menu', () => console.log('Share'), {
29
29
  icon: 'ph--share--regular',
30
30
  label: 'Share',
31
31
  }),
32
- createMenuAction('action-delete', () => console.log('Delete'), {
32
+ createMenuAction('action-delete.menu', () => console.log('Delete'), {
33
33
  icon: 'ph--trash--regular',
34
34
  label: 'Delete',
35
35
  }),
@@ -39,11 +39,11 @@ const buildDefaultActions = (): ActionGraphProps => {
39
39
  return result;
40
40
  };
41
41
 
42
- type StoryProps = Omit<AppBarProps, 'actions'> & {
42
+ type DefaultStoryProps = Omit<AppBarProps, 'actions'> & {
43
43
  actions: ActionGraphProps;
44
44
  };
45
45
 
46
- const DefaultStory = ({ actions: actionsProp, ...props }: StoryProps) => {
46
+ const DefaultStory = ({ actions: actionsProp, ...props }: DefaultStoryProps) => {
47
47
  const actions = useMemo(() => Atom.make(actionsProp).pipe(Atom.keepAlive), [actionsProp]);
48
48
  return (
49
49
  <MobileLayout.Root>
@@ -71,7 +71,7 @@ const meta = {
71
71
 
72
72
  export default meta;
73
73
 
74
- type Story = StoryObj<StoryProps>;
74
+ type Story = StoryObj<DefaultStoryProps>;
75
75
 
76
76
  export const Default: Story = {
77
77
  tags: ['test'],
@@ -104,7 +104,7 @@ export const Default: Story = {
104
104
  const editAction = await screen.findByRole('menuitem', { name: /edit/i });
105
105
  await userEvent.click(editAction);
106
106
  await expect(args.onAction).toHaveBeenCalledTimes(1);
107
- await expect((args.onAction as Mock).mock.calls[0][0]).toHaveProperty('id', 'action-edit');
107
+ await expect((args.onAction as Mock).mock.calls[0][0]).toHaveProperty('id', 'action-edit.menu');
108
108
  },
109
109
  };
110
110
 
@@ -5,16 +5,18 @@
5
5
  import { type Atom, useAtomValue } from '@effect-atom/atom-react';
6
6
  import React, { Fragment } from 'react';
7
7
 
8
- import { IconButton, Popover, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';
8
+ import { DensityProvider, IconButton, Popover, Toolbar, useTranslation } from '@dxos/react-ui';
9
+ import { composable, composableProps } from '@dxos/react-ui';
9
10
  import { type ActionExecutor, type ActionGraphProps, Menu, useMenuActions } from '@dxos/react-ui-menu';
10
- import { mx, osTranslations } from '@dxos/ui-theme';
11
+ import { osTranslations } from '@dxos/ui-theme';
12
+
13
+ import { meta } from '#meta';
11
14
 
12
- import { meta } from '../../meta';
13
15
  import { useMobileLayout } from '../MobileLayout';
14
16
 
15
17
  const APP_BAR_NAME = 'SimpleLayout.AppBar';
16
18
 
17
- export type AppBarProps = ThemedClassName<{
19
+ export type AppBarProps = {
18
20
  /** Title/label to display in the banner. */
19
21
  title?: string;
20
22
  /** Action graph atom for the dropdown menu. */
@@ -27,68 +29,69 @@ export type AppBarProps = ThemedClassName<{
27
29
  onAction?: ActionExecutor;
28
30
  /** Callback when back button is clicked. */
29
31
  onBack?: () => void;
30
- }>;
32
+ };
31
33
 
32
34
  /**
33
35
  * AppBar component that renders a title, optional back button, and actions dropdown.
34
36
  */
35
- export const AppBar = ({
36
- classNames,
37
- title,
38
- actions,
39
- showBackButton,
40
- popoverAnchorId,
41
- onAction,
42
- onBack,
43
- }: AppBarProps) => {
44
- const { t } = useTranslation(meta.id);
45
- const menu = useMenuActions(actions);
46
- const actionsValue = useAtomValue(actions);
47
- const hasActions = actionsValue.nodes.length > 0;
48
- const { keyboardOpen } = useMobileLayout(APP_BAR_NAME);
37
+ export const AppBar = composable<HTMLDivElement, AppBarProps>(
38
+ ({ classNames, title, actions, showBackButton, popoverAnchorId, onAction, onBack, ...props }, forwardedRef) => {
39
+ const { t } = useTranslation(meta.id);
40
+ const menuActions = useMenuActions(actions);
41
+ const actionsValue = useAtomValue(actions);
42
+ const hasActions = actionsValue.nodes.length > 0;
43
+ const { keyboardOpen } = useMobileLayout(APP_BAR_NAME);
49
44
 
50
- // Fall back to app name if no title provided.
51
- const displayTitle = title ?? t('current app name', { ns: osTranslations });
45
+ // Fall back to app name if no title provided.
46
+ const displayTitle = title ?? t('current-app.name', { ns: osTranslations });
52
47
 
53
- // Wrap the menu trigger with Popover.Anchor when the popoverAnchorId is set.
54
- const AnchorRoot = popoverAnchorId ? Popover.Anchor : Fragment;
48
+ // Wrap the menu trigger with Popover.Anchor when the popoverAnchorId is set.
49
+ const AnchorRoot = popoverAnchorId ? Popover.Anchor : Fragment;
55
50
 
56
- return (
57
- <Toolbar.Root
58
- role='banner'
59
- classNames={mx(
60
- 'grid grid-cols-[var(--dx-rail-size)_1fr_var(--dx-rail-size)] items-center',
61
- 'dx-density-fine',
62
- classNames,
63
- )}
64
- >
65
- {keyboardOpen ? (
66
- <IconButton variant='ghost' icon='ph--x--regular' iconOnly label={t('done label')} />
67
- ) : showBackButton ? (
68
- <IconButton variant='ghost' icon='ph--caret-left--regular' iconOnly label={t('back label')} onClick={onBack} />
69
- ) : (
70
- <div />
71
- )}
72
- <h1 className='text-center truncate font-thin uppercase'>{displayTitle}</h1>
73
- {hasActions ? (
74
- <AnchorRoot>
75
- <Menu.Root {...menu} caller={meta.id} onAction={onAction}>
76
- <Menu.Trigger asChild>
77
- <IconButton
78
- variant='ghost'
79
- icon='ph--dots-three-vertical--regular'
80
- iconOnly
81
- label={t('actions menu label')}
82
- />
83
- </Menu.Trigger>
84
- <Menu.Content />
85
- </Menu.Root>
86
- </AnchorRoot>
87
- ) : (
88
- <span />
89
- )}
90
- </Toolbar.Root>
91
- );
92
- };
51
+ return (
52
+ <DensityProvider density='md'>
53
+ <Toolbar.Root
54
+ {...composableProps(props, {
55
+ role: 'banner',
56
+ classNames: 'grid grid-cols-[var(--dx-rail-size)_1fr_var(--dx-rail-size)] items-center dx-density-md',
57
+ })}
58
+ ref={forwardedRef}
59
+ >
60
+ {keyboardOpen ? (
61
+ <IconButton variant='ghost' icon='ph--x--regular' iconOnly label={t('done.label')} />
62
+ ) : showBackButton ? (
63
+ <IconButton
64
+ variant='ghost'
65
+ icon='ph--caret-left--regular'
66
+ iconOnly
67
+ label={t('back.label')}
68
+ onClick={onBack}
69
+ />
70
+ ) : (
71
+ <div />
72
+ )}
73
+ <h1 className='text-center truncate font-thin uppercase'>{displayTitle}</h1>
74
+ {hasActions ? (
75
+ <AnchorRoot>
76
+ <Menu.Root {...menuActions} caller={meta.id} onAction={onAction}>
77
+ <Menu.Trigger asChild>
78
+ <IconButton
79
+ variant='ghost'
80
+ icon='ph--dots-three-vertical--regular'
81
+ iconOnly
82
+ label={t('actions-menu.label')}
83
+ />
84
+ </Menu.Trigger>
85
+ <Menu.Content />
86
+ </Menu.Root>
87
+ </AnchorRoot>
88
+ ) : (
89
+ <span />
90
+ )}
91
+ </Toolbar.Root>
92
+ </DensityProvider>
93
+ );
94
+ },
95
+ );
93
96
 
94
97
  AppBar.displayName = APP_BAR_NAME;
@@ -5,14 +5,15 @@
5
5
  import React, { useMemo } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
- import { getCompanionVariant } from '@dxos/app-toolkit';
9
- import { useAppGraph } from '@dxos/app-toolkit/ui';
8
+ import { AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';
10
9
  import { type Node, useNode } from '@dxos/plugin-graph';
11
10
  import { ErrorFallback, Panel } from '@dxos/react-ui';
11
+ import { getLinkedVariant } from '@dxos/react-ui-attention';
12
12
  import { Menu, useMenuActions } from '@dxos/react-ui-menu';
13
13
 
14
- import { useCompanions, useDrawerActions, useSimpleLayoutState } from '../../hooks';
15
- import { ContentLoading } from '../ContentLoading';
14
+ import { useCompanions, useDrawerActions, useSimpleLayoutState } from '#hooks';
15
+
16
+ import { Loading } from '../Loading';
16
17
 
17
18
  const DRAWER_NAME = 'SimpleLayout.Drawer';
18
19
 
@@ -23,7 +24,7 @@ export const Drawer = () => {
23
24
  const { graph } = useAppGraph();
24
25
  const { state: layoutState } = useSimpleLayoutState();
25
26
 
26
- const placeholder = useMemo(() => <ContentLoading />, []);
27
+ const placeholder = useMemo(() => <Loading />, []);
27
28
 
28
29
  // Get all companions for the current active (primary) item.
29
30
  const activeId = layoutState.active ?? layoutState.workspace;
@@ -35,31 +36,38 @@ export const Drawer = () => {
35
36
  const parentNode = useNode(graph, activeId);
36
37
 
37
38
  // Build Surface data for the companion content.
38
- const data = useMemo(() => {
39
- return (
40
- node && {
41
- attendableId: companionId,
42
- subject: node.data,
43
- companionTo: parentNode?.data,
44
- properties: node.properties,
45
- variant,
46
- }
47
- );
39
+ const data = useMemo<AppSurface.ArticleData | undefined>(() => {
40
+ if (!node || !companionId) {
41
+ return undefined;
42
+ }
43
+ return {
44
+ attendableId: companionId,
45
+ subject: node.data,
46
+ companionTo: parentNode?.data,
47
+ properties: node.properties,
48
+ variant,
49
+ };
48
50
  }, [companionId, node, parentNode, variant]);
49
51
 
50
52
  // Get drawer actions (tabs + toolbar buttons).
51
53
  const { actions, onAction } = useDrawerActions(DRAWER_NAME);
52
- const menu = useMenuActions(actions);
54
+ const menuActions = useMenuActions(actions);
53
55
 
54
56
  return (
55
57
  <Panel.Root>
56
58
  <Panel.Toolbar>
57
- <Menu.Root {...menu} alwaysActive onAction={onAction}>
58
- <Menu.Toolbar density='coarse' />
59
+ <Menu.Root {...menuActions} alwaysActive onAction={onAction}>
60
+ <Menu.Toolbar />
59
61
  </Menu.Root>
60
62
  </Panel.Toolbar>
61
- <Panel.Content asChild>
62
- <Surface.Surface role='article' data={data} limit={1} fallback={ErrorFallback} placeholder={placeholder} />
63
+ <Panel.Content>
64
+ <Surface.Surface
65
+ type={AppSurface.Article}
66
+ data={data}
67
+ limit={1}
68
+ fallback={ErrorFallback}
69
+ placeholder={placeholder}
70
+ />
63
71
  </Panel.Content>
64
72
  </Panel.Root>
65
73
  );
@@ -79,7 +87,7 @@ const useSelectedCompanion = (companions: Node.Node[], preferredVariant?: string
79
87
 
80
88
  // Try to find companion matching the preferred variant.
81
89
  if (preferredVariant) {
82
- const preferred = companions.find((c) => getCompanionVariant(c.id) === preferredVariant);
90
+ const preferred = companions.find((c) => getLinkedVariant(c.id) === preferredVariant);
83
91
  if (preferred) {
84
92
  return preferred;
85
93
  }
@@ -90,7 +98,7 @@ const useSelectedCompanion = (companions: Node.Node[], preferredVariant?: string
90
98
  }, [companions, preferredVariant]);
91
99
 
92
100
  const companionId = selectedCompanion?.id;
93
- const variant = companionId ? getCompanionVariant(companionId) : undefined;
101
+ const variant = companionId ? getLinkedVariant(companionId) : undefined;
94
102
 
95
103
  return { selectedCompanion, companionId, variant };
96
104
  };
@@ -5,17 +5,16 @@
5
5
  import React, { useMemo } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
- import { useAppGraph } from '@dxos/app-toolkit/ui';
8
+ import { AppSurface, useAppGraph } from '@dxos/app-toolkit/ui';
9
9
  import { useNode } from '@dxos/plugin-graph';
10
- import { ErrorFallback } from '@dxos/react-ui';
10
+ import { ErrorFallback, Panel } from '@dxos/react-ui';
11
11
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
12
- import { mx } from '@dxos/ui-theme';
13
12
 
14
- import { useAppBarProps, useNavbarActions, useSimpleLayoutState } from '../../hooks';
15
- import { ContentLoading } from '../ContentLoading';
13
+ import { useAppBarProps, useNavbarActions, useSimpleLayoutState } from '#hooks';
14
+
16
15
  import { useExpandPath } from '../hooks';
16
+ import { Loading } from '../Loading';
17
17
  import { useMobileLayout } from '../MobileLayout';
18
-
19
18
  import { AppBar } from './AppBar';
20
19
  import { NavBar } from './NavBar';
21
20
 
@@ -32,7 +31,7 @@ export const Main = () => {
32
31
  const { actions, onAction } = useNavbarActions();
33
32
  const appBarProps = useAppBarProps();
34
33
 
35
- const placeholder = useMemo(() => <ContentLoading />, []);
34
+ const placeholder = useMemo(() => <Loading />, []);
36
35
 
37
36
  const { graph } = useAppGraph();
38
37
  const node = useNode(graph, id);
@@ -53,29 +52,26 @@ export const Main = () => {
53
52
  const showNavBar = !keyboardOpen && !state.isPopover && state.drawerState === 'closed';
54
53
 
55
54
  return (
56
- <div
57
- role='none'
58
- className={mx(
59
- 'h-full grid overflow-hidden bg-toolbar-surface',
60
- showNavBar
61
- ? 'grid-rows-[var(--dx-rail-action)_1fr_var(--dx-toolbar-size)]'
62
- : 'grid-rows-[var(--dx-rail-action)_1fr]',
63
- )}
64
- {...attentionAttrs}
65
- >
66
- <AppBar {...appBarProps} />
67
- <article className='h-full overflow-hidden bg-base-surface'>
55
+ <Panel.Root {...attentionAttrs} className='dx-document'>
56
+ <Panel.Toolbar asChild>
57
+ <AppBar {...appBarProps} />
58
+ </Panel.Toolbar>
59
+ <Panel.Content role='article' className='bg-base-surface'>
68
60
  <Surface.Surface
69
61
  key={id}
70
- role='article'
62
+ type={AppSurface.Article}
71
63
  data={data}
72
64
  limit={1}
73
65
  fallback={ErrorFallback}
74
66
  placeholder={placeholder}
75
67
  />
76
- </article>
77
- {showNavBar && <NavBar classNames='border-y border-subdued-separator' actions={actions} onAction={onAction} />}
78
- </div>
68
+ </Panel.Content>
69
+ {showNavBar && (
70
+ <Panel.Statusbar asChild>
71
+ <NavBar actions={actions} onAction={onAction} />
72
+ </Panel.Statusbar>
73
+ )}
74
+ </Panel.Root>
79
75
  );
80
76
  };
81
77
 
@@ -7,11 +7,11 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
7
  import React, { useMemo } from 'react';
8
8
  import { type Mock, expect, fn, screen, userEvent, within } from 'storybook/test';
9
9
 
10
- import { withLayout, withTheme } from '@dxos/react-ui/testing';
11
10
  import { type ActionGraphProps, createGapSeparator, createMenuAction, createMenuItemGroup } from '@dxos/react-ui-menu';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
12
  import { withRegistry } from '@dxos/storybook-utils';
13
13
 
14
- import { translations } from '../../translations';
14
+ import { translations } from '#translations';
15
15
 
16
16
  import { NavBar } from './NavBar';
17
17
 
@@ -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';
8
+ import { composable, composableProps } from '@dxos/react-ui';
9
9
  import { type ActionExecutor, type ActionGraphProps, Menu, useMenuActions } from '@dxos/react-ui-menu';
10
- import { mx } 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;