@dxos/plugin-deck 0.8.4-main.422d1c7879 → 0.8.4-main.4668b7de9b

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 (381) hide show
  1. package/LICENSE +102 -5
  2. package/PLUGIN.mdl +541 -0
  3. package/README.md +1 -1
  4. package/dist/lib/neutral/DeckLayout-YABVXRDU.mjs +291 -0
  5. package/dist/lib/neutral/DeckLayout-YABVXRDU.mjs.map +7 -0
  6. package/dist/lib/neutral/DeckPlugin.mjs +87 -0
  7. package/dist/lib/neutral/DeckPlugin.mjs.map +7 -0
  8. package/dist/lib/neutral/DeckPlugin.node.mjs +18 -0
  9. package/dist/lib/neutral/DeckPlugin.node.mjs.map +7 -0
  10. package/dist/lib/neutral/DeckPlugin.workerd.mjs +16 -0
  11. package/dist/lib/neutral/DeckPlugin.workerd.mjs.map +7 -0
  12. package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs +27 -0
  13. package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs.map +7 -0
  14. package/dist/lib/{browser/add-toast-EUN62IUE.mjs → neutral/add-toast-TNB6DXWU.mjs} +5 -5
  15. package/dist/lib/{browser/add-toast-EUN62IUE.mjs.map → neutral/add-toast-TNB6DXWU.mjs.map} +2 -2
  16. package/dist/lib/{browser/adjust-XWB6ZZ6U.mjs → neutral/adjust-HNU5CCRO.mjs} +15 -17
  17. package/dist/lib/neutral/adjust-HNU5CCRO.mjs.map +7 -0
  18. package/dist/lib/neutral/app-graph-builder-HMLT627T.mjs +129 -0
  19. package/dist/lib/neutral/app-graph-builder-HMLT627T.mjs.map +7 -0
  20. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  21. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  22. package/dist/lib/neutral/check-app-scheme-A7FZVNZO.mjs +10 -0
  23. package/dist/lib/neutral/chunk-BS4EOYMK.mjs +282 -0
  24. package/dist/lib/neutral/chunk-BS4EOYMK.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-GBIGQKYW.mjs +112 -0
  26. package/dist/lib/neutral/chunk-GBIGQKYW.mjs.map +7 -0
  27. package/dist/lib/{browser/chunk-KUTDCWZF.mjs → neutral/chunk-GLB73Q6U.mjs} +2 -10
  28. package/dist/lib/{browser/chunk-KUTDCWZF.mjs.map → neutral/chunk-GLB73Q6U.mjs.map} +2 -2
  29. package/dist/lib/neutral/chunk-OQGC7JYT.mjs +8 -0
  30. package/dist/lib/neutral/chunk-OQGC7JYT.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-PYEY5SEC.mjs +37 -0
  32. package/dist/lib/neutral/chunk-PYEY5SEC.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-Q534NBCS.mjs +1305 -0
  34. package/dist/lib/neutral/chunk-Q534NBCS.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-VHETZ22W.mjs +101 -0
  36. package/dist/lib/neutral/chunk-VHETZ22W.mjs.map +7 -0
  37. package/dist/lib/{browser/chunk-DF2VZ6W3.mjs → neutral/chunk-ZYYOSX5I.mjs} +1 -1
  38. package/dist/lib/{browser/chunk-DF2VZ6W3.mjs.map → neutral/chunk-ZYYOSX5I.mjs.map} +2 -2
  39. package/dist/lib/{browser/close-JXK73YIM.mjs → neutral/close-ASKR22A6.mjs} +12 -12
  40. package/dist/lib/{browser/close-JXK73YIM.mjs.map → neutral/close-ASKR22A6.mjs.map} +2 -2
  41. package/dist/lib/neutral/components/index.mjs +126 -0
  42. package/dist/lib/neutral/components/index.mjs.map +7 -0
  43. package/dist/lib/neutral/containers/index.mjs +32 -0
  44. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  45. package/dist/lib/neutral/hooks/index.mjs +159 -0
  46. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  47. package/dist/lib/{node-esm/types → neutral}/index.mjs +13 -8
  48. package/dist/lib/neutral/meta.json +1 -0
  49. package/dist/lib/neutral/meta.mjs +8 -0
  50. package/dist/lib/neutral/notification-tracker-BYKXOXDE.mjs +128 -0
  51. package/dist/lib/neutral/notification-tracker-BYKXOXDE.mjs.map +7 -0
  52. package/dist/lib/{browser/open-K2JOEW2E.mjs → neutral/open-IFIEYVHG.mjs} +34 -25
  53. package/dist/lib/neutral/open-IFIEYVHG.mjs.map +7 -0
  54. package/dist/lib/neutral/operation-handler-266CVMTW.mjs +13 -0
  55. package/dist/lib/neutral/operation-handler-266CVMTW.mjs.map +7 -0
  56. package/dist/lib/neutral/operations/index.mjs +8 -0
  57. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  58. package/dist/lib/neutral/plugin.mjs +16 -0
  59. package/dist/lib/neutral/plugin.mjs.map +7 -0
  60. package/dist/lib/neutral/react-root-HH5DEUOG.mjs +44 -0
  61. package/dist/lib/neutral/react-root-HH5DEUOG.mjs.map +7 -0
  62. package/dist/lib/neutral/react-surface-3UVVCK3O.mjs +34 -0
  63. package/dist/lib/neutral/react-surface-3UVVCK3O.mjs.map +7 -0
  64. package/dist/lib/{browser/revert-workspace-BNIR5U64.mjs → neutral/revert-workspace-B2QLT2C4.mjs} +5 -5
  65. package/dist/lib/{browser/revert-workspace-BNIR5U64.mjs.map → neutral/revert-workspace-B2QLT2C4.mjs.map} +2 -2
  66. package/dist/lib/{browser/scroll-into-view-4GSKC3GA.mjs → neutral/scroll-into-view-B52C3PJO.mjs} +5 -5
  67. package/dist/lib/{browser/scroll-into-view-4GSKC3GA.mjs.map → neutral/scroll-into-view-B52C3PJO.mjs.map} +2 -2
  68. package/dist/lib/{browser/set-XCG6NIAO.mjs → neutral/set-PA35ONXO.mjs} +11 -11
  69. package/dist/lib/{browser/set-XCG6NIAO.mjs.map → neutral/set-PA35ONXO.mjs.map} +2 -2
  70. package/dist/lib/{browser/set-layout-mode-BEVNGOY2.mjs → neutral/set-layout-mode-RPCCPQRB.mjs} +10 -15
  71. package/dist/lib/neutral/set-layout-mode-RPCCPQRB.mjs.map +7 -0
  72. package/dist/lib/neutral/settings-EGNYUM4T.mjs +33 -0
  73. package/dist/lib/neutral/settings-EGNYUM4T.mjs.map +7 -0
  74. package/dist/lib/neutral/state-IIDXMQUO.mjs +86 -0
  75. package/dist/lib/neutral/state-IIDXMQUO.mjs.map +7 -0
  76. package/dist/lib/{browser/switch-workspace-ICJJWNFT.mjs → neutral/switch-workspace-LZF4KZXH.mjs} +9 -17
  77. package/dist/lib/neutral/switch-workspace-LZF4KZXH.mjs.map +7 -0
  78. package/dist/lib/neutral/translations.mjs +59 -0
  79. package/dist/lib/neutral/translations.mjs.map +7 -0
  80. package/dist/lib/{browser → neutral}/types/index.mjs +7 -5
  81. package/dist/lib/neutral/types/index.mjs.map +7 -0
  82. package/dist/lib/{browser/update-companion-VPCBH3YT.mjs → neutral/update-companion-YUCZZVGY.mjs} +7 -7
  83. package/dist/lib/neutral/update-companion-YUCZZVGY.mjs.map +7 -0
  84. package/dist/lib/{browser/update-complementary-74DEQY6T.mjs → neutral/update-complementary-7FZNB55J.mjs} +6 -6
  85. package/dist/lib/neutral/update-complementary-7FZNB55J.mjs.map +7 -0
  86. package/dist/lib/{browser/update-dialog-6TDUYI5R.mjs → neutral/update-dialog-FNQTSSAP.mjs} +5 -5
  87. package/dist/lib/{browser/update-dialog-6TDUYI5R.mjs.map → neutral/update-dialog-FNQTSSAP.mjs.map} +2 -2
  88. package/dist/lib/neutral/update-plank-size-3YW4NXEY.mjs +26 -0
  89. package/dist/lib/neutral/update-plank-size-3YW4NXEY.mjs.map +7 -0
  90. package/dist/lib/{browser/update-popover-W7E2Z5T6.mjs → neutral/update-popover-G2VUD7E6.mjs} +5 -5
  91. package/dist/lib/{browser/update-popover-W7E2Z5T6.mjs.map → neutral/update-popover-G2VUD7E6.mjs.map} +2 -2
  92. package/dist/lib/{browser/update-sidebar-H3A6ZFRU.mjs → neutral/update-sidebar-KRHPUHUB.mjs} +6 -6
  93. package/dist/lib/{browser/update-sidebar-H3A6ZFRU.mjs.map → neutral/update-sidebar-KRHPUHUB.mjs.map} +2 -2
  94. package/dist/lib/neutral/url-handler-4SW6BFAC.mjs +229 -0
  95. package/dist/lib/neutral/url-handler-4SW6BFAC.mjs.map +7 -0
  96. package/dist/types/src/DeckPlugin.d.ts +1 -0
  97. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  98. package/dist/types/src/DeckPlugin.node.d.ts +4 -0
  99. package/dist/types/src/DeckPlugin.node.d.ts.map +1 -0
  100. package/dist/types/src/DeckPlugin.test.d.ts +2 -0
  101. package/dist/types/src/DeckPlugin.test.d.ts.map +1 -0
  102. package/dist/types/src/DeckPlugin.workerd.d.ts +4 -0
  103. package/dist/types/src/DeckPlugin.workerd.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/check-app-scheme.d.ts +1 -1
  106. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/index.d.ts +30 -29
  108. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/notification-tracker.d.ts +13 -0
  110. package/dist/types/src/capabilities/notification-tracker.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  112. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/state.d.ts +28 -28
  117. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  118. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/url-handler.d.ts +1 -1
  120. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  121. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  122. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +44 -52
  123. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/Matrix/Matrix.d.ts +2 -2
  125. package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -1
  126. package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -1
  127. package/dist/types/src/containers/Deck/Banner.d.ts +1 -1
  128. package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -1
  129. package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -1
  130. package/dist/types/src/containers/Deck/Deck.stories.d.ts +44 -52
  131. package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -1
  132. package/dist/types/src/containers/Deck/DeckContent.d.ts +4 -4
  133. package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -1
  134. package/dist/types/src/containers/Deck/DeckRoot.d.ts +5 -8
  135. package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -1
  136. package/dist/types/src/containers/Deck/DeckViewport.d.ts +4 -7
  137. package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -1
  138. package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -1
  139. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -1
  140. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +44 -52
  141. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
  142. package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -1
  143. package/dist/types/src/containers/DeckLayout/Toast.d.ts +1 -1
  144. package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -1
  145. package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -1
  146. package/dist/types/src/containers/Plank/Plank.d.ts +1 -1
  147. package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -1
  148. package/dist/types/src/containers/Plank/Plank.stories.d.ts +44 -52
  149. package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -1
  150. package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +1 -1
  151. package/dist/types/src/containers/Plank/PlankContent.d.ts +1 -1
  152. package/dist/types/src/containers/Plank/PlankError.d.ts +1 -1
  153. package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -1
  154. package/dist/types/src/containers/Plank/PlankRoot.d.ts +1 -1
  155. package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -1
  156. package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  157. package/dist/types/src/containers/Sidebar/Sidebar.d.ts.map +1 -1
  158. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts +1 -1
  159. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -1
  160. package/dist/types/src/hooks/index.d.ts +0 -1
  161. package/dist/types/src/hooks/index.d.ts.map +1 -1
  162. package/dist/types/src/hooks/useBreakpoints.d.ts +1 -1
  163. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  164. package/dist/types/src/hooks/useDeckCompanions.d.ts +1 -1
  165. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  166. package/dist/types/src/hooks/useMainSize.d.ts.map +1 -1
  167. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  168. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -1
  169. package/dist/types/src/index.d.ts +1 -3
  170. package/dist/types/src/index.d.ts.map +1 -1
  171. package/dist/types/src/layout.d.ts.map +1 -1
  172. package/dist/types/src/meta.d.ts +1 -1
  173. package/dist/types/src/meta.d.ts.map +1 -1
  174. package/dist/types/src/operations/add-toast.d.ts +1 -1
  175. package/dist/types/src/operations/add-toast.d.ts.map +1 -1
  176. package/dist/types/src/operations/adjust.d.ts +3 -3
  177. package/dist/types/src/operations/adjust.d.ts.map +1 -1
  178. package/dist/types/src/operations/close.d.ts +1 -1
  179. package/dist/types/src/operations/close.d.ts.map +1 -1
  180. package/dist/types/src/operations/helpers.d.ts.map +1 -1
  181. package/dist/types/src/operations/index.d.ts +1 -2
  182. package/dist/types/src/operations/index.d.ts.map +1 -1
  183. package/dist/types/src/operations/open.d.ts +1 -1
  184. package/dist/types/src/operations/open.d.ts.map +1 -1
  185. package/dist/types/src/operations/revert-workspace.d.ts +1 -1
  186. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -1
  187. package/dist/types/src/operations/scroll-into-view.d.ts +1 -1
  188. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -1
  189. package/dist/types/src/operations/set-layout-mode.d.ts +1 -1
  190. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -1
  191. package/dist/types/src/operations/set.d.ts +1 -1
  192. package/dist/types/src/operations/set.d.ts.map +1 -1
  193. package/dist/types/src/operations/switch-workspace.d.ts +1 -1
  194. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -1
  195. package/dist/types/src/operations/update-companion.d.ts +1 -1
  196. package/dist/types/src/operations/update-companion.d.ts.map +1 -1
  197. package/dist/types/src/operations/update-complementary.d.ts +1 -1
  198. package/dist/types/src/operations/update-complementary.d.ts.map +1 -1
  199. package/dist/types/src/operations/update-dialog.d.ts +1 -1
  200. package/dist/types/src/operations/update-dialog.d.ts.map +1 -1
  201. package/dist/types/src/operations/update-plank-size.d.ts +3 -3
  202. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -1
  203. package/dist/types/src/operations/update-popover.d.ts +1 -1
  204. package/dist/types/src/operations/update-popover.d.ts.map +1 -1
  205. package/dist/types/src/operations/update-sidebar.d.ts +1 -1
  206. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -1
  207. package/dist/types/src/plugin.d.ts +4 -0
  208. package/dist/types/src/plugin.d.ts.map +1 -0
  209. package/dist/types/src/translations.d.ts +44 -53
  210. package/dist/types/src/translations.d.ts.map +1 -1
  211. package/dist/types/src/types/DeckCapabilities.d.ts +188 -0
  212. package/dist/types/src/types/DeckCapabilities.d.ts.map +1 -0
  213. package/dist/types/src/types/DeckEvents.d.ts +5 -0
  214. package/dist/types/src/types/DeckEvents.d.ts.map +1 -0
  215. package/dist/types/src/types/DeckOperation.d.ts +15 -0
  216. package/dist/types/src/types/DeckOperation.d.ts.map +1 -0
  217. package/dist/types/src/types/Settings.d.ts +4 -5
  218. package/dist/types/src/types/Settings.d.ts.map +1 -1
  219. package/dist/types/src/types/index.d.ts +3 -2
  220. package/dist/types/src/types/index.d.ts.map +1 -1
  221. package/dist/types/src/types/schema.d.ts +6 -7
  222. package/dist/types/src/types/schema.d.ts.map +1 -1
  223. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  224. package/dist/types/src/util/plank-url-params.d.ts.map +1 -1
  225. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -1
  226. package/dist/types/src/util/set-active.d.ts.map +1 -1
  227. package/dist/types/tsconfig.tsbuildinfo +1 -1
  228. package/package.json +105 -69
  229. package/src/DeckPlugin.node.ts +17 -0
  230. package/src/DeckPlugin.test.ts +27 -0
  231. package/src/DeckPlugin.ts +16 -4
  232. package/src/DeckPlugin.workerd.ts +16 -0
  233. package/src/capabilities/app-graph-builder.ts +4 -4
  234. package/src/capabilities/index.ts +2 -1
  235. package/src/capabilities/notification-tracker.ts +132 -0
  236. package/src/capabilities/operation-handler.ts +1 -1
  237. package/src/capabilities/react-root.tsx +20 -15
  238. package/src/capabilities/react-surface.tsx +2 -2
  239. package/src/capabilities/settings.ts +1 -2
  240. package/src/capabilities/tools.ts +1 -1
  241. package/src/capabilities/url-handler.ts +73 -2
  242. package/src/components/DeckSettings/DeckSettings.stories.tsx +2 -2
  243. package/src/components/DeckSettings/DeckSettings.tsx +8 -47
  244. package/src/components/Matrix/Matrix.stories.tsx +2 -2
  245. package/src/components/Matrix/Matrix.tsx +1 -1
  246. package/src/containers/Deck/Banner.tsx +2 -2
  247. package/src/containers/Deck/Deck.stories.tsx +1 -1
  248. package/src/containers/Deck/DeckContent.tsx +2 -5
  249. package/src/containers/Deck/DeckViewport.tsx +7 -13
  250. package/src/containers/DeckLayout/ActiveNode.tsx +1 -1
  251. package/src/containers/DeckLayout/DeckLayout.stories.tsx +8 -10
  252. package/src/containers/DeckLayout/Fallback.tsx +2 -2
  253. package/src/containers/DeckLayout/Popover.tsx +31 -26
  254. package/src/containers/DeckLayout/Toast.tsx +19 -29
  255. package/src/containers/Plank/Plank.stories.tsx +3 -3
  256. package/src/containers/Plank/PlankComponent.tsx +3 -2
  257. package/src/containers/Plank/PlankContent.tsx +1 -1
  258. package/src/containers/Plank/PlankError.tsx +6 -3
  259. package/src/containers/Plank/PlankHeading.tsx +5 -5
  260. package/src/containers/Plank/PlankLoading.tsx +1 -1
  261. package/src/containers/Plank/PlankRoot.tsx +1 -1
  262. package/src/containers/Sidebar/ComplementarySidebar.tsx +20 -39
  263. package/src/containers/Sidebar/Sidebar.tsx +5 -10
  264. package/src/containers/Sidebar/SidebarButton.tsx +7 -1
  265. package/src/hooks/index.ts +0 -1
  266. package/src/hooks/useDeckCompanions.ts +1 -1
  267. package/src/index.ts +1 -3
  268. package/src/meta.ts +24 -6
  269. package/src/operations/add-toast.ts +1 -1
  270. package/src/operations/adjust.ts +4 -5
  271. package/src/operations/close.ts +2 -2
  272. package/src/operations/index.ts +1 -4
  273. package/src/operations/open.ts +29 -13
  274. package/src/operations/revert-workspace.ts +1 -1
  275. package/src/operations/scroll-into-view.ts +1 -1
  276. package/src/operations/set-layout-mode.ts +1 -1
  277. package/src/operations/set.ts +2 -2
  278. package/src/operations/switch-workspace.ts +8 -2
  279. package/src/operations/update-companion.ts +1 -1
  280. package/src/operations/update-complementary.ts +1 -1
  281. package/src/operations/update-dialog.ts +1 -1
  282. package/src/operations/update-plank-size.ts +3 -4
  283. package/src/operations/update-popover.ts +1 -1
  284. package/src/operations/update-sidebar.ts +1 -1
  285. package/src/plugin.ts +11 -0
  286. package/src/translations.ts +4 -12
  287. package/src/types/DeckCapabilities.ts +34 -0
  288. package/src/types/DeckEvents.ts +21 -0
  289. package/src/{operations/definitions.ts → types/DeckOperation.ts} +13 -6
  290. package/src/types/Settings.ts +25 -6
  291. package/src/types/index.ts +4 -2
  292. package/src/types/schema.ts +0 -2
  293. package/src/vite-env.d.ts +5 -0
  294. package/dist/lib/browser/adjust-XWB6ZZ6U.mjs.map +0 -7
  295. package/dist/lib/browser/chunk-5LM6A3EC.mjs +0 -208
  296. package/dist/lib/browser/chunk-5LM6A3EC.mjs.map +0 -7
  297. package/dist/lib/browser/chunk-BRZAVPMC.mjs +0 -48
  298. package/dist/lib/browser/chunk-BRZAVPMC.mjs.map +0 -7
  299. package/dist/lib/browser/chunk-FRVCL5NO.mjs +0 -72
  300. package/dist/lib/browser/chunk-FRVCL5NO.mjs.map +0 -7
  301. package/dist/lib/browser/index.mjs +0 -201
  302. package/dist/lib/browser/index.mjs.map +0 -7
  303. package/dist/lib/browser/meta.json +0 -1
  304. package/dist/lib/browser/open-K2JOEW2E.mjs.map +0 -7
  305. package/dist/lib/browser/operations/index.mjs +0 -13
  306. package/dist/lib/browser/operations/index.mjs.map +0 -7
  307. package/dist/lib/browser/set-layout-mode-BEVNGOY2.mjs.map +0 -7
  308. package/dist/lib/browser/show-undo-5RQNREEB.mjs +0 -59
  309. package/dist/lib/browser/show-undo-5RQNREEB.mjs.map +0 -7
  310. package/dist/lib/browser/switch-workspace-ICJJWNFT.mjs.map +0 -7
  311. package/dist/lib/browser/update-companion-VPCBH3YT.mjs.map +0 -7
  312. package/dist/lib/browser/update-complementary-74DEQY6T.mjs.map +0 -7
  313. package/dist/lib/browser/update-plank-size-5VHZOTHE.mjs +0 -28
  314. package/dist/lib/browser/update-plank-size-5VHZOTHE.mjs.map +0 -7
  315. package/dist/lib/node-esm/add-toast-AZM7NFNM.mjs +0 -25
  316. package/dist/lib/node-esm/add-toast-AZM7NFNM.mjs.map +0 -7
  317. package/dist/lib/node-esm/adjust-ICALXQ6F.mjs +0 -96
  318. package/dist/lib/node-esm/adjust-ICALXQ6F.mjs.map +0 -7
  319. package/dist/lib/node-esm/chunk-A63Q53TW.mjs +0 -73
  320. package/dist/lib/node-esm/chunk-A63Q53TW.mjs.map +0 -7
  321. package/dist/lib/node-esm/chunk-B7WZXRW4.mjs +0 -209
  322. package/dist/lib/node-esm/chunk-B7WZXRW4.mjs.map +0 -7
  323. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  324. package/dist/lib/node-esm/chunk-IRWCUYJY.mjs +0 -71
  325. package/dist/lib/node-esm/chunk-IRWCUYJY.mjs.map +0 -7
  326. package/dist/lib/node-esm/chunk-MB4SDDVY.mjs +0 -50
  327. package/dist/lib/node-esm/chunk-MB4SDDVY.mjs.map +0 -7
  328. package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs +0 -32
  329. package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs.map +0 -7
  330. package/dist/lib/node-esm/close-GC5V3GD5.mjs +0 -45
  331. package/dist/lib/node-esm/close-GC5V3GD5.mjs.map +0 -7
  332. package/dist/lib/node-esm/index.mjs +0 -202
  333. package/dist/lib/node-esm/index.mjs.map +0 -7
  334. package/dist/lib/node-esm/meta.json +0 -1
  335. package/dist/lib/node-esm/open-XXEHIR6G.mjs +0 -151
  336. package/dist/lib/node-esm/open-XXEHIR6G.mjs.map +0 -7
  337. package/dist/lib/node-esm/operations/index.mjs +0 -14
  338. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  339. package/dist/lib/node-esm/revert-workspace-WCXAL5C6.mjs +0 -22
  340. package/dist/lib/node-esm/revert-workspace-WCXAL5C6.mjs.map +0 -7
  341. package/dist/lib/node-esm/scroll-into-view-2ZNU44ZO.mjs +0 -22
  342. package/dist/lib/node-esm/scroll-into-view-2ZNU44ZO.mjs.map +0 -7
  343. package/dist/lib/node-esm/set-5MO2JCUQ.mjs +0 -38
  344. package/dist/lib/node-esm/set-5MO2JCUQ.mjs.map +0 -7
  345. package/dist/lib/node-esm/set-layout-mode-3RK4HIG7.mjs +0 -91
  346. package/dist/lib/node-esm/set-layout-mode-3RK4HIG7.mjs.map +0 -7
  347. package/dist/lib/node-esm/show-undo-WV7SAYGJ.mjs +0 -60
  348. package/dist/lib/node-esm/show-undo-WV7SAYGJ.mjs.map +0 -7
  349. package/dist/lib/node-esm/switch-workspace-VNM75H66.mjs +0 -69
  350. package/dist/lib/node-esm/switch-workspace-VNM75H66.mjs.map +0 -7
  351. package/dist/lib/node-esm/update-companion-SIB3GWH7.mjs +0 -33
  352. package/dist/lib/node-esm/update-companion-SIB3GWH7.mjs.map +0 -7
  353. package/dist/lib/node-esm/update-complementary-CZTIVIXU.mjs +0 -29
  354. package/dist/lib/node-esm/update-complementary-CZTIVIXU.mjs.map +0 -7
  355. package/dist/lib/node-esm/update-dialog-HEDV5XBB.mjs +0 -30
  356. package/dist/lib/node-esm/update-dialog-HEDV5XBB.mjs.map +0 -7
  357. package/dist/lib/node-esm/update-plank-size-JJLU7VE3.mjs +0 -29
  358. package/dist/lib/node-esm/update-plank-size-JJLU7VE3.mjs.map +0 -7
  359. package/dist/lib/node-esm/update-popover-HI5TU2VT.mjs +0 -34
  360. package/dist/lib/node-esm/update-popover-HI5TU2VT.mjs.map +0 -7
  361. package/dist/lib/node-esm/update-sidebar-QB5BA655.mjs +0 -26
  362. package/dist/lib/node-esm/update-sidebar-QB5BA655.mjs.map +0 -7
  363. package/dist/types/src/hooks/useHoistStatusbar.d.ts +0 -3
  364. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +0 -1
  365. package/dist/types/src/operations/definitions.d.ts +0 -15
  366. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  367. package/dist/types/src/operations/show-undo.d.ts +0 -5
  368. package/dist/types/src/operations/show-undo.d.ts.map +0 -1
  369. package/dist/types/src/types/capabilities.d.ts +0 -191
  370. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  371. package/dist/types/src/types/events.d.ts +0 -7
  372. package/dist/types/src/types/events.d.ts.map +0 -1
  373. package/src/hooks/useHoistStatusbar.ts +0 -24
  374. package/src/operations/show-undo.ts +0 -47
  375. package/src/types/capabilities.ts +0 -35
  376. package/src/types/events.ts +0 -21
  377. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/check-app-scheme-A7FZVNZO.mjs.map} +0 -0
  378. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  379. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  380. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  381. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-deck",
3
- "version": "0.8.4-main.422d1c7879",
3
+ "version": "0.8.4-main.4668b7de9b",
4
4
  "description": "DXOS Surface plugin for the main application layout.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -8,84 +8,120 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
12
12
  "author": "DXOS.org",
13
13
  "sideEffects": true,
14
14
  "type": "module",
15
15
  "imports": {
16
- "#capabilities": "./src/capabilities/index.ts",
17
- "#components": "./src/components/index.ts",
18
- "#containers": "./src/containers/index.ts",
19
- "#hooks": "./src/hooks/index.ts",
20
- "#meta": "./src/meta.ts",
21
- "#operations": "./src/operations/index.ts",
22
- "#types": "./src/types/index.ts"
16
+ "#capabilities": {
17
+ "source": "./src/capabilities/index.ts",
18
+ "types": "./dist/types/src/capabilities/index.d.ts",
19
+ "default": "./dist/lib/neutral/capabilities/index.mjs"
20
+ },
21
+ "#components": {
22
+ "source": "./src/components/index.ts",
23
+ "types": "./dist/types/src/components/index.d.ts",
24
+ "default": "./dist/lib/neutral/components/index.mjs"
25
+ },
26
+ "#containers": {
27
+ "source": "./src/containers/index.ts",
28
+ "types": "./dist/types/src/containers/index.d.ts",
29
+ "default": "./dist/lib/neutral/containers/index.mjs"
30
+ },
31
+ "#hooks": {
32
+ "source": "./src/hooks/index.ts",
33
+ "types": "./dist/types/src/hooks/index.d.ts",
34
+ "default": "./dist/lib/neutral/hooks/index.mjs"
35
+ },
36
+ "#meta": {
37
+ "source": "./src/meta.ts",
38
+ "types": "./dist/types/src/meta.d.ts",
39
+ "default": "./dist/lib/neutral/meta.mjs"
40
+ },
41
+ "#operations": {
42
+ "source": "./src/operations/index.ts",
43
+ "types": "./dist/types/src/operations/index.d.ts",
44
+ "default": "./dist/lib/neutral/operations/index.mjs"
45
+ },
46
+ "#plugin": {
47
+ "source": {
48
+ "workerd": "./src/DeckPlugin.workerd.ts",
49
+ "node": "./src/DeckPlugin.node.ts",
50
+ "default": "./src/DeckPlugin.ts"
51
+ },
52
+ "types": "./dist/types/src/DeckPlugin.d.ts",
53
+ "workerd": "./dist/lib/neutral/DeckPlugin.workerd.mjs",
54
+ "node": "./dist/lib/neutral/DeckPlugin.node.mjs",
55
+ "default": "./dist/lib/neutral/DeckPlugin.mjs"
56
+ },
57
+ "#translations": {
58
+ "source": "./src/translations.ts",
59
+ "types": "./dist/types/src/translations.d.ts",
60
+ "default": "./dist/lib/neutral/translations.mjs"
61
+ },
62
+ "#types": {
63
+ "source": "./src/types/index.ts",
64
+ "types": "./dist/types/src/types/index.d.ts",
65
+ "default": "./dist/lib/neutral/types/index.mjs"
66
+ }
23
67
  },
24
68
  "exports": {
25
69
  ".": {
26
70
  "source": "./src/index.ts",
27
71
  "types": "./dist/types/src/index.d.ts",
28
- "browser": "./dist/lib/browser/index.mjs"
72
+ "default": "./dist/lib/neutral/index.mjs"
29
73
  },
30
- "./operations": {
31
- "source": "./src/operations/index.ts",
32
- "types": "./dist/types/src/operations/index.d.ts",
33
- "browser": "./dist/lib/browser/operations/index.mjs",
34
- "node": "./dist/lib/node-esm/operations/index.mjs"
74
+ "./assets/PLUGIN.mdl": "./PLUGIN.mdl",
75
+ "./plugin": {
76
+ "source": "./src/plugin.ts",
77
+ "types": "./dist/types/src/plugin.d.ts",
78
+ "default": "./dist/lib/neutral/plugin.mjs"
35
79
  },
36
- "./types": {
37
- "source": "./src/types/index.ts",
38
- "types": "./dist/types/src/types/index.d.ts",
39
- "browser": "./dist/lib/browser/types/index.mjs",
40
- "node": "./dist/lib/node-esm/types/index.mjs"
80
+ "./translations": {
81
+ "source": "./src/translations.ts",
82
+ "types": "./dist/types/src/translations.d.ts",
83
+ "default": "./dist/lib/neutral/translations.mjs"
41
84
  }
42
85
  },
43
86
  "types": "dist/types/src/index.d.ts",
44
87
  "files": [
45
88
  "dist",
46
- "src"
89
+ "src",
90
+ "PLUGIN.mdl"
47
91
  ],
48
92
  "dependencies": {
49
- "@effect-atom/atom": "^0.5.1",
50
93
  "@effect-atom/atom-react": "^0.5.0",
51
- "@effect/ai": "0.33.2",
52
- "@effect/experimental": "0.58.0",
53
94
  "@fluentui/react-tabster": "9.26.11",
54
95
  "@radix-ui/react-context": "1.1.1",
55
- "@tauri-apps/plugin-deep-link": "^2.2.0",
96
+ "@tauri-apps/plugin-deep-link": "^2.4.9",
56
97
  "immer": "^10.1.1",
57
- "@dxos/ai": "0.8.4-main.422d1c7879",
58
- "@dxos/app-graph": "0.8.4-main.422d1c7879",
59
- "@dxos/app-toolkit": "0.8.4-main.422d1c7879",
60
- "@dxos/assistant": "0.8.4-main.422d1c7879",
61
- "@dxos/async": "0.8.4-main.422d1c7879",
62
- "@dxos/blueprints": "0.8.4-main.422d1c7879",
63
- "@dxos/context": "0.8.4-main.422d1c7879",
64
- "@dxos/debug": "0.8.4-main.422d1c7879",
65
- "@dxos/effect": "0.8.4-main.422d1c7879",
66
- "@dxos/echo": "0.8.4-main.422d1c7879",
67
- "@dxos/errors": "0.8.4-main.422d1c7879",
68
- "@dxos/invariant": "0.8.4-main.422d1c7879",
69
- "@dxos/keyboard": "0.8.4-main.422d1c7879",
70
- "@dxos/app-framework": "0.8.4-main.422d1c7879",
71
- "@dxos/operation": "0.8.4-main.422d1c7879",
72
- "@dxos/plugin-attention": "0.8.4-main.422d1c7879",
73
- "@dxos/log": "0.8.4-main.422d1c7879",
74
- "@dxos/plugin-graph": "0.8.4-main.422d1c7879",
75
- "@dxos/plugin-client": "0.8.4-main.422d1c7879",
76
- "@dxos/plugin-observability": "0.8.4-main.422d1c7879",
77
- "@dxos/plugin-theme": "0.8.4-main.422d1c7879",
78
- "@dxos/react-client": "0.8.4-main.422d1c7879",
79
- "@dxos/react-error-boundary": "0.8.4-main.422d1c7879",
80
- "@dxos/react-ui-attention": "0.8.4-main.422d1c7879",
81
- "@dxos/react-ui-mosaic": "0.8.4-main.422d1c7879",
82
- "@dxos/react-ui-form": "0.8.4-main.422d1c7879",
83
- "@dxos/react-ui-menu": "0.8.4-main.422d1c7879",
84
- "@dxos/react-ui-tabs": "0.8.4-main.422d1c7879",
85
- "@dxos/react-ui-stack": "0.8.4-main.422d1c7879",
86
- "@dxos/react-ui-text-tooltip": "0.8.4-main.422d1c7879",
87
- "@dxos/ui-types": "0.8.4-main.422d1c7879",
88
- "@dxos/util": "0.8.4-main.422d1c7879"
98
+ "@dxos/app-framework": "0.8.4-main.4668b7de9b",
99
+ "@dxos/app-graph": "0.8.4-main.4668b7de9b",
100
+ "@dxos/app-toolkit": "0.8.4-main.4668b7de9b",
101
+ "@dxos/compute": "0.8.4-main.4668b7de9b",
102
+ "@dxos/context": "0.8.4-main.4668b7de9b",
103
+ "@dxos/echo": "0.8.4-main.4668b7de9b",
104
+ "@dxos/async": "0.8.4-main.4668b7de9b",
105
+ "@dxos/effect": "0.8.4-main.4668b7de9b",
106
+ "@dxos/errors": "0.8.4-main.4668b7de9b",
107
+ "@dxos/keyboard": "0.8.4-main.4668b7de9b",
108
+ "@dxos/invariant": "0.8.4-main.4668b7de9b",
109
+ "@dxos/keys": "0.8.4-main.4668b7de9b",
110
+ "@dxos/log": "0.8.4-main.4668b7de9b",
111
+ "@dxos/operation": "0.8.4-main.4668b7de9b",
112
+ "@dxos/plugin-attention": "0.8.4-main.4668b7de9b",
113
+ "@dxos/plugin-client": "0.8.4-main.4668b7de9b",
114
+ "@dxos/plugin-observability": "0.8.4-main.4668b7de9b",
115
+ "@dxos/react-ui-attention": "0.8.4-main.4668b7de9b",
116
+ "@dxos/react-ui-form": "0.8.4-main.4668b7de9b",
117
+ "@dxos/react-ui-mosaic": "0.8.4-main.4668b7de9b",
118
+ "@dxos/react-ui-stack": "0.8.4-main.4668b7de9b",
119
+ "@dxos/react-ui-tabs": "0.8.4-main.4668b7de9b",
120
+ "@dxos/react-ui-text-tooltip": "0.8.4-main.4668b7de9b",
121
+ "@dxos/react-ui-menu": "0.8.4-main.4668b7de9b",
122
+ "@dxos/ui-types": "0.8.4-main.4668b7de9b",
123
+ "@dxos/util": "0.8.4-main.4668b7de9b",
124
+ "@dxos/plugin-graph": "0.8.4-main.4668b7de9b"
89
125
  },
90
126
  "devDependencies": {
91
127
  "@effect-atom/atom-react": "^0.5.0",
@@ -95,16 +131,16 @@
95
131
  "effect": "3.20.0",
96
132
  "react": "~19.2.3",
97
133
  "react-dom": "~19.2.3",
98
- "vite": "^7.1.11",
99
- "@dxos/plugin-testing": "0.8.4-main.422d1c7879",
100
- "@dxos/react-hooks": "0.8.4-main.422d1c7879",
101
- "@dxos/random": "0.8.4-main.422d1c7879",
102
- "@dxos/react-ui-syntax-highlighter": "0.8.4-main.422d1c7879",
103
- "@dxos/react-ui": "0.8.4-main.422d1c7879",
104
- "@dxos/schema": "0.8.4-main.422d1c7879",
105
- "@dxos/storybook-utils": "0.8.4-main.422d1c7879",
106
- "@dxos/types": "0.8.4-main.422d1c7879",
107
- "@dxos/ui-theme": "0.8.4-main.422d1c7879"
134
+ "vite": "^8.0.14",
135
+ "@dxos/random": "0.8.4-main.4668b7de9b",
136
+ "@dxos/plugin-testing": "0.8.4-main.4668b7de9b",
137
+ "@dxos/react-hooks": "0.8.4-main.4668b7de9b",
138
+ "@dxos/react-ui-syntax-highlighter": "0.8.4-main.4668b7de9b",
139
+ "@dxos/react-ui": "0.8.4-main.4668b7de9b",
140
+ "@dxos/schema": "0.8.4-main.4668b7de9b",
141
+ "@dxos/types": "0.8.4-main.4668b7de9b",
142
+ "@dxos/ui-theme": "0.8.4-main.4668b7de9b",
143
+ "@dxos/storybook-utils": "0.8.4-main.4668b7de9b"
108
144
  },
109
145
  "peerDependencies": {
110
146
  "@effect-atom/atom-react": "^0.5.0",
@@ -112,8 +148,8 @@
112
148
  "effect": "3.20.0",
113
149
  "react": "~19.2.3",
114
150
  "react-dom": "~19.2.3",
115
- "@dxos/react-ui": "0.8.4-main.422d1c7879",
116
- "@dxos/ui-theme": "0.8.4-main.422d1c7879"
151
+ "@dxos/ui-theme": "0.8.4-main.4668b7de9b",
152
+ "@dxos/react-ui": "0.8.4-main.4668b7de9b"
117
153
  },
118
154
  "publishConfig": {
119
155
  "access": "public"
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { AppPlugin } from '@dxos/app-toolkit';
7
+
8
+ import { AppGraphBuilder, OperationHandler } from '#capabilities';
9
+ import { meta } from '#meta';
10
+
11
+ export const DeckPlugin = Plugin.define(meta).pipe(
12
+ AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),
13
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
14
+ Plugin.make,
15
+ );
16
+
17
+ export default DeckPlugin;
@@ -0,0 +1,27 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { ActivationEvents } from '@dxos/app-framework';
8
+ import { createComposerTestApp } from '@dxos/plugin-testing/harness';
9
+
10
+ import { DeckPlugin } from '#plugin';
11
+
12
+ import { meta } from './meta';
13
+
14
+ const moduleId = (name: string) => `${meta.id}.module.${name}`;
15
+
16
+ describe('DeckPlugin', () => {
17
+ test('modules activate on the expected events', async ({ expect }) => {
18
+ await using harness = await createComposerTestApp({
19
+ plugins: [DeckPlugin()],
20
+ });
21
+
22
+ expect(harness.manager.getActive()).toContain(moduleId('AppGraphBuilder'));
23
+
24
+ await harness.fire(ActivationEvents.SetupProcessManager);
25
+ expect(harness.manager.getActive()).toContain(moduleId('OperationHandler'));
26
+ });
27
+ });
package/src/DeckPlugin.ts CHANGED
@@ -6,22 +6,25 @@ import { setAutoFreeze } from 'immer';
6
6
 
7
7
  import { ActivationEvent, ActivationEvents, Plugin } from '@dxos/app-framework';
8
8
  import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
9
- import { translations as stackTranslations } from '@dxos/react-ui-stack';
9
+ import { translations as stackTranslations } from '@dxos/react-ui-stack/translations';
10
10
 
11
11
  import {
12
12
  AppGraphBuilder,
13
13
  CheckAppScheme,
14
14
  DeckSettings,
15
15
  DeckState,
16
+ NotificationTracker,
16
17
  OperationHandler,
17
18
  ReactRoot,
18
19
  ReactSurface,
19
20
  UrlHandler,
20
21
  } from '#capabilities';
21
22
  import { meta } from '#meta';
23
+ import { translations } from '#translations';
22
24
  import { DeckEvents } from '#types';
23
25
 
24
- import { translations } from './translations';
26
+ // eslint-disable-next-line import/no-relative-packages
27
+ import pluginSpec from '../PLUGIN.mdl?raw';
25
28
 
26
29
  // NOTE(Zan): When producing values with immer, we shouldn't auto-freeze them because
27
30
  // our signal implementation needs to add some hidden properties to the produced values.
@@ -39,7 +42,7 @@ export const DeckPlugin = Plugin.define(meta).pipe(
39
42
  activate: DeckSettings,
40
43
  }),
41
44
  Plugin.addModule({
42
- activatesOn: ActivationEvent.allOf(DeckEvents.SettingsReady, ActivationEvents.OperationInvokerReady),
45
+ activatesOn: ActivationEvent.allOf(DeckEvents.SettingsReady, ActivationEvents.ProcessManagerReady),
43
46
  activate: CheckAppScheme,
44
47
  }),
45
48
  Plugin.addModule({
@@ -59,8 +62,17 @@ export const DeckPlugin = Plugin.define(meta).pipe(
59
62
  // activate: Tools,
60
63
  // }),
61
64
  Plugin.addModule({
62
- activatesOn: ActivationEvent.allOf(ActivationEvents.OperationInvokerReady, DeckEvents.StateReady),
65
+ activatesOn: ActivationEvent.allOf(ActivationEvents.ProcessManagerReady, DeckEvents.StateReady),
63
66
  activate: UrlHandler,
64
67
  }),
68
+ Plugin.addModule({
69
+ activatesOn: ActivationEvent.allOf(ActivationEvents.ProcessManagerReady, DeckEvents.StateReady),
70
+ activate: NotificationTracker,
71
+ }),
72
+ AppPlugin.addPluginAssetModule({
73
+ asset: { pluginId: meta.id, path: 'PLUGIN.mdl', content: pluginSpec, mimeType: 'application/x-mdl' },
74
+ }),
65
75
  Plugin.make,
66
76
  );
77
+
78
+ export default DeckPlugin;
@@ -0,0 +1,16 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Plugin } from '@dxos/app-framework';
6
+ import { AppPlugin } from '@dxos/app-toolkit';
7
+
8
+ import { OperationHandler } from '#capabilities';
9
+ import { meta } from '#meta';
10
+
11
+ export const DeckPlugin = Plugin.define(meta).pipe(
12
+ AppPlugin.addOperationHandlerModule({ activate: OperationHandler }),
13
+ Plugin.make,
14
+ );
15
+
16
+ export default DeckPlugin;
@@ -6,8 +6,8 @@ import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
8
  import { AppCapabilities, AppNode, LayoutOperation } from '@dxos/app-toolkit';
9
- import { Operation } from '@dxos/operation';
10
- import { AttentionCapabilities } from '@dxos/plugin-attention/types';
9
+ import { Operation } from '@dxos/compute';
10
+ import { AttentionCapabilities } from '@dxos/plugin-attention';
11
11
  import { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';
12
12
 
13
13
  import { meta } from '#meta';
@@ -17,7 +17,7 @@ export default Capability.makeModule(
17
17
  Effect.fnUntraced(function* () {
18
18
  const extensions = yield* Effect.all([
19
19
  GraphBuilder.createExtension({
20
- id: 'not-found',
20
+ id: 'notFound',
21
21
  match: NodeMatcher.whenRoot,
22
22
  connector: () => Effect.succeed([AppNode.makeNotFound()]),
23
23
  }),
@@ -112,7 +112,7 @@ export default Capability.makeModule(
112
112
  macos: "meta+'",
113
113
  },
114
114
  disposition: 'pin-end',
115
- position: 'hoist',
115
+ position: 'last',
116
116
  l0Breakpoint: 'lg',
117
117
  },
118
118
  };
@@ -3,10 +3,11 @@
3
3
  //
4
4
 
5
5
  import { Capability } from '@dxos/app-framework';
6
- import { OperationHandlerSet } from '@dxos/operation';
6
+ import { OperationHandlerSet } from '@dxos/compute';
7
7
 
8
8
  export const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));
9
9
  export const CheckAppScheme = Capability.lazy('CheckAppScheme', () => import('./check-app-scheme'));
10
+ export const NotificationTracker = Capability.lazy('NotificationTracker', () => import('./notification-tracker'));
10
11
  export const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(
11
12
  'OperationHandler',
12
13
  () => import('./operation-handler'),
@@ -0,0 +1,132 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+ import * as Fiber from 'effect/Fiber';
7
+ import * as Stream from 'effect/Stream';
8
+
9
+ import { Capabilities, Capability } from '@dxos/app-framework';
10
+ import { type LayoutOperation } from '@dxos/app-toolkit';
11
+ import { Process } from '@dxos/compute';
12
+
13
+ import { meta } from '#meta';
14
+ import { DeckCapabilities } from '#types';
15
+
16
+ const NOTIFY_TOAST_DURATION = 5_000;
17
+ const ERROR_TOAST_DURATION = 10_000;
18
+ const UNDO_TOAST_DURATION = 10_000;
19
+
20
+ /**
21
+ * The single producer of toasts driven by operation invocations:
22
+ * - Per-invoke notifications ride the process monitor: each invocation spawns a process carrying the
23
+ * caller's `notify` config on its params; this tracker watches process state transitions and toasts
24
+ * on start / success / failure.
25
+ * - Undo toasts come from the history tracker's `undoable` stream (it owns the undo registry lookup);
26
+ * the toast action triggers `historyTracker.undoPromise()`.
27
+ */
28
+ export default Capability.makeModule(
29
+ Effect.fnUntraced(function* () {
30
+ const capabilities = yield* Capability.Service;
31
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
32
+ const ephemeralAtom = yield* Capability.get(DeckCapabilities.EphemeralState);
33
+ const monitor = yield* Capability.get(Capabilities.ProcessMonitor);
34
+
35
+ const addToast = (toast: LayoutOperation.Toast) => {
36
+ const state = registry.get(ephemeralAtom);
37
+ registry.set(ephemeralAtom, { ...state, toasts: [...state.toasts, toast] });
38
+ };
39
+
40
+ //
41
+ // Notifications — driven by the process monitor.
42
+ //
43
+
44
+ // Tracks the last-seen state per process so we only toast on transitions.
45
+ const lastState = new Map<Process.ID, Process.State>();
46
+
47
+ const handleProcesses = (processes: readonly Process.Info[]) => {
48
+ const seen = new Set<Process.ID>();
49
+ for (const process of processes) {
50
+ seen.add(process.pid);
51
+ const previous = lastState.get(process.pid);
52
+ lastState.set(process.pid, process.state);
53
+ if (previous === process.state) {
54
+ continue;
55
+ }
56
+
57
+ const notify = process.params.notify;
58
+ if (!notify) {
59
+ continue;
60
+ }
61
+
62
+ // Transition into RUNNING (the first snapshot may be a pre-RUNNING state like IDLE/HYBERNATING).
63
+ if (previous !== Process.State.RUNNING && process.state === Process.State.RUNNING && notify.start) {
64
+ addToast({ id: `notify-start-${process.pid}`, title: notify.start, duration: NOTIFY_TOAST_DURATION });
65
+ } else if (process.state === Process.State.SUCCEEDED && notify.success) {
66
+ addToast({ id: `notify-success-${process.pid}`, title: notify.success, duration: NOTIFY_TOAST_DURATION });
67
+ } else if (process.state === Process.State.FAILED && notify.error) {
68
+ addToast({
69
+ id: `notify-error-${process.pid}`,
70
+ title: notify.error,
71
+ ...(process.error ? { description: process.error } : {}),
72
+ icon: 'ph--warning--regular',
73
+ duration: ERROR_TOAST_DURATION,
74
+ });
75
+ }
76
+ }
77
+
78
+ // Drop bookkeeping for processes that have left the tree.
79
+ for (const pid of lastState.keys()) {
80
+ if (!seen.has(pid)) {
81
+ lastState.delete(pid);
82
+ }
83
+ }
84
+ };
85
+
86
+ const unsubscribeMonitor = registry.subscribe(monitor.processTreeAtom, handleProcesses);
87
+
88
+ //
89
+ // Undo — driven by the history tracker's `undoable` stream (it owns the registry lookup).
90
+ //
91
+
92
+ const showUndoToast = (message: LayoutOperation.Toast['title'], onUndo: () => void) => {
93
+ const undoId = `notify-undo-${crypto.randomUUID()}`;
94
+ const state = registry.get(ephemeralAtom);
95
+ // Replace the previous undo toast (only the most recent action can be undone).
96
+ const toasts = state.currentUndoId
97
+ ? state.toasts.filter((toast) => toast.id !== state.currentUndoId)
98
+ : state.toasts;
99
+ const toast: LayoutOperation.Toast = {
100
+ id: undoId,
101
+ title: message ?? ['undo-available.label', { ns: meta.id }],
102
+ duration: UNDO_TOAST_DURATION,
103
+ actionLabel: ['undo-action.label', { ns: meta.id }],
104
+ actionAlt: ['undo-action.alt', { ns: meta.id }],
105
+ closeLabel: ['undo-close.label', { ns: meta.id }],
106
+ onAction: onUndo,
107
+ };
108
+ registry.set(ephemeralAtom, { ...state, currentUndoId: undoId, toasts: [...toasts, toast] });
109
+ };
110
+
111
+ // The history tracker is contributed on ProcessManagerReady, possibly after this module activates;
112
+ // `waitFor` resolves it once available, then we observe its undoable stream.
113
+ const undoFiber = Effect.runFork(
114
+ Effect.gen(function* () {
115
+ const historyTracker = yield* Capability.waitFor(Capabilities.HistoryTracker);
116
+ yield* Stream.fromPubSub(historyTracker.undoable).pipe(
117
+ Stream.runForEach((event) =>
118
+ Effect.sync(() => showUndoToast(event.message, () => void historyTracker.undoPromise())),
119
+ ),
120
+ );
121
+ }).pipe(Effect.provideService(Capability.Service, capabilities)),
122
+ );
123
+
124
+ // Track both subscriptions so they are torn down when the module deactivates.
125
+ return Capability.contributes(Capabilities.Null, null, () =>
126
+ Effect.gen(function* () {
127
+ unsubscribeMonitor();
128
+ yield* Fiber.interrupt(undoFiber);
129
+ }),
130
+ );
131
+ }),
132
+ );
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
7
  import { Capabilities, Capability } from '@dxos/app-framework';
8
- import type { OperationHandlerSet } from '@dxos/operation';
8
+ import type { OperationHandlerSet } from '@dxos/compute';
9
9
 
10
10
  import { DeckOperationHandlerSet } from '#operations';
11
11
 
@@ -20,22 +20,27 @@ export default Capability.makeModule(() =>
20
20
 
21
21
  const handleDismissToast = useCallback(
22
22
  (id: string) => {
23
- const index = state.toasts.findIndex((toast) => toast.id === id);
24
- if (index !== -1) {
25
- // Allow time for the toast to animate out.
26
- // TODO(burdon): Factor out and unregister timeout.
27
- setTimeout(() => {
28
- updateEphemeral((s) => {
29
- const toastToRemove = s.toasts[index];
30
- const newCurrentUndoId = toastToRemove?.id === s.currentUndoId ? undefined : s.currentUndoId;
31
- return {
32
- ...s,
33
- currentUndoId: newCurrentUndoId,
34
- toasts: s.toasts.filter((_, i) => i !== index),
35
- };
36
- });
37
- }, 1_000);
23
+ if (!state.toasts.some((toast) => toast.id === id)) {
24
+ return;
38
25
  }
26
+ // Allow time for the toast exit animation (animate-toast-hide, 100ms) before unmounting.
27
+ // TODO(burdon): Factor out and unregister timeout.
28
+ setTimeout(() => {
29
+ // Re-resolve the toast by id inside the update: the toast list may have changed during
30
+ // the delay, so a captured index would point at the wrong (or a missing) entry.
31
+ updateEphemeral((s) => {
32
+ const toastToRemove = s.toasts.find((toast) => toast.id === id);
33
+ if (!toastToRemove) {
34
+ return s;
35
+ }
36
+ const newCurrentUndoId = toastToRemove.id === s.currentUndoId ? undefined : s.currentUndoId;
37
+ return {
38
+ ...s,
39
+ currentUndoId: newCurrentUndoId,
40
+ toasts: s.toasts.filter((toast) => toast.id !== id),
41
+ };
42
+ });
43
+ }, 150);
39
44
  },
40
45
  [state.toasts, updateEphemeral],
41
46
  );
@@ -18,7 +18,7 @@ export default Capability.makeModule(() =>
18
18
  Effect.succeed(
19
19
  Capability.contributes(Capabilities.ReactSurface, [
20
20
  Surface.create({
21
- id: 'plugin-settings',
21
+ id: 'pluginSettings',
22
22
  filter: AppSurface.settings(AppSurface.Article, meta.id),
23
23
  component: ({ data: { subject } }) => {
24
24
  const { settings, updateSettings } = useSettingsState<Settings.Settings>(subject.atom);
@@ -26,7 +26,7 @@ export default Capability.makeModule(() =>
26
26
  },
27
27
  }),
28
28
  Surface.create({
29
- id: 'not-found',
29
+ id: 'notFound',
30
30
  role: 'article',
31
31
  filter: (data): data is { attendableId: string } => data.attendableId === NOT_FOUND_PATH,
32
32
  component: () => <NotFoundArticle />,
@@ -19,8 +19,7 @@ export default Capability.makeModule(() =>
19
19
  defaultValue: () => ({
20
20
  showHints: false,
21
21
  enableDeck: false,
22
- enableStatusbar: false,
23
- enableNativeRedirect: !import.meta.env.DEV,
22
+ enableNativeRedirect: false,
24
23
  encapsulatedPlanks: false,
25
24
  }),
26
25
  });
@@ -15,9 +15,9 @@ import {
15
15
  type PromiseIntentDispatcher,
16
16
  createIntent,
17
17
  } from '@dxos/app-framework';
18
- import { type OperationInvoker } from '@dxos/app-framework/plugin-operation/invoker';
19
18
  import { LayoutOperation } from '@dxos/app-toolkit';
20
19
  import { invariant } from '@dxos/invariant';
20
+ import { type OperationInvoker } from '@dxos/operation';
21
21
  import { trim } from '@dxos/util';
22
22
 
23
23
  import { meta } from '#meta';