@dxos/plugin-deck 0.8.4-main.c1de068 → 0.8.4-main.c351d160a8

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 (328) hide show
  1. package/dist/lib/browser/Banner-AJW6225V.mjs +14 -0
  2. package/dist/lib/browser/Banner-AJW6225V.mjs.map +7 -0
  3. package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs +96 -0
  4. package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs.map +7 -0
  5. package/dist/lib/browser/app-graph-builder-MP6INIM2.mjs +123 -0
  6. package/dist/lib/browser/app-graph-builder-MP6INIM2.mjs.map +7 -0
  7. package/dist/lib/browser/check-app-scheme-AUNCD2Y6.mjs +33 -0
  8. package/dist/lib/browser/check-app-scheme-AUNCD2Y6.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-3P2FJVXC.mjs +278 -0
  10. package/dist/lib/browser/chunk-3P2FJVXC.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-BJDEG7YZ.mjs +74 -0
  12. package/dist/lib/browser/chunk-BJDEG7YZ.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-L3RYMAV7.mjs +16 -0
  14. package/dist/lib/browser/chunk-L3RYMAV7.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-TAHLKBDO.mjs +187 -0
  16. package/dist/lib/browser/chunk-TAHLKBDO.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-WTNYSXY5.mjs +1388 -0
  18. package/dist/lib/browser/chunk-WTNYSXY5.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +90 -74
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/operation-resolver-2TEGT4PG.mjs +639 -0
  23. package/dist/lib/browser/operation-resolver-2TEGT4PG.mjs.map +7 -0
  24. package/dist/lib/browser/react-root-XBFHPSCP.mjs +48 -0
  25. package/dist/lib/browser/react-root-XBFHPSCP.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-4J3BZNT2.mjs +44 -0
  27. package/dist/lib/browser/react-surface-4J3BZNT2.mjs.map +7 -0
  28. package/dist/lib/browser/settings-PTMGCSJH.mjs +40 -0
  29. package/dist/lib/browser/settings-PTMGCSJH.mjs.map +7 -0
  30. package/dist/lib/browser/state-MA4SQ7BE.mjs +106 -0
  31. package/dist/lib/browser/state-MA4SQ7BE.mjs.map +7 -0
  32. package/dist/lib/browser/toolkit-6B34QFU3.mjs +55 -0
  33. package/dist/lib/browser/toolkit-6B34QFU3.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +14 -8
  35. package/dist/lib/browser/url-handler-FEUFPQIP.mjs +98 -0
  36. package/dist/lib/browser/url-handler-FEUFPQIP.mjs.map +7 -0
  37. package/dist/lib/node-esm/Banner-XBH2IIDR.mjs +15 -0
  38. package/dist/lib/node-esm/Banner-XBH2IIDR.mjs.map +7 -0
  39. package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs +97 -0
  40. package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs.map +7 -0
  41. package/dist/lib/node-esm/app-graph-builder-ACHG5HY7.mjs +124 -0
  42. package/dist/lib/node-esm/app-graph-builder-ACHG5HY7.mjs.map +7 -0
  43. package/dist/lib/node-esm/check-app-scheme-WN76GWVC.mjs +34 -0
  44. package/dist/lib/node-esm/check-app-scheme-WN76GWVC.mjs.map +7 -0
  45. package/dist/lib/node-esm/chunk-CQ3XYTNJ.mjs +1389 -0
  46. package/dist/lib/node-esm/chunk-CQ3XYTNJ.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-EMU4VIPH.mjs +188 -0
  50. package/dist/lib/node-esm/chunk-EMU4VIPH.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-GZJAQ5IP.mjs +279 -0
  52. package/dist/lib/node-esm/chunk-GZJAQ5IP.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-XCNF4COU.mjs +18 -0
  54. package/dist/lib/node-esm/chunk-XCNF4COU.mjs.map +7 -0
  55. package/dist/lib/node-esm/index.mjs +185 -0
  56. package/dist/lib/node-esm/index.mjs.map +7 -0
  57. package/dist/lib/node-esm/meta.json +1 -0
  58. package/dist/lib/node-esm/operation-resolver-GCMCCI7A.mjs +640 -0
  59. package/dist/lib/node-esm/operation-resolver-GCMCCI7A.mjs.map +7 -0
  60. package/dist/lib/node-esm/react-root-32LZ6APH.mjs +49 -0
  61. package/dist/lib/node-esm/react-root-32LZ6APH.mjs.map +7 -0
  62. package/dist/lib/node-esm/react-surface-CO4ZDZKM.mjs +45 -0
  63. package/dist/lib/node-esm/react-surface-CO4ZDZKM.mjs.map +7 -0
  64. package/dist/lib/node-esm/settings-LPPFLXNJ.mjs +41 -0
  65. package/dist/lib/node-esm/settings-LPPFLXNJ.mjs.map +7 -0
  66. package/dist/lib/node-esm/state-KNRU3GDC.mjs +107 -0
  67. package/dist/lib/node-esm/state-KNRU3GDC.mjs.map +7 -0
  68. package/dist/lib/node-esm/toolkit-SOWYKJY3.mjs +56 -0
  69. package/dist/lib/node-esm/toolkit-SOWYKJY3.mjs.map +7 -0
  70. package/dist/lib/node-esm/types/index.mjs +39 -0
  71. package/dist/lib/node-esm/url-handler-4LEB7UWF.mjs +99 -0
  72. package/dist/lib/node-esm/url-handler-4LEB7UWF.mjs.map +7 -0
  73. package/dist/types/src/DeckPlugin.d.ts +2 -1
  74. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  76. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  78. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +5 -0
  80. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/check-app-scheme/index.d.ts +3 -0
  82. package/dist/types/src/capabilities/check-app-scheme/index.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/index.d.ts +8 -13
  84. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  86. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  88. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  90. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  92. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  93. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  94. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  96. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/settings/index.d.ts +19 -0
  98. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/settings/settings.d.ts +22 -0
  100. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/state/index.d.ts +172 -0
  102. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/state/state.d.ts +175 -0
  104. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/toolkit/index.d.ts +3 -0
  106. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +27 -0
  108. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/tools/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/tools/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/tools/tools.d.ts +12 -0
  112. package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/url-handler/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/url-handler/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/url-handler/url-handler.d.ts +5 -0
  116. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -0
  117. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
  118. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +1 -1
  119. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
  120. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +2 -3
  121. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  122. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +75 -0
  123. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  124. package/dist/types/src/components/DeckLayout/DeckMain.d.ts +3 -0
  125. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -0
  126. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
  127. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +1 -1
  128. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  129. package/dist/types/src/components/DeckLayout/Toast.d.ts +7 -2
  130. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  131. package/dist/types/src/components/Plank/Plank.d.ts +6 -6
  132. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  133. package/dist/types/src/components/Plank/Plank.stories.d.ts +105 -5
  134. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  135. package/dist/types/src/components/Plank/PlankControls.d.ts +1 -1
  136. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  137. package/dist/types/src/components/Plank/PlankError.d.ts +6 -4
  138. package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
  139. package/dist/types/src/components/Plank/PlankHeading.d.ts +3 -3
  140. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  141. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  142. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +1 -1
  143. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
  144. package/dist/types/src/components/fragments.d.ts +4 -1
  145. package/dist/types/src/components/fragments.d.ts.map +1 -1
  146. package/dist/types/src/components/index.d.ts +0 -1
  147. package/dist/types/src/components/index.d.ts.map +1 -1
  148. package/dist/types/src/containers/Banner/Banner.d.ts +2 -0
  149. package/dist/types/src/containers/Banner/Banner.d.ts.map +1 -0
  150. package/dist/types/src/containers/Banner/index.d.ts +3 -0
  151. package/dist/types/src/containers/Banner/index.d.ts.map +1 -0
  152. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts +8 -0
  153. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts.map +1 -0
  154. package/dist/types/src/containers/DeckSettings/index.d.ts +3 -0
  155. package/dist/types/src/containers/DeckSettings/index.d.ts.map +1 -0
  156. package/dist/types/src/containers/index.d.ts +4 -0
  157. package/dist/types/src/containers/index.d.ts.map +1 -0
  158. package/dist/types/src/hooks/index.d.ts +2 -0
  159. package/dist/types/src/hooks/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useDeckCompanions.d.ts +3 -4
  161. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  162. package/dist/types/src/hooks/useDeckState.d.ts +17 -0
  163. package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
  164. package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
  165. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  166. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  167. package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
  168. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  169. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  170. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  171. package/dist/types/src/index.d.ts +1 -2
  172. package/dist/types/src/index.d.ts.map +1 -1
  173. package/dist/types/src/layout.d.ts +1 -7
  174. package/dist/types/src/layout.d.ts.map +1 -1
  175. package/dist/types/src/meta.d.ts +2 -3
  176. package/dist/types/src/meta.d.ts.map +1 -1
  177. package/dist/types/src/translations.d.ts +4 -1
  178. package/dist/types/src/translations.d.ts.map +1 -1
  179. package/dist/types/src/{capabilities → types}/capabilities.d.ts +96 -90
  180. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  181. package/dist/types/src/types/events.d.ts +7 -0
  182. package/dist/types/src/types/events.d.ts.map +1 -0
  183. package/dist/types/src/types/index.d.ts +2 -0
  184. package/dist/types/src/types/index.d.ts.map +1 -1
  185. package/dist/types/src/types/schema.d.ts +103 -41
  186. package/dist/types/src/types/schema.d.ts.map +1 -1
  187. package/dist/types/src/util/set-active.d.ts +18 -3
  188. package/dist/types/src/util/set-active.d.ts.map +1 -1
  189. package/dist/types/tsconfig.tsbuildinfo +1 -1
  190. package/package.json +61 -47
  191. package/src/DeckPlugin.ts +46 -61
  192. package/src/capabilities/app-graph-builder/app-graph-builder.ts +119 -0
  193. package/src/capabilities/app-graph-builder/index.ts +7 -0
  194. package/src/capabilities/check-app-scheme/check-app-scheme.ts +45 -0
  195. package/src/capabilities/check-app-scheme/index.ts +7 -0
  196. package/src/capabilities/index.ts +9 -13
  197. package/src/capabilities/operation-resolver/index.ts +10 -0
  198. package/src/capabilities/operation-resolver/operation-resolver.ts +558 -0
  199. package/src/capabilities/react-root/index.ts +7 -0
  200. package/src/capabilities/react-root/react-root.tsx +47 -0
  201. package/src/capabilities/react-surface/index.ts +7 -0
  202. package/src/capabilities/react-surface/react-surface.tsx +38 -0
  203. package/src/capabilities/settings/index.ts +7 -0
  204. package/src/capabilities/settings/settings.ts +39 -0
  205. package/src/capabilities/state/index.ts +7 -0
  206. package/src/capabilities/state/state.ts +105 -0
  207. package/src/capabilities/toolkit/index.ts +7 -0
  208. package/src/capabilities/toolkit/toolkit.ts +64 -0
  209. package/src/capabilities/tools/index.ts +7 -0
  210. package/src/capabilities/tools/tools.ts +91 -0
  211. package/src/capabilities/url-handler/index.ts +7 -0
  212. package/src/capabilities/url-handler/url-handler.ts +98 -0
  213. package/src/components/DeckLayout/ActiveNode.tsx +3 -2
  214. package/src/components/DeckLayout/Banner.tsx +12 -12
  215. package/src/components/DeckLayout/ContentEmpty.tsx +6 -7
  216. package/src/components/DeckLayout/DeckLayout.stories.tsx +53 -0
  217. package/src/components/DeckLayout/DeckLayout.tsx +18 -285
  218. package/src/components/DeckLayout/DeckMain.tsx +287 -0
  219. package/src/components/DeckLayout/Dialog.tsx +22 -13
  220. package/src/components/DeckLayout/Fallback.tsx +4 -8
  221. package/src/components/DeckLayout/Popover.tsx +76 -32
  222. package/src/components/DeckLayout/StatusBar.tsx +4 -4
  223. package/src/components/DeckLayout/Toast.tsx +30 -5
  224. package/src/components/Plank/Plank.stories.tsx +26 -17
  225. package/src/components/Plank/Plank.tsx +111 -70
  226. package/src/components/Plank/PlankControls.tsx +12 -14
  227. package/src/components/Plank/PlankError.tsx +33 -18
  228. package/src/components/Plank/PlankHeading.tsx +45 -51
  229. package/src/components/Plank/PlankLoading.tsx +1 -1
  230. package/src/components/Sidebar/ComplementarySidebar.tsx +80 -53
  231. package/src/components/Sidebar/Sidebar.tsx +9 -9
  232. package/src/components/Sidebar/SidebarButton.tsx +40 -33
  233. package/src/components/fragments.ts +10 -5
  234. package/src/components/index.ts +0 -1
  235. package/src/containers/Banner/Banner.tsx +5 -0
  236. package/src/containers/Banner/index.ts +7 -0
  237. package/src/containers/DeckSettings/DeckSettings.tsx +113 -0
  238. package/src/containers/DeckSettings/index.ts +7 -0
  239. package/src/containers/index.ts +8 -0
  240. package/src/hooks/index.ts +2 -0
  241. package/src/hooks/useCompanions.ts +2 -2
  242. package/src/hooks/useDeckCompanions.ts +8 -11
  243. package/src/hooks/useDeckState.ts +82 -0
  244. package/src/hooks/useHoistStatusbar.ts +4 -5
  245. package/src/hooks/useMainSize.ts +2 -2
  246. package/src/hooks/useNodeActionExpander.ts +4 -4
  247. package/src/hooks/useSelectedCompanion.ts +32 -0
  248. package/src/index.ts +1 -2
  249. package/src/layout.ts +1 -14
  250. package/src/meta.ts +8 -5
  251. package/src/translations.ts +4 -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 +99 -26
  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-JTFSDT2I.mjs +0 -152
  260. package/dist/lib/browser/app-graph-builder-JTFSDT2I.mjs.map +0 -7
  261. package/dist/lib/browser/check-app-scheme-57U62A3A.mjs +0 -32
  262. package/dist/lib/browser/check-app-scheme-57U62A3A.mjs.map +0 -7
  263. package/dist/lib/browser/chunk-CNTGBCMK.mjs +0 -145
  264. package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
  265. package/dist/lib/browser/chunk-D7KTFCUV.mjs +0 -1494
  266. package/dist/lib/browser/chunk-D7KTFCUV.mjs.map +0 -7
  267. package/dist/lib/browser/chunk-F5BQOOEG.mjs +0 -160
  268. package/dist/lib/browser/chunk-F5BQOOEG.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-JFTXENFN.mjs +0 -129
  270. package/dist/lib/browser/chunk-JFTXENFN.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-M57WD3V6.mjs +0 -16
  272. package/dist/lib/browser/chunk-M57WD3V6.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-QDZO4AJ4.mjs +0 -127
  274. package/dist/lib/browser/chunk-QDZO4AJ4.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-Z5KITAZW.mjs +0 -13
  276. package/dist/lib/browser/chunk-Z5KITAZW.mjs.map +0 -7
  277. package/dist/lib/browser/intent-resolver-P2OBK5HK.mjs +0 -521
  278. package/dist/lib/browser/intent-resolver-P2OBK5HK.mjs.map +0 -7
  279. package/dist/lib/browser/react-root-PO64J7ML.mjs +0 -43
  280. package/dist/lib/browser/react-root-PO64J7ML.mjs.map +0 -7
  281. package/dist/lib/browser/react-surface-E45YOVF5.mjs +0 -40
  282. package/dist/lib/browser/react-surface-E45YOVF5.mjs.map +0 -7
  283. package/dist/lib/browser/settings-6AJZPZPM.mjs +0 -29
  284. package/dist/lib/browser/settings-6AJZPZPM.mjs.map +0 -7
  285. package/dist/lib/browser/state-MVDYX77Y.mjs +0 -12
  286. package/dist/lib/browser/tools-TKQDPCHJ.mjs +0 -88
  287. package/dist/lib/browser/tools-TKQDPCHJ.mjs.map +0 -7
  288. package/dist/lib/browser/url-handler-7L7M6IKH.mjs +0 -70
  289. package/dist/lib/browser/url-handler-7L7M6IKH.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/tools.d.ts +0 -11
  306. package/dist/types/src/capabilities/tools.d.ts.map +0 -1
  307. package/dist/types/src/capabilities/url-handler.d.ts +0 -4
  308. package/dist/types/src/capabilities/url-handler.d.ts.map +0 -1
  309. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +0 -6
  310. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +0 -1
  311. package/dist/types/src/components/DeckSettings/index.d.ts +0 -2
  312. package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
  313. package/dist/types/src/events.d.ts +0 -4
  314. package/dist/types/src/events.d.ts.map +0 -1
  315. package/src/capabilities/app-graph-builder.ts +0 -141
  316. package/src/capabilities/capabilities.ts +0 -14
  317. package/src/capabilities/check-app-scheme.ts +0 -40
  318. package/src/capabilities/intent-resolver.ts +0 -468
  319. package/src/capabilities/react-root.tsx +0 -38
  320. package/src/capabilities/react-surface.tsx +0 -30
  321. package/src/capabilities/settings.ts +0 -26
  322. package/src/capabilities/state.ts +0 -104
  323. package/src/capabilities/tools.ts +0 -81
  324. package/src/capabilities/url-handler.ts +0 -59
  325. package/src/components/DeckSettings/DeckSettings.tsx +0 -88
  326. package/src/components/DeckSettings/index.ts +0 -5
  327. package/src/events.ts +0 -11
  328. /package/dist/lib/{browser/state-MVDYX77Y.mjs.map → node-esm/types/index.mjs.map} +0 -0
@@ -2,29 +2,31 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import React, { Fragment, memo, useCallback, useEffect, useMemo, type MouseEvent } from 'react';
5
+ import React, { CSSProperties, Fragment, type MouseEvent, memo, useCallback, useEffect, useMemo } from 'react';
6
6
 
7
- import { createIntent, LayoutAction, Surface, 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, getCompanionVariant } 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, largeIconSize } from '@dxos/ui-theme';
13
15
 
14
- import { PlankCompanionControls, PlankControls } from './PlankControls';
15
16
  import { useBreakpoints } from '../../hooks';
16
- import { parseEntryId } from '../../layout';
17
- import { DECK_PLUGIN } from '../../meta';
18
- import { PLANK_COMPANION_TYPE, DeckAction, type ResolvedPart, type LayoutMode } from '../../types';
17
+ import { meta } from '../../meta';
18
+ import { DeckOperation, type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';
19
19
  import { soloInlinePadding } from '../fragments';
20
20
 
21
+ import { PlankCompanionControls, PlankControls } from './PlankControls';
22
+
21
23
  const MAX_COMPANIONS = 5;
22
24
 
23
25
  export type PlankHeadingProps = {
24
26
  id: string;
25
27
  part: ResolvedPart;
26
28
  layoutMode?: LayoutMode;
27
- node?: Node;
29
+ node?: Node.Node;
28
30
  deckEnabled?: boolean;
29
31
  canIncrementStart?: boolean;
30
32
  canIncrementEnd?: boolean;
@@ -32,7 +34,7 @@ export type PlankHeadingProps = {
32
34
  primaryId?: string;
33
35
  pending?: boolean;
34
36
  companioned?: 'primary' | 'companion';
35
- companions?: Node[];
37
+ companions?: Node.Node[];
36
38
  actions?: StackItemSigilAction[];
37
39
  };
38
40
 
@@ -52,14 +54,15 @@ export const PlankHeading = memo(
52
54
  layoutMode,
53
55
  actions = [],
54
56
  }: PlankHeadingProps) => {
55
- const { t } = useTranslation(DECK_PLUGIN);
56
- const { dispatchPromise: dispatch } = useIntentDispatcher();
57
+ const { t } = useTranslation(meta.id);
58
+ const { invokePromise, invokeSync } = useOperationInvoker();
59
+ const runAction = useActionRunner();
57
60
  const { graph } = useAppGraph();
58
61
  const breakpoint = useBreakpoints();
59
62
  const icon = node?.properties?.icon ?? 'ph--placeholder--regular';
60
63
  const label = pending
61
64
  ? t('pending heading')
62
- : toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: DECK_PLUGIN }], t);
65
+ : toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: meta.id }], t);
63
66
 
64
67
  const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;
65
68
 
@@ -67,7 +70,7 @@ export const PlankHeading = memo(
67
70
  const frame = requestAnimationFrame(() => {
68
71
  // Load actions for the node.
69
72
  if (node) {
70
- void graph.expand(node.id);
73
+ void Graph.expand(graph, node.id, 'child');
71
74
  }
72
75
  });
73
76
 
@@ -87,7 +90,7 @@ export const PlankHeading = memo(
87
90
  [breakpoint, part, companions, canIncrementStart, canIncrementEnd, isCompanionNode, deckEnabled],
88
91
  );
89
92
 
90
- const { variant } = parseEntryId(id);
93
+ const variant = isCompanionNode ? getCompanionVariant(id) : undefined;
91
94
  const sigilActions = useMemo(() => {
92
95
  if (!node) {
93
96
  return undefined;
@@ -96,80 +99,72 @@ export const PlankHeading = memo(
96
99
  } else {
97
100
  return [
98
101
  actions,
99
- graph
100
- .getActions(node.id)
101
- .filter((a) => ['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition)),
102
+ Graph.getActions(graph, node.id).filter((action) =>
103
+ ['list-item', 'list-item-primary', 'heading-list-item'].includes(action.properties.disposition),
104
+ ),
102
105
  ].filter((a) => a.length > 0);
103
106
  }
104
107
  }, [actions, node, variant, graph]);
105
108
 
106
109
  const handleAction = useCallback(
107
110
  (action: StackItemSigilAction) => {
108
- typeof action.data === 'function' && void action.data?.({ parent: node, caller: DECK_PLUGIN });
111
+ if (typeof action.data === 'function') {
112
+ void runAction(action as Node.Action, { parent: node, caller: meta.id });
113
+ }
109
114
  },
110
- [node],
115
+ [node, runAction],
111
116
  );
112
117
 
113
118
  const handlePlankAction = useCallback(
114
- (eventType: DeckAction.PartAdjustment) => {
119
+ (eventType: DeckOperation.PartAdjustment) => {
115
120
  if (eventType.startsWith('solo')) {
116
- return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));
121
+ return invokePromise(DeckOperation.Adjust, { type: eventType, id });
117
122
  } else if (eventType === 'close') {
118
123
  if (part === 'complementary') {
119
- return dispatch(
120
- createIntent(LayoutAction.UpdateComplementary, {
121
- part: 'complementary',
122
- options: { state: 'collapsed' },
123
- }),
124
- );
124
+ return invokeSync(LayoutOperation.UpdateComplementary, { state: 'collapsed' });
125
125
  } else {
126
- return dispatch(
127
- createIntent(LayoutAction.Close, { part: 'main', subject: [id], options: { state: false } }),
128
- );
126
+ return invokeSync(LayoutOperation.Close, { subject: [id] });
129
127
  }
130
128
  } else {
131
- return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));
129
+ return invokePromise(DeckOperation.Adjust, { type: eventType, id });
132
130
  }
133
131
  },
134
- [dispatch, id, part],
132
+ [invokePromise, invokeSync, id, part],
135
133
  );
136
134
 
137
- const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${DECK_PLUGIN}/${node.id}` ? Popover.Anchor : Fragment;
135
+ const ActionRoot = node && popoverAnchorId === `${meta.id}:${node.id}` ? Popover.Anchor : Fragment;
138
136
 
139
137
  const handleTabClick = useCallback(
140
138
  (event: MouseEvent) => {
141
139
  const target = (event.target as HTMLElement).closest('[data-id]') as HTMLElement | null;
142
140
  const tabId = target?.dataset?.id;
143
- if (primaryId && tabId) {
144
- void dispatch(
145
- createIntent(DeckAction.ChangeCompanion, {
146
- primary: primaryId,
147
- companion: tabId,
148
- }),
149
- );
141
+ if (tabId) {
142
+ void invokePromise(DeckOperation.ChangeCompanion, { companion: tabId });
150
143
  }
151
144
  },
152
- [primaryId],
145
+ [invokePromise],
153
146
  );
154
147
 
155
148
  return (
156
149
  <StackItem.Heading
150
+ data-plank-heading
151
+ style={largeIconSize}
157
152
  classNames={[
158
- 'plb-1 items-stretch gap-1 sticky inline-start-12 app-drag min-is-0 contain-layout density-coarse',
159
- part === 'solo' ? soloInlinePadding : 'pli-1',
153
+ 'py-1 items-stretch gap-1 sticky left-12 dx-app-drag min-w-0 dx-contain-layout dx-density-coarse',
154
+ part === 'solo' ? soloInlinePadding : 'px-1',
160
155
  ...(layoutMode === 'solo--fullscreen'
161
156
  ? [
162
157
  hoverableControls,
163
158
  hoverableFocusedWithinControls,
164
- '*: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',
159
+ '*:transition-opacity *:opacity-(--controls-opacity) bg-transparent border-transparent transition-[background-color,border-color]',
160
+ 'hover-hover:hover:bg-header-surface focus-within:bg-header-surface hover-hover:hover:border-subdued-separator focus-within:border-subdued-separator',
165
161
  ]
166
162
  : []),
167
163
  ]}
168
- data-plank-heading
169
164
  >
170
165
  {companions && isCompanionNode ? (
171
166
  /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */
172
- <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'>
173
168
  {companions.map(({ id, properties: { icon, label } }) => (
174
169
  <IconButton
175
170
  key={id}
@@ -177,7 +172,6 @@ export const PlankHeading = memo(
177
172
  icon={icon}
178
173
  iconOnly={companions.length > MAX_COMPANIONS && node?.id !== id}
179
174
  label={toLocalizedString(label, t)}
180
- size={5}
181
175
  variant={node?.id === id ? 'primary' : 'ghost'}
182
176
  onClick={handleTabClick}
183
177
  />
@@ -195,12 +189,12 @@ export const PlankHeading = memo(
195
189
  actions={sigilActions}
196
190
  onAction={handleAction}
197
191
  >
198
- <Surface role='menu-footer' data={{ subject: node.data }} />
192
+ <Surface.Surface role='menu-footer' data={{ subject: node.data }} />
199
193
  </StackItem.Sigil>
200
194
  ) : (
201
195
  <StackItem.SigilButton>
202
196
  <span className='sr-only'>{label}</span>
203
- <Icon icon={icon} size={5} />
197
+ <Icon icon={icon} />
204
198
  </StackItem.SigilButton>
205
199
  )}
206
200
  </ActionRoot>
@@ -215,7 +209,7 @@ export const PlankHeading = memo(
215
209
  </TextTooltip>
216
210
  </>
217
211
  )}
218
- {node && part !== 'complementary' && <Surface role='navbar-end' data={{ subject: node.data }} />}
212
+ {node && part !== 'complementary' && <Surface.Surface role='navbar-end' data={{ subject: node.data }} />}
219
213
  {companioned === 'companion' ? (
220
214
  <PlankCompanionControls primary={primaryId} />
221
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
  };
@@ -3,6 +3,7 @@
3
3
  //
4
4
 
5
5
  import React, {
6
+ CSSProperties,
6
7
  Fragment,
7
8
  type MouseEvent,
8
9
  type PropsWithChildren,
@@ -12,36 +13,38 @@ import React, {
12
13
  useState,
13
14
  } from 'react';
14
15
 
15
- import { LayoutAction, Surface, createIntent, useCapability, useIntentDispatcher } from '@dxos/app-framework';
16
- import { Main, useTranslation, toLocalizedString, IconButton, type Label } from '@dxos/react-ui';
16
+ import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
17
+ import { LayoutOperation, getCompanionVariant } from '@dxos/app-toolkit';
18
+ import { IconButton, type Label, Main, ScrollArea, toLocalizedString, useTranslation } from '@dxos/react-ui';
17
19
  import { Tabs } from '@dxos/react-ui-tabs';
20
+ import { largeIconSize, mx } from '@dxos/ui-theme';
18
21
 
19
- import { ToggleComplementarySidebarButton } from './SidebarButton';
20
- import { DeckCapabilities } from '../../capabilities';
21
- import { type DeckCompanion, getCompanionId, useDeckCompanions, useBreakpoints, useHoistStatusbar } from '../../hooks';
22
- import { DECK_PLUGIN } from '../../meta';
22
+ import { type DeckCompanion, useBreakpoints, useDeckCompanions, useDeckState, useHoistStatusbar } from '../../hooks';
23
+ import { meta } from '../../meta';
23
24
  import { getMode } from '../../types';
24
25
  import { layoutAppliesTopbar } from '../../util';
25
- import { PlankContentError, PlankLoading } from '../Plank';
26
+ import { PlankErrorFallback, PlankLoading } from '../Plank';
27
+
28
+ import { ToggleComplementarySidebarButton } from './SidebarButton';
26
29
 
27
- const label = ['complementary sidebar title', { ns: DECK_PLUGIN }] satisfies Label;
30
+ const label = ['complementary sidebar title', { ns: meta.id }] satisfies Label;
28
31
 
29
32
  export type ComplementarySidebarProps = {
30
33
  current?: string;
31
34
  };
32
35
 
33
36
  export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) => {
34
- const { t } = useTranslation(DECK_PLUGIN);
35
- const { dispatchPromise: dispatch } = useIntentDispatcher();
36
- const layout = useCapability(DeckCapabilities.MutableDeckState);
37
- const layoutMode = getMode(layout.deck);
37
+ const { t } = useTranslation(meta.id);
38
+ const { invokeSync } = useOperationInvoker();
39
+ const { state, deck, updateState } = useDeckState();
40
+ const layoutMode = getMode(deck);
38
41
  const breakpoint = useBreakpoints();
39
42
  const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
40
43
  const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);
41
44
 
42
45
  const companions = useDeckCompanions();
43
- const activeCompanion = companions.find((companion) => getCompanionId(companion.id) === current);
44
- const activeId = activeCompanion && getCompanionId(activeCompanion.id);
46
+ const activeCompanion = companions.find((companion) => getCompanionVariant(companion.id) === current);
47
+ const activeId = activeCompanion && getCompanionVariant(activeCompanion.id);
45
48
  const [internalValue, setInternalValue] = useState(activeId);
46
49
 
47
50
  useEffect(() => {
@@ -52,14 +55,17 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
52
55
  (event: MouseEvent) => {
53
56
  const nextValue = event.currentTarget.getAttribute('data-value') as string;
54
57
  if (nextValue === activeId) {
55
- layout.complementarySidebarState = layout.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';
58
+ updateState((state) => ({
59
+ ...state,
60
+ complementarySidebarState: state.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded',
61
+ }));
56
62
  } else {
57
63
  setInternalValue(nextValue);
58
- layout.complementarySidebarState = 'expanded';
59
- void dispatch(createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: nextValue }));
64
+ updateState((state) => ({ ...state, complementarySidebarState: 'expanded' }));
65
+ invokeSync(LayoutOperation.UpdateComplementary, { subject: nextValue });
60
66
  }
61
67
  },
62
- [layout, activeId, dispatch],
68
+ [state.complementarySidebarState, activeId, invokeSync, updateState],
63
69
  );
64
70
 
65
71
  const data = useMemo(
@@ -73,38 +79,40 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
73
79
 
74
80
  useEffect(() => {
75
81
  if (!activeId) {
76
- void dispatch(
77
- createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),
78
- );
82
+ invokeSync(LayoutOperation.UpdateComplementary, { state: 'collapsed' });
79
83
  }
80
- }, [activeId, dispatch]);
84
+ }, [activeId, invokeSync]);
81
85
 
82
86
  return (
83
87
  <Main.ComplementarySidebar
84
88
  label={label}
85
89
  classNames={[
86
- topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',
87
- hoistStatusbar && 'block-end-[--statusbar-size]',
90
+ topbar && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',
91
+ hoistStatusbar && 'bottom-(--dx-statusbar-size)',
88
92
  ]}
89
93
  >
90
94
  <Tabs.Root orientation='vertical' verticalVariant='stateless' value={internalValue} classNames='contents'>
91
95
  <div
92
96
  role='none'
93
- 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'
97
+ style={largeIconSize}
98
+ className={mx(
99
+ 'absolute z-[1] inset-y-0 end-0 !w-(--dx-r0-size)',
100
+ 'py-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] border-s border-subdued-separator',
101
+ 'grid grid-cols-1 grid-rows-[1fr_min-content] bg-toolbar-surface dx-contain-layout dx-app-drag',
102
+ )}
94
103
  >
95
- <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-[--rail-action] p-1 gap-1 !overflow-y-auto'>
104
+ <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-(--dx-rail-action) p-1 gap-1 overflow-y-auto!'>
96
105
  {companions.map((companion) => (
97
- <Tabs.Tab key={getCompanionId(companion.id)} value={getCompanionId(companion.id)} asChild>
106
+ <Tabs.Tab key={getCompanionVariant(companion.id)} value={getCompanionVariant(companion.id)} asChild>
98
107
  <IconButton
99
108
  label={toLocalizedString(companion.properties.label, t)}
100
109
  icon={companion.properties.icon}
101
- size={5}
102
110
  iconOnly
103
111
  tooltipSide='left'
104
- data-value={getCompanionId(companion.id)}
112
+ data-value={getCompanionVariant(companion.id)}
105
113
  variant={
106
- activeId === getCompanionId(companion.id)
107
- ? layout.complementarySidebarState === 'expanded'
114
+ activeId === getCompanionVariant(companion.id)
115
+ ? state.complementarySidebarState === 'expanded'
108
116
  ? 'primary'
109
117
  : 'default'
110
118
  : 'ghost'
@@ -115,21 +123,25 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
115
123
  ))}
116
124
  </Tabs.Tablist>
117
125
  {!hoistStatusbar && (
118
- <div role='none' className='grid grid-cols-1 auto-rows-[--rail-item] p-1 overflow-y-auto'>
119
- <Surface role='status-bar--r0-footer' limit={1} />
126
+ <div role='none' className='grid grid-cols-1 auto-rows-(--dx-rail-item) p-1 overflow-y-auto'>
127
+ <Surface.Surface role='status-bar--r0-footer' limit={1} />
120
128
  </div>
121
129
  )}
122
- <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-[--rail-action] p-1'>
130
+ <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-(--dx-rail-action) p-1'>
123
131
  <ToggleComplementarySidebarButton />
124
132
  </div>
125
133
  </div>
126
134
  {activeId &&
127
135
  companions.map((companion) => (
128
136
  <Tabs.Tabpanel
129
- key={getCompanionId(companion.id)}
130
- value={getCompanionId(companion.id)}
131
- 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)]'
132
- {...(layout.complementarySidebarState !== 'expanded' && { inert: 'true' })}
137
+ key={getCompanionVariant(companion.id)}
138
+ value={getCompanionVariant(companion.id)}
139
+ classNames={[
140
+ 'absolute data-[state="inactive"]:-z-[1] overflow-hidden',
141
+ 'inset-y-0 start-0 w-[calc(100%-var(--dx-r0-size))] lg:w-(--dx-r1-size)',
142
+ 'grid grid-cols-1 grid-rows-[var(--dx-rail-size)_1fr_min-content] py-[env(safe-area-inset-top)]',
143
+ ]}
144
+ {...(state.complementarySidebarState !== 'expanded' && { inert: true })}
133
145
  >
134
146
  <ComplementarySidebarPanel
135
147
  companion={companion}
@@ -154,40 +166,55 @@ type ComplementarySidebarPanelProps = {
154
166
  hoistStatusbar: boolean;
155
167
  };
156
168
 
157
- const ScrollArea = ({ children }: PropsWithChildren) => {
158
- return <div className='flex flex-col grow overflow-x-hidden overflow-y-auto scrollbar-thin'>{children}</div>;
159
- };
160
-
161
169
  const ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }: ComplementarySidebarPanelProps) => {
162
- const { t } = useTranslation(DECK_PLUGIN);
170
+ const { t } = useTranslation(meta.id);
163
171
 
164
- if (getCompanionId(companion.id) !== activeId && !data) {
172
+ if (getCompanionVariant(companion.id) !== activeId && !data) {
165
173
  return null;
166
174
  }
167
175
 
168
- const Wrapper = companion.properties.fixed ? Fragment : ScrollArea;
176
+ const Wrapper = companion.properties.fixed ? Fragment : ScrollAreaWrapper;
169
177
 
170
178
  return (
171
179
  <>
172
- <h2 className='flex items-center pli-2 border-subduedSeparator border-be font-medium'>
173
- {toLocalizedString(companion.properties.label, t)}
174
- </h2>
180
+ <div role='none' className='flex items-center p-1 gap-1 border-b border-subdued-separator'>
181
+ <IconButton
182
+ label={toLocalizedString(companion.properties.label, t)}
183
+ icon={companion.properties.icon}
184
+ iconOnly
185
+ tooltipSide='left'
186
+ data-value={getCompanionVariant(companion.id)}
187
+ classNames='h-10 w-10'
188
+ variant='default'
189
+ />
190
+ <div role='none' className='px-1'>
191
+ {toLocalizedString(companion.properties.label, t)}
192
+ </div>
193
+ </div>
175
194
  <Wrapper>
176
- <Surface
177
- role={`deck-companion--${getCompanionId(companion.id)}`}
195
+ <Surface.Surface
196
+ role={`deck-companion--${getCompanionVariant(companion.id)}`}
178
197
  data={data}
179
- fallback={PlankContentError}
198
+ fallback={PlankErrorFallback}
180
199
  placeholder={<PlankLoading />}
181
200
  />
182
201
  </Wrapper>
183
202
  {!hoistStatusbar && (
184
203
  <div
185
204
  role='contentinfo'
186
- className='flex flex-wrap justify-center items-center border-bs border-subduedSeparator pbs-1 pbe-[max(env(safe-area-inset-bottom),0.25rem)]'
205
+ className='flex flex-wrap justify-center items-center border-y border-subdued-separator pt-1 pb-[max(env(safe-area-inset-bottom),0.25rem)]'
187
206
  >
188
- <Surface role='status-bar--r1-footer' limit={1} />
207
+ <Surface.Surface role='status-bar--r1-footer' limit={1} />
189
208
  </div>
190
209
  )}
191
210
  </>
192
211
  );
193
212
  };
213
+
214
+ const ScrollAreaWrapper = ({ children }: PropsWithChildren) => {
215
+ return (
216
+ <ScrollArea.Root thin orientation='vertical' classNames='grow'>
217
+ <ScrollArea.Viewport>{children}</ScrollArea.Viewport>
218
+ </ScrollArea.Root>
219
+ );
220
+ };
@@ -4,19 +4,19 @@
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';
12
- import { DECK_PLUGIN } from '../../meta';
10
+ import { useBreakpoints, useDeckState, useHoistStatusbar } from '../../hooks';
11
+ import { meta } from '../../meta';
13
12
  import { getMode } from '../../types';
14
13
  import { layoutAppliesTopbar } from '../../util';
15
14
 
16
- const label = ['sidebar title', { ns: DECK_PLUGIN }] satisfies Label;
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 { createIntent, LayoutAction, useCapability, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation, getCompanionVariant } 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 { useDeckCompanions, getCompanionId } from '../../hooks';
12
- import { DECK_PLUGIN } from '../../meta';
11
+ import { useDeckCompanions, useDeckState } from '../../hooks';
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);
19
- const { t } = useTranslation(DECK_PLUGIN);
18
+ const { updateState } = useDeckState();
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);
37
- const { t } = useTranslation(DECK_PLUGIN);
42
+ const { updateState } = useDeckState();
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);
58
- const { t } = useTranslation(DECK_PLUGIN);
67
+ const { invokeSync } = useOperationInvoker();
68
+ const { state, updateState } = useDeckState();
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] && getCompanionVariant(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
  };