@dxos/plugin-deck 0.8.4-main.4a85c3132b → 0.8.4-main.4f23b4e393

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 (564) hide show
  1. package/dist/lib/neutral/DeckLayout-6SICSSUF.mjs +278 -0
  2. package/dist/lib/neutral/DeckLayout-6SICSSUF.mjs.map +7 -0
  3. package/dist/lib/neutral/DeckPlugin.mjs +70 -0
  4. package/dist/lib/neutral/DeckPlugin.mjs.map +7 -0
  5. package/dist/lib/neutral/DeckPlugin.node.mjs +18 -0
  6. package/dist/lib/neutral/DeckPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs +27 -0
  8. package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs.map +7 -0
  9. package/dist/lib/neutral/add-toast-2OMTFZ2L.mjs +24 -0
  10. package/dist/lib/neutral/add-toast-2OMTFZ2L.mjs.map +7 -0
  11. package/dist/lib/neutral/adjust-RXTF3IT3.mjs +93 -0
  12. package/dist/lib/neutral/adjust-RXTF3IT3.mjs.map +7 -0
  13. package/dist/lib/neutral/app-graph-builder-GZYYAN5B.mjs +129 -0
  14. package/dist/lib/neutral/app-graph-builder-GZYYAN5B.mjs.map +7 -0
  15. package/dist/lib/neutral/capabilities/index.mjs +23 -0
  16. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  17. package/dist/lib/neutral/check-app-scheme-A7FZVNZO.mjs +10 -0
  18. package/dist/lib/neutral/chunk-4MYX2NT3.mjs +1335 -0
  19. package/dist/lib/neutral/chunk-4MYX2NT3.mjs.map +7 -0
  20. package/dist/lib/neutral/chunk-64ODQD6S.mjs +282 -0
  21. package/dist/lib/neutral/chunk-64ODQD6S.mjs.map +7 -0
  22. package/dist/lib/neutral/chunk-6MOYMDKQ.mjs +8 -0
  23. package/dist/lib/neutral/chunk-6MOYMDKQ.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-GBIGQKYW.mjs +112 -0
  25. package/dist/lib/neutral/chunk-GBIGQKYW.mjs.map +7 -0
  26. package/dist/lib/neutral/chunk-GLB73Q6U.mjs +22 -0
  27. package/dist/lib/neutral/chunk-GLB73Q6U.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  29. package/dist/lib/{browser/chunk-FBL4WVYZ.mjs → neutral/chunk-JMYWDX4I.mjs} +6 -3
  30. package/dist/lib/{browser/chunk-FBL4WVYZ.mjs.map → neutral/chunk-JMYWDX4I.mjs.map} +3 -3
  31. package/dist/lib/neutral/chunk-VHETZ22W.mjs +101 -0
  32. package/dist/lib/neutral/chunk-VHETZ22W.mjs.map +7 -0
  33. package/dist/lib/{browser/chunk-SKBPLX5T.mjs → neutral/chunk-ZYYOSX5I.mjs} +22 -34
  34. package/dist/lib/neutral/chunk-ZYYOSX5I.mjs.map +7 -0
  35. package/dist/lib/neutral/close-DG5IVQCE.mjs +44 -0
  36. package/dist/lib/neutral/close-DG5IVQCE.mjs.map +7 -0
  37. package/dist/lib/neutral/components/index.mjs +126 -0
  38. package/dist/lib/neutral/components/index.mjs.map +7 -0
  39. package/dist/lib/neutral/containers/index.mjs +32 -0
  40. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  41. package/dist/lib/{browser/chunk-Q4GUCIRE.mjs → neutral/hooks/index.mjs} +34 -56
  42. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  43. package/dist/lib/neutral/index.mjs +38 -0
  44. package/dist/lib/neutral/index.mjs.map +7 -0
  45. package/dist/lib/neutral/meta.json +1 -0
  46. package/dist/lib/neutral/meta.mjs +8 -0
  47. package/dist/lib/neutral/meta.mjs.map +7 -0
  48. package/dist/lib/neutral/open-SGYZO7RF.mjs +147 -0
  49. package/dist/lib/neutral/open-SGYZO7RF.mjs.map +7 -0
  50. package/dist/lib/neutral/operation-handler-266CVMTW.mjs +13 -0
  51. package/dist/lib/neutral/operation-handler-266CVMTW.mjs.map +7 -0
  52. package/dist/lib/neutral/operations/index.mjs +8 -0
  53. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  54. package/dist/lib/neutral/plugin.mjs +16 -0
  55. package/dist/lib/neutral/plugin.mjs.map +7 -0
  56. package/dist/lib/{browser/react-root-4ESZAM6D.mjs → neutral/react-root-WZ6KH27J.mjs} +6 -14
  57. package/dist/lib/neutral/react-root-WZ6KH27J.mjs.map +7 -0
  58. package/dist/lib/neutral/react-surface-KAAZDHV3.mjs +34 -0
  59. package/dist/lib/neutral/react-surface-KAAZDHV3.mjs.map +7 -0
  60. package/dist/lib/neutral/revert-workspace-V6D7W6CL.mjs +21 -0
  61. package/dist/lib/neutral/revert-workspace-V6D7W6CL.mjs.map +7 -0
  62. package/dist/lib/neutral/scroll-into-view-UM446Q2T.mjs +21 -0
  63. package/dist/lib/neutral/scroll-into-view-UM446Q2T.mjs.map +7 -0
  64. package/dist/lib/neutral/set-JFFKT32S.mjs +37 -0
  65. package/dist/lib/neutral/set-JFFKT32S.mjs.map +7 -0
  66. package/dist/lib/neutral/set-layout-mode-I4YV5V2Y.mjs +85 -0
  67. package/dist/lib/neutral/set-layout-mode-I4YV5V2Y.mjs.map +7 -0
  68. package/dist/lib/{browser/settings-RY2TBSGP.mjs → neutral/settings-FE7AC5VS.mjs} +7 -13
  69. package/dist/lib/neutral/settings-FE7AC5VS.mjs.map +7 -0
  70. package/dist/lib/neutral/show-undo-ZCMF4J2Q.mjs +59 -0
  71. package/dist/lib/neutral/show-undo-ZCMF4J2Q.mjs.map +7 -0
  72. package/dist/lib/{browser/state-CSTTMJ43.mjs → neutral/state-IIDXMQUO.mjs} +14 -34
  73. package/dist/lib/neutral/state-IIDXMQUO.mjs.map +7 -0
  74. package/dist/lib/neutral/switch-workspace-CVDYG5YZ.mjs +60 -0
  75. package/dist/lib/neutral/switch-workspace-CVDYG5YZ.mjs.map +7 -0
  76. package/dist/lib/neutral/translations.mjs +57 -0
  77. package/dist/lib/neutral/translations.mjs.map +7 -0
  78. package/dist/lib/neutral/types/index.mjs +34 -0
  79. package/dist/lib/neutral/types/index.mjs.map +7 -0
  80. package/dist/lib/neutral/update-companion-VPCM7FJX.mjs +32 -0
  81. package/dist/lib/neutral/update-companion-VPCM7FJX.mjs.map +7 -0
  82. package/dist/lib/neutral/update-complementary-SEQ6DDWA.mjs +28 -0
  83. package/dist/lib/neutral/update-complementary-SEQ6DDWA.mjs.map +7 -0
  84. package/dist/lib/neutral/update-dialog-VDHYE4QH.mjs +29 -0
  85. package/dist/lib/neutral/update-dialog-VDHYE4QH.mjs.map +7 -0
  86. package/dist/lib/neutral/update-plank-size-ZXOUZD7Y.mjs +26 -0
  87. package/dist/lib/neutral/update-plank-size-ZXOUZD7Y.mjs.map +7 -0
  88. package/dist/lib/neutral/update-popover-VFP32W57.mjs +33 -0
  89. package/dist/lib/neutral/update-popover-VFP32W57.mjs.map +7 -0
  90. package/dist/lib/neutral/update-sidebar-O5HBOXYH.mjs +25 -0
  91. package/dist/lib/neutral/update-sidebar-O5HBOXYH.mjs.map +7 -0
  92. package/dist/lib/neutral/url-handler-3QTKEM2K.mjs +184 -0
  93. package/dist/lib/neutral/url-handler-3QTKEM2K.mjs.map +7 -0
  94. package/dist/types/src/DeckPlugin.d.ts +1 -0
  95. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  96. package/dist/types/src/DeckPlugin.node.d.ts +4 -0
  97. package/dist/types/src/DeckPlugin.node.d.ts.map +1 -0
  98. package/dist/types/src/DeckPlugin.test.d.ts +2 -0
  99. package/dist/types/src/DeckPlugin.test.d.ts.map +1 -0
  100. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/check-app-scheme.d.ts +19 -0
  102. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/index.d.ts +198 -9
  104. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  106. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/settings.d.ts +7 -0
  110. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/{state/state.d.ts → state.d.ts} +38 -22
  112. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/{tools/tools.d.ts → tools.d.ts} +1 -1
  114. package/dist/types/src/capabilities/tools.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/{url-handler/url-handler.d.ts → url-handler.d.ts} +1 -1
  116. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -0
  117. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +6 -0
  118. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -0
  119. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +61 -0
  120. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -0
  121. package/dist/types/src/components/DeckSettings/index.d.ts +2 -0
  122. package/dist/types/src/components/DeckSettings/index.d.ts.map +1 -0
  123. package/dist/types/src/components/Matrix/Matrix.d.ts +41 -0
  124. package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -0
  125. package/dist/types/src/components/Matrix/Matrix.stories.d.ts +17 -0
  126. package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -0
  127. package/dist/types/src/components/Matrix/index.d.ts +3 -0
  128. package/dist/types/src/components/Matrix/index.d.ts.map +1 -0
  129. package/dist/types/src/components/index.d.ts +3 -1
  130. package/dist/types/src/components/index.d.ts.map +1 -1
  131. package/dist/types/src/{components/DeckLayout → containers/Deck}/Banner.d.ts +1 -1
  132. package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -0
  133. package/dist/types/src/containers/Deck/Deck.d.ts +25 -0
  134. package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -0
  135. package/dist/types/src/containers/Deck/Deck.stories.d.ts +61 -0
  136. package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -0
  137. package/dist/types/src/containers/Deck/DeckContent.d.ts +7 -0
  138. package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -0
  139. package/dist/types/src/containers/Deck/DeckRoot.d.ts +39 -0
  140. package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -0
  141. package/dist/types/src/containers/Deck/DeckViewport.d.ts +16 -0
  142. package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -0
  143. package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -0
  144. package/dist/types/src/containers/Deck/index.d.ts +2 -0
  145. package/dist/types/src/containers/Deck/index.d.ts.map +1 -0
  146. package/dist/types/src/{components → containers}/DeckLayout/ActiveNode.d.ts.map +1 -1
  147. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -0
  148. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +63 -0
  149. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  150. package/dist/types/src/containers/DeckLayout/Dialog.d.ts.map +1 -0
  151. package/dist/types/src/containers/DeckLayout/Fallback.d.ts +2 -0
  152. package/dist/types/src/containers/DeckLayout/Fallback.d.ts.map +1 -0
  153. package/dist/types/src/containers/DeckLayout/Popover.d.ts +5 -0
  154. package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -0
  155. package/dist/types/src/{components → containers}/DeckLayout/Toast.d.ts +1 -1
  156. package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -0
  157. package/dist/types/src/containers/DeckLayout/constants.d.ts.map +1 -0
  158. package/dist/types/src/containers/DeckLayout/index.d.ts +4 -0
  159. package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -0
  160. package/dist/types/src/containers/Plank/Plank.d.ts +17 -0
  161. package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -0
  162. package/dist/types/src/containers/Plank/Plank.stories.d.ts +61 -0
  163. package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -0
  164. package/dist/types/src/containers/Plank/PlankComponent.d.ts +17 -0
  165. package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +1 -0
  166. package/dist/types/src/containers/Plank/PlankContent.d.ts +10 -0
  167. package/dist/types/src/containers/Plank/PlankContent.d.ts.map +1 -0
  168. package/dist/types/src/{components → containers}/Plank/PlankControls.d.ts +5 -6
  169. package/dist/types/src/containers/Plank/PlankControls.d.ts.map +1 -0
  170. package/dist/types/src/{components → containers}/Plank/PlankError.d.ts +2 -2
  171. package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -0
  172. package/dist/types/src/{components → containers}/Plank/PlankHeading.d.ts +3 -2
  173. package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +1 -0
  174. package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts.map +1 -1
  175. package/dist/types/src/containers/Plank/PlankRoot.d.ts +37 -0
  176. package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -0
  177. package/dist/types/src/containers/Plank/index.d.ts +4 -0
  178. package/dist/types/src/containers/Plank/index.d.ts.map +1 -0
  179. package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -0
  180. package/dist/types/src/containers/Sidebar/Sidebar.d.ts.map +1 -0
  181. package/dist/types/src/{components → containers}/Sidebar/SidebarButton.d.ts +1 -1
  182. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -0
  183. package/dist/types/src/{components → containers}/Sidebar/index.d.ts.map +1 -1
  184. package/dist/types/src/containers/index.d.ts +4 -2
  185. package/dist/types/src/containers/index.d.ts.map +1 -1
  186. package/dist/types/src/hooks/useBreakpoints.d.ts +1 -1
  187. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  188. package/dist/types/src/hooks/useDeckCompanions.d.ts +2 -2
  189. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  190. package/dist/types/src/hooks/useDeckState.d.ts +3 -3
  191. package/dist/types/src/hooks/useDeckState.d.ts.map +1 -1
  192. package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
  193. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  194. package/dist/types/src/hooks/useMainSize.d.ts.map +1 -1
  195. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  196. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -1
  197. package/dist/types/src/index.d.ts +1 -3
  198. package/dist/types/src/index.d.ts.map +1 -1
  199. package/dist/types/src/layout.d.ts +20 -9
  200. package/dist/types/src/layout.d.ts.map +1 -1
  201. package/dist/types/src/layout.test.d.ts +2 -0
  202. package/dist/types/src/layout.test.d.ts.map +1 -0
  203. package/dist/types/src/meta.d.ts.map +1 -1
  204. package/dist/types/src/operations/add-toast.d.ts +5 -0
  205. package/dist/types/src/operations/add-toast.d.ts.map +1 -0
  206. package/dist/types/src/operations/adjust.d.ts +5 -0
  207. package/dist/types/src/operations/adjust.d.ts.map +1 -0
  208. package/dist/types/src/operations/close.d.ts +5 -0
  209. package/dist/types/src/operations/close.d.ts.map +1 -0
  210. package/dist/types/src/operations/helpers.d.ts +3 -0
  211. package/dist/types/src/operations/helpers.d.ts.map +1 -0
  212. package/dist/types/src/operations/index.d.ts +3 -0
  213. package/dist/types/src/operations/index.d.ts.map +1 -0
  214. package/dist/types/src/operations/open.d.ts +5 -0
  215. package/dist/types/src/operations/open.d.ts.map +1 -0
  216. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  217. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  218. package/dist/types/src/operations/scroll-into-view.d.ts +5 -0
  219. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -0
  220. package/dist/types/src/operations/set-layout-mode.d.ts +9 -0
  221. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  222. package/dist/types/src/operations/set.d.ts +5 -0
  223. package/dist/types/src/operations/set.d.ts.map +1 -0
  224. package/dist/types/src/operations/show-undo.d.ts +5 -0
  225. package/dist/types/src/operations/show-undo.d.ts.map +1 -0
  226. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  227. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  228. package/dist/types/src/operations/update-companion.d.ts +5 -0
  229. package/dist/types/src/operations/update-companion.d.ts.map +1 -0
  230. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  231. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  232. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  233. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  234. package/dist/types/src/operations/update-plank-size.d.ts +5 -0
  235. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -0
  236. package/dist/types/src/operations/update-popover.d.ts +5 -0
  237. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  238. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  239. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  240. package/dist/types/src/plugin.d.ts +4 -0
  241. package/dist/types/src/plugin.d.ts.map +1 -0
  242. package/dist/types/src/translations.d.ts +42 -56
  243. package/dist/types/src/translations.d.ts.map +1 -1
  244. package/dist/types/src/{capabilities/state/index.d.ts → types/DeckCapabilities.d.ts} +51 -35
  245. package/dist/types/src/types/DeckCapabilities.d.ts.map +1 -0
  246. package/dist/types/src/types/DeckEvents.d.ts +5 -0
  247. package/dist/types/src/types/DeckEvents.d.ts.map +1 -0
  248. package/dist/types/src/types/DeckOperation.d.ts +15 -0
  249. package/dist/types/src/types/DeckOperation.d.ts.map +1 -0
  250. package/dist/types/src/types/Settings.d.ts +11 -0
  251. package/dist/types/src/types/Settings.d.ts.map +1 -0
  252. package/dist/types/src/types/index.d.ts +4 -2
  253. package/dist/types/src/types/index.d.ts.map +1 -1
  254. package/dist/types/src/types/schema.d.ts +43 -104
  255. package/dist/types/src/types/schema.d.ts.map +1 -1
  256. package/dist/types/src/util/index.d.ts +2 -1
  257. package/dist/types/src/util/index.d.ts.map +1 -1
  258. package/dist/types/src/util/layoutAppliesTopbar.d.ts +1 -1
  259. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  260. package/dist/types/src/util/plank-url-params.d.ts +14 -0
  261. package/dist/types/src/util/plank-url-params.d.ts.map +1 -0
  262. package/dist/types/src/util/plank-url-params.test.d.ts +2 -0
  263. package/dist/types/src/util/plank-url-params.test.d.ts.map +1 -0
  264. package/dist/types/src/util/sanitize-persisted-state.d.ts +19 -0
  265. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -0
  266. package/dist/types/src/util/sanitize-persisted-state.test.d.ts +2 -0
  267. package/dist/types/src/util/sanitize-persisted-state.test.d.ts.map +1 -0
  268. package/dist/types/src/util/set-active.d.ts +2 -2
  269. package/dist/types/src/util/set-active.d.ts.map +1 -1
  270. package/dist/types/src/util/set-active.test.d.ts +2 -0
  271. package/dist/types/src/util/set-active.test.d.ts.map +1 -0
  272. package/dist/types/tsconfig.tsbuildinfo +1 -1
  273. package/package.json +108 -52
  274. package/src/DeckPlugin.node.ts +17 -0
  275. package/src/DeckPlugin.test.ts +27 -0
  276. package/src/DeckPlugin.ts +12 -16
  277. package/src/capabilities/app-graph-builder.ts +127 -0
  278. package/src/capabilities/check-app-scheme.ts +139 -0
  279. package/src/capabilities/index.ts +14 -10
  280. package/src/capabilities/operation-handler.ts +16 -0
  281. package/src/capabilities/{react-root/react-root.tsx → react-root.tsx} +3 -3
  282. package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +12 -14
  283. package/src/capabilities/{settings/settings.ts → settings.ts} +4 -6
  284. package/src/capabilities/{state/state.ts → state.ts} +13 -27
  285. package/src/capabilities/{tools/tools.ts → tools.ts} +6 -6
  286. package/src/capabilities/url-handler.ts +231 -0
  287. package/src/components/DeckSettings/DeckSettings.stories.tsx +38 -0
  288. package/src/components/DeckSettings/DeckSettings.tsx +34 -0
  289. package/src/components/DeckSettings/index.ts +5 -0
  290. package/src/components/Matrix/Matrix.stories.tsx +220 -0
  291. package/src/components/Matrix/Matrix.tsx +205 -0
  292. package/src/components/Matrix/SPEC.md +219 -0
  293. package/src/components/Matrix/index.ts +6 -0
  294. package/src/components/index.ts +6 -2
  295. package/src/{components/DeckLayout → containers/Deck}/Banner.tsx +7 -5
  296. package/src/containers/Deck/Deck.stories.tsx +81 -0
  297. package/src/containers/Deck/Deck.tsx +21 -0
  298. package/src/containers/Deck/DeckContent.tsx +105 -0
  299. package/src/containers/Deck/DeckRoot.tsx +50 -0
  300. package/src/containers/Deck/DeckViewport.tsx +451 -0
  301. package/src/containers/Deck/index.ts +5 -0
  302. package/src/{components → containers}/DeckLayout/ActiveNode.tsx +8 -4
  303. package/src/containers/DeckLayout/DeckLayout.stories.tsx +397 -0
  304. package/src/containers/DeckLayout/DeckLayout.tsx +62 -0
  305. package/src/{components → containers}/DeckLayout/Dialog.tsx +11 -4
  306. package/src/{components → containers}/DeckLayout/Fallback.tsx +4 -4
  307. package/src/{components → containers}/DeckLayout/Popover.tsx +62 -43
  308. package/src/{components → containers}/DeckLayout/Toast.tsx +1 -1
  309. package/src/{components → containers}/DeckLayout/constants.ts +1 -0
  310. package/src/{components → containers}/DeckLayout/index.ts +3 -2
  311. package/src/containers/Plank/Plank.stories.tsx +108 -0
  312. package/src/containers/Plank/Plank.tsx +22 -0
  313. package/src/containers/Plank/PlankComponent.tsx +217 -0
  314. package/src/containers/Plank/PlankContent.tsx +45 -0
  315. package/src/{components → containers}/Plank/PlankControls.tsx +37 -28
  316. package/src/{components → containers}/Plank/PlankError.tsx +20 -4
  317. package/src/{components → containers}/Plank/PlankHeading.tsx +53 -42
  318. package/src/{components → containers}/Plank/PlankLoading.tsx +1 -1
  319. package/src/containers/Plank/PlankRoot.tsx +49 -0
  320. package/src/{components → containers}/Plank/index.ts +0 -2
  321. package/src/{components → containers}/Sidebar/ComplementarySidebar.tsx +66 -83
  322. package/src/{components → containers}/Sidebar/Sidebar.tsx +8 -6
  323. package/src/{components → containers}/Sidebar/SidebarButton.tsx +16 -10
  324. package/src/containers/index.ts +5 -2
  325. package/src/hooks/useCompanions.ts +1 -1
  326. package/src/hooks/useDeckCompanions.ts +3 -7
  327. package/src/hooks/useDeckState.ts +11 -20
  328. package/src/hooks/useHoistStatusbar.ts +1 -1
  329. package/src/hooks/useSelectedCompanion.ts +4 -10
  330. package/src/index.ts +1 -3
  331. package/src/layout.test.ts +59 -0
  332. package/src/layout.ts +38 -40
  333. package/src/meta.ts +2 -1
  334. package/src/operations/add-toast.ts +24 -0
  335. package/src/operations/adjust.ts +82 -0
  336. package/src/operations/close.ts +35 -0
  337. package/src/operations/helpers.ts +22 -0
  338. package/src/operations/index.ts +24 -0
  339. package/src/operations/open.ts +184 -0
  340. package/src/operations/revert-workspace.ts +22 -0
  341. package/src/operations/scroll-into-view.ts +24 -0
  342. package/src/operations/set-layout-mode.ts +84 -0
  343. package/src/operations/set.ts +36 -0
  344. package/src/operations/show-undo.ts +47 -0
  345. package/src/operations/switch-workspace.ts +60 -0
  346. package/src/operations/update-companion.ts +35 -0
  347. package/src/operations/update-complementary.ts +33 -0
  348. package/src/operations/update-dialog.ts +34 -0
  349. package/src/operations/update-plank-size.ts +28 -0
  350. package/src/operations/update-popover.ts +36 -0
  351. package/src/operations/update-sidebar.ts +28 -0
  352. package/src/plugin.ts +11 -0
  353. package/src/translations.ts +42 -55
  354. package/src/types/DeckCapabilities.ts +34 -0
  355. package/src/types/DeckEvents.ts +21 -0
  356. package/src/types/DeckOperation.ts +51 -0
  357. package/src/types/Settings.ts +42 -0
  358. package/src/types/index.ts +5 -2
  359. package/src/types/schema.ts +35 -117
  360. package/src/util/index.ts +2 -1
  361. package/src/util/layoutAppliesTopbar.ts +1 -1
  362. package/src/util/plank-url-params.test.ts +85 -0
  363. package/src/util/plank-url-params.ts +36 -0
  364. package/src/util/sanitize-persisted-state.test.ts +79 -0
  365. package/src/util/sanitize-persisted-state.ts +52 -0
  366. package/src/util/set-active.test.ts +106 -0
  367. package/src/util/set-active.ts +2 -2
  368. package/src/vite-env.d.ts +5 -0
  369. package/dist/lib/browser/Banner-DR6B7XTO.mjs +0 -15
  370. package/dist/lib/browser/Banner-DR6B7XTO.mjs.map +0 -7
  371. package/dist/lib/browser/DeckSettings-HB5TKG2F.mjs +0 -96
  372. package/dist/lib/browser/DeckSettings-HB5TKG2F.mjs.map +0 -7
  373. package/dist/lib/browser/app-graph-builder-22XAL7YE.mjs +0 -123
  374. package/dist/lib/browser/app-graph-builder-22XAL7YE.mjs.map +0 -7
  375. package/dist/lib/browser/check-app-scheme-ZV3QWNNZ.mjs +0 -33
  376. package/dist/lib/browser/check-app-scheme-ZV3QWNNZ.mjs.map +0 -7
  377. package/dist/lib/browser/chunk-BJDEG7YZ.mjs +0 -74
  378. package/dist/lib/browser/chunk-BJDEG7YZ.mjs.map +0 -7
  379. package/dist/lib/browser/chunk-OAPMV5ZR.mjs +0 -280
  380. package/dist/lib/browser/chunk-OAPMV5ZR.mjs.map +0 -7
  381. package/dist/lib/browser/chunk-Q4GUCIRE.mjs.map +0 -7
  382. package/dist/lib/browser/chunk-SKBPLX5T.mjs.map +0 -7
  383. package/dist/lib/browser/chunk-YGOOWRJE.mjs +0 -1390
  384. package/dist/lib/browser/chunk-YGOOWRJE.mjs.map +0 -7
  385. package/dist/lib/browser/index.mjs +0 -185
  386. package/dist/lib/browser/index.mjs.map +0 -7
  387. package/dist/lib/browser/meta.json +0 -1
  388. package/dist/lib/browser/operation-resolver-BLZGJWLO.mjs +0 -580
  389. package/dist/lib/browser/operation-resolver-BLZGJWLO.mjs.map +0 -7
  390. package/dist/lib/browser/react-root-4ESZAM6D.mjs.map +0 -7
  391. package/dist/lib/browser/react-surface-KYQGCALN.mjs +0 -44
  392. package/dist/lib/browser/react-surface-KYQGCALN.mjs.map +0 -7
  393. package/dist/lib/browser/settings-RY2TBSGP.mjs.map +0 -7
  394. package/dist/lib/browser/state-CSTTMJ43.mjs.map +0 -7
  395. package/dist/lib/browser/toolkit-EONRPYA5.mjs +0 -55
  396. package/dist/lib/browser/toolkit-EONRPYA5.mjs.map +0 -7
  397. package/dist/lib/browser/types/index.mjs +0 -40
  398. package/dist/lib/browser/url-handler-EM3SYHHX.mjs +0 -95
  399. package/dist/lib/browser/url-handler-EM3SYHHX.mjs.map +0 -7
  400. package/dist/lib/node-esm/Banner-HR7DPUZU.mjs +0 -16
  401. package/dist/lib/node-esm/Banner-HR7DPUZU.mjs.map +0 -7
  402. package/dist/lib/node-esm/DeckSettings-MWTR7HU2.mjs +0 -97
  403. package/dist/lib/node-esm/DeckSettings-MWTR7HU2.mjs.map +0 -7
  404. package/dist/lib/node-esm/app-graph-builder-GNNNCWGN.mjs +0 -124
  405. package/dist/lib/node-esm/app-graph-builder-GNNNCWGN.mjs.map +0 -7
  406. package/dist/lib/node-esm/check-app-scheme-ZNISVRFH.mjs +0 -34
  407. package/dist/lib/node-esm/check-app-scheme-ZNISVRFH.mjs.map +0 -7
  408. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs +0 -76
  409. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +0 -7
  410. package/dist/lib/node-esm/chunk-EGFOT3DE.mjs +0 -18
  411. package/dist/lib/node-esm/chunk-EGFOT3DE.mjs.map +0 -7
  412. package/dist/lib/node-esm/chunk-IR6ODCNC.mjs +0 -83
  413. package/dist/lib/node-esm/chunk-IR6ODCNC.mjs.map +0 -7
  414. package/dist/lib/node-esm/chunk-L2NPJPGL.mjs +0 -281
  415. package/dist/lib/node-esm/chunk-L2NPJPGL.mjs.map +0 -7
  416. package/dist/lib/node-esm/chunk-O4IOJICP.mjs +0 -201
  417. package/dist/lib/node-esm/chunk-O4IOJICP.mjs.map +0 -7
  418. package/dist/lib/node-esm/chunk-Z43MBISY.mjs +0 -1391
  419. package/dist/lib/node-esm/chunk-Z43MBISY.mjs.map +0 -7
  420. package/dist/lib/node-esm/index.mjs +0 -186
  421. package/dist/lib/node-esm/index.mjs.map +0 -7
  422. package/dist/lib/node-esm/meta.json +0 -1
  423. package/dist/lib/node-esm/operation-resolver-5BYDNQND.mjs +0 -581
  424. package/dist/lib/node-esm/operation-resolver-5BYDNQND.mjs.map +0 -7
  425. package/dist/lib/node-esm/react-root-YO7IIC75.mjs +0 -50
  426. package/dist/lib/node-esm/react-root-YO7IIC75.mjs.map +0 -7
  427. package/dist/lib/node-esm/react-surface-G7VRKT4U.mjs +0 -45
  428. package/dist/lib/node-esm/react-surface-G7VRKT4U.mjs.map +0 -7
  429. package/dist/lib/node-esm/settings-GYLWWOBK.mjs +0 -41
  430. package/dist/lib/node-esm/settings-GYLWWOBK.mjs.map +0 -7
  431. package/dist/lib/node-esm/state-RQXTBWUX.mjs +0 -107
  432. package/dist/lib/node-esm/state-RQXTBWUX.mjs.map +0 -7
  433. package/dist/lib/node-esm/toolkit-EU3Z2R4H.mjs +0 -56
  434. package/dist/lib/node-esm/toolkit-EU3Z2R4H.mjs.map +0 -7
  435. package/dist/lib/node-esm/types/index.mjs +0 -41
  436. package/dist/lib/node-esm/url-handler-VUK2LBJV.mjs +0 -96
  437. package/dist/lib/node-esm/url-handler-VUK2LBJV.mjs.map +0 -7
  438. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
  439. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
  440. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
  441. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +0 -5
  442. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +0 -1
  443. package/dist/types/src/capabilities/check-app-scheme/index.d.ts +0 -3
  444. package/dist/types/src/capabilities/check-app-scheme/index.d.ts.map +0 -1
  445. package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
  446. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
  447. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
  448. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
  449. package/dist/types/src/capabilities/react-root/index.d.ts +0 -6
  450. package/dist/types/src/capabilities/react-root/index.d.ts.map +0 -1
  451. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +0 -1
  452. package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
  453. package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
  454. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
  455. package/dist/types/src/capabilities/settings/index.d.ts +0 -19
  456. package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
  457. package/dist/types/src/capabilities/settings/settings.d.ts +0 -22
  458. package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
  459. package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
  460. package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
  461. package/dist/types/src/capabilities/toolkit/index.d.ts +0 -3
  462. package/dist/types/src/capabilities/toolkit/index.d.ts.map +0 -1
  463. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +0 -27
  464. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +0 -1
  465. package/dist/types/src/capabilities/tools/index.d.ts +0 -3
  466. package/dist/types/src/capabilities/tools/index.d.ts.map +0 -1
  467. package/dist/types/src/capabilities/tools/tools.d.ts.map +0 -1
  468. package/dist/types/src/capabilities/url-handler/index.d.ts +0 -3
  469. package/dist/types/src/capabilities/url-handler/index.d.ts.map +0 -1
  470. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +0 -1
  471. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +0 -1
  472. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts +0 -3
  473. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +0 -1
  474. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +0 -1
  475. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +0 -75
  476. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +0 -1
  477. package/dist/types/src/components/DeckLayout/DeckMain.d.ts +0 -3
  478. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +0 -1
  479. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +0 -1
  480. package/dist/types/src/components/DeckLayout/Fallback.d.ts +0 -3
  481. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +0 -1
  482. package/dist/types/src/components/DeckLayout/Popover.d.ts +0 -5
  483. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +0 -1
  484. package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +0 -1
  485. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +0 -1
  486. package/dist/types/src/components/DeckLayout/Topbar.d.ts +0 -3
  487. package/dist/types/src/components/DeckLayout/Topbar.d.ts.map +0 -1
  488. package/dist/types/src/components/DeckLayout/constants.d.ts.map +0 -1
  489. package/dist/types/src/components/DeckLayout/index.d.ts +0 -4
  490. package/dist/types/src/components/DeckLayout/index.d.ts.map +0 -1
  491. package/dist/types/src/components/Plank/Plank.d.ts +0 -27
  492. package/dist/types/src/components/Plank/Plank.d.ts.map +0 -1
  493. package/dist/types/src/components/Plank/Plank.stories.d.ts +0 -108
  494. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +0 -1
  495. package/dist/types/src/components/Plank/PlankControls.d.ts.map +0 -1
  496. package/dist/types/src/components/Plank/PlankError.d.ts.map +0 -1
  497. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +0 -1
  498. package/dist/types/src/components/Plank/index.d.ts +0 -6
  499. package/dist/types/src/components/Plank/index.d.ts.map +0 -1
  500. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +0 -1
  501. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +0 -1
  502. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +0 -1
  503. package/dist/types/src/components/fragments.d.ts +0 -7
  504. package/dist/types/src/components/fragments.d.ts.map +0 -1
  505. package/dist/types/src/containers/Banner/Banner.d.ts +0 -2
  506. package/dist/types/src/containers/Banner/Banner.d.ts.map +0 -1
  507. package/dist/types/src/containers/Banner/index.d.ts +0 -3
  508. package/dist/types/src/containers/Banner/index.d.ts.map +0 -1
  509. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts +0 -8
  510. package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts.map +0 -1
  511. package/dist/types/src/containers/DeckSettings/index.d.ts +0 -3
  512. package/dist/types/src/containers/DeckSettings/index.d.ts.map +0 -1
  513. package/dist/types/src/types/capabilities.d.ts +0 -190
  514. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  515. package/dist/types/src/types/events.d.ts +0 -7
  516. package/dist/types/src/types/events.d.ts.map +0 -1
  517. package/dist/types/src/util/overscroll.d.ts +0 -47
  518. package/dist/types/src/util/overscroll.d.ts.map +0 -1
  519. package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -119
  520. package/src/capabilities/app-graph-builder/index.ts +0 -7
  521. package/src/capabilities/check-app-scheme/check-app-scheme.ts +0 -45
  522. package/src/capabilities/check-app-scheme/index.ts +0 -7
  523. package/src/capabilities/operation-resolver/index.ts +0 -10
  524. package/src/capabilities/operation-resolver/operation-resolver.ts +0 -560
  525. package/src/capabilities/react-root/index.ts +0 -7
  526. package/src/capabilities/react-surface/index.ts +0 -7
  527. package/src/capabilities/settings/index.ts +0 -7
  528. package/src/capabilities/state/index.ts +0 -7
  529. package/src/capabilities/toolkit/index.ts +0 -7
  530. package/src/capabilities/toolkit/toolkit.ts +0 -64
  531. package/src/capabilities/tools/index.ts +0 -7
  532. package/src/capabilities/url-handler/index.ts +0 -7
  533. package/src/capabilities/url-handler/url-handler.ts +0 -96
  534. package/src/components/DeckLayout/ContentEmpty.tsx +0 -30
  535. package/src/components/DeckLayout/DeckLayout.stories.tsx +0 -53
  536. package/src/components/DeckLayout/DeckLayout.tsx +0 -34
  537. package/src/components/DeckLayout/DeckMain.tsx +0 -287
  538. package/src/components/DeckLayout/Topbar.tsx +0 -11
  539. package/src/components/Plank/Plank.stories.tsx +0 -64
  540. package/src/components/Plank/Plank.tsx +0 -302
  541. package/src/components/fragments.ts +0 -19
  542. package/src/containers/Banner/Banner.tsx +0 -5
  543. package/src/containers/Banner/index.ts +0 -7
  544. package/src/containers/DeckSettings/DeckSettings.tsx +0 -113
  545. package/src/containers/DeckSettings/index.ts +0 -7
  546. package/src/types/capabilities.ts +0 -33
  547. package/src/types/events.ts +0 -21
  548. package/src/util/overscroll.ts +0 -69
  549. /package/dist/lib/{browser/types/index.mjs.map → neutral/check-app-scheme-A7FZVNZO.mjs.map} +0 -0
  550. /package/dist/lib/{node-esm/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  551. /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
  552. /package/dist/types/src/capabilities/{react-root/react-root.d.ts → react-root.d.ts} +0 -0
  553. /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
  554. /package/dist/types/src/{components/DeckLayout → containers/Deck}/StatusBar.d.ts +0 -0
  555. /package/dist/types/src/{components → containers}/DeckLayout/ActiveNode.d.ts +0 -0
  556. /package/dist/types/src/{components → containers}/DeckLayout/DeckLayout.d.ts +0 -0
  557. /package/dist/types/src/{components → containers}/DeckLayout/Dialog.d.ts +0 -0
  558. /package/dist/types/src/{components → containers}/DeckLayout/constants.d.ts +0 -0
  559. /package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts +0 -0
  560. /package/dist/types/src/{components → containers}/Sidebar/ComplementarySidebar.d.ts +0 -0
  561. /package/dist/types/src/{components → containers}/Sidebar/Sidebar.d.ts +0 -0
  562. /package/dist/types/src/{components → containers}/Sidebar/index.d.ts +0 -0
  563. /package/src/{components/DeckLayout → containers/Deck}/StatusBar.tsx +0 -0
  564. /package/src/{components → containers}/Sidebar/index.ts +0 -0
@@ -0,0 +1,8 @@
1
+ // src/operations/index.ts
2
+ import { OperationHandlerSet } from "@dxos/compute";
3
+ var DeckOperationHandlerSet = OperationHandlerSet.lazy(() => import("./add-toast-2OMTFZ2L.mjs"), () => import("./adjust-RXTF3IT3.mjs"), () => import("./close-DG5IVQCE.mjs"), () => import("./open-SGYZO7RF.mjs"), () => import("./revert-workspace-V6D7W6CL.mjs"), () => import("./scroll-into-view-UM446Q2T.mjs"), () => import("./set-JFFKT32S.mjs"), () => import("./set-layout-mode-I4YV5V2Y.mjs"), () => import("./show-undo-ZCMF4J2Q.mjs"), () => import("./switch-workspace-CVDYG5YZ.mjs"), () => import("./update-companion-VPCM7FJX.mjs"), () => import("./update-complementary-SEQ6DDWA.mjs"), () => import("./update-dialog-VDHYE4QH.mjs"), () => import("./update-plank-size-ZXOUZD7Y.mjs"), () => import("./update-popover-VFP32W57.mjs"), () => import("./update-sidebar-O5HBOXYH.mjs"));
4
+
5
+ export {
6
+ DeckOperationHandlerSet
7
+ };
8
+ //# sourceMappingURL=chunk-6MOYMDKQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/index.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const DeckOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./add-toast'),\n () => import('./adjust'),\n () => import('./close'),\n () => import('./open'),\n () => import('./revert-workspace'),\n () => import('./scroll-into-view'),\n () => import('./set'),\n () => import('./set-layout-mode'),\n () => import('./show-undo'),\n () => import('./switch-workspace'),\n () => import('./update-companion'),\n () => import('./update-complementary'),\n () => import('./update-dialog'),\n () => import('./update-plank-size'),\n () => import('./update-popover'),\n () => import('./update-sidebar'),\n);\n"],
5
+ "mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,0BAA0BD,oBAAoBE,KACzD,MAAM,OAAO,0BAAA,GACb,MAAM,OAAO,uBAAA,GACb,MAAM,OAAO,sBAAA,GACb,MAAM,OAAO,qBAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,oBAAA,GACb,MAAM,OAAO,gCAAA,GACb,MAAM,OAAO,0BAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,qCAAA,GACb,MAAM,OAAO,8BAAA,GACb,MAAM,OAAO,kCAAA,GACb,MAAM,OAAO,+BAAA,GACb,MAAM,OAAO,+BAAA,CAAA;",
6
+ "names": ["OperationHandlerSet", "DeckOperationHandlerSet", "lazy"]
7
+ }
@@ -0,0 +1,112 @@
1
+ // src/util/plank-url-params.ts
2
+ import { fromUrlPath, toUrlPath } from "@dxos/app-toolkit";
3
+ var PLANK_PARAM = "plank";
4
+ var serializePlanks = (active, existingSearch) => {
5
+ const params = new URLSearchParams(existingSearch);
6
+ params.delete(PLANK_PARAM);
7
+ for (const id of active) {
8
+ params.append(PLANK_PARAM, toUrlPath(id));
9
+ }
10
+ return params.size > 0 ? `?${params.toString()}` : "";
11
+ };
12
+ var deserializePlanks = (url) => {
13
+ return url.searchParams.getAll(PLANK_PARAM).map(fromUrlPath);
14
+ };
15
+ var stripPlanks = (existingSearch) => {
16
+ const params = new URLSearchParams(existingSearch);
17
+ params.delete(PLANK_PARAM);
18
+ return params.size > 0 ? `?${params.toString()}` : "";
19
+ };
20
+
21
+ // src/util/sanitize-persisted-state.ts
22
+ var sanitizePersistedState = (state) => {
23
+ let needsUpdate = false;
24
+ const cleanedDecks = {
25
+ ...state.decks
26
+ };
27
+ for (const [id, deck] of Object.entries(cleanedDecks)) {
28
+ if (!deck) {
29
+ continue;
30
+ }
31
+ let updated = false;
32
+ let cleanedDeck = deck;
33
+ if (deck.fullscreen) {
34
+ cleanedDeck = {
35
+ ...cleanedDeck,
36
+ fullscreen: false
37
+ };
38
+ updated = true;
39
+ }
40
+ if (deck.solo && deck.active.length > 0) {
41
+ cleanedDeck = {
42
+ ...cleanedDeck,
43
+ active: []
44
+ };
45
+ updated = true;
46
+ }
47
+ if (updated) {
48
+ cleanedDecks[id] = cleanedDeck;
49
+ needsUpdate = true;
50
+ }
51
+ }
52
+ return needsUpdate ? {
53
+ ...state,
54
+ decks: cleanedDecks
55
+ } : state;
56
+ };
57
+
58
+ // src/util/set-active.ts
59
+ var computeActiveUpdates = ({ next, deck, attention }) => {
60
+ const active = deck.solo ? [
61
+ deck.solo
62
+ ] : deck.active;
63
+ const removed = active.filter((id) => !next.includes(id));
64
+ const closed = Array.from(/* @__PURE__ */ new Set([
65
+ ...deck.inactive.filter((id) => !next.includes(id)),
66
+ ...removed
67
+ ]));
68
+ const updates = {
69
+ inactive: closed,
70
+ solo: deck.solo,
71
+ active: deck.active,
72
+ fullscreen: deck.fullscreen
73
+ };
74
+ if (deck.solo || !deck.initialized) {
75
+ updates.solo = next[0];
76
+ } else {
77
+ updates.active = next;
78
+ }
79
+ if (deck.fullscreen && !updates.solo) {
80
+ updates.fullscreen = false;
81
+ }
82
+ let toAttend;
83
+ if (attention) {
84
+ const attended = attention.getCurrent();
85
+ const [attendedId] = Array.from(attended);
86
+ const isAttendedAvailable = !!attendedId && next.includes(attendedId);
87
+ if (!isAttendedAvailable) {
88
+ const attendedIndex = active.indexOf(attendedId);
89
+ const index = attendedIndex === -1 ? 0 : attendedIndex >= next.length ? next.length - 1 : attendedIndex;
90
+ toAttend = next[index];
91
+ }
92
+ }
93
+ return {
94
+ deckUpdates: updates,
95
+ toAttend
96
+ };
97
+ };
98
+
99
+ // src/util/layoutAppliesTopbar.ts
100
+ var layoutAppliesTopbar = (breakpoint, layoutMode) => {
101
+ return document.body.getAttribute("data-platform") === "windows" && breakpoint === "desktop" && layoutMode !== "solo--fullscreen";
102
+ };
103
+
104
+ export {
105
+ layoutAppliesTopbar,
106
+ serializePlanks,
107
+ deserializePlanks,
108
+ stripPlanks,
109
+ sanitizePersistedState,
110
+ computeActiveUpdates
111
+ };
112
+ //# sourceMappingURL=chunk-GBIGQKYW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/util/plank-url-params.ts", "../../../src/util/sanitize-persisted-state.ts", "../../../src/util/set-active.ts", "../../../src/util/layoutAppliesTopbar.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { fromUrlPath, toUrlPath } from '@dxos/app-toolkit';\n\nconst PLANK_PARAM = 'plank';\n\n/**\n * Serialize deck active qualified IDs into a URL search string.\n * Preserves non-plank query params from the existing search string.\n */\nexport const serializePlanks = (active: readonly string[], existingSearch: string): string => {\n const params = new URLSearchParams(existingSearch);\n params.delete(PLANK_PARAM);\n for (const id of active) {\n params.append(PLANK_PARAM, toUrlPath(id));\n }\n return params.size > 0 ? `?${params.toString()}` : '';\n};\n\n/**\n * Deserialize plank query params from a URL back to qualified graph IDs.\n */\nexport const deserializePlanks = (url: URL): string[] => {\n return url.searchParams.getAll(PLANK_PARAM).map(fromUrlPath);\n};\n\n/**\n * Strip plank query params from a search string, preserving all others.\n */\nexport const stripPlanks = (existingSearch: string): string => {\n const params = new URLSearchParams(existingSearch);\n params.delete(PLANK_PARAM);\n return params.size > 0 ? `?${params.toString()}` : '';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type StoredDeckState } from '#types';\n\n/**\n * Sanitizes persisted deck state on startup.\n *\n * Persisted state may contain values that are inappropriate to restore across sessions:\n *\n * - **Fullscreen**: Cleared unconditionally to prevent the user from getting stuck in fullscreen\n * mode if the app was closed (or crashed) while fullscreen was active.\n *\n * - **Active planks in solo-mode decks**: When a deck is in solo mode, any items in `active`\n * represent planks that were kept mounted (hidden) during the session for fast deck↔solo\n * switching. After a restart these planks would need to fully remount anyway, so retaining\n * them only adds unnecessary load. Clearing `active` for solo-mode decks avoids rendering\n * stale planks in the background on startup.\n *\n * Returns a new state object if any changes were made, or the original state if clean.\n */\nexport const sanitizePersistedState = (state: StoredDeckState): StoredDeckState => {\n let needsUpdate = false;\n const cleanedDecks = { ...state.decks };\n\n for (const [id, deck] of Object.entries(cleanedDecks)) {\n if (!deck) {\n continue;\n }\n\n let updated = false;\n let cleanedDeck = deck;\n\n if (deck.fullscreen) {\n cleanedDeck = { ...cleanedDeck, fullscreen: false };\n updated = true;\n }\n\n if (deck.solo && deck.active.length > 0) {\n cleanedDeck = { ...cleanedDeck, active: [] };\n updated = true;\n }\n\n if (updated) {\n cleanedDecks[id] = cleanedDeck;\n needsUpdate = true;\n }\n }\n\n return needsUpdate ? { ...state, decks: cleanedDecks } : state;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AttentionManager } from '@dxos/react-ui-attention';\n\nimport { type DeckState } from '#types';\n\nexport type SetActiveOptions = {\n next: string[];\n deck: DeckState;\n attention?: AttentionManager;\n};\n\nexport type SetActiveResult = {\n /** Updates to apply to the deck. */\n deckUpdates: {\n inactive: string[];\n solo: string | undefined;\n active: string[];\n fullscreen: boolean;\n };\n /** ID of the item to attend (scroll into view) if attention changed. */\n toAttend?: string;\n};\n\n/**\n * Computes the new active state for the deck without mutating.\n * Returns the updates to apply and optionally an item to attend.\n */\nexport const computeActiveUpdates = ({ next, deck, attention }: SetActiveOptions): SetActiveResult => {\n const active = deck.solo ? [deck.solo] : deck.active;\n const removed = active.filter((id) => !next.includes(id));\n const closed = Array.from(new Set([...deck.inactive.filter((id) => !next.includes(id)), ...removed]));\n\n const updates = {\n inactive: closed,\n solo: deck.solo,\n active: deck.active,\n fullscreen: deck.fullscreen,\n };\n\n if (deck.solo || !deck.initialized) {\n updates.solo = next[0];\n } else {\n updates.active = next;\n }\n\n if (deck.fullscreen && !updates.solo) {\n updates.fullscreen = false;\n }\n\n let toAttend: string | undefined;\n if (attention) {\n const attended = attention.getCurrent();\n const [attendedId] = Array.from(attended);\n const isAttendedAvailable = !!attendedId && next.includes(attendedId);\n if (!isAttendedAvailable) {\n const attendedIndex = active.indexOf(attendedId);\n // If outside of bounds, focus on the first/last plank, otherwise focus on the new plank in the same position.\n const index = attendedIndex === -1 ? 0 : attendedIndex >= next.length ? next.length - 1 : attendedIndex;\n toAttend = next[index];\n }\n }\n\n return { deckUpdates: updates, toAttend };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type LayoutMode } from '#types';\n\nexport const layoutAppliesTopbar = (breakpoint: string, layoutMode?: LayoutMode) => {\n return (\n document.body.getAttribute('data-platform') === 'windows' &&\n breakpoint === 'desktop' &&\n layoutMode !== 'solo--fullscreen'\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["fromUrlPath", "toUrlPath", "PLANK_PARAM", "serializePlanks", "active", "existingSearch", "params", "URLSearchParams", "delete", "id", "append", "size", "toString", "deserializePlanks", "url", "searchParams", "getAll", "map", "stripPlanks", "sanitizePersistedState", "state", "needsUpdate", "cleanedDecks", "decks", "id", "deck", "Object", "entries", "updated", "cleanedDeck", "fullscreen", "solo", "active", "length", "computeActiveUpdates", "next", "deck", "attention", "active", "solo", "removed", "filter", "id", "includes", "closed", "Array", "from", "Set", "inactive", "updates", "fullscreen", "initialized", "toAttend", "attended", "getCurrent", "attendedId", "isAttendedAvailable", "attendedIndex", "indexOf", "index", "length", "deckUpdates", "layoutAppliesTopbar", "breakpoint", "layoutMode", "document", "body", "getAttribute"]
7
+ }
@@ -0,0 +1,22 @@
1
+ // src/operations/helpers.ts
2
+ import { invariant } from "@dxos/invariant";
3
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/operations/helpers.ts";
4
+ var updateActiveDeck = (current, deckUpdates) => {
5
+ const currentDeck = current.decks[current.activeDeck];
6
+ invariant(currentDeck, `Deck not found: ${current.activeDeck}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 7, S: void 0, A: ["currentDeck", "`Deck not found: ${current.activeDeck}`"] });
7
+ return {
8
+ ...current,
9
+ decks: {
10
+ ...current.decks,
11
+ [current.activeDeck]: {
12
+ ...currentDeck,
13
+ ...deckUpdates
14
+ }
15
+ }
16
+ };
17
+ };
18
+
19
+ export {
20
+ updateActiveDeck
21
+ };
22
+ //# sourceMappingURL=chunk-GLB73Q6U.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/helpers.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type DeckState, type StoredDeckState } from '../types';\n\nexport const updateActiveDeck = (current: StoredDeckState, deckUpdates: Partial<DeckState>): StoredDeckState => {\n const currentDeck = current.decks[current.activeDeck];\n invariant(currentDeck, `Deck not found: ${current.activeDeck}`);\n return {\n ...current,\n decks: {\n ...current.decks,\n [current.activeDeck]: {\n ...currentDeck,\n ...deckUpdates,\n },\n },\n };\n};\n"],
5
+ "mappings": ";AAIA,SAASA,iBAAiB;AAI1B,IAAA,eAAaC;AAEXD,IAAAA,mBAAwB,CAAA,SAAA,gBAA0BE;AAClD,QAAA,cAAO,QAAA,MAAA,QAAA,UAAA;YACFC,aAAO,mBAAA,QAAA,UAAA,IAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,GAAA,GAAA,QAAA,GAAA,CAAA,eAAA,yCAAA,EAAA,CAAA;SACVC;;WAEGD;iBACIE;eACAC,UAAW,GAAA;QAChB,GAAA;QACF,GAAA;MACF;IACA;;;",
6
+ "names": ["invariant", "updateActiveDeck", "activeDeck", "current", "decks", "currentDeck", "deckUpdates"]
7
+ }
@@ -0,0 +1,10 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __export = (target, all) => {
3
+ for (var name in all)
4
+ __defProp(target, name, { get: all[name], enumerable: true });
5
+ };
6
+
7
+ export {
8
+ __export
9
+ };
10
+ //# sourceMappingURL=chunk-J5LGTIGS.mjs.map
@@ -1,16 +1,19 @@
1
1
  // src/meta.ts
2
2
  import { trim } from "@dxos/util";
3
3
  var meta = {
4
- id: "dxos.org/plugin/deck",
4
+ id: "org.dxos.plugin.deck",
5
5
  name: "Layout",
6
6
  description: trim`
7
7
  Flexible layout system for arranging workspace views in tabs, splits, and panels.
8
8
  Customize your workspace organization with drag-and-drop layout management.
9
9
  `,
10
- icon: "ph--layout--regular"
10
+ icon: "ph--layout--regular",
11
+ tags: [
12
+ "system"
13
+ ]
11
14
  };
12
15
 
13
16
  export {
14
17
  meta
15
18
  };
16
- //# sourceMappingURL=chunk-FBL4WVYZ.mjs.map
19
+ //# sourceMappingURL=chunk-JMYWDX4I.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/meta.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'dxos.org/plugin/deck',\n name: 'Layout',\n description: trim`\n Flexible layout system for arranging workspace views in tabs, splits, and panels.\n Customize your workspace organization with drag-and-drop layout management.\n `,\n icon: 'ph--layout--regular',\n};\n"],
5
- "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;AACR;",
6
- "names": ["trim", "meta", "id", "name", "description", "trim", "icon"]
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.deck',\n name: 'Layout',\n description: trim`\n Flexible layout system for arranging workspace views in tabs, splits, and panels.\n Customize your workspace organization with drag-and-drop layout management.\n `,\n icon: 'ph--layout--regular',\n tags: ['system'],\n};\n"],
5
+ "mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaJ;;;;EAIbK,MAAM;EACNC,MAAM;IAAC;;AACT;",
6
+ "names": ["trim", "meta", "id", "name", "description", "icon", "tags"]
7
7
  }
@@ -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 { runAndForwardErrors } 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), 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-VHETZ22W.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 { runAndForwardErrors } 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), 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", "runAndForwardErrors", "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", "subject", "type", "overlayClasses", "props"]
7
+ }
@@ -1,23 +1,13 @@
1
1
  // src/layout.ts
2
2
  import { produce } from "immer";
3
- import { ATTENDABLE_PATH_SEPARATOR } from "@dxos/react-ui-attention";
4
- var createEntryId = (entryId, variant) => variant ? `${entryId}${ATTENDABLE_PATH_SEPARATOR}${variant}` : entryId;
5
- var parseEntryId = (entryId) => {
6
- const [id, variant] = entryId.split(ATTENDABLE_PATH_SEPARATOR);
7
- return {
8
- id,
9
- variant
10
- };
11
- };
12
- var openEntry = (deck, _entryId, options) => {
13
- return produce(deck, (draft) => {
14
- const entryId = createEntryId(_entryId, options?.variant);
3
+ var openEntry = (deck, entryId, options) => {
4
+ return produce([
5
+ ...deck
6
+ ], (draft) => {
15
7
  if (draft.find((id) => id === entryId)) {
16
8
  return;
17
9
  }
18
10
  const key = options?.key;
19
- const plankPositioning = options?.positioning ?? "start";
20
- const pivotId = options?.pivotId;
21
11
  if (key) {
22
12
  const index = draft.findIndex((id) => id.split("+")[0] === key);
23
13
  if (index !== -1) {
@@ -25,24 +15,24 @@ var openEntry = (deck, _entryId, options) => {
25
15
  return;
26
16
  }
27
17
  }
28
- if (pivotId) {
29
- const pivotIndex = draft.findIndex((id) => id === pivotId);
30
- if (pivotIndex !== -1) {
31
- if (plankPositioning === "start") {
32
- draft.splice(pivotIndex, 0, entryId);
33
- } else {
34
- draft.splice(pivotIndex + 1, 0, entryId);
35
- }
36
- return;
37
- }
38
- }
39
- if (plankPositioning === "start") {
40
- draft.unshift(entryId);
41
- } else {
42
- draft.push(entryId);
43
- }
18
+ draft.push(entryId);
44
19
  });
45
20
  };
21
+ var openSubjectsOnActiveDeck = (active, subject, options) => {
22
+ if (subject.length > 0 && subject.every((id) => active.includes(id))) {
23
+ return [
24
+ ...active
25
+ ];
26
+ }
27
+ const { pivotId, key } = options ?? {};
28
+ const pivotIndex = pivotId ? active.findIndex((id) => id === pivotId) : -1;
29
+ const baseDeck = pivotIndex !== -1 ? active.slice(0, pivotIndex + 1) : [
30
+ ...active
31
+ ];
32
+ return subject.reduce((acc, entryId) => openEntry(acc, entryId, {
33
+ key
34
+ }), baseDeck);
35
+ };
46
36
  var closeEntry = (deck, entryId) => {
47
37
  return produce(deck, (draft) => {
48
38
  const index = draft.findIndex((id) => id === entryId);
@@ -72,10 +62,8 @@ var incrementPlank = (deck, adjustment) => {
72
62
  };
73
63
 
74
64
  export {
75
- createEntryId,
76
- parseEntryId,
77
- openEntry,
65
+ openSubjectsOnActiveDeck,
78
66
  closeEntry,
79
67
  incrementPlank
80
68
  };
81
- //# sourceMappingURL=chunk-SKBPLX5T.mjs.map
69
+ //# sourceMappingURL=chunk-ZYYOSX5I.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/layout.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { produce } from 'immer';\n\nimport { type DeckAction } from '#types';\n\ntype OpenLayoutEntryOptions = {\n key?: string;\n};\n\n/**\n * Mutates a deck list using stack semantics: new items open to the right (`push`).\n * Callers that open from a pivot must truncate the deck first (see deck `open` operation).\n */\nexport const openEntry = (deck: readonly string[], entryId: string, options?: OpenLayoutEntryOptions): string[] => {\n return produce([...deck], (draft) => {\n if (draft.find((id) => id === entryId)) {\n return;\n }\n\n const key = options?.key;\n if (key) {\n const index = draft.findIndex((id) => id.split('+')[0] === key);\n if (index !== -1) {\n draft.splice(index, 1, entryId);\n return;\n }\n }\n\n draft.push(entryId);\n });\n};\n\nexport type OpenSubjectsOnActiveDeckOptions = {\n pivotId?: string;\n key?: string;\n};\n\n/**\n * Computes the next multi-mode `active` list for {@link LayoutOperation.Open}.\n * If `pivotId` is present and found, truncates the deck after that id.\n * Applies each subject with {@link openEntry}.\n * If the pivot is missing, appends onto the full `active` list.\n *\n * When all subjects are already present in the active deck, the deck is returned\n * unchanged so that pivot truncation does not discard open planks when navigating\n * to something that is already visible.\n */\nexport const openSubjectsOnActiveDeck = (\n active: readonly string[],\n subject: readonly string[],\n options?: OpenSubjectsOnActiveDeckOptions,\n): string[] => {\n if (subject.length > 0 && subject.every((id) => active.includes(id))) {\n return [...active];\n }\n\n const { pivotId, key } = options ?? {};\n const pivotIndex = pivotId ? active.findIndex((id) => id === pivotId) : -1;\n const baseDeck = pivotIndex !== -1 ? active.slice(0, pivotIndex + 1) : [...active];\n return subject.reduce((acc, entryId) => openEntry(acc, entryId, { key }), baseDeck);\n};\n\nexport const closeEntry = (deck: string[], entryId: string): string[] => {\n return produce(deck, (draft) => {\n const index = draft.findIndex((id) => id === entryId);\n if (index !== -1) {\n draft.splice(index, 1);\n }\n });\n};\n\nexport const incrementPlank = (deck: string[], adjustment: DeckAction.Adjustment): string[] => {\n return produce(deck, (draft) => {\n const index = draft.findIndex((id) => id === adjustment.id);\n if (\n index === -1 ||\n (adjustment.type === 'increment-start' && index === 0) ||\n (adjustment.type === 'increment-end' && index === draft.length - 1)\n ) {\n return;\n }\n\n if (adjustment.type === 'increment-start') {\n // Swap the current item with the previous item.\n [draft[index - 1], draft[index]] = [draft[index], draft[index - 1]];\n } else if (adjustment.type === 'increment-end') {\n // Swap the current item with the next item.\n [draft[index], draft[index + 1]] = [draft[index + 1], draft[index]];\n }\n });\n};\n"],
5
+ "mappings": ";AAIA,SAASA,eAAe;AAYjB,IAAMC,YAAY,CAACC,MAAyBC,SAAiBC,YAAAA;AAClE,SAAOJ,QAAQ;OAAIE;KAAO,CAACG,UAAAA;AACzB,QAAIA,MAAMC,KAAK,CAACC,OAAOA,OAAOJ,OAAAA,GAAU;AACtC;IACF;AAEA,UAAMK,MAAMJ,SAASI;AACrB,QAAIA,KAAK;AACP,YAAMC,QAAQJ,MAAMK,UAAU,CAACH,OAAOA,GAAGI,MAAM,GAAA,EAAK,CAAA,MAAOH,GAAAA;AAC3D,UAAIC,UAAU,IAAI;AAChBJ,cAAMO,OAAOH,OAAO,GAAGN,OAAAA;AACvB;MACF;IACF;AAEAE,UAAMQ,KAAKV,OAAAA;EACb,CAAA;AACF;AAiBO,IAAMW,2BAA2B,CACtCC,QACAC,SACAZ,YAAAA;AAEA,MAAIY,QAAQC,SAAS,KAAKD,QAAQE,MAAM,CAACX,OAAOQ,OAAOI,SAASZ,EAAAA,CAAAA,GAAM;AACpE,WAAO;SAAIQ;;EACb;AAEA,QAAM,EAAEK,SAASZ,IAAG,IAAKJ,WAAW,CAAC;AACrC,QAAMiB,aAAaD,UAAUL,OAAOL,UAAU,CAACH,OAAOA,OAAOa,OAAAA,IAAW;AACxE,QAAME,WAAWD,eAAe,KAAKN,OAAOQ,MAAM,GAAGF,aAAa,CAAA,IAAK;OAAIN;;AAC3E,SAAOC,QAAQQ,OAAO,CAACC,KAAKtB,YAAYF,UAAUwB,KAAKtB,SAAS;IAAEK;EAAI,CAAA,GAAIc,QAAAA;AAC5E;AAEO,IAAMI,aAAa,CAACxB,MAAgBC,YAAAA;AACzC,SAAOH,QAAQE,MAAM,CAACG,UAAAA;AACpB,UAAMI,QAAQJ,MAAMK,UAAU,CAACH,OAAOA,OAAOJ,OAAAA;AAC7C,QAAIM,UAAU,IAAI;AAChBJ,YAAMO,OAAOH,OAAO,CAAA;IACtB;EACF,CAAA;AACF;AAEO,IAAMkB,iBAAiB,CAACzB,MAAgB0B,eAAAA;AAC7C,SAAO5B,QAAQE,MAAM,CAACG,UAAAA;AACpB,UAAMI,QAAQJ,MAAMK,UAAU,CAACH,OAAOA,OAAOqB,WAAWrB,EAAE;AAC1D,QACEE,UAAU,MACTmB,WAAWC,SAAS,qBAAqBpB,UAAU,KACnDmB,WAAWC,SAAS,mBAAmBpB,UAAUJ,MAAMY,SAAS,GACjE;AACA;IACF;AAEA,QAAIW,WAAWC,SAAS,mBAAmB;AAEzC,OAACxB,MAAMI,QAAQ,CAAA,GAAIJ,MAAMI,KAAAA,CAAM,IAAI;QAACJ,MAAMI,KAAAA;QAAQJ,MAAMI,QAAQ,CAAA;;IAClE,WAAWmB,WAAWC,SAAS,iBAAiB;AAE9C,OAACxB,MAAMI,KAAAA,GAAQJ,MAAMI,QAAQ,CAAA,CAAE,IAAI;QAACJ,MAAMI,QAAQ,CAAA;QAAIJ,MAAMI,KAAAA;;IAC9D;EACF,CAAA;AACF;",
6
+ "names": ["produce", "openEntry", "deck", "entryId", "options", "draft", "find", "id", "key", "index", "findIndex", "split", "splice", "push", "openSubjectsOnActiveDeck", "active", "subject", "length", "every", "includes", "pivotId", "pivotIndex", "baseDeck", "slice", "reduce", "acc", "closeEntry", "incrementPlank", "adjustment", "type"]
7
+ }
@@ -0,0 +1,44 @@
1
+ import {
2
+ closeEntry
3
+ } from "./chunk-ZYYOSX5I.mjs";
4
+ import {
5
+ updateActiveDeck
6
+ } from "./chunk-GLB73Q6U.mjs";
7
+ import {
8
+ DeckCapabilities_exports
9
+ } from "./chunk-64ODQD6S.mjs";
10
+ import {
11
+ computeActiveUpdates
12
+ } from "./chunk-GBIGQKYW.mjs";
13
+ import "./chunk-J5LGTIGS.mjs";
14
+
15
+ // src/operations/close.ts
16
+ import * as Effect from "effect/Effect";
17
+ import { Capabilities, Capability } from "@dxos/app-framework";
18
+ import { LayoutOperation } from "@dxos/app-toolkit";
19
+ import { Operation } from "@dxos/compute";
20
+ import { AttentionCapabilities } from "@dxos/plugin-attention";
21
+ var handler = LayoutOperation.Close.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
22
+ const deck = yield* DeckCapabilities_exports.getDeck();
23
+ const attention = yield* Capability.get(AttentionCapabilities.Attention);
24
+ const active = deck.solo ? [
25
+ deck.solo
26
+ ] : deck.active;
27
+ const next = input.subject.reduce((acc, id) => closeEntry(acc, id), active);
28
+ const { deckUpdates, toAttend } = computeActiveUpdates({
29
+ next,
30
+ deck,
31
+ attention
32
+ });
33
+ yield* Capabilities.updateAtomValue(DeckCapabilities_exports.State, (state) => updateActiveDeck(state, deckUpdates));
34
+ if (toAttend) {
35
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
36
+ subject: toAttend
37
+ });
38
+ }
39
+ })));
40
+ var close_default = handler;
41
+ export {
42
+ close_default as default
43
+ };
44
+ //# sourceMappingURL=close-DG5IVQCE.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/operations/close.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 { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\n\nimport { closeEntry } from '../layout';\nimport { DeckCapabilities } from '../types';\nimport { computeActiveUpdates } from '../util';\nimport { updateActiveDeck } from './helpers';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Close> = LayoutOperation.Close.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n\n const active = deck.solo ? [deck.solo] : deck.active;\n const next = input.subject.reduce((acc, id) => closeEntry(acc, id), active);\n const { deckUpdates, toAttend } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));\n\n if (toAttend) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: toAttend });\n }\n }),\n ),\n);\n\nexport default handler;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,6BAA6B;AAOtC,IAAMC,UAA+DC,gBAAgBC,MAAMC,KACzFC,UAAUC,YACDC,kBAAW,WAAWC,OAAK;AAChC,QAAMC,OAAO,OAAOC,yBAAiBC,QAAO;AAC5C,QAAMC,YAAY,OAAOC,WAAWC,IAAIC,sBAAsBC,SAAS;AAEvE,QAAMC,SAASR,KAAKS,OAAO;IAACT,KAAKS;MAAQT,KAAKQ;AAC9C,QAAME,OAAOX,MAAMY,QAAQC,OAAO,CAACC,KAAKC,OAAOC,WAAWF,KAAKC,EAAAA,GAAKN,MAAAA;AACpE,QAAM,EAAEQ,aAAaC,SAAQ,IAAKC,qBAAqB;IAAER;IAAMV;IAAMG;EAAU,CAAA;AAC/E,SAAOgB,aAAaC,gBAAgBnB,yBAAiBoB,OAAO,CAACC,UAAUC,iBAAiBD,OAAON,WAAAA,CAAAA;AAE/F,MAAIC,UAAU;AACZ,WAAOrB,UAAU4B,SAAS/B,gBAAgBgC,gBAAgB;MAAEd,SAASM;IAAS,CAAA;EAChF;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,gBAAezB;",
6
+ "names": ["Effect", "Capabilities", "Capability", "LayoutOperation", "Operation", "AttentionCapabilities", "handler", "LayoutOperation", "Close", "pipe", "Operation", "withHandler", "fnUntraced", "input", "deck", "DeckCapabilities", "getDeck", "attention", "Capability", "get", "AttentionCapabilities", "Attention", "active", "solo", "next", "subject", "reduce", "acc", "id", "closeEntry", "deckUpdates", "toAttend", "computeActiveUpdates", "Capabilities", "updateAtomValue", "State", "state", "updateActiveDeck", "schedule", "ScrollIntoView"]
7
+ }
@@ -0,0 +1,126 @@
1
+ import "../chunk-J5LGTIGS.mjs";
2
+
3
+ // src/components/index.ts
4
+ import { lazy } from "react";
5
+
6
+ // src/components/Matrix/Matrix.tsx
7
+ import { useFocusFinders } from "@fluentui/react-tabster";
8
+ import { createContext } from "@radix-ui/react-context";
9
+ import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from "react";
10
+ import { ScrollArea } from "@dxos/react-ui";
11
+ import { useAttended } from "@dxos/react-ui-attention";
12
+ import { Mosaic } from "@dxos/react-ui-mosaic";
13
+ import { composable, composableProps } from "@dxos/ui-theme";
14
+ var MATRIX_NAME = "Matrix";
15
+ var [MatrixProvider, useMatrixContext] = createContext(MATRIX_NAME);
16
+ var MATRIX_ROOT_NAME = "Matrix.Root";
17
+ var MatrixRoot = /* @__PURE__ */ forwardRef(({ children, items = [], Tile, current, onCurrentChange }, forwardedRef) => {
18
+ const viewportRef = useRef(null);
19
+ const registerViewport = useCallback((element) => {
20
+ viewportRef.current = element;
21
+ }, []);
22
+ const { findFirstFocusable } = useFocusFinders();
23
+ const findFirstFocusableRef = useRef(findFirstFocusable);
24
+ findFirstFocusableRef.current = findFirstFocusable;
25
+ const attended = useAttended();
26
+ const itemIds = useRef(/* @__PURE__ */ new Set());
27
+ useEffect(() => {
28
+ itemIds.current = new Set(items.map((item) => item.id));
29
+ }, [
30
+ items
31
+ ]);
32
+ useEffect(() => {
33
+ const matchedId = attended.find((id) => itemIds.current.has(id));
34
+ if (matchedId !== current) {
35
+ onCurrentChange?.(matchedId);
36
+ }
37
+ }, [
38
+ attended,
39
+ current,
40
+ onCurrentChange
41
+ ]);
42
+ useImperativeHandle(forwardedRef, () => ({
43
+ scrollTo: (id) => {
44
+ const viewport = viewportRef.current;
45
+ if (!viewport) {
46
+ return;
47
+ }
48
+ const tile = viewport.querySelector(`[data-object-id="${CSS.escape(id)}"]`);
49
+ if (!tile) {
50
+ return;
51
+ }
52
+ const focusable = findFirstFocusableRef.current(tile);
53
+ (focusable ?? tile).focus({
54
+ preventScroll: true
55
+ });
56
+ const tileRect = tile.getBoundingClientRect();
57
+ const viewportRect = viewport.getBoundingClientRect();
58
+ const offset = tileRect.left - viewportRect.left + viewport.scrollLeft;
59
+ if (Math.abs(offset - viewport.scrollLeft) > 1) {
60
+ viewport.scrollTo({
61
+ left: offset,
62
+ behavior: "smooth"
63
+ });
64
+ }
65
+ }
66
+ }));
67
+ return /* @__PURE__ */ React.createElement(MatrixProvider, {
68
+ items,
69
+ Tile,
70
+ current,
71
+ onCurrentChange,
72
+ registerViewport
73
+ }, children);
74
+ });
75
+ MatrixRoot.displayName = MATRIX_ROOT_NAME;
76
+ var MATRIX_CONTENT_NAME = "Matrix.Content";
77
+ var MatrixContent = composable(({ children, ...props }, forwardedRef) => {
78
+ const { className, ...rest } = composableProps(props);
79
+ return /* @__PURE__ */ React.createElement(Mosaic.Container, {
80
+ ref: forwardedRef,
81
+ classNames: className,
82
+ orientation: "horizontal",
83
+ ...rest
84
+ }, children);
85
+ });
86
+ MatrixContent.displayName = MATRIX_CONTENT_NAME;
87
+ var MATRIX_VIEWPORT_NAME = "Matrix.Viewport";
88
+ var getId = (item) => item.id;
89
+ var MatrixViewport = composable(({ ...props }, forwardedRef) => {
90
+ const { items, Tile, registerViewport } = useMatrixContext(MATRIX_VIEWPORT_NAME);
91
+ const viewportRef = useCallback((element) => {
92
+ registerViewport(element);
93
+ }, [
94
+ registerViewport
95
+ ]);
96
+ return /* @__PURE__ */ React.createElement(ScrollArea.Root, {
97
+ orientation: "horizontal",
98
+ padding: true,
99
+ snap: true,
100
+ ...composableProps(props),
101
+ ref: forwardedRef
102
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
103
+ ref: viewportRef
104
+ }, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
105
+ orientation: "horizontal",
106
+ classNames: "snap-x snap-mandatory gap-2",
107
+ getId,
108
+ items,
109
+ Tile,
110
+ draggable: false
111
+ })));
112
+ });
113
+ MatrixViewport.displayName = MATRIX_VIEWPORT_NAME;
114
+ var Matrix = {
115
+ Root: MatrixRoot,
116
+ Content: MatrixContent,
117
+ Viewport: MatrixViewport
118
+ };
119
+
120
+ // src/components/index.ts
121
+ var DeckSettings = lazy(() => import("../DeckSettings-W5I57OXM.mjs"));
122
+ export {
123
+ DeckSettings,
124
+ Matrix
125
+ };
126
+ //# sourceMappingURL=index.mjs.map