@dxos/plugin-deck 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5

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 (511) hide show
  1. package/dist/lib/browser/add-toast-3V7TYC2M.mjs +24 -0
  2. package/dist/lib/browser/add-toast-3V7TYC2M.mjs.map +7 -0
  3. package/dist/lib/browser/adjust-ZMPN7P7J.mjs +96 -0
  4. package/dist/lib/browser/adjust-ZMPN7P7J.mjs.map +7 -0
  5. package/dist/lib/browser/change-companion-F7GCREGM.mjs +34 -0
  6. package/dist/lib/browser/change-companion-F7GCREGM.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-BRZAVPMC.mjs +48 -0
  8. package/dist/lib/browser/chunk-BRZAVPMC.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-DF2VZ6W3.mjs +69 -0
  10. package/dist/lib/browser/chunk-DF2VZ6W3.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-FUWSZ6IC.mjs +88 -0
  12. package/dist/lib/browser/chunk-FUWSZ6IC.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-GN52IRQ7.mjs +216 -0
  14. package/dist/lib/browser/chunk-GN52IRQ7.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  16. package/dist/lib/browser/chunk-KUTDCWZF.mjs +30 -0
  17. package/dist/lib/browser/chunk-KUTDCWZF.mjs.map +7 -0
  18. package/dist/lib/browser/close-N2F26CVG.mjs +44 -0
  19. package/dist/lib/browser/close-N2F26CVG.mjs.map +7 -0
  20. package/dist/lib/browser/index.mjs +164 -131
  21. package/dist/lib/browser/index.mjs.map +4 -4
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/open-VWO7VOOU.mjs +150 -0
  24. package/dist/lib/browser/open-VWO7VOOU.mjs.map +7 -0
  25. package/dist/lib/browser/operations/index.mjs +13 -0
  26. package/dist/lib/browser/operations/index.mjs.map +7 -0
  27. package/dist/lib/browser/revert-workspace-LGKZZKCI.mjs +21 -0
  28. package/dist/lib/browser/revert-workspace-LGKZZKCI.mjs.map +7 -0
  29. package/dist/lib/browser/scroll-into-view-TSVSNKIH.mjs +21 -0
  30. package/dist/lib/browser/scroll-into-view-TSVSNKIH.mjs.map +7 -0
  31. package/dist/lib/browser/set-N2LGA2BY.mjs +37 -0
  32. package/dist/lib/browser/set-N2LGA2BY.mjs.map +7 -0
  33. package/dist/lib/browser/set-layout-mode-TONTQO6G.mjs +90 -0
  34. package/dist/lib/browser/set-layout-mode-TONTQO6G.mjs.map +7 -0
  35. package/dist/lib/browser/show-undo-IFXNEIQY.mjs +59 -0
  36. package/dist/lib/browser/show-undo-IFXNEIQY.mjs.map +7 -0
  37. package/dist/lib/browser/switch-workspace-ZJDC5SSR.mjs +68 -0
  38. package/dist/lib/browser/switch-workspace-ZJDC5SSR.mjs.map +7 -0
  39. package/dist/lib/browser/types/index.mjs +32 -0
  40. package/dist/lib/browser/update-complementary-ELUOK3GD.mjs +28 -0
  41. package/dist/lib/browser/update-complementary-ELUOK3GD.mjs.map +7 -0
  42. package/dist/lib/browser/update-dialog-LMGLOTWX.mjs +29 -0
  43. package/dist/lib/browser/update-dialog-LMGLOTWX.mjs.map +7 -0
  44. package/dist/lib/browser/update-plank-size-WQAPELII.mjs +28 -0
  45. package/dist/lib/browser/update-plank-size-WQAPELII.mjs.map +7 -0
  46. package/dist/lib/browser/update-popover-P6YO6FWJ.mjs +33 -0
  47. package/dist/lib/browser/update-popover-P6YO6FWJ.mjs.map +7 -0
  48. package/dist/lib/browser/update-sidebar-NGWS6IDJ.mjs +25 -0
  49. package/dist/lib/browser/update-sidebar-NGWS6IDJ.mjs.map +7 -0
  50. package/dist/lib/node-esm/add-toast-G4OQEGOS.mjs +25 -0
  51. package/dist/lib/node-esm/add-toast-G4OQEGOS.mjs.map +7 -0
  52. package/dist/lib/node-esm/adjust-KSNI7C3B.mjs +97 -0
  53. package/dist/lib/node-esm/adjust-KSNI7C3B.mjs.map +7 -0
  54. package/dist/lib/node-esm/change-companion-LCJPT6AX.mjs +35 -0
  55. package/dist/lib/node-esm/change-companion-LCJPT6AX.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-4ED7B7OZ.mjs +217 -0
  57. package/dist/lib/node-esm/chunk-4ED7B7OZ.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-7KL65RLL.mjs +89 -0
  59. package/dist/lib/node-esm/chunk-7KL65RLL.mjs.map +7 -0
  60. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  61. package/dist/lib/node-esm/chunk-IRWCUYJY.mjs +71 -0
  62. package/dist/lib/node-esm/chunk-IRWCUYJY.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-MB4SDDVY.mjs +50 -0
  64. package/dist/lib/node-esm/chunk-MB4SDDVY.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs +32 -0
  66. package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs.map +7 -0
  67. package/dist/lib/node-esm/close-YHIBVE2S.mjs +45 -0
  68. package/dist/lib/node-esm/close-YHIBVE2S.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +164 -131
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/open-353DYMMN.mjs +151 -0
  73. package/dist/lib/node-esm/open-353DYMMN.mjs.map +7 -0
  74. package/dist/lib/node-esm/operations/index.mjs +14 -0
  75. package/dist/lib/node-esm/operations/index.mjs.map +7 -0
  76. package/dist/lib/node-esm/revert-workspace-OS5R3PFJ.mjs +22 -0
  77. package/dist/lib/node-esm/revert-workspace-OS5R3PFJ.mjs.map +7 -0
  78. package/dist/lib/node-esm/scroll-into-view-LC2SVKCW.mjs +22 -0
  79. package/dist/lib/node-esm/scroll-into-view-LC2SVKCW.mjs.map +7 -0
  80. package/dist/lib/node-esm/set-3EZ7LJFU.mjs +38 -0
  81. package/dist/lib/node-esm/set-3EZ7LJFU.mjs.map +7 -0
  82. package/dist/lib/node-esm/set-layout-mode-3YBHGEK6.mjs +91 -0
  83. package/dist/lib/node-esm/set-layout-mode-3YBHGEK6.mjs.map +7 -0
  84. package/dist/lib/node-esm/show-undo-RAHLRPUU.mjs +60 -0
  85. package/dist/lib/node-esm/show-undo-RAHLRPUU.mjs.map +7 -0
  86. package/dist/lib/node-esm/switch-workspace-S6CXDPXZ.mjs +69 -0
  87. package/dist/lib/node-esm/switch-workspace-S6CXDPXZ.mjs.map +7 -0
  88. package/dist/lib/node-esm/{types.mjs → types/index.mjs} +13 -15
  89. package/dist/lib/node-esm/update-complementary-V5Y2RMYL.mjs +29 -0
  90. package/dist/lib/node-esm/update-complementary-V5Y2RMYL.mjs.map +7 -0
  91. package/dist/lib/node-esm/update-dialog-IMTCLAWR.mjs +30 -0
  92. package/dist/lib/node-esm/update-dialog-IMTCLAWR.mjs.map +7 -0
  93. package/dist/lib/node-esm/update-plank-size-I3DKCPHZ.mjs +29 -0
  94. package/dist/lib/node-esm/update-plank-size-I3DKCPHZ.mjs.map +7 -0
  95. package/dist/lib/node-esm/update-popover-7JX3KWYL.mjs +34 -0
  96. package/dist/lib/node-esm/update-popover-7JX3KWYL.mjs.map +7 -0
  97. package/dist/lib/node-esm/update-sidebar-B5DCSREP.mjs +26 -0
  98. package/dist/lib/node-esm/update-sidebar-B5DCSREP.mjs.map +7 -0
  99. package/dist/types/src/DeckPlugin.d.ts +2 -1
  100. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  101. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  102. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  103. package/dist/types/src/capabilities/check-app-scheme.d.ts +17 -2
  104. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/index.d.ts +196 -12
  106. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  108. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/react-root.d.ts +4 -2
  110. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  112. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  113. package/dist/types/src/capabilities/settings.d.ts +5 -2
  114. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/state.d.ts +134 -44
  116. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/tools.d.ts +4 -3
  118. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/url-handler.d.ts +3 -2
  120. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  121. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +4 -4
  122. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  123. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +71 -0
  124. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -0
  125. package/dist/types/src/components/DeckSettings/index.d.ts +1 -1
  126. package/dist/types/src/components/DeckSettings/index.d.ts.map +1 -1
  127. package/dist/types/src/components/Matrix/Matrix.d.ts +41 -0
  128. package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -0
  129. package/dist/types/src/components/Matrix/Matrix.stories.d.ts +17 -0
  130. package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -0
  131. package/dist/types/src/components/Matrix/index.d.ts +3 -0
  132. package/dist/types/src/components/Matrix/index.d.ts.map +1 -0
  133. package/dist/types/src/components/index.d.ts +3 -2
  134. package/dist/types/src/components/index.d.ts.map +1 -1
  135. package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -0
  136. package/dist/types/src/containers/Deck/Deck.d.ts +25 -0
  137. package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -0
  138. package/dist/types/src/containers/Deck/Deck.stories.d.ts +71 -0
  139. package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -0
  140. package/dist/types/src/containers/Deck/DeckContent.d.ts +7 -0
  141. package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -0
  142. package/dist/types/src/containers/Deck/DeckRoot.d.ts +42 -0
  143. package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -0
  144. package/dist/types/src/containers/Deck/DeckViewport.d.ts +19 -0
  145. package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -0
  146. package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -0
  147. package/dist/types/src/containers/Deck/index.d.ts +2 -0
  148. package/dist/types/src/containers/Deck/index.d.ts.map +1 -0
  149. package/dist/types/src/containers/DeckLayout/ActiveNode.d.ts.map +1 -0
  150. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts +5 -0
  151. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -0
  152. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +73 -0
  153. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  154. package/dist/types/src/containers/DeckLayout/Dialog.d.ts.map +1 -0
  155. package/dist/types/src/containers/DeckLayout/Fallback.d.ts +2 -0
  156. package/dist/types/src/containers/DeckLayout/Fallback.d.ts.map +1 -0
  157. package/dist/types/src/containers/DeckLayout/Popover.d.ts +5 -0
  158. package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -0
  159. package/dist/types/src/containers/DeckLayout/Toast.d.ts +10 -0
  160. package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -0
  161. package/dist/types/src/containers/DeckLayout/constants.d.ts.map +1 -0
  162. package/dist/types/src/containers/DeckLayout/index.d.ts +4 -0
  163. package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -0
  164. package/dist/types/src/containers/Plank/Plank.d.ts +17 -0
  165. package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -0
  166. package/dist/types/src/containers/Plank/Plank.stories.d.ts +71 -0
  167. package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -0
  168. package/dist/types/src/containers/Plank/PlankComponent.d.ts +17 -0
  169. package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +1 -0
  170. package/dist/types/src/containers/Plank/PlankContent.d.ts +10 -0
  171. package/dist/types/src/containers/Plank/PlankContent.d.ts.map +1 -0
  172. package/dist/types/src/{components → containers}/Plank/PlankControls.d.ts +5 -6
  173. package/dist/types/src/containers/Plank/PlankControls.d.ts.map +1 -0
  174. package/dist/types/src/containers/Plank/PlankError.d.ts +15 -0
  175. package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -0
  176. package/dist/types/src/{components → containers}/Plank/PlankHeading.d.ts +5 -4
  177. package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +1 -0
  178. package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts.map +1 -1
  179. package/dist/types/src/containers/Plank/PlankRoot.d.ts +37 -0
  180. package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -0
  181. package/dist/types/src/containers/Plank/index.d.ts +4 -0
  182. package/dist/types/src/containers/Plank/index.d.ts.map +1 -0
  183. package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -0
  184. package/dist/types/src/containers/Sidebar/Sidebar.d.ts.map +1 -0
  185. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -0
  186. package/dist/types/src/{components → containers}/Sidebar/index.d.ts.map +1 -1
  187. package/dist/types/src/containers/index.d.ts +6 -0
  188. package/dist/types/src/containers/index.d.ts.map +1 -0
  189. package/dist/types/src/hooks/index.d.ts +2 -0
  190. package/dist/types/src/hooks/index.d.ts.map +1 -1
  191. package/dist/types/src/hooks/useDeckCompanions.d.ts +3 -4
  192. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  193. package/dist/types/src/hooks/useDeckState.d.ts +17 -0
  194. package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
  195. package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
  196. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  198. package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
  199. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  200. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  201. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  202. package/dist/types/src/index.d.ts +1 -2
  203. package/dist/types/src/index.d.ts.map +1 -1
  204. package/dist/types/src/layout.d.ts +20 -9
  205. package/dist/types/src/layout.d.ts.map +1 -1
  206. package/dist/types/src/layout.test.d.ts +2 -0
  207. package/dist/types/src/layout.test.d.ts.map +1 -0
  208. package/dist/types/src/meta.d.ts +2 -3
  209. package/dist/types/src/meta.d.ts.map +1 -1
  210. package/dist/types/src/operations/add-toast.d.ts +5 -0
  211. package/dist/types/src/operations/add-toast.d.ts.map +1 -0
  212. package/dist/types/src/operations/adjust.d.ts +5 -0
  213. package/dist/types/src/operations/adjust.d.ts.map +1 -0
  214. package/dist/types/src/operations/change-companion.d.ts +5 -0
  215. package/dist/types/src/operations/change-companion.d.ts.map +1 -0
  216. package/dist/types/src/operations/close.d.ts +5 -0
  217. package/dist/types/src/operations/close.d.ts.map +1 -0
  218. package/dist/types/src/operations/definitions.d.ts +18 -0
  219. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  220. package/dist/types/src/operations/helpers.d.ts +3 -0
  221. package/dist/types/src/operations/helpers.d.ts.map +1 -0
  222. package/dist/types/src/operations/index.d.ts +4 -0
  223. package/dist/types/src/operations/index.d.ts.map +1 -0
  224. package/dist/types/src/operations/open.d.ts +5 -0
  225. package/dist/types/src/operations/open.d.ts.map +1 -0
  226. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  227. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  228. package/dist/types/src/operations/scroll-into-view.d.ts +5 -0
  229. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -0
  230. package/dist/types/src/operations/set-layout-mode.d.ts +9 -0
  231. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  232. package/dist/types/src/operations/set.d.ts +5 -0
  233. package/dist/types/src/operations/set.d.ts.map +1 -0
  234. package/dist/types/src/operations/show-undo.d.ts +5 -0
  235. package/dist/types/src/operations/show-undo.d.ts.map +1 -0
  236. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  237. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  238. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  239. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  240. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  241. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  242. package/dist/types/src/operations/update-plank-size.d.ts +5 -0
  243. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -0
  244. package/dist/types/src/operations/update-popover.d.ts +5 -0
  245. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  246. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  247. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  248. package/dist/types/src/translations.d.ts +52 -52
  249. package/dist/types/src/translations.d.ts.map +1 -1
  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/{capabilities → types}/capabilities.d.ts +103 -96
  253. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  254. package/dist/types/src/types/events.d.ts +7 -0
  255. package/dist/types/src/types/events.d.ts.map +1 -0
  256. package/dist/types/src/types/index.d.ts +5 -0
  257. package/dist/types/src/types/index.d.ts.map +1 -0
  258. package/dist/types/src/{types.d.ts → types/schema.d.ts} +69 -58
  259. package/dist/types/src/types/schema.d.ts.map +1 -0
  260. package/dist/types/src/util/index.d.ts +2 -1
  261. package/dist/types/src/util/index.d.ts.map +1 -1
  262. package/dist/types/src/util/layoutAppliesTopbar.d.ts +1 -1
  263. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  264. package/dist/types/src/util/plank-url-params.d.ts +14 -0
  265. package/dist/types/src/util/plank-url-params.d.ts.map +1 -0
  266. package/dist/types/src/util/plank-url-params.test.d.ts +2 -0
  267. package/dist/types/src/util/plank-url-params.test.d.ts.map +1 -0
  268. package/dist/types/src/util/sanitize-persisted-state.d.ts +19 -0
  269. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -0
  270. package/dist/types/src/util/sanitize-persisted-state.test.d.ts +2 -0
  271. package/dist/types/src/util/sanitize-persisted-state.test.d.ts.map +1 -0
  272. package/dist/types/src/util/set-active.d.ts +19 -4
  273. package/dist/types/src/util/set-active.d.ts.map +1 -1
  274. package/dist/types/src/util/set-active.test.d.ts +2 -0
  275. package/dist/types/src/util/set-active.test.d.ts.map +1 -0
  276. package/dist/types/tsconfig.tsbuildinfo +1 -1
  277. package/package.json +91 -49
  278. package/src/DeckPlugin.ts +43 -63
  279. package/src/capabilities/app-graph-builder.ts +113 -127
  280. package/src/capabilities/check-app-scheme.ts +123 -24
  281. package/src/capabilities/index.ts +13 -13
  282. package/src/capabilities/operation-handler.ts +16 -0
  283. package/src/capabilities/react-root.tsx +37 -28
  284. package/src/capabilities/react-surface.tsx +28 -22
  285. package/src/capabilities/settings.ts +30 -19
  286. package/src/capabilities/state.ts +74 -87
  287. package/src/capabilities/tools.ts +64 -54
  288. package/src/capabilities/url-handler.ts +221 -49
  289. package/src/components/DeckSettings/DeckSettings.stories.tsx +37 -0
  290. package/src/components/DeckSettings/DeckSettings.tsx +55 -70
  291. package/src/components/DeckSettings/index.ts +2 -2
  292. package/src/components/Matrix/Matrix.stories.tsx +216 -0
  293. package/src/components/Matrix/Matrix.tsx +205 -0
  294. package/src/components/Matrix/SPEC.md +219 -0
  295. package/src/components/Matrix/index.ts +6 -0
  296. package/src/components/index.ts +6 -3
  297. package/src/containers/Deck/Banner.tsx +41 -0
  298. package/src/containers/Deck/Deck.stories.tsx +81 -0
  299. package/src/containers/Deck/Deck.tsx +21 -0
  300. package/src/containers/Deck/DeckContent.tsx +105 -0
  301. package/src/containers/Deck/DeckRoot.tsx +50 -0
  302. package/src/containers/Deck/DeckViewport.tsx +456 -0
  303. package/src/{components/DeckLayout → containers/Deck}/StatusBar.tsx +4 -4
  304. package/src/containers/Deck/index.ts +5 -0
  305. package/src/{components → containers}/DeckLayout/ActiveNode.tsx +8 -3
  306. package/src/containers/DeckLayout/DeckLayout.stories.tsx +393 -0
  307. package/src/containers/DeckLayout/DeckLayout.tsx +62 -0
  308. package/src/containers/DeckLayout/Dialog.tsx +52 -0
  309. package/src/containers/DeckLayout/Fallback.tsx +24 -0
  310. package/src/containers/DeckLayout/Popover.tsx +161 -0
  311. package/src/{components → containers}/DeckLayout/Toast.tsx +30 -5
  312. package/src/{components → containers}/DeckLayout/constants.ts +1 -0
  313. package/src/{components → containers}/DeckLayout/index.ts +3 -2
  314. package/src/containers/Plank/Plank.stories.tsx +106 -0
  315. package/src/containers/Plank/Plank.tsx +22 -0
  316. package/src/containers/Plank/PlankComponent.tsx +217 -0
  317. package/src/containers/Plank/PlankContent.tsx +45 -0
  318. package/src/{components → containers}/Plank/PlankControls.tsx +45 -38
  319. package/src/containers/Plank/PlankError.tsx +79 -0
  320. package/src/{components → containers}/Plank/PlankHeading.tsx +70 -65
  321. package/src/{components → containers}/Plank/PlankLoading.tsx +1 -1
  322. package/src/containers/Plank/PlankRoot.tsx +49 -0
  323. package/src/{components → containers}/Plank/index.ts +0 -2
  324. package/src/containers/Sidebar/ComplementarySidebar.tsx +209 -0
  325. package/src/containers/Sidebar/Sidebar.tsx +44 -0
  326. package/src/containers/Sidebar/SidebarButton.tsx +94 -0
  327. package/src/containers/index.ts +11 -0
  328. package/src/hooks/index.ts +2 -0
  329. package/src/hooks/useCompanions.ts +3 -3
  330. package/src/hooks/useDeckCompanions.ts +8 -11
  331. package/src/hooks/useDeckState.ts +73 -0
  332. package/src/hooks/useHoistStatusbar.ts +4 -5
  333. package/src/hooks/useMainSize.ts +2 -2
  334. package/src/hooks/useNodeActionExpander.ts +4 -4
  335. package/src/hooks/useSelectedCompanion.ts +32 -0
  336. package/src/index.ts +1 -2
  337. package/src/layout.test.ts +59 -0
  338. package/src/layout.ts +38 -40
  339. package/src/meta.ts +8 -5
  340. package/src/operations/add-toast.ts +24 -0
  341. package/src/operations/adjust.ts +83 -0
  342. package/src/operations/change-companion.ts +35 -0
  343. package/src/operations/close.ts +35 -0
  344. package/src/operations/definitions.ts +62 -0
  345. package/src/operations/helpers.ts +22 -0
  346. package/src/operations/index.ts +26 -0
  347. package/src/operations/open.ts +184 -0
  348. package/src/operations/revert-workspace.ts +22 -0
  349. package/src/operations/scroll-into-view.ts +24 -0
  350. package/src/operations/set-layout-mode.ts +84 -0
  351. package/src/operations/set.ts +36 -0
  352. package/src/operations/show-undo.ts +47 -0
  353. package/src/operations/switch-workspace.ts +60 -0
  354. package/src/operations/update-complementary.ts +33 -0
  355. package/src/operations/update-dialog.ts +34 -0
  356. package/src/operations/update-plank-size.ts +29 -0
  357. package/src/operations/update-popover.ts +36 -0
  358. package/src/operations/update-sidebar.ts +28 -0
  359. package/src/translations.ts +52 -52
  360. package/src/types/Settings.ts +17 -0
  361. package/src/types/capabilities.ts +35 -0
  362. package/src/types/events.ts +21 -0
  363. package/src/types/index.ts +8 -0
  364. package/src/{types.ts → types/schema.ts} +52 -52
  365. package/src/util/index.ts +2 -1
  366. package/src/util/layoutAppliesTopbar.ts +2 -2
  367. package/src/util/plank-url-params.test.ts +85 -0
  368. package/src/util/plank-url-params.ts +36 -0
  369. package/src/util/sanitize-persisted-state.test.ts +79 -0
  370. package/src/util/sanitize-persisted-state.ts +52 -0
  371. package/src/util/set-active.test.ts +106 -0
  372. package/src/util/set-active.ts +50 -30
  373. package/src/vite-env.d.ts +5 -0
  374. package/dist/lib/browser/app-graph-builder-JTFSDT2I.mjs +0 -152
  375. package/dist/lib/browser/app-graph-builder-JTFSDT2I.mjs.map +0 -7
  376. package/dist/lib/browser/check-app-scheme-57U62A3A.mjs +0 -32
  377. package/dist/lib/browser/check-app-scheme-57U62A3A.mjs.map +0 -7
  378. package/dist/lib/browser/chunk-7LJDT5OH.mjs +0 -127
  379. package/dist/lib/browser/chunk-7LJDT5OH.mjs.map +0 -7
  380. package/dist/lib/browser/chunk-CNTGBCMK.mjs +0 -145
  381. package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
  382. package/dist/lib/browser/chunk-M57WD3V6.mjs +0 -16
  383. package/dist/lib/browser/chunk-M57WD3V6.mjs.map +0 -7
  384. package/dist/lib/browser/chunk-QBKDUEDV.mjs +0 -1494
  385. package/dist/lib/browser/chunk-QBKDUEDV.mjs.map +0 -7
  386. package/dist/lib/browser/chunk-QO3VIMKQ.mjs +0 -128
  387. package/dist/lib/browser/chunk-QO3VIMKQ.mjs.map +0 -7
  388. package/dist/lib/browser/chunk-XL7EWOGI.mjs +0 -162
  389. package/dist/lib/browser/chunk-XL7EWOGI.mjs.map +0 -7
  390. package/dist/lib/browser/chunk-Z5KITAZW.mjs +0 -13
  391. package/dist/lib/browser/chunk-Z5KITAZW.mjs.map +0 -7
  392. package/dist/lib/browser/intent-resolver-6YMAE4SF.mjs +0 -521
  393. package/dist/lib/browser/intent-resolver-6YMAE4SF.mjs.map +0 -7
  394. package/dist/lib/browser/react-root-UVN2LMU3.mjs +0 -43
  395. package/dist/lib/browser/react-root-UVN2LMU3.mjs.map +0 -7
  396. package/dist/lib/browser/react-surface-WOLHGHMN.mjs +0 -40
  397. package/dist/lib/browser/react-surface-WOLHGHMN.mjs.map +0 -7
  398. package/dist/lib/browser/settings-L5CR5GTJ.mjs +0 -29
  399. package/dist/lib/browser/settings-L5CR5GTJ.mjs.map +0 -7
  400. package/dist/lib/browser/state-ZTYWMORZ.mjs +0 -10
  401. package/dist/lib/browser/tools-2YYFHQAS.mjs +0 -88
  402. package/dist/lib/browser/tools-2YYFHQAS.mjs.map +0 -7
  403. package/dist/lib/browser/types.mjs +0 -34
  404. package/dist/lib/browser/url-handler-KZW7GBA2.mjs +0 -70
  405. package/dist/lib/browser/url-handler-KZW7GBA2.mjs.map +0 -7
  406. package/dist/lib/node-esm/app-graph-builder-YCSX45KJ.mjs +0 -153
  407. package/dist/lib/node-esm/app-graph-builder-YCSX45KJ.mjs.map +0 -7
  408. package/dist/lib/node-esm/check-app-scheme-3YZIA73T.mjs +0 -33
  409. package/dist/lib/node-esm/check-app-scheme-3YZIA73T.mjs.map +0 -7
  410. package/dist/lib/node-esm/chunk-ANLUUC3J.mjs +0 -129
  411. package/dist/lib/node-esm/chunk-ANLUUC3J.mjs.map +0 -7
  412. package/dist/lib/node-esm/chunk-F4YIQ5GG.mjs +0 -128
  413. package/dist/lib/node-esm/chunk-F4YIQ5GG.mjs.map +0 -7
  414. package/dist/lib/node-esm/chunk-HHG6H2BX.mjs +0 -15
  415. package/dist/lib/node-esm/chunk-HHG6H2BX.mjs.map +0 -7
  416. package/dist/lib/node-esm/chunk-KTPDAVNM.mjs +0 -17
  417. package/dist/lib/node-esm/chunk-KTPDAVNM.mjs.map +0 -7
  418. package/dist/lib/node-esm/chunk-NMSUKHE3.mjs +0 -1495
  419. package/dist/lib/node-esm/chunk-NMSUKHE3.mjs.map +0 -7
  420. package/dist/lib/node-esm/chunk-QFKYT4JK.mjs +0 -163
  421. package/dist/lib/node-esm/chunk-QFKYT4JK.mjs.map +0 -7
  422. package/dist/lib/node-esm/chunk-UJGQAMF7.mjs +0 -147
  423. package/dist/lib/node-esm/chunk-UJGQAMF7.mjs.map +0 -7
  424. package/dist/lib/node-esm/intent-resolver-URTWBGD7.mjs +0 -522
  425. package/dist/lib/node-esm/intent-resolver-URTWBGD7.mjs.map +0 -7
  426. package/dist/lib/node-esm/react-root-GFX4GOJT.mjs +0 -44
  427. package/dist/lib/node-esm/react-root-GFX4GOJT.mjs.map +0 -7
  428. package/dist/lib/node-esm/react-surface-F6L5PLWK.mjs +0 -41
  429. package/dist/lib/node-esm/react-surface-F6L5PLWK.mjs.map +0 -7
  430. package/dist/lib/node-esm/settings-WE3TBMOC.mjs +0 -30
  431. package/dist/lib/node-esm/settings-WE3TBMOC.mjs.map +0 -7
  432. package/dist/lib/node-esm/state-DUK6WFDX.mjs +0 -11
  433. package/dist/lib/node-esm/tools-HH6NN7HB.mjs +0 -89
  434. package/dist/lib/node-esm/tools-HH6NN7HB.mjs.map +0 -7
  435. package/dist/lib/node-esm/url-handler-774BWWKI.mjs +0 -71
  436. package/dist/lib/node-esm/url-handler-774BWWKI.mjs.map +0 -7
  437. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  438. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  439. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  440. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +0 -1
  441. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +0 -1
  442. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts +0 -3
  443. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +0 -1
  444. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +0 -6
  445. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +0 -1
  446. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +0 -1
  447. package/dist/types/src/components/DeckLayout/Fallback.d.ts +0 -3
  448. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +0 -1
  449. package/dist/types/src/components/DeckLayout/Popover.d.ts +0 -5
  450. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +0 -1
  451. package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +0 -1
  452. package/dist/types/src/components/DeckLayout/Toast.d.ts +0 -5
  453. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +0 -1
  454. package/dist/types/src/components/DeckLayout/Topbar.d.ts +0 -3
  455. package/dist/types/src/components/DeckLayout/Topbar.d.ts.map +0 -1
  456. package/dist/types/src/components/DeckLayout/constants.d.ts.map +0 -1
  457. package/dist/types/src/components/DeckLayout/index.d.ts +0 -4
  458. package/dist/types/src/components/DeckLayout/index.d.ts.map +0 -1
  459. package/dist/types/src/components/Plank/Plank.d.ts +0 -27
  460. package/dist/types/src/components/Plank/Plank.d.ts.map +0 -1
  461. package/dist/types/src/components/Plank/Plank.stories.d.ts +0 -8
  462. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +0 -1
  463. package/dist/types/src/components/Plank/PlankControls.d.ts.map +0 -1
  464. package/dist/types/src/components/Plank/PlankError.d.ts +0 -13
  465. package/dist/types/src/components/Plank/PlankError.d.ts.map +0 -1
  466. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +0 -1
  467. package/dist/types/src/components/Plank/index.d.ts +0 -6
  468. package/dist/types/src/components/Plank/index.d.ts.map +0 -1
  469. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +0 -1
  470. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +0 -1
  471. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +0 -1
  472. package/dist/types/src/components/fragments.d.ts +0 -4
  473. package/dist/types/src/components/fragments.d.ts.map +0 -1
  474. package/dist/types/src/events.d.ts +0 -4
  475. package/dist/types/src/events.d.ts.map +0 -1
  476. package/dist/types/src/types.d.ts.map +0 -1
  477. package/dist/types/src/util/overscroll.d.ts +0 -47
  478. package/dist/types/src/util/overscroll.d.ts.map +0 -1
  479. package/src/capabilities/capabilities.ts +0 -14
  480. package/src/capabilities/intent-resolver.ts +0 -468
  481. package/src/components/DeckLayout/Banner.tsx +0 -39
  482. package/src/components/DeckLayout/ContentEmpty.tsx +0 -31
  483. package/src/components/DeckLayout/DeckLayout.tsx +0 -301
  484. package/src/components/DeckLayout/Dialog.tsx +0 -36
  485. package/src/components/DeckLayout/Fallback.tsx +0 -28
  486. package/src/components/DeckLayout/Popover.tsx +0 -104
  487. package/src/components/DeckLayout/Topbar.tsx +0 -11
  488. package/src/components/Plank/Plank.stories.tsx +0 -55
  489. package/src/components/Plank/Plank.tsx +0 -266
  490. package/src/components/Plank/PlankError.tsx +0 -51
  491. package/src/components/Sidebar/ComplementarySidebar.tsx +0 -193
  492. package/src/components/Sidebar/Sidebar.tsx +0 -42
  493. package/src/components/Sidebar/SidebarButton.tsx +0 -87
  494. package/src/components/fragments.ts +0 -14
  495. package/src/events.ts +0 -11
  496. package/src/util/overscroll.ts +0 -69
  497. /package/dist/lib/browser/{state-ZTYWMORZ.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  498. /package/dist/lib/browser/{types.mjs.map → types/index.mjs.map} +0 -0
  499. /package/dist/lib/node-esm/{state-DUK6WFDX.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
  500. /package/dist/lib/node-esm/{types.mjs.map → types/index.mjs.map} +0 -0
  501. /package/dist/types/src/{components/DeckLayout → containers/Deck}/Banner.d.ts +0 -0
  502. /package/dist/types/src/{components/DeckLayout → containers/Deck}/StatusBar.d.ts +0 -0
  503. /package/dist/types/src/{components → containers}/DeckLayout/ActiveNode.d.ts +0 -0
  504. /package/dist/types/src/{components → containers}/DeckLayout/Dialog.d.ts +0 -0
  505. /package/dist/types/src/{components → containers}/DeckLayout/constants.d.ts +0 -0
  506. /package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts +0 -0
  507. /package/dist/types/src/{components → containers}/Sidebar/ComplementarySidebar.d.ts +0 -0
  508. /package/dist/types/src/{components → containers}/Sidebar/Sidebar.d.ts +0 -0
  509. /package/dist/types/src/{components → containers}/Sidebar/SidebarButton.d.ts +0 -0
  510. /package/dist/types/src/{components → containers}/Sidebar/index.d.ts +0 -0
  511. /package/src/{components → containers}/Sidebar/index.ts +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/DeckLayout/Banner.tsx", "../../../src/components/Sidebar/ComplementarySidebar.tsx", "../../../src/components/Sidebar/SidebarButton.tsx", "../../../src/components/Plank/Plank.tsx", "../../../src/components/Plank/PlankError.tsx", "../../../src/components/Plank/PlankHeading.tsx", "../../../src/components/Plank/PlankControls.tsx", "../../../src/components/fragments.ts", "../../../src/components/Plank/PlankLoading.tsx", "../../../src/components/Sidebar/Sidebar.tsx", "../../../src/components/DeckLayout/DeckLayout.tsx", "../../../src/components/DeckLayout/ActiveNode.tsx", "../../../src/components/DeckLayout/ContentEmpty.tsx", "../../../src/components/DeckLayout/Dialog.tsx", "../../../src/components/DeckLayout/Popover.tsx", "../../../src/components/DeckLayout/StatusBar.tsx", "../../../src/components/DeckLayout/Toast.tsx", "../../../src/components/DeckLayout/Topbar.tsx", "../../../src/components/DeckSettings/DeckSettings.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport { CloseSidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nexport const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'topbar' | 'sidebar' }>) => {\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <header\n className={mx(\n 'flex items-stretch relative plb-1 pis-1 pie-2',\n variant === 'topbar' &&\n 'fixed inset-inline-0 block-start-[env(safe-area-inset-top)] bs-[--rail-size] border-be border-separator',\n classNames,\n )}\n >\n {variant === 'sidebar' ? <CloseSidebarButton /> : <ToggleSidebarButton />}\n <span className='self-center grow mis-1'>{t('current app name', { ns: 'appkit' })}</span>\n {variant === 'topbar' && (\n <div role='none' className='absolute inset-0 pointer-events-none'>\n <div role='none' className='grid bs-full pointer-fine:p-1 max-is-md mli-auto pointer-events-auto'>\n <Surface role='search-input' limit={1} />\n </div>\n </div>\n )}\n <span role='none' className='grow' />\n <Surface role='header-end' limit={1} />\n <Surface role='notch-start' limit={1} />\n </header>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n Fragment,\n type MouseEvent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { LayoutAction, Surface, createIntent, useCapability, useIntentDispatcher } from '@dxos/app-framework';\nimport { Main, useTranslation, toLocalizedString, IconButton, type Label } from '@dxos/react-ui';\nimport { Tabs } from '@dxos/react-ui-tabs';\n\nimport { ToggleComplementarySidebarButton } from './SidebarButton';\nimport { DeckCapabilities } from '../../capabilities';\nimport { type DeckCompanion, getCompanionId, useDeckCompanions, useBreakpoints, useHoistStatusbar } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\nimport { PlankContentError, PlankLoading } from '../Plank';\n\nconst label = ['complementary sidebar title', { ns: DECK_PLUGIN }] satisfies Label;\n\nexport type ComplementarySidebarProps = {\n current?: string;\n};\n\nexport const ComplementarySidebar = ({ current }: ComplementarySidebarProps) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const layout = useCapability(DeckCapabilities.MutableDeckState);\n const layoutMode = getMode(layout.deck);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const companions = useDeckCompanions();\n const activeCompanion = companions.find((companion) => getCompanionId(companion.id) === current);\n const activeId = activeCompanion && getCompanionId(activeCompanion.id);\n const [internalValue, setInternalValue] = useState(activeId);\n\n useEffect(() => {\n setInternalValue(activeId);\n }, [activeId]);\n\n const handleTabClick = useCallback(\n (event: MouseEvent) => {\n const nextValue = event.currentTarget.getAttribute('data-value') as string;\n if (nextValue === activeId) {\n layout.complementarySidebarState = layout.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';\n } else {\n setInternalValue(nextValue);\n layout.complementarySidebarState = 'expanded';\n void dispatch(createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', subject: nextValue }));\n }\n },\n [layout, activeId, dispatch],\n );\n\n const data = useMemo(\n () =>\n activeCompanion && {\n id: activeCompanion.id,\n subject: activeCompanion.data,\n },\n [activeCompanion?.id, activeCompanion?.data],\n );\n\n useEffect(() => {\n if (!activeId) {\n void dispatch(\n createIntent(LayoutAction.UpdateComplementary, { part: 'complementary', options: { state: 'collapsed' } }),\n );\n }\n }, [activeId, dispatch]);\n\n return (\n <Main.ComplementarySidebar\n label={label}\n classNames={[\n topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'block-end-[--statusbar-size]',\n ]}\n >\n <Tabs.Root orientation='vertical' verticalVariant='stateless' value={internalValue} classNames='contents'>\n <div\n role='none'\n className='absolute z-[1] inset-block-0 inline-end-0 !is-[--r0-size] pbs-[env(safe-area-inset-top)] pbe-[env(safe-area-inset-bottom)] border-is border-subduedSeparator grid grid-cols-1 grid-rows-[1fr_min-content] bg-baseSurface contain-layout app-drag'\n >\n <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-[--rail-action] p-1 gap-1 !overflow-y-auto'>\n {companions.map((companion) => (\n <Tabs.Tab key={getCompanionId(companion.id)} value={getCompanionId(companion.id)} asChild>\n <IconButton\n label={toLocalizedString(companion.properties.label, t)}\n icon={companion.properties.icon}\n size={5}\n iconOnly\n tooltipSide='left'\n data-value={getCompanionId(companion.id)}\n variant={\n activeId === getCompanionId(companion.id)\n ? layout.complementarySidebarState === 'expanded'\n ? 'primary'\n : 'default'\n : 'ghost'\n }\n onClick={handleTabClick}\n />\n </Tabs.Tab>\n ))}\n </Tabs.Tablist>\n {!hoistStatusbar && (\n <div role='none' className='grid grid-cols-1 auto-rows-[--rail-item] p-1 overflow-y-auto'>\n <Surface role='status-bar--r0-footer' limit={1} />\n </div>\n )}\n <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-[--rail-action] p-1'>\n <ToggleComplementarySidebarButton />\n </div>\n </div>\n {activeId &&\n companions.map((companion) => (\n <Tabs.Tabpanel\n key={getCompanionId(companion.id)}\n value={getCompanionId(companion.id)}\n classNames='absolute data-[state=\"inactive\"]:-z-[1] inset-block-0 inline-start-0 is-[calc(100%-var(--r0-size))] lg:is-[--r1-size] grid grid-cols-1 grid-rows-[var(--rail-size)_1fr_min-content] pbs-[env(safe-area-inset-top)]'\n {...(layout.complementarySidebarState !== 'expanded' && { inert: 'true' })}\n >\n <ComplementarySidebarPanel\n companion={companion}\n activeId={activeId}\n data={data}\n hoistStatusbar={hoistStatusbar}\n />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Root>\n </Main.ComplementarySidebar>\n );\n};\n\ntype ComplementarySidebarPanelProps = {\n companion: DeckCompanion;\n activeId: string;\n data?: {\n id: string;\n subject: any;\n };\n hoistStatusbar: boolean;\n};\n\nconst ScrollArea = ({ children }: PropsWithChildren) => {\n return <div className='flex flex-col grow overflow-x-hidden overflow-y-auto scrollbar-thin'>{children}</div>;\n};\n\nconst ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }: ComplementarySidebarPanelProps) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n if (getCompanionId(companion.id) !== activeId && !data) {\n return null;\n }\n\n const Wrapper = companion.properties.fixed ? Fragment : ScrollArea;\n\n return (\n <>\n <h2 className='flex items-center pli-2 border-subduedSeparator border-be font-medium'>\n {toLocalizedString(companion.properties.label, t)}\n </h2>\n <Wrapper>\n <Surface\n role={`deck-companion--${getCompanionId(companion.id)}`}\n data={data}\n fallback={PlankContentError}\n placeholder={<PlankLoading />}\n />\n </Wrapper>\n {!hoistStatusbar && (\n <div\n role='contentinfo'\n className='flex flex-wrap justify-center items-center border-bs border-subduedSeparator pbs-1 pbe-[max(env(safe-area-inset-bottom),0.25rem)]'\n >\n <Surface role='status-bar--r1-footer' limit={1} />\n </div>\n )}\n </>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { createIntent, LayoutAction, useCapability, useIntentDispatcher } from '@dxos/app-framework';\nimport { IconButton, type IconButtonProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { useDeckCompanions, getCompanionId } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const ToggleSidebarButton = ({\n classNames,\n variant = 'ghost',\n}: ThemedClassName<Pick<IconButtonProps, 'variant'>>) => {\n const layoutContext = useCapability(DeckCapabilities.MutableDeckState);\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n variant={variant}\n iconOnly\n icon='ph--sidebar--regular'\n size={4}\n label={t('open navigation sidebar label')}\n onClick={() =>\n (layoutContext.sidebarState = layoutContext.sidebarState === 'expanded' ? 'collapsed' : 'expanded')\n }\n classNames={classNames}\n />\n );\n};\n\nexport const CloseSidebarButton = () => {\n const layoutContext = useCapability(DeckCapabilities.MutableDeckState);\n const { t } = useTranslation(DECK_PLUGIN);\n return (\n <IconButton\n variant='ghost'\n iconOnly\n icon='ph--caret-line-left--regular'\n size={4}\n label={t('close navigation sidebar label')}\n onClick={() => (layoutContext.sidebarState = 'collapsed')}\n classNames='rounded-none pli-1 dx-focus-ring-inset pie-[max(.5rem,env(safe-area-inset-left))]'\n />\n );\n};\n\nexport const ToggleComplementarySidebarButton = ({\n inR0,\n classNames,\n current,\n}: ThemedClassName<{ inR0?: boolean; current?: string }>) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const layoutContext = useCapability(DeckCapabilities.MutableDeckState);\n const { t } = useTranslation(DECK_PLUGIN);\n\n const companions = useDeckCompanions();\n const handleClick = useCallback(async () => {\n layoutContext.complementarySidebarState =\n layoutContext.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';\n const firstCompanion = companions[0];\n if (layoutContext.complementarySidebarState === 'expanded' && !current && firstCompanion) {\n await dispatch(\n createIntent(LayoutAction.UpdateComplementary, {\n part: 'complementary',\n subject: getCompanionId(firstCompanion.id),\n }),\n );\n }\n }, [layoutContext, current, companions, dispatch]);\n\n return (\n <IconButton\n iconOnly\n onClick={handleClick}\n variant='ghost'\n label={t('open complementary sidebar label')}\n classNames={['[&>svg]:-scale-x-100', classNames]}\n icon='ph--sidebar-simple--regular'\n size={inR0 ? 5 : 4}\n tooltipSide={inR0 ? 'left' : undefined}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n type KeyboardEvent,\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport {\n LayoutAction,\n Surface,\n createIntent,\n useCapability,\n useAppGraph,\n useIntentDispatcher,\n} from '@dxos/app-framework';\nimport { debounce } from '@dxos/async';\nimport { useNode, type Node } from '@dxos/plugin-graph';\nimport { ATTENDABLE_PATH_SEPARATOR, useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/react-ui-theme';\n\nimport { PlankContentError, PlankError } from './PlankError';\nimport { PlankHeading } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\nimport { DeckCapabilities } from '../../capabilities';\nimport { useMainSize, useCompanions } from '../../hooks';\nimport { parseEntryId } from '../../layout';\nimport { DeckAction, type LayoutMode, type ResolvedPart, type DeckSettingsProps } from '../../types';\n\nconst UNKNOWN_ID = 'unknown_id';\n\nexport type PlankProps = Pick<PlankComponentProps, 'layoutMode' | 'part' | 'path' | 'order' | 'active' | 'settings'> & {\n id?: string;\n companionId?: string;\n};\n\n// TODO(burdon): Factor out conditional rendering.\n// Remove this wrapper component and render the entire set of planks in the deck with conditional visibility\n// to obviate mounting and unmounting when switching between solo and companion mode?\n// NOTE(thure, in reply): Whether any surface should be rendered and hidden is a performance matter — remember that\n// article surfaces contain full experiences, so being able to unmount them will yield relatively large performance\n// benefits. I think where we anticipate users will definitely want to quickly switch between showing and hiding entire\n// articles, over the (again probably large) performance benefit that unmounting them would confer, we can mount and\n// hide them, but I think that scenario in its most unambiguous form is probably rare. You could extrapolate\n// the scenario to include all “potential” planks such as companions, which we could keep mounted and hidden, but I\n// don’t think the resulting performance would be acceptable. I think the real issue is “perceived performance” which\n// has mitigations that are in between mounting and un-mounting since both of those have tradeoffs; we may need one or more\n// “partially-mounted” experiences, like loading skeletons at the simple end, or screenshots of “sleeping” planks at\n// the advanced end.\n\n/**\n * A Plank is the main container for surfaces within a Deck.\n * It may be paired with a companion plank that enables the user to select one of multiple companion surfaces.\n */\nexport const Plank = memo(({ id = UNKNOWN_ID, companionId, ...props }: PlankProps) => {\n const { graph } = useAppGraph();\n const node = useNode(graph, id);\n const companions = useCompanions(id);\n const currentCompanion = companions.find(({ id }) => id === companionId);\n const hasCompanion = !!(companionId && currentCompanion);\n\n return (\n <PlankContainer solo={props.part === 'solo'} companion={hasCompanion}>\n <PlankComponent\n id={id}\n node={node}\n companioned={hasCompanion ? 'primary' : undefined}\n companions={hasCompanion ? [] : companions}\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-primary' } : {})}\n />\n {hasCompanion && (\n <PlankComponent\n id={companionId}\n node={currentCompanion}\n primary={node}\n companions={companions}\n companioned='companion'\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-companion' } : { order: (props.order ?? 0) + 1 })}\n />\n )}\n </PlankContainer>\n );\n});\n\nconst PlankContainer = ({ children, solo, companion }: PropsWithChildren<{ solo: boolean; companion: boolean }>) => {\n const sizeAttrs = useMainSize();\n if (!solo) {\n return children;\n }\n\n // TODO(burdon): Make resizable.\n return (\n <div\n role='none'\n className={mx('absolute inset-0 grid', companion && 'grid-cols-[1fr_1fr]', railGridHorizontal, mainIntrinsicSize)}\n {...sizeAttrs}\n >\n {children}\n </div>\n );\n};\n\ntype PlankComponentProps = {\n layoutMode: LayoutMode;\n id: string;\n part: ResolvedPart;\n path?: string[];\n order?: number;\n active?: string[];\n // TODO(burdon): Change to role?\n companioned?: 'primary' | 'companion';\n node?: Node;\n primary?: Node;\n companions?: Node[];\n settings?: DeckSettingsProps;\n};\n\nconst PlankComponent = memo(\n ({\n layoutMode,\n id,\n part,\n path,\n order,\n active,\n companioned,\n node,\n primary,\n companions,\n settings,\n }: PlankComponentProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { deck, popoverAnchorId, scrollIntoView } = useCapability(DeckCapabilities.DeckState);\n const canResize = layoutMode === 'deck';\n\n const attentionAttrs = useAttentionAttributes(primary?.id ?? id);\n const index = active ? active.findIndex((entryId) => entryId === id) : 0;\n const length = active?.length ?? 1;\n const canIncrementStart = active && index !== undefined && index > 0 && length !== undefined && length > 1;\n const canIncrementEnd = active && index !== undefined && index < length - 1 && length !== undefined;\n\n const rootElement = useRef<HTMLDivElement | null>(null);\n\n const { variant } = parseEntryId(id);\n const sizeKey = `${id.split('+')[0]}${variant ? `${ATTENDABLE_PATH_SEPARATOR}${variant}` : ''}`;\n const size = deck.plankSizing[sizeKey] as number | undefined;\n\n const handleSizeChange = useCallback(\n debounce((nextSize: number) => {\n return dispatch(createIntent(DeckAction.UpdatePlankSize, { id: sizeKey, size: nextSize }));\n }, 200),\n [dispatch, sizeKey],\n );\n\n // TODO(thure): Tabster’s focus group should handle moving focus to Main, but something is blocking it.\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.target === event.currentTarget && event.key === 'Escape') {\n rootElement.current?.closest('main')?.focus();\n }\n }, []);\n\n useLayoutEffect(() => {\n if (scrollIntoView === id) {\n // TODO(wittjosiah): When focused on page load, the focus is always visible.\n // Forcing focus to something smaller than the plank prevents large focus ring in the interim.\n const focusable = rootElement.current?.querySelector('button') || rootElement.current;\n focusable?.focus({ preventScroll: true });\n layoutMode === 'deck' && focusable?.scrollIntoView({ behavior: 'smooth', inline: 'center' });\n // Clear the scroll into view state once it has been actioned.\n void dispatch(createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: undefined }));\n }\n }, [id, scrollIntoView, layoutMode]);\n\n const isSolo = layoutMode.startsWith('solo') && part === 'solo';\n const isAttendable =\n (layoutMode.startsWith('solo') && part.startsWith('solo')) || (layoutMode === 'deck' && part === 'deck');\n\n const sizeAttrs = useMainSize();\n\n const data = useMemo(\n () =>\n node && {\n subject: node.data,\n companionTo: primary?.data,\n variant,\n path,\n popoverAnchorId,\n },\n [node, node?.data, path, popoverAnchorId, primary?.data, variant],\n );\n\n // TODO(wittjosiah): Change prop to accept a component.\n const placeholder = useMemo(() => <PlankLoading />, []);\n\n const Root = part.startsWith('solo') ? 'article' : StackItem.Root;\n const className = mx(\n 'attention-surface relative dx-focus-ring-inset-over-all density-coarse',\n isSolo && mainIntrinsicSize,\n isSolo && railGridHorizontal,\n isSolo && 'absolute inset-0',\n part.startsWith('solo') && 'grid',\n part === 'deck' && (companioned === 'companion' ? '!border-separator border-ie' : '!border-separator border-li'),\n part.startsWith('solo-') && 'row-span-2 grid-rows-subgrid min-is-0',\n part === 'solo-companion' && '!border-separator border-is',\n );\n\n return (\n <Root\n ref={rootElement}\n data-testid='deck.plank'\n tabIndex={0}\n {...(part.startsWith('solo')\n ? ({ ...sizeAttrs, className } as any)\n : {\n item: { id },\n size,\n onSizeChange: handleSizeChange,\n classNames: className,\n order,\n role: 'article',\n })}\n {...(isAttendable ? attentionAttrs : {})}\n onKeyDown={handleKeyDown}\n >\n {node ? (\n <>\n <PlankHeading\n id={id}\n part={part.startsWith('solo-') ? 'solo' : part}\n node={node}\n layoutMode={layoutMode}\n deckEnabled={settings?.enableDeck}\n canIncrementStart={canIncrementStart}\n canIncrementEnd={canIncrementEnd}\n popoverAnchorId={popoverAnchorId}\n primaryId={primary?.id}\n companioned={companioned}\n companions={companions}\n />\n <Surface\n key={node.id}\n role='article'\n data={data}\n limit={1}\n fallback={PlankContentError}\n placeholder={placeholder}\n />\n </>\n ) : (\n <PlankError id={id} part={part} />\n )}\n\n {canResize && <StackItem.ResizeHandle />}\n </Root>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type Node } from '@dxos/plugin-graph';\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionMessage, mx } from '@dxos/react-ui-theme';\n\nimport { PlankHeading, type PlankHeadingProps } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\nimport { DECK_PLUGIN } from '../../meta';\n\nexport const PlankContentError = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const errorString = error?.toString() ?? '';\n return (\n <div role='none' className='overflow-auto p-8 attention-surface grid place-items-center'>\n <p\n role='alert'\n className={mx(descriptionMessage, 'break-words rounded-md p-8', errorString.length < 256 && 'text-lg')}\n >\n {error ? errorString : t('error fallback message')}\n </p>\n </div>\n );\n};\n\nexport const PlankError = ({\n id,\n part,\n node,\n error,\n}: {\n id: string;\n part: PlankHeadingProps['part'];\n node?: Node;\n error?: Error;\n}) => {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n setTimeout(() => setTimedOut(true), 5e3);\n }, []);\n return (\n <>\n <PlankHeading id={id} part={part} node={node} pending={!timedOut} />\n {timedOut ? <PlankContentError error={error} /> : <PlankLoading />}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, memo, useCallback, useEffect, useMemo, type MouseEvent } from 'react';\n\nimport { createIntent, LayoutAction, Surface, useAppGraph, useIntentDispatcher } from '@dxos/app-framework';\nimport { type Node } from '@dxos/plugin-graph';\nimport { Icon, IconButton, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\nimport { hoverableControls, hoverableFocusedWithinControls } from '@dxos/react-ui-theme';\n\nimport { PlankCompanionControls, PlankControls } from './PlankControls';\nimport { useBreakpoints } from '../../hooks';\nimport { parseEntryId } from '../../layout';\nimport { DECK_PLUGIN } from '../../meta';\nimport { PLANK_COMPANION_TYPE, DeckAction, type ResolvedPart, type LayoutMode } from '../../types';\nimport { soloInlinePadding } from '../fragments';\n\nconst MAX_COMPANIONS = 5;\n\nexport type PlankHeadingProps = {\n id: string;\n part: ResolvedPart;\n layoutMode?: LayoutMode;\n node?: Node;\n deckEnabled?: boolean;\n canIncrementStart?: boolean;\n canIncrementEnd?: boolean;\n popoverAnchorId?: string;\n primaryId?: string;\n pending?: boolean;\n companioned?: 'primary' | 'companion';\n companions?: Node[];\n actions?: StackItemSigilAction[];\n};\n\nexport const PlankHeading = memo(\n ({\n id,\n part,\n node,\n deckEnabled,\n canIncrementStart,\n canIncrementEnd,\n popoverAnchorId,\n primaryId,\n pending,\n companioned,\n companions,\n layoutMode,\n actions = [],\n }: PlankHeadingProps) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { graph } = useAppGraph();\n const breakpoint = useBreakpoints();\n const icon = node?.properties?.icon ?? 'ph--placeholder--regular';\n const label = pending\n ? t('pending heading')\n : toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: DECK_PLUGIN }], t);\n\n const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;\n\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n // Load actions for the node.\n if (node) {\n void graph.expand(node.id);\n }\n });\n\n return () => cancelAnimationFrame(frame);\n }, [node]);\n\n const attendableId = primaryId ?? id;\n const capabilities = useMemo(\n () => ({\n deck: deckEnabled ?? true,\n solo: breakpoint !== 'mobile' && (part === 'solo' || part === 'deck'),\n incrementStart: canIncrementStart,\n incrementEnd: canIncrementEnd,\n fullscreen: !isCompanionNode,\n companion: !isCompanionNode && companions && companions.length > 0,\n }),\n [breakpoint, part, companions, canIncrementStart, canIncrementEnd, isCompanionNode, deckEnabled],\n );\n\n const { variant } = parseEntryId(id);\n const sigilActions = useMemo(() => {\n if (!node) {\n return undefined;\n } else if (variant) {\n return [];\n } else {\n return [\n actions,\n graph\n .getActions(node.id)\n .filter((a) => ['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition)),\n ].filter((a) => a.length > 0);\n }\n }, [actions, node, variant, graph]);\n\n const handleAction = useCallback(\n (action: StackItemSigilAction) => {\n typeof action.data === 'function' && action.data?.({ parent: node, caller: DECK_PLUGIN });\n },\n [node],\n );\n\n const handlePlankAction = useCallback(\n (eventType: DeckAction.PartAdjustment) => {\n if (eventType.startsWith('solo')) {\n return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));\n } else if (eventType === 'close') {\n if (part === 'complementary') {\n return dispatch(\n createIntent(LayoutAction.UpdateComplementary, {\n part: 'complementary',\n options: { state: 'collapsed' },\n }),\n );\n } else {\n return dispatch(\n createIntent(LayoutAction.Close, { part: 'main', subject: [id], options: { state: false } }),\n );\n }\n } else {\n return dispatch(createIntent(DeckAction.Adjust, { type: eventType, id }));\n }\n },\n [dispatch, id, part],\n );\n\n const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${DECK_PLUGIN}/${node.id}` ? Popover.Anchor : Fragment;\n\n const handleTabClick = useCallback(\n (event: MouseEvent) => {\n const target = (event.target as HTMLElement).closest('[data-id]') as HTMLElement | null;\n const tabId = target?.dataset?.id;\n if (primaryId && tabId) {\n void dispatch(\n createIntent(DeckAction.ChangeCompanion, {\n primary: primaryId,\n companion: tabId,\n }),\n );\n }\n },\n [primaryId],\n );\n\n return (\n <StackItem.Heading\n classNames={[\n 'plb-1 items-stretch gap-1 sticky inline-start-12 app-drag min-is-0 contain-layout density-coarse',\n part === 'solo' ? soloInlinePadding : 'pli-1',\n ...(layoutMode === 'solo--fullscreen'\n ? [\n hoverableControls,\n hoverableFocusedWithinControls,\n '*:transition-opacity *:opacity-[--controls-opacity] bg-transparent border-transparent transition-[background-color,border-color] hover-hover:hover:bg-headerSurface focus-within:bg-headerSurface hover-hover:hover:border-subduedSeparator focus-within:border-subduedSeparator',\n ]\n : []),\n ]}\n data-plank-heading\n >\n {companions && isCompanionNode ? (\n /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */\n <div role='none' className='flex-1 min-is-0 overflow-x-auto scrollbar-none flex gap-1'>\n {companions.map(({ id, properties: { icon, label } }) => (\n <IconButton\n key={id}\n data-id={id}\n icon={icon}\n iconOnly={companions.length > MAX_COMPANIONS && node?.id !== id}\n label={toLocalizedString(label, t)}\n size={5}\n variant={node?.id === id ? 'primary' : 'ghost'}\n onClick={handleTabClick}\n />\n ))}\n </div>\n ) : (\n <>\n <ActionRoot>\n {node && sigilActions ? (\n <StackItem.Sigil\n icon={icon}\n related={part === 'complementary'}\n attendableId={attendableId}\n triggerLabel={t('actions menu label')}\n actions={sigilActions}\n onAction={handleAction}\n >\n <Surface role='menu-footer' data={{ subject: node.data }} />\n </StackItem.Sigil>\n ) : (\n <StackItem.SigilButton>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} size={5} />\n </StackItem.SigilButton>\n )}\n </ActionRoot>\n <TextTooltip text={label} onlyWhenTruncating>\n <StackItem.HeadingLabel\n attendableId={attendableId}\n related={part === 'complementary'}\n {...(pending && { classNames: 'text-description' })}\n >\n {label}\n </StackItem.HeadingLabel>\n </TextTooltip>\n </>\n )}\n {node && part !== 'complementary' && <Surface role='navbar-end' data={{ subject: node.data }} />}\n {companioned === 'companion' ? (\n <PlankCompanionControls primary={primaryId} />\n ) : (\n <PlankControls\n capabilities={capabilities}\n layoutMode={layoutMode}\n close={part === 'complementary' ? 'minify-end' : true}\n onClick={handlePlankAction}\n />\n )}\n </StackItem.Heading>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useCallback } from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { ButtonGroup, type ButtonGroupProps, type ButtonProps, IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport { DeckAction, type LayoutMode } from '../../types';\n\nexport type PlankControlHandler = (event: DeckAction.PartAdjustment) => void;\n\nexport type PlankCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n deck?: boolean;\n solo?: boolean;\n fullscreen?: boolean;\n companion?: boolean;\n};\n\nexport type PlankControlsProps = Omit<ButtonGroupProps, 'onClick'> & {\n onClick?: PlankControlHandler;\n variant?: 'hide-disabled' | 'default';\n close?: boolean | 'minify-start' | 'minify-end';\n capabilities: PlankCapabilities;\n layoutMode?: LayoutMode;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return <IconButton iconOnly label={label} icon={icon} size={5} variant='ghost' tooltipSide='bottom' {...props} />;\n};\n\nconst plankControlSpacing = 'pli-2';\n\ntype PlankComplimentControlsProps = {\n primary?: string;\n};\n\nexport const PlankCompanionControls = forwardRef<HTMLDivElement, PlankComplimentControlsProps>(\n ({ primary }, forwardedRef) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const handleCloseCompanion = useCallback(() => {\n invariant(primary);\n return dispatch(createIntent(DeckAction.ChangeCompanion, { primary, companion: null }));\n }, []);\n return (\n <div ref={forwardedRef} className='contents app-no-drag'>\n <PlankControl\n label={t('close companion label')}\n variant='ghost'\n icon='ph--x--regular'\n onClick={handleCloseCompanion}\n classNames={plankControlSpacing}\n />\n </div>\n );\n },\n);\n\n// TODO(wittjosiah): Duplicate of stack LayoutControls?\n// Translations were to be duplicated between packages.\n// NOTE(thure): Pinning & unpinning are disabled indefinitely.\nexport const PlankControls = forwardRef<HTMLDivElement, PlankControlsProps>(\n (\n { children, classNames, variant = 'default', capabilities, layoutMode, pin, close = false, onClick, ...props },\n forwardedRef,\n ) => {\n const { t } = useTranslation(DECK_PLUGIN);\n const buttonClassNames =\n variant === 'hide-disabled' ? `disabled:hidden ${plankControlSpacing}` : plankControlSpacing;\n\n const layoutIsAnySolo = !!layoutMode?.startsWith('solo');\n\n return (\n <ButtonGroup {...props} classNames={['app-no-drag !opacity-100', classNames]} ref={forwardedRef}>\n {capabilities.deck ? (\n <>\n {capabilities.solo && (\n <>\n {layoutMode === 'solo' && (\n <PlankControl\n label={t('show fullscreen plank label')}\n classNames={buttonClassNames}\n icon='ph--corners-out--regular'\n onClick={() => onClick?.('solo--fullscreen')}\n />\n )}\n <PlankControl\n label={t(\n layoutMode === 'solo--fullscreen'\n ? 'exit fullscreen label'\n : layoutIsAnySolo\n ? 'show deck plank label'\n : 'show solo plank label',\n )}\n classNames={buttonClassNames}\n icon={\n layoutMode === 'solo--fullscreen'\n ? 'ph--corners-in--regular'\n : layoutIsAnySolo\n ? 'ph--arrows-in-line-horizontal--regular'\n : 'ph--arrows-out-line-horizontal--regular'\n }\n onClick={() => onClick?.(layoutMode === 'solo--fullscreen' ? 'solo--fullscreen' : 'solo')}\n />\n </>\n )}\n\n {!layoutIsAnySolo && (\n <>\n <PlankControl\n label={t('increment start label')}\n disabled={!capabilities.incrementStart}\n classNames={buttonClassNames}\n icon='ph--caret-left--regular'\n onClick={() => onClick?.('increment-start')}\n />\n <PlankControl\n label={t('increment end label')}\n disabled={!capabilities.incrementEnd}\n classNames={buttonClassNames}\n icon='ph--caret-right--regular'\n onClick={() => onClick?.('increment-end')}\n />\n </>\n )}\n </>\n ) : (\n capabilities.fullscreen && (\n <PlankControl\n label={t(layoutMode === 'solo--fullscreen' ? 'exit fullscreen label' : 'show fullscreen plank label')}\n classNames={buttonClassNames}\n icon={layoutMode === 'solo--fullscreen' ? 'ph--corners-in--regular' : 'ph--corners-out--regular'}\n onClick={() => onClick?.('solo--fullscreen')}\n />\n )\n )}\n\n {close && !layoutIsAnySolo && (\n <PlankControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\n data-testid='plankHeading.close'\n icon={\n close === 'minify-start'\n ? 'ph--caret-line-left--regular'\n : close === 'minify-end'\n ? 'ph--caret-line-right--regular'\n : 'ph--x--regular'\n }\n onClick={() => onClick?.('close')}\n />\n )}\n\n {capabilities.companion && (\n <PlankControl\n label={t('open companion label')}\n classNames={buttonClassNames}\n data-testid='plankHeading.companion'\n icon='ph--square-split-horizontal--regular'\n onClick={() => onClick?.('companion')}\n />\n )}\n {children}\n </ButtonGroup>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { mx } from '@dxos/react-ui-theme';\n\nexport const soloInlinePadding =\n 'pis-[calc(env(safe-area-inset-left)+.25rem)] pie-[calc(env(safe-area-inset-left)+.25rem)]';\n\nconst sidebarToggleStyles = 'bs-[--rail-item] is-[--rail-item] absolute block-end-2 z-[1] !bg-deckSurface lg:hidden';\n\nexport const fixedSidebarToggleStyles = mx(sidebarToggleStyles, 'inline-start-2');\n\nexport const fixedComplementarySidebarToggleStyles = mx(sidebarToggleStyles, 'inline-end-2');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\n// TODO(burdon): Show skeleton: https://github.com/dxos/dxos/issues/8259\nexport const PlankLoading = () => {\n return <div role='none' className='grid place-items-center attention-surface' />;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\nimport { type Label, Main } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { useBreakpoints, useHoistStatusbar } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\n\nconst label = ['sidebar title', { ns: DECK_PLUGIN }] satisfies Label;\n\nexport const Sidebar = () => {\n const { popoverAnchorId, activeDeck: current, deck } = useCapability(DeckCapabilities.DeckState);\n const breakpoint = useBreakpoints();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const navigationData = useMemo(\n () => ({ popoverAnchorId, topbar, hoistStatusbar, current }),\n [popoverAnchorId, topbar, hoistStatusbar, current],\n );\n\n return (\n <Main.NavigationSidebar\n label={label}\n classNames={[\n 'grid',\n topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'block-end-[--statusbar-size]',\n ]}\n >\n <Surface role='navigation' data={navigationData} limit={1} />\n </Main.NavigationSidebar>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { untracked } from '@preact/signals-core';\nimport React, { useCallback, useEffect, useMemo, useRef, type UIEvent, Fragment } from 'react';\n\nimport {\n Capabilities,\n LayoutAction,\n createIntent,\n useCapability,\n useIntentDispatcher,\n usePluginManager,\n} from '@dxos/app-framework';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Main, type MainProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';\nimport { Stack, StackContext, DEFAULT_HORIZONTAL_SIZE } from '@dxos/react-ui-stack';\nimport { mainPaddingTransitions } from '@dxos/react-ui-theme';\n\nimport { ActiveNode } from './ActiveNode';\nimport { ContentEmpty } from './ContentEmpty';\nimport { Dialog } from './Dialog';\nimport { PopoverContent, PopoverRoot } from './Popover';\nimport { StatusBar } from './StatusBar';\nimport { Toast } from './Toast';\nimport { Topbar } from './Topbar';\nimport { DeckCapabilities } from '../../capabilities';\nimport { useBreakpoints, useHoistStatusbar } from '../../hooks';\nimport { DECK_PLUGIN } from '../../meta';\nimport { type DeckSettingsProps, getMode } from '../../types';\nimport { calculateOverscroll, layoutAppliesTopbar } from '../../util';\nimport { Plank } from '../Plank';\nimport { ComplementarySidebar, Sidebar, ToggleComplementarySidebarButton, ToggleSidebarButton } from '../Sidebar';\nimport { fixedComplementarySidebarToggleStyles, fixedSidebarToggleStyles } from '../fragments';\n\nexport type DeckLayoutProps = {\n onDismissToast: (id: string) => void;\n};\n\nconst PlankSeparator = ({ order }: { order: number }) =>\n order > 0 ? <span role='separator' className='row-span-2 bg-deckSurface is-4' style={{ gridColumn: order }} /> : null;\n\nexport const DeckLayout = ({ onDismissToast }: DeckLayoutProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const settings = useCapability(Capabilities.SettingsStore).getStore<DeckSettingsProps>(DECK_PLUGIN)!.value;\n const context = useCapability(DeckCapabilities.MutableDeckState);\n const { sidebarState, complementarySidebarState, complementarySidebarPanel, deck, toasts } = context;\n const { active, activeCompanions, fullscreen, solo, plankSizing } = deck;\n const breakpoint = useBreakpoints();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n const pluginManager = usePluginManager();\n\n const scrollLeftRef = useRef<number | null>();\n const deckRef = useRef<HTMLDivElement>(null);\n\n // Ensure the first plank is attended when the deck is first rendered.\n useEffect(() => {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attended = untracked(() => {\n const attention = pluginManager.context.getCapability(AttentionCapabilities.Attention);\n return attention.current;\n });\n const firstId = solo ?? active[0];\n if (attended.length === 0 && firstId) {\n // TODO(wittjosiah): Focusing the type button is a workaround.\n // If the plank is directly focused on first load the focus ring appears.\n document.querySelector<HTMLElement>(`article[data-attendable-id=\"${firstId}\"] button`)?.focus();\n }\n }, []);\n\n // Not using `breakpoint` to avoid firing when breakpoint changes between tablet and desktop.\n // `ssr: false` to avoid using fallback values and flashing into solo mode on startup.\n const [isNotMobile] = useMediaQuery('md', { ssr: false });\n const shouldRevert = useRef(false);\n useEffect(() => {\n if (!isNotMobile && getMode(deck) === 'deck') {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attended = untracked(() => {\n const attention = pluginManager.context.getCapability(AttentionCapabilities.Attention);\n return attention.current;\n });\n\n shouldRevert.current = true;\n void dispatch(\n createIntent(LayoutAction.SetLayoutMode, { part: 'mode', subject: attended[0], options: { mode: 'solo' } }),\n );\n } else if (isNotMobile && getMode(deck) === 'solo' && shouldRevert.current) {\n void dispatch(createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { revert: true } }));\n }\n }, [isNotMobile, deck, dispatch]);\n\n // When deck is disabled in settings, set to solo mode if the current layout mode is deck.\n // TODO(thure): Applying this as an effect should be avoided over emitting the intent only when the setting changes.\n useEffect(() => {\n if (!settings.enableDeck && layoutMode === 'deck') {\n void dispatch(\n createIntent(LayoutAction.SetLayoutMode, { part: 'mode', subject: active[0], options: { mode: 'solo' } }),\n );\n }\n }, [settings.enableDeck, dispatch, active, layoutMode]);\n\n /**\n * Clear scroll restoration state if the window is resized\n */\n const handleResize = useCallback(() => {\n scrollLeftRef.current = null;\n }, []);\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n const restoreScroll = useCallback(() => {\n if (deckRef.current && scrollLeftRef.current != null) {\n deckRef.current.scrollLeft = scrollLeftRef.current;\n }\n }, []);\n useOnTransition(layoutMode, (mode) => mode !== 'deck', 'deck', restoreScroll);\n\n /**\n * Save scroll position as the user scrolls\n */\n const handleScroll = useCallback(\n (event: UIEvent) => {\n if (!solo && event.currentTarget === event.target) {\n scrollLeftRef.current = (event.target as HTMLDivElement).scrollLeft;\n }\n },\n [solo],\n );\n\n const isEmpty = !solo && active.length === 0;\n\n const padding = useMemo(() => {\n if (!solo && settings.overscroll === 'centering') {\n return calculateOverscroll(active.length);\n }\n return {};\n }, [solo, settings.overscroll, deck]);\n\n const mainPosition = useMemo(\n () => [\n 'grid !block-start-[env(safe-area-inset-top)]',\n topbar && '!block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'lg:block-end-[--statusbar-size]',\n ],\n [topbar, hoistStatusbar],\n );\n\n const { order, itemsCount }: { order: Record<string, number>; itemsCount: number } = useMemo(() => {\n return active.reduce(\n (acc: { order: Record<string, number>; itemsCount: number }, entryId) => {\n acc.order[entryId] = acc.itemsCount + 1;\n acc.itemsCount += activeCompanions?.[entryId] ? 3 : 2;\n return acc;\n },\n { order: {}, itemsCount: 0 },\n );\n }, [active, activeCompanions]);\n\n return (\n <PopoverRoot>\n <ActiveNode />\n\n <Main.Root\n navigationSidebarState={fullscreen ? 'closed' : context.sidebarState}\n onNavigationSidebarStateChange={(next) => (context.sidebarState = next)}\n complementarySidebarState={fullscreen ? 'closed' : context.complementarySidebarState}\n onComplementarySidebarStateChange={(next) => (context.complementarySidebarState = next)}\n >\n {/* Left sidebar. */}\n <Sidebar />\n\n {/* Right sidebar. */}\n <ComplementarySidebar current={complementarySidebarPanel} />\n\n {/* Dialog overlay to dismiss dialogs. */}\n <Main.Overlay />\n\n {/* No content. */}\n {isEmpty && (\n <Main.Content bounce handlesFocus classNames={mainPosition}>\n <ContentEmpty />\n </Main.Content>\n )}\n\n {/* Solo/deck mode. */}\n {!isEmpty && (\n <Main.Content\n bounce\n handlesFocus\n classNames={mainPosition}\n style={\n {\n '--dx-main-sidebarWidth':\n sidebarState === 'expanded'\n ? 'var(--nav-sidebar-size)'\n : sidebarState === 'collapsed'\n ? 'var(--l0-size)'\n : '0',\n '--dx-main-complementaryWidth':\n complementarySidebarState === 'expanded'\n ? 'var(--complementary-sidebar-size)'\n : complementarySidebarState === 'collapsed'\n ? 'var(--rail-size)'\n : '0',\n '--dx-main-contentFirstWidth': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n '--dx-main-contentLastWidth': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n } as MainProps['style']\n }\n >\n <div\n role='none'\n className={!solo ? 'relative bg-deckSurface overflow-hidden' : 'sr-only'}\n {...(solo && { inert: '' })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <Stack\n ref={deckRef}\n orientation='horizontal'\n size='contain'\n classNames={['absolute inset-block-0 -inset-inline-px', mainPaddingTransitions]}\n itemsCount={itemsCount - 1}\n style={padding}\n onScroll={handleScroll}\n >\n {active.map((entryId) => (\n <Fragment key={entryId}>\n <PlankSeparator order={order[entryId] - 1} />\n <Plank\n id={entryId}\n companionId={activeCompanions?.[entryId]}\n part='deck'\n order={order[entryId]}\n active={active}\n layoutMode={layoutMode}\n settings={settings}\n />\n </Fragment>\n ))}\n </Stack>\n </div>\n <div\n role='none'\n className={solo ? 'relative bg-deckSurface overflow-hidden' : 'sr-only'}\n {...(!solo && { inert: '' })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <StackContext.Provider value={{ size: 'contain', orientation: 'horizontal', rail: true }}>\n <Plank\n id={solo}\n companionId={solo ? activeCompanions?.[solo] : undefined}\n part='solo'\n layoutMode={layoutMode}\n settings={settings}\n />\n </StackContext.Provider>\n </div>\n </Main.Content>\n )}\n\n {/* Topbar. */}\n {topbar && <Topbar />}\n\n {/* Status bar. */}\n {hoistStatusbar && <StatusBar showHints={settings.showHints} />}\n </Main.Root>\n\n {/* Global popovers. */}\n <PopoverContent />\n\n {/* Global dialog. */}\n <Dialog />\n\n {/* Global toasts. */}\n {toasts?.map((toast) => (\n <Toast\n {...toast}\n key={toast.id}\n onOpenChange={(open) => {\n if (!open) {\n onDismissToast(toast.id);\n }\n\n return open;\n }}\n />\n ))}\n </PopoverRoot>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, useAppGraph } from '@dxos/app-framework';\nimport { useNode } from '@dxos/plugin-graph';\nimport { useAttended } from '@dxos/react-ui-attention';\n\nimport { useNodeActionExpander } from '../../hooks';\n\n// TODO(burdon): Factor out to effect in plugin set document title.\nexport const ActiveNode = () => {\n const [id] = useAttended();\n const { graph } = useAppGraph();\n const activeNode = useNode(graph, id);\n useNodeActionExpander(activeNode);\n\n return (\n <div role='none' className='sr-only'>\n {/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.\n Probably this lives in React-land currently in order to access translations? */}\n <Surface role='document-title' data={{ subject: activeNode }} limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { useBreakpoints } from '../../hooks';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\nimport { ToggleSidebarButton } from '../Sidebar';\nimport { fixedSidebarToggleStyles } from '../fragments';\n\nexport const ContentEmpty = () => {\n const breakpoint = useBreakpoints();\n const { deck } = useCapability(DeckCapabilities.MutableDeckState);\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n return (\n <div\n role='none'\n className='grid place-items-center p-8 relative bg-deckSurface'\n data-testid='layoutPlugin.firstRunMessage'\n >\n <Surface role='keyshortcuts' />\n {!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\nimport { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\nimport { PlankContentError } from '../Plank';\n\nexport const Dialog = () => {\n const context = useCapability(DeckCapabilities.MutableDeckState);\n const { dialogOpen, dialogType, dialogBlockAlign, dialogOverlayClasses, dialogOverlayStyle, dialogContent } = context;\n const Root = dialogType === 'alert' ? AlertDialog.Root : NaturalDialog.Root;\n const Overlay = dialogType === 'alert' ? AlertDialog.Overlay : NaturalDialog.Overlay;\n\n // TODO(thure): End block alignment affecting `modal` and whether the surface renders in an overlay is tailored to the needs of the ambient chat dialog. As the feature matures, consider separating concerns.\n return (\n <Root\n modal={dialogBlockAlign !== 'end'}\n open={dialogOpen}\n onOpenChange={(nextOpen) => (context.dialogOpen = nextOpen)}\n >\n {dialogBlockAlign === 'end' ? (\n // TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.\n <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} placeholder={<div />} />\n ) : (\n <Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>\n <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} />\n </Overlay>\n )}\n </Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { Surface, useCapability } from '@dxos/app-framework';\nimport { Popover, type PopoverContentInteractOutsideEvent } from '@dxos/react-ui';\n\nimport { DeckCapabilities } from '../../capabilities';\n\nexport type DeckPopoverRootProps = PropsWithChildren<{}>;\n\nconst DEBOUNCE_DELAY = 40;\n\ntype DeckPopoverContextValue = {\n setOpen: (open: boolean) => void;\n};\n\nconst [DeckPopoverProvider, useDeckPopoverContext] = createContext<DeckPopoverContextValue>('DeckPopover');\n\nexport const PopoverRoot = ({ children }: DeckPopoverRootProps) => {\n const layout = useCapability(DeckCapabilities.MutableDeckState);\n const virtualRef = useRef<HTMLButtonElement | null>(null);\n const [virtualIter, setVirtualIter] = useState(0);\n const [open, setOpen] = useState(false);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // TODO(thure): This is a workaround for the race condition between displaying a Popover and either rendering\n // the anchor further down the tree or measuring the virtual trigger’s client rect.\n useEffect(() => {\n setOpen(false);\n if (layout.popoverOpen) {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if (layout.popoverAnchor && virtualRef.current !== layout.popoverAnchor) {\n virtualRef.current = layout.popoverAnchor ?? null;\n setVirtualIter((iter) => iter + 1);\n }\n debounceRef.current = setTimeout(() => setOpen(true), DEBOUNCE_DELAY);\n }\n }, [layout.popoverOpen, layout.popoverAnchorId, layout.popoverAnchor, layout.popoverContent]);\n\n return (\n <DeckPopoverProvider setOpen={setOpen}>\n <Popover.Root modal={false} open={open}>\n {layout.popoverAnchor && <Popover.VirtualTrigger key={virtualIter} virtualRef={virtualRef} />}\n {children}\n </Popover.Root>\n </DeckPopoverProvider>\n );\n};\n\nexport const PopoverContent = () => {\n const layout = useCapability(DeckCapabilities.MutableDeckState);\n const { setOpen } = useDeckPopoverContext('PopoverContent');\n\n const handleClose = useCallback(\n (event: KeyboardEvent | PopoverContentInteractOutsideEvent) => {\n if (\n // TODO(thure): CodeMirror should not focus itself when it updates.\n event.type === 'dismissableLayer.focusOutside' &&\n (event.currentTarget as HTMLElement | undefined)?.classList.contains('cm-content')\n ) {\n event.preventDefault();\n } else {\n setOpen(false);\n layout.popoverOpen = false;\n layout.popoverAnchor = undefined;\n layout.popoverAnchorId = undefined;\n layout.popoverSide = undefined;\n }\n },\n [setOpen],\n );\n\n const collisionBoundaries: HTMLElement[] = useMemo(() => {\n const closest = layout.popoverAnchor?.closest('[data-popover-collision-boundary]') as\n | HTMLElement\n | null\n | undefined;\n return closest ? [closest] : [];\n }, [layout.popoverAnchor]);\n\n return (\n <Popover.Portal>\n <Popover.Content\n side={layout.popoverSide}\n onInteractOutside={handleClose}\n onEscapeKeyDown={handleClose}\n collisionBoundary={collisionBoundaries}\n sticky='always'\n hideWhenDetached\n >\n <Popover.Viewport>\n <Surface role='popover' data={layout.popoverContent} limit={1} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework';\nimport { useLandmarkMover } from '@dxos/react-ui';\n\nexport const StatusBar = ({ showHints }: { showHints?: boolean }) => {\n const mover = useLandmarkMover(undefined, '3');\n return (\n <div\n role='contentinfo'\n className='fixed block-end-0 inset-inline-0 bs-[--statusbar-size] border-bs border-separator z-[2] flex text-description'\n {...mover}\n >\n {showHints && <Surface role='hints' limit={1} />}\n <Surface role='status-bar' limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type LayoutAction } from '@dxos/app-framework';\nimport {\n Button,\n Icon,\n Toast as NaturalToast,\n type ToastRootProps,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { DECK_PLUGIN } from '../../meta';\n\n// TODO(wittjosiah): Render remaining duration as a progress bar within the toast.\nexport const Toast = ({\n id,\n title,\n description,\n icon,\n duration,\n actionLabel,\n actionAlt,\n closeLabel,\n onAction,\n onOpenChange,\n}: LayoutAction.Toast & Pick<ToastRootProps, 'onOpenChange'>) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <NaturalToast.Root data-testid={id} defaultOpen duration={duration} onOpenChange={onOpenChange}>\n <NaturalToast.Body>\n <NaturalToast.Title classNames='items-center'>\n {icon && <Icon icon={icon} size={5} classNames='inline mr-1' />}\n {title && <span>{toLocalizedString(title, t)}</span>}\n </NaturalToast.Title>\n {description && (\n <NaturalToast.Description>{description && toLocalizedString(description, t)}</NaturalToast.Description>\n )}\n </NaturalToast.Body>\n <NaturalToast.Actions>\n {onAction && actionAlt && actionLabel && (\n <NaturalToast.Action altText={toLocalizedString(actionAlt, t)} asChild>\n <Button data-testid='toast.action' variant='primary' onClick={() => onAction?.()}>\n {toLocalizedString(actionLabel, t)}\n </Button>\n </NaturalToast.Action>\n )}\n {closeLabel && (\n <NaturalToast.Close asChild>\n <Button data-testid='toast.close'>{toLocalizedString(closeLabel, t)}</Button>\n </NaturalToast.Close>\n )}\n </NaturalToast.Actions>\n </NaturalToast.Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Banner } from './Banner';\n\nexport const Topbar = () => {\n return <Banner variant='topbar' />;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\nimport { DeprecatedFormContainer, DeprecatedFormInput } from '@dxos/react-ui-form';\n\nimport { DECK_PLUGIN } from '../../meta';\nimport {\n type DeckSettingsProps,\n type NewPlankPositioning,\n NewPlankPositions,\n type Overscroll,\n OverscrollOptions,\n} from '../../types';\n\nconst isSocket = !!(globalThis as any).__args;\n\nexport const DeckSettings = ({ settings }: { settings: DeckSettingsProps }) => {\n const { t } = useTranslation(DECK_PLUGIN);\n\n return (\n <DeprecatedFormContainer>\n <DeprecatedFormInput label={t('settings enable deck label')}>\n <Input.Switch checked={settings.enableDeck} onCheckedChange={(checked) => (settings.enableDeck = checked)} />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('select new plank positioning label')}>\n <Select.Root\n disabled={!settings.enableDeck}\n value={settings.newPlankPositioning ?? 'start'}\n onValueChange={(value) => (settings.newPlankPositioning = value as NewPlankPositioning)}\n >\n <Select.TriggerButton placeholder={t('select new plank positioning placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {NewPlankPositions.map((position) => (\n <Select.Option key={position} value={position}>\n {t(`settings new plank position ${position} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings overscroll label')}>\n <Select.Root\n disabled={!settings.enableDeck}\n value={settings.overscroll ?? 'none'}\n onValueChange={(value) => (settings.overscroll = value as Overscroll)}\n >\n <Select.TriggerButton placeholder={t('select overscroll placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {OverscrollOptions.map((option) => (\n <Select.Option key={option} value={option}>\n {t(`settings overscroll ${option} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings enable statusbar label')}>\n <Input.Switch\n checked={settings.enableStatusbar}\n onCheckedChange={(checked) => (settings.enableStatusbar = checked)}\n />\n </DeprecatedFormInput>\n <DeprecatedFormInput label={t('settings show hints label')}>\n <Input.Switch checked={settings.showHints} onCheckedChange={(checked) => (settings.showHints = checked)} />\n </DeprecatedFormInput>\n {!isSocket && (\n <DeprecatedFormInput label={t('settings native redirect label')}>\n <Input.Switch\n checked={settings.enableNativeRedirect}\n onCheckedChange={(checked) => (settings.enableNativeRedirect = checked)}\n />\n </DeprecatedFormInput>\n )}\n </DeprecatedFormContainer>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "Surface", "useTranslation", "mx", "React", "Fragment", "useCallback", "useEffect", "useMemo", "useState", "LayoutAction", "Surface", "createIntent", "useCapability", "useIntentDispatcher", "Main", "useTranslation", "toLocalizedString", "IconButton", "Tabs", "React", "useCallback", "createIntent", "LayoutAction", "useCapability", "useIntentDispatcher", "IconButton", "useTranslation", "ToggleSidebarButton", "classNames", "variant", "layoutContext", "useCapability", "DeckCapabilities", "MutableDeckState", "t", "useTranslation", "DECK_PLUGIN", "IconButton", "iconOnly", "icon", "size", "label", "onClick", "sidebarState", "CloseSidebarButton", "ToggleComplementarySidebarButton", "inR0", "current", "dispatchPromise", "dispatch", "useIntentDispatcher", "companions", "useDeckCompanions", "handleClick", "useCallback", "complementarySidebarState", "firstCompanion", "createIntent", "LayoutAction", "UpdateComplementary", "part", "subject", "getCompanionId", "id", "tooltipSide", "undefined", "React", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "LayoutAction", "Surface", "createIntent", "useCapability", "useAppGraph", "useIntentDispatcher", "debounce", "useNode", "ATTENDABLE_PATH_SEPARATOR", "useAttentionAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "React", "useEffect", "useState", "useTranslation", "descriptionMessage", "mx", "React", "Fragment", "memo", "useCallback", "useEffect", "useMemo", "createIntent", "LayoutAction", "Surface", "useAppGraph", "useIntentDispatcher", "Icon", "IconButton", "Popover", "toLocalizedString", "useTranslation", "StackItem", "TextTooltip", "hoverableControls", "hoverableFocusedWithinControls", "React", "forwardRef", "useCallback", "createIntent", "useIntentDispatcher", "invariant", "ButtonGroup", "IconButton", "useTranslation", "PlankControl", "icon", "label", "props", "React", "IconButton", "iconOnly", "size", "variant", "tooltipSide", "plankControlSpacing", "PlankCompanionControls", "forwardRef", "primary", "forwardedRef", "t", "useTranslation", "DECK_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "handleCloseCompanion", "useCallback", "invariant", "createIntent", "DeckAction", "ChangeCompanion", "companion", "div", "ref", "className", "onClick", "classNames", "PlankControls", "children", "capabilities", "layoutMode", "pin", "close", "buttonClassNames", "layoutIsAnySolo", "startsWith", "ButtonGroup", "deck", "solo", "disabled", "incrementStart", "incrementEnd", "fullscreen", "data-testid", "mx", "soloInlinePadding", "sidebarToggleStyles", "fixedSidebarToggleStyles", "mx", "fixedComplementarySidebarToggleStyles", "MAX_COMPANIONS", "PlankHeading", "memo", "id", "part", "node", "deckEnabled", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "primaryId", "pending", "companioned", "companions", "layoutMode", "actions", "t", "useTranslation", "DECK_PLUGIN", "dispatchPromise", "dispatch", "useIntentDispatcher", "graph", "useAppGraph", "breakpoint", "useBreakpoints", "icon", "properties", "label", "toLocalizedString", "ns", "isCompanionNode", "type", "PLANK_COMPANION_TYPE", "useEffect", "frame", "requestAnimationFrame", "expand", "cancelAnimationFrame", "attendableId", "capabilities", "useMemo", "deck", "solo", "incrementStart", "incrementEnd", "fullscreen", "companion", "length", "variant", "parseEntryId", "sigilActions", "undefined", "getActions", "filter", "a", "includes", "disposition", "handleAction", "useCallback", "action", "data", "parent", "caller", "handlePlankAction", "eventType", "startsWith", "createIntent", "DeckAction", "Adjust", "LayoutAction", "UpdateComplementary", "options", "state", "Close", "subject", "ActionRoot", "Popover", "Anchor", "Fragment", "handleTabClick", "event", "target", "closest", "tabId", "dataset", "ChangeCompanion", "primary", "React", "StackItem", "Heading", "classNames", "soloInlinePadding", "hoverableControls", "hoverableFocusedWithinControls", "data-plank-heading", "div", "role", "className", "map", "IconButton", "key", "data-id", "iconOnly", "size", "onClick", "Sigil", "related", "triggerLabel", "onAction", "Surface", "SigilButton", "span", "Icon", "TextTooltip", "text", "onlyWhenTruncating", "HeadingLabel", "PlankCompanionControls", "PlankControls", "close", "React", "PlankLoading", "React", "div", "role", "className", "PlankContentError", "error", "t", "useTranslation", "DECK_PLUGIN", "errorString", "toString", "React", "div", "role", "className", "p", "mx", "descriptionMessage", "length", "PlankError", "id", "part", "node", "timedOut", "setTimedOut", "useState", "useEffect", "setTimeout", "PlankHeading", "pending", "PlankLoading", "UNKNOWN_ID", "Plank", "memo", "id", "companionId", "props", "graph", "useAppGraph", "node", "useNode", "companions", "useCompanions", "currentCompanion", "find", "hasCompanion", "React", "PlankContainer", "solo", "part", "companion", "PlankComponent", "companioned", "undefined", "primary", "order", "children", "sizeAttrs", "useMainSize", "div", "role", "className", "mx", "railGridHorizontal", "mainIntrinsicSize", "layoutMode", "path", "active", "settings", "dispatchPromise", "dispatch", "useIntentDispatcher", "deck", "popoverAnchorId", "scrollIntoView", "useCapability", "DeckCapabilities", "DeckState", "canResize", "attentionAttrs", "useAttentionAttributes", "index", "findIndex", "entryId", "length", "canIncrementStart", "canIncrementEnd", "rootElement", "useRef", "variant", "parseEntryId", "sizeKey", "split", "ATTENDABLE_PATH_SEPARATOR", "size", "plankSizing", "handleSizeChange", "useCallback", "debounce", "nextSize", "createIntent", "DeckAction", "UpdatePlankSize", "handleKeyDown", "event", "target", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "focusable", "querySelector", "preventScroll", "behavior", "inline", "LayoutAction", "ScrollIntoView", "subject", "isSolo", "startsWith", "isAttendable", "data", "useMemo", "companionTo", "placeholder", "PlankLoading", "Root", "StackItem", "ref", "data-testid", "tabIndex", "item", "onSizeChange", "classNames", "onKeyDown", "PlankHeading", "deckEnabled", "enableDeck", "primaryId", "Surface", "limit", "fallback", "PlankContentError", "PlankError", "ResizeHandle", "label", "ns", "DECK_PLUGIN", "ComplementarySidebar", "current", "t", "useTranslation", "dispatchPromise", "dispatch", "useIntentDispatcher", "layout", "useCapability", "DeckCapabilities", "MutableDeckState", "layoutMode", "getMode", "deck", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "companions", "useDeckCompanions", "activeCompanion", "find", "companion", "getCompanionId", "id", "activeId", "internalValue", "setInternalValue", "useState", "useEffect", "handleTabClick", "useCallback", "event", "nextValue", "currentTarget", "getAttribute", "complementarySidebarState", "createIntent", "LayoutAction", "UpdateComplementary", "part", "subject", "data", "useMemo", "options", "state", "React", "Main", "classNames", "Tabs", "Root", "orientation", "verticalVariant", "value", "div", "role", "className", "Tablist", "map", "Tab", "key", "asChild", "IconButton", "toLocalizedString", "properties", "icon", "size", "iconOnly", "tooltipSide", "data-value", "variant", "onClick", "Surface", "limit", "ToggleComplementarySidebarButton", "Tabpanel", "inert", "ComplementarySidebarPanel", "ScrollArea", "children", "Wrapper", "fixed", "Fragment", "h2", "fallback", "PlankContentError", "placeholder", "PlankLoading", "React", "useMemo", "Surface", "useCapability", "Main", "label", "ns", "DECK_PLUGIN", "Sidebar", "popoverAnchorId", "activeDeck", "current", "deck", "useCapability", "DeckCapabilities", "DeckState", "breakpoint", "useBreakpoints", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "navigationData", "useMemo", "React", "Main", "NavigationSidebar", "classNames", "Surface", "role", "data", "limit", "Banner", "variant", "classNames", "t", "useTranslation", "DECK_PLUGIN", "React", "header", "className", "mx", "CloseSidebarButton", "ToggleSidebarButton", "span", "ns", "div", "role", "Surface", "limit", "untracked", "React", "useCallback", "useEffect", "useMemo", "useRef", "Fragment", "Capabilities", "LayoutAction", "createIntent", "useCapability", "useIntentDispatcher", "usePluginManager", "AttentionCapabilities", "Main", "useMediaQuery", "useOnTransition", "Stack", "StackContext", "DEFAULT_HORIZONTAL_SIZE", "mainPaddingTransitions", "React", "Surface", "useAppGraph", "useNode", "useAttended", "ActiveNode", "id", "useAttended", "graph", "useAppGraph", "activeNode", "useNode", "useNodeActionExpander", "React", "div", "role", "className", "Surface", "data", "subject", "limit", "React", "Surface", "useCapability", "ContentEmpty", "breakpoint", "useBreakpoints", "deck", "useCapability", "DeckCapabilities", "MutableDeckState", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "React", "div", "role", "className", "data-testid", "Surface", "ToggleSidebarButton", "variant", "classNames", "fixedSidebarToggleStyles", "React", "Surface", "useCapability", "AlertDialog", "Dialog", "NaturalDialog", "Dialog", "context", "useCapability", "DeckCapabilities", "MutableDeckState", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "dialogContent", "Root", "AlertDialog", "NaturalDialog", "Overlay", "React", "modal", "open", "onOpenChange", "nextOpen", "Surface", "role", "data", "limit", "fallback", "PlankContentError", "placeholder", "div", "blockAlign", "classNames", "style", "createContext", "React", "useCallback", "useEffect", "useMemo", "useRef", "useState", "Surface", "useCapability", "Popover", "DEBOUNCE_DELAY", "DeckPopoverProvider", "useDeckPopoverContext", "createContext", "PopoverRoot", "children", "layout", "useCapability", "DeckCapabilities", "MutableDeckState", "virtualRef", "useRef", "virtualIter", "setVirtualIter", "useState", "open", "setOpen", "debounceRef", "useEffect", "popoverOpen", "current", "clearTimeout", "popoverAnchor", "iter", "setTimeout", "popoverAnchorId", "popoverContent", "React", "Popover", "Root", "modal", "VirtualTrigger", "key", "PopoverContent", "handleClose", "useCallback", "event", "type", "currentTarget", "classList", "contains", "preventDefault", "undefined", "popoverSide", "collisionBoundaries", "useMemo", "closest", "Portal", "Content", "side", "onInteractOutside", "onEscapeKeyDown", "collisionBoundary", "sticky", "hideWhenDetached", "Viewport", "Surface", "role", "data", "limit", "Arrow", "React", "Surface", "useLandmarkMover", "StatusBar", "showHints", "mover", "useLandmarkMover", "undefined", "React", "div", "role", "className", "Surface", "limit", "React", "Button", "Icon", "Toast", "NaturalToast", "toLocalizedString", "useTranslation", "Toast", "id", "title", "description", "icon", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "onOpenChange", "t", "useTranslation", "DECK_PLUGIN", "React", "NaturalToast", "Root", "data-testid", "defaultOpen", "Body", "Title", "classNames", "Icon", "size", "span", "toLocalizedString", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "React", "Topbar", "React", "Banner", "variant", "PlankSeparator", "order", "React", "span", "role", "className", "style", "gridColumn", "DeckLayout", "onDismissToast", "dispatchPromise", "dispatch", "useIntentDispatcher", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "DECK_PLUGIN", "value", "context", "DeckCapabilities", "MutableDeckState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "deck", "toasts", "active", "activeCompanions", "fullscreen", "solo", "plankSizing", "breakpoint", "useBreakpoints", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "pluginManager", "usePluginManager", "scrollLeftRef", "useRef", "deckRef", "useEffect", "attended", "untracked", "attention", "getCapability", "AttentionCapabilities", "Attention", "current", "firstId", "length", "document", "querySelector", "focus", "isNotMobile", "useMediaQuery", "ssr", "shouldRevert", "createIntent", "LayoutAction", "SetLayoutMode", "part", "subject", "options", "mode", "revert", "enableDeck", "handleResize", "useCallback", "window", "addEventListener", "removeEventListener", "restoreScroll", "scrollLeft", "useOnTransition", "handleScroll", "event", "currentTarget", "target", "isEmpty", "padding", "useMemo", "overscroll", "calculateOverscroll", "mainPosition", "itemsCount", "reduce", "acc", "entryId", "PopoverRoot", "ActiveNode", "Main", "Root", "navigationSidebarState", "onNavigationSidebarStateChange", "next", "onComplementarySidebarStateChange", "Sidebar", "ComplementarySidebar", "Overlay", "Content", "bounce", "handlesFocus", "classNames", "ContentEmpty", "DEFAULT_HORIZONTAL_SIZE", "div", "inert", "ToggleSidebarButton", "fixedSidebarToggleStyles", "ToggleComplementarySidebarButton", "fixedComplementarySidebarToggleStyles", "Stack", "ref", "orientation", "size", "mainPaddingTransitions", "onScroll", "map", "Fragment", "key", "Plank", "id", "companionId", "StackContext", "Provider", "rail", "undefined", "Topbar", "StatusBar", "showHints", "PopoverContent", "Dialog", "toast", "Toast", "onOpenChange", "open", "React", "Input", "Select", "useTranslation", "DeprecatedFormContainer", "DeprecatedFormInput", "isSocket", "globalThis", "__args", "DeckSettings", "settings", "t", "useTranslation", "DECK_PLUGIN", "React", "DeprecatedFormContainer", "DeprecatedFormInput", "label", "Input", "Switch", "checked", "enableDeck", "onCheckedChange", "Select", "Root", "disabled", "value", "newPlankPositioning", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "NewPlankPositions", "map", "position", "Option", "key", "overscroll", "OverscrollOptions", "option", "enableStatusbar", "showHints", "enableNativeRedirect"]
7
- }
@@ -1,163 +0,0 @@
1
- import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
- import {
3
- DECK_PLUGIN
4
- } from "./chunk-HHG6H2BX.mjs";
5
-
6
- // src/types.ts
7
- import { Schema } from "effect";
8
- import { LayoutAction } from "@dxos/app-framework";
9
- import { ATTENDABLE_PATH_SEPARATOR } from "@dxos/react-ui-attention";
10
- var PLANK_COMPANION_TYPE = "dxos.org/plugin/deck/plank-companion";
11
- var DECK_COMPANION_TYPE = "dxos.org/plugin/deck/deck-companion";
12
- var NewPlankPositions = [
13
- "start",
14
- "end"
15
- ];
16
- var OverscrollOptions = [
17
- "none",
18
- "centering"
19
- ];
20
- var DeckSettingsSchema = Schema.Struct({
21
- showHints: Schema.optional(Schema.Boolean),
22
- enableDeck: Schema.optional(Schema.Boolean),
23
- enableStatusbar: Schema.optional(Schema.Boolean),
24
- enableNativeRedirect: Schema.optional(Schema.Boolean),
25
- newPlankPositioning: Schema.optional(Schema.Literal(...NewPlankPositions)),
26
- overscroll: Schema.optional(Schema.Literal(...OverscrollOptions))
27
- }).pipe(Schema.mutable);
28
- var PlankSizing = Schema.Record({
29
- key: Schema.String,
30
- value: Schema.Number
31
- });
32
- var DeckState = Schema.Struct({
33
- /** If false, the deck has not yet left solo mode and new planks should be soloed. */
34
- initialized: Schema.Boolean,
35
- active: Schema.mutable(Schema.Array(Schema.String)),
36
- // TODO(wittjosiah): Piping into both mutable and optional caused invalid typescript output.
37
- activeCompanions: Schema.optional(Schema.mutable(Schema.Record({
38
- key: Schema.String,
39
- value: Schema.String
40
- }))),
41
- inactive: Schema.mutable(Schema.Array(Schema.String)),
42
- solo: Schema.optional(Schema.String),
43
- fullscreen: Schema.Boolean,
44
- plankSizing: Schema.mutable(PlankSizing),
45
- companionFrameSizing: Schema.mutable(PlankSizing)
46
- });
47
- var defaultDeck = {
48
- initialized: false,
49
- active: [],
50
- activeCompanions: {},
51
- inactive: [],
52
- solo: void 0,
53
- fullscreen: false,
54
- plankSizing: {},
55
- companionFrameSizing: {}
56
- };
57
- var LayoutMode = Schema.Literal("deck", "solo", "solo--fullscreen");
58
- var isLayoutMode = (value) => Schema.is(LayoutMode)(value);
59
- var getMode = (deck) => {
60
- if (deck.solo) {
61
- return deck.fullscreen ? "solo--fullscreen" : "solo";
62
- }
63
- return "deck";
64
- };
65
- var DeckPluginState = Schema.Struct({
66
- sidebarState: Schema.Literal("closed", "collapsed", "expanded"),
67
- complementarySidebarState: Schema.Literal("closed", "collapsed", "expanded"),
68
- complementarySidebarPanel: Schema.optional(Schema.String),
69
- dialogOpen: Schema.Boolean,
70
- dialogType: Schema.optional(Schema.Literal("default", "alert")),
71
- dialogBlockAlign: Schema.optional(Schema.Literal("start", "center", "end")),
72
- dialogOverlayClasses: Schema.optional(Schema.String),
73
- dialogOverlayStyle: Schema.optional(Schema.Record({
74
- key: Schema.String,
75
- value: Schema.Any
76
- })),
77
- /** Data to be passed to the dialog Surface. */
78
- dialogContent: Schema.optional(Schema.Any),
79
- popoverOpen: Schema.Boolean,
80
- popoverSide: Schema.optional(Schema.Literal("top", "right", "bottom", "left")),
81
- popoverAnchor: Schema.optional(Schema.Any),
82
- popoverAnchorId: Schema.optional(Schema.String),
83
- /** Data to be passed to the popover Surface. */
84
- popoverContent: Schema.optional(Schema.Any),
85
- toasts: Schema.mutable(Schema.Array(LayoutAction.Toast)),
86
- currentUndoId: Schema.optional(Schema.String),
87
- activeDeck: Schema.String,
88
- previousDeck: Schema.String,
89
- decks: Schema.mutable(Schema.Record({
90
- key: Schema.String,
91
- value: Schema.mutable(DeckState)
92
- })),
93
- previousMode: Schema.mutable(Schema.Record({
94
- key: Schema.String,
95
- value: LayoutMode
96
- })),
97
- deck: Schema.mutable(DeckState),
98
- /** The identifier of a component to scroll into view when it is mounted. */
99
- scrollIntoView: Schema.optional(Schema.String)
100
- }).pipe(Schema.mutable);
101
- var DECK_ACTION = `${DECK_PLUGIN}/action`;
102
- (function(DeckAction2) {
103
- const PartAdjustmentSchema = Schema.Union(Schema.Literal("close").annotations({
104
- description: "Close the plank."
105
- }), Schema.Literal("companion").annotations({
106
- description: "Open the companion plank."
107
- }), Schema.Literal("solo").annotations({
108
- description: "Solo the plank."
109
- }), Schema.Literal("solo--fullscreen").annotations({
110
- description: "Fullscreen the plank."
111
- }), Schema.Literal("increment-start").annotations({
112
- description: "Move the plank towards the start of the deck."
113
- }), Schema.Literal("increment-end").annotations({
114
- description: "Move the plank towards the end of the deck."
115
- }));
116
- DeckAction2.Adjustment = Schema.mutable(Schema.Struct({
117
- id: Schema.String,
118
- type: PartAdjustmentSchema
119
- }));
120
- class Adjust extends Schema.TaggedClass()(`${DECK_ACTION}/adjust`, {
121
- input: DeckAction2.Adjustment,
122
- output: Schema.Void
123
- }) {
124
- }
125
- DeckAction2.Adjust = Adjust;
126
- class UpdatePlankSize extends Schema.TaggedClass()(`${DECK_ACTION}/update-plank-size`, {
127
- input: Schema.Struct({
128
- id: Schema.String,
129
- size: Schema.Number
130
- }),
131
- output: Schema.Void
132
- }) {
133
- }
134
- DeckAction2.UpdatePlankSize = UpdatePlankSize;
135
- class ChangeCompanion extends Schema.TaggedClass()(`${DECK_ACTION}/change-companion`, {
136
- input: Schema.Struct({
137
- primary: Schema.String,
138
- companion: Schema.Union(Schema.String, Schema.Null)
139
- }),
140
- output: Schema.Void
141
- }) {
142
- }
143
- DeckAction2.ChangeCompanion = ChangeCompanion;
144
- })(DeckAction || (DeckAction = {}));
145
- var DeckAction;
146
-
147
- export {
148
- PLANK_COMPANION_TYPE,
149
- DECK_COMPANION_TYPE,
150
- NewPlankPositions,
151
- OverscrollOptions,
152
- DeckSettingsSchema,
153
- PlankSizing,
154
- DeckState,
155
- defaultDeck,
156
- isLayoutMode,
157
- getMode,
158
- DeckPluginState,
159
- DECK_ACTION,
160
- DeckAction,
161
- ATTENDABLE_PATH_SEPARATOR
162
- };
163
- //# sourceMappingURL=chunk-QFKYT4JK.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { LayoutAction } from '@dxos/app-framework';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { DECK_PLUGIN } from './meta';\n\nexport { ATTENDABLE_PATH_SEPARATOR } from '@dxos/react-ui-attention';\n\nexport const PLANK_COMPANION_TYPE = 'dxos.org/plugin/deck/plank-companion';\nexport const DECK_COMPANION_TYPE = 'dxos.org/plugin/deck/deck-companion';\n\n// TODO(Zan): In the future we should consider adding new planks adjacent to the attended plank.\nexport const NewPlankPositions = ['start', 'end'] as const;\nexport type NewPlankPositioning = (typeof NewPlankPositions)[number];\n\nexport const OverscrollOptions = ['none', 'centering'] as const;\nexport type Overscroll = (typeof OverscrollOptions)[number];\n\nexport type Part = 'solo' | 'deck' | 'complementary';\nexport type ResolvedPart = Part | 'solo-primary' | 'solo-companion';\n\nexport const DeckSettingsSchema = Schema.Struct({\n showHints: Schema.optional(Schema.Boolean),\n enableDeck: Schema.optional(Schema.Boolean),\n enableStatusbar: Schema.optional(Schema.Boolean),\n enableNativeRedirect: Schema.optional(Schema.Boolean),\n newPlankPositioning: Schema.optional(Schema.Literal(...NewPlankPositions)),\n overscroll: Schema.optional(Schema.Literal(...OverscrollOptions)),\n}).pipe(Schema.mutable);\nexport type DeckSettingsProps = Schema.Schema.Type<typeof DeckSettingsSchema>;\n\nexport const PlankSizing = Schema.Record({ key: Schema.String, value: Schema.Number });\nexport type PlankSizing = Schema.Schema.Type<typeof PlankSizing>;\n\n// State of an individual deck.\nexport const DeckState = Schema.Struct({\n /** If false, the deck has not yet left solo mode and new planks should be soloed. */\n initialized: Schema.Boolean,\n active: Schema.mutable(Schema.Array(Schema.String)),\n // TODO(wittjosiah): Piping into both mutable and optional caused invalid typescript output.\n activeCompanions: Schema.optional(Schema.mutable(Schema.Record({ key: Schema.String, value: Schema.String }))),\n inactive: Schema.mutable(Schema.Array(Schema.String)),\n solo: Schema.optional(Schema.String),\n fullscreen: Schema.Boolean,\n plankSizing: Schema.mutable(PlankSizing),\n companionFrameSizing: Schema.mutable(PlankSizing),\n});\nexport type DeckState = Schema.Schema.Type<typeof DeckState>;\n\nexport const defaultDeck: DeckState = {\n initialized: false,\n active: [],\n activeCompanions: {},\n inactive: [],\n solo: undefined,\n fullscreen: false,\n plankSizing: {},\n companionFrameSizing: {},\n};\n\nconst LayoutMode = Schema.Literal('deck', 'solo', 'solo--fullscreen');\nexport type LayoutMode = Schema.Schema.Type<typeof LayoutMode>;\nexport const isLayoutMode = (value: any): value is LayoutMode => Schema.is(LayoutMode)(value);\n\nexport const getMode = (deck: DeckState | DeepReadonly<DeckState>): LayoutMode => {\n if (deck.solo) {\n return deck.fullscreen ? 'solo--fullscreen' : 'solo';\n }\n\n return 'deck';\n};\n\n// State of the deck plugin.\nexport const DeckPluginState = Schema.Struct({\n sidebarState: Schema.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarState: Schema.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarPanel: Schema.optional(Schema.String),\n\n dialogOpen: Schema.Boolean,\n dialogType: Schema.optional(Schema.Literal('default', 'alert')),\n dialogBlockAlign: Schema.optional(Schema.Literal('start', 'center', 'end')),\n dialogOverlayClasses: Schema.optional(Schema.String),\n dialogOverlayStyle: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n /** Data to be passed to the dialog Surface. */\n dialogContent: Schema.optional(Schema.Any),\n\n popoverOpen: Schema.Boolean,\n popoverSide: Schema.optional(Schema.Literal('top', 'right', 'bottom', 'left')),\n popoverAnchor: Schema.optional(Schema.Any),\n popoverAnchorId: Schema.optional(Schema.String),\n /** Data to be passed to the popover Surface. */\n popoverContent: Schema.optional(Schema.Any),\n\n toasts: Schema.mutable(Schema.Array(LayoutAction.Toast)),\n currentUndoId: Schema.optional(Schema.String),\n\n activeDeck: Schema.String,\n previousDeck: Schema.String,\n decks: Schema.mutable(Schema.Record({ key: Schema.String, value: Schema.mutable(DeckState) })),\n previousMode: Schema.mutable(Schema.Record({ key: Schema.String, value: LayoutMode })),\n deck: Schema.mutable(DeckState),\n\n /** The identifier of a component to scroll into view when it is mounted. */\n scrollIntoView: Schema.optional(Schema.String),\n}).pipe(Schema.mutable);\n\nexport type DeckPluginState = Schema.Schema.Type<typeof DeckPluginState>;\n\nexport const DECK_ACTION = `${DECK_PLUGIN}/action`;\n\nexport namespace DeckAction {\n const PartAdjustmentSchema = Schema.Union(\n Schema.Literal('close').annotations({ description: 'Close the plank.' }),\n Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),\n Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),\n Schema.Literal('solo--fullscreen').annotations({ description: 'Fullscreen the plank.' }),\n Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),\n Schema.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),\n );\n export type PartAdjustment = Schema.Schema.Type<typeof PartAdjustmentSchema>;\n export const Adjustment = Schema.mutable(Schema.Struct({ id: Schema.String, type: PartAdjustmentSchema }));\n export type Adjustment = Schema.Schema.Type<typeof Adjustment>;\n\n // An atomic transaction to apply to the deck, describing which element to move to which location.\n export class Adjust extends Schema.TaggedClass<Adjust>()(`${DECK_ACTION}/adjust`, {\n input: Adjustment,\n output: Schema.Void,\n }) {}\n\n export class UpdatePlankSize extends Schema.TaggedClass<UpdatePlankSize>()(`${DECK_ACTION}/update-plank-size`, {\n input: Schema.Struct({\n id: Schema.String,\n size: Schema.Number,\n }),\n output: Schema.Void,\n }) {}\n\n export class ChangeCompanion extends Schema.TaggedClass<ChangeCompanion>()(`${DECK_ACTION}/change-companion`, {\n input: Schema.Struct({\n primary: Schema.String,\n companion: Schema.Union(Schema.String, Schema.Null),\n }),\n output: Schema.Void,\n }) {}\n}\n"],
5
- "mappings": ";;;;;;AAIA,SAASA,cAAc;AAEvB,SAASC,oBAAoB;AAK7B,SAASC,iCAAiC;AAEnC,IAAMC,uBAAuB;AAC7B,IAAMC,sBAAsB;AAG5B,IAAMC,oBAAoB;EAAC;EAAS;;AAGpC,IAAMC,oBAAoB;EAAC;EAAQ;;AAMnC,IAAMC,qBAAqBC,OAAOC,OAAO;EAC9CC,WAAWF,OAAOG,SAASH,OAAOI,OAAO;EACzCC,YAAYL,OAAOG,SAASH,OAAOI,OAAO;EAC1CE,iBAAiBN,OAAOG,SAASH,OAAOI,OAAO;EAC/CG,sBAAsBP,OAAOG,SAASH,OAAOI,OAAO;EACpDI,qBAAqBR,OAAOG,SAASH,OAAOS,QAAO,GAAIZ,iBAAAA,CAAAA;EACvDa,YAAYV,OAAOG,SAASH,OAAOS,QAAO,GAAIX,iBAAAA,CAAAA;AAChD,CAAA,EAAGa,KAAKX,OAAOY,OAAO;AAGf,IAAMC,cAAcb,OAAOc,OAAO;EAAEC,KAAKf,OAAOgB;EAAQC,OAAOjB,OAAOkB;AAAO,CAAA;AAI7E,IAAMC,YAAYnB,OAAOC,OAAO;;EAErCmB,aAAapB,OAAOI;EACpBiB,QAAQrB,OAAOY,QAAQZ,OAAOsB,MAAMtB,OAAOgB,MAAM,CAAA;;EAEjDO,kBAAkBvB,OAAOG,SAASH,OAAOY,QAAQZ,OAAOc,OAAO;IAAEC,KAAKf,OAAOgB;IAAQC,OAAOjB,OAAOgB;EAAO,CAAA,CAAA,CAAA;EAC1GQ,UAAUxB,OAAOY,QAAQZ,OAAOsB,MAAMtB,OAAOgB,MAAM,CAAA;EACnDS,MAAMzB,OAAOG,SAASH,OAAOgB,MAAM;EACnCU,YAAY1B,OAAOI;EACnBuB,aAAa3B,OAAOY,QAAQC,WAAAA;EAC5Be,sBAAsB5B,OAAOY,QAAQC,WAAAA;AACvC,CAAA;AAGO,IAAMgB,cAAyB;EACpCT,aAAa;EACbC,QAAQ,CAAA;EACRE,kBAAkB,CAAC;EACnBC,UAAU,CAAA;EACVC,MAAMK;EACNJ,YAAY;EACZC,aAAa,CAAC;EACdC,sBAAsB,CAAC;AACzB;AAEA,IAAMG,aAAa/B,OAAOS,QAAQ,QAAQ,QAAQ,kBAAA;AAE3C,IAAMuB,eAAe,CAACf,UAAoCjB,OAAOiC,GAAGF,UAAAA,EAAYd,KAAAA;AAEhF,IAAMiB,UAAU,CAACC,SAAAA;AACtB,MAAIA,KAAKV,MAAM;AACb,WAAOU,KAAKT,aAAa,qBAAqB;EAChD;AAEA,SAAO;AACT;AAGO,IAAMU,kBAAkBpC,OAAOC,OAAO;EAC3CoC,cAAcrC,OAAOS,QAAQ,UAAU,aAAa,UAAA;EACpD6B,2BAA2BtC,OAAOS,QAAQ,UAAU,aAAa,UAAA;EACjE8B,2BAA2BvC,OAAOG,SAASH,OAAOgB,MAAM;EAExDwB,YAAYxC,OAAOI;EACnBqC,YAAYzC,OAAOG,SAASH,OAAOS,QAAQ,WAAW,OAAA,CAAA;EACtDiC,kBAAkB1C,OAAOG,SAASH,OAAOS,QAAQ,SAAS,UAAU,KAAA,CAAA;EACpEkC,sBAAsB3C,OAAOG,SAASH,OAAOgB,MAAM;EACnD4B,oBAAoB5C,OAAOG,SAASH,OAAOc,OAAO;IAAEC,KAAKf,OAAOgB;IAAQC,OAAOjB,OAAO6C;EAAI,CAAA,CAAA;;EAE1FC,eAAe9C,OAAOG,SAASH,OAAO6C,GAAG;EAEzCE,aAAa/C,OAAOI;EACpB4C,aAAahD,OAAOG,SAASH,OAAOS,QAAQ,OAAO,SAAS,UAAU,MAAA,CAAA;EACtEwC,eAAejD,OAAOG,SAASH,OAAO6C,GAAG;EACzCK,iBAAiBlD,OAAOG,SAASH,OAAOgB,MAAM;;EAE9CmC,gBAAgBnD,OAAOG,SAASH,OAAO6C,GAAG;EAE1CO,QAAQpD,OAAOY,QAAQZ,OAAOsB,MAAM+B,aAAaC,KAAK,CAAA;EACtDC,eAAevD,OAAOG,SAASH,OAAOgB,MAAM;EAE5CwC,YAAYxD,OAAOgB;EACnByC,cAAczD,OAAOgB;EACrB0C,OAAO1D,OAAOY,QAAQZ,OAAOc,OAAO;IAAEC,KAAKf,OAAOgB;IAAQC,OAAOjB,OAAOY,QAAQO,SAAAA;EAAW,CAAA,CAAA;EAC3FwC,cAAc3D,OAAOY,QAAQZ,OAAOc,OAAO;IAAEC,KAAKf,OAAOgB;IAAQC,OAAOc;EAAW,CAAA,CAAA;EACnFI,MAAMnC,OAAOY,QAAQO,SAAAA;;EAGrByC,gBAAgB5D,OAAOG,SAASH,OAAOgB,MAAM;AAC/C,CAAA,EAAGL,KAAKX,OAAOY,OAAO;AAIf,IAAMiD,cAAc,GAAGC,WAAAA;UAEbC,aAAAA;AACf,QAAMC,uBAAuBhE,OAAOiE,MAClCjE,OAAOS,QAAQ,OAAA,EAASyD,YAAY;IAAEC,aAAa;EAAmB,CAAA,GACtEnE,OAAOS,QAAQ,WAAA,EAAayD,YAAY;IAAEC,aAAa;EAA4B,CAAA,GACnFnE,OAAOS,QAAQ,MAAA,EAAQyD,YAAY;IAAEC,aAAa;EAAkB,CAAA,GACpEnE,OAAOS,QAAQ,kBAAA,EAAoByD,YAAY;IAAEC,aAAa;EAAwB,CAAA,GACtFnE,OAAOS,QAAQ,iBAAA,EAAmByD,YAAY;IAAEC,aAAa;EAAgD,CAAA,GAC7GnE,OAAOS,QAAQ,eAAA,EAAiByD,YAAY;IAAEC,aAAa;EAA8C,CAAA,CAAA;cAG9FC,aAAapE,OAAOY,QAAQZ,OAAOC,OAAO;IAAEoE,IAAIrE,OAAOgB;IAAQsD,MAAMN;EAAqB,CAAA,CAAA;EAIhG,MAAMO,eAAevE,OAAOwE,YAAW,EAAW,GAAGX,WAAAA,WAAsB;IAChFY,OAAKV,YAAEK;IACPM,QAAQ1E,OAAO2E;EACjB,CAAA,EAAA;EAAI;cAHSJ,SAAAA;EAKN,MAAMK,wBAAwB5E,OAAOwE,YAAW,EAAoB,GAAGX,WAAAA,sBAAiC;IAC7GY,OAAOzE,OAAOC,OAAO;MACnBoE,IAAIrE,OAAOgB;MACX6D,MAAM7E,OAAOkB;IACf,CAAA;IACAwD,QAAQ1E,OAAO2E;EACjB,CAAA,EAAA;EAAI;cANSC,kBAAAA;EAQN,MAAME,wBAAwB9E,OAAOwE,YAAW,EAAoB,GAAGX,WAAAA,qBAAgC;IAC5GY,OAAOzE,OAAOC,OAAO;MACnB8E,SAAS/E,OAAOgB;MAChBgE,WAAWhF,OAAOiE,MAAMjE,OAAOgB,QAAQhB,OAAOiF,IAAI;IACpD,CAAA;IACAP,QAAQ1E,OAAO2E;EACjB,CAAA,EAAA;EAAI;cANSG,kBAAAA;AAOf,GAlCiBf,eAAAA,aAAAA,CAAAA,EAAAA;;",
6
- "names": ["Schema", "LayoutAction", "ATTENDABLE_PATH_SEPARATOR", "PLANK_COMPANION_TYPE", "DECK_COMPANION_TYPE", "NewPlankPositions", "OverscrollOptions", "DeckSettingsSchema", "Schema", "Struct", "showHints", "optional", "Boolean", "enableDeck", "enableStatusbar", "enableNativeRedirect", "newPlankPositioning", "Literal", "overscroll", "pipe", "mutable", "PlankSizing", "Record", "key", "String", "value", "Number", "DeckState", "initialized", "active", "Array", "activeCompanions", "inactive", "solo", "fullscreen", "plankSizing", "companionFrameSizing", "defaultDeck", "undefined", "LayoutMode", "isLayoutMode", "is", "getMode", "deck", "DeckPluginState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "Any", "dialogContent", "popoverOpen", "popoverSide", "popoverAnchor", "popoverAnchorId", "popoverContent", "toasts", "LayoutAction", "Toast", "currentUndoId", "activeDeck", "previousDeck", "decks", "previousMode", "scrollIntoView", "DECK_ACTION", "DECK_PLUGIN", "DeckAction", "PartAdjustmentSchema", "Union", "annotations", "description", "Adjustment", "id", "type", "Adjust", "TaggedClass", "input", "output", "Void", "UpdatePlankSize", "size", "ChangeCompanion", "primary", "companion", "Null"]
7
- }