@dxos/plugin-deck 0.8.4-main.67995b8 → 0.8.4-main.6fa680abb7

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-HXRXEUOZ.mjs +14 -0
  2. package/dist/lib/browser/Banner-HXRXEUOZ.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-ITNJS5QX.mjs +1386 -0
  14. package/dist/lib/browser/chunk-ITNJS5QX.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-L3RYMAV7.mjs +16 -0
  16. package/dist/lib/browser/chunk-L3RYMAV7.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-TAHLKBDO.mjs +187 -0
  18. package/dist/lib/browser/chunk-TAHLKBDO.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-AS4IOYDG.mjs +48 -0
  25. package/dist/lib/browser/react-root-AS4IOYDG.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-FH7TC6WW.mjs +44 -0
  27. package/dist/lib/browser/react-surface-FH7TC6WW.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-RN7XXOXY.mjs +15 -0
  38. package/dist/lib/node-esm/Banner-RN7XXOXY.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-DGTRKKWZ.mjs +76 -0
  46. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-EMU4VIPH.mjs +188 -0
  48. package/dist/lib/node-esm/chunk-EMU4VIPH.mjs.map +7 -0
  49. package/dist/lib/node-esm/chunk-GZJAQ5IP.mjs +279 -0
  50. package/dist/lib/node-esm/chunk-GZJAQ5IP.mjs.map +7 -0
  51. package/dist/lib/node-esm/chunk-MBCCNIWY.mjs +1387 -0
  52. package/dist/lib/node-esm/chunk-MBCCNIWY.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-7DTDLAF4.mjs +49 -0
  61. package/dist/lib/node-esm/react-root-7DTDLAF4.mjs.map +7 -0
  62. package/dist/lib/node-esm/react-surface-U6Z2K324.mjs +45 -0
  63. package/dist/lib/node-esm/react-surface-U6Z2K324.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 +60 -50
  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 +70 -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 +43 -50
  229. package/src/components/Plank/PlankLoading.tsx +1 -1
  230. package/src/components/Sidebar/ComplementarySidebar.tsx +78 -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, { 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 } 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,72 +99,63 @@ 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
157
150
  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',
151
+ 'py-1 items-stretch gap-1 sticky left-12 dx-app-drag min-w-0 dx-contain-layout dx-density-coarse',
152
+ part === 'solo' ? soloInlinePadding : 'px-1',
160
153
  ...(layoutMode === 'solo--fullscreen'
161
154
  ? [
162
155
  hoverableControls,
163
156
  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',
157
+ '*:transition-opacity *:opacity-(--controls-opacity) bg-transparent border-transparent transition-[background-color,border-color]',
158
+ 'hover-hover:hover:bg-header-surface focus-within:bg-header-surface hover-hover:hover:border-subdued-separator focus-within:border-subdued-separator',
165
159
  ]
166
160
  : []),
167
161
  ]}
@@ -169,7 +163,7 @@ export const PlankHeading = memo(
169
163
  >
170
164
  {companions && isCompanionNode ? (
171
165
  /* 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'>
166
+ <div role='none' className='flex-1 min-w-0 overflow-x-auto scrollbar-none flex gap-1'>
173
167
  {companions.map(({ id, properties: { icon, label } }) => (
174
168
  <IconButton
175
169
  key={id}
@@ -177,7 +171,6 @@ export const PlankHeading = memo(
177
171
  icon={icon}
178
172
  iconOnly={companions.length > MAX_COMPANIONS && node?.id !== id}
179
173
  label={toLocalizedString(label, t)}
180
- size={5}
181
174
  variant={node?.id === id ? 'primary' : 'ghost'}
182
175
  onClick={handleTabClick}
183
176
  />
@@ -195,12 +188,12 @@ export const PlankHeading = memo(
195
188
  actions={sigilActions}
196
189
  onAction={handleAction}
197
190
  >
198
- <Surface role='menu-footer' data={{ subject: node.data }} />
191
+ <Surface.Surface role='menu-footer' data={{ subject: node.data }} />
199
192
  </StackItem.Sigil>
200
193
  ) : (
201
194
  <StackItem.SigilButton>
202
195
  <span className='sr-only'>{label}</span>
203
- <Icon icon={icon} size={5} />
196
+ <Icon icon={icon} />
204
197
  </StackItem.SigilButton>
205
198
  )}
206
199
  </ActionRoot>
@@ -215,7 +208,7 @@ export const PlankHeading = memo(
215
208
  </TextTooltip>
216
209
  </>
217
210
  )}
218
- {node && part !== 'complementary' && <Surface role='navbar-end' data={{ subject: node.data }} />}
211
+ {node && part !== 'complementary' && <Surface.Surface role='navbar-end' data={{ subject: node.data }} />}
219
212
  {companioned === 'companion' ? (
220
213
  <PlankCompanionControls primary={primaryId} />
221
214
  ) : (
@@ -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,36 +12,38 @@ import React, {
12
12
  useState,
13
13
  } from 'react';
14
14
 
15
- import { LayoutAction, Surface, createIntent, useCapability, useIntentDispatcher } from '@dxos/app-framework';
16
- import { Main, useTranslation, toLocalizedString, IconButton, type Label } from '@dxos/react-ui';
15
+ import { Surface, useOperationInvoker } from '@dxos/app-framework/ui';
16
+ import { LayoutOperation, getCompanionVariant } 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';
19
+ import { mx } from '@dxos/ui-theme';
18
20
 
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';
21
+ import { type DeckCompanion, useBreakpoints, useDeckCompanions, useDeckState, useHoistStatusbar } from '../../hooks';
22
+ import { meta } from '../../meta';
23
23
  import { getMode } from '../../types';
24
24
  import { layoutAppliesTopbar } from '../../util';
25
- import { PlankContentError, PlankLoading } from '../Plank';
25
+ import { PlankErrorFallback, PlankLoading } from '../Plank';
26
+
27
+ import { ToggleComplementarySidebarButton } from './SidebarButton';
26
28
 
27
- const label = ['complementary sidebar title', { ns: DECK_PLUGIN }] satisfies Label;
29
+ const label = ['complementary sidebar title', { ns: meta.id }] satisfies Label;
28
30
 
29
31
  export type ComplementarySidebarProps = {
30
32
  current?: string;
31
33
  };
32
34
 
33
35
  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);
36
+ const { t } = useTranslation(meta.id);
37
+ const { invokeSync } = useOperationInvoker();
38
+ const { state, deck, updateState } = useDeckState();
39
+ const layoutMode = getMode(deck);
38
40
  const breakpoint = useBreakpoints();
39
41
  const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
40
42
  const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);
41
43
 
42
44
  const companions = useDeckCompanions();
43
- const activeCompanion = companions.find((companion) => getCompanionId(companion.id) === current);
44
- const activeId = activeCompanion && getCompanionId(activeCompanion.id);
45
+ const activeCompanion = companions.find((companion) => getCompanionVariant(companion.id) === current);
46
+ const activeId = activeCompanion && getCompanionVariant(activeCompanion.id);
45
47
  const [internalValue, setInternalValue] = useState(activeId);
46
48
 
47
49
  useEffect(() => {
@@ -52,14 +54,17 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
52
54
  (event: MouseEvent) => {
53
55
  const nextValue = event.currentTarget.getAttribute('data-value') as string;
54
56
  if (nextValue === activeId) {
55
- layout.complementarySidebarState = layout.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';
57
+ updateState((state) => ({
58
+ ...state,
59
+ complementarySidebarState: state.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded',
60
+ }));
56
61
  } else {
57
62
  setInternalValue(nextValue);
58
- layout.complementarySidebarState = 'expanded';
59
- void dispatch(createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: nextValue }));
63
+ updateState((state) => ({ ...state, complementarySidebarState: 'expanded' }));
64
+ invokeSync(LayoutOperation.UpdateComplementary, { subject: nextValue });
60
65
  }
61
66
  },
62
- [layout, activeId, dispatch],
67
+ [state.complementarySidebarState, activeId, invokeSync, updateState],
63
68
  );
64
69
 
65
70
  const data = useMemo(
@@ -73,38 +78,39 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
73
78
 
74
79
  useEffect(() => {
75
80
  if (!activeId) {
76
- void dispatch(
77
- createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),
78
- );
81
+ invokeSync(LayoutOperation.UpdateComplementary, { state: 'collapsed' });
79
82
  }
80
- }, [activeId, dispatch]);
83
+ }, [activeId, invokeSync]);
81
84
 
82
85
  return (
83
86
  <Main.ComplementarySidebar
84
87
  label={label}
85
88
  classNames={[
86
- topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',
87
- hoistStatusbar && 'block-end-[--statusbar-size]',
89
+ topbar && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',
90
+ hoistStatusbar && 'bottom-(--dx-statusbar-size)',
88
91
  ]}
89
92
  >
90
93
  <Tabs.Root orientation='vertical' verticalVariant='stateless' value={internalValue} classNames='contents'>
91
94
  <div
92
95
  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'
96
+ className={mx(
97
+ 'absolute z-[1] inset-y-0 end-0 !w-(--dx-r0-size)',
98
+ 'py-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] border-s border-subdued-separator',
99
+ 'grid grid-cols-1 grid-rows-[1fr_min-content] bg-toolbar-surface dx-contain-layout dx-app-drag',
100
+ )}
94
101
  >
95
- <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-[--rail-action] p-1 gap-1 !overflow-y-auto'>
102
+ <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-(--dx-rail-action) p-1 gap-1 overflow-y-auto!'>
96
103
  {companions.map((companion) => (
97
- <Tabs.Tab key={getCompanionId(companion.id)} value={getCompanionId(companion.id)} asChild>
104
+ <Tabs.Tab key={getCompanionVariant(companion.id)} value={getCompanionVariant(companion.id)} asChild>
98
105
  <IconButton
99
106
  label={toLocalizedString(companion.properties.label, t)}
100
107
  icon={companion.properties.icon}
101
- size={5}
102
108
  iconOnly
103
109
  tooltipSide='left'
104
- data-value={getCompanionId(companion.id)}
110
+ data-value={getCompanionVariant(companion.id)}
105
111
  variant={
106
- activeId === getCompanionId(companion.id)
107
- ? layout.complementarySidebarState === 'expanded'
112
+ activeId === getCompanionVariant(companion.id)
113
+ ? state.complementarySidebarState === 'expanded'
108
114
  ? 'primary'
109
115
  : 'default'
110
116
  : 'ghost'
@@ -115,21 +121,25 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
115
121
  ))}
116
122
  </Tabs.Tablist>
117
123
  {!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} />
124
+ <div role='none' className='grid grid-cols-1 auto-rows-(--dx-rail-item) p-1 overflow-y-auto'>
125
+ <Surface.Surface role='status-bar--r0-footer' limit={1} />
120
126
  </div>
121
127
  )}
122
- <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-[--rail-action] p-1'>
128
+ <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-(--dx-rail-action) p-1'>
123
129
  <ToggleComplementarySidebarButton />
124
130
  </div>
125
131
  </div>
126
132
  {activeId &&
127
133
  companions.map((companion) => (
128
134
  <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' })}
135
+ key={getCompanionVariant(companion.id)}
136
+ value={getCompanionVariant(companion.id)}
137
+ classNames={[
138
+ 'absolute data-[state="inactive"]:-z-[1] overflow-hidden',
139
+ 'inset-y-0 start-0 w-[calc(100%-var(--dx-r0-size))] lg:w-(--dx-r1-size)',
140
+ 'grid grid-cols-1 grid-rows-[var(--dx-rail-size)_1fr_min-content] py-[env(safe-area-inset-top)]',
141
+ ]}
142
+ {...(state.complementarySidebarState !== 'expanded' && { inert: true })}
133
143
  >
134
144
  <ComplementarySidebarPanel
135
145
  companion={companion}
@@ -154,40 +164,55 @@ type ComplementarySidebarPanelProps = {
154
164
  hoistStatusbar: boolean;
155
165
  };
156
166
 
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
167
  const ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }: ComplementarySidebarPanelProps) => {
162
- const { t } = useTranslation(DECK_PLUGIN);
168
+ const { t } = useTranslation(meta.id);
163
169
 
164
- if (getCompanionId(companion.id) !== activeId && !data) {
170
+ if (getCompanionVariant(companion.id) !== activeId && !data) {
165
171
  return null;
166
172
  }
167
173
 
168
- const Wrapper = companion.properties.fixed ? Fragment : ScrollArea;
174
+ const Wrapper = companion.properties.fixed ? Fragment : ScrollAreaWrapper;
169
175
 
170
176
  return (
171
177
  <>
172
- <h2 className='flex items-center pli-2 border-subduedSeparator border-be font-medium'>
173
- {toLocalizedString(companion.properties.label, t)}
174
- </h2>
178
+ <div role='none' className='flex items-center p-1 gap-1 border-b border-subdued-separator'>
179
+ <IconButton
180
+ label={toLocalizedString(companion.properties.label, t)}
181
+ icon={companion.properties.icon}
182
+ iconOnly
183
+ tooltipSide='left'
184
+ data-value={getCompanionVariant(companion.id)}
185
+ classNames='h-10 w-10'
186
+ variant='default'
187
+ />
188
+ <div role='none' className='px-1'>
189
+ {toLocalizedString(companion.properties.label, t)}
190
+ </div>
191
+ </div>
175
192
  <Wrapper>
176
- <Surface
177
- role={`deck-companion--${getCompanionId(companion.id)}`}
193
+ <Surface.Surface
194
+ role={`deck-companion--${getCompanionVariant(companion.id)}`}
178
195
  data={data}
179
- fallback={PlankContentError}
196
+ fallback={PlankErrorFallback}
180
197
  placeholder={<PlankLoading />}
181
198
  />
182
199
  </Wrapper>
183
200
  {!hoistStatusbar && (
184
201
  <div
185
202
  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)]'
203
+ 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
204
  >
188
- <Surface role='status-bar--r1-footer' limit={1} />
205
+ <Surface.Surface role='status-bar--r1-footer' limit={1} />
189
206
  </div>
190
207
  )}
191
208
  </>
192
209
  );
193
210
  };
211
+
212
+ const ScrollAreaWrapper = ({ children }: PropsWithChildren) => {
213
+ return (
214
+ <ScrollArea.Root thin orientation='vertical' classNames='grow'>
215
+ <ScrollArea.Viewport>{children}</ScrollArea.Viewport>
216
+ </ScrollArea.Root>
217
+ );
218
+ };
@@ -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
  };
@@ -2,13 +2,18 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { mx } from '@dxos/react-ui-theme';
5
+ import { mx } from '@dxos/ui-theme';
6
6
 
7
+ // TODO(burdon): Move to these as dx-components?
8
+
9
+ /** @private */
7
10
  export const soloInlinePadding =
8
- 'pis-[calc(env(safe-area-inset-left)+.25rem)] pie-[calc(env(safe-area-inset-left)+.25rem)]';
11
+ 'ps-[calc(env(safe-area-inset-left)+.25rem)] pe-[calc(env(safe-area-inset-right)+.25rem)]';
9
12
 
10
- const sidebarToggleStyles = 'bs-[--rail-item] is-[--rail-item] absolute block-end-2 z-[1] !bg-deckSurface lg:hidden';
13
+ const sidebarToggleStyles = 'h-(--dx-rail-item) w-(--dx-rail-item) absolute bottom-2 z-[1] !bg-deck-surface lg:hidden';
11
14
 
12
- export const fixedSidebarToggleStyles = mx(sidebarToggleStyles, 'inline-start-2');
15
+ /** @private */
16
+ export const fixedSidebarToggleStyles = mx(sidebarToggleStyles, 'left-2');
13
17
 
14
- export const fixedComplementarySidebarToggleStyles = mx(sidebarToggleStyles, 'inline-end-2');
18
+ /** @private */
19
+ export const fixedComplementarySidebarToggleStyles = mx(sidebarToggleStyles, 'right-2');