@dxos/plugin-deck 0.8.4-main.9be5663bfe → 0.8.4-main.abd8ff62ef

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 (297) hide show
  1. package/dist/lib/browser/DeckPlugin-YAAL6CBD.mjs +70 -0
  2. package/dist/lib/browser/DeckPlugin-YAAL6CBD.mjs.map +7 -0
  3. package/dist/lib/browser/{add-toast-HW74YZHJ.mjs → add-toast-JWJOQNVL.mjs} +3 -3
  4. package/dist/lib/browser/{add-toast-HW74YZHJ.mjs.map → add-toast-JWJOQNVL.mjs.map} +1 -1
  5. package/dist/lib/browser/{adjust-OXVHZTBE.mjs → adjust-RG6LIQLX.mjs} +10 -11
  6. package/dist/lib/browser/adjust-RG6LIQLX.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-KUTDCWZF.mjs → chunk-GLB73Q6U.mjs} +2 -10
  8. package/dist/lib/{node-esm/chunk-MLVJ2ODW.mjs.map → browser/chunk-GLB73Q6U.mjs.map} +2 -2
  9. package/dist/lib/browser/{chunk-BRZAVPMC.mjs → chunk-LSZ47AY3.mjs} +1 -1
  10. package/dist/lib/browser/{chunk-GFOCQS7S.mjs → chunk-MARE7ZFK.mjs} +22 -23
  11. package/dist/lib/browser/{chunk-GFOCQS7S.mjs.map → chunk-MARE7ZFK.mjs.map} +3 -3
  12. package/dist/lib/browser/{chunk-2YNVGCOQ.mjs → chunk-XM263CQU.mjs} +4 -20
  13. package/dist/lib/browser/chunk-XM263CQU.mjs.map +7 -0
  14. package/dist/lib/browser/{chunk-DF2VZ6W3.mjs → chunk-ZYYOSX5I.mjs} +1 -1
  15. package/dist/lib/browser/{chunk-DF2VZ6W3.mjs.map → chunk-ZYYOSX5I.mjs.map} +2 -2
  16. package/dist/lib/browser/{close-N5FCDT7Y.mjs → close-URA766JO.mjs} +6 -6
  17. package/dist/lib/browser/{close-N5FCDT7Y.mjs.map → close-URA766JO.mjs.map} +1 -1
  18. package/dist/lib/browser/index.mjs +8 -128
  19. package/dist/lib/browser/index.mjs.map +4 -4
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{open-J5HV42UN.mjs → open-OPFOOHCQ.mjs} +7 -10
  22. package/dist/lib/browser/open-OPFOOHCQ.mjs.map +7 -0
  23. package/dist/lib/browser/operations/index.mjs +3 -3
  24. package/dist/lib/browser/operations/index.mjs.map +3 -3
  25. package/dist/lib/browser/{revert-workspace-VWNN7RYF.mjs → revert-workspace-KP2Y4QLG.mjs} +3 -3
  26. package/dist/lib/browser/{revert-workspace-VWNN7RYF.mjs.map → revert-workspace-KP2Y4QLG.mjs.map} +1 -1
  27. package/dist/lib/browser/{scroll-into-view-CA7E3PSO.mjs → scroll-into-view-S5H2FGSQ.mjs} +3 -3
  28. package/dist/lib/browser/{scroll-into-view-CA7E3PSO.mjs.map → scroll-into-view-S5H2FGSQ.mjs.map} +1 -1
  29. package/dist/lib/browser/{set-YVWQQZLE.mjs → set-AEKFFSIX.mjs} +5 -5
  30. package/dist/lib/browser/{set-YVWQQZLE.mjs.map → set-AEKFFSIX.mjs.map} +1 -1
  31. package/dist/lib/browser/{set-layout-mode-DRNBZHE7.mjs → set-layout-mode-CWIGQDFZ.mjs} +5 -10
  32. package/dist/lib/browser/set-layout-mode-CWIGQDFZ.mjs.map +7 -0
  33. package/dist/lib/browser/{show-undo-KA2XHQ6E.mjs → show-undo-XFVEDKYC.mjs} +3 -3
  34. package/dist/lib/browser/{show-undo-KA2XHQ6E.mjs.map → show-undo-XFVEDKYC.mjs.map} +1 -1
  35. package/dist/lib/browser/{switch-workspace-U7SPENHU.mjs → switch-workspace-DSAAXZSI.mjs} +4 -12
  36. package/dist/lib/browser/switch-workspace-DSAAXZSI.mjs.map +7 -0
  37. package/dist/lib/browser/translations.mjs +57 -0
  38. package/dist/lib/browser/translations.mjs.map +7 -0
  39. package/dist/lib/browser/types/index.mjs +1 -1
  40. package/dist/lib/browser/{change-companion-Z3Q2UPX4.mjs → update-companion-IDBBBHT3.mjs} +11 -13
  41. package/dist/lib/browser/update-companion-IDBBBHT3.mjs.map +7 -0
  42. package/dist/lib/browser/{update-complementary-W6UVLWLI.mjs → update-complementary-55PNO5MD.mjs} +3 -3
  43. package/dist/lib/browser/{update-complementary-W6UVLWLI.mjs.map → update-complementary-55PNO5MD.mjs.map} +1 -1
  44. package/dist/lib/browser/{update-dialog-VCTI7WKS.mjs → update-dialog-VNARIANC.mjs} +3 -3
  45. package/dist/lib/browser/{update-dialog-VCTI7WKS.mjs.map → update-dialog-VNARIANC.mjs.map} +1 -1
  46. package/dist/lib/browser/{update-plank-size-6TPVOYLT.mjs → update-plank-size-H63PRRXS.mjs} +5 -5
  47. package/dist/lib/browser/{update-plank-size-6TPVOYLT.mjs.map → update-plank-size-H63PRRXS.mjs.map} +1 -1
  48. package/dist/lib/browser/{update-popover-4EVVZSB6.mjs → update-popover-ODTPZ3JL.mjs} +3 -3
  49. package/dist/lib/browser/{update-popover-4EVVZSB6.mjs.map → update-popover-ODTPZ3JL.mjs.map} +1 -1
  50. package/dist/lib/browser/{update-sidebar-PAZARC4Q.mjs → update-sidebar-JDVQ36WK.mjs} +3 -3
  51. package/dist/lib/browser/{update-sidebar-PAZARC4Q.mjs.map → update-sidebar-JDVQ36WK.mjs.map} +1 -1
  52. package/dist/lib/node-esm/DeckPlugin-ZILU7U44.mjs +71 -0
  53. package/dist/lib/node-esm/DeckPlugin-ZILU7U44.mjs.map +7 -0
  54. package/dist/lib/node-esm/{add-toast-FA7NTWKA.mjs → add-toast-JUTN4GTI.mjs} +3 -3
  55. package/dist/lib/node-esm/{add-toast-FA7NTWKA.mjs.map → add-toast-JUTN4GTI.mjs.map} +1 -1
  56. package/dist/lib/node-esm/{adjust-G6FGZW6H.mjs → adjust-P5QK33P4.mjs} +10 -11
  57. package/dist/lib/node-esm/adjust-P5QK33P4.mjs.map +7 -0
  58. package/dist/lib/node-esm/{chunk-6BWQJDNT.mjs → chunk-FO7YDJZ3.mjs} +22 -23
  59. package/dist/lib/node-esm/{chunk-6BWQJDNT.mjs.map → chunk-FO7YDJZ3.mjs.map} +3 -3
  60. package/dist/lib/node-esm/{chunk-MB4SDDVY.mjs → chunk-KY7ZCANM.mjs} +1 -1
  61. package/dist/lib/node-esm/{chunk-GI5JXNBT.mjs → chunk-L7OVX7CV.mjs} +4 -20
  62. package/dist/lib/node-esm/chunk-L7OVX7CV.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-MLVJ2ODW.mjs → chunk-SHSR2CYO.mjs} +2 -10
  64. package/dist/lib/{browser/chunk-KUTDCWZF.mjs.map → node-esm/chunk-SHSR2CYO.mjs.map} +2 -2
  65. package/dist/lib/node-esm/{chunk-IRWCUYJY.mjs → chunk-WGBUTT5K.mjs} +1 -1
  66. package/dist/lib/node-esm/{chunk-IRWCUYJY.mjs.map → chunk-WGBUTT5K.mjs.map} +2 -2
  67. package/dist/lib/node-esm/{close-AMA63RJN.mjs → close-U5VC7ERP.mjs} +6 -6
  68. package/dist/lib/node-esm/{close-AMA63RJN.mjs.map → close-U5VC7ERP.mjs.map} +1 -1
  69. package/dist/lib/node-esm/index.mjs +8 -128
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/{open-KRCARMEB.mjs → open-4B3P5XGS.mjs} +7 -10
  73. package/dist/lib/node-esm/open-4B3P5XGS.mjs.map +7 -0
  74. package/dist/lib/node-esm/operations/index.mjs +3 -3
  75. package/dist/lib/node-esm/operations/index.mjs.map +3 -3
  76. package/dist/lib/node-esm/{revert-workspace-A2K3JQFS.mjs → revert-workspace-QD63M2U7.mjs} +3 -3
  77. package/dist/lib/node-esm/{revert-workspace-A2K3JQFS.mjs.map → revert-workspace-QD63M2U7.mjs.map} +1 -1
  78. package/dist/lib/node-esm/{scroll-into-view-B2U4RQK7.mjs → scroll-into-view-G5M2EWK7.mjs} +3 -3
  79. package/dist/lib/node-esm/{scroll-into-view-B2U4RQK7.mjs.map → scroll-into-view-G5M2EWK7.mjs.map} +1 -1
  80. package/dist/lib/node-esm/{set-HCWNW76S.mjs → set-ERJCXZBY.mjs} +5 -5
  81. package/dist/lib/node-esm/{set-HCWNW76S.mjs.map → set-ERJCXZBY.mjs.map} +1 -1
  82. package/dist/lib/node-esm/{set-layout-mode-E27AI5KE.mjs → set-layout-mode-BOZD7744.mjs} +5 -10
  83. package/dist/lib/node-esm/set-layout-mode-BOZD7744.mjs.map +7 -0
  84. package/dist/lib/node-esm/{show-undo-YTZXH422.mjs → show-undo-H5BRBYDC.mjs} +3 -3
  85. package/dist/lib/node-esm/{show-undo-YTZXH422.mjs.map → show-undo-H5BRBYDC.mjs.map} +1 -1
  86. package/dist/lib/node-esm/{switch-workspace-AQCNGS4Y.mjs → switch-workspace-F54PXE5N.mjs} +4 -12
  87. package/dist/lib/node-esm/switch-workspace-F54PXE5N.mjs.map +7 -0
  88. package/dist/lib/node-esm/translations.mjs +58 -0
  89. package/dist/lib/node-esm/translations.mjs.map +7 -0
  90. package/dist/lib/node-esm/types/index.mjs +1 -1
  91. package/dist/lib/node-esm/{change-companion-V6343HMY.mjs → update-companion-47LMKL5R.mjs} +11 -13
  92. package/dist/lib/node-esm/update-companion-47LMKL5R.mjs.map +7 -0
  93. package/dist/lib/node-esm/{update-complementary-7HIRM7OT.mjs → update-complementary-7VYYG7L2.mjs} +3 -3
  94. package/dist/lib/node-esm/{update-complementary-7HIRM7OT.mjs.map → update-complementary-7VYYG7L2.mjs.map} +1 -1
  95. package/dist/lib/node-esm/{update-dialog-F3JF7MBZ.mjs → update-dialog-CABL7OWW.mjs} +3 -3
  96. package/dist/lib/node-esm/{update-dialog-F3JF7MBZ.mjs.map → update-dialog-CABL7OWW.mjs.map} +1 -1
  97. package/dist/lib/node-esm/{update-plank-size-IIZKU7YR.mjs → update-plank-size-WYTSMZF2.mjs} +5 -5
  98. package/dist/lib/node-esm/{update-plank-size-IIZKU7YR.mjs.map → update-plank-size-WYTSMZF2.mjs.map} +1 -1
  99. package/dist/lib/node-esm/{update-popover-RO5QEH4C.mjs → update-popover-YZDYGL7G.mjs} +3 -3
  100. package/dist/lib/node-esm/{update-popover-RO5QEH4C.mjs.map → update-popover-YZDYGL7G.mjs.map} +1 -1
  101. package/dist/lib/node-esm/{update-sidebar-2RX6VLEK.mjs → update-sidebar-HV736LUN.mjs} +3 -3
  102. package/dist/lib/node-esm/{update-sidebar-2RX6VLEK.mjs.map → update-sidebar-HV736LUN.mjs.map} +1 -1
  103. package/dist/types/src/DeckPlugin.d.ts +1 -0
  104. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  105. package/dist/types/src/DeckPlugin.node.d.ts +4 -0
  106. package/dist/types/src/DeckPlugin.node.d.ts.map +1 -0
  107. package/dist/types/src/DeckPlugin.test.d.ts +2 -0
  108. package/dist/types/src/DeckPlugin.test.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/check-app-scheme.d.ts +1 -1
  111. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  112. package/dist/types/src/capabilities/index.d.ts +18 -30
  113. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  115. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/settings.d.ts +2 -13
  119. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  120. package/dist/types/src/capabilities/state.d.ts +16 -16
  121. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  122. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  123. package/dist/types/src/capabilities/url-handler.d.ts +1 -1
  124. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  125. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  126. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +42 -52
  127. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/Matrix/Matrix.d.ts +2 -2
  129. package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -1
  130. package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -1
  131. package/dist/types/src/containers/Deck/Banner.d.ts +1 -1
  132. package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -1
  133. package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -1
  134. package/dist/types/src/containers/Deck/Deck.stories.d.ts +42 -52
  135. package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -1
  136. package/dist/types/src/containers/Deck/DeckContent.d.ts +4 -4
  137. package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -1
  138. package/dist/types/src/containers/Deck/DeckRoot.d.ts +5 -8
  139. package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -1
  140. package/dist/types/src/containers/Deck/DeckViewport.d.ts +4 -7
  141. package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -1
  142. package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -1
  143. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -1
  144. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +42 -52
  145. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
  146. package/dist/types/src/containers/DeckLayout/Dialog.d.ts.map +1 -1
  147. package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -1
  148. package/dist/types/src/containers/DeckLayout/Toast.d.ts +1 -1
  149. package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -1
  150. package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -1
  151. package/dist/types/src/containers/Plank/Plank.d.ts +2 -2
  152. package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -1
  153. package/dist/types/src/containers/Plank/Plank.stories.d.ts +42 -52
  154. package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -1
  155. package/dist/types/src/containers/Plank/PlankComponent.d.ts +2 -0
  156. package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +1 -1
  157. package/dist/types/src/containers/Plank/PlankContent.d.ts +1 -1
  158. package/dist/types/src/containers/Plank/PlankControls.d.ts.map +1 -1
  159. package/dist/types/src/containers/Plank/PlankError.d.ts +1 -1
  160. package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -1
  161. package/dist/types/src/containers/Plank/PlankHeading.d.ts +2 -1
  162. package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +1 -1
  163. package/dist/types/src/containers/Plank/PlankRoot.d.ts +2 -2
  164. package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -1
  165. package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  166. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts +1 -1
  167. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useBreakpoints.d.ts +1 -1
  169. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  170. package/dist/types/src/hooks/useDeckCompanions.d.ts +2 -1
  171. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  172. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  173. package/dist/types/src/hooks/useMainSize.d.ts.map +1 -1
  174. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  175. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -1
  176. package/dist/types/src/index.d.ts +3 -2
  177. package/dist/types/src/index.d.ts.map +1 -1
  178. package/dist/types/src/layout.d.ts.map +1 -1
  179. package/dist/types/src/operations/add-toast.d.ts +1 -1
  180. package/dist/types/src/operations/add-toast.d.ts.map +1 -1
  181. package/dist/types/src/operations/adjust.d.ts +1 -1
  182. package/dist/types/src/operations/adjust.d.ts.map +1 -1
  183. package/dist/types/src/operations/close.d.ts +1 -1
  184. package/dist/types/src/operations/close.d.ts.map +1 -1
  185. package/dist/types/src/operations/definitions.d.ts +4 -7
  186. package/dist/types/src/operations/definitions.d.ts.map +1 -1
  187. package/dist/types/src/operations/helpers.d.ts.map +1 -1
  188. package/dist/types/src/operations/index.d.ts +1 -1
  189. package/dist/types/src/operations/index.d.ts.map +1 -1
  190. package/dist/types/src/operations/open.d.ts +1 -1
  191. package/dist/types/src/operations/open.d.ts.map +1 -1
  192. package/dist/types/src/operations/revert-workspace.d.ts +1 -1
  193. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -1
  194. package/dist/types/src/operations/scroll-into-view.d.ts +1 -1
  195. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -1
  196. package/dist/types/src/operations/set-layout-mode.d.ts +1 -1
  197. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -1
  198. package/dist/types/src/operations/set.d.ts +1 -1
  199. package/dist/types/src/operations/set.d.ts.map +1 -1
  200. package/dist/types/src/operations/show-undo.d.ts +1 -1
  201. package/dist/types/src/operations/show-undo.d.ts.map +1 -1
  202. package/dist/types/src/operations/switch-workspace.d.ts +1 -1
  203. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -1
  204. package/dist/types/src/operations/update-companion.d.ts +5 -0
  205. package/dist/types/src/operations/update-companion.d.ts.map +1 -0
  206. package/dist/types/src/operations/update-complementary.d.ts +1 -1
  207. package/dist/types/src/operations/update-complementary.d.ts.map +1 -1
  208. package/dist/types/src/operations/update-dialog.d.ts +1 -1
  209. package/dist/types/src/operations/update-dialog.d.ts.map +1 -1
  210. package/dist/types/src/operations/update-plank-size.d.ts +1 -1
  211. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -1
  212. package/dist/types/src/operations/update-popover.d.ts +1 -1
  213. package/dist/types/src/operations/update-popover.d.ts.map +1 -1
  214. package/dist/types/src/operations/update-sidebar.d.ts +1 -1
  215. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -1
  216. package/dist/types/src/translations.d.ts +42 -53
  217. package/dist/types/src/translations.d.ts.map +1 -1
  218. package/dist/types/src/types/Settings.d.ts +7 -6
  219. package/dist/types/src/types/Settings.d.ts.map +1 -1
  220. package/dist/types/src/types/capabilities.d.ts +18 -29
  221. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  222. package/dist/types/src/types/events.d.ts.map +1 -1
  223. package/dist/types/src/types/schema.d.ts +0 -10
  224. package/dist/types/src/types/schema.d.ts.map +1 -1
  225. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  226. package/dist/types/src/util/plank-url-params.d.ts.map +1 -1
  227. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -1
  228. package/dist/types/src/util/set-active.d.ts.map +1 -1
  229. package/dist/types/tsconfig.tsbuildinfo +1 -1
  230. package/package.json +56 -55
  231. package/src/DeckPlugin.node.ts +17 -0
  232. package/src/DeckPlugin.test.ts +27 -0
  233. package/src/DeckPlugin.ts +6 -5
  234. package/src/capabilities/app-graph-builder.ts +2 -2
  235. package/src/capabilities/index.ts +1 -1
  236. package/src/capabilities/operation-handler.ts +1 -1
  237. package/src/capabilities/react-surface.tsx +1 -2
  238. package/src/capabilities/settings.ts +1 -1
  239. package/src/capabilities/tools.ts +3 -3
  240. package/src/capabilities/url-handler.ts +6 -1
  241. package/src/components/DeckSettings/DeckSettings.stories.tsx +2 -1
  242. package/src/components/DeckSettings/DeckSettings.tsx +8 -47
  243. package/src/components/Matrix/Matrix.stories.tsx +16 -12
  244. package/src/containers/Deck/Deck.stories.tsx +1 -1
  245. package/src/containers/Deck/DeckViewport.tsx +10 -10
  246. package/src/containers/DeckLayout/ActiveNode.tsx +2 -2
  247. package/src/containers/DeckLayout/DeckLayout.stories.tsx +17 -13
  248. package/src/containers/DeckLayout/Dialog.tsx +8 -2
  249. package/src/containers/DeckLayout/Popover.tsx +6 -4
  250. package/src/containers/Plank/Plank.stories.tsx +9 -7
  251. package/src/containers/Plank/PlankComponent.tsx +58 -21
  252. package/src/containers/Plank/PlankControls.tsx +2 -2
  253. package/src/containers/Plank/PlankError.tsx +1 -1
  254. package/src/containers/Plank/PlankHeading.tsx +16 -6
  255. package/src/containers/Plank/PlankRoot.tsx +2 -2
  256. package/src/containers/Sidebar/ComplementarySidebar.tsx +2 -1
  257. package/src/containers/Sidebar/Sidebar.tsx +2 -2
  258. package/src/containers/Sidebar/SidebarButton.tsx +7 -1
  259. package/src/hooks/useDeckCompanions.ts +2 -1
  260. package/src/index.ts +10 -2
  261. package/src/operations/add-toast.ts +1 -1
  262. package/src/operations/adjust.ts +3 -3
  263. package/src/operations/close.ts +1 -1
  264. package/src/operations/definitions.ts +5 -17
  265. package/src/operations/index.ts +2 -2
  266. package/src/operations/open.ts +1 -1
  267. package/src/operations/revert-workspace.ts +1 -1
  268. package/src/operations/scroll-into-view.ts +1 -1
  269. package/src/operations/set-layout-mode.ts +1 -1
  270. package/src/operations/set.ts +1 -1
  271. package/src/operations/show-undo.ts +1 -1
  272. package/src/operations/switch-workspace.ts +1 -1
  273. package/src/operations/{change-companion.ts → update-companion.ts} +5 -5
  274. package/src/operations/update-complementary.ts +1 -1
  275. package/src/operations/update-dialog.ts +1 -1
  276. package/src/operations/update-plank-size.ts +1 -1
  277. package/src/operations/update-popover.ts +1 -1
  278. package/src/operations/update-sidebar.ts +1 -1
  279. package/src/translations.ts +2 -12
  280. package/src/types/Settings.ts +31 -6
  281. package/src/types/schema.ts +0 -7
  282. package/dist/lib/browser/adjust-OXVHZTBE.mjs.map +0 -7
  283. package/dist/lib/browser/change-companion-Z3Q2UPX4.mjs.map +0 -7
  284. package/dist/lib/browser/chunk-2YNVGCOQ.mjs.map +0 -7
  285. package/dist/lib/browser/open-J5HV42UN.mjs.map +0 -7
  286. package/dist/lib/browser/set-layout-mode-DRNBZHE7.mjs.map +0 -7
  287. package/dist/lib/browser/switch-workspace-U7SPENHU.mjs.map +0 -7
  288. package/dist/lib/node-esm/adjust-G6FGZW6H.mjs.map +0 -7
  289. package/dist/lib/node-esm/change-companion-V6343HMY.mjs.map +0 -7
  290. package/dist/lib/node-esm/chunk-GI5JXNBT.mjs.map +0 -7
  291. package/dist/lib/node-esm/open-KRCARMEB.mjs.map +0 -7
  292. package/dist/lib/node-esm/set-layout-mode-E27AI5KE.mjs.map +0 -7
  293. package/dist/lib/node-esm/switch-workspace-AQCNGS4Y.mjs.map +0 -7
  294. package/dist/types/src/operations/change-companion.d.ts +0 -5
  295. package/dist/types/src/operations/change-companion.d.ts.map +0 -1
  296. /package/dist/lib/browser/{chunk-BRZAVPMC.mjs.map → chunk-LSZ47AY3.mjs.map} +0 -0
  297. /package/dist/lib/node-esm/{chunk-MB4SDDVY.mjs.map → chunk-KY7ZCANM.mjs.map} +0 -0
@@ -19,11 +19,12 @@ import { random } from '@dxos/random';
19
19
  import { useAsyncEffect } from '@dxos/react-hooks';
20
20
  import { Icon, List, ListItem, Panel } from '@dxos/react-ui';
21
21
  import { linkedSegment } from '@dxos/react-ui-attention';
22
- import { Json } from '@dxos/react-ui-syntax-highlighter';
22
+ import { Syntax } from '@dxos/react-ui-syntax-highlighter';
23
23
  import { Loading, withLayout } from '@dxos/react-ui/testing';
24
24
 
25
25
  import { OperationHandler } from '#capabilities';
26
26
  import { meta as pluginMeta } from '#meta';
27
+ import { translations } from '#translations';
27
28
  import {
28
29
  DeckCapabilities,
29
30
  type EphemeralDeckState,
@@ -34,7 +35,6 @@ import {
34
35
  PLANK_COMPANION_TYPE,
35
36
  } from '#types';
36
37
 
37
- import { translations } from '../../translations';
38
38
  import { DeckLayout } from './DeckLayout';
39
39
 
40
40
  random.seed(1234);
@@ -188,12 +188,14 @@ const TestPlugin = Plugin.define(pluginMeta).pipe(
188
188
  <Panel.Root>
189
189
  <Panel.Content className='grid grid-rows-[min-content_1fr]'>
190
190
  {attendableId && <ItemComponent id={attendableId} />}
191
- <Json.Root data={subject}>
192
- <Json.Content>
193
- <Json.Filter />
194
- <Json.Data />
195
- </Json.Content>
196
- </Json.Root>
191
+ <Syntax.Root data={subject}>
192
+ <Syntax.Content>
193
+ <Syntax.Filter />
194
+ <Syntax.Viewport>
195
+ <Syntax.Code />
196
+ </Syntax.Viewport>
197
+ </Syntax.Content>
198
+ </Syntax.Root>
197
199
  </Panel.Content>
198
200
  </Panel.Root>
199
201
  );
@@ -210,16 +212,18 @@ const TestPlugin = Plugin.define(pluginMeta).pipe(
210
212
  }
211
213
 
212
214
  return (
213
- <Json.Root
215
+ <Syntax.Root
214
216
  data={{
215
217
  primaryItem: companionTo,
216
218
  companion: { data: subject, properties, variant },
217
219
  }}
218
220
  >
219
- <Json.Content>
220
- <Json.Data />
221
- </Json.Content>
222
- </Json.Root>
221
+ <Syntax.Content>
222
+ <Syntax.Viewport>
223
+ <Syntax.Code />
224
+ </Syntax.Viewport>
225
+ </Syntax.Content>
226
+ </Syntax.Root>
223
227
  );
224
228
  },
225
229
  }),
@@ -5,6 +5,7 @@
5
5
  import React, { useCallback } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
+ import { AppSurface } from '@dxos/app-toolkit/ui';
8
9
  import { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';
9
10
 
10
11
  import { useDeckState } from '#hooks';
@@ -30,7 +31,7 @@ export const Dialog = () => {
30
31
  {dialogBlockAlign === 'end' ? (
31
32
  // TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.
32
33
  <Surface.Surface
33
- role='dialog'
34
+ type={AppSurface.Dialog}
34
35
  data={dialogContent ?? undefined}
35
36
  limit={1}
36
37
  fallback={PlankErrorFallback}
@@ -38,7 +39,12 @@ export const Dialog = () => {
38
39
  />
39
40
  ) : (
40
41
  <Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>
41
- <Surface.Surface role='dialog' data={dialogContent ?? undefined} limit={1} fallback={PlankErrorFallback} />
42
+ <Surface.Surface
43
+ type={AppSurface.Dialog}
44
+ data={dialogContent ?? undefined}
45
+ limit={1}
46
+ fallback={PlankErrorFallback}
47
+ />
42
48
  </Overlay>
43
49
  )}
44
50
  </Root>
@@ -8,7 +8,7 @@ import * as Option from 'effect/Option';
8
8
  import React, { type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';
9
9
 
10
10
  import { Surface } from '@dxos/app-framework/ui';
11
- import { useObjectMenuItems } from '@dxos/app-toolkit/ui';
11
+ import { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';
12
12
  import { Annotation, Obj } from '@dxos/echo';
13
13
  import {
14
14
  Card,
@@ -122,8 +122,8 @@ export const PopoverContent = () => {
122
122
  >
123
123
  <Popover.Viewport>
124
124
  {/* Base popover */}
125
- {state.popoverKind === 'base' && (
126
- <Surface.Surface role='popover' data={state.popoverContent ?? undefined} limit={1} />
125
+ {state.popoverKind === 'base' && state.popoverContent && 'component' in state.popoverContent && (
126
+ <Surface.Surface type={AppSurface.Popover} data={state.popoverContent} limit={1} />
127
127
  )}
128
128
 
129
129
  {/* Card popover */}
@@ -147,7 +147,9 @@ export const PopoverContent = () => {
147
147
  </Card.IconBlock>
148
148
  </Card.Toolbar>
149
149
 
150
- <Surface.Surface role='card--content' data={state.popoverContent ?? undefined} limit={1} />
150
+ {state.popoverContent && 'subject' in state.popoverContent && (
151
+ <Surface.Surface type={AppSurface.Card} data={state.popoverContent} limit={1} />
152
+ )}
151
153
  </Card.Root>
152
154
  </Menu.Root>
153
155
  )}
@@ -14,14 +14,14 @@ import { corePlugins } from '@dxos/plugin-testing';
14
14
  import { random } from '@dxos/random';
15
15
  import { Main } from '@dxos/react-ui';
16
16
  import { StackContext } from '@dxos/react-ui-stack';
17
- import { Json } from '@dxos/react-ui-syntax-highlighter';
17
+ import { Syntax } from '@dxos/react-ui-syntax-highlighter';
18
18
  import { Loading } from '@dxos/react-ui/testing';
19
19
  import { Organization } from '@dxos/types';
20
20
 
21
21
  import { DeckSettings, DeckState } from '#capabilities';
22
22
  import { meta as pluginMeta } from '#meta';
23
+ import { translations } from '#translations';
23
24
 
24
- import { translations } from '../../translations';
25
25
  import { Plank } from './Plank';
26
26
 
27
27
  const TestPlugin = Plugin.define(pluginMeta).pipe(
@@ -51,11 +51,13 @@ const storySurfaceExtension = Capability.contributes(
51
51
  }
52
52
 
53
53
  return (
54
- <Json.Root data={subject}>
55
- <Json.Content>
56
- <Json.Data />
57
- </Json.Content>
58
- </Json.Root>
54
+ <Syntax.Root data={subject}>
55
+ <Syntax.Content>
56
+ <Syntax.Viewport>
57
+ <Syntax.Code />
58
+ </Syntax.Viewport>
59
+ </Syntax.Content>
60
+ </Syntax.Root>
59
61
  );
60
62
  },
61
63
  }),
@@ -6,12 +6,12 @@ import { useFocusFinders } from '@fluentui/react-tabster';
6
6
  import React, { type KeyboardEvent, memo, useCallback, useLayoutEffect, useMemo, useRef } from 'react';
7
7
 
8
8
  import { Surface } from '@dxos/app-framework/ui';
9
- import { type AppSurface } from '@dxos/app-toolkit/ui';
9
+ import { AppSurface } from '@dxos/app-toolkit/ui';
10
10
  import { debounce } from '@dxos/async';
11
11
  import { type Node } from '@dxos/plugin-graph';
12
12
  import { getLinkedVariant } from '@dxos/react-ui-attention';
13
13
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
14
- import { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';
14
+ import { StackItem, type StackItemSize, railGridHorizontal } from '@dxos/react-ui-stack';
15
15
  import { mainIntrinsicSize, mx } from '@dxos/ui-theme';
16
16
 
17
17
  import { useMainSize } from '#hooks';
@@ -22,6 +22,32 @@ import { PlankHeading } from './PlankHeading';
22
22
  import { PlankLoading } from './PlankLoading';
23
23
  import { PlankRootProps, usePlankContext } from './PlankRoot';
24
24
 
25
+ /**
26
+ * JS-based smooth scroll that won't be interrupted by MutationObserver or layout changes.
27
+ */
28
+ const smoothScrollTo = (element: HTMLElement, target: number, duration: number) => {
29
+ const start = element.scrollLeft;
30
+ const distance = target - start;
31
+ const startTime = performance.now();
32
+
33
+ const step = (currentTime: number) => {
34
+ const elapsed = currentTime - startTime;
35
+ const progress = Math.min(elapsed / duration, 1);
36
+ // Ease-out cubic.
37
+ const eased = 1 - Math.pow(1 - progress, 3);
38
+ element.scrollLeft = start + distance * eased;
39
+ if (progress < 1) {
40
+ requestAnimationFrame(step);
41
+ }
42
+ };
43
+
44
+ requestAnimationFrame(step);
45
+ };
46
+
47
+ // NOTE: Calibrated to show PLANK + COMPANION on MBP 16" screen.
48
+ export const DEFAULT_SIZE = 48 satisfies StackItemSize;
49
+ export const DEFAULT_COMPANION_SIZE = 35 satisfies StackItemSize;
50
+
25
51
  export type PlankComponentProps = Pick<PlankRootProps, 'part'> & {
26
52
  id: string;
27
53
  path?: string[];
@@ -40,25 +66,29 @@ export const PlankComponent = memo(
40
66
 
41
67
  const canResize = layoutMode === 'multi';
42
68
  const { findFirstFocusable } = useFocusFinders();
69
+ const isCompanion = companioned === 'companion';
43
70
  const attentionAttrs = useAttentionAttributes(primary?.id ?? id);
44
- const orderId = companioned === 'companion' ? primary?.id : id;
71
+ const orderId = isCompanion ? primary?.id : id;
45
72
  const index = orderId && active ? active.findIndex((entryId) => entryId === orderId) : -1;
46
73
  const length = active?.length ?? 1;
47
74
  const isOrdered = !!active && index >= 0;
48
75
  const canIncrementStart = isOrdered && index > 0;
49
76
  const canIncrementEnd = isOrdered && index < length - 1;
50
-
51
77
  const rootElement = useRef<HTMLDivElement | null>(null);
52
-
53
78
  const variant = node?.type === PLANK_COMPANION_TYPE ? getLinkedVariant(id) : undefined;
54
- const sizeKey = id.split('+')[0];
55
- const size = plankSizing?.[sizeKey] as number | undefined;
56
79
 
80
+ // Sizing.
81
+ const sizeAttrs = useMainSize();
82
+ const sizeKey = id.split('+')[0];
83
+ const size = isCompanion
84
+ ? DEFAULT_COMPANION_SIZE
85
+ : ((plankSizing?.[sizeKey] as number | undefined) ?? DEFAULT_SIZE);
57
86
  const handleSizeChange = useCallback(
58
87
  debounce((nextSize: number) => {
59
- onResize?.(sizeKey, nextSize);
88
+ const size = Math.round(nextSize);
89
+ onResize?.(sizeKey, size);
60
90
  }, 200),
61
- [onResize, sizeKey],
91
+ [sizeKey, onResize],
62
92
  );
63
93
 
64
94
  // TODO(thure): Tabster's focus group should handle moving focus to Main, but something is blocking it.
@@ -76,8 +106,17 @@ export const PlankComponent = memo(
76
106
  }, []);
77
107
 
78
108
  useLayoutEffect(() => {
79
- if (scrollIntoView === id) {
80
- layoutMode === 'multi' && rootElement.current?.scrollIntoView({ behavior: 'smooth', inline: 'center' });
109
+ if (scrollIntoView === id && layoutMode === 'multi' && rootElement.current) {
110
+ const element = rootElement.current;
111
+ const scrollParent = element.closest('[style*="overflow"], .overflow-x-auto') as HTMLElement | null;
112
+ if (scrollParent) {
113
+ const elementRect = element.getBoundingClientRect();
114
+ const parentRect = scrollParent.getBoundingClientRect();
115
+ const targetScrollLeft = scrollParent.scrollLeft + (elementRect.left - parentRect.left);
116
+
117
+ smoothScrollTo(scrollParent, targetScrollLeft, 300);
118
+ }
119
+
81
120
  onScrollIntoView?.(undefined);
82
121
  }
83
122
  }, [id, scrollIntoView, layoutMode, onScrollIntoView]);
@@ -85,7 +124,6 @@ export const PlankComponent = memo(
85
124
  const isSolo = layoutMode.startsWith('solo') && part === 'solo';
86
125
  const isAttendable =
87
126
  (layoutMode.startsWith('solo') && part.startsWith('solo')) || (layoutMode === 'multi' && part === 'multi');
88
- const sizeAttrs = useMainSize();
89
127
 
90
128
  const data = useMemo<AppSurface.ArticleData | undefined>(
91
129
  () =>
@@ -104,8 +142,9 @@ export const PlankComponent = memo(
104
142
  // TODO(wittjosiah): Change prop to accept a component.
105
143
  const placeholder = useMemo(() => <PlankLoading />, []);
106
144
 
145
+ const Root = part.startsWith('solo') ? 'article' : StackItem.Root;
107
146
  const fullscreen = layoutMode === 'solo--fullscreen';
108
- const className = mx(
147
+ const classNames = [
109
148
  'dx-attention-surface relative dx-focus-ring-inset-over-all dx-density-coarse',
110
149
  isSolo && 'absolute inset-0',
111
150
  isSolo && mainIntrinsicSize,
@@ -113,14 +152,12 @@ export const PlankComponent = memo(
113
152
  part.startsWith('solo') && 'grid',
114
153
  part.startsWith('solo-') && 'grid-rows-subgrid row-span-2 min-w-0',
115
154
  fullscreen && 'grid-rows-1',
116
- part === 'multi' && (companioned === 'companion' ? 'border-separator! border-e' : 'border-separator! border-x'),
155
+ part === 'multi' && (isCompanion ? 'border-separator! border-e' : 'border-separator! border-x'),
117
156
  part === 'solo-companion' && 'border-separator! border-s',
118
157
  settings?.encapsulatedPlanks &&
119
158
  !part.startsWith('solo') &&
120
159
  'mx-(--main-spacing) border-separator! border rounded-sm overflow-hidden',
121
- );
122
-
123
- const Root = part.startsWith('solo') ? 'article' : StackItem.Root;
160
+ ];
124
161
 
125
162
  return (
126
163
  <Root
@@ -130,15 +167,15 @@ export const PlankComponent = memo(
130
167
  tabIndex={0}
131
168
  {...(part.startsWith('solo')
132
169
  ? ({
133
- className,
170
+ className: mx(classNames),
134
171
  ...sizeAttrs,
135
172
  } as any)
136
173
  : {
137
174
  role: 'article',
138
- classNames: className,
175
+ item: { id },
176
+ classNames,
139
177
  order,
140
178
  size,
141
- item: { id },
142
179
  onSizeChange: handleSizeChange,
143
180
  })}
144
181
  {...(isAttendable ? attentionAttrs : {})}
@@ -163,7 +200,7 @@ export const PlankComponent = memo(
163
200
  )}
164
201
  <Surface.Surface
165
202
  key={node.id}
166
- role='article'
203
+ type={AppSurface.Article}
167
204
  data={data}
168
205
  limit={1}
169
206
  fallback={PlankErrorFallback}
@@ -5,10 +5,10 @@
5
5
  import React, { forwardRef, useCallback } from 'react';
6
6
 
7
7
  import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
8
9
  import { ButtonGroup, type ButtonGroupProps, type ButtonProps, IconButton, useTranslation } from '@dxos/react-ui';
9
10
 
10
11
  import { meta } from '#meta';
11
- import { DeckOperation } from '#operations';
12
12
  import { type DeckAction, type LayoutMode } from '#types';
13
13
 
14
14
  export type PlankControlHandler = (event: DeckAction.PartAdjustment) => void;
@@ -37,7 +37,7 @@ export const PlankCompanionControls = forwardRef<HTMLDivElement, PlankCompanionC
37
37
  const { t } = useTranslation(meta.id);
38
38
  const { invokePromise } = useOperationInvoker();
39
39
  const handleCloseCompanion = useCallback(() => {
40
- return invokePromise(DeckOperation.ChangeCompanion, { companion: null });
40
+ return invokePromise(LayoutOperation.UpdateCompanion, { subject: null });
41
41
  }, [invokePromise]);
42
42
  return (
43
43
  <div ref={forwardedRef} className='contents dx-app-no-drag'>
@@ -56,7 +56,7 @@ export const PlankErrorFallback = ({ error }: ErrorFallbackProps) => {
56
56
 
57
57
  useEffect(() => {
58
58
  if (error) {
59
- log.error(error);
59
+ log.error('plank error', { error });
60
60
  }
61
61
  }, [error]);
62
62
 
@@ -5,7 +5,7 @@
5
5
  import React, { Fragment, type MouseEvent, memo, useCallback, useEffect, useMemo } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
- import { type AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { AppSurface } from '@dxos/app-toolkit/ui';
9
9
  import { Graph, type Node, useActionRunner } from '@dxos/plugin-graph';
10
10
  import { Icon, IconButton, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
11
  import { getLinkedVariant } from '@dxos/react-ui-attention';
@@ -37,6 +37,7 @@ export type PlankHeadingProps = {
37
37
  companioned?: 'primary' | 'companion';
38
38
  companions?: Node.Node[];
39
39
  actions?: StackItemSigilAction[];
40
+ debug?: boolean;
40
41
  };
41
42
 
42
43
  export const PlankHeading = memo(
@@ -54,9 +55,10 @@ export const PlankHeading = memo(
54
55
  companions,
55
56
  layoutMode,
56
57
  actions = [],
58
+ debug = false,
57
59
  }: PlankHeadingProps) => {
58
60
  const { t } = useTranslation(meta.id);
59
- const { graph, onAdjust, onChangeCompanion } = usePlankContext('PlankHeading');
61
+ const { graph, onAdjust, onUpdateCompanion } = usePlankContext('PlankHeading');
60
62
  const runAction = useActionRunner();
61
63
  const breakpoint = useBreakpoints();
62
64
  const icon = node?.properties?.icon ?? 'ph--placeholder--regular';
@@ -129,10 +131,10 @@ export const PlankHeading = memo(
129
131
  const target = (event.target as HTMLElement).closest('[data-id]') as HTMLElement | null;
130
132
  const tabId = target?.dataset?.id;
131
133
  if (tabId) {
132
- onChangeCompanion?.(tabId);
134
+ onUpdateCompanion?.(tabId);
133
135
  }
134
136
  },
135
- [onChangeCompanion],
137
+ [onUpdateCompanion],
136
138
  );
137
139
 
138
140
  return (
@@ -185,7 +187,7 @@ export const PlankHeading = memo(
185
187
  onAction={handleAction}
186
188
  >
187
189
  <Surface.Surface
188
- role='menu-footer'
190
+ type={AppSurface.MenuFooter}
189
191
  data={{ subject: node.data } satisfies AppSurface.MenuFooterData}
190
192
  />
191
193
  </StackItem.Sigil>
@@ -208,8 +210,16 @@ export const PlankHeading = memo(
208
210
  </TextTooltip>
209
211
  </>
210
212
  )}
213
+ {debug && (
214
+ <div role='none' className='flex items-center text-sm text-info-text'>
215
+ {layoutMode}:{part}:{companioned}
216
+ </div>
217
+ )}
211
218
  {node && part !== 'complementary' && (
212
- <Surface.Surface role='navbar-end' data={{ subject: node.data } satisfies AppSurface.NavbarEndData} />
219
+ <Surface.Surface
220
+ type={AppSurface.NavbarEnd}
221
+ data={{ subject: node.data } satisfies AppSurface.NavbarEndData}
222
+ />
213
223
  )}
214
224
  {companioned === 'companion' ? (
215
225
  <PlankCompanionControls primary={primaryId} />
@@ -33,8 +33,8 @@ export type PlankContextValue = {
33
33
  onResize?: (id: string, size: number) => void;
34
34
  /** Callback to clear scroll-into-view state. */
35
35
  onScrollIntoView?: (id?: string) => void;
36
- /** Callback to change the companion. */
37
- onChangeCompanion?: (companion: string | null) => void;
36
+ /** Callback to update the companion. */
37
+ onUpdateCompanion?: (companion: string | null) => void;
38
38
  };
39
39
 
40
40
  export const [PlankProvider, usePlankContext] = createContext<PlankContextValue>(PLANK_NAME);
@@ -105,6 +105,7 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
105
105
  iconOnly
106
106
  tooltipSide='left'
107
107
  data-value={getLinkedVariant(companion.id)}
108
+ {...(companion.properties.joyride && { 'data-joyride': companion.properties.joyride })}
108
109
  variant={
109
110
  activeId === getLinkedVariant(companion.id)
110
111
  ? state.complementarySidebarState === 'expanded'
@@ -120,7 +121,7 @@ export const ComplementarySidebar = ({ current }: ComplementarySidebarProps) =>
120
121
  {!hoistStatusbar && (
121
122
  <div
122
123
  role='none'
123
- className='grid grid-cols-1 auto-rows-(--dx-rail-item) gap-0.5 overflow-y-auto'
124
+ className='grid grid-cols-1 auto-rows-(--dx-rail-item) py-0.5 gap-0.5 overflow-y-auto scrollbar-none'
124
125
  style={iconSize(4)}
125
126
  >
126
127
  <Surface.Surface role='status-indicator' />
@@ -5,7 +5,7 @@
5
5
  import React, { useMemo } from 'react';
6
6
 
7
7
  import { Surface } from '@dxos/app-framework/ui';
8
- import { type AppSurface } from '@dxos/app-toolkit/ui';
8
+ import { AppSurface } from '@dxos/app-toolkit/ui';
9
9
  import { type Label, Main } from '@dxos/react-ui';
10
10
 
11
11
  import { useBreakpoints, useDeckState, useHoistStatusbar } from '#hooks';
@@ -38,7 +38,7 @@ export const Sidebar = () => {
38
38
  hoistStatusbar && 'bottom-(--dx-statusbar-size)',
39
39
  ]}
40
40
  >
41
- <Surface.Surface role='navigation' data={navigationData} limit={1} />
41
+ <Surface.Surface type={AppSurface.Navigation} data={navigationData} limit={1} />
42
42
  </Main.NavigationSidebar>
43
43
  );
44
44
  };
@@ -80,13 +80,19 @@ export const ToggleComplementarySidebarButton = ({
80
80
  }
81
81
  }, [state, updateState, current, companions, invokePromise]);
82
82
 
83
+ const label = t(
84
+ state.complementarySidebarState === 'expanded'
85
+ ? 'close-complementary-sidebar.label'
86
+ : 'open-complementary-sidebar.label',
87
+ );
88
+
83
89
  return (
84
90
  <IconButton
85
91
  variant='ghost'
86
92
  classNames={['[&>svg]:-scale-x-100', classNames]}
87
93
  icon='ph--sidebar-simple--regular'
88
94
  iconOnly
89
- label={t('open-complementary-sidebar.label')}
95
+ label={label}
90
96
  tooltipSide={inR0 ? 'left' : undefined}
91
97
  onClick={handleClick}
92
98
  />
@@ -5,7 +5,7 @@
5
5
  import { useAppGraph } from '@dxos/app-toolkit/ui';
6
6
  import { Node, type Node as NodeType } from '@dxos/plugin-graph';
7
7
  import { useConnections } from '@dxos/plugin-graph';
8
- import { type Label } from '@dxos/ui-types';
8
+ import { type Label } from '@dxos/ui-types/translations';
9
9
  import { type Position, byPosition } from '@dxos/util';
10
10
 
11
11
  import { DECK_COMPANION_TYPE } from '#types';
@@ -19,6 +19,7 @@ export type DeckCompanion = NodeType.Node<
19
19
  /** If true, the panel will not be wrapped in a scroll area. */
20
20
  fixed?: boolean;
21
21
  position?: Position;
22
+ joyride?: string;
22
23
  }
23
24
  >;
24
25
 
package/src/index.ts CHANGED
@@ -2,7 +2,15 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { DeckCapabilities, DeckEvents } from './types';
6
- export * from './DeckPlugin';
5
+ import { Plugin } from '@dxos/app-framework';
6
+
7
+ import { meta } from './meta';
8
+
9
+ export const DeckPlugin = Plugin.lazy(meta, () => import('./DeckPlugin'));
10
+
7
11
  export * from './meta';
12
+
13
+ export { DeckCapabilities, DeckEvents } from './types';
14
+ // TODO(wittjosiah): Hooks should not be exported from the plugin package at all.
15
+ // Either refactor callers to not need them or factor them out to a shared package.
8
16
  export { useCompanions } from './hooks';
@@ -6,7 +6,7 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities } from '@dxos/app-framework';
8
8
  import { LayoutOperation } from '@dxos/app-toolkit';
9
- import { Operation } from '@dxos/operation';
9
+ import { Operation } from '@dxos/compute';
10
10
 
11
11
  import { DeckCapabilities } from '../types';
12
12
 
@@ -8,7 +8,7 @@ import * as Option from 'effect/Option';
8
8
 
9
9
  import { Capabilities, Capability } from '@dxos/app-framework';
10
10
  import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
11
- import { Operation } from '@dxos/operation';
11
+ import { Operation } from '@dxos/compute';
12
12
  import { AttentionCapabilities } from '@dxos/plugin-attention/types';
13
13
  import { Graph } from '@dxos/plugin-graph';
14
14
  import { byPosition } from '@dxos/util';
@@ -16,7 +16,7 @@ import { byPosition } from '@dxos/util';
16
16
  import { incrementPlank } from '../layout';
17
17
  import { DeckCapabilities, PLANK_COMPANION_TYPE } from '../types';
18
18
  import { computeActiveUpdates } from '../util';
19
- import { Adjust, ChangeCompanion } from './definitions';
19
+ import { Adjust } from './definitions';
20
20
  import { updateActiveDeck } from './helpers';
21
21
 
22
22
  const handler: Operation.WithHandler<typeof Adjust> = Adjust.pipe(
@@ -73,7 +73,7 @@ const handler: Operation.WithHandler<typeof Adjust> = Adjust.pipe(
73
73
  );
74
74
 
75
75
  if (Option.isSome(companion)) {
76
- yield* Operation.invoke(ChangeCompanion, { companion: companion.value.id });
76
+ yield* Operation.invoke(LayoutOperation.UpdateCompanion, { subject: companion.value.id });
77
77
  }
78
78
  }
79
79
  }),
@@ -6,7 +6,7 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
8
  import { LayoutOperation } from '@dxos/app-toolkit';
9
- import { Operation } from '@dxos/operation';
9
+ import { Operation } from '@dxos/compute';
10
10
  import { AttentionCapabilities } from '@dxos/plugin-attention/types';
11
11
 
12
12
  import { closeEntry } from '../layout';
@@ -5,11 +5,11 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { Capability } from '@dxos/app-framework';
8
- import { Operation } from '@dxos/operation';
8
+ import { Operation } from '@dxos/compute';
9
9
 
10
10
  import { meta } from '#meta';
11
11
 
12
- const PartAdjustmentSchema = Schema.Union(
12
+ const PartAdjustment = Schema.Union(
13
13
  Schema.Literal('close').annotations({ description: 'Close the plank.' }),
14
14
  Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),
15
15
  Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),
@@ -17,7 +17,8 @@ const PartAdjustmentSchema = Schema.Union(
17
17
  Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),
18
18
  Schema.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),
19
19
  );
20
- export type PartAdjustment = Schema.Schema.Type<typeof PartAdjustmentSchema>;
20
+
21
+ export type PartAdjustment = Schema.Schema.Type<typeof PartAdjustment>;
21
22
 
22
23
  export const Adjust = Operation.make({
23
24
  meta: {
@@ -28,7 +29,7 @@ export const Adjust = Operation.make({
28
29
  services: [Capability.Service],
29
30
  input: Schema.Struct({
30
31
  id: Schema.String.annotations({ description: 'The id of the plank to adjust.' }),
31
- type: PartAdjustmentSchema.annotations({ description: 'The type of adjustment to make.' }),
32
+ type: PartAdjustment.annotations({ description: 'The type of adjustment to make.' }),
32
33
  }),
33
34
  output: Schema.Void,
34
35
  });
@@ -46,16 +47,3 @@ export const UpdatePlankSize = Operation.make({
46
47
  }),
47
48
  output: Schema.Void,
48
49
  });
49
-
50
- export const ChangeCompanion = Operation.make({
51
- meta: {
52
- key: `${meta.id}.operation.change-companion`,
53
- name: 'Change Companion',
54
- description: 'Change the companion plank for a primary plank.',
55
- },
56
- services: [Capability.Service],
57
- input: Schema.Struct({
58
- companion: Schema.Union(Schema.String, Schema.Null),
59
- }),
60
- output: Schema.Void,
61
- });
@@ -2,14 +2,13 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { OperationHandlerSet } from '@dxos/operation';
5
+ import { OperationHandlerSet } from '@dxos/compute';
6
6
 
7
7
  export * as DeckOperation from './definitions';
8
8
 
9
9
  export const DeckOperationHandlerSet = OperationHandlerSet.lazy(
10
10
  () => import('./add-toast'),
11
11
  () => import('./adjust'),
12
- () => import('./change-companion'),
13
12
  () => import('./close'),
14
13
  () => import('./open'),
15
14
  () => import('./revert-workspace'),
@@ -18,6 +17,7 @@ export const DeckOperationHandlerSet = OperationHandlerSet.lazy(
18
17
  () => import('./set-layout-mode'),
19
18
  () => import('./show-undo'),
20
19
  () => import('./switch-workspace'),
20
+ () => import('./update-companion'),
21
21
  () => import('./update-complementary'),
22
22
  () => import('./update-dialog'),
23
23
  () => import('./update-plank-size'),