@dxos/plugin-deck 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8

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 (500) 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-DEURA3KR.mjs +291 -0
  5. package/dist/lib/neutral/DeckLayout-DEURA3KR.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/neutral/add-toast-TNB6DXWU.mjs +24 -0
  15. package/dist/lib/neutral/add-toast-TNB6DXWU.mjs.map +7 -0
  16. package/dist/lib/neutral/adjust-HNU5CCRO.mjs +93 -0
  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-INSOF72J.mjs +10 -0
  23. package/dist/lib/neutral/chunk-324PPIZB.mjs +101 -0
  24. package/dist/lib/neutral/chunk-324PPIZB.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-BS4EOYMK.mjs +282 -0
  26. package/dist/lib/neutral/chunk-BS4EOYMK.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-GBIGQKYW.mjs +112 -0
  28. package/dist/lib/neutral/chunk-GBIGQKYW.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-GLB73Q6U.mjs +22 -0
  30. package/dist/lib/neutral/chunk-GLB73Q6U.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  32. package/dist/lib/neutral/chunk-PYEY5SEC.mjs +37 -0
  33. package/dist/lib/neutral/chunk-PYEY5SEC.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-Q4W6B4IB.mjs +8 -0
  35. package/dist/lib/neutral/chunk-Q4W6B4IB.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-WAXJPQJI.mjs +1306 -0
  37. package/dist/lib/neutral/chunk-WAXJPQJI.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-ZYYOSX5I.mjs +69 -0
  39. package/dist/lib/neutral/chunk-ZYYOSX5I.mjs.map +7 -0
  40. package/dist/lib/neutral/close-ASKR22A6.mjs +44 -0
  41. package/dist/lib/neutral/close-ASKR22A6.mjs.map +7 -0
  42. package/dist/lib/neutral/components/index.mjs +126 -0
  43. package/dist/lib/neutral/components/index.mjs.map +7 -0
  44. package/dist/lib/neutral/containers/index.mjs +32 -0
  45. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  46. package/dist/lib/neutral/hooks/index.mjs +159 -0
  47. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  48. package/dist/lib/neutral/index.mjs +38 -0
  49. package/dist/lib/neutral/index.mjs.map +7 -0
  50. package/dist/lib/neutral/meta.json +1 -0
  51. package/dist/lib/neutral/meta.mjs +8 -0
  52. package/dist/lib/neutral/meta.mjs.map +7 -0
  53. package/dist/lib/neutral/notification-tracker-P36322BH.mjs +182 -0
  54. package/dist/lib/neutral/notification-tracker-P36322BH.mjs.map +7 -0
  55. package/dist/lib/neutral/open-5OYNO3RT.mjs +159 -0
  56. package/dist/lib/neutral/open-5OYNO3RT.mjs.map +7 -0
  57. package/dist/lib/neutral/operation-handler-266CVMTW.mjs +13 -0
  58. package/dist/lib/neutral/operation-handler-266CVMTW.mjs.map +7 -0
  59. package/dist/lib/neutral/operations/index.mjs +8 -0
  60. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  61. package/dist/lib/neutral/plugin.mjs +16 -0
  62. package/dist/lib/neutral/plugin.mjs.map +7 -0
  63. package/dist/lib/neutral/react-root-HH5DEUOG.mjs +44 -0
  64. package/dist/lib/neutral/react-root-HH5DEUOG.mjs.map +7 -0
  65. package/dist/lib/neutral/react-surface-3UVVCK3O.mjs +34 -0
  66. package/dist/lib/neutral/react-surface-3UVVCK3O.mjs.map +7 -0
  67. package/dist/lib/neutral/revert-workspace-B2QLT2C4.mjs +21 -0
  68. package/dist/lib/neutral/revert-workspace-B2QLT2C4.mjs.map +7 -0
  69. package/dist/lib/neutral/scroll-into-view-B52C3PJO.mjs +21 -0
  70. package/dist/lib/neutral/scroll-into-view-B52C3PJO.mjs.map +7 -0
  71. package/dist/lib/neutral/set-PA35ONXO.mjs +37 -0
  72. package/dist/lib/neutral/set-PA35ONXO.mjs.map +7 -0
  73. package/dist/lib/neutral/set-layout-mode-RPCCPQRB.mjs +85 -0
  74. package/dist/lib/neutral/set-layout-mode-RPCCPQRB.mjs.map +7 -0
  75. package/dist/lib/neutral/settings-EGNYUM4T.mjs +33 -0
  76. package/dist/lib/neutral/settings-EGNYUM4T.mjs.map +7 -0
  77. package/dist/lib/neutral/state-IIDXMQUO.mjs +86 -0
  78. package/dist/lib/neutral/state-IIDXMQUO.mjs.map +7 -0
  79. package/dist/lib/neutral/switch-workspace-LZF4KZXH.mjs +60 -0
  80. package/dist/lib/neutral/switch-workspace-LZF4KZXH.mjs.map +7 -0
  81. package/dist/lib/neutral/translations.mjs +63 -0
  82. package/dist/lib/neutral/translations.mjs.map +7 -0
  83. package/dist/lib/neutral/types/index.mjs +34 -0
  84. package/dist/lib/neutral/types/index.mjs.map +7 -0
  85. package/dist/lib/neutral/update-companion-YUCZZVGY.mjs +32 -0
  86. package/dist/lib/neutral/update-companion-YUCZZVGY.mjs.map +7 -0
  87. package/dist/lib/neutral/update-complementary-7FZNB55J.mjs +28 -0
  88. package/dist/lib/neutral/update-complementary-7FZNB55J.mjs.map +7 -0
  89. package/dist/lib/neutral/update-dialog-FNQTSSAP.mjs +29 -0
  90. package/dist/lib/neutral/update-dialog-FNQTSSAP.mjs.map +7 -0
  91. package/dist/lib/neutral/update-plank-size-3YW4NXEY.mjs +26 -0
  92. package/dist/lib/neutral/update-plank-size-3YW4NXEY.mjs.map +7 -0
  93. package/dist/lib/neutral/update-popover-G2VUD7E6.mjs +33 -0
  94. package/dist/lib/neutral/update-popover-G2VUD7E6.mjs.map +7 -0
  95. package/dist/lib/neutral/update-sidebar-KRHPUHUB.mjs +25 -0
  96. package/dist/lib/neutral/update-sidebar-KRHPUHUB.mjs.map +7 -0
  97. package/dist/lib/neutral/url-handler-A6HLW4RB.mjs +229 -0
  98. package/dist/lib/neutral/url-handler-A6HLW4RB.mjs.map +7 -0
  99. package/dist/types/src/DeckPlugin.d.ts +3 -1
  100. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  101. package/dist/types/src/DeckPlugin.node.d.ts +4 -0
  102. package/dist/types/src/DeckPlugin.node.d.ts.map +1 -0
  103. package/dist/types/src/DeckPlugin.test.d.ts +2 -0
  104. package/dist/types/src/DeckPlugin.test.d.ts.map +1 -0
  105. package/dist/types/src/DeckPlugin.workerd.d.ts +4 -0
  106. package/dist/types/src/DeckPlugin.workerd.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  108. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/check-app-scheme.d.ts +17 -2
  110. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/index.d.ts +197 -12
  112. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/notification-tracker.d.ts +13 -0
  114. package/dist/types/src/capabilities/notification-tracker.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  116. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  117. package/dist/types/src/capabilities/react-root.d.ts +4 -2
  118. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  120. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  121. package/dist/types/src/capabilities/settings.d.ts +5 -2
  122. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  123. package/dist/types/src/capabilities/state.d.ts +141 -51
  124. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  125. package/dist/types/src/capabilities/tools.d.ts +4 -3
  126. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  127. package/dist/types/src/capabilities/url-handler.d.ts +3 -2
  128. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  129. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +4 -4
  130. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  131. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +67 -0
  132. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -0
  133. package/dist/types/src/components/DeckSettings/index.d.ts +1 -1
  134. package/dist/types/src/components/DeckSettings/index.d.ts.map +1 -1
  135. package/dist/types/src/components/Matrix/Matrix.d.ts +41 -0
  136. package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -0
  137. package/dist/types/src/components/Matrix/Matrix.stories.d.ts +17 -0
  138. package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -0
  139. package/dist/types/src/components/Matrix/index.d.ts +3 -0
  140. package/dist/types/src/components/Matrix/index.d.ts.map +1 -0
  141. package/dist/types/src/components/index.d.ts +3 -2
  142. package/dist/types/src/components/index.d.ts.map +1 -1
  143. package/dist/types/src/{components/DeckLayout → containers/Deck}/Banner.d.ts +1 -1
  144. package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -0
  145. package/dist/types/src/containers/Deck/Deck.d.ts +25 -0
  146. package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -0
  147. package/dist/types/src/containers/Deck/Deck.stories.d.ts +67 -0
  148. package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -0
  149. package/dist/types/src/containers/Deck/DeckContent.d.ts +7 -0
  150. package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -0
  151. package/dist/types/src/containers/Deck/DeckRoot.d.ts +39 -0
  152. package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -0
  153. package/dist/types/src/containers/Deck/DeckViewport.d.ts +16 -0
  154. package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -0
  155. package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -0
  156. package/dist/types/src/containers/Deck/index.d.ts +2 -0
  157. package/dist/types/src/containers/Deck/index.d.ts.map +1 -0
  158. package/dist/types/src/containers/DeckLayout/ActiveNode.d.ts.map +1 -0
  159. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts +5 -0
  160. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -0
  161. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +69 -0
  162. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  163. package/dist/types/src/containers/DeckLayout/Dialog.d.ts.map +1 -0
  164. package/dist/types/src/containers/DeckLayout/Fallback.d.ts +2 -0
  165. package/dist/types/src/containers/DeckLayout/Fallback.d.ts.map +1 -0
  166. package/dist/types/src/containers/DeckLayout/Popover.d.ts +5 -0
  167. package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -0
  168. package/dist/types/src/containers/DeckLayout/Toast.d.ts +10 -0
  169. package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -0
  170. package/dist/types/src/containers/DeckLayout/constants.d.ts.map +1 -0
  171. package/dist/types/src/containers/DeckLayout/index.d.ts +4 -0
  172. package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -0
  173. package/dist/types/src/containers/Plank/Plank.d.ts +17 -0
  174. package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -0
  175. package/dist/types/src/containers/Plank/Plank.stories.d.ts +67 -0
  176. package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -0
  177. package/dist/types/src/containers/Plank/PlankComponent.d.ts +17 -0
  178. package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +1 -0
  179. package/dist/types/src/containers/Plank/PlankContent.d.ts +10 -0
  180. package/dist/types/src/containers/Plank/PlankContent.d.ts.map +1 -0
  181. package/dist/types/src/{components → containers}/Plank/PlankControls.d.ts +5 -6
  182. package/dist/types/src/containers/Plank/PlankControls.d.ts.map +1 -0
  183. package/dist/types/src/containers/Plank/PlankError.d.ts +15 -0
  184. package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -0
  185. package/dist/types/src/{components → containers}/Plank/PlankHeading.d.ts +5 -4
  186. package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +1 -0
  187. package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts.map +1 -1
  188. package/dist/types/src/containers/Plank/PlankRoot.d.ts +37 -0
  189. package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -0
  190. package/dist/types/src/containers/Plank/index.d.ts +4 -0
  191. package/dist/types/src/containers/Plank/index.d.ts.map +1 -0
  192. package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -0
  193. package/dist/types/src/containers/Sidebar/Sidebar.d.ts.map +1 -0
  194. package/dist/types/src/{components → containers}/Sidebar/SidebarButton.d.ts +1 -1
  195. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -0
  196. package/dist/types/src/{components → containers}/Sidebar/index.d.ts.map +1 -1
  197. package/dist/types/src/containers/index.d.ts +6 -0
  198. package/dist/types/src/containers/index.d.ts.map +1 -0
  199. package/dist/types/src/hooks/index.d.ts +2 -1
  200. package/dist/types/src/hooks/index.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useBreakpoints.d.ts +1 -1
  202. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  203. package/dist/types/src/hooks/useDeckCompanions.d.ts +4 -4
  204. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useDeckState.d.ts +17 -0
  206. package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
  207. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  208. package/dist/types/src/hooks/useMainSize.d.ts.map +1 -1
  209. package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
  210. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  211. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  212. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  213. package/dist/types/src/index.d.ts +1 -4
  214. package/dist/types/src/index.d.ts.map +1 -1
  215. package/dist/types/src/layout.d.ts +20 -9
  216. package/dist/types/src/layout.d.ts.map +1 -1
  217. package/dist/types/src/layout.test.d.ts +2 -0
  218. package/dist/types/src/layout.test.d.ts.map +1 -0
  219. package/dist/types/src/meta.d.ts +2 -3
  220. package/dist/types/src/meta.d.ts.map +1 -1
  221. package/dist/types/src/operations/add-toast.d.ts +5 -0
  222. package/dist/types/src/operations/add-toast.d.ts.map +1 -0
  223. package/dist/types/src/operations/adjust.d.ts +5 -0
  224. package/dist/types/src/operations/adjust.d.ts.map +1 -0
  225. package/dist/types/src/operations/close.d.ts +5 -0
  226. package/dist/types/src/operations/close.d.ts.map +1 -0
  227. package/dist/types/src/operations/helpers.d.ts +3 -0
  228. package/dist/types/src/operations/helpers.d.ts.map +1 -0
  229. package/dist/types/src/operations/index.d.ts +3 -0
  230. package/dist/types/src/operations/index.d.ts.map +1 -0
  231. package/dist/types/src/operations/open.d.ts +5 -0
  232. package/dist/types/src/operations/open.d.ts.map +1 -0
  233. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  234. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  235. package/dist/types/src/operations/scroll-into-view.d.ts +5 -0
  236. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -0
  237. package/dist/types/src/operations/set-layout-mode.d.ts +9 -0
  238. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  239. package/dist/types/src/operations/set.d.ts +5 -0
  240. package/dist/types/src/operations/set.d.ts.map +1 -0
  241. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  242. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  243. package/dist/types/src/operations/update-companion.d.ts +5 -0
  244. package/dist/types/src/operations/update-companion.d.ts.map +1 -0
  245. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  246. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  247. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  248. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  249. package/dist/types/src/operations/update-plank-size.d.ts +5 -0
  250. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -0
  251. package/dist/types/src/operations/update-popover.d.ts +5 -0
  252. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  253. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  254. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  255. package/dist/types/src/plugin.d.ts +4 -0
  256. package/dist/types/src/plugin.d.ts.map +1 -0
  257. package/dist/types/src/translations.d.ts +48 -53
  258. package/dist/types/src/translations.d.ts.map +1 -1
  259. package/dist/types/src/types/DeckCapabilities.d.ts +188 -0
  260. package/dist/types/src/types/DeckCapabilities.d.ts.map +1 -0
  261. package/dist/types/src/types/DeckEvents.d.ts +5 -0
  262. package/dist/types/src/types/DeckEvents.d.ts.map +1 -0
  263. package/dist/types/src/types/DeckOperation.d.ts +15 -0
  264. package/dist/types/src/types/DeckOperation.d.ts.map +1 -0
  265. package/dist/types/src/types/Settings.d.ts +10 -0
  266. package/dist/types/src/types/Settings.d.ts.map +1 -0
  267. package/dist/types/src/types/index.d.ts +4 -0
  268. package/dist/types/src/types/index.d.ts.map +1 -1
  269. package/dist/types/src/types/schema.d.ts +70 -69
  270. package/dist/types/src/types/schema.d.ts.map +1 -1
  271. package/dist/types/src/util/index.d.ts +2 -1
  272. package/dist/types/src/util/index.d.ts.map +1 -1
  273. package/dist/types/src/util/layoutAppliesTopbar.d.ts +1 -1
  274. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  275. package/dist/types/src/util/plank-url-params.d.ts +14 -0
  276. package/dist/types/src/util/plank-url-params.d.ts.map +1 -0
  277. package/dist/types/src/util/plank-url-params.test.d.ts +2 -0
  278. package/dist/types/src/util/plank-url-params.test.d.ts.map +1 -0
  279. package/dist/types/src/util/sanitize-persisted-state.d.ts +19 -0
  280. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -0
  281. package/dist/types/src/util/sanitize-persisted-state.test.d.ts +2 -0
  282. package/dist/types/src/util/sanitize-persisted-state.test.d.ts.map +1 -0
  283. package/dist/types/src/util/set-active.d.ts +19 -4
  284. package/dist/types/src/util/set-active.d.ts.map +1 -1
  285. package/dist/types/src/util/set-active.test.d.ts +2 -0
  286. package/dist/types/src/util/set-active.test.d.ts.map +1 -0
  287. package/dist/types/tsconfig.tsbuildinfo +1 -1
  288. package/package.json +126 -62
  289. package/src/DeckPlugin.node.ts +17 -0
  290. package/src/DeckPlugin.test.ts +27 -0
  291. package/src/DeckPlugin.ts +57 -71
  292. package/src/DeckPlugin.workerd.ts +16 -0
  293. package/src/capabilities/app-graph-builder.ts +111 -126
  294. package/src/capabilities/check-app-scheme.ts +123 -24
  295. package/src/capabilities/index.ts +14 -14
  296. package/src/capabilities/notification-tracker.ts +170 -0
  297. package/src/capabilities/operation-handler.ts +16 -0
  298. package/src/capabilities/react-root.tsx +40 -27
  299. package/src/capabilities/react-surface.tsx +28 -22
  300. package/src/capabilities/settings.ts +29 -19
  301. package/src/capabilities/state.ts +74 -88
  302. package/src/capabilities/tools.ts +58 -51
  303. package/src/capabilities/url-handler.ts +290 -48
  304. package/src/components/DeckSettings/DeckSettings.stories.tsx +37 -0
  305. package/src/components/DeckSettings/DeckSettings.tsx +19 -73
  306. package/src/components/DeckSettings/index.ts +2 -2
  307. package/src/components/Matrix/Matrix.stories.tsx +220 -0
  308. package/src/components/Matrix/Matrix.tsx +205 -0
  309. package/src/components/Matrix/SPEC.md +219 -0
  310. package/src/components/Matrix/index.ts +6 -0
  311. package/src/components/index.ts +6 -3
  312. package/src/containers/Deck/Banner.tsx +41 -0
  313. package/src/containers/Deck/Deck.stories.tsx +81 -0
  314. package/src/containers/Deck/Deck.tsx +21 -0
  315. package/src/containers/Deck/DeckContent.tsx +102 -0
  316. package/src/containers/Deck/DeckRoot.tsx +50 -0
  317. package/src/containers/Deck/DeckViewport.tsx +450 -0
  318. package/src/{components/DeckLayout → containers/Deck}/StatusBar.tsx +4 -4
  319. package/src/containers/Deck/index.ts +5 -0
  320. package/src/{components → containers}/DeckLayout/ActiveNode.tsx +9 -4
  321. package/src/containers/DeckLayout/DeckLayout.stories.tsx +395 -0
  322. package/src/containers/DeckLayout/DeckLayout.tsx +62 -0
  323. package/src/containers/DeckLayout/Dialog.tsx +52 -0
  324. package/src/containers/DeckLayout/Fallback.tsx +24 -0
  325. package/src/containers/DeckLayout/Popover.tsx +166 -0
  326. package/src/containers/DeckLayout/Toast.tsx +76 -0
  327. package/src/{components → containers}/DeckLayout/constants.ts +1 -0
  328. package/src/{components → containers}/DeckLayout/index.ts +3 -2
  329. package/src/containers/Plank/Plank.stories.tsx +108 -0
  330. package/src/containers/Plank/Plank.tsx +22 -0
  331. package/src/containers/Plank/PlankComponent.tsx +223 -0
  332. package/src/containers/Plank/PlankContent.tsx +45 -0
  333. package/src/{components → containers}/Plank/PlankControls.tsx +45 -38
  334. package/src/containers/Plank/PlankError.tsx +82 -0
  335. package/src/{components → containers}/Plank/PlankHeading.tsx +69 -65
  336. package/src/{components → containers}/Plank/PlankLoading.tsx +1 -1
  337. package/src/containers/Plank/PlankRoot.tsx +49 -0
  338. package/src/{components → containers}/Plank/index.ts +0 -2
  339. package/src/containers/Sidebar/ComplementarySidebar.tsx +189 -0
  340. package/src/containers/Sidebar/Sidebar.tsx +39 -0
  341. package/src/containers/Sidebar/SidebarButton.tsx +100 -0
  342. package/src/containers/index.ts +11 -0
  343. package/src/hooks/index.ts +2 -1
  344. package/src/hooks/useCompanions.ts +3 -3
  345. package/src/hooks/useDeckCompanions.ts +8 -10
  346. package/src/hooks/useDeckState.ts +73 -0
  347. package/src/hooks/useMainSize.ts +2 -2
  348. package/src/hooks/useNodeActionExpander.ts +4 -4
  349. package/src/hooks/useSelectedCompanion.ts +32 -0
  350. package/src/index.ts +1 -4
  351. package/src/layout.test.ts +59 -0
  352. package/src/layout.ts +38 -40
  353. package/src/meta.ts +27 -6
  354. package/src/operations/add-toast.ts +24 -0
  355. package/src/operations/adjust.ts +82 -0
  356. package/src/operations/close.ts +35 -0
  357. package/src/operations/helpers.ts +22 -0
  358. package/src/operations/index.ts +23 -0
  359. package/src/operations/open.ts +201 -0
  360. package/src/operations/revert-workspace.ts +22 -0
  361. package/src/operations/scroll-into-view.ts +24 -0
  362. package/src/operations/set-layout-mode.ts +84 -0
  363. package/src/operations/set.ts +36 -0
  364. package/src/operations/switch-workspace.ts +66 -0
  365. package/src/operations/update-companion.ts +35 -0
  366. package/src/operations/update-complementary.ts +33 -0
  367. package/src/operations/update-dialog.ts +34 -0
  368. package/src/operations/update-plank-size.ts +28 -0
  369. package/src/operations/update-popover.ts +36 -0
  370. package/src/operations/update-sidebar.ts +28 -0
  371. package/src/plugin.ts +11 -0
  372. package/src/translations.ts +48 -52
  373. package/src/types/DeckCapabilities.ts +34 -0
  374. package/src/types/DeckEvents.ts +21 -0
  375. package/src/types/DeckOperation.ts +56 -0
  376. package/src/types/Settings.ts +36 -0
  377. package/src/types/index.ts +5 -0
  378. package/src/types/schema.ts +50 -57
  379. package/src/util/index.ts +2 -1
  380. package/src/util/layoutAppliesTopbar.ts +2 -2
  381. package/src/util/plank-url-params.test.ts +85 -0
  382. package/src/util/plank-url-params.ts +36 -0
  383. package/src/util/sanitize-persisted-state.test.ts +79 -0
  384. package/src/util/sanitize-persisted-state.ts +52 -0
  385. package/src/util/set-active.test.ts +106 -0
  386. package/src/util/set-active.ts +50 -30
  387. package/src/vite-env.d.ts +10 -0
  388. package/dist/lib/browser/app-graph-builder-DVEKLXB4.mjs +0 -152
  389. package/dist/lib/browser/app-graph-builder-DVEKLXB4.mjs.map +0 -7
  390. package/dist/lib/browser/check-app-scheme-3BQJXWEY.mjs +0 -32
  391. package/dist/lib/browser/check-app-scheme-3BQJXWEY.mjs.map +0 -7
  392. package/dist/lib/browser/chunk-6MQIYIPY.mjs +0 -1494
  393. package/dist/lib/browser/chunk-6MQIYIPY.mjs.map +0 -7
  394. package/dist/lib/browser/chunk-CNTGBCMK.mjs +0 -145
  395. package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
  396. package/dist/lib/browser/chunk-F5BQOOEG.mjs +0 -160
  397. package/dist/lib/browser/chunk-F5BQOOEG.mjs.map +0 -7
  398. package/dist/lib/browser/chunk-M57WD3V6.mjs +0 -16
  399. package/dist/lib/browser/chunk-M57WD3V6.mjs.map +0 -7
  400. package/dist/lib/browser/chunk-MX7WRVX3.mjs +0 -127
  401. package/dist/lib/browser/chunk-MX7WRVX3.mjs.map +0 -7
  402. package/dist/lib/browser/chunk-NRCPV6AV.mjs +0 -129
  403. package/dist/lib/browser/chunk-NRCPV6AV.mjs.map +0 -7
  404. package/dist/lib/browser/chunk-Z5KITAZW.mjs +0 -13
  405. package/dist/lib/browser/chunk-Z5KITAZW.mjs.map +0 -7
  406. package/dist/lib/browser/index.mjs +0 -174
  407. package/dist/lib/browser/index.mjs.map +0 -7
  408. package/dist/lib/browser/intent-resolver-2SUIIV6N.mjs +0 -521
  409. package/dist/lib/browser/intent-resolver-2SUIIV6N.mjs.map +0 -7
  410. package/dist/lib/browser/meta.json +0 -1
  411. package/dist/lib/browser/react-root-GVZANZX7.mjs +0 -43
  412. package/dist/lib/browser/react-root-GVZANZX7.mjs.map +0 -7
  413. package/dist/lib/browser/react-surface-NXSSD2GW.mjs +0 -40
  414. package/dist/lib/browser/react-surface-NXSSD2GW.mjs.map +0 -7
  415. package/dist/lib/browser/settings-LUPQPZ27.mjs +0 -29
  416. package/dist/lib/browser/settings-LUPQPZ27.mjs.map +0 -7
  417. package/dist/lib/browser/state-CRXR7X63.mjs +0 -12
  418. package/dist/lib/browser/toolkit-OBKFXX23.mjs +0 -47
  419. package/dist/lib/browser/toolkit-OBKFXX23.mjs.map +0 -7
  420. package/dist/lib/browser/types/index.mjs +0 -32
  421. package/dist/lib/browser/url-handler-LROZYQ26.mjs +0 -70
  422. package/dist/lib/browser/url-handler-LROZYQ26.mjs.map +0 -7
  423. package/dist/types/src/capabilities/capabilities.d.ts +0 -184
  424. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  425. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  426. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  427. package/dist/types/src/capabilities/toolkit.d.ts +0 -5
  428. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  429. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +0 -1
  430. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +0 -1
  431. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts +0 -3
  432. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +0 -1
  433. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +0 -6
  434. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +0 -1
  435. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +0 -1
  436. package/dist/types/src/components/DeckLayout/Fallback.d.ts +0 -3
  437. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +0 -1
  438. package/dist/types/src/components/DeckLayout/Popover.d.ts +0 -5
  439. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +0 -1
  440. package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +0 -1
  441. package/dist/types/src/components/DeckLayout/Toast.d.ts +0 -5
  442. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +0 -1
  443. package/dist/types/src/components/DeckLayout/Topbar.d.ts +0 -3
  444. package/dist/types/src/components/DeckLayout/Topbar.d.ts.map +0 -1
  445. package/dist/types/src/components/DeckLayout/constants.d.ts.map +0 -1
  446. package/dist/types/src/components/DeckLayout/index.d.ts +0 -4
  447. package/dist/types/src/components/DeckLayout/index.d.ts.map +0 -1
  448. package/dist/types/src/components/Plank/Plank.d.ts +0 -27
  449. package/dist/types/src/components/Plank/Plank.d.ts.map +0 -1
  450. package/dist/types/src/components/Plank/Plank.stories.d.ts +0 -8
  451. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +0 -1
  452. package/dist/types/src/components/Plank/PlankControls.d.ts.map +0 -1
  453. package/dist/types/src/components/Plank/PlankError.d.ts +0 -13
  454. package/dist/types/src/components/Plank/PlankError.d.ts.map +0 -1
  455. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +0 -1
  456. package/dist/types/src/components/Plank/index.d.ts +0 -6
  457. package/dist/types/src/components/Plank/index.d.ts.map +0 -1
  458. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +0 -1
  459. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +0 -1
  460. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +0 -1
  461. package/dist/types/src/components/fragments.d.ts +0 -4
  462. package/dist/types/src/components/fragments.d.ts.map +0 -1
  463. package/dist/types/src/events.d.ts +0 -4
  464. package/dist/types/src/events.d.ts.map +0 -1
  465. package/dist/types/src/hooks/useHoistStatusbar.d.ts +0 -3
  466. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +0 -1
  467. package/dist/types/src/util/overscroll.d.ts +0 -47
  468. package/dist/types/src/util/overscroll.d.ts.map +0 -1
  469. package/src/capabilities/capabilities.ts +0 -14
  470. package/src/capabilities/intent-resolver.ts +0 -469
  471. package/src/capabilities/toolkit.ts +0 -55
  472. package/src/components/DeckLayout/Banner.tsx +0 -39
  473. package/src/components/DeckLayout/ContentEmpty.tsx +0 -31
  474. package/src/components/DeckLayout/DeckLayout.tsx +0 -302
  475. package/src/components/DeckLayout/Dialog.tsx +0 -36
  476. package/src/components/DeckLayout/Fallback.tsx +0 -28
  477. package/src/components/DeckLayout/Popover.tsx +0 -104
  478. package/src/components/DeckLayout/Toast.tsx +0 -61
  479. package/src/components/DeckLayout/Topbar.tsx +0 -11
  480. package/src/components/Plank/Plank.stories.tsx +0 -56
  481. package/src/components/Plank/Plank.tsx +0 -267
  482. package/src/components/Plank/PlankError.tsx +0 -49
  483. package/src/components/Sidebar/ComplementarySidebar.tsx +0 -194
  484. package/src/components/Sidebar/Sidebar.tsx +0 -42
  485. package/src/components/Sidebar/SidebarButton.tsx +0 -87
  486. package/src/components/fragments.ts +0 -14
  487. package/src/events.ts +0 -11
  488. package/src/hooks/useHoistStatusbar.ts +0 -25
  489. package/src/util/overscroll.ts +0 -69
  490. /package/dist/lib/{browser/state-CRXR7X63.mjs.map → neutral/check-app-scheme-INSOF72J.mjs.map} +0 -0
  491. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  492. /package/dist/types/src/{components/DeckLayout → containers/Deck}/StatusBar.d.ts +0 -0
  493. /package/dist/types/src/{components → containers}/DeckLayout/ActiveNode.d.ts +0 -0
  494. /package/dist/types/src/{components → containers}/DeckLayout/Dialog.d.ts +0 -0
  495. /package/dist/types/src/{components → containers}/DeckLayout/constants.d.ts +0 -0
  496. /package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts +0 -0
  497. /package/dist/types/src/{components → containers}/Sidebar/ComplementarySidebar.d.ts +0 -0
  498. /package/dist/types/src/{components → containers}/Sidebar/Sidebar.d.ts +0 -0
  499. /package/dist/types/src/{components → containers}/Sidebar/index.d.ts +0 -0
  500. /package/src/{components → containers}/Sidebar/index.ts +0 -0
@@ -0,0 +1,24 @@
1
+ import {
2
+ DeckCapabilities_exports
3
+ } from "./chunk-BS4EOYMK.mjs";
4
+ import "./chunk-J5LGTIGS.mjs";
5
+
6
+ // src/operations/add-toast.ts
7
+ import * as Effect from "effect/Effect";
8
+ import { Capabilities } from "@dxos/app-framework";
9
+ import { LayoutOperation } from "@dxos/app-toolkit";
10
+ import { Operation } from "@dxos/compute";
11
+ var handler = LayoutOperation.AddToast.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
12
+ yield* Capabilities.updateAtomValue(DeckCapabilities_exports.EphemeralState, (state) => ({
13
+ ...state,
14
+ toasts: [
15
+ ...state.toasts,
16
+ input
17
+ ]
18
+ }));
19
+ })));
20
+ var add_toast_default = handler;
21
+ export {
22
+ add_toast_default as default
23
+ };
24
+ //# sourceMappingURL=add-toast-TNB6DXWU.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/add-toast.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities } from '@dxos/app-framework';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\n\nimport { DeckCapabilities } from '../types';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.AddToast> = LayoutOperation.AddToast.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({\n ...state,\n toasts: [...state.toasts, input as LayoutOperation.Toast],\n }));\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,oBAAoB;AAC7B,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAI1B,IAAMC,UAAkEC,gBAAgBC,SAASC,KAC/FC,UAAUC,YACDC,kBAAW,WAAWC,OAAK;AAChC,SAAOC,aAAaC,gBAAgBC,yBAAiBC,gBAAgB,CAACC,WAAW;IAC/E,GAAGA;IACHC,QAAQ;SAAID,MAAMC;MAAQN;;EAC5B,EAAA;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,oBAAeP;",
6
+ "names": ["Effect", "Capabilities", "LayoutOperation", "Operation", "handler", "LayoutOperation", "AddToast", "pipe", "Operation", "withHandler", "fnUntraced", "input", "Capabilities", "updateAtomValue", "DeckCapabilities", "EphemeralState", "state", "toasts"]
7
+ }
@@ -0,0 +1,93 @@
1
+ import {
2
+ incrementPlank
3
+ } from "./chunk-ZYYOSX5I.mjs";
4
+ import {
5
+ updateActiveDeck
6
+ } from "./chunk-GLB73Q6U.mjs";
7
+ import {
8
+ DeckCapabilities_exports,
9
+ DeckOperation_exports,
10
+ PLANK_COMPANION_TYPE
11
+ } from "./chunk-BS4EOYMK.mjs";
12
+ import {
13
+ computeActiveUpdates
14
+ } from "./chunk-GBIGQKYW.mjs";
15
+ import "./chunk-J5LGTIGS.mjs";
16
+
17
+ // src/operations/adjust.ts
18
+ import * as Effect from "effect/Effect";
19
+ import * as Function from "effect/Function";
20
+ import * as Option from "effect/Option";
21
+ import { Capabilities, Capability } from "@dxos/app-framework";
22
+ import { AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
23
+ import { Operation } from "@dxos/compute";
24
+ import { AttentionCapabilities } from "@dxos/plugin-attention";
25
+ import { Graph } from "@dxos/plugin-graph";
26
+ import { byPosition } from "@dxos/util";
27
+ var handler = DeckOperation_exports.Adjust.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
28
+ const _state = yield* Capabilities.getAtomValue(DeckCapabilities_exports.State);
29
+ const deck = yield* DeckCapabilities_exports.getDeck();
30
+ const attention = yield* Capability.get(AttentionCapabilities.Attention);
31
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
32
+ let soloOperation;
33
+ if (input.type === "increment-end" || input.type === "increment-start") {
34
+ const next = incrementPlank(deck.active, input);
35
+ const { deckUpdates } = computeActiveUpdates({
36
+ next,
37
+ deck,
38
+ attention
39
+ });
40
+ yield* Capabilities.updateAtomValue(DeckCapabilities_exports.State, (state) => updateActiveDeck(state, deckUpdates));
41
+ }
42
+ if (input.type.startsWith("solo")) {
43
+ const entryId = input.id;
44
+ if (!deck.solo) {
45
+ soloOperation = {
46
+ type: "solo",
47
+ entryId,
48
+ mode: input.type
49
+ };
50
+ } else {
51
+ if (input.type === "solo--fullscreen") {
52
+ soloOperation = {
53
+ type: "solo",
54
+ entryId,
55
+ mode: "solo--fullscreen"
56
+ };
57
+ } else if (input.type === "solo") {
58
+ soloOperation = {
59
+ type: "unsolo",
60
+ entryId
61
+ };
62
+ }
63
+ }
64
+ }
65
+ if (soloOperation?.type === "solo") {
66
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, {
67
+ subject: soloOperation.entryId,
68
+ mode: soloOperation.mode
69
+ });
70
+ } else if (soloOperation?.type === "unsolo") {
71
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, {
72
+ mode: "multi"
73
+ });
74
+ yield* Operation.invoke(LayoutOperation.Open, {
75
+ subject: [
76
+ soloOperation.entryId
77
+ ]
78
+ });
79
+ }
80
+ if (input.type === "companion") {
81
+ const companion = Function.pipe(Graph.getNode(graph, input.id), Option.map((node) => Graph.getConnections(graph, node.id, "child").filter((n) => n.type === PLANK_COMPANION_TYPE).toSorted((a, b) => byPosition(a.properties, b.properties))), Option.flatMap((companions) => companions.length > 0 ? Option.some(companions[0]) : Option.none()));
82
+ if (Option.isSome(companion)) {
83
+ yield* Operation.invoke(LayoutOperation.UpdateCompanion, {
84
+ subject: companion.value.id
85
+ });
86
+ }
87
+ }
88
+ })));
89
+ var adjust_default = handler;
90
+ export {
91
+ adjust_default as default
92
+ };
93
+ //# sourceMappingURL=adjust-HNU5CCRO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/adjust.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Graph } from '@dxos/plugin-graph';\nimport { byPosition } from '@dxos/util';\n\nimport { incrementPlank } from '../layout';\nimport { DeckCapabilities, DeckOperation, PLANK_COMPANION_TYPE } from '../types';\nimport { computeActiveUpdates } from '../util';\nimport { updateActiveDeck } from './helpers';\n\nconst handler: Operation.WithHandler<typeof DeckOperation.Adjust> = DeckOperation.Adjust.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const _state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n\n let soloOperation:\n | { type: 'solo'; entryId: string; mode: string }\n | { type: 'unsolo'; entryId: string }\n | undefined;\n\n if (input.type === 'increment-end' || input.type === 'increment-start') {\n const next = incrementPlank(deck.active, input);\n const { deckUpdates } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));\n }\n\n if (input.type.startsWith('solo')) {\n const entryId = input.id;\n if (!deck.solo) {\n soloOperation = { type: 'solo', entryId, mode: input.type };\n } else {\n if (input.type === 'solo--fullscreen') {\n soloOperation = { type: 'solo', entryId, mode: 'solo--fullscreen' };\n } else if (input.type === 'solo') {\n soloOperation = { type: 'unsolo', entryId };\n }\n }\n }\n\n if (soloOperation?.type === 'solo') {\n yield* Operation.invoke(LayoutOperation.SetLayoutMode, {\n subject: soloOperation.entryId,\n mode: soloOperation.mode,\n });\n } else if (soloOperation?.type === 'unsolo') {\n yield* Operation.invoke(LayoutOperation.SetLayoutMode, { mode: 'multi' });\n yield* Operation.invoke(LayoutOperation.Open, { subject: [soloOperation.entryId] });\n }\n\n if (input.type === 'companion') {\n const companion = Function.pipe(\n Graph.getNode(graph, input.id),\n Option.map((node) =>\n Graph.getConnections(graph, node.id, 'child')\n .filter((n) => n.type === PLANK_COMPANION_TYPE)\n .toSorted((a, b) => byPosition(a.properties, b.properties)),\n ),\n Option.flatMap((companions) => (companions.length > 0 ? Option.some(companions[0]) : Option.none())),\n );\n\n if (Option.isSome(companion)) {\n yield* Operation.invoke(LayoutOperation.UpdateCompanion, { subject: companion.value.id });\n }\n }\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,iBAAiBC,uBAAuB;AACjD,SAASC,iBAAiB;AAC1B,SAASC,6BAA6B;AACtC,SAASC,aAAa;AACtB,SAASC,kBAAkB;AAO3B,IAAMC,UAA8DC,sBAAcC,OAAOC,KACvFC,UAAUC,YACDC,kBAAW,WAAWC,OAAK;AAChC,QAAMC,SAAS,OAAOC,aAAaC,aAAaC,yBAAiBC,KAAK;AACtE,QAAMC,OAAO,OAAOF,yBAAiBG,QAAO;AAC5C,QAAMC,YAAY,OAAOC,WAAWC,IAAIC,sBAAsBC,SAAS;AACvE,QAAM,EAAEC,MAAK,IAAK,OAAOJ,WAAWC,IAAII,gBAAgBC,QAAQ;AAEhE,MAAIC;AAKJ,MAAIhB,MAAMiB,SAAS,mBAAmBjB,MAAMiB,SAAS,mBAAmB;AACtE,UAAMC,OAAOC,eAAeb,KAAKc,QAAQpB,KAAAA;AACzC,UAAM,EAAEqB,YAAW,IAAKC,qBAAqB;MAAEJ;MAAMZ;MAAME;IAAU,CAAA;AACrE,WAAON,aAAaqB,gBAAgBnB,yBAAiBC,OAAO,CAACmB,UAAUC,iBAAiBD,OAAOH,WAAAA,CAAAA;EACjG;AAEA,MAAIrB,MAAMiB,KAAKS,WAAW,MAAA,GAAS;AACjC,UAAMC,UAAU3B,MAAM4B;AACtB,QAAI,CAACtB,KAAKuB,MAAM;AACdb,sBAAgB;QAAEC,MAAM;QAAQU;QAASG,MAAM9B,MAAMiB;MAAK;IAC5D,OAAO;AACL,UAAIjB,MAAMiB,SAAS,oBAAoB;AACrCD,wBAAgB;UAAEC,MAAM;UAAQU;UAASG,MAAM;QAAmB;MACpE,WAAW9B,MAAMiB,SAAS,QAAQ;AAChCD,wBAAgB;UAAEC,MAAM;UAAUU;QAAQ;MAC5C;IACF;EACF;AAEA,MAAIX,eAAeC,SAAS,QAAQ;AAClC,WAAOpB,UAAUkC,OAAOC,gBAAgBC,eAAe;MACrDC,SAASlB,cAAcW;MACvBG,MAAMd,cAAcc;IACtB,CAAA;EACF,WAAWd,eAAeC,SAAS,UAAU;AAC3C,WAAOpB,UAAUkC,OAAOC,gBAAgBC,eAAe;MAAEH,MAAM;IAAQ,CAAA;AACvE,WAAOjC,UAAUkC,OAAOC,gBAAgBG,MAAM;MAAED,SAAS;QAAClB,cAAcW;;IAAS,CAAA;EACnF;AAEA,MAAI3B,MAAMiB,SAAS,aAAa;AAC9B,UAAMmB,YAAqBxC,cACzByC,MAAMC,QAAQzB,OAAOb,MAAM4B,EAAE,GACtBW,WAAI,CAACC,SACVH,MAAMI,eAAe5B,OAAO2B,KAAKZ,IAAI,OAAA,EAClCc,OAAO,CAACC,MAAMA,EAAE1B,SAAS2B,oBAAAA,EACzBC,SAAS,CAACC,GAAGC,MAAMC,WAAWF,EAAEG,YAAYF,EAAEE,UAAU,CAAA,CAAA,GAEtDC,eAAQ,CAACC,eAAgBA,WAAWC,SAAS,IAAWC,YAAKF,WAAW,CAAA,CAAE,IAAWG,YAAI,CAAA,CAAA;AAGlG,QAAWC,cAAOnB,SAAAA,GAAY;AAC5B,aAAOvC,UAAUkC,OAAOC,gBAAgBwB,iBAAiB;QAAEtB,SAASE,UAAUqB,MAAM7B;MAAG,CAAA;IACzF;EACF;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,iBAAenC;",
6
+ "names": ["Effect", "Function", "Option", "Capabilities", "Capability", "AppCapabilities", "LayoutOperation", "Operation", "AttentionCapabilities", "Graph", "byPosition", "handler", "DeckOperation", "Adjust", "pipe", "Operation", "withHandler", "fnUntraced", "input", "_state", "Capabilities", "getAtomValue", "DeckCapabilities", "State", "deck", "getDeck", "attention", "Capability", "get", "AttentionCapabilities", "Attention", "graph", "AppCapabilities", "AppGraph", "soloOperation", "type", "next", "incrementPlank", "active", "deckUpdates", "computeActiveUpdates", "updateAtomValue", "state", "updateActiveDeck", "startsWith", "entryId", "id", "solo", "mode", "invoke", "LayoutOperation", "SetLayoutMode", "subject", "Open", "companion", "Graph", "getNode", "map", "node", "getConnections", "filter", "n", "PLANK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "properties", "flatMap", "companions", "length", "some", "none", "isSome", "UpdateCompanion", "value"]
7
+ }
@@ -0,0 +1,129 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/app-graph-builder.ts
4
+ import * as Effect from "effect/Effect";
5
+ import { Capabilities, Capability } from "@dxos/app-framework";
6
+ import { AppCapabilities, AppNode, LayoutOperation } from "@dxos/app-toolkit";
7
+ import { Operation } from "@dxos/compute";
8
+ import { AttentionCapabilities } from "@dxos/plugin-attention";
9
+ import { GraphBuilder, NodeMatcher } from "@dxos/plugin-graph";
10
+ import { meta } from "#meta";
11
+ import { DeckCapabilities } from "#types";
12
+ var app_graph_builder_default = Capability.makeModule(Effect.fnUntraced(function* () {
13
+ const extensions = yield* Effect.all([
14
+ GraphBuilder.createExtension({
15
+ id: "notFound",
16
+ match: NodeMatcher.whenRoot,
17
+ connector: () => Effect.succeed([
18
+ AppNode.makeNotFound()
19
+ ])
20
+ }),
21
+ GraphBuilder.createExtension({
22
+ id: "root",
23
+ match: NodeMatcher.whenRoot,
24
+ actions: (_node, get) => Effect.gen(function* () {
25
+ const closeCurrent = {
26
+ id: `${LayoutOperation.Close.meta.key}.current`,
27
+ data: Effect.fnUntraced(function* () {
28
+ const attention = yield* Capability.get(AttentionCapabilities.Attention);
29
+ const attended = attention.getCurrent().at(-1);
30
+ if (attended) {
31
+ yield* Operation.invoke(LayoutOperation.Close, {
32
+ subject: [
33
+ attended
34
+ ]
35
+ });
36
+ }
37
+ }),
38
+ properties: {
39
+ label: [
40
+ "close-current.label",
41
+ {
42
+ ns: meta.id
43
+ }
44
+ ],
45
+ icon: "ph--x--regular"
46
+ }
47
+ };
48
+ const closeOthers = {
49
+ id: `${LayoutOperation.Close.meta.key}.others`,
50
+ data: Effect.fnUntraced(function* () {
51
+ const attention = yield* Capability.get(AttentionCapabilities.Attention);
52
+ const deck2 = yield* DeckCapabilities.getDeck();
53
+ const attended = attention.getCurrent().at(-1);
54
+ const ids = deck2.active.filter((id) => id !== attended) ?? [];
55
+ yield* Operation.invoke(LayoutOperation.Close, {
56
+ subject: ids
57
+ });
58
+ }),
59
+ properties: {
60
+ label: [
61
+ "close-others.label",
62
+ {
63
+ ns: meta.id
64
+ }
65
+ ],
66
+ icon: "ph--x-square--regular"
67
+ }
68
+ };
69
+ const closeAll = {
70
+ id: `${LayoutOperation.Close.meta.key}.all`,
71
+ data: Effect.fnUntraced(function* () {
72
+ const deck2 = yield* DeckCapabilities.getDeck();
73
+ yield* Operation.invoke(LayoutOperation.Close, {
74
+ subject: deck2.active
75
+ });
76
+ }),
77
+ properties: {
78
+ label: [
79
+ "close-all.label",
80
+ {
81
+ ns: meta.id
82
+ }
83
+ ],
84
+ icon: "ph--x-circle--regular"
85
+ }
86
+ };
87
+ const state = get(yield* Capability.get(DeckCapabilities.State));
88
+ const deck = state.decks[state.activeDeck];
89
+ const toggleSidebar = {
90
+ id: `${LayoutOperation.UpdateSidebar.meta.key}.nav`,
91
+ data: Effect.fnUntraced(function* () {
92
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (s) => ({
93
+ ...s,
94
+ sidebarState: s.sidebarState === "expanded" ? "collapsed" : "expanded"
95
+ }));
96
+ }),
97
+ properties: {
98
+ label: [
99
+ state.sidebarState === "expanded" ? "collapse-navigation-sidebar.label" : "open-navigation-sidebar.label",
100
+ {
101
+ ns: meta.id
102
+ }
103
+ ],
104
+ icon: "ph--sidebar--regular",
105
+ keyBinding: {
106
+ macos: "meta+'"
107
+ },
108
+ disposition: "pin-end",
109
+ position: "last",
110
+ l0Breakpoint: "lg"
111
+ }
112
+ };
113
+ return !deck?.solo ? [
114
+ closeCurrent,
115
+ closeOthers,
116
+ closeAll,
117
+ toggleSidebar
118
+ ] : [
119
+ toggleSidebar
120
+ ];
121
+ })
122
+ })
123
+ ]);
124
+ return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions.flat());
125
+ }));
126
+ export {
127
+ app_graph_builder_default as default
128
+ };
129
+ //# sourceMappingURL=app-graph-builder-HMLT627T.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities, AppNode, LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\n\nimport { meta } from '#meta';\nimport { DeckCapabilities } from '#types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: 'notFound',\n match: NodeMatcher.whenRoot,\n connector: () => Effect.succeed([AppNode.makeNotFound()]),\n }),\n\n GraphBuilder.createExtension({\n id: 'root',\n match: NodeMatcher.whenRoot,\n actions: (_node, get) =>\n Effect.gen(function* () {\n // NOTE(Zan): This is currently disabled.\n // TODO(Zan): Fullscreen needs to know the active node and provide that to the layout part.\n // const _fullscreen = {\n // id: `${LayoutAction.UpdateLayout._tag}/fullscreen`,\n // data: async () => {\n // const { dispatchPromise: dispatch } = context.get(Capabilities.IntentDispatcher);\n // await dispatch(\n // createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'fullscreen' } }),\n // );\n // },\n // properties: {\n // label: ['toggle-fullscreen.label', { ns: meta.id }],\n // icon: 'ph--arrows-out--regular',\n // keyBinding: {\n // macos: 'ctrl+meta+f',\n // windows: 'shift+ctrl+f',\n // },\n // },\n // };\n\n const closeCurrent = {\n id: `${LayoutOperation.Close.meta.key}.current`,\n data: Effect.fnUntraced(function* () {\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const attended = attention.getCurrent().at(-1);\n if (attended) {\n yield* Operation.invoke(LayoutOperation.Close, { subject: [attended] });\n }\n }),\n properties: {\n label: ['close-current.label', { ns: meta.id }],\n icon: 'ph--x--regular',\n },\n };\n\n const closeOthers = {\n id: `${LayoutOperation.Close.meta.key}.others`,\n data: Effect.fnUntraced(function* () {\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const deck = yield* DeckCapabilities.getDeck();\n const attended = attention.getCurrent().at(-1);\n const ids = deck.active.filter((id: string) => id !== attended) ?? [];\n yield* Operation.invoke(LayoutOperation.Close, { subject: ids });\n }),\n properties: {\n label: ['close-others.label', { ns: meta.id }],\n icon: 'ph--x-square--regular',\n },\n };\n\n const closeAll = {\n id: `${LayoutOperation.Close.meta.key}.all`,\n data: Effect.fnUntraced(function* () {\n const deck = yield* DeckCapabilities.getDeck();\n yield* Operation.invoke(LayoutOperation.Close, { subject: deck.active });\n }),\n properties: {\n label: ['close-all.label', { ns: meta.id }],\n icon: 'ph--x-circle--regular',\n },\n };\n\n const state = get(yield* Capability.get(DeckCapabilities.State));\n const deck = state.decks[state.activeDeck];\n\n const toggleSidebar = {\n id: `${LayoutOperation.UpdateSidebar.meta.key}.nav`,\n data: Effect.fnUntraced(function* () {\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (s) => ({\n ...s,\n sidebarState: s.sidebarState === 'expanded' ? ('collapsed' as const) : ('expanded' as const),\n }));\n }),\n properties: {\n label: [\n state.sidebarState === 'expanded'\n ? 'collapse-navigation-sidebar.label'\n : 'open-navigation-sidebar.label',\n { ns: meta.id },\n ],\n icon: 'ph--sidebar--regular',\n keyBinding: {\n macos: \"meta+'\",\n },\n disposition: 'pin-end',\n position: 'last',\n l0Breakpoint: 'lg',\n },\n };\n\n return !deck?.solo ? [closeCurrent, closeOthers, closeAll, toggleSidebar] : [toggleSidebar];\n }),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions.flat());\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "AppNode", "LayoutOperation", "Operation", "AttentionCapabilities", "GraphBuilder", "NodeMatcher", "meta", "DeckCapabilities", "makeModule", "fnUntraced", "extensions", "all", "createExtension", "id", "match", "whenRoot", "connector", "succeed", "makeNotFound", "actions", "_node", "get", "gen", "closeCurrent", "Close", "key", "data", "attention", "Attention", "attended", "getCurrent", "at", "invoke", "subject", "properties", "label", "ns", "icon", "closeOthers", "deck", "getDeck", "ids", "active", "filter", "closeAll", "state", "State", "decks", "activeDeck", "toggleSidebar", "UpdateSidebar", "updateAtomValue", "s", "sidebarState", "keyBinding", "macos", "disposition", "position", "l0Breakpoint", "solo", "contributes", "AppGraphBuilder", "flat"]
7
+ }
@@ -0,0 +1,25 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/capabilities/index.ts
4
+ import { Capability } from "@dxos/app-framework";
5
+ var AppGraphBuilder = Capability.lazy("AppGraphBuilder", () => import("../app-graph-builder-HMLT627T.mjs"));
6
+ var CheckAppScheme = Capability.lazy("CheckAppScheme", () => import("../check-app-scheme-INSOF72J.mjs"));
7
+ var NotificationTracker = Capability.lazy("NotificationTracker", () => import("../notification-tracker-P36322BH.mjs"));
8
+ var OperationHandler = Capability.lazy("OperationHandler", () => import("../operation-handler-266CVMTW.mjs"));
9
+ var ReactRoot = Capability.lazy("ReactRoot", () => import("../react-root-HH5DEUOG.mjs"));
10
+ var ReactSurface = Capability.lazy("ReactSurface", () => import("../react-surface-3UVVCK3O.mjs"));
11
+ var DeckSettings = Capability.lazy("DeckSettings", () => import("../settings-EGNYUM4T.mjs"));
12
+ var DeckState = Capability.lazy("DeckState", () => import("../state-IIDXMQUO.mjs"));
13
+ var UrlHandler = Capability.lazy("UrlHandler", () => import("../url-handler-A6HLW4RB.mjs"));
14
+ export {
15
+ AppGraphBuilder,
16
+ CheckAppScheme,
17
+ DeckSettings,
18
+ DeckState,
19
+ NotificationTracker,
20
+ OperationHandler,
21
+ ReactRoot,
22
+ ReactSurface,
23
+ UrlHandler
24
+ };
25
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/capabilities/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capability } from '@dxos/app-framework';\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const AppGraphBuilder = Capability.lazy('AppGraphBuilder', () => import('./app-graph-builder'));\nexport const CheckAppScheme = Capability.lazy('CheckAppScheme', () => import('./check-app-scheme'));\nexport const NotificationTracker = Capability.lazy('NotificationTracker', () => import('./notification-tracker'));\nexport const OperationHandler = Capability.lazy<OperationHandlerSet.OperationHandlerSet>(\n 'OperationHandler',\n () => import('./operation-handler'),\n);\nexport const ReactRoot = Capability.lazy('ReactRoot', () => import('./react-root'));\nexport const ReactSurface = Capability.lazy('ReactSurface', () => import('./react-surface'));\nexport const DeckSettings = Capability.lazy('DeckSettings', () => import('./settings'));\nexport const DeckState = Capability.lazy('DeckState', () => import('./state'));\nexport const UrlHandler = Capability.lazy('UrlHandler', () => import('./url-handler'));\n"],
5
+ "mappings": ";;;AAIA,SAASA,kBAAkB;AAGpB,IAAMC,kBAAkBD,WAAWE,KAAK,mBAAmB,MAAM,OAAO,mCAAA,CAAA;AACxE,IAAMC,iBAAiBH,WAAWE,KAAK,kBAAkB,MAAM,OAAO,kCAAA,CAAA;AACtE,IAAME,sBAAsBJ,WAAWE,KAAK,uBAAuB,MAAM,OAAO,sCAAA,CAAA;AAChF,IAAMG,mBAAmBL,WAAWE,KACzC,oBACA,MAAM,OAAO,mCAAA,CAAA;AAER,IAAMI,YAAYN,WAAWE,KAAK,aAAa,MAAM,OAAO,4BAAA,CAAA;AAC5D,IAAMK,eAAeP,WAAWE,KAAK,gBAAgB,MAAM,OAAO,+BAAA,CAAA;AAClE,IAAMM,eAAeR,WAAWE,KAAK,gBAAgB,MAAM,OAAO,0BAAA,CAAA;AAClE,IAAMO,YAAYT,WAAWE,KAAK,aAAa,MAAM,OAAO,uBAAA,CAAA;AAC5D,IAAMQ,aAAaV,WAAWE,KAAK,cAAc,MAAM,OAAO,6BAAA,CAAA;",
6
+ "names": ["Capability", "AppGraphBuilder", "lazy", "CheckAppScheme", "NotificationTracker", "OperationHandler", "ReactRoot", "ReactSurface", "DeckSettings", "DeckState", "UrlHandler"]
7
+ }
@@ -0,0 +1,10 @@
1
+ import {
2
+ check_app_scheme_default,
3
+ shouldDeferNavigationHandlers
4
+ } from "./chunk-324PPIZB.mjs";
5
+ import "./chunk-J5LGTIGS.mjs";
6
+ export {
7
+ check_app_scheme_default as default,
8
+ shouldDeferNavigationHandlers
9
+ };
10
+ //# sourceMappingURL=check-app-scheme-INSOF72J.mjs.map
@@ -0,0 +1,101 @@
1
+ // src/capabilities/check-app-scheme.ts
2
+ import * as Effect from "effect/Effect";
3
+ import { Capabilities, Capability } from "@dxos/app-framework";
4
+ import { APP_SCHEME, AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
5
+ import { EffectEx } from "@dxos/effect";
6
+ import { isTauri } from "@dxos/util";
7
+ import { DeckCapabilities } from "#types";
8
+ var NATIVE_REDIRECT_DIALOG = "org.dxos.plugin.welcome.component.native-redirect-dialog";
9
+ var SCHEME_TIMEOUT_MS = 500;
10
+ var isSafari = () => {
11
+ const ua = navigator.userAgent;
12
+ return ua.includes("Safari") && !ua.includes("Chrome") && !ua.includes("Chromium");
13
+ };
14
+ var canRedirectToScheme = () => {
15
+ try {
16
+ const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\/+/, "") + window.location.search;
17
+ new URL(schemeUrl);
18
+ return true;
19
+ } catch {
20
+ return false;
21
+ }
22
+ };
23
+ var tryOpenNativeApp = () => {
24
+ return new Promise((resolve) => {
25
+ let resolved = false;
26
+ const onBlur = () => {
27
+ if (!resolved) {
28
+ resolved = true;
29
+ cleanup();
30
+ resolve(true);
31
+ }
32
+ };
33
+ const cleanup = () => {
34
+ window.removeEventListener("blur", onBlur);
35
+ document.removeEventListener("visibilitychange", onVisibilityChange);
36
+ };
37
+ const onVisibilityChange = () => {
38
+ if (document.hidden) {
39
+ onBlur();
40
+ }
41
+ };
42
+ window.addEventListener("blur", onBlur);
43
+ document.addEventListener("visibilitychange", onVisibilityChange);
44
+ const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\/+/, "") + window.location.search;
45
+ const iframe = document.createElement("iframe");
46
+ iframe.style.display = "none";
47
+ iframe.src = schemeUrl;
48
+ document.body.appendChild(iframe);
49
+ setTimeout(() => iframe.remove(), 3e3);
50
+ setTimeout(() => {
51
+ if (!resolved) {
52
+ resolved = true;
53
+ cleanup();
54
+ resolve(false);
55
+ }
56
+ }, SCHEME_TIMEOUT_MS);
57
+ });
58
+ };
59
+ var dispatchNavigationHandlers = Effect.fn(function* () {
60
+ const url = new URL(window.location.href);
61
+ const handlers = yield* Capability.getAll(AppCapabilities.NavigationHandler);
62
+ yield* Effect.all(handlers.map((handler) => handler(url)), {
63
+ concurrency: "unbounded"
64
+ });
65
+ });
66
+ var shouldDeferNavigationHandlers = () => {
67
+ return !isTauri() && !isSafari() && !import.meta.env.DEV && canRedirectToScheme();
68
+ };
69
+ var check_app_scheme_default = Capability.makeModule(Effect.fnUntraced(function* () {
70
+ const capabilities = yield* Capability.Service;
71
+ const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
72
+ const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);
73
+ if (!settings?.enableNativeRedirect || !shouldDeferNavigationHandlers()) {
74
+ return;
75
+ }
76
+ const appOpened = yield* Effect.promise(() => tryOpenNativeApp());
77
+ if (appOpened) {
78
+ const onOpenHere = () => Effect.gen(function* () {
79
+ yield* dispatchNavigationHandlers();
80
+ yield* invoke(LayoutOperation.UpdateDialog, {
81
+ state: false
82
+ });
83
+ }).pipe(Effect.provideService(Capability.Service, capabilities), EffectEx.runAndForwardErrors);
84
+ yield* invoke(LayoutOperation.UpdateDialog, {
85
+ subject: NATIVE_REDIRECT_DIALOG,
86
+ type: "alert",
87
+ overlayClasses: "dark bg-neutral-950!",
88
+ props: {
89
+ onOpenHere
90
+ }
91
+ });
92
+ } else {
93
+ yield* dispatchNavigationHandlers();
94
+ }
95
+ }));
96
+
97
+ export {
98
+ shouldDeferNavigationHandlers,
99
+ check_app_scheme_default
100
+ };
101
+ //# sourceMappingURL=chunk-324PPIZB.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/check-app-scheme.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { APP_SCHEME, AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { EffectEx } from '@dxos/effect';\nimport { isTauri } from '@dxos/util';\n\nimport { DeckCapabilities } from '#types';\n\n/** Identifier for the native redirect dialog surface (defined in welcome plugin). */\nconst NATIVE_REDIRECT_DIALOG = 'org.dxos.plugin.welcome.component.native-redirect-dialog';\n\nconst SCHEME_TIMEOUT_MS = 500;\n\nconst isSafari = (): boolean => {\n const ua = navigator.userAgent;\n return ua.includes('Safari') && !ua.includes('Chrome') && !ua.includes('Chromium');\n};\n\n/** Check if the current page URL can be converted to a valid custom scheme URL. */\nconst canRedirectToScheme = (): boolean => {\n try {\n const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\\/+/, '') + window.location.search;\n new URL(schemeUrl);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Try to open the native app via custom scheme.\n * Resolves `true` if the app opened (page lost focus), `false` if it didn't within the timeout.\n */\nconst tryOpenNativeApp = (): Promise<boolean> => {\n return new Promise((resolve) => {\n let resolved = false;\n\n const onBlur = () => {\n if (!resolved) {\n resolved = true;\n cleanup();\n resolve(true);\n }\n };\n\n const cleanup = () => {\n window.removeEventListener('blur', onBlur);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n\n const onVisibilityChange = () => {\n if (document.hidden) {\n onBlur();\n }\n };\n\n window.addEventListener('blur', onBlur);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n // Try the scheme via hidden iframe.\n const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\\/+/, '') + window.location.search;\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = schemeUrl;\n document.body.appendChild(iframe);\n setTimeout(() => iframe.remove(), 3000);\n\n // If no blur within timeout, the app isn't running.\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n cleanup();\n resolve(false);\n }\n }, SCHEME_TIMEOUT_MS);\n });\n};\n\n/** Dispatch all NavigationHandler contributions with the current page URL. */\nconst dispatchNavigationHandlers = Effect.fn(function* () {\n const url = new URL(window.location.href);\n const handlers = yield* Capability.getAll(AppCapabilities.NavigationHandler);\n yield* Effect.all(\n handlers.map((handler) => handler(url)),\n { concurrency: 'unbounded' },\n );\n});\n\n/**\n * Checks whether the native redirect setting is enabled and the redirect should be attempted.\n * Exported for the URL handler to decide whether to defer NavigationHandler dispatch.\n */\nexport const shouldDeferNavigationHandlers = (): boolean => {\n return !isTauri() && !isSafari() && !import.meta.env.DEV && canRedirectToScheme();\n};\n\n/**\n * When running in a web browser (not Tauri) with native redirect enabled,\n * tries to open the native app via custom scheme. Defers NavigationHandlers\n * to prevent the web app from consuming one-time tokens before the native app.\n *\n * If the app opens: shows dialog with \"Open here\" callback that dispatches handlers.\n * If the app doesn't open: dispatches handlers immediately.\n * In Safari: universal links handle this natively, so the check is skipped.\n */\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);\n const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);\n\n if (!settings?.enableNativeRedirect || !shouldDeferNavigationHandlers()) {\n return;\n }\n\n const appOpened = yield* Effect.promise(() => tryOpenNativeApp());\n if (appOpened) {\n const onOpenHere = () =>\n Effect.gen(function* () {\n yield* dispatchNavigationHandlers();\n yield* invoke(LayoutOperation.UpdateDialog, { state: false });\n }).pipe(Effect.provideService(Capability.Service, capabilities), EffectEx.runAndForwardErrors);\n\n yield* invoke(LayoutOperation.UpdateDialog, {\n subject: NATIVE_REDIRECT_DIALOG,\n type: 'alert',\n overlayClasses: 'dark bg-neutral-950!',\n props: { onOpenHere },\n });\n } else {\n yield* dispatchNavigationHandlers();\n }\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Capabilities", "Capability", "APP_SCHEME", "AppCapabilities", "LayoutOperation", "EffectEx", "isTauri", "DeckCapabilities", "NATIVE_REDIRECT_DIALOG", "SCHEME_TIMEOUT_MS", "isSafari", "ua", "navigator", "userAgent", "includes", "canRedirectToScheme", "schemeUrl", "window", "location", "pathname", "replace", "search", "URL", "tryOpenNativeApp", "Promise", "resolve", "resolved", "onBlur", "cleanup", "removeEventListener", "document", "onVisibilityChange", "hidden", "addEventListener", "iframe", "createElement", "style", "display", "src", "body", "appendChild", "setTimeout", "remove", "dispatchNavigationHandlers", "fn", "url", "href", "handlers", "getAll", "NavigationHandler", "all", "map", "handler", "concurrency", "shouldDeferNavigationHandlers", "env", "DEV", "makeModule", "fnUntraced", "capabilities", "Service", "invoke", "get", "OperationInvoker", "settings", "getAtomValue", "Settings", "enableNativeRedirect", "appOpened", "promise", "onOpenHere", "gen", "UpdateDialog", "state", "pipe", "provideService", "runAndForwardErrors", "subject", "type", "overlayClasses", "props"]
7
+ }