@dxos/plugin-deck 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

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 (331) hide show
  1. package/dist/lib/browser/Banner-DR6B7XTO.mjs +15 -0
  2. package/dist/lib/browser/Banner-DR6B7XTO.mjs.map +7 -0
  3. package/dist/lib/browser/DeckSettings-HB5TKG2F.mjs +96 -0
  4. package/dist/lib/browser/DeckSettings-HB5TKG2F.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-builder-22XAL7YE.mjs +123 -0
  6. package/dist/lib/browser/app-graph-builder-22XAL7YE.mjs.map +7 -0
  7. package/dist/lib/browser/check-app-scheme-ZV3QWNNZ.mjs +33 -0
  8. package/dist/lib/browser/check-app-scheme-ZV3QWNNZ.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-BJDEG7YZ.mjs +74 -0
  10. package/dist/lib/browser/chunk-BJDEG7YZ.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-FBL4WVYZ.mjs +16 -0
  12. package/dist/lib/browser/chunk-FBL4WVYZ.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-OAPMV5ZR.mjs +280 -0
  14. package/dist/lib/browser/chunk-OAPMV5ZR.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-Q4GUCIRE.mjs +200 -0
  16. package/dist/lib/browser/chunk-Q4GUCIRE.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-SKBPLX5T.mjs +81 -0
  18. package/dist/lib/browser/chunk-SKBPLX5T.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-YGOOWRJE.mjs +1390 -0
  20. package/dist/lib/browser/chunk-YGOOWRJE.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +85 -73
  22. package/dist/lib/browser/index.mjs.map +4 -4
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/operation-resolver-BLZGJWLO.mjs +580 -0
  25. package/dist/lib/browser/operation-resolver-BLZGJWLO.mjs.map +7 -0
  26. package/dist/lib/browser/react-root-4ESZAM6D.mjs +49 -0
  27. package/dist/lib/browser/react-root-4ESZAM6D.mjs.map +7 -0
  28. package/dist/lib/browser/react-surface-KYQGCALN.mjs +44 -0
  29. package/dist/lib/browser/react-surface-KYQGCALN.mjs.map +7 -0
  30. package/dist/lib/browser/settings-RY2TBSGP.mjs +40 -0
  31. package/dist/lib/browser/settings-RY2TBSGP.mjs.map +7 -0
  32. package/dist/lib/browser/state-CSTTMJ43.mjs +106 -0
  33. package/dist/lib/browser/state-CSTTMJ43.mjs.map +7 -0
  34. package/dist/lib/browser/toolkit-EONRPYA5.mjs +55 -0
  35. package/dist/lib/browser/toolkit-EONRPYA5.mjs.map +7 -0
  36. package/dist/lib/browser/types/index.mjs +14 -6
  37. package/dist/lib/browser/url-handler-EM3SYHHX.mjs +95 -0
  38. package/dist/lib/browser/url-handler-EM3SYHHX.mjs.map +7 -0
  39. package/dist/lib/node-esm/Banner-HR7DPUZU.mjs +16 -0
  40. package/dist/lib/node-esm/Banner-HR7DPUZU.mjs.map +7 -0
  41. package/dist/lib/node-esm/DeckSettings-MWTR7HU2.mjs +97 -0
  42. package/dist/lib/node-esm/DeckSettings-MWTR7HU2.mjs.map +7 -0
  43. package/dist/lib/node-esm/app-graph-builder-GNNNCWGN.mjs +124 -0
  44. package/dist/lib/node-esm/app-graph-builder-GNNNCWGN.mjs.map +7 -0
  45. package/dist/lib/node-esm/check-app-scheme-ZNISVRFH.mjs +34 -0
  46. package/dist/lib/node-esm/check-app-scheme-ZNISVRFH.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs +76 -0
  48. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-EGFOT3DE.mjs +18 -0
  50. package/dist/lib/node-esm/chunk-EGFOT3DE.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-IR6ODCNC.mjs +83 -0
  52. package/dist/lib/node-esm/chunk-IR6ODCNC.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-L2NPJPGL.mjs +281 -0
  54. package/dist/lib/node-esm/chunk-L2NPJPGL.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-O4IOJICP.mjs +201 -0
  56. package/dist/lib/node-esm/chunk-O4IOJICP.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-Z43MBISY.mjs +1391 -0
  58. package/dist/lib/node-esm/chunk-Z43MBISY.mjs.map +7 -0
  59. package/dist/lib/node-esm/index.mjs +186 -0
  60. package/dist/lib/node-esm/index.mjs.map +7 -0
  61. package/dist/lib/node-esm/meta.json +1 -0
  62. package/dist/lib/node-esm/operation-resolver-5BYDNQND.mjs +581 -0
  63. package/dist/lib/node-esm/operation-resolver-5BYDNQND.mjs.map +7 -0
  64. package/dist/lib/node-esm/react-root-YO7IIC75.mjs +50 -0
  65. package/dist/lib/node-esm/react-root-YO7IIC75.mjs.map +7 -0
  66. package/dist/lib/node-esm/react-surface-G7VRKT4U.mjs +45 -0
  67. package/dist/lib/node-esm/react-surface-G7VRKT4U.mjs.map +7 -0
  68. package/dist/lib/node-esm/settings-GYLWWOBK.mjs +41 -0
  69. package/dist/lib/node-esm/settings-GYLWWOBK.mjs.map +7 -0
  70. package/dist/lib/node-esm/state-RQXTBWUX.mjs +107 -0
  71. package/dist/lib/node-esm/state-RQXTBWUX.mjs.map +7 -0
  72. package/dist/lib/node-esm/toolkit-EU3Z2R4H.mjs +56 -0
  73. package/dist/lib/node-esm/toolkit-EU3Z2R4H.mjs.map +7 -0
  74. package/dist/lib/node-esm/types/index.mjs +41 -0
  75. package/dist/lib/node-esm/url-handler-VUK2LBJV.mjs +96 -0
  76. package/dist/lib/node-esm/url-handler-VUK2LBJV.mjs.map +7 -0
  77. package/dist/types/src/DeckPlugin.d.ts +2 -1
  78. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  80. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  82. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +5 -0
  84. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/check-app-scheme/index.d.ts +3 -0
  86. package/dist/types/src/capabilities/check-app-scheme/index.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/index.d.ts +8 -13
  88. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  90. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  92. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  94. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  96. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  98. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  100. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/settings/index.d.ts +19 -0
  102. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/settings/settings.d.ts +22 -0
  104. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/state/index.d.ts +172 -0
  106. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/state/state.d.ts +175 -0
  108. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/toolkit/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +27 -0
  112. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/tools/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/tools/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/tools/tools.d.ts +12 -0
  116. package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/url-handler/index.d.ts +3 -0
  118. package/dist/types/src/capabilities/url-handler/index.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/url-handler/url-handler.d.ts +5 -0
  120. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -0
  121. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
  122. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
  123. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +2 -3
  124. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  125. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +75 -0
  126. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  127. package/dist/types/src/components/DeckLayout/DeckMain.d.ts +3 -0
  128. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -0
  129. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
  130. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +1 -1
  131. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  132. package/dist/types/src/components/DeckLayout/Toast.d.ts +7 -2
  133. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  134. package/dist/types/src/components/Plank/Plank.d.ts +5 -5
  135. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  136. package/dist/types/src/components/Plank/Plank.stories.d.ts +27 -7
  137. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  138. package/dist/types/src/components/Plank/PlankControls.d.ts +1 -1
  139. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  140. package/dist/types/src/components/Plank/PlankError.d.ts +6 -4
  141. package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
  142. package/dist/types/src/components/Plank/PlankHeading.d.ts +2 -2
  143. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  144. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  145. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +1 -1
  146. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
  147. package/dist/types/src/components/fragments.d.ts +4 -1
  148. package/dist/types/src/components/fragments.d.ts.map +1 -1
  149. package/dist/types/src/components/index.d.ts +0 -1
  150. package/dist/types/src/components/index.d.ts.map +1 -1
  151. package/dist/types/src/containers/Banner/Banner.d.ts +2 -0
  152. package/dist/types/src/containers/Banner/Banner.d.ts.map +1 -0
  153. package/dist/types/src/containers/Banner/index.d.ts +3 -0
  154. package/dist/types/src/containers/Banner/index.d.ts.map +1 -0
  155. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts +8 -0
  156. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts.map +1 -0
  157. package/dist/types/src/containers/DeckSettings/index.d.ts +3 -0
  158. package/dist/types/src/containers/DeckSettings/index.d.ts.map +1 -0
  159. package/dist/types/src/containers/index.d.ts +4 -0
  160. package/dist/types/src/containers/index.d.ts.map +1 -0
  161. package/dist/types/src/hooks/index.d.ts +2 -0
  162. package/dist/types/src/hooks/index.d.ts.map +1 -1
  163. package/dist/types/src/hooks/useDeckCompanions.d.ts +3 -3
  164. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  165. package/dist/types/src/hooks/useDeckState.d.ts +17 -0
  166. package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
  167. package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
  168. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  169. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  170. package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
  171. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  172. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  173. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  174. package/dist/types/src/index.d.ts +1 -2
  175. package/dist/types/src/index.d.ts.map +1 -1
  176. package/dist/types/src/meta.d.ts +2 -2
  177. package/dist/types/src/meta.d.ts.map +1 -1
  178. package/dist/types/src/translations.d.ts +3 -1
  179. package/dist/types/src/translations.d.ts.map +1 -1
  180. package/dist/types/src/{capabilities → types}/capabilities.d.ts +96 -90
  181. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  182. package/dist/types/src/types/events.d.ts +7 -0
  183. package/dist/types/src/types/events.d.ts.map +1 -0
  184. package/dist/types/src/types/index.d.ts +2 -0
  185. package/dist/types/src/types/index.d.ts.map +1 -1
  186. package/dist/types/src/types/schema.d.ts +93 -31
  187. package/dist/types/src/types/schema.d.ts.map +1 -1
  188. package/dist/types/src/util/set-active.d.ts +18 -3
  189. package/dist/types/src/util/set-active.d.ts.map +1 -1
  190. package/dist/types/tsconfig.tsbuildinfo +1 -1
  191. package/package.json +56 -48
  192. package/src/DeckPlugin.ts +28 -48
  193. package/src/capabilities/app-graph-builder/app-graph-builder.ts +119 -0
  194. package/src/capabilities/app-graph-builder/index.ts +7 -0
  195. package/src/capabilities/check-app-scheme/check-app-scheme.ts +45 -0
  196. package/src/capabilities/check-app-scheme/index.ts +7 -0
  197. package/src/capabilities/index.ts +9 -14
  198. package/src/capabilities/operation-resolver/index.ts +10 -0
  199. package/src/capabilities/operation-resolver/operation-resolver.ts +560 -0
  200. package/src/capabilities/react-root/index.ts +7 -0
  201. package/src/capabilities/react-root/react-root.tsx +47 -0
  202. package/src/capabilities/react-surface/index.ts +7 -0
  203. package/src/capabilities/react-surface/react-surface.tsx +38 -0
  204. package/src/capabilities/settings/index.ts +7 -0
  205. package/src/capabilities/settings/settings.ts +39 -0
  206. package/src/capabilities/state/index.ts +7 -0
  207. package/src/capabilities/state/state.ts +105 -0
  208. package/src/capabilities/toolkit/index.ts +7 -0
  209. package/src/capabilities/toolkit/toolkit.ts +64 -0
  210. package/src/capabilities/tools/index.ts +7 -0
  211. package/src/capabilities/tools/tools.ts +91 -0
  212. package/src/capabilities/url-handler/index.ts +7 -0
  213. package/src/capabilities/url-handler/url-handler.ts +96 -0
  214. package/src/components/DeckLayout/ActiveNode.tsx +3 -2
  215. package/src/components/DeckLayout/Banner.tsx +9 -9
  216. package/src/components/DeckLayout/ContentEmpty.tsx +5 -6
  217. package/src/components/DeckLayout/DeckLayout.stories.tsx +53 -0
  218. package/src/components/DeckLayout/DeckLayout.tsx +17 -285
  219. package/src/components/DeckLayout/DeckMain.tsx +287 -0
  220. package/src/components/DeckLayout/Dialog.tsx +22 -13
  221. package/src/components/DeckLayout/Fallback.tsx +2 -6
  222. package/src/components/DeckLayout/Popover.tsx +70 -32
  223. package/src/components/DeckLayout/StatusBar.tsx +4 -4
  224. package/src/components/DeckLayout/Toast.tsx +28 -3
  225. package/src/components/Plank/Plank.stories.tsx +19 -9
  226. package/src/components/Plank/Plank.tsx +96 -59
  227. package/src/components/Plank/PlankControls.tsx +9 -11
  228. package/src/components/Plank/PlankError.tsx +31 -17
  229. package/src/components/Plank/PlankHeading.tsx +35 -42
  230. package/src/components/Plank/PlankLoading.tsx +1 -1
  231. package/src/components/Sidebar/ComplementarySidebar.tsx +71 -40
  232. package/src/components/Sidebar/Sidebar.tsx +7 -7
  233. package/src/components/Sidebar/SidebarButton.tsx +36 -29
  234. package/src/components/fragments.ts +10 -5
  235. package/src/components/index.ts +0 -1
  236. package/src/containers/Banner/Banner.tsx +5 -0
  237. package/src/containers/Banner/index.ts +7 -0
  238. package/src/containers/DeckSettings/DeckSettings.tsx +113 -0
  239. package/src/containers/DeckSettings/index.ts +7 -0
  240. package/src/containers/index.ts +8 -0
  241. package/src/hooks/index.ts +2 -0
  242. package/src/hooks/useCompanions.ts +2 -2
  243. package/src/hooks/useDeckCompanions.ts +6 -4
  244. package/src/hooks/useDeckState.ts +82 -0
  245. package/src/hooks/useHoistStatusbar.ts +4 -5
  246. package/src/hooks/useMainSize.ts +2 -2
  247. package/src/hooks/useNodeActionExpander.ts +4 -4
  248. package/src/hooks/useSelectedCompanion.ts +38 -0
  249. package/src/index.ts +1 -2
  250. package/src/meta.ts +7 -2
  251. package/src/translations.ts +3 -1
  252. package/src/types/capabilities.ts +33 -0
  253. package/src/types/events.ts +21 -0
  254. package/src/types/index.ts +2 -0
  255. package/src/types/schema.ts +93 -18
  256. package/src/util/layoutAppliesTopbar.ts +1 -1
  257. package/src/util/overscroll.ts +3 -3
  258. package/src/util/set-active.ts +49 -29
  259. package/dist/lib/browser/app-graph-builder-YYP67JHW.mjs +0 -153
  260. package/dist/lib/browser/app-graph-builder-YYP67JHW.mjs.map +0 -7
  261. package/dist/lib/browser/check-app-scheme-GCOL6YDT.mjs +0 -32
  262. package/dist/lib/browser/check-app-scheme-GCOL6YDT.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-3SV2V3AN.mjs +0 -1495
  264. package/dist/lib/browser/chunk-3SV2V3AN.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-A4SRCSJX.mjs +0 -160
  266. package/dist/lib/browser/chunk-A4SRCSJX.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-CNTGBCMK.mjs +0 -145
  268. package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-HUWUYTOI.mjs +0 -16
  270. package/dist/lib/browser/chunk-HUWUYTOI.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-JH4ZCG5I.mjs +0 -129
  272. package/dist/lib/browser/chunk-JH4ZCG5I.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-MHP4GPX5.mjs +0 -11
  274. package/dist/lib/browser/chunk-MHP4GPX5.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-YRDCQS7E.mjs +0 -127
  276. package/dist/lib/browser/chunk-YRDCQS7E.mjs.map +0 -7
  277. package/dist/lib/browser/intent-resolver-2NFDKRFG.mjs +0 -524
  278. package/dist/lib/browser/intent-resolver-2NFDKRFG.mjs.map +0 -7
  279. package/dist/lib/browser/react-root-JTWYCDJT.mjs +0 -43
  280. package/dist/lib/browser/react-root-JTWYCDJT.mjs.map +0 -7
  281. package/dist/lib/browser/react-surface-PZKJ73JS.mjs +0 -40
  282. package/dist/lib/browser/react-surface-PZKJ73JS.mjs.map +0 -7
  283. package/dist/lib/browser/settings-JK7UIZSB.mjs +0 -29
  284. package/dist/lib/browser/settings-JK7UIZSB.mjs.map +0 -7
  285. package/dist/lib/browser/state-IFKFOBBX.mjs +0 -12
  286. package/dist/lib/browser/toolkit-L7C3UAEU.mjs +0 -63
  287. package/dist/lib/browser/toolkit-L7C3UAEU.mjs.map +0 -7
  288. package/dist/lib/browser/url-handler-MRYBE3HF.mjs +0 -70
  289. package/dist/lib/browser/url-handler-MRYBE3HF.mjs.map +0 -7
  290. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  291. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  292. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  293. package/dist/types/src/capabilities/check-app-scheme.d.ts +0 -4
  294. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +0 -1
  295. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  296. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  297. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  298. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  299. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  300. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  301. package/dist/types/src/capabilities/settings.d.ts +0 -4
  302. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  303. package/dist/types/src/capabilities/state.d.ts +0 -101
  304. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  305. package/dist/types/src/capabilities/toolkit.d.ts +0 -6
  306. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  307. package/dist/types/src/capabilities/tools.d.ts +0 -11
  308. package/dist/types/src/capabilities/tools.d.ts.map +0 -1
  309. package/dist/types/src/capabilities/url-handler.d.ts +0 -4
  310. package/dist/types/src/capabilities/url-handler.d.ts.map +0 -1
  311. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +0 -6
  312. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +0 -1
  313. package/dist/types/src/components/DeckSettings/index.d.ts +0 -2
  314. package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
  315. package/dist/types/src/events.d.ts +0 -4
  316. package/dist/types/src/events.d.ts.map +0 -1
  317. package/src/capabilities/app-graph-builder.ts +0 -143
  318. package/src/capabilities/capabilities.ts +0 -14
  319. package/src/capabilities/check-app-scheme.ts +0 -40
  320. package/src/capabilities/intent-resolver.ts +0 -472
  321. package/src/capabilities/react-root.tsx +0 -39
  322. package/src/capabilities/react-surface.tsx +0 -30
  323. package/src/capabilities/settings.ts +0 -26
  324. package/src/capabilities/state.ts +0 -105
  325. package/src/capabilities/toolkit.ts +0 -57
  326. package/src/capabilities/tools.ts +0 -84
  327. package/src/capabilities/url-handler.ts +0 -60
  328. package/src/components/DeckSettings/DeckSettings.tsx +0 -97
  329. package/src/components/DeckSettings/index.ts +0 -5
  330. package/src/events.ts +0 -11
  331. /package/dist/lib/{browser/state-IFKFOBBX.mjs.map → node-esm/types/index.mjs.map} +0 -0
@@ -5,26 +5,14 @@
5
5
  import React, { useEffect, useState } from 'react';
6
6
 
7
7
  import { type Node } from '@dxos/plugin-graph';
8
- import { useTranslation } from '@dxos/react-ui';
9
- import { descriptionMessage, mx } from '@dxos/react-ui-theme';
8
+ import { ErrorFallback, type ErrorFallbackProps, useTranslation } from '@dxos/react-ui';
9
+ import { descriptionMessage, mx } from '@dxos/ui-theme';
10
10
 
11
11
  import { meta } from '../../meta';
12
12
 
13
13
  import { PlankHeading, type PlankHeadingProps } from './PlankHeading';
14
14
  import { PlankLoading } from './PlankLoading';
15
15
 
16
- export const PlankContentError = ({ error }: { error?: Error }) => {
17
- const { t } = useTranslation(meta.id);
18
- const errorString = error?.toString() ?? '';
19
- return (
20
- <div role='none' className='overflow-y-auto p-8 attention-surface grid place-items-center'>
21
- <p role='alert' className={mx(descriptionMessage, 'break-all rounded-md p-4')}>
22
- {error ? errorString : t('error fallback message')}
23
- </p>
24
- </div>
25
- );
26
- };
27
-
28
16
  export const PlankError = ({
29
17
  id,
30
18
  part,
@@ -33,17 +21,43 @@ export const PlankError = ({
33
21
  }: {
34
22
  id: string;
35
23
  part: PlankHeadingProps['part'];
36
- node?: Node;
24
+ node?: Node.Node;
37
25
  error?: Error;
38
26
  }) => {
39
27
  const [timedOut, setTimedOut] = useState(false);
40
28
  useEffect(() => {
41
- setTimeout(() => setTimedOut(true), 5e3);
29
+ const timer = setTimeout(() => setTimedOut(true), 5_000);
30
+ return () => clearTimeout(timer);
42
31
  }, []);
32
+
43
33
  return (
44
34
  <>
45
35
  <PlankHeading id={id} part={part} node={node} pending={!timedOut} />
46
- {timedOut ? <PlankContentError error={error} /> : <PlankLoading />}
36
+ {timedOut ? <PlankErrorFallback error={error} /> : <PlankLoading />}
47
37
  </>
48
38
  );
49
39
  };
40
+
41
+ /**
42
+ * User facing error fallback.
43
+ */
44
+ export const PlankErrorFallback = ({ error }: ErrorFallbackProps) => {
45
+ const { t } = useTranslation(meta.id);
46
+
47
+ if (process.env.NODE_ENV === 'development') {
48
+ return <ErrorFallback title='Plank Error' error={error} />;
49
+ } else {
50
+ const errorString = error?.toString() ?? '';
51
+ return (
52
+ <div
53
+ role='alert'
54
+ data-testid='plank-content-error'
55
+ className='dx-attention-surface overflow-y-auto p-8 grid place-items-center'
56
+ >
57
+ <p className={mx(descriptionMessage, 'break-all rounded-md p-4')}>
58
+ {error ? errorString : t('error fallback message')}
59
+ </p>
60
+ </div>
61
+ );
62
+ }
63
+ };
@@ -4,17 +4,19 @@
4
4
 
5
5
  import React, { Fragment, type MouseEvent, memo, useCallback, useEffect, useMemo } from 'react';
6
6
 
7
- import { LayoutAction, Surface, createIntent, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type Node } from '@dxos/plugin-graph';
7
+ import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
9
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
10
+ import { Graph, type Node, useActionRunner } from '@dxos/plugin-graph';
9
11
  import { Icon, IconButton, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';
10
12
  import { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';
11
13
  import { TextTooltip } from '@dxos/react-ui-text-tooltip';
12
- import { hoverableControls, hoverableFocusedWithinControls } from '@dxos/react-ui-theme';
14
+ import { hoverableControls, hoverableFocusedWithinControls } from '@dxos/ui-theme';
13
15
 
14
16
  import { useBreakpoints } from '../../hooks';
15
17
  import { parseEntryId } from '../../layout';
16
18
  import { meta } from '../../meta';
17
- import { DeckAction, type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';
19
+ import { DeckOperation, type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';
18
20
  import { soloInlinePadding } from '../fragments';
19
21
 
20
22
  import { PlankCompanionControls, PlankControls } from './PlankControls';
@@ -25,7 +27,7 @@ export type PlankHeadingProps = {
25
27
  id: string;
26
28
  part: ResolvedPart;
27
29
  layoutMode?: LayoutMode;
28
- node?: Node;
30
+ node?: Node.Node;
29
31
  deckEnabled?: boolean;
30
32
  canIncrementStart?: boolean;
31
33
  canIncrementEnd?: boolean;
@@ -33,7 +35,7 @@ export type PlankHeadingProps = {
33
35
  primaryId?: string;
34
36
  pending?: boolean;
35
37
  companioned?: 'primary' | 'companion';
36
- companions?: Node[];
38
+ companions?: Node.Node[];
37
39
  actions?: StackItemSigilAction[];
38
40
  };
39
41
 
@@ -54,7 +56,8 @@ export const PlankHeading = memo(
54
56
  actions = [],
55
57
  }: PlankHeadingProps) => {
56
58
  const { t } = useTranslation(meta.id);
57
- const { dispatchPromise: dispatch } = useIntentDispatcher();
59
+ const { invokePromise, invokeSync } = useOperationInvoker();
60
+ const runAction = useActionRunner();
58
61
  const { graph } = useAppGraph();
59
62
  const breakpoint = useBreakpoints();
60
63
  const icon = node?.properties?.icon ?? 'ph--placeholder--regular';
@@ -68,7 +71,7 @@ export const PlankHeading = memo(
68
71
  const frame = requestAnimationFrame(() => {
69
72
  // Load actions for the node.
70
73
  if (node) {
71
- void graph.expand(node.id);
74
+ void Graph.expand(graph, node.id, 'child');
72
75
  }
73
76
  });
74
77
 
@@ -97,42 +100,37 @@ export const PlankHeading = memo(
97
100
  } else {
98
101
  return [
99
102
  actions,
100
- graph
101
- .getActions(node.id)
102
- .filter((a) => ['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition)),
103
+ Graph.getActions(graph, node.id).filter((a) =>
104
+ ['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition),
105
+ ),
103
106
  ].filter((a) => a.length > 0);
104
107
  }
105
108
  }, [actions, node, variant, graph]);
106
109
 
107
110
  const handleAction = useCallback(
108
111
  (action: StackItemSigilAction) => {
109
- typeof action.data === 'function' && void action.data?.({ parent: node, caller: meta.id });
112
+ if (typeof action.data === 'function') {
113
+ void runAction(action as Node.Action, { parent: node, caller: meta.id });
114
+ }
110
115
  },
111
- [node],
116
+ [node, runAction],
112
117
  );
113
118
 
114
119
  const handlePlankAction = useCallback(
115
- (eventType: DeckAction.PartAdjustment) => {
120
+ (eventType: DeckOperation.PartAdjustment) => {
116
121
  if (eventType.startsWith('solo')) {
117
- return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));
122
+ return invokePromise(DeckOperation.Adjust, { type: eventType, id });
118
123
  } else if (eventType === 'close') {
119
124
  if (part === 'complementary') {
120
- return dispatch(
121
- createIntent(LayoutAction.UpdateComplementary, {
122
- part: 'complementary',
123
- options: { state: 'collapsed' },
124
- }),
125
- );
125
+ return invokeSync(LayoutOperation.UpdateComplementary, { state: 'collapsed' });
126
126
  } else {
127
- return dispatch(
128
- createIntent(LayoutAction.Close, { part: 'main', subject: [id], options: { state: false } }),
129
- );
127
+ return invokeSync(LayoutOperation.Close, { subject: [id] });
130
128
  }
131
129
  } else {
132
- return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));
130
+ return invokePromise(DeckOperation.Adjust, { type: eventType, id });
133
131
  }
134
132
  },
135
- [dispatch, id, part],
133
+ [invokePromise, invokeSync, id, part],
136
134
  );
137
135
 
138
136
  const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${meta.id}/${node.id}` ? Popover.Anchor : Fragment;
@@ -141,28 +139,24 @@ export const PlankHeading = memo(
141
139
  (event: MouseEvent) => {
142
140
  const target = (event.target as HTMLElement).closest('[data-id]') as HTMLElement | null;
143
141
  const tabId = target?.dataset?.id;
144
- if (primaryId && tabId) {
145
- void dispatch(
146
- createIntent(DeckAction.ChangeCompanion, {
147
- primary: primaryId,
148
- companion: tabId,
149
- }),
150
- );
142
+ if (tabId) {
143
+ void invokePromise(DeckOperation.ChangeCompanion, { companion: tabId });
151
144
  }
152
145
  },
153
- [primaryId],
146
+ [invokePromise],
154
147
  );
155
148
 
156
149
  return (
157
150
  <StackItem.Heading
158
151
  classNames={[
159
- 'plb-1 items-stretch gap-1 sticky inline-start-12 app-drag min-is-0 contain-layout density-coarse',
160
- part === 'solo' ? soloInlinePadding : 'pli-1',
152
+ 'py-1 items-stretch gap-1 sticky left-12 dx-app-drag min-w-0 dx-contain-layout dx-density-coarse',
153
+ part === 'solo' ? soloInlinePadding : 'px-1',
161
154
  ...(layoutMode === 'solo--fullscreen'
162
155
  ? [
163
156
  hoverableControls,
164
157
  hoverableFocusedWithinControls,
165
- '*:transition-opacity *:opacity-[--controls-opacity] bg-transparent border-transparent transition-[background-color,border-color] hover-hover:hover:bg-headerSurface focus-within:bg-headerSurface hover-hover:hover:border-subduedSeparator focus-within:border-subduedSeparator',
158
+ '*:transition-opacity *:opacity-(--controls-opacity) bg-transparent border-transparent transition-[background-color,border-color]',
159
+ 'hover-hover:hover:bg-header-surface focus-within:bg-header-surface hover-hover:hover:border-subdued-separator focus-within:border-subdued-separator',
166
160
  ]
167
161
  : []),
168
162
  ]}
@@ -170,7 +164,7 @@ export const PlankHeading = memo(
170
164
  >
171
165
  {companions && isCompanionNode ? (
172
166
  /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */
173
- <div role='none' className='flex-1 min-is-0 overflow-x-auto scrollbar-none flex gap-1'>
167
+ <div role='none' className='flex-1 min-w-0 overflow-x-auto scrollbar-none flex gap-1'>
174
168
  {companions.map(({ id, properties: { icon, label } }) => (
175
169
  <IconButton
176
170
  key={id}
@@ -178,7 +172,6 @@ export const PlankHeading = memo(
178
172
  icon={icon}
179
173
  iconOnly={companions.length > MAX_COMPANIONS && node?.id !== id}
180
174
  label={toLocalizedString(label, t)}
181
- size={5}
182
175
  variant={node?.id === id ? 'primary' : 'ghost'}
183
176
  onClick={handleTabClick}
184
177
  />
@@ -196,12 +189,12 @@ export const PlankHeading = memo(
196
189
  actions={sigilActions}
197
190
  onAction={handleAction}
198
191
  >
199
- <Surface role='menu-footer' data={{ subject: node.data }} />
192
+ <Surface.Surface role='menu-footer' data={{ subject: node.data }} />
200
193
  </StackItem.Sigil>
201
194
  ) : (
202
195
  <StackItem.SigilButton>
203
196
  <span className='sr-only'>{label}</span>
204
- <Icon icon={icon} size={5} />
197
+ <Icon icon={icon} />
205
198
  </StackItem.SigilButton>
206
199
  )}
207
200
  </ActionRoot>
@@ -216,7 +209,7 @@ export const PlankHeading = memo(
216
209
  </TextTooltip>
217
210
  </>
218
211
  )}
219
- {node && part !== 'complementary' && <Surface role='navbar-end' data={{ subject: node.data }} />}
212
+ {node && part !== 'complementary' && <Surface.Surface role='navbar-end' data={{ subject: node.data }} />}
220
213
  {companioned === 'companion' ? (
221
214
  <PlankCompanionControls primary={primaryId} />
222
215
  ) : (
@@ -6,5 +6,5 @@ import React from 'react';
6
6
 
7
7
  // TODO(burdon): Show skeleton: https://github.com/dxos/dxos/issues/8259
8
8
  export const PlankLoading = () => {
9
- return <div role='none' className='grid place-items-center attention-surface' />;
9
+ return <div role='none' className='grid place-items-center dx-attention-surface' />;
10
10
  };
@@ -12,16 +12,24 @@ import React, {
12
12
  useState,
13
13
  } from 'react';
14
14
 
15
- import { LayoutAction, Surface, createIntent, useCapability, useIntentDispatcher } from '@dxos/app-framework';
16
- import { IconButton, type Label, Main, toLocalizedString, useTranslation } from '@dxos/react-ui';
15
+ import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
16
+ import { LayoutOperation } from '@dxos/app-toolkit';
17
+ import { IconButton, type Label, Main, ScrollArea, toLocalizedString, useTranslation } from '@dxos/react-ui';
17
18
  import { Tabs } from '@dxos/react-ui-tabs';
18
-
19
- import { DeckCapabilities } from '../../capabilities';
20
- import { type DeckCompanion, getCompanionId, useBreakpoints, useDeckCompanions, useHoistStatusbar } from '../../hooks';
19
+ import { mx } from '@dxos/ui-theme';
20
+
21
+ import {
22
+ type DeckCompanion,
23
+ getCompanionId,
24
+ useBreakpoints,
25
+ useDeckCompanions,
26
+ useDeckState,
27
+ useHoistStatusbar,
28
+ } from '../../hooks';
21
29
  import { meta } from '../../meta';
22
30
  import { getMode } from '../../types';
23
31
  import { layoutAppliesTopbar } from '../../util';
24
- import { PlankContentError, PlankLoading } from '../Plank';
32
+ import { PlankErrorFallback, PlankLoading } from '../Plank';
25
33
 
26
34
  import { ToggleComplementarySidebarButton } from './SidebarButton';
27
35
 
@@ -33,9 +41,9 @@ export type ComplementarySidebarProps = {
33
41
 
34
42
  export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) => {
35
43
  const { t } = useTranslation(meta.id);
36
- const { dispatchPromise: dispatch } = useIntentDispatcher();
37
- const layout = useCapability(DeckCapabilities.MutableDeckState);
38
- const layoutMode = getMode(layout.deck);
44
+ const { invokeSync } = useOperationInvoker();
45
+ const { state, deck, updateState } = useDeckState();
46
+ const layoutMode = getMode(deck);
39
47
  const breakpoint = useBreakpoints();
40
48
  const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
41
49
  const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);
@@ -53,14 +61,17 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
53
61
  (event: MouseEvent) => {
54
62
  const nextValue = event.currentTarget.getAttribute('data-value') as string;
55
63
  if (nextValue === activeId) {
56
- layout.complementarySidebarState = layout.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';
64
+ updateState((state) => ({
65
+ ...state,
66
+ complementarySidebarState: state.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded',
67
+ }));
57
68
  } else {
58
69
  setInternalValue(nextValue);
59
- layout.complementarySidebarState = 'expanded';
60
- void dispatch(createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: nextValue }));
70
+ updateState((state) => ({ ...state, complementarySidebarState: 'expanded' }));
71
+ invokeSync(LayoutOperation.UpdateComplementary, { subject: nextValue });
61
72
  }
62
73
  },
63
- [layout, activeId, dispatch],
74
+ [state.complementarySidebarState, activeId, invokeSync, updateState],
64
75
  );
65
76
 
66
77
  const data = useMemo(
@@ -74,38 +85,39 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
74
85
 
75
86
  useEffect(() => {
76
87
  if (!activeId) {
77
- void dispatch(
78
- createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),
79
- );
88
+ invokeSync(LayoutOperation.UpdateComplementary, { state: 'collapsed' });
80
89
  }
81
- }, [activeId, dispatch]);
90
+ }, [activeId, invokeSync]);
82
91
 
83
92
  return (
84
93
  <Main.ComplementarySidebar
85
94
  label={label}
86
95
  classNames={[
87
- topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',
88
- hoistStatusbar && 'block-end-[--statusbar-size]',
96
+ topbar && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',
97
+ hoistStatusbar && 'bottom-(--dx-statusbar-size)',
89
98
  ]}
90
99
  >
91
100
  <Tabs.Root orientation='vertical' verticalVariant='stateless' value={internalValue} classNames='contents'>
92
101
  <div
93
102
  role='none'
94
- className='absolute z-[1] inset-block-0 inline-end-0 !is-[--r0-size] pbs-[env(safe-area-inset-top)] pbe-[env(safe-area-inset-bottom)] border-is border-subduedSeparator grid grid-cols-1 grid-rows-[1fr_min-content] bg-baseSurface contain-layout app-drag'
103
+ className={mx(
104
+ 'absolute z-[1] inset-y-0 end-0 !w-(--dx-r0-size)',
105
+ 'py-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] border-s border-subdued-separator',
106
+ 'grid grid-cols-1 grid-rows-[1fr_min-content] bg-toolbar-surface dx-contain-layout dx-app-drag',
107
+ )}
95
108
  >
96
- <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-[--rail-action] p-1 gap-1 !overflow-y-auto'>
109
+ <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-(--dx-rail-action) p-1 gap-1 overflow-y-auto!'>
97
110
  {companions.map((companion) => (
98
111
  <Tabs.Tab key={getCompanionId(companion.id)} value={getCompanionId(companion.id)} asChild>
99
112
  <IconButton
100
113
  label={toLocalizedString(companion.properties.label, t)}
101
114
  icon={companion.properties.icon}
102
- size={5}
103
115
  iconOnly
104
116
  tooltipSide='left'
105
117
  data-value={getCompanionId(companion.id)}
106
118
  variant={
107
119
  activeId === getCompanionId(companion.id)
108
- ? layout.complementarySidebarState === 'expanded'
120
+ ? state.complementarySidebarState === 'expanded'
109
121
  ? 'primary'
110
122
  : 'default'
111
123
  : 'ghost'
@@ -116,11 +128,11 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
116
128
  ))}
117
129
  </Tabs.Tablist>
118
130
  {!hoistStatusbar && (
119
- <div role='none' className='grid grid-cols-1 auto-rows-[--rail-item] p-1 overflow-y-auto'>
120
- <Surface role='status-bar--r0-footer' limit={1} />
131
+ <div role='none' className='grid grid-cols-1 auto-rows-(--dx-rail-item) p-1 overflow-y-auto'>
132
+ <Surface.Surface role='status-bar--r0-footer' limit={1} />
121
133
  </div>
122
134
  )}
123
- <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-[--rail-action] p-1'>
135
+ <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-(--dx-rail-action) p-1'>
124
136
  <ToggleComplementarySidebarButton />
125
137
  </div>
126
138
  </div>
@@ -129,8 +141,12 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
129
141
  <Tabs.Tabpanel
130
142
  key={getCompanionId(companion.id)}
131
143
  value={getCompanionId(companion.id)}
132
- classNames='absolute data-[state="inactive"]:-z-[1] inset-block-0 inline-start-0 is-[calc(100%-var(--r0-size))] lg:is-[--r1-size] grid grid-cols-1 grid-rows-[var(--rail-size)_1fr_min-content] pbs-[env(safe-area-inset-top)]'
133
- {...(layout.complementarySidebarState !== 'expanded' && { inert: true })}
144
+ classNames={[
145
+ 'absolute data-[state="inactive"]:-z-[1] overflow-hidden',
146
+ 'inset-y-0 start-0 w-[calc(100%-var(--dx-r0-size))] lg:w-(--dx-r1-size)',
147
+ 'grid grid-cols-1 grid-rows-[var(--dx-rail-size)_1fr_min-content] py-[env(safe-area-inset-top)]',
148
+ ]}
149
+ {...(state.complementarySidebarState !== 'expanded' && { inert: true })}
134
150
  >
135
151
  <ComplementarySidebarPanel
136
152
  companion={companion}
@@ -155,10 +171,6 @@ type ComplementarySidebarPanelProps = {
155
171
  hoistStatusbar: boolean;
156
172
  };
157
173
 
158
- const ScrollArea = ({ children }: PropsWithChildren) => {
159
- return <div className='flex flex-col grow overflow-x-hidden overflow-y-auto scrollbar-thin'>{children}</div>;
160
- };
161
-
162
174
  const ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }: ComplementarySidebarPanelProps) => {
163
175
  const { t } = useTranslation(meta.id);
164
176
 
@@ -166,29 +178,48 @@ const ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }
166
178
  return null;
167
179
  }
168
180
 
169
- const Wrapper = companion.properties.fixed ? Fragment : ScrollArea;
181
+ const Wrapper = companion.properties.fixed ? Fragment : ScrollAreaWrapper;
170
182
 
171
183
  return (
172
184
  <>
173
- <h2 className='flex items-center pli-2 border-subduedSeparator border-be font-medium'>
174
- {toLocalizedString(companion.properties.label, t)}
175
- </h2>
185
+ <div role='none' className='flex items-center p-1 gap-1 border-b border-subdued-separator'>
186
+ <IconButton
187
+ label={toLocalizedString(companion.properties.label, t)}
188
+ icon={companion.properties.icon}
189
+ iconOnly
190
+ tooltipSide='left'
191
+ data-value={getCompanionId(companion.id)}
192
+ classNames='h-10 w-10'
193
+ variant='default'
194
+ />
195
+ <div role='none' className='px-1'>
196
+ {toLocalizedString(companion.properties.label, t)}
197
+ </div>
198
+ </div>
176
199
  <Wrapper>
177
- <Surface
200
+ <Surface.Surface
178
201
  role={`deck-companion--${getCompanionId(companion.id)}`}
179
202
  data={data}
180
- fallback={PlankContentError}
203
+ fallback={PlankErrorFallback}
181
204
  placeholder={<PlankLoading />}
182
205
  />
183
206
  </Wrapper>
184
207
  {!hoistStatusbar && (
185
208
  <div
186
209
  role='contentinfo'
187
- className='flex flex-wrap justify-center items-center border-bs border-subduedSeparator pbs-1 pbe-[max(env(safe-area-inset-bottom),0.25rem)]'
210
+ className='flex flex-wrap justify-center items-center border-y border-subdued-separator pt-1 pb-[max(env(safe-area-inset-bottom),0.25rem)]'
188
211
  >
189
- <Surface role='status-bar--r1-footer' limit={1} />
212
+ <Surface.Surface role='status-bar--r1-footer' limit={1} />
190
213
  </div>
191
214
  )}
192
215
  </>
193
216
  );
194
217
  };
218
+
219
+ const ScrollAreaWrapper = ({ children }: PropsWithChildren) => {
220
+ return (
221
+ <ScrollArea.Root thin orientation='vertical' classNames='grow'>
222
+ <ScrollArea.Viewport>{children}</ScrollArea.Viewport>
223
+ </ScrollArea.Root>
224
+ );
225
+ };
@@ -4,11 +4,10 @@
4
4
 
5
5
  import React, { useMemo } from 'react';
6
6
 
7
- import { Surface, useCapability } from '@dxos/app-framework';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
8
  import { type Label, Main } from '@dxos/react-ui';
9
9
 
10
- import { DeckCapabilities } from '../../capabilities';
11
- import { useBreakpoints, useHoistStatusbar } from '../../hooks';
10
+ import { useBreakpoints, useDeckState, useHoistStatusbar } from '../../hooks';
12
11
  import { meta } from '../../meta';
13
12
  import { getMode } from '../../types';
14
13
  import { layoutAppliesTopbar } from '../../util';
@@ -16,7 +15,8 @@ import { layoutAppliesTopbar } from '../../util';
16
15
  const label = ['sidebar title', { ns: meta.id }] satisfies Label;
17
16
 
18
17
  export const Sidebar = () => {
19
- const { popoverAnchorId, activeDeck: current, deck } = useCapability(DeckCapabilities.DeckState);
18
+ const { state, deck } = useDeckState();
19
+ const { popoverAnchorId, activeDeck: current } = state;
20
20
  const breakpoint = useBreakpoints();
21
21
  const layoutMode = getMode(deck);
22
22
  const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
@@ -32,11 +32,11 @@ export const Sidebar = () => {
32
32
  label={label}
33
33
  classNames={[
34
34
  'grid',
35
- topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',
36
- hoistStatusbar && 'block-end-[--statusbar-size]',
35
+ topbar && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',
36
+ hoistStatusbar && 'bottom-(--dx-statusbar-size)',
37
37
  ]}
38
38
  >
39
- <Surface role='navigation' data={navigationData} limit={1} />
39
+ <Surface.Surface role='navigation' data={navigationData} limit={1} />
40
40
  </Main.NavigationSidebar>
41
41
  );
42
42
  };
@@ -4,46 +4,57 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { LayoutAction, createIntent, useCapability, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
8
9
  import { IconButton, type IconButtonProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
10
 
10
- import { DeckCapabilities } from '../../capabilities';
11
- import { getCompanionId, useDeckCompanions } from '../../hooks';
11
+ import { getCompanionId, useDeckCompanions, useDeckState } from '../../hooks';
12
12
  import { meta } from '../../meta';
13
13
 
14
14
  export const ToggleSidebarButton = ({
15
15
  classNames,
16
16
  variant = 'ghost',
17
17
  }: ThemedClassName<Pick<IconButtonProps, 'variant'>>) => {
18
- const layoutContext = useCapability(DeckCapabilities.MutableDeckState);
18
+ const { updateState } = useDeckState();
19
19
  const { t } = useTranslation(meta.id);
20
+
21
+ const handleClick = useCallback(() => {
22
+ updateState((state) => ({
23
+ ...state,
24
+ sidebarState: state.sidebarState === 'expanded' ? 'collapsed' : 'expanded',
25
+ }));
26
+ }, [updateState]);
27
+
20
28
  return (
21
29
  <IconButton
22
30
  variant={variant}
23
- iconOnly
24
31
  icon='ph--sidebar--regular'
32
+ iconOnly
25
33
  size={4}
26
34
  label={t('open navigation sidebar label')}
27
- onClick={() =>
28
- (layoutContext.sidebarState = layoutContext.sidebarState === 'expanded' ? 'collapsed' : 'expanded')
29
- }
35
+ onClick={handleClick}
30
36
  classNames={classNames}
31
37
  />
32
38
  );
33
39
  };
34
40
 
35
41
  export const CloseSidebarButton = () => {
36
- const layoutContext = useCapability(DeckCapabilities.MutableDeckState);
42
+ const { updateState } = useDeckState();
37
43
  const { t } = useTranslation(meta.id);
44
+
45
+ const handleClick = useCallback(() => {
46
+ updateState((state) => ({ ...state, sidebarState: 'collapsed' }));
47
+ }, [updateState]);
48
+
38
49
  return (
39
50
  <IconButton
40
51
  variant='ghost'
41
- iconOnly
42
52
  icon='ph--caret-line-left--regular'
53
+ iconOnly
43
54
  size={4}
44
55
  label={t('close navigation sidebar label')}
45
- onClick={() => (layoutContext.sidebarState = 'collapsed')}
46
- classNames='rounded-none pli-1 dx-focus-ring-inset pie-[max(.5rem,env(safe-area-inset-left))]'
56
+ onClick={handleClick}
57
+ classNames='rounded-none px-1 dx-focus-ring-inset pe-[max(.5rem,env(safe-area-inset-left))]'
47
58
  />
48
59
  );
49
60
  };
@@ -53,35 +64,31 @@ export const ToggleComplementarySidebarButton = ({
53
64
  classNames,
54
65
  current,
55
66
  }: ThemedClassName<{ inR0?: boolean; current?: string }>) => {
56
- const { dispatchPromise: dispatch } = useIntentDispatcher();
57
- const layoutContext = useCapability(DeckCapabilities.MutableDeckState);
67
+ const { invokeSync } = useOperationInvoker();
68
+ const { state, updateState } = useDeckState();
58
69
  const { t } = useTranslation(meta.id);
59
70
 
60
71
  const companions = useDeckCompanions();
61
- const handleClick = useCallback(async () => {
62
- layoutContext.complementarySidebarState =
63
- layoutContext.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';
64
- const firstCompanion = companions[0];
65
- if (layoutContext.complementarySidebarState === 'expanded' && !current && firstCompanion) {
66
- await dispatch(
67
- createIntent(LayoutAction.UpdateComplementary, {
68
- part: 'complementary',
69
- subject: getCompanionId(firstCompanion.id),
70
- }),
71
- );
72
+ const handleClick = useCallback(() => {
73
+ const nextState = state.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';
74
+ updateState((state) => ({ ...state, complementarySidebarState: nextState }));
75
+
76
+ const subject = state.complementarySidebarPanel ?? (companions[0] && getCompanionId(companions[0].id));
77
+ if (nextState === 'expanded' && !current && subject) {
78
+ invokeSync(LayoutOperation.UpdateComplementary, { subject });
72
79
  }
73
- }, [layoutContext, current, companions, dispatch]);
80
+ }, [state, updateState, current, companions, invokeSync]);
74
81
 
75
82
  return (
76
83
  <IconButton
77
- iconOnly
78
- onClick={handleClick}
79
84
  variant='ghost'
80
- label={t('open complementary sidebar label')}
81
85
  classNames={['[&>svg]:-scale-x-100', classNames]}
82
86
  icon='ph--sidebar-simple--regular'
87
+ iconOnly
88
+ label={t('open complementary sidebar label')}
83
89
  size={inR0 ? 5 : 4}
84
90
  tooltipSide={inR0 ? 'left' : undefined}
91
+ onClick={handleClick}
85
92
  />
86
93
  );
87
94
  };