@dxos/plugin-deck 0.8.4-main.70d3990 → 0.8.4-main.7996785055

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 (468) hide show
  1. package/dist/lib/browser/Banner-TJ4ZQ7A6.mjs +16 -0
  2. package/dist/lib/browser/Banner-TJ4ZQ7A6.mjs.map +7 -0
  3. package/dist/lib/browser/DeckSettings-CZ3KWAXT.mjs +96 -0
  4. package/dist/lib/browser/DeckSettings-CZ3KWAXT.mjs.map +7 -0
  5. package/dist/lib/browser/add-toast-XOLZDESF.mjs +24 -0
  6. package/dist/lib/browser/add-toast-XOLZDESF.mjs.map +7 -0
  7. package/dist/lib/browser/adjust-N4YCWW3J.mjs +96 -0
  8. package/dist/lib/browser/adjust-N4YCWW3J.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-34HXGUI2.mjs +123 -0
  10. package/dist/lib/browser/app-graph-builder-34HXGUI2.mjs.map +7 -0
  11. package/dist/lib/browser/change-companion-ONLIPI6F.mjs +34 -0
  12. package/dist/lib/browser/change-companion-ONLIPI6F.mjs.map +7 -0
  13. package/dist/lib/browser/check-app-scheme-72BBQSF6.mjs +33 -0
  14. package/dist/lib/browser/check-app-scheme-72BBQSF6.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-26ZKVZIN.mjs +112 -0
  16. package/dist/lib/browser/chunk-26ZKVZIN.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-4RO3FRCR.mjs +187 -0
  18. package/dist/lib/browser/chunk-4RO3FRCR.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-4TLX2UGY.mjs +88 -0
  20. package/dist/lib/browser/chunk-4TLX2UGY.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-J6OERAED.mjs +69 -0
  22. package/dist/lib/browser/chunk-J6OERAED.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-PPM7LZSC.mjs +8 -0
  24. package/dist/lib/browser/chunk-PPM7LZSC.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-RCLJGMR7.mjs +1417 -0
  26. package/dist/lib/browser/chunk-RCLJGMR7.mjs.map +7 -0
  27. package/dist/lib/browser/{chunk-UXLU6CMW.mjs → chunk-UN7XQWDE.mjs} +9 -2
  28. package/dist/lib/browser/chunk-UN7XQWDE.mjs.map +7 -0
  29. package/dist/lib/browser/{chunk-F3VCCHVL.mjs → chunk-WZXKWTDN.mjs} +74 -35
  30. package/dist/lib/browser/chunk-WZXKWTDN.mjs.map +7 -0
  31. package/dist/lib/browser/chunk-YAAXLCVX.mjs +30 -0
  32. package/dist/lib/browser/chunk-YAAXLCVX.mjs.map +7 -0
  33. package/dist/lib/browser/close-SPUQQH2F.mjs +44 -0
  34. package/dist/lib/browser/close-SPUQQH2F.mjs.map +7 -0
  35. package/dist/lib/browser/index.mjs +76 -75
  36. package/dist/lib/browser/index.mjs.map +4 -4
  37. package/dist/lib/browser/meta.json +1 -1
  38. package/dist/lib/browser/open-2DK2GFUW.mjs +95 -0
  39. package/dist/lib/browser/open-2DK2GFUW.mjs.map +7 -0
  40. package/dist/lib/browser/operation-handler-ETCDHJUK.mjs +16 -0
  41. package/dist/lib/browser/operation-handler-ETCDHJUK.mjs.map +7 -0
  42. package/dist/lib/browser/operations/index.mjs +12 -0
  43. package/dist/lib/browser/react-root-2IXL32LF.mjs +50 -0
  44. package/dist/lib/browser/react-root-2IXL32LF.mjs.map +7 -0
  45. package/dist/lib/browser/react-surface-LMALTBUM.mjs +44 -0
  46. package/dist/lib/browser/react-surface-LMALTBUM.mjs.map +7 -0
  47. package/dist/lib/browser/revert-workspace-NIXRKBAQ.mjs +21 -0
  48. package/dist/lib/browser/revert-workspace-NIXRKBAQ.mjs.map +7 -0
  49. package/dist/lib/browser/scroll-into-view-QUORIGE3.mjs +21 -0
  50. package/dist/lib/browser/scroll-into-view-QUORIGE3.mjs.map +7 -0
  51. package/dist/lib/browser/set-GKTHE4IZ.mjs +37 -0
  52. package/dist/lib/browser/set-GKTHE4IZ.mjs.map +7 -0
  53. package/dist/lib/browser/set-layout-mode-TRWCEJAO.mjs +91 -0
  54. package/dist/lib/browser/set-layout-mode-TRWCEJAO.mjs.map +7 -0
  55. package/dist/lib/browser/settings-3MYJVL5V.mjs +40 -0
  56. package/dist/lib/browser/settings-3MYJVL5V.mjs.map +7 -0
  57. package/dist/lib/browser/show-undo-OSWJQUSO.mjs +60 -0
  58. package/dist/lib/browser/show-undo-OSWJQUSO.mjs.map +7 -0
  59. package/dist/lib/browser/state-CFEZH3DH.mjs +100 -0
  60. package/dist/lib/browser/state-CFEZH3DH.mjs.map +7 -0
  61. package/dist/lib/browser/switch-workspace-JXIYKYFR.mjs +68 -0
  62. package/dist/lib/browser/switch-workspace-JXIYKYFR.mjs.map +7 -0
  63. package/dist/lib/browser/types/index.mjs +12 -8
  64. package/dist/lib/browser/update-complementary-IDQANYVM.mjs +28 -0
  65. package/dist/lib/browser/update-complementary-IDQANYVM.mjs.map +7 -0
  66. package/dist/lib/browser/update-dialog-LEF6XOAA.mjs +29 -0
  67. package/dist/lib/browser/update-dialog-LEF6XOAA.mjs.map +7 -0
  68. package/dist/lib/browser/update-plank-size-VMGJQJKT.mjs +28 -0
  69. package/dist/lib/browser/update-plank-size-VMGJQJKT.mjs.map +7 -0
  70. package/dist/lib/browser/update-popover-HLFD3DXD.mjs +33 -0
  71. package/dist/lib/browser/update-popover-HLFD3DXD.mjs.map +7 -0
  72. package/dist/lib/browser/update-sidebar-NJ3PB2Z4.mjs +25 -0
  73. package/dist/lib/browser/update-sidebar-NJ3PB2Z4.mjs.map +7 -0
  74. package/dist/lib/browser/url-handler-2QE6C6KP.mjs +106 -0
  75. package/dist/lib/browser/url-handler-2QE6C6KP.mjs.map +7 -0
  76. package/dist/lib/node-esm/Banner-3Y6W3VK3.mjs +17 -0
  77. package/dist/lib/node-esm/Banner-3Y6W3VK3.mjs.map +7 -0
  78. package/dist/lib/node-esm/DeckSettings-ULPBDAT3.mjs +97 -0
  79. package/dist/lib/node-esm/DeckSettings-ULPBDAT3.mjs.map +7 -0
  80. package/dist/lib/node-esm/add-toast-HQEPHXHX.mjs +25 -0
  81. package/dist/lib/node-esm/add-toast-HQEPHXHX.mjs.map +7 -0
  82. package/dist/lib/node-esm/adjust-MR6Z7HI3.mjs +97 -0
  83. package/dist/lib/node-esm/adjust-MR6Z7HI3.mjs.map +7 -0
  84. package/dist/lib/node-esm/app-graph-builder-4BD6BABT.mjs +124 -0
  85. package/dist/lib/node-esm/app-graph-builder-4BD6BABT.mjs.map +7 -0
  86. package/dist/lib/node-esm/change-companion-JJ6MFJYZ.mjs +35 -0
  87. package/dist/lib/node-esm/change-companion-JJ6MFJYZ.mjs.map +7 -0
  88. package/dist/lib/node-esm/check-app-scheme-NNJD4MJ3.mjs +34 -0
  89. package/dist/lib/node-esm/check-app-scheme-NNJD4MJ3.mjs.map +7 -0
  90. package/dist/lib/node-esm/chunk-2K2OUSFN.mjs +10 -0
  91. package/dist/lib/node-esm/chunk-2K2OUSFN.mjs.map +7 -0
  92. package/dist/lib/node-esm/chunk-3QUPGLN4.mjs +188 -0
  93. package/dist/lib/node-esm/chunk-3QUPGLN4.mjs.map +7 -0
  94. package/dist/lib/node-esm/chunk-4EIUXR64.mjs +71 -0
  95. package/dist/lib/node-esm/chunk-4EIUXR64.mjs.map +7 -0
  96. package/dist/lib/node-esm/chunk-4NLQZESJ.mjs +89 -0
  97. package/dist/lib/node-esm/chunk-4NLQZESJ.mjs.map +7 -0
  98. package/dist/lib/node-esm/chunk-CMISPQAO.mjs +24 -0
  99. package/dist/lib/node-esm/chunk-CMISPQAO.mjs.map +7 -0
  100. package/dist/lib/node-esm/chunk-HM4KJZ6L.mjs +1418 -0
  101. package/dist/lib/node-esm/chunk-HM4KJZ6L.mjs.map +7 -0
  102. package/dist/lib/node-esm/chunk-J2AFCKMH.mjs +202 -0
  103. package/dist/lib/node-esm/chunk-J2AFCKMH.mjs.map +7 -0
  104. package/dist/lib/node-esm/chunk-WD6BJV6B.mjs +32 -0
  105. package/dist/lib/node-esm/chunk-WD6BJV6B.mjs.map +7 -0
  106. package/dist/lib/node-esm/chunk-YYXVVZSS.mjs +114 -0
  107. package/dist/lib/node-esm/chunk-YYXVVZSS.mjs.map +7 -0
  108. package/dist/lib/node-esm/close-FWQQ3IH2.mjs +45 -0
  109. package/dist/lib/node-esm/close-FWQQ3IH2.mjs.map +7 -0
  110. package/dist/lib/node-esm/index.mjs +176 -0
  111. package/dist/lib/node-esm/index.mjs.map +7 -0
  112. package/dist/lib/node-esm/meta.json +1 -0
  113. package/dist/lib/node-esm/open-FCSJ42AD.mjs +96 -0
  114. package/dist/lib/node-esm/open-FCSJ42AD.mjs.map +7 -0
  115. package/dist/lib/node-esm/operation-handler-A3FWOT4M.mjs +17 -0
  116. package/dist/lib/node-esm/operation-handler-A3FWOT4M.mjs.map +7 -0
  117. package/dist/lib/node-esm/operations/index.mjs +13 -0
  118. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  119. package/dist/lib/node-esm/react-root-44EZV4V7.mjs +51 -0
  120. package/dist/lib/node-esm/react-root-44EZV4V7.mjs.map +7 -0
  121. package/dist/lib/node-esm/react-surface-KFFPAGAC.mjs +45 -0
  122. package/dist/lib/node-esm/react-surface-KFFPAGAC.mjs.map +7 -0
  123. package/dist/lib/node-esm/revert-workspace-APB6WY3W.mjs +22 -0
  124. package/dist/lib/node-esm/revert-workspace-APB6WY3W.mjs.map +7 -0
  125. package/dist/lib/node-esm/scroll-into-view-YZVRLJKB.mjs +22 -0
  126. package/dist/lib/node-esm/scroll-into-view-YZVRLJKB.mjs.map +7 -0
  127. package/dist/lib/node-esm/set-WSNRQ3DI.mjs +38 -0
  128. package/dist/lib/node-esm/set-WSNRQ3DI.mjs.map +7 -0
  129. package/dist/lib/node-esm/set-layout-mode-LGAF5R4U.mjs +92 -0
  130. package/dist/lib/node-esm/set-layout-mode-LGAF5R4U.mjs.map +7 -0
  131. package/dist/lib/node-esm/settings-77JXSDLC.mjs +41 -0
  132. package/dist/lib/node-esm/settings-77JXSDLC.mjs.map +7 -0
  133. package/dist/lib/node-esm/show-undo-R3LATVTS.mjs +61 -0
  134. package/dist/lib/node-esm/show-undo-R3LATVTS.mjs.map +7 -0
  135. package/dist/lib/node-esm/state-I3LRM7SB.mjs +101 -0
  136. package/dist/lib/node-esm/state-I3LRM7SB.mjs.map +7 -0
  137. package/dist/lib/node-esm/switch-workspace-FKZT6EL4.mjs +69 -0
  138. package/dist/lib/node-esm/switch-workspace-FKZT6EL4.mjs.map +7 -0
  139. package/dist/lib/node-esm/types/index.mjs +37 -0
  140. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  141. package/dist/lib/node-esm/update-complementary-KVLJTKK3.mjs +29 -0
  142. package/dist/lib/node-esm/update-complementary-KVLJTKK3.mjs.map +7 -0
  143. package/dist/lib/node-esm/update-dialog-EXY2PCHT.mjs +30 -0
  144. package/dist/lib/node-esm/update-dialog-EXY2PCHT.mjs.map +7 -0
  145. package/dist/lib/node-esm/update-plank-size-67U7Z5VK.mjs +29 -0
  146. package/dist/lib/node-esm/update-plank-size-67U7Z5VK.mjs.map +7 -0
  147. package/dist/lib/node-esm/update-popover-MDOZNY2D.mjs +34 -0
  148. package/dist/lib/node-esm/update-popover-MDOZNY2D.mjs.map +7 -0
  149. package/dist/lib/node-esm/update-sidebar-5LEWTTGW.mjs +26 -0
  150. package/dist/lib/node-esm/update-sidebar-5LEWTTGW.mjs.map +7 -0
  151. package/dist/lib/node-esm/url-handler-WSC5K5ME.mjs +107 -0
  152. package/dist/lib/node-esm/url-handler-WSC5K5ME.mjs.map +7 -0
  153. package/dist/types/src/DeckPlugin.d.ts +2 -1
  154. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  155. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  156. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  157. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  158. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  159. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +5 -0
  160. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -0
  161. package/dist/types/src/capabilities/check-app-scheme/index.d.ts +3 -0
  162. package/dist/types/src/capabilities/check-app-scheme/index.d.ts.map +1 -0
  163. package/dist/types/src/capabilities/index.d.ts +7 -13
  164. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  165. package/dist/types/src/capabilities/operation-handler/index.d.ts +4 -0
  166. package/dist/types/src/capabilities/operation-handler/index.d.ts.map +1 -0
  167. package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts +6 -0
  168. package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts.map +1 -0
  169. package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
  170. package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
  171. package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
  172. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
  173. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  174. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  175. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  176. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  177. package/dist/types/src/capabilities/settings/index.d.ts +19 -0
  178. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  179. package/dist/types/src/capabilities/settings/settings.d.ts +22 -0
  180. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  181. package/dist/types/src/capabilities/state/index.d.ts +172 -0
  182. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  183. package/dist/types/src/capabilities/state/state.d.ts +175 -0
  184. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  185. package/dist/types/src/capabilities/tools/index.d.ts +3 -0
  186. package/dist/types/src/capabilities/tools/index.d.ts.map +1 -0
  187. package/dist/types/src/capabilities/tools/tools.d.ts +12 -0
  188. package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -0
  189. package/dist/types/src/capabilities/url-handler/index.d.ts +3 -0
  190. package/dist/types/src/capabilities/url-handler/index.d.ts.map +1 -0
  191. package/dist/types/src/capabilities/url-handler/url-handler.d.ts +5 -0
  192. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -0
  193. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
  194. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
  195. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  196. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +1 -0
  197. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
  198. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -1
  199. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
  200. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +1 -1
  201. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  202. package/dist/types/src/components/DeckLayout/Toast.d.ts +3 -3
  203. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  204. package/dist/types/src/components/Plank/Plank.d.ts +5 -5
  205. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  206. package/dist/types/src/components/Plank/Plank.stories.d.ts +25 -6
  207. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  208. package/dist/types/src/components/Plank/PlankControls.d.ts +1 -1
  209. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  210. package/dist/types/src/components/Plank/PlankError.d.ts +7 -5
  211. package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
  212. package/dist/types/src/components/Plank/PlankHeading.d.ts +2 -2
  213. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  214. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  215. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +1 -1
  216. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
  217. package/dist/types/src/components/fragments.d.ts +4 -1
  218. package/dist/types/src/components/fragments.d.ts.map +1 -1
  219. package/dist/types/src/components/index.d.ts +0 -1
  220. package/dist/types/src/components/index.d.ts.map +1 -1
  221. package/dist/types/src/containers/Banner/Banner.d.ts +2 -0
  222. package/dist/types/src/containers/Banner/Banner.d.ts.map +1 -0
  223. package/dist/types/src/containers/Banner/index.d.ts +3 -0
  224. package/dist/types/src/containers/Banner/index.d.ts.map +1 -0
  225. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts +8 -0
  226. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts.map +1 -0
  227. package/dist/types/src/containers/DeckSettings/index.d.ts +3 -0
  228. package/dist/types/src/containers/DeckSettings/index.d.ts.map +1 -0
  229. package/dist/types/src/containers/index.d.ts +4 -0
  230. package/dist/types/src/containers/index.d.ts.map +1 -0
  231. package/dist/types/src/hooks/index.d.ts +2 -0
  232. package/dist/types/src/hooks/index.d.ts.map +1 -1
  233. package/dist/types/src/hooks/useDeckCompanions.d.ts +3 -4
  234. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  235. package/dist/types/src/hooks/useDeckState.d.ts +17 -0
  236. package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
  237. package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
  238. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  239. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  240. package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
  241. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  242. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  243. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  244. package/dist/types/src/index.d.ts +1 -2
  245. package/dist/types/src/index.d.ts.map +1 -1
  246. package/dist/types/src/layout.d.ts +1 -7
  247. package/dist/types/src/layout.d.ts.map +1 -1
  248. package/dist/types/src/meta.d.ts +2 -2
  249. package/dist/types/src/meta.d.ts.map +1 -1
  250. package/dist/types/src/operations/add-toast.d.ts +5 -0
  251. package/dist/types/src/operations/add-toast.d.ts.map +1 -0
  252. package/dist/types/src/operations/adjust.d.ts +5 -0
  253. package/dist/types/src/operations/adjust.d.ts.map +1 -0
  254. package/dist/types/src/operations/change-companion.d.ts +5 -0
  255. package/dist/types/src/operations/change-companion.d.ts.map +1 -0
  256. package/dist/types/src/operations/close.d.ts +5 -0
  257. package/dist/types/src/operations/close.d.ts.map +1 -0
  258. package/dist/types/src/operations/definitions.d.ts +18 -0
  259. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  260. package/dist/types/src/operations/helpers.d.ts +3 -0
  261. package/dist/types/src/operations/helpers.d.ts.map +1 -0
  262. package/dist/types/src/operations/index.d.ts +4 -0
  263. package/dist/types/src/operations/index.d.ts.map +1 -0
  264. package/dist/types/src/operations/open.d.ts +5 -0
  265. package/dist/types/src/operations/open.d.ts.map +1 -0
  266. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  267. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  268. package/dist/types/src/operations/scroll-into-view.d.ts +5 -0
  269. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -0
  270. package/dist/types/src/operations/set-layout-mode.d.ts +5 -0
  271. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  272. package/dist/types/src/operations/set.d.ts +5 -0
  273. package/dist/types/src/operations/set.d.ts.map +1 -0
  274. package/dist/types/src/operations/show-undo.d.ts +5 -0
  275. package/dist/types/src/operations/show-undo.d.ts.map +1 -0
  276. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  277. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  278. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  279. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  280. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  281. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  282. package/dist/types/src/operations/update-plank-size.d.ts +5 -0
  283. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -0
  284. package/dist/types/src/operations/update-popover.d.ts +5 -0
  285. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  286. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  287. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  288. package/dist/types/src/translations.d.ts +1 -0
  289. package/dist/types/src/translations.d.ts.map +1 -1
  290. package/dist/types/src/{capabilities → types}/capabilities.d.ts +96 -90
  291. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  292. package/dist/types/src/types/events.d.ts +7 -0
  293. package/dist/types/src/types/events.d.ts.map +1 -0
  294. package/dist/types/src/types/index.d.ts +2 -0
  295. package/dist/types/src/types/index.d.ts.map +1 -1
  296. package/dist/types/src/types/schema.d.ts +40 -38
  297. package/dist/types/src/types/schema.d.ts.map +1 -1
  298. package/dist/types/src/util/index.d.ts +1 -0
  299. package/dist/types/src/util/index.d.ts.map +1 -1
  300. package/dist/types/src/util/sanitize-persisted-state.d.ts +19 -0
  301. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -0
  302. package/dist/types/src/util/sanitize-persisted-state.test.d.ts +2 -0
  303. package/dist/types/src/util/sanitize-persisted-state.test.d.ts.map +1 -0
  304. package/dist/types/src/util/set-active.d.ts +18 -3
  305. package/dist/types/src/util/set-active.d.ts.map +1 -1
  306. package/dist/types/src/util/set-active.test.d.ts +2 -0
  307. package/dist/types/src/util/set-active.test.d.ts.map +1 -0
  308. package/dist/types/tsconfig.tsbuildinfo +1 -1
  309. package/package.json +69 -49
  310. package/src/DeckPlugin.ts +26 -52
  311. package/src/capabilities/app-graph-builder/app-graph-builder.ts +119 -0
  312. package/src/capabilities/app-graph-builder/index.ts +7 -0
  313. package/src/capabilities/check-app-scheme/check-app-scheme.ts +45 -0
  314. package/src/capabilities/check-app-scheme/index.ts +7 -0
  315. package/src/capabilities/index.ts +8 -14
  316. package/src/capabilities/operation-handler/index.ts +11 -0
  317. package/src/capabilities/operation-handler/operation-handler.ts +16 -0
  318. package/src/capabilities/react-root/index.ts +7 -0
  319. package/src/capabilities/react-root/react-root.tsx +47 -0
  320. package/src/capabilities/react-surface/index.ts +7 -0
  321. package/src/capabilities/react-surface/react-surface.tsx +38 -0
  322. package/src/capabilities/settings/index.ts +7 -0
  323. package/src/capabilities/settings/settings.ts +39 -0
  324. package/src/capabilities/state/index.ts +7 -0
  325. package/src/capabilities/state/state.ts +97 -0
  326. package/src/capabilities/tools/index.ts +7 -0
  327. package/src/capabilities/tools/tools.ts +91 -0
  328. package/src/capabilities/url-handler/index.ts +7 -0
  329. package/src/capabilities/url-handler/url-handler.ts +108 -0
  330. package/src/components/DeckLayout/ActiveNode.tsx +3 -2
  331. package/src/components/DeckLayout/Banner.tsx +9 -9
  332. package/src/components/DeckLayout/ContentEmpty.tsx +5 -6
  333. package/src/components/DeckLayout/DeckLayout.stories.tsx +20 -31
  334. package/src/components/DeckLayout/DeckLayout.tsx +13 -11
  335. package/src/components/DeckLayout/DeckMain.tsx +65 -59
  336. package/src/components/DeckLayout/Dialog.tsx +22 -13
  337. package/src/components/DeckLayout/Fallback.tsx +2 -6
  338. package/src/components/DeckLayout/Popover.tsx +83 -22
  339. package/src/components/DeckLayout/StatusBar.tsx +4 -4
  340. package/src/components/DeckLayout/Toast.tsx +4 -4
  341. package/src/components/Plank/Plank.stories.tsx +18 -9
  342. package/src/components/Plank/Plank.tsx +41 -38
  343. package/src/components/Plank/PlankControls.tsx +9 -11
  344. package/src/components/Plank/PlankError.tsx +49 -19
  345. package/src/components/Plank/PlankHeading.tsx +41 -46
  346. package/src/components/Plank/PlankLoading.tsx +1 -1
  347. package/src/components/Sidebar/ComplementarySidebar.tsx +78 -86
  348. package/src/components/Sidebar/Sidebar.tsx +7 -7
  349. package/src/components/Sidebar/SidebarButton.tsx +31 -26
  350. package/src/components/fragments.ts +10 -5
  351. package/src/components/index.ts +0 -1
  352. package/src/containers/Banner/Banner.tsx +5 -0
  353. package/src/containers/Banner/index.ts +7 -0
  354. package/src/{components → containers}/DeckSettings/DeckSettings.tsx +41 -31
  355. package/src/containers/DeckSettings/index.ts +7 -0
  356. package/src/containers/index.ts +8 -0
  357. package/src/hooks/index.ts +2 -0
  358. package/src/hooks/useCompanions.ts +2 -2
  359. package/src/hooks/useDeckCompanions.ts +7 -11
  360. package/src/hooks/useDeckState.ts +82 -0
  361. package/src/hooks/useHoistStatusbar.ts +3 -6
  362. package/src/hooks/useMainSize.ts +2 -2
  363. package/src/hooks/useNodeActionExpander.ts +4 -4
  364. package/src/hooks/useSelectedCompanion.ts +32 -0
  365. package/src/index.ts +1 -2
  366. package/src/layout.ts +1 -14
  367. package/src/meta.ts +3 -3
  368. package/src/operations/add-toast.ts +24 -0
  369. package/src/operations/adjust.ts +83 -0
  370. package/src/operations/change-companion.ts +35 -0
  371. package/src/operations/close.ts +35 -0
  372. package/src/operations/definitions.ts +61 -0
  373. package/src/operations/helpers.ts +22 -0
  374. package/src/operations/index.ts +26 -0
  375. package/src/operations/open.ts +89 -0
  376. package/src/operations/revert-workspace.ts +22 -0
  377. package/src/operations/scroll-into-view.ts +24 -0
  378. package/src/operations/set-layout-mode.ts +80 -0
  379. package/src/operations/set.ts +36 -0
  380. package/src/operations/show-undo.ts +46 -0
  381. package/src/operations/switch-workspace.ts +60 -0
  382. package/src/operations/update-complementary.ts +33 -0
  383. package/src/operations/update-dialog.ts +34 -0
  384. package/src/operations/update-plank-size.ts +29 -0
  385. package/src/operations/update-popover.ts +36 -0
  386. package/src/operations/update-sidebar.ts +28 -0
  387. package/src/translations.ts +1 -0
  388. package/src/types/capabilities.ts +33 -0
  389. package/src/types/events.ts +21 -0
  390. package/src/types/index.ts +2 -0
  391. package/src/types/schema.ts +32 -25
  392. package/src/util/index.ts +1 -0
  393. package/src/util/layoutAppliesTopbar.ts +1 -1
  394. package/src/util/overscroll.ts +3 -3
  395. package/src/util/sanitize-persisted-state.test.ts +79 -0
  396. package/src/util/sanitize-persisted-state.ts +52 -0
  397. package/src/util/set-active.test.ts +106 -0
  398. package/src/util/set-active.ts +49 -29
  399. package/dist/lib/browser/app-graph-builder-D74NTOMK.mjs +0 -128
  400. package/dist/lib/browser/app-graph-builder-D74NTOMK.mjs.map +0 -7
  401. package/dist/lib/browser/check-app-scheme-HIEVFAAX.mjs +0 -32
  402. package/dist/lib/browser/check-app-scheme-HIEVFAAX.mjs.map +0 -7
  403. package/dist/lib/browser/chunk-5KMJPIQC.mjs +0 -16
  404. package/dist/lib/browser/chunk-5KMJPIQC.mjs.map +0 -7
  405. package/dist/lib/browser/chunk-CNTGBCMK.mjs +0 -145
  406. package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
  407. package/dist/lib/browser/chunk-F3VCCHVL.mjs.map +0 -7
  408. package/dist/lib/browser/chunk-QKCGZ45E.mjs +0 -128
  409. package/dist/lib/browser/chunk-QKCGZ45E.mjs.map +0 -7
  410. package/dist/lib/browser/chunk-UXLU6CMW.mjs.map +0 -7
  411. package/dist/lib/browser/chunk-VBYJ664A.mjs +0 -132
  412. package/dist/lib/browser/chunk-VBYJ664A.mjs.map +0 -7
  413. package/dist/lib/browser/chunk-VUJ6UNIJ.mjs +0 -1553
  414. package/dist/lib/browser/chunk-VUJ6UNIJ.mjs.map +0 -7
  415. package/dist/lib/browser/intent-resolver-UA4YQGAC.mjs +0 -524
  416. package/dist/lib/browser/intent-resolver-UA4YQGAC.mjs.map +0 -7
  417. package/dist/lib/browser/react-root-JAMHKYWN.mjs +0 -44
  418. package/dist/lib/browser/react-root-JAMHKYWN.mjs.map +0 -7
  419. package/dist/lib/browser/react-surface-6LW337ZT.mjs +0 -40
  420. package/dist/lib/browser/react-surface-6LW337ZT.mjs.map +0 -7
  421. package/dist/lib/browser/settings-SDPTOCCM.mjs +0 -30
  422. package/dist/lib/browser/settings-SDPTOCCM.mjs.map +0 -7
  423. package/dist/lib/browser/state-7IFAGZQO.mjs +0 -12
  424. package/dist/lib/browser/toolkit-L5CFXJCF.mjs +0 -52
  425. package/dist/lib/browser/toolkit-L5CFXJCF.mjs.map +0 -7
  426. package/dist/lib/browser/url-handler-QEYGYE2H.mjs +0 -70
  427. package/dist/lib/browser/url-handler-QEYGYE2H.mjs.map +0 -7
  428. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  429. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  430. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  431. package/dist/types/src/capabilities/check-app-scheme.d.ts +0 -4
  432. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +0 -1
  433. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  434. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  435. package/dist/types/src/capabilities/react-root.d.ts +0 -7
  436. package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
  437. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  438. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  439. package/dist/types/src/capabilities/settings.d.ts +0 -4
  440. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  441. package/dist/types/src/capabilities/state.d.ts +0 -104
  442. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  443. package/dist/types/src/capabilities/toolkit.d.ts +0 -25
  444. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  445. package/dist/types/src/capabilities/tools.d.ts +0 -11
  446. package/dist/types/src/capabilities/tools.d.ts.map +0 -1
  447. package/dist/types/src/capabilities/url-handler.d.ts +0 -4
  448. package/dist/types/src/capabilities/url-handler.d.ts.map +0 -1
  449. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +0 -6
  450. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +0 -1
  451. package/dist/types/src/components/DeckSettings/index.d.ts +0 -2
  452. package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
  453. package/dist/types/src/events.d.ts +0 -4
  454. package/dist/types/src/events.d.ts.map +0 -1
  455. package/src/capabilities/app-graph-builder.ts +0 -143
  456. package/src/capabilities/capabilities.ts +0 -14
  457. package/src/capabilities/check-app-scheme.ts +0 -40
  458. package/src/capabilities/intent-resolver.ts +0 -471
  459. package/src/capabilities/react-root.tsx +0 -40
  460. package/src/capabilities/react-surface.tsx +0 -30
  461. package/src/capabilities/settings.ts +0 -27
  462. package/src/capabilities/state.ts +0 -113
  463. package/src/capabilities/toolkit.ts +0 -66
  464. package/src/capabilities/tools.ts +0 -84
  465. package/src/capabilities/url-handler.ts +0 -60
  466. package/src/components/DeckSettings/index.ts +0 -5
  467. package/src/events.ts +0 -11
  468. /package/dist/lib/browser/{state-7IFAGZQO.mjs.map → operations/index.mjs.map} +0 -0
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
+ import { createKvsStore } from '@dxos/effect';
10
+
11
+ import { meta } from '../../meta';
12
+ import { DeckCapabilities, DeckSettingsSchema } from '../../types';
13
+
14
+ export default Capability.makeModule(() =>
15
+ Effect.sync(() => {
16
+ const settingsAtom = createKvsStore({
17
+ key: meta.id,
18
+ schema: DeckSettingsSchema,
19
+ defaultValue: () => ({
20
+ showHints: false,
21
+ enableDeck: false,
22
+ enableStatusbar: false,
23
+ enableNativeRedirect: false,
24
+ newPlankPositioning: 'start' as const,
25
+ overscroll: 'none' as const,
26
+ encapsulatedPlanks: false,
27
+ }),
28
+ });
29
+
30
+ return [
31
+ Capability.contributes(DeckCapabilities.Settings, settingsAtom),
32
+ Capability.contributes(AppCapabilities.Settings, {
33
+ prefix: meta.id,
34
+ schema: DeckSettingsSchema,
35
+ atom: settingsAtom,
36
+ }),
37
+ ];
38
+ }),
39
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const DeckState = Capability.lazy('DeckState', () => import('./state'));
@@ -0,0 +1,97 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Atom } from '@effect-atom/atom-react';
6
+ import * as Effect from 'effect/Effect';
7
+
8
+ import { Capabilities, Capability } from '@dxos/app-framework';
9
+ import { AppCapabilities } from '@dxos/app-toolkit';
10
+ import { createKvsStore } from '@dxos/effect';
11
+ import { invariant } from '@dxos/invariant';
12
+
13
+ import { meta } from '../../meta';
14
+ import {
15
+ DeckCapabilities,
16
+ type DeckEphemeralStateProps,
17
+ type DeckStateProps,
18
+ DeckStateSchema,
19
+ defaultDeck,
20
+ getMode,
21
+ } from '../../types';
22
+ import { sanitizePersistedState } from '../../util';
23
+
24
+ /** Default persisted state. */
25
+ const defaultDeckState: DeckStateProps = {
26
+ sidebarState: 'expanded',
27
+ complementarySidebarState: 'collapsed',
28
+ complementarySidebarPanel: undefined,
29
+ activeDeck: 'default',
30
+ previousDeck: 'default',
31
+ decks: {
32
+ default: { ...defaultDeck },
33
+ },
34
+ previousMode: {},
35
+ };
36
+
37
+ /** Default ephemeral state. */
38
+ const defaultDeckEphemeralState: DeckEphemeralStateProps = {
39
+ dialogContent: null,
40
+ dialogOpen: false,
41
+ dialogBlockAlign: undefined,
42
+ dialogType: undefined,
43
+ popoverContent: null,
44
+ popoverAnchor: undefined,
45
+ popoverAnchorId: undefined,
46
+ popoverOpen: false,
47
+ toasts: [],
48
+ currentUndoId: undefined,
49
+ scrollIntoView: undefined,
50
+ };
51
+
52
+ export default Capability.makeModule(
53
+ Effect.fnUntraced(function* () {
54
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
55
+
56
+ // Persisted state using KVS store.
57
+ const stateAtom = createKvsStore({
58
+ key: `${meta.id}.state`,
59
+ schema: DeckStateSchema,
60
+ defaultValue: () => ({ ...defaultDeckState }),
61
+ });
62
+
63
+ // Ephemeral state (not persisted, but kept alive to prevent GC resets).
64
+ const ephemeralAtom = Atom.make<DeckEphemeralStateProps>({ ...defaultDeckEphemeralState }).pipe(Atom.keepAlive);
65
+
66
+ // Sanitize persisted state on startup (see sanitizePersistedState for details).
67
+ const currentState = registry.get(stateAtom);
68
+ const sanitizedState = sanitizePersistedState(currentState);
69
+ if (sanitizedState !== currentState) {
70
+ registry.set(stateAtom, sanitizedState);
71
+ }
72
+
73
+ // Create derived layout atom (read-only) from both state atoms.
74
+ const layoutAtom = Atom.make((get) => {
75
+ const state = get(stateAtom);
76
+ const ephemeral = get(ephemeralAtom);
77
+ const deck = state.decks[state.activeDeck];
78
+ invariant(deck, `Deck not found: ${state.activeDeck}`);
79
+ return {
80
+ mode: getMode(deck),
81
+ dialogOpen: ephemeral.dialogOpen,
82
+ sidebarOpen: state.sidebarState === 'expanded',
83
+ complementarySidebarOpen: state.complementarySidebarState === 'expanded',
84
+ workspace: state.activeDeck,
85
+ active: deck.solo ? [deck.solo] : deck.active,
86
+ inactive: deck.inactive,
87
+ scrollIntoView: ephemeral.scrollIntoView,
88
+ } satisfies AppCapabilities.Layout;
89
+ }).pipe(Atom.keepAlive);
90
+
91
+ return [
92
+ Capability.contributes(DeckCapabilities.State, stateAtom),
93
+ Capability.contributes(DeckCapabilities.EphemeralState, ephemeralAtom),
94
+ Capability.contributes(AppCapabilities.Layout, layoutAtom),
95
+ ];
96
+ }),
97
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const Tools = Capability.lazy('Tools', () => import('./tools'));
@@ -0,0 +1,91 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // ISSUE(burdon): tools
6
+ // @ts-nocheck
7
+
8
+ import * as Effect from 'effect/Effect';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ import {
12
+ Capabilities,
13
+ Capability,
14
+ LayoutAction,
15
+ type PromiseIntentDispatcher,
16
+ createIntent,
17
+ } from '@dxos/app-framework';
18
+ import { type OperationInvoker } from '@dxos/app-framework/plugin-operation/invoker';
19
+ import { invariant } from '@dxos/invariant';
20
+ import { trim } from '@dxos/util';
21
+
22
+ import { meta } from '../../meta';
23
+ import { DeckOperation } from '../../operations';
24
+
25
+ // TODO(burdon): Factor out.
26
+ declare global {
27
+ interface ToolContextExtensions {
28
+ dispatch?: PromiseIntentDispatcher;
29
+ pivotId?: string;
30
+ part?: 'deck' | 'dialog';
31
+ }
32
+ }
33
+
34
+ export default Capability.makeModule(() =>
35
+ Effect.succeed(
36
+ Capability.contributes(Capabilities.Tools, [
37
+ createTool(meta.id, {
38
+ name: 'show',
39
+ description: trim`
40
+ Show an item as a companion to an existing plank.
41
+ When supplying IDs, they must be fully qualified like this: space-key:object-id
42
+ `,
43
+ caption: 'Showing item...',
44
+ // TODO(wittjosiah): Refactor Layout/Navigation/Deck actions so that they can be used directly.
45
+ schema: Schema.Struct({
46
+ id: Schema.String.annotations({
47
+ description: 'The ID of the item to show.',
48
+ }),
49
+ }),
50
+ execute: async ({ id }, { extensions }) => {
51
+ invariant(extensions);
52
+ const { pivotId, dispatch, invokePromise, part } = extensions as {
53
+ pivotId: string;
54
+ dispatch: PromiseIntentDispatcher;
55
+ invokePromise: OperationInvoker['invokePromise'];
56
+ part: string;
57
+ };
58
+ invariant(pivotId, 'No pivot ID');
59
+ invariant(invokePromise, 'No operation invoker');
60
+
61
+ if (part === 'deck') {
62
+ const { error } = await invokePromise(DeckOperation.ChangeCompanion, {
63
+ companion: id,
64
+ });
65
+ if (error) {
66
+ return ToolResult.Error(error.message);
67
+ }
68
+
69
+ return ToolResult.Success({});
70
+ } else {
71
+ const { data, error } = await dispatch(
72
+ createIntent(LayoutAction.Open, {
73
+ subject: [id],
74
+ part: 'main',
75
+ options: {
76
+ pivotId,
77
+ positioning: 'end',
78
+ },
79
+ }),
80
+ );
81
+ if (error) {
82
+ return ToolResult.Error(error.message);
83
+ }
84
+
85
+ return ToolResult.Success(data);
86
+ }
87
+ },
88
+ }),
89
+ ]),
90
+ ),
91
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const UrlHandler = Capability.lazy('UrlHandler', () => import('./url-handler'));
@@ -0,0 +1,108 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { LayoutOperation, fromUrlPath, getWorkspaceFromPath, toUrlPath } from '@dxos/app-toolkit';
9
+ import { invariant } from '@dxos/invariant';
10
+ import { Node } from '@dxos/plugin-graph';
11
+
12
+ import { DeckCapabilities, type DeckStateProps, defaultDeck } from '../../types';
13
+
14
+ export default Capability.makeModule(
15
+ Effect.fnUntraced(function* () {
16
+ const { invokePromise } = yield* Capability.get(Capabilities.OperationInvoker);
17
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
18
+ const stateAtom = yield* Capability.get(DeckCapabilities.State);
19
+
20
+ // Helper to get state.
21
+ const getState = () => registry.get(stateAtom);
22
+
23
+ // Helper to get computed deck from state.
24
+ const getDeck = () => {
25
+ const state = getState();
26
+ const deck = state.decks[state.activeDeck];
27
+ invariant(deck, `Deck not found: ${state.activeDeck}`);
28
+ return deck;
29
+ };
30
+
31
+ // Helper to update state.
32
+ const updateState = (fn: (current: DeckStateProps) => DeckStateProps) => {
33
+ registry.set(stateAtom, fn(getState()));
34
+ };
35
+
36
+ const handleNavigation = async () => {
37
+ const pathname = window.location.pathname;
38
+ const state = getState();
39
+ if (pathname === '/reset') {
40
+ updateState((s) => ({
41
+ ...s,
42
+ activeDeck: 'default',
43
+ decks: {
44
+ default: { ...defaultDeck },
45
+ },
46
+ }));
47
+ window.location.pathname = '/';
48
+ return;
49
+ }
50
+
51
+ const qualifiedId = fromUrlPath(pathname);
52
+ const workspace = getWorkspaceFromPath(qualifiedId);
53
+ if (workspace !== Node.RootId && workspace !== state.activeDeck) {
54
+ await invokePromise(LayoutOperation.SwitchWorkspace, { subject: workspace });
55
+ }
56
+
57
+ const deck = getDeck();
58
+ const activeId = qualifiedId !== workspace ? qualifiedId : undefined;
59
+ if (activeId) {
60
+ // Ensure the object referenced by the URL is open in the deck.
61
+ await invokePromise(LayoutOperation.Open, { subject: [activeId] });
62
+ // If not already in solo mode, switch to solo for the target object.
63
+ if (!deck.solo) {
64
+ await invokePromise(LayoutOperation.SetLayoutMode, { subject: activeId, mode: 'solo' });
65
+ }
66
+ } else if (deck.solo) {
67
+ // Stay in solo mode; redirect URL to reflect the current solo item.
68
+ // Do not switch to deck mode here — only explicit user action should change layout mode.
69
+ const path = toUrlPath(deck.solo);
70
+ if (window.location.pathname !== path) {
71
+ history.replaceState(null, '', `${path}${window.location.search}`);
72
+ }
73
+ }
74
+ };
75
+
76
+ yield* Effect.promise(() => handleNavigation());
77
+ window.addEventListener('popstate', handleNavigation);
78
+
79
+ // Subscribe to state changes to update the URL.
80
+ let lastSolo: string | undefined;
81
+ let lastActiveDeck: string | undefined;
82
+ const unsubscribe = registry.subscribe(stateAtom, () => {
83
+ const state = getState();
84
+ const deck = getDeck();
85
+ const solo = deck.solo;
86
+ const activeDeck = state.activeDeck;
87
+
88
+ // Only update URL if relevant state changed.
89
+ if (solo !== lastSolo || activeDeck !== lastActiveDeck) {
90
+ lastSolo = solo;
91
+ lastActiveDeck = activeDeck;
92
+
93
+ const path = solo ? toUrlPath(solo) : toUrlPath(activeDeck);
94
+ if (window.location.pathname !== path) {
95
+ // TODO(thure): In some browsers, this only preserves the most recent state change, even though this is not `history.replace`…
96
+ history.pushState(null, '', `${path}${window.location.search}`);
97
+ }
98
+ }
99
+ });
100
+
101
+ return Capability.contributes(Capabilities.Null, null, () =>
102
+ Effect.sync(() => {
103
+ window.removeEventListener('popstate', handleNavigation);
104
+ unsubscribe();
105
+ }),
106
+ );
107
+ }),
108
+ );
@@ -4,7 +4,8 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface, useAppGraph } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
+ import { useAppGraph } from '@dxos/app-toolkit/ui';
8
9
  import { useNode } from '@dxos/plugin-graph';
9
10
  import { useAttended } from '@dxos/react-ui-attention';
10
11
 
@@ -21,7 +22,7 @@ export const ActiveNode = () => {
21
22
  <div role='none' className='sr-only'>
22
23
  {/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.
23
24
  Probably this lives in React-land currently in order to access translations? */}
24
- <Surface role='document-title' data={{ subject: activeNode }} limit={1} />
25
+ <Surface.Surface role='document-title' data={{ subject: activeNode }} limit={1} />
25
26
  </div>
26
27
  );
27
28
  };
@@ -4,9 +4,9 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
8
  import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
9
- import { mx } from '@dxos/react-ui-theme';
9
+ import { mx, osTranslations } from '@dxos/ui-theme';
10
10
 
11
11
  import { meta } from '../../meta';
12
12
  import { CloseSidebarButton, ToggleSidebarButton } from '../Sidebar';
@@ -16,24 +16,24 @@ export const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'top
16
16
  return (
17
17
  <header
18
18
  className={mx(
19
- 'flex items-stretch relative plb-1 pis-1 pie-2',
19
+ 'flex items-stretch relative py-1 ps-1 pe-2',
20
20
  variant === 'topbar' &&
21
- 'fixed inset-inline-0 block-start-[env(safe-area-inset-top)] bs-[--rail-size] border-be border-separator',
21
+ 'fixed inset-x-0 top-[env(safe-area-inset-top)] h-(--dx-rail-size) border-b border-separator',
22
22
  classNames,
23
23
  )}
24
24
  >
25
25
  {variant === 'sidebar' ? <CloseSidebarButton /> : <ToggleSidebarButton />}
26
- <span className='self-center grow mis-1'>{t('current app name', { ns: 'appkit' })}</span>
26
+ <span className='self-center grow ms-1'>{t('current app name', { ns: osTranslations })}</span>
27
27
  {variant === 'topbar' && (
28
28
  <div role='none' className='absolute inset-0 pointer-events-none'>
29
- <div role='none' className='grid bs-full pointer-fine:p-1 max-is-md mli-auto pointer-events-auto'>
30
- <Surface role='search-input' limit={1} />
29
+ <div role='none' className='grid h-full pointer-fine:p-1 max-w-md mx-auto pointer-events-auto'>
30
+ <Surface.Surface role='search-input' limit={1} />
31
31
  </div>
32
32
  </div>
33
33
  )}
34
34
  <span role='none' className='grow' />
35
- <Surface role='header-end' limit={1} />
36
- <Surface role='notch-start' limit={1} />
35
+ <Surface.Surface role='version-info' limit={1} />
36
+ <Surface.Surface role='notch-start' limit={1} />
37
37
  </header>
38
38
  );
39
39
  };
@@ -4,10 +4,9 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { Surface, useCapability } from '@dxos/app-framework/react';
7
+ import { Surface } from '@dxos/app-framework/ui';
8
8
 
9
- import { DeckCapabilities } from '../../capabilities';
10
- import { useBreakpoints } from '../../hooks';
9
+ import { useBreakpoints, useDeckState } from '../../hooks';
11
10
  import { getMode } from '../../types';
12
11
  import { layoutAppliesTopbar } from '../../util';
13
12
  import { fixedSidebarToggleStyles } from '../fragments';
@@ -15,16 +14,16 @@ import { ToggleSidebarButton } from '../Sidebar';
15
14
 
16
15
  export const ContentEmpty = () => {
17
16
  const breakpoint = useBreakpoints();
18
- const { deck } = useCapability(DeckCapabilities.MutableDeckState);
17
+ const { deck } = useDeckState();
19
18
  const layoutMode = getMode(deck);
20
19
  const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
21
20
  return (
22
21
  <div
23
22
  role='none'
24
- className='grid place-items-center p-8 relative bg-deckSurface'
23
+ className='grid place-items-center p-8 relative bg-deck-surface'
25
24
  data-testid='layoutPlugin.firstRunMessage'
26
25
  >
27
- <Surface role='keyshortcuts' />
26
+ <Surface.Surface role='keyshortcuts' />
28
27
  {!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}
29
28
  </div>
30
29
  );
@@ -5,49 +5,38 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
  import React from 'react';
7
7
 
8
- import { Events, IntentPlugin, SettingsPlugin, defineModule, definePlugin } from '@dxos/app-framework';
8
+ import { Capability, Plugin } from '@dxos/app-framework';
9
9
  import { withPluginManager } from '@dxos/app-framework/testing';
10
- import { AttentionPlugin } from '@dxos/plugin-attention';
11
- import { GraphPlugin } from '@dxos/plugin-graph';
12
- import { withTheme } from '@dxos/react-ui/testing';
10
+ import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
11
+ import { corePlugins } from '@dxos/plugin-testing';
12
+ import { withLayout } from '@dxos/react-ui/testing';
13
13
 
14
- import { DeckStateFactory, LayoutIntentResolver } from '../../capabilities';
14
+ import { DeckState, OperationHandler } from '../../capabilities';
15
15
  import { meta as pluginMeta } from '../../meta';
16
16
  import { translations } from '../../translations';
17
17
 
18
18
  import { DeckLayout } from './DeckLayout';
19
19
 
20
+ const TestPlugin = Plugin.define(pluginMeta).pipe(
21
+ Plugin.addModule({
22
+ id: Capability.getModuleTag(DeckState),
23
+ activatesOn: AppActivationEvents.AppGraphReady,
24
+ activate: () => DeckState(),
25
+ }),
26
+ AppPlugin.addOperationHandlerModule({
27
+ activate: OperationHandler,
28
+ }),
29
+ Plugin.make,
30
+ );
31
+
20
32
  const meta = {
21
- title: 'plugins/plugin-deck/DeckLayout',
33
+ title: 'plugins/plugin-deck/components/DeckLayout',
22
34
  component: DeckLayout,
23
35
  render: (args) => <DeckLayout {...args} />,
24
36
  decorators: [
25
- withTheme,
37
+ withLayout({ layout: 'fullscreen' }),
26
38
  withPluginManager({
27
- plugins: [
28
- AttentionPlugin(),
29
- SettingsPlugin(),
30
- IntentPlugin(),
31
- GraphPlugin(),
32
- definePlugin(
33
- {
34
- id: 'example.com/plutin/testing',
35
- name: 'Testing',
36
- },
37
- () => [
38
- defineModule({
39
- id: `${pluginMeta.id}/module/deck-state`,
40
- activatesOn: Events.AppGraphReady,
41
- activate: () => DeckStateFactory(),
42
- }),
43
- defineModule({
44
- id: `${pluginMeta.id}/module/layout-intent-resolver`,
45
- activatesOn: Events.SetupIntentResolver,
46
- activate: LayoutIntentResolver,
47
- }),
48
- ],
49
- )(),
50
- ],
39
+ plugins: [...corePlugins(), TestPlugin()],
51
40
  }),
52
41
  ],
53
42
  parameters: {
@@ -4,9 +4,9 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { useCapability } from '@dxos/app-framework/react';
7
+ import { Mosaic } from '@dxos/react-ui-mosaic';
8
8
 
9
- import { DeckCapabilities } from '../../capabilities';
9
+ import { useDeckState } from '../../hooks';
10
10
 
11
11
  import { ActiveNode } from './ActiveNode';
12
12
  import { DeckMain } from './DeckMain';
@@ -17,16 +17,18 @@ import { Toaster, type ToasterProps } from './Toast';
17
17
  export type DeckLayoutProps = Pick<ToasterProps, 'onDismissToast'>;
18
18
 
19
19
  export const DeckLayout = ({ onDismissToast }: DeckLayoutProps) => {
20
- const context = useCapability(DeckCapabilities.MutableDeckState);
21
- const { toasts } = context;
20
+ const { state } = useDeckState();
21
+ const { toasts } = state;
22
22
 
23
23
  return (
24
- <PopoverRoot>
25
- <ActiveNode />
26
- <DeckMain />
27
- <PopoverContent />
28
- <Dialog />
29
- <Toaster toasts={toasts} onDismissToast={onDismissToast} />
30
- </PopoverRoot>
24
+ <Mosaic.Root>
25
+ <PopoverRoot>
26
+ <ActiveNode />
27
+ <DeckMain />
28
+ <PopoverContent />
29
+ <Dialog />
30
+ <Toaster toasts={toasts} onDismissToast={onDismissToast} />
31
+ </PopoverRoot>
32
+ </Mosaic.Root>
31
33
  );
32
34
  };