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

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 (518) hide show
  1. package/dist/lib/browser/add-toast-JWJOQNVL.mjs +24 -0
  2. package/dist/lib/browser/add-toast-JWJOQNVL.mjs.map +7 -0
  3. package/dist/lib/browser/adjust-RG6LIQLX.mjs +95 -0
  4. package/dist/lib/browser/adjust-RG6LIQLX.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-GLB73Q6U.mjs +22 -0
  6. package/dist/lib/browser/chunk-GLB73Q6U.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  8. package/dist/lib/browser/chunk-LSZ47AY3.mjs +48 -0
  9. package/dist/lib/browser/chunk-LSZ47AY3.mjs.map +7 -0
  10. package/dist/lib/browser/chunk-MARE7ZFK.mjs +215 -0
  11. package/dist/lib/browser/chunk-MARE7ZFK.mjs.map +7 -0
  12. package/dist/lib/browser/chunk-XM263CQU.mjs +72 -0
  13. package/dist/lib/browser/chunk-XM263CQU.mjs.map +7 -0
  14. package/dist/lib/browser/chunk-ZYYOSX5I.mjs +69 -0
  15. package/dist/lib/browser/chunk-ZYYOSX5I.mjs.map +7 -0
  16. package/dist/lib/browser/close-URA766JO.mjs +44 -0
  17. package/dist/lib/browser/close-URA766JO.mjs.map +7 -0
  18. package/dist/lib/browser/index.mjs +114 -144
  19. package/dist/lib/browser/index.mjs.map +4 -4
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/open-OPFOOHCQ.mjs +147 -0
  22. package/dist/lib/browser/open-OPFOOHCQ.mjs.map +7 -0
  23. package/dist/lib/browser/operations/index.mjs +13 -0
  24. package/dist/lib/browser/operations/index.mjs.map +7 -0
  25. package/dist/lib/browser/revert-workspace-KP2Y4QLG.mjs +21 -0
  26. package/dist/lib/browser/revert-workspace-KP2Y4QLG.mjs.map +7 -0
  27. package/dist/lib/browser/scroll-into-view-S5H2FGSQ.mjs +21 -0
  28. package/dist/lib/browser/scroll-into-view-S5H2FGSQ.mjs.map +7 -0
  29. package/dist/lib/browser/set-AEKFFSIX.mjs +37 -0
  30. package/dist/lib/browser/set-AEKFFSIX.mjs.map +7 -0
  31. package/dist/lib/browser/set-layout-mode-CWIGQDFZ.mjs +85 -0
  32. package/dist/lib/browser/set-layout-mode-CWIGQDFZ.mjs.map +7 -0
  33. package/dist/lib/browser/show-undo-XFVEDKYC.mjs +59 -0
  34. package/dist/lib/browser/show-undo-XFVEDKYC.mjs.map +7 -0
  35. package/dist/lib/browser/switch-workspace-DSAAXZSI.mjs +60 -0
  36. package/dist/lib/browser/switch-workspace-DSAAXZSI.mjs.map +7 -0
  37. package/dist/lib/browser/translations.mjs +57 -0
  38. package/dist/lib/browser/translations.mjs.map +7 -0
  39. package/dist/lib/browser/types/index.mjs +32 -0
  40. package/dist/lib/browser/update-companion-IDBBBHT3.mjs +32 -0
  41. package/dist/lib/browser/update-companion-IDBBBHT3.mjs.map +7 -0
  42. package/dist/lib/browser/update-complementary-55PNO5MD.mjs +28 -0
  43. package/dist/lib/browser/update-complementary-55PNO5MD.mjs.map +7 -0
  44. package/dist/lib/browser/update-dialog-VNARIANC.mjs +29 -0
  45. package/dist/lib/browser/update-dialog-VNARIANC.mjs.map +7 -0
  46. package/dist/lib/browser/update-plank-size-H63PRRXS.mjs +28 -0
  47. package/dist/lib/browser/update-plank-size-H63PRRXS.mjs.map +7 -0
  48. package/dist/lib/browser/update-popover-ODTPZ3JL.mjs +33 -0
  49. package/dist/lib/browser/update-popover-ODTPZ3JL.mjs.map +7 -0
  50. package/dist/lib/browser/update-sidebar-JDVQ36WK.mjs +25 -0
  51. package/dist/lib/browser/update-sidebar-JDVQ36WK.mjs.map +7 -0
  52. package/dist/lib/node-esm/add-toast-JUTN4GTI.mjs +25 -0
  53. package/dist/lib/node-esm/add-toast-JUTN4GTI.mjs.map +7 -0
  54. package/dist/lib/node-esm/adjust-P5QK33P4.mjs +96 -0
  55. package/dist/lib/node-esm/adjust-P5QK33P4.mjs.map +7 -0
  56. package/dist/lib/node-esm/chunk-FO7YDJZ3.mjs +216 -0
  57. package/dist/lib/node-esm/chunk-FO7YDJZ3.mjs.map +7 -0
  58. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  59. package/dist/lib/node-esm/chunk-KY7ZCANM.mjs +50 -0
  60. package/dist/lib/node-esm/chunk-KY7ZCANM.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-L7OVX7CV.mjs +73 -0
  62. package/dist/lib/node-esm/chunk-L7OVX7CV.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-SHSR2CYO.mjs +24 -0
  64. package/dist/lib/node-esm/chunk-SHSR2CYO.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-WGBUTT5K.mjs +71 -0
  66. package/dist/lib/node-esm/chunk-WGBUTT5K.mjs.map +7 -0
  67. package/dist/lib/node-esm/close-U5VC7ERP.mjs +45 -0
  68. package/dist/lib/node-esm/close-U5VC7ERP.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +114 -144
  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-4B3P5XGS.mjs +148 -0
  73. package/dist/lib/node-esm/open-4B3P5XGS.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-QD63M2U7.mjs +22 -0
  77. package/dist/lib/node-esm/revert-workspace-QD63M2U7.mjs.map +7 -0
  78. package/dist/lib/node-esm/scroll-into-view-G5M2EWK7.mjs +22 -0
  79. package/dist/lib/node-esm/scroll-into-view-G5M2EWK7.mjs.map +7 -0
  80. package/dist/lib/node-esm/set-ERJCXZBY.mjs +38 -0
  81. package/dist/lib/node-esm/set-ERJCXZBY.mjs.map +7 -0
  82. package/dist/lib/node-esm/set-layout-mode-BOZD7744.mjs +86 -0
  83. package/dist/lib/node-esm/set-layout-mode-BOZD7744.mjs.map +7 -0
  84. package/dist/lib/node-esm/show-undo-H5BRBYDC.mjs +60 -0
  85. package/dist/lib/node-esm/show-undo-H5BRBYDC.mjs.map +7 -0
  86. package/dist/lib/node-esm/switch-workspace-F54PXE5N.mjs +61 -0
  87. package/dist/lib/node-esm/switch-workspace-F54PXE5N.mjs.map +7 -0
  88. package/dist/lib/node-esm/translations.mjs +58 -0
  89. package/dist/lib/node-esm/translations.mjs.map +7 -0
  90. package/dist/lib/node-esm/{types.mjs → types/index.mjs} +13 -15
  91. package/dist/lib/node-esm/update-companion-47LMKL5R.mjs +33 -0
  92. package/dist/lib/node-esm/update-companion-47LMKL5R.mjs.map +7 -0
  93. package/dist/lib/node-esm/update-complementary-7VYYG7L2.mjs +29 -0
  94. package/dist/lib/node-esm/update-complementary-7VYYG7L2.mjs.map +7 -0
  95. package/dist/lib/node-esm/update-dialog-CABL7OWW.mjs +30 -0
  96. package/dist/lib/node-esm/update-dialog-CABL7OWW.mjs.map +7 -0
  97. package/dist/lib/node-esm/update-plank-size-WYTSMZF2.mjs +29 -0
  98. package/dist/lib/node-esm/update-plank-size-WYTSMZF2.mjs.map +7 -0
  99. package/dist/lib/node-esm/update-popover-YZDYGL7G.mjs +34 -0
  100. package/dist/lib/node-esm/update-popover-YZDYGL7G.mjs.map +7 -0
  101. package/dist/lib/node-esm/update-sidebar-HV736LUN.mjs +26 -0
  102. package/dist/lib/node-esm/update-sidebar-HV736LUN.mjs.map +7 -0
  103. package/dist/types/src/DeckPlugin.d.ts +2 -1
  104. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  106. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/check-app-scheme.d.ts +17 -2
  108. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/index.d.ts +196 -12
  110. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  112. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/react-root.d.ts +4 -2
  114. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  115. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  116. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/settings.d.ts +5 -2
  118. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  119. package/dist/types/src/capabilities/state.d.ts +136 -46
  120. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  121. package/dist/types/src/capabilities/tools.d.ts +4 -3
  122. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  123. package/dist/types/src/capabilities/url-handler.d.ts +3 -2
  124. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  125. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +4 -4
  126. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  127. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +61 -0
  128. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -0
  129. package/dist/types/src/components/DeckSettings/index.d.ts +1 -1
  130. package/dist/types/src/components/DeckSettings/index.d.ts.map +1 -1
  131. package/dist/types/src/components/Matrix/Matrix.d.ts +41 -0
  132. package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -0
  133. package/dist/types/src/components/Matrix/Matrix.stories.d.ts +17 -0
  134. package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -0
  135. package/dist/types/src/components/Matrix/index.d.ts +3 -0
  136. package/dist/types/src/components/Matrix/index.d.ts.map +1 -0
  137. package/dist/types/src/components/index.d.ts +3 -2
  138. package/dist/types/src/components/index.d.ts.map +1 -1
  139. package/dist/types/src/{components/DeckLayout → containers/Deck}/Banner.d.ts +1 -1
  140. package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -0
  141. package/dist/types/src/containers/Deck/Deck.d.ts +25 -0
  142. package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -0
  143. package/dist/types/src/containers/Deck/Deck.stories.d.ts +61 -0
  144. package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -0
  145. package/dist/types/src/containers/Deck/DeckContent.d.ts +7 -0
  146. package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -0
  147. package/dist/types/src/containers/Deck/DeckRoot.d.ts +39 -0
  148. package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -0
  149. package/dist/types/src/containers/Deck/DeckViewport.d.ts +16 -0
  150. package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -0
  151. package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -0
  152. package/dist/types/src/containers/Deck/index.d.ts +2 -0
  153. package/dist/types/src/containers/Deck/index.d.ts.map +1 -0
  154. package/dist/types/src/containers/DeckLayout/ActiveNode.d.ts.map +1 -0
  155. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts +5 -0
  156. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -0
  157. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +63 -0
  158. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
  159. package/dist/types/src/containers/DeckLayout/Dialog.d.ts.map +1 -0
  160. package/dist/types/src/containers/DeckLayout/Fallback.d.ts +2 -0
  161. package/dist/types/src/containers/DeckLayout/Fallback.d.ts.map +1 -0
  162. package/dist/types/src/containers/DeckLayout/Popover.d.ts +5 -0
  163. package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -0
  164. package/dist/types/src/containers/DeckLayout/Toast.d.ts +10 -0
  165. package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -0
  166. package/dist/types/src/containers/DeckLayout/constants.d.ts.map +1 -0
  167. package/dist/types/src/containers/DeckLayout/index.d.ts +4 -0
  168. package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -0
  169. package/dist/types/src/containers/Plank/Plank.d.ts +17 -0
  170. package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -0
  171. package/dist/types/src/containers/Plank/Plank.stories.d.ts +61 -0
  172. package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -0
  173. package/dist/types/src/containers/Plank/PlankComponent.d.ts +17 -0
  174. package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +1 -0
  175. package/dist/types/src/containers/Plank/PlankContent.d.ts +10 -0
  176. package/dist/types/src/containers/Plank/PlankContent.d.ts.map +1 -0
  177. package/dist/types/src/{components → containers}/Plank/PlankControls.d.ts +5 -6
  178. package/dist/types/src/containers/Plank/PlankControls.d.ts.map +1 -0
  179. package/dist/types/src/containers/Plank/PlankError.d.ts +15 -0
  180. package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -0
  181. package/dist/types/src/{components → containers}/Plank/PlankHeading.d.ts +5 -4
  182. package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +1 -0
  183. package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts.map +1 -1
  184. package/dist/types/src/containers/Plank/PlankRoot.d.ts +37 -0
  185. package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -0
  186. package/dist/types/src/containers/Plank/index.d.ts +4 -0
  187. package/dist/types/src/containers/Plank/index.d.ts.map +1 -0
  188. package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -0
  189. package/dist/types/src/containers/Sidebar/Sidebar.d.ts.map +1 -0
  190. package/dist/types/src/{components → containers}/Sidebar/SidebarButton.d.ts +1 -1
  191. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -0
  192. package/dist/types/src/{components → containers}/Sidebar/index.d.ts.map +1 -1
  193. package/dist/types/src/containers/index.d.ts +6 -0
  194. package/dist/types/src/containers/index.d.ts.map +1 -0
  195. package/dist/types/src/hooks/index.d.ts +2 -0
  196. package/dist/types/src/hooks/index.d.ts.map +1 -1
  197. package/dist/types/src/hooks/useBreakpoints.d.ts +1 -1
  198. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  199. package/dist/types/src/hooks/useDeckCompanions.d.ts +4 -4
  200. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  201. package/dist/types/src/hooks/useDeckState.d.ts +17 -0
  202. package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
  203. package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
  204. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  205. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  206. package/dist/types/src/hooks/useMainSize.d.ts.map +1 -1
  207. package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
  208. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  209. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  210. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  211. package/dist/types/src/index.d.ts +1 -2
  212. package/dist/types/src/index.d.ts.map +1 -1
  213. package/dist/types/src/layout.d.ts +20 -9
  214. package/dist/types/src/layout.d.ts.map +1 -1
  215. package/dist/types/src/layout.test.d.ts +2 -0
  216. package/dist/types/src/layout.test.d.ts.map +1 -0
  217. package/dist/types/src/meta.d.ts +2 -3
  218. package/dist/types/src/meta.d.ts.map +1 -1
  219. package/dist/types/src/operations/add-toast.d.ts +5 -0
  220. package/dist/types/src/operations/add-toast.d.ts.map +1 -0
  221. package/dist/types/src/operations/adjust.d.ts +5 -0
  222. package/dist/types/src/operations/adjust.d.ts.map +1 -0
  223. package/dist/types/src/operations/close.d.ts +5 -0
  224. package/dist/types/src/operations/close.d.ts.map +1 -0
  225. package/dist/types/src/operations/definitions.d.ts +15 -0
  226. package/dist/types/src/operations/definitions.d.ts.map +1 -0
  227. package/dist/types/src/operations/helpers.d.ts +3 -0
  228. package/dist/types/src/operations/helpers.d.ts.map +1 -0
  229. package/dist/types/src/operations/index.d.ts +4 -0
  230. package/dist/types/src/operations/index.d.ts.map +1 -0
  231. package/dist/types/src/operations/open.d.ts +5 -0
  232. package/dist/types/src/operations/open.d.ts.map +1 -0
  233. package/dist/types/src/operations/revert-workspace.d.ts +5 -0
  234. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
  235. package/dist/types/src/operations/scroll-into-view.d.ts +5 -0
  236. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -0
  237. package/dist/types/src/operations/set-layout-mode.d.ts +9 -0
  238. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
  239. package/dist/types/src/operations/set.d.ts +5 -0
  240. package/dist/types/src/operations/set.d.ts.map +1 -0
  241. package/dist/types/src/operations/show-undo.d.ts +5 -0
  242. package/dist/types/src/operations/show-undo.d.ts.map +1 -0
  243. package/dist/types/src/operations/switch-workspace.d.ts +5 -0
  244. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
  245. package/dist/types/src/operations/update-companion.d.ts +5 -0
  246. package/dist/types/src/operations/update-companion.d.ts.map +1 -0
  247. package/dist/types/src/operations/update-complementary.d.ts +5 -0
  248. package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
  249. package/dist/types/src/operations/update-dialog.d.ts +5 -0
  250. package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
  251. package/dist/types/src/operations/update-plank-size.d.ts +5 -0
  252. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -0
  253. package/dist/types/src/operations/update-popover.d.ts +5 -0
  254. package/dist/types/src/operations/update-popover.d.ts.map +1 -0
  255. package/dist/types/src/operations/update-sidebar.d.ts +5 -0
  256. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
  257. package/dist/types/src/translations.d.ts +42 -53
  258. package/dist/types/src/translations.d.ts.map +1 -1
  259. package/dist/types/src/types/Settings.d.ts +11 -0
  260. package/dist/types/src/types/Settings.d.ts.map +1 -0
  261. package/dist/types/src/{capabilities → types}/capabilities.d.ts +101 -94
  262. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  263. package/dist/types/src/types/events.d.ts +7 -0
  264. package/dist/types/src/types/events.d.ts.map +1 -0
  265. package/dist/types/src/types/index.d.ts +5 -0
  266. package/dist/types/src/types/index.d.ts.map +1 -0
  267. package/dist/types/src/{types.d.ts → types/schema.d.ts} +67 -66
  268. package/dist/types/src/types/schema.d.ts.map +1 -0
  269. package/dist/types/src/util/index.d.ts +2 -1
  270. package/dist/types/src/util/index.d.ts.map +1 -1
  271. package/dist/types/src/util/layoutAppliesTopbar.d.ts +1 -1
  272. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  273. package/dist/types/src/util/plank-url-params.d.ts +14 -0
  274. package/dist/types/src/util/plank-url-params.d.ts.map +1 -0
  275. package/dist/types/src/util/plank-url-params.test.d.ts +2 -0
  276. package/dist/types/src/util/plank-url-params.test.d.ts.map +1 -0
  277. package/dist/types/src/util/sanitize-persisted-state.d.ts +19 -0
  278. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -0
  279. package/dist/types/src/util/sanitize-persisted-state.test.d.ts +2 -0
  280. package/dist/types/src/util/sanitize-persisted-state.test.d.ts.map +1 -0
  281. package/dist/types/src/util/set-active.d.ts +19 -4
  282. package/dist/types/src/util/set-active.d.ts.map +1 -1
  283. package/dist/types/src/util/set-active.test.d.ts +2 -0
  284. package/dist/types/src/util/set-active.test.d.ts.map +1 -0
  285. package/dist/types/tsconfig.tsbuildinfo +1 -1
  286. package/package.json +93 -55
  287. package/src/DeckPlugin.ts +44 -65
  288. package/src/capabilities/app-graph-builder.ts +113 -127
  289. package/src/capabilities/check-app-scheme.ts +123 -24
  290. package/src/capabilities/index.ts +13 -13
  291. package/src/capabilities/operation-handler.ts +16 -0
  292. package/src/capabilities/react-root.tsx +37 -28
  293. package/src/capabilities/react-surface.tsx +28 -22
  294. package/src/capabilities/settings.ts +30 -19
  295. package/src/capabilities/state.ts +74 -87
  296. package/src/capabilities/tools.ts +65 -55
  297. package/src/capabilities/url-handler.ts +221 -49
  298. package/src/components/DeckSettings/DeckSettings.stories.tsx +38 -0
  299. package/src/components/DeckSettings/DeckSettings.tsx +19 -73
  300. package/src/components/DeckSettings/index.ts +2 -2
  301. package/src/components/Matrix/Matrix.stories.tsx +220 -0
  302. package/src/components/Matrix/Matrix.tsx +205 -0
  303. package/src/components/Matrix/SPEC.md +219 -0
  304. package/src/components/Matrix/index.ts +6 -0
  305. package/src/components/index.ts +6 -3
  306. package/src/containers/Deck/Banner.tsx +41 -0
  307. package/src/containers/Deck/Deck.stories.tsx +81 -0
  308. package/src/containers/Deck/Deck.tsx +21 -0
  309. package/src/containers/Deck/DeckContent.tsx +105 -0
  310. package/src/containers/Deck/DeckRoot.tsx +50 -0
  311. package/src/containers/Deck/DeckViewport.tsx +456 -0
  312. package/src/{components/DeckLayout → containers/Deck}/StatusBar.tsx +4 -4
  313. package/src/containers/Deck/index.ts +5 -0
  314. package/src/{components → containers}/DeckLayout/ActiveNode.tsx +8 -3
  315. package/src/containers/DeckLayout/DeckLayout.stories.tsx +397 -0
  316. package/src/containers/DeckLayout/DeckLayout.tsx +62 -0
  317. package/src/containers/DeckLayout/Dialog.tsx +52 -0
  318. package/src/containers/DeckLayout/Fallback.tsx +24 -0
  319. package/src/containers/DeckLayout/Popover.tsx +161 -0
  320. package/src/{components → containers}/DeckLayout/Toast.tsx +30 -5
  321. package/src/{components → containers}/DeckLayout/constants.ts +1 -0
  322. package/src/{components → containers}/DeckLayout/index.ts +3 -2
  323. package/src/containers/Plank/Plank.stories.tsx +108 -0
  324. package/src/containers/Plank/Plank.tsx +22 -0
  325. package/src/containers/Plank/PlankComponent.tsx +217 -0
  326. package/src/containers/Plank/PlankContent.tsx +45 -0
  327. package/src/{components → containers}/Plank/PlankControls.tsx +45 -38
  328. package/src/containers/Plank/PlankError.tsx +79 -0
  329. package/src/{components → containers}/Plank/PlankHeading.tsx +70 -65
  330. package/src/{components → containers}/Plank/PlankLoading.tsx +1 -1
  331. package/src/containers/Plank/PlankRoot.tsx +49 -0
  332. package/src/{components → containers}/Plank/index.ts +0 -2
  333. package/src/containers/Sidebar/ComplementarySidebar.tsx +210 -0
  334. package/src/containers/Sidebar/Sidebar.tsx +44 -0
  335. package/src/containers/Sidebar/SidebarButton.tsx +100 -0
  336. package/src/containers/index.ts +11 -0
  337. package/src/hooks/index.ts +2 -0
  338. package/src/hooks/useCompanions.ts +3 -3
  339. package/src/hooks/useDeckCompanions.ts +9 -11
  340. package/src/hooks/useDeckState.ts +73 -0
  341. package/src/hooks/useHoistStatusbar.ts +4 -5
  342. package/src/hooks/useMainSize.ts +2 -2
  343. package/src/hooks/useNodeActionExpander.ts +4 -4
  344. package/src/hooks/useSelectedCompanion.ts +32 -0
  345. package/src/index.ts +1 -2
  346. package/src/layout.test.ts +59 -0
  347. package/src/layout.ts +38 -40
  348. package/src/meta.ts +8 -5
  349. package/src/operations/add-toast.ts +24 -0
  350. package/src/operations/adjust.ts +83 -0
  351. package/src/operations/close.ts +35 -0
  352. package/src/operations/definitions.ts +49 -0
  353. package/src/operations/helpers.ts +22 -0
  354. package/src/operations/index.ts +26 -0
  355. package/src/operations/open.ts +184 -0
  356. package/src/operations/revert-workspace.ts +22 -0
  357. package/src/operations/scroll-into-view.ts +24 -0
  358. package/src/operations/set-layout-mode.ts +84 -0
  359. package/src/operations/set.ts +36 -0
  360. package/src/operations/show-undo.ts +47 -0
  361. package/src/operations/switch-workspace.ts +60 -0
  362. package/src/operations/update-companion.ts +35 -0
  363. package/src/operations/update-complementary.ts +33 -0
  364. package/src/operations/update-dialog.ts +34 -0
  365. package/src/operations/update-plank-size.ts +29 -0
  366. package/src/operations/update-popover.ts +36 -0
  367. package/src/operations/update-sidebar.ts +28 -0
  368. package/src/translations.ts +42 -52
  369. package/src/types/Settings.ts +42 -0
  370. package/src/types/capabilities.ts +35 -0
  371. package/src/types/events.ts +21 -0
  372. package/src/types/index.ts +8 -0
  373. package/src/{types.ts → types/schema.ts} +51 -58
  374. package/src/util/index.ts +2 -1
  375. package/src/util/layoutAppliesTopbar.ts +2 -2
  376. package/src/util/plank-url-params.test.ts +85 -0
  377. package/src/util/plank-url-params.ts +36 -0
  378. package/src/util/sanitize-persisted-state.test.ts +79 -0
  379. package/src/util/sanitize-persisted-state.ts +52 -0
  380. package/src/util/set-active.test.ts +106 -0
  381. package/src/util/set-active.ts +50 -30
  382. package/src/vite-env.d.ts +5 -0
  383. package/dist/lib/browser/app-graph-builder-JTFSDT2I.mjs +0 -152
  384. package/dist/lib/browser/app-graph-builder-JTFSDT2I.mjs.map +0 -7
  385. package/dist/lib/browser/check-app-scheme-57U62A3A.mjs +0 -32
  386. package/dist/lib/browser/check-app-scheme-57U62A3A.mjs.map +0 -7
  387. package/dist/lib/browser/chunk-7LJDT5OH.mjs +0 -127
  388. package/dist/lib/browser/chunk-7LJDT5OH.mjs.map +0 -7
  389. package/dist/lib/browser/chunk-CNTGBCMK.mjs +0 -145
  390. package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
  391. package/dist/lib/browser/chunk-M57WD3V6.mjs +0 -16
  392. package/dist/lib/browser/chunk-M57WD3V6.mjs.map +0 -7
  393. package/dist/lib/browser/chunk-QBKDUEDV.mjs +0 -1494
  394. package/dist/lib/browser/chunk-QBKDUEDV.mjs.map +0 -7
  395. package/dist/lib/browser/chunk-QO3VIMKQ.mjs +0 -128
  396. package/dist/lib/browser/chunk-QO3VIMKQ.mjs.map +0 -7
  397. package/dist/lib/browser/chunk-XL7EWOGI.mjs +0 -162
  398. package/dist/lib/browser/chunk-XL7EWOGI.mjs.map +0 -7
  399. package/dist/lib/browser/chunk-Z5KITAZW.mjs +0 -13
  400. package/dist/lib/browser/chunk-Z5KITAZW.mjs.map +0 -7
  401. package/dist/lib/browser/intent-resolver-6YMAE4SF.mjs +0 -521
  402. package/dist/lib/browser/intent-resolver-6YMAE4SF.mjs.map +0 -7
  403. package/dist/lib/browser/react-root-UVN2LMU3.mjs +0 -43
  404. package/dist/lib/browser/react-root-UVN2LMU3.mjs.map +0 -7
  405. package/dist/lib/browser/react-surface-WOLHGHMN.mjs +0 -40
  406. package/dist/lib/browser/react-surface-WOLHGHMN.mjs.map +0 -7
  407. package/dist/lib/browser/settings-L5CR5GTJ.mjs +0 -29
  408. package/dist/lib/browser/settings-L5CR5GTJ.mjs.map +0 -7
  409. package/dist/lib/browser/state-ZTYWMORZ.mjs +0 -10
  410. package/dist/lib/browser/tools-2YYFHQAS.mjs +0 -88
  411. package/dist/lib/browser/tools-2YYFHQAS.mjs.map +0 -7
  412. package/dist/lib/browser/types.mjs +0 -34
  413. package/dist/lib/browser/url-handler-KZW7GBA2.mjs +0 -70
  414. package/dist/lib/browser/url-handler-KZW7GBA2.mjs.map +0 -7
  415. package/dist/lib/node-esm/app-graph-builder-YCSX45KJ.mjs +0 -153
  416. package/dist/lib/node-esm/app-graph-builder-YCSX45KJ.mjs.map +0 -7
  417. package/dist/lib/node-esm/check-app-scheme-3YZIA73T.mjs +0 -33
  418. package/dist/lib/node-esm/check-app-scheme-3YZIA73T.mjs.map +0 -7
  419. package/dist/lib/node-esm/chunk-ANLUUC3J.mjs +0 -129
  420. package/dist/lib/node-esm/chunk-ANLUUC3J.mjs.map +0 -7
  421. package/dist/lib/node-esm/chunk-F4YIQ5GG.mjs +0 -128
  422. package/dist/lib/node-esm/chunk-F4YIQ5GG.mjs.map +0 -7
  423. package/dist/lib/node-esm/chunk-HHG6H2BX.mjs +0 -15
  424. package/dist/lib/node-esm/chunk-HHG6H2BX.mjs.map +0 -7
  425. package/dist/lib/node-esm/chunk-KTPDAVNM.mjs +0 -17
  426. package/dist/lib/node-esm/chunk-KTPDAVNM.mjs.map +0 -7
  427. package/dist/lib/node-esm/chunk-NMSUKHE3.mjs +0 -1495
  428. package/dist/lib/node-esm/chunk-NMSUKHE3.mjs.map +0 -7
  429. package/dist/lib/node-esm/chunk-QFKYT4JK.mjs +0 -163
  430. package/dist/lib/node-esm/chunk-QFKYT4JK.mjs.map +0 -7
  431. package/dist/lib/node-esm/chunk-UJGQAMF7.mjs +0 -147
  432. package/dist/lib/node-esm/chunk-UJGQAMF7.mjs.map +0 -7
  433. package/dist/lib/node-esm/intent-resolver-URTWBGD7.mjs +0 -522
  434. package/dist/lib/node-esm/intent-resolver-URTWBGD7.mjs.map +0 -7
  435. package/dist/lib/node-esm/react-root-GFX4GOJT.mjs +0 -44
  436. package/dist/lib/node-esm/react-root-GFX4GOJT.mjs.map +0 -7
  437. package/dist/lib/node-esm/react-surface-F6L5PLWK.mjs +0 -41
  438. package/dist/lib/node-esm/react-surface-F6L5PLWK.mjs.map +0 -7
  439. package/dist/lib/node-esm/settings-WE3TBMOC.mjs +0 -30
  440. package/dist/lib/node-esm/settings-WE3TBMOC.mjs.map +0 -7
  441. package/dist/lib/node-esm/state-DUK6WFDX.mjs +0 -11
  442. package/dist/lib/node-esm/tools-HH6NN7HB.mjs +0 -89
  443. package/dist/lib/node-esm/tools-HH6NN7HB.mjs.map +0 -7
  444. package/dist/lib/node-esm/url-handler-774BWWKI.mjs +0 -71
  445. package/dist/lib/node-esm/url-handler-774BWWKI.mjs.map +0 -7
  446. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  447. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  448. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  449. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +0 -1
  450. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +0 -1
  451. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts +0 -3
  452. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +0 -1
  453. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +0 -6
  454. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +0 -1
  455. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +0 -1
  456. package/dist/types/src/components/DeckLayout/Fallback.d.ts +0 -3
  457. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +0 -1
  458. package/dist/types/src/components/DeckLayout/Popover.d.ts +0 -5
  459. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +0 -1
  460. package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +0 -1
  461. package/dist/types/src/components/DeckLayout/Toast.d.ts +0 -5
  462. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +0 -1
  463. package/dist/types/src/components/DeckLayout/Topbar.d.ts +0 -3
  464. package/dist/types/src/components/DeckLayout/Topbar.d.ts.map +0 -1
  465. package/dist/types/src/components/DeckLayout/constants.d.ts.map +0 -1
  466. package/dist/types/src/components/DeckLayout/index.d.ts +0 -4
  467. package/dist/types/src/components/DeckLayout/index.d.ts.map +0 -1
  468. package/dist/types/src/components/Plank/Plank.d.ts +0 -27
  469. package/dist/types/src/components/Plank/Plank.d.ts.map +0 -1
  470. package/dist/types/src/components/Plank/Plank.stories.d.ts +0 -8
  471. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +0 -1
  472. package/dist/types/src/components/Plank/PlankControls.d.ts.map +0 -1
  473. package/dist/types/src/components/Plank/PlankError.d.ts +0 -13
  474. package/dist/types/src/components/Plank/PlankError.d.ts.map +0 -1
  475. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +0 -1
  476. package/dist/types/src/components/Plank/index.d.ts +0 -6
  477. package/dist/types/src/components/Plank/index.d.ts.map +0 -1
  478. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +0 -1
  479. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +0 -1
  480. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +0 -1
  481. package/dist/types/src/components/fragments.d.ts +0 -4
  482. package/dist/types/src/components/fragments.d.ts.map +0 -1
  483. package/dist/types/src/events.d.ts +0 -4
  484. package/dist/types/src/events.d.ts.map +0 -1
  485. package/dist/types/src/types.d.ts.map +0 -1
  486. package/dist/types/src/util/overscroll.d.ts +0 -47
  487. package/dist/types/src/util/overscroll.d.ts.map +0 -1
  488. package/src/capabilities/capabilities.ts +0 -14
  489. package/src/capabilities/intent-resolver.ts +0 -468
  490. package/src/components/DeckLayout/Banner.tsx +0 -39
  491. package/src/components/DeckLayout/ContentEmpty.tsx +0 -31
  492. package/src/components/DeckLayout/DeckLayout.tsx +0 -301
  493. package/src/components/DeckLayout/Dialog.tsx +0 -36
  494. package/src/components/DeckLayout/Fallback.tsx +0 -28
  495. package/src/components/DeckLayout/Popover.tsx +0 -104
  496. package/src/components/DeckLayout/Topbar.tsx +0 -11
  497. package/src/components/Plank/Plank.stories.tsx +0 -55
  498. package/src/components/Plank/Plank.tsx +0 -266
  499. package/src/components/Plank/PlankError.tsx +0 -51
  500. package/src/components/Sidebar/ComplementarySidebar.tsx +0 -193
  501. package/src/components/Sidebar/Sidebar.tsx +0 -42
  502. package/src/components/Sidebar/SidebarButton.tsx +0 -87
  503. package/src/components/fragments.ts +0 -14
  504. package/src/events.ts +0 -11
  505. package/src/util/overscroll.ts +0 -69
  506. /package/dist/lib/browser/{state-ZTYWMORZ.mjs.map → chunk-J5LGTIGS.mjs.map} +0 -0
  507. /package/dist/lib/browser/{types.mjs.map → types/index.mjs.map} +0 -0
  508. /package/dist/lib/node-esm/{state-DUK6WFDX.mjs.map → chunk-HSLMI22Q.mjs.map} +0 -0
  509. /package/dist/lib/node-esm/{types.mjs.map → types/index.mjs.map} +0 -0
  510. /package/dist/types/src/{components/DeckLayout → containers/Deck}/StatusBar.d.ts +0 -0
  511. /package/dist/types/src/{components → containers}/DeckLayout/ActiveNode.d.ts +0 -0
  512. /package/dist/types/src/{components → containers}/DeckLayout/Dialog.d.ts +0 -0
  513. /package/dist/types/src/{components → containers}/DeckLayout/constants.d.ts +0 -0
  514. /package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts +0 -0
  515. /package/dist/types/src/{components → containers}/Sidebar/ComplementarySidebar.d.ts +0 -0
  516. /package/dist/types/src/{components → containers}/Sidebar/Sidebar.d.ts +0 -0
  517. /package/dist/types/src/{components → containers}/Sidebar/index.d.ts +0 -0
  518. /package/src/{components → containers}/Sidebar/index.ts +0 -0
@@ -1,1494 +0,0 @@
1
- import {
2
- getCompanionId,
3
- useBreakpoints,
4
- useCompanions,
5
- useDeckCompanions,
6
- useHoistStatusbar,
7
- useMainSize,
8
- useNodeActionExpander
9
- } from "./chunk-7LJDT5OH.mjs";
10
- import {
11
- calculateOverscroll,
12
- layoutAppliesTopbar,
13
- parseEntryId
14
- } from "./chunk-CNTGBCMK.mjs";
15
- import {
16
- DeckCapabilities
17
- } from "./chunk-M57WD3V6.mjs";
18
- import {
19
- DeckAction,
20
- NewPlankPositions,
21
- OverscrollOptions,
22
- PLANK_COMPANION_TYPE,
23
- getMode
24
- } from "./chunk-XL7EWOGI.mjs";
25
- import {
26
- DECK_PLUGIN
27
- } from "./chunk-Z5KITAZW.mjs";
28
-
29
- // src/components/DeckLayout/Banner.tsx
30
- import { useSignals as _useSignals9 } from "@preact-signals/safe-react/tracking";
31
- import React9 from "react";
32
- import { Surface as Surface5 } from "@dxos/app-framework";
33
- import { useTranslation as useTranslation6 } from "@dxos/react-ui";
34
- import { mx as mx4 } from "@dxos/react-ui-theme";
35
-
36
- // src/components/Sidebar/ComplementarySidebar.tsx
37
- import { useSignals as _useSignals7 } from "@preact-signals/safe-react/tracking";
38
- import React7, { Fragment as Fragment2, useCallback as useCallback5, useEffect as useEffect3, useMemo as useMemo3, useState as useState2 } from "react";
39
- import { LayoutAction as LayoutAction4, Surface as Surface3, createIntent as createIntent5, useCapability as useCapability3, useIntentDispatcher as useIntentDispatcher5 } from "@dxos/app-framework";
40
- import { Main, useTranslation as useTranslation5, toLocalizedString as toLocalizedString2, IconButton as IconButton4 } from "@dxos/react-ui";
41
- import { Tabs } from "@dxos/react-ui-tabs";
42
-
43
- // src/components/Sidebar/SidebarButton.tsx
44
- import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
45
- import React, { useCallback } from "react";
46
- import { createIntent, LayoutAction, useCapability, useIntentDispatcher } from "@dxos/app-framework";
47
- import { IconButton, useTranslation } from "@dxos/react-ui";
48
- var ToggleSidebarButton = ({ classNames, variant = "ghost" }) => {
49
- var _effect = _useSignals();
50
- try {
51
- const layoutContext = useCapability(DeckCapabilities.MutableDeckState);
52
- const { t } = useTranslation(DECK_PLUGIN);
53
- return /* @__PURE__ */ React.createElement(IconButton, {
54
- variant,
55
- iconOnly: true,
56
- icon: "ph--sidebar--regular",
57
- size: 4,
58
- label: t("open navigation sidebar label"),
59
- onClick: () => layoutContext.sidebarState = layoutContext.sidebarState === "expanded" ? "collapsed" : "expanded",
60
- classNames
61
- });
62
- } finally {
63
- _effect.f();
64
- }
65
- };
66
- var CloseSidebarButton = () => {
67
- var _effect = _useSignals();
68
- try {
69
- const layoutContext = useCapability(DeckCapabilities.MutableDeckState);
70
- const { t } = useTranslation(DECK_PLUGIN);
71
- return /* @__PURE__ */ React.createElement(IconButton, {
72
- variant: "ghost",
73
- iconOnly: true,
74
- icon: "ph--caret-line-left--regular",
75
- size: 4,
76
- label: t("close navigation sidebar label"),
77
- onClick: () => layoutContext.sidebarState = "collapsed",
78
- classNames: "rounded-none pli-1 dx-focus-ring-inset pie-[max(.5rem,env(safe-area-inset-left))]"
79
- });
80
- } finally {
81
- _effect.f();
82
- }
83
- };
84
- var ToggleComplementarySidebarButton = ({ inR0, classNames, current }) => {
85
- var _effect = _useSignals();
86
- try {
87
- const { dispatchPromise: dispatch } = useIntentDispatcher();
88
- const layoutContext = useCapability(DeckCapabilities.MutableDeckState);
89
- const { t } = useTranslation(DECK_PLUGIN);
90
- const companions = useDeckCompanions();
91
- const handleClick = useCallback(async () => {
92
- layoutContext.complementarySidebarState = layoutContext.complementarySidebarState === "expanded" ? "collapsed" : "expanded";
93
- const firstCompanion = companions[0];
94
- if (layoutContext.complementarySidebarState === "expanded" && !current && firstCompanion) {
95
- await dispatch(createIntent(LayoutAction.UpdateComplementary, {
96
- part: "complementary",
97
- subject: getCompanionId(firstCompanion.id)
98
- }));
99
- }
100
- }, [
101
- layoutContext,
102
- current,
103
- companions,
104
- dispatch
105
- ]);
106
- return /* @__PURE__ */ React.createElement(IconButton, {
107
- iconOnly: true,
108
- onClick: handleClick,
109
- variant: "ghost",
110
- label: t("open complementary sidebar label"),
111
- classNames: [
112
- "[&>svg]:-scale-x-100",
113
- classNames
114
- ],
115
- icon: "ph--sidebar-simple--regular",
116
- size: inR0 ? 5 : 4,
117
- tooltipSide: inR0 ? "left" : void 0
118
- });
119
- } finally {
120
- _effect.f();
121
- }
122
- };
123
-
124
- // src/components/Plank/Plank.tsx
125
- import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
126
- import React6, { memo as memo2, useCallback as useCallback4, useLayoutEffect, useMemo as useMemo2, useRef } from "react";
127
- import { LayoutAction as LayoutAction3, Surface as Surface2, createIntent as createIntent4, useCapability as useCapability2, useAppGraph as useAppGraph2, useIntentDispatcher as useIntentDispatcher4 } from "@dxos/app-framework";
128
- import { debounce } from "@dxos/async";
129
- import { useNode } from "@dxos/plugin-graph";
130
- import { ATTENDABLE_PATH_SEPARATOR, useAttentionAttributes } from "@dxos/react-ui-attention";
131
- import { StackItem as StackItem2, railGridHorizontal } from "@dxos/react-ui-stack";
132
- import { mainIntrinsicSize, mx as mx3 } from "@dxos/react-ui-theme";
133
-
134
- // src/components/Plank/PlankError.tsx
135
- import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
136
- import React5, { useEffect as useEffect2, useState } from "react";
137
- import { useTranslation as useTranslation4 } from "@dxos/react-ui";
138
- import { descriptionMessage, mx as mx2 } from "@dxos/react-ui-theme";
139
-
140
- // src/components/Plank/PlankHeading.tsx
141
- import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
142
- import React3, { Fragment, memo, useCallback as useCallback3, useEffect, useMemo } from "react";
143
- import { createIntent as createIntent3, LayoutAction as LayoutAction2, Surface, useAppGraph, useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework";
144
- import { Icon, IconButton as IconButton3, Popover, toLocalizedString, useTranslation as useTranslation3 } from "@dxos/react-ui";
145
- import { StackItem } from "@dxos/react-ui-stack";
146
- import { TextTooltip } from "@dxos/react-ui-text-tooltip";
147
- import { hoverableControls, hoverableFocusedWithinControls } from "@dxos/react-ui-theme";
148
-
149
- // src/components/Plank/PlankControls.tsx
150
- import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
151
- import React2, { forwardRef, useCallback as useCallback2 } from "react";
152
- import { createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
153
- import { invariant } from "@dxos/invariant";
154
- import { ButtonGroup, IconButton as IconButton2, useTranslation as useTranslation2 } from "@dxos/react-ui";
155
- var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/components/Plank/PlankControls.tsx";
156
- var PlankControl = ({ icon, label: label3, ...props }) => {
157
- var _effect = _useSignals2();
158
- try {
159
- return /* @__PURE__ */ React2.createElement(IconButton2, {
160
- iconOnly: true,
161
- label: label3,
162
- icon,
163
- size: 5,
164
- variant: "ghost",
165
- tooltipSide: "bottom",
166
- ...props
167
- });
168
- } finally {
169
- _effect.f();
170
- }
171
- };
172
- var plankControlSpacing = "pli-2";
173
- var PlankCompanionControls = /* @__PURE__ */ forwardRef(({ primary }, forwardedRef) => {
174
- var _effect = _useSignals2();
175
- try {
176
- const { t } = useTranslation2(DECK_PLUGIN);
177
- const { dispatchPromise: dispatch } = useIntentDispatcher2();
178
- const handleCloseCompanion = useCallback2(() => {
179
- invariant(primary, void 0, {
180
- F: __dxlog_file,
181
- L: 49,
182
- S: void 0,
183
- A: [
184
- "primary",
185
- ""
186
- ]
187
- });
188
- return dispatch(createIntent2(DeckAction.ChangeCompanion, {
189
- primary,
190
- companion: null
191
- }));
192
- }, []);
193
- return /* @__PURE__ */ React2.createElement("div", {
194
- ref: forwardedRef,
195
- className: "contents app-no-drag"
196
- }, /* @__PURE__ */ React2.createElement(PlankControl, {
197
- label: t("close companion label"),
198
- variant: "ghost",
199
- icon: "ph--x--regular",
200
- onClick: handleCloseCompanion,
201
- classNames: plankControlSpacing
202
- }));
203
- } finally {
204
- _effect.f();
205
- }
206
- });
207
- var PlankControls = /* @__PURE__ */ forwardRef(({ children, classNames, variant = "default", capabilities, layoutMode, pin, close = false, onClick, ...props }, forwardedRef) => {
208
- var _effect = _useSignals2();
209
- try {
210
- const { t } = useTranslation2(DECK_PLUGIN);
211
- const buttonClassNames = variant === "hide-disabled" ? `disabled:hidden ${plankControlSpacing}` : plankControlSpacing;
212
- const layoutIsAnySolo = !!layoutMode?.startsWith("solo");
213
- return /* @__PURE__ */ React2.createElement(ButtonGroup, {
214
- ...props,
215
- classNames: [
216
- "app-no-drag !opacity-100",
217
- classNames
218
- ],
219
- ref: forwardedRef
220
- }, capabilities.deck ? /* @__PURE__ */ React2.createElement(React2.Fragment, null, capabilities.solo && /* @__PURE__ */ React2.createElement(React2.Fragment, null, layoutMode === "solo" && /* @__PURE__ */ React2.createElement(PlankControl, {
221
- label: t("show fullscreen plank label"),
222
- classNames: buttonClassNames,
223
- icon: "ph--corners-out--regular",
224
- onClick: () => onClick?.("solo--fullscreen")
225
- }), /* @__PURE__ */ React2.createElement(PlankControl, {
226
- label: t(layoutMode === "solo--fullscreen" ? "exit fullscreen label" : layoutIsAnySolo ? "show deck plank label" : "show solo plank label"),
227
- classNames: buttonClassNames,
228
- icon: layoutMode === "solo--fullscreen" ? "ph--corners-in--regular" : layoutIsAnySolo ? "ph--arrows-in-line-horizontal--regular" : "ph--arrows-out-line-horizontal--regular",
229
- onClick: () => onClick?.(layoutMode === "solo--fullscreen" ? "solo--fullscreen" : "solo")
230
- })), !layoutIsAnySolo && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(PlankControl, {
231
- label: t("increment start label"),
232
- disabled: !capabilities.incrementStart,
233
- classNames: buttonClassNames,
234
- icon: "ph--caret-left--regular",
235
- onClick: () => onClick?.("increment-start")
236
- }), /* @__PURE__ */ React2.createElement(PlankControl, {
237
- label: t("increment end label"),
238
- disabled: !capabilities.incrementEnd,
239
- classNames: buttonClassNames,
240
- icon: "ph--caret-right--regular",
241
- onClick: () => onClick?.("increment-end")
242
- }))) : capabilities.fullscreen && /* @__PURE__ */ React2.createElement(PlankControl, {
243
- label: t(layoutMode === "solo--fullscreen" ? "exit fullscreen label" : "show fullscreen plank label"),
244
- classNames: buttonClassNames,
245
- icon: layoutMode === "solo--fullscreen" ? "ph--corners-in--regular" : "ph--corners-out--regular",
246
- onClick: () => onClick?.("solo--fullscreen")
247
- }), close && !layoutIsAnySolo && /* @__PURE__ */ React2.createElement(PlankControl, {
248
- label: t(`${typeof close === "string" ? "minify" : "close"} label`),
249
- classNames: buttonClassNames,
250
- "data-testid": "plankHeading.close",
251
- icon: close === "minify-start" ? "ph--caret-line-left--regular" : close === "minify-end" ? "ph--caret-line-right--regular" : "ph--x--regular",
252
- onClick: () => onClick?.("close")
253
- }), capabilities.companion && /* @__PURE__ */ React2.createElement(PlankControl, {
254
- label: t("open companion label"),
255
- classNames: buttonClassNames,
256
- "data-testid": "plankHeading.companion",
257
- icon: "ph--square-split-horizontal--regular",
258
- onClick: () => onClick?.("companion")
259
- }), children);
260
- } finally {
261
- _effect.f();
262
- }
263
- });
264
-
265
- // src/components/fragments.ts
266
- import { mx } from "@dxos/react-ui-theme";
267
- var soloInlinePadding = "pis-[calc(env(safe-area-inset-left)+.25rem)] pie-[calc(env(safe-area-inset-left)+.25rem)]";
268
- var sidebarToggleStyles = "bs-[--rail-item] is-[--rail-item] absolute block-end-2 z-[1] !bg-deckSurface lg:hidden";
269
- var fixedSidebarToggleStyles = mx(sidebarToggleStyles, "inline-start-2");
270
- var fixedComplementarySidebarToggleStyles = mx(sidebarToggleStyles, "inline-end-2");
271
-
272
- // src/components/Plank/PlankHeading.tsx
273
- var MAX_COMPANIONS = 5;
274
- var PlankHeading = /* @__PURE__ */ memo(({ id, part, node, deckEnabled, canIncrementStart, canIncrementEnd, popoverAnchorId, primaryId, pending, companioned, companions, layoutMode, actions = [] }) => {
275
- var _effect = _useSignals3();
276
- try {
277
- const { t } = useTranslation3(DECK_PLUGIN);
278
- const { dispatchPromise: dispatch } = useIntentDispatcher3();
279
- const { graph } = useAppGraph();
280
- const breakpoint = useBreakpoints();
281
- const icon = node?.properties?.icon ?? "ph--placeholder--regular";
282
- const label3 = pending ? t("pending heading") : toLocalizedString(node?.properties?.label ?? [
283
- "plank heading fallback label",
284
- {
285
- ns: DECK_PLUGIN
286
- }
287
- ], t);
288
- const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;
289
- useEffect(() => {
290
- const frame = requestAnimationFrame(() => {
291
- if (node) {
292
- void graph.expand(node.id);
293
- }
294
- });
295
- return () => cancelAnimationFrame(frame);
296
- }, [
297
- node
298
- ]);
299
- const attendableId = primaryId ?? id;
300
- const capabilities = useMemo(() => ({
301
- deck: deckEnabled ?? true,
302
- solo: breakpoint !== "mobile" && (part === "solo" || part === "deck"),
303
- incrementStart: canIncrementStart,
304
- incrementEnd: canIncrementEnd,
305
- fullscreen: !isCompanionNode,
306
- companion: !isCompanionNode && companions && companions.length > 0
307
- }), [
308
- breakpoint,
309
- part,
310
- companions,
311
- canIncrementStart,
312
- canIncrementEnd,
313
- isCompanionNode,
314
- deckEnabled
315
- ]);
316
- const { variant } = parseEntryId(id);
317
- const sigilActions = useMemo(() => {
318
- if (!node) {
319
- return void 0;
320
- } else if (variant) {
321
- return [];
322
- } else {
323
- return [
324
- actions,
325
- graph.getActions(node.id).filter((a) => [
326
- "list-item",
327
- "list-item-primary",
328
- "heading-list-item"
329
- ].includes(a.properties.disposition))
330
- ].filter((a) => a.length > 0);
331
- }
332
- }, [
333
- actions,
334
- node,
335
- variant,
336
- graph
337
- ]);
338
- const handleAction = useCallback3((action) => {
339
- typeof action.data === "function" && action.data?.({
340
- parent: node,
341
- caller: DECK_PLUGIN
342
- });
343
- }, [
344
- node
345
- ]);
346
- const handlePlankAction = useCallback3((eventType) => {
347
- if (eventType.startsWith("solo")) {
348
- return dispatch(createIntent3(DeckAction.Adjust, {
349
- type: eventType,
350
- id
351
- }));
352
- } else if (eventType === "close") {
353
- if (part === "complementary") {
354
- return dispatch(createIntent3(LayoutAction2.UpdateComplementary, {
355
- part: "complementary",
356
- options: {
357
- state: "collapsed"
358
- }
359
- }));
360
- } else {
361
- return dispatch(createIntent3(LayoutAction2.Close, {
362
- part: "main",
363
- subject: [
364
- id
365
- ],
366
- options: {
367
- state: false
368
- }
369
- }));
370
- }
371
- } else {
372
- return dispatch(createIntent3(DeckAction.Adjust, {
373
- type: eventType,
374
- id
375
- }));
376
- }
377
- }, [
378
- dispatch,
379
- id,
380
- part
381
- ]);
382
- const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${DECK_PLUGIN}/${node.id}` ? Popover.Anchor : Fragment;
383
- const handleTabClick = useCallback3((event) => {
384
- const target = event.target.closest("[data-id]");
385
- const tabId = target?.dataset?.id;
386
- if (primaryId && tabId) {
387
- void dispatch(createIntent3(DeckAction.ChangeCompanion, {
388
- primary: primaryId,
389
- companion: tabId
390
- }));
391
- }
392
- }, [
393
- primaryId
394
- ]);
395
- return /* @__PURE__ */ React3.createElement(StackItem.Heading, {
396
- classNames: [
397
- "plb-1 items-stretch gap-1 sticky inline-start-12 app-drag min-is-0 contain-layout density-coarse",
398
- part === "solo" ? soloInlinePadding : "pli-1",
399
- ...layoutMode === "solo--fullscreen" ? [
400
- hoverableControls,
401
- hoverableFocusedWithinControls,
402
- "*: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"
403
- ] : []
404
- ],
405
- "data-plank-heading": true
406
- }, companions && isCompanionNode ? (
407
- /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */
408
- /* @__PURE__ */ React3.createElement("div", {
409
- role: "none",
410
- className: "flex-1 min-is-0 overflow-x-auto scrollbar-none flex gap-1"
411
- }, companions.map(({ id: id2, properties: { icon: icon2, label: label4 } }) => /* @__PURE__ */ React3.createElement(IconButton3, {
412
- key: id2,
413
- "data-id": id2,
414
- icon: icon2,
415
- iconOnly: companions.length > MAX_COMPANIONS && node?.id !== id2,
416
- label: toLocalizedString(label4, t),
417
- size: 5,
418
- variant: node?.id === id2 ? "primary" : "ghost",
419
- onClick: handleTabClick
420
- })))
421
- ) : /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(ActionRoot, null, node && sigilActions ? /* @__PURE__ */ React3.createElement(StackItem.Sigil, {
422
- icon,
423
- related: part === "complementary",
424
- attendableId,
425
- triggerLabel: t("actions menu label"),
426
- actions: sigilActions,
427
- onAction: handleAction
428
- }, /* @__PURE__ */ React3.createElement(Surface, {
429
- role: "menu-footer",
430
- data: {
431
- subject: node.data
432
- }
433
- })) : /* @__PURE__ */ React3.createElement(StackItem.SigilButton, null, /* @__PURE__ */ React3.createElement("span", {
434
- className: "sr-only"
435
- }, label3), /* @__PURE__ */ React3.createElement(Icon, {
436
- icon,
437
- size: 5
438
- }))), /* @__PURE__ */ React3.createElement(TextTooltip, {
439
- text: label3,
440
- onlyWhenTruncating: true
441
- }, /* @__PURE__ */ React3.createElement(StackItem.HeadingLabel, {
442
- attendableId,
443
- related: part === "complementary",
444
- ...pending && {
445
- classNames: "text-description"
446
- }
447
- }, label3))), node && part !== "complementary" && /* @__PURE__ */ React3.createElement(Surface, {
448
- role: "navbar-end",
449
- data: {
450
- subject: node.data
451
- }
452
- }), companioned === "companion" ? /* @__PURE__ */ React3.createElement(PlankCompanionControls, {
453
- primary: primaryId
454
- }) : /* @__PURE__ */ React3.createElement(PlankControls, {
455
- capabilities,
456
- layoutMode,
457
- close: part === "complementary" ? "minify-end" : true,
458
- onClick: handlePlankAction
459
- }));
460
- } finally {
461
- _effect.f();
462
- }
463
- });
464
-
465
- // src/components/Plank/PlankLoading.tsx
466
- import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
467
- import React4 from "react";
468
- var PlankLoading = () => {
469
- var _effect = _useSignals4();
470
- try {
471
- return /* @__PURE__ */ React4.createElement("div", {
472
- role: "none",
473
- className: "grid place-items-center attention-surface"
474
- });
475
- } finally {
476
- _effect.f();
477
- }
478
- };
479
-
480
- // src/components/Plank/PlankError.tsx
481
- var PlankContentError = ({ error }) => {
482
- var _effect = _useSignals5();
483
- try {
484
- const { t } = useTranslation4(DECK_PLUGIN);
485
- const errorString = error?.toString() ?? "";
486
- return /* @__PURE__ */ React5.createElement("div", {
487
- role: "none",
488
- className: "overflow-auto p-8 attention-surface grid place-items-center"
489
- }, /* @__PURE__ */ React5.createElement("p", {
490
- role: "alert",
491
- className: mx2(descriptionMessage, "break-words rounded-md p-8", errorString.length < 256 && "text-lg")
492
- }, error ? errorString : t("error fallback message")));
493
- } finally {
494
- _effect.f();
495
- }
496
- };
497
- var PlankError = ({ id, part, node, error }) => {
498
- var _effect = _useSignals5();
499
- try {
500
- const [timedOut, setTimedOut] = useState(false);
501
- useEffect2(() => {
502
- setTimeout(() => setTimedOut(true), 5e3);
503
- }, []);
504
- return /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement(PlankHeading, {
505
- id,
506
- part,
507
- node,
508
- pending: !timedOut
509
- }), timedOut ? /* @__PURE__ */ React5.createElement(PlankContentError, {
510
- error
511
- }) : /* @__PURE__ */ React5.createElement(PlankLoading, null));
512
- } finally {
513
- _effect.f();
514
- }
515
- };
516
-
517
- // src/components/Plank/Plank.tsx
518
- var UNKNOWN_ID = "unknown_id";
519
- var Plank = /* @__PURE__ */ memo2(({ id = UNKNOWN_ID, companionId, ...props }) => {
520
- var _effect = _useSignals6();
521
- try {
522
- const { graph } = useAppGraph2();
523
- const node = useNode(graph, id);
524
- const companions = useCompanions(id);
525
- const currentCompanion = companions.find(({ id: id2 }) => id2 === companionId);
526
- const hasCompanion = !!(companionId && currentCompanion);
527
- return /* @__PURE__ */ React6.createElement(PlankContainer, {
528
- solo: props.part === "solo",
529
- companion: hasCompanion
530
- }, /* @__PURE__ */ React6.createElement(PlankComponent, {
531
- id,
532
- node,
533
- companioned: hasCompanion ? "primary" : void 0,
534
- companions: hasCompanion ? [] : companions,
535
- ...props,
536
- ...props.part === "solo" ? {
537
- part: "solo-primary"
538
- } : {}
539
- }), hasCompanion && /* @__PURE__ */ React6.createElement(PlankComponent, {
540
- id: companionId,
541
- node: currentCompanion,
542
- primary: node,
543
- companions,
544
- companioned: "companion",
545
- ...props,
546
- ...props.part === "solo" ? {
547
- part: "solo-companion"
548
- } : {
549
- order: (props.order ?? 0) + 1
550
- }
551
- }));
552
- } finally {
553
- _effect.f();
554
- }
555
- });
556
- var PlankContainer = ({ children, solo, companion }) => {
557
- var _effect = _useSignals6();
558
- try {
559
- const sizeAttrs = useMainSize();
560
- if (!solo) {
561
- return children;
562
- }
563
- return /* @__PURE__ */ React6.createElement("div", {
564
- role: "none",
565
- className: mx3("absolute inset-0 grid", companion && "grid-cols-[1fr_1fr]", railGridHorizontal, mainIntrinsicSize),
566
- ...sizeAttrs
567
- }, children);
568
- } finally {
569
- _effect.f();
570
- }
571
- };
572
- var PlankComponent = /* @__PURE__ */ memo2(({ layoutMode, id, part, path, order, active, companioned, node, primary, companions, settings }) => {
573
- var _effect = _useSignals6();
574
- try {
575
- const { dispatchPromise: dispatch } = useIntentDispatcher4();
576
- const { deck, popoverAnchorId, scrollIntoView } = useCapability2(DeckCapabilities.DeckState);
577
- const canResize = layoutMode === "deck";
578
- const attentionAttrs = useAttentionAttributes(primary?.id ?? id);
579
- const index = active ? active.findIndex((entryId) => entryId === id) : 0;
580
- const length = active?.length ?? 1;
581
- const canIncrementStart = active && index !== void 0 && index > 0 && length !== void 0 && length > 1;
582
- const canIncrementEnd = active && index !== void 0 && index < length - 1 && length !== void 0;
583
- const rootElement = useRef(null);
584
- const { variant } = parseEntryId(id);
585
- const sizeKey = `${id.split("+")[0]}${variant ? `${ATTENDABLE_PATH_SEPARATOR}${variant}` : ""}`;
586
- const size = deck.plankSizing[sizeKey];
587
- const handleSizeChange = useCallback4(debounce((nextSize) => {
588
- return dispatch(createIntent4(DeckAction.UpdatePlankSize, {
589
- id: sizeKey,
590
- size: nextSize
591
- }));
592
- }, 200), [
593
- dispatch,
594
- sizeKey
595
- ]);
596
- const handleKeyDown = useCallback4((event) => {
597
- if (event.target === event.currentTarget && event.key === "Escape") {
598
- rootElement.current?.closest("main")?.focus();
599
- }
600
- }, []);
601
- useLayoutEffect(() => {
602
- if (scrollIntoView === id) {
603
- const focusable = rootElement.current?.querySelector("button") || rootElement.current;
604
- focusable?.focus({
605
- preventScroll: true
606
- });
607
- layoutMode === "deck" && focusable?.scrollIntoView({
608
- behavior: "smooth",
609
- inline: "center"
610
- });
611
- void dispatch(createIntent4(LayoutAction3.ScrollIntoView, {
612
- part: "current",
613
- subject: void 0
614
- }));
615
- }
616
- }, [
617
- id,
618
- scrollIntoView,
619
- layoutMode
620
- ]);
621
- const isSolo = layoutMode.startsWith("solo") && part === "solo";
622
- const isAttendable = layoutMode.startsWith("solo") && part.startsWith("solo") || layoutMode === "deck" && part === "deck";
623
- const sizeAttrs = useMainSize();
624
- const data = useMemo2(() => node && {
625
- subject: node.data,
626
- companionTo: primary?.data,
627
- variant,
628
- path,
629
- popoverAnchorId
630
- }, [
631
- node,
632
- node?.data,
633
- path,
634
- popoverAnchorId,
635
- primary?.data,
636
- variant
637
- ]);
638
- const placeholder = useMemo2(() => /* @__PURE__ */ React6.createElement(PlankLoading, null), []);
639
- const Root = part.startsWith("solo") ? "article" : StackItem2.Root;
640
- const className = mx3("attention-surface relative dx-focus-ring-inset-over-all density-coarse", isSolo && mainIntrinsicSize, isSolo && railGridHorizontal, isSolo && "absolute inset-0", part.startsWith("solo") && "grid", part === "deck" && (companioned === "companion" ? "!border-separator border-ie" : "!border-separator border-li"), part.startsWith("solo-") && "row-span-2 grid-rows-subgrid min-is-0", part === "solo-companion" && "!border-separator border-is");
641
- return /* @__PURE__ */ React6.createElement(Root, {
642
- ref: rootElement,
643
- "data-testid": "deck.plank",
644
- tabIndex: 0,
645
- ...part.startsWith("solo") ? {
646
- ...sizeAttrs,
647
- className
648
- } : {
649
- item: {
650
- id
651
- },
652
- size,
653
- onSizeChange: handleSizeChange,
654
- classNames: className,
655
- order,
656
- role: "article"
657
- },
658
- ...isAttendable ? attentionAttrs : {},
659
- onKeyDown: handleKeyDown
660
- }, node ? /* @__PURE__ */ React6.createElement(React6.Fragment, null, /* @__PURE__ */ React6.createElement(PlankHeading, {
661
- id,
662
- part: part.startsWith("solo-") ? "solo" : part,
663
- node,
664
- layoutMode,
665
- deckEnabled: settings?.enableDeck,
666
- canIncrementStart,
667
- canIncrementEnd,
668
- popoverAnchorId,
669
- primaryId: primary?.id,
670
- companioned,
671
- companions
672
- }), /* @__PURE__ */ React6.createElement(Surface2, {
673
- key: node.id,
674
- role: "article",
675
- data,
676
- limit: 1,
677
- fallback: PlankContentError,
678
- placeholder
679
- })) : /* @__PURE__ */ React6.createElement(PlankError, {
680
- id,
681
- part
682
- }), canResize && /* @__PURE__ */ React6.createElement(StackItem2.ResizeHandle, null));
683
- } finally {
684
- _effect.f();
685
- }
686
- });
687
-
688
- // src/components/Sidebar/ComplementarySidebar.tsx
689
- var label = [
690
- "complementary sidebar title",
691
- {
692
- ns: DECK_PLUGIN
693
- }
694
- ];
695
- var ComplementarySidebar = ({ current }) => {
696
- var _effect = _useSignals7();
697
- try {
698
- const { t } = useTranslation5(DECK_PLUGIN);
699
- const { dispatchPromise: dispatch } = useIntentDispatcher5();
700
- const layout = useCapability3(DeckCapabilities.MutableDeckState);
701
- const layoutMode = getMode(layout.deck);
702
- const breakpoint = useBreakpoints();
703
- const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
704
- const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);
705
- const companions = useDeckCompanions();
706
- const activeCompanion = companions.find((companion) => getCompanionId(companion.id) === current);
707
- const activeId = activeCompanion && getCompanionId(activeCompanion.id);
708
- const [internalValue, setInternalValue] = useState2(activeId);
709
- useEffect3(() => {
710
- setInternalValue(activeId);
711
- }, [
712
- activeId
713
- ]);
714
- const handleTabClick = useCallback5((event) => {
715
- const nextValue = event.currentTarget.getAttribute("data-value");
716
- if (nextValue === activeId) {
717
- layout.complementarySidebarState = layout.complementarySidebarState === "expanded" ? "collapsed" : "expanded";
718
- } else {
719
- setInternalValue(nextValue);
720
- layout.complementarySidebarState = "expanded";
721
- void dispatch(createIntent5(LayoutAction4.UpdateComplementary, {
722
- part: "complementary",
723
- subject: nextValue
724
- }));
725
- }
726
- }, [
727
- layout,
728
- activeId,
729
- dispatch
730
- ]);
731
- const data = useMemo3(() => activeCompanion && {
732
- id: activeCompanion.id,
733
- subject: activeCompanion.data
734
- }, [
735
- activeCompanion?.id,
736
- activeCompanion?.data
737
- ]);
738
- useEffect3(() => {
739
- if (!activeId) {
740
- void dispatch(createIntent5(LayoutAction4.UpdateComplementary, {
741
- part: "complementary",
742
- options: {
743
- state: "collapsed"
744
- }
745
- }));
746
- }
747
- }, [
748
- activeId,
749
- dispatch
750
- ]);
751
- return /* @__PURE__ */ React7.createElement(Main.ComplementarySidebar, {
752
- label,
753
- classNames: [
754
- topbar && "block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]",
755
- hoistStatusbar && "block-end-[--statusbar-size]"
756
- ]
757
- }, /* @__PURE__ */ React7.createElement(Tabs.Root, {
758
- orientation: "vertical",
759
- verticalVariant: "stateless",
760
- value: internalValue,
761
- classNames: "contents"
762
- }, /* @__PURE__ */ React7.createElement("div", {
763
- role: "none",
764
- 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"
765
- }, /* @__PURE__ */ React7.createElement(Tabs.Tablist, {
766
- classNames: "grid grid-cols-1 auto-rows-[--rail-action] p-1 gap-1 !overflow-y-auto"
767
- }, companions.map((companion) => /* @__PURE__ */ React7.createElement(Tabs.Tab, {
768
- key: getCompanionId(companion.id),
769
- value: getCompanionId(companion.id),
770
- asChild: true
771
- }, /* @__PURE__ */ React7.createElement(IconButton4, {
772
- label: toLocalizedString2(companion.properties.label, t),
773
- icon: companion.properties.icon,
774
- size: 5,
775
- iconOnly: true,
776
- tooltipSide: "left",
777
- "data-value": getCompanionId(companion.id),
778
- variant: activeId === getCompanionId(companion.id) ? layout.complementarySidebarState === "expanded" ? "primary" : "default" : "ghost",
779
- onClick: handleTabClick
780
- })))), !hoistStatusbar && /* @__PURE__ */ React7.createElement("div", {
781
- role: "none",
782
- className: "grid grid-cols-1 auto-rows-[--rail-item] p-1 overflow-y-auto"
783
- }, /* @__PURE__ */ React7.createElement(Surface3, {
784
- role: "status-bar--r0-footer",
785
- limit: 1
786
- })), /* @__PURE__ */ React7.createElement("div", {
787
- role: "none",
788
- className: "hidden lg:grid grid-cols-1 auto-rows-[--rail-action] p-1"
789
- }, /* @__PURE__ */ React7.createElement(ToggleComplementarySidebarButton, null))), activeId && companions.map((companion) => /* @__PURE__ */ React7.createElement(Tabs.Tabpanel, {
790
- key: getCompanionId(companion.id),
791
- value: getCompanionId(companion.id),
792
- 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)]',
793
- ...layout.complementarySidebarState !== "expanded" && {
794
- inert: "true"
795
- }
796
- }, /* @__PURE__ */ React7.createElement(ComplementarySidebarPanel, {
797
- companion,
798
- activeId,
799
- data,
800
- hoistStatusbar
801
- })))));
802
- } finally {
803
- _effect.f();
804
- }
805
- };
806
- var ScrollArea = ({ children }) => {
807
- var _effect = _useSignals7();
808
- try {
809
- return /* @__PURE__ */ React7.createElement("div", {
810
- className: "flex flex-col grow overflow-x-hidden overflow-y-auto scrollbar-thin"
811
- }, children);
812
- } finally {
813
- _effect.f();
814
- }
815
- };
816
- var ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }) => {
817
- var _effect = _useSignals7();
818
- try {
819
- const { t } = useTranslation5(DECK_PLUGIN);
820
- if (getCompanionId(companion.id) !== activeId && !data) {
821
- return null;
822
- }
823
- const Wrapper = companion.properties.fixed ? Fragment2 : ScrollArea;
824
- return /* @__PURE__ */ React7.createElement(React7.Fragment, null, /* @__PURE__ */ React7.createElement("h2", {
825
- className: "flex items-center pli-2 border-subduedSeparator border-be font-medium"
826
- }, toLocalizedString2(companion.properties.label, t)), /* @__PURE__ */ React7.createElement(Wrapper, null, /* @__PURE__ */ React7.createElement(Surface3, {
827
- role: `deck-companion--${getCompanionId(companion.id)}`,
828
- data,
829
- fallback: PlankContentError,
830
- placeholder: /* @__PURE__ */ React7.createElement(PlankLoading, null)
831
- })), !hoistStatusbar && /* @__PURE__ */ React7.createElement("div", {
832
- role: "contentinfo",
833
- className: "flex flex-wrap justify-center items-center border-bs border-subduedSeparator pbs-1 pbe-[max(env(safe-area-inset-bottom),0.25rem)]"
834
- }, /* @__PURE__ */ React7.createElement(Surface3, {
835
- role: "status-bar--r1-footer",
836
- limit: 1
837
- })));
838
- } finally {
839
- _effect.f();
840
- }
841
- };
842
-
843
- // src/components/Sidebar/Sidebar.tsx
844
- import { useSignals as _useSignals8 } from "@preact-signals/safe-react/tracking";
845
- import React8, { useMemo as useMemo4 } from "react";
846
- import { Surface as Surface4, useCapability as useCapability4 } from "@dxos/app-framework";
847
- import { Main as Main2 } from "@dxos/react-ui";
848
- var label2 = [
849
- "sidebar title",
850
- {
851
- ns: DECK_PLUGIN
852
- }
853
- ];
854
- var Sidebar = () => {
855
- var _effect = _useSignals8();
856
- try {
857
- const { popoverAnchorId, activeDeck: current, deck } = useCapability4(DeckCapabilities.DeckState);
858
- const breakpoint = useBreakpoints();
859
- const layoutMode = getMode(deck);
860
- const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
861
- const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);
862
- const navigationData = useMemo4(() => ({
863
- popoverAnchorId,
864
- topbar,
865
- hoistStatusbar,
866
- current
867
- }), [
868
- popoverAnchorId,
869
- topbar,
870
- hoistStatusbar,
871
- current
872
- ]);
873
- return /* @__PURE__ */ React8.createElement(Main2.NavigationSidebar, {
874
- label: label2,
875
- classNames: [
876
- "grid",
877
- topbar && "block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]",
878
- hoistStatusbar && "block-end-[--statusbar-size]"
879
- ]
880
- }, /* @__PURE__ */ React8.createElement(Surface4, {
881
- role: "navigation",
882
- data: navigationData,
883
- limit: 1
884
- }));
885
- } finally {
886
- _effect.f();
887
- }
888
- };
889
-
890
- // src/components/DeckLayout/Banner.tsx
891
- var Banner = ({ variant, classNames }) => {
892
- var _effect = _useSignals9();
893
- try {
894
- const { t } = useTranslation6(DECK_PLUGIN);
895
- return /* @__PURE__ */ React9.createElement("header", {
896
- className: mx4("flex items-stretch relative plb-1 pis-1 pie-2", variant === "topbar" && "fixed inset-inline-0 block-start-[env(safe-area-inset-top)] bs-[--rail-size] border-be border-separator", classNames)
897
- }, variant === "sidebar" ? /* @__PURE__ */ React9.createElement(CloseSidebarButton, null) : /* @__PURE__ */ React9.createElement(ToggleSidebarButton, null), /* @__PURE__ */ React9.createElement("span", {
898
- className: "self-center grow mis-1"
899
- }, t("current app name", {
900
- ns: "appkit"
901
- })), variant === "topbar" && /* @__PURE__ */ React9.createElement("div", {
902
- role: "none",
903
- className: "absolute inset-0 pointer-events-none"
904
- }, /* @__PURE__ */ React9.createElement("div", {
905
- role: "none",
906
- className: "grid bs-full pointer-fine:p-1 max-is-md mli-auto pointer-events-auto"
907
- }, /* @__PURE__ */ React9.createElement(Surface5, {
908
- role: "search-input",
909
- limit: 1
910
- }))), /* @__PURE__ */ React9.createElement("span", {
911
- role: "none",
912
- className: "grow"
913
- }), /* @__PURE__ */ React9.createElement(Surface5, {
914
- role: "header-end",
915
- limit: 1
916
- }), /* @__PURE__ */ React9.createElement(Surface5, {
917
- role: "notch-start",
918
- limit: 1
919
- }));
920
- } finally {
921
- _effect.f();
922
- }
923
- };
924
-
925
- // src/components/DeckLayout/DeckLayout.tsx
926
- import { useSignals as _useSignals17 } from "@preact-signals/safe-react/tracking";
927
- import { untracked } from "@preact/signals-core";
928
- import React17, { useCallback as useCallback7, useEffect as useEffect5, useMemo as useMemo6, useRef as useRef3, Fragment as Fragment3 } from "react";
929
- import { Capabilities, LayoutAction as LayoutAction5, createIntent as createIntent6, useCapability as useCapability8, useIntentDispatcher as useIntentDispatcher6, usePluginManager } from "@dxos/app-framework";
930
- import { AttentionCapabilities } from "@dxos/plugin-attention";
931
- import { Main as Main3, useMediaQuery, useOnTransition } from "@dxos/react-ui";
932
- import { Stack, StackContext, DEFAULT_HORIZONTAL_SIZE } from "@dxos/react-ui-stack";
933
- import { mainPaddingTransitions } from "@dxos/react-ui-theme";
934
-
935
- // src/components/DeckLayout/ActiveNode.tsx
936
- import { useSignals as _useSignals10 } from "@preact-signals/safe-react/tracking";
937
- import React10 from "react";
938
- import { Surface as Surface6, useAppGraph as useAppGraph3 } from "@dxos/app-framework";
939
- import { useNode as useNode2 } from "@dxos/plugin-graph";
940
- import { useAttended } from "@dxos/react-ui-attention";
941
- var ActiveNode = () => {
942
- var _effect = _useSignals10();
943
- try {
944
- const [id] = useAttended();
945
- const { graph } = useAppGraph3();
946
- const activeNode = useNode2(graph, id);
947
- useNodeActionExpander(activeNode);
948
- return /* @__PURE__ */ React10.createElement("div", {
949
- role: "none",
950
- className: "sr-only"
951
- }, /* @__PURE__ */ React10.createElement(Surface6, {
952
- role: "document-title",
953
- data: {
954
- subject: activeNode
955
- },
956
- limit: 1
957
- }));
958
- } finally {
959
- _effect.f();
960
- }
961
- };
962
-
963
- // src/components/DeckLayout/ContentEmpty.tsx
964
- import { useSignals as _useSignals11 } from "@preact-signals/safe-react/tracking";
965
- import React11 from "react";
966
- import { Surface as Surface7, useCapability as useCapability5 } from "@dxos/app-framework";
967
- var ContentEmpty = () => {
968
- var _effect = _useSignals11();
969
- try {
970
- const breakpoint = useBreakpoints();
971
- const { deck } = useCapability5(DeckCapabilities.MutableDeckState);
972
- const layoutMode = getMode(deck);
973
- const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
974
- return /* @__PURE__ */ React11.createElement("div", {
975
- role: "none",
976
- className: "grid place-items-center p-8 relative bg-deckSurface",
977
- "data-testid": "layoutPlugin.firstRunMessage"
978
- }, /* @__PURE__ */ React11.createElement(Surface7, {
979
- role: "keyshortcuts"
980
- }), !topbar && /* @__PURE__ */ React11.createElement(ToggleSidebarButton, {
981
- variant: "default",
982
- classNames: fixedSidebarToggleStyles
983
- }));
984
- } finally {
985
- _effect.f();
986
- }
987
- };
988
-
989
- // src/components/DeckLayout/Dialog.tsx
990
- import { useSignals as _useSignals12 } from "@preact-signals/safe-react/tracking";
991
- import React12 from "react";
992
- import { Surface as Surface8, useCapability as useCapability6 } from "@dxos/app-framework";
993
- import { AlertDialog, Dialog as NaturalDialog } from "@dxos/react-ui";
994
- var Dialog = () => {
995
- var _effect = _useSignals12();
996
- try {
997
- const context = useCapability6(DeckCapabilities.MutableDeckState);
998
- const { dialogOpen, dialogType, dialogBlockAlign, dialogOverlayClasses, dialogOverlayStyle, dialogContent } = context;
999
- const Root = dialogType === "alert" ? AlertDialog.Root : NaturalDialog.Root;
1000
- const Overlay = dialogType === "alert" ? AlertDialog.Overlay : NaturalDialog.Overlay;
1001
- return /* @__PURE__ */ React12.createElement(Root, {
1002
- modal: dialogBlockAlign !== "end",
1003
- open: dialogOpen,
1004
- onOpenChange: (nextOpen) => context.dialogOpen = nextOpen
1005
- }, dialogBlockAlign === "end" ? (
1006
- // TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.
1007
- /* @__PURE__ */ React12.createElement(Surface8, {
1008
- role: "dialog",
1009
- data: dialogContent,
1010
- limit: 1,
1011
- fallback: PlankContentError,
1012
- placeholder: /* @__PURE__ */ React12.createElement("div", null)
1013
- })
1014
- ) : /* @__PURE__ */ React12.createElement(Overlay, {
1015
- blockAlign: dialogBlockAlign,
1016
- classNames: dialogOverlayClasses,
1017
- style: dialogOverlayStyle
1018
- }, /* @__PURE__ */ React12.createElement(Surface8, {
1019
- role: "dialog",
1020
- data: dialogContent,
1021
- limit: 1,
1022
- fallback: PlankContentError
1023
- })));
1024
- } finally {
1025
- _effect.f();
1026
- }
1027
- };
1028
-
1029
- // src/components/DeckLayout/Popover.tsx
1030
- import { useSignals as _useSignals13 } from "@preact-signals/safe-react/tracking";
1031
- import { createContext } from "@radix-ui/react-context";
1032
- import React13, { useCallback as useCallback6, useEffect as useEffect4, useMemo as useMemo5, useRef as useRef2, useState as useState3 } from "react";
1033
- import { Surface as Surface9, useCapability as useCapability7 } from "@dxos/app-framework";
1034
- import { Popover as Popover2 } from "@dxos/react-ui";
1035
- var DEBOUNCE_DELAY = 40;
1036
- var [DeckPopoverProvider, useDeckPopoverContext] = createContext("DeckPopover");
1037
- var PopoverRoot = ({ children }) => {
1038
- var _effect = _useSignals13();
1039
- try {
1040
- const layout = useCapability7(DeckCapabilities.MutableDeckState);
1041
- const virtualRef = useRef2(null);
1042
- const [virtualIter, setVirtualIter] = useState3(0);
1043
- const [open, setOpen] = useState3(false);
1044
- const debounceRef = useRef2(null);
1045
- useEffect4(() => {
1046
- setOpen(false);
1047
- if (layout.popoverOpen) {
1048
- if (debounceRef.current) {
1049
- clearTimeout(debounceRef.current);
1050
- }
1051
- if (layout.popoverAnchor && virtualRef.current !== layout.popoverAnchor) {
1052
- virtualRef.current = layout.popoverAnchor ?? null;
1053
- setVirtualIter((iter) => iter + 1);
1054
- }
1055
- debounceRef.current = setTimeout(() => setOpen(true), DEBOUNCE_DELAY);
1056
- }
1057
- }, [
1058
- layout.popoverOpen,
1059
- layout.popoverAnchorId,
1060
- layout.popoverAnchor,
1061
- layout.popoverContent
1062
- ]);
1063
- return /* @__PURE__ */ React13.createElement(DeckPopoverProvider, {
1064
- setOpen
1065
- }, /* @__PURE__ */ React13.createElement(Popover2.Root, {
1066
- modal: false,
1067
- open
1068
- }, layout.popoverAnchor && /* @__PURE__ */ React13.createElement(Popover2.VirtualTrigger, {
1069
- key: virtualIter,
1070
- virtualRef
1071
- }), children));
1072
- } finally {
1073
- _effect.f();
1074
- }
1075
- };
1076
- var PopoverContent = () => {
1077
- var _effect = _useSignals13();
1078
- try {
1079
- const layout = useCapability7(DeckCapabilities.MutableDeckState);
1080
- const { setOpen } = useDeckPopoverContext("PopoverContent");
1081
- const handleClose = useCallback6((event) => {
1082
- if (
1083
- // TODO(thure): CodeMirror should not focus itself when it updates.
1084
- event.type === "dismissableLayer.focusOutside" && event.currentTarget?.classList.contains("cm-content")
1085
- ) {
1086
- event.preventDefault();
1087
- } else {
1088
- setOpen(false);
1089
- layout.popoverOpen = false;
1090
- layout.popoverAnchor = void 0;
1091
- layout.popoverAnchorId = void 0;
1092
- layout.popoverSide = void 0;
1093
- }
1094
- }, [
1095
- setOpen
1096
- ]);
1097
- const collisionBoundaries = useMemo5(() => {
1098
- const closest = layout.popoverAnchor?.closest("[data-popover-collision-boundary]");
1099
- return closest ? [
1100
- closest
1101
- ] : [];
1102
- }, [
1103
- layout.popoverAnchor
1104
- ]);
1105
- return /* @__PURE__ */ React13.createElement(Popover2.Portal, null, /* @__PURE__ */ React13.createElement(Popover2.Content, {
1106
- side: layout.popoverSide,
1107
- onInteractOutside: handleClose,
1108
- onEscapeKeyDown: handleClose,
1109
- collisionBoundary: collisionBoundaries,
1110
- sticky: "always",
1111
- hideWhenDetached: true
1112
- }, /* @__PURE__ */ React13.createElement(Popover2.Viewport, null, /* @__PURE__ */ React13.createElement(Surface9, {
1113
- role: "popover",
1114
- data: layout.popoverContent,
1115
- limit: 1
1116
- })), /* @__PURE__ */ React13.createElement(Popover2.Arrow, null)));
1117
- } finally {
1118
- _effect.f();
1119
- }
1120
- };
1121
-
1122
- // src/components/DeckLayout/StatusBar.tsx
1123
- import { useSignals as _useSignals14 } from "@preact-signals/safe-react/tracking";
1124
- import React14 from "react";
1125
- import { Surface as Surface10 } from "@dxos/app-framework";
1126
- import { useLandmarkMover } from "@dxos/react-ui";
1127
- var StatusBar = ({ showHints }) => {
1128
- var _effect = _useSignals14();
1129
- try {
1130
- const mover = useLandmarkMover(void 0, "3");
1131
- return /* @__PURE__ */ React14.createElement("div", {
1132
- role: "contentinfo",
1133
- className: "fixed block-end-0 inset-inline-0 bs-[--statusbar-size] border-bs border-separator z-[2] flex text-description",
1134
- ...mover
1135
- }, showHints && /* @__PURE__ */ React14.createElement(Surface10, {
1136
- role: "hints",
1137
- limit: 1
1138
- }), /* @__PURE__ */ React14.createElement(Surface10, {
1139
- role: "status-bar",
1140
- limit: 1
1141
- }));
1142
- } finally {
1143
- _effect.f();
1144
- }
1145
- };
1146
-
1147
- // src/components/DeckLayout/Toast.tsx
1148
- import { useSignals as _useSignals15 } from "@preact-signals/safe-react/tracking";
1149
- import React15 from "react";
1150
- import { Button, Icon as Icon2, Toast as NaturalToast, toLocalizedString as toLocalizedString3, useTranslation as useTranslation7 } from "@dxos/react-ui";
1151
- var Toast = ({ id, title, description, icon, duration, actionLabel, actionAlt, closeLabel, onAction, onOpenChange }) => {
1152
- var _effect = _useSignals15();
1153
- try {
1154
- const { t } = useTranslation7(DECK_PLUGIN);
1155
- return /* @__PURE__ */ React15.createElement(NaturalToast.Root, {
1156
- "data-testid": id,
1157
- defaultOpen: true,
1158
- duration,
1159
- onOpenChange
1160
- }, /* @__PURE__ */ React15.createElement(NaturalToast.Body, null, /* @__PURE__ */ React15.createElement(NaturalToast.Title, {
1161
- classNames: "items-center"
1162
- }, icon && /* @__PURE__ */ React15.createElement(Icon2, {
1163
- icon,
1164
- size: 5,
1165
- classNames: "inline mr-1"
1166
- }), title && /* @__PURE__ */ React15.createElement("span", null, toLocalizedString3(title, t))), description && /* @__PURE__ */ React15.createElement(NaturalToast.Description, null, description && toLocalizedString3(description, t))), /* @__PURE__ */ React15.createElement(NaturalToast.Actions, null, onAction && actionAlt && actionLabel && /* @__PURE__ */ React15.createElement(NaturalToast.Action, {
1167
- altText: toLocalizedString3(actionAlt, t),
1168
- asChild: true
1169
- }, /* @__PURE__ */ React15.createElement(Button, {
1170
- "data-testid": "toast.action",
1171
- variant: "primary",
1172
- onClick: () => onAction?.()
1173
- }, toLocalizedString3(actionLabel, t))), closeLabel && /* @__PURE__ */ React15.createElement(NaturalToast.Close, {
1174
- asChild: true
1175
- }, /* @__PURE__ */ React15.createElement(Button, {
1176
- "data-testid": "toast.close"
1177
- }, toLocalizedString3(closeLabel, t)))));
1178
- } finally {
1179
- _effect.f();
1180
- }
1181
- };
1182
-
1183
- // src/components/DeckLayout/Topbar.tsx
1184
- import { useSignals as _useSignals16 } from "@preact-signals/safe-react/tracking";
1185
- import React16 from "react";
1186
- var Topbar = () => {
1187
- var _effect = _useSignals16();
1188
- try {
1189
- return /* @__PURE__ */ React16.createElement(Banner, {
1190
- variant: "topbar"
1191
- });
1192
- } finally {
1193
- _effect.f();
1194
- }
1195
- };
1196
-
1197
- // src/components/DeckLayout/DeckLayout.tsx
1198
- var PlankSeparator = ({ order }) => {
1199
- var _effect = _useSignals17();
1200
- try {
1201
- return order > 0 ? /* @__PURE__ */ React17.createElement("span", {
1202
- role: "separator",
1203
- className: "row-span-2 bg-deckSurface is-4",
1204
- style: {
1205
- gridColumn: order
1206
- }
1207
- }) : null;
1208
- } finally {
1209
- _effect.f();
1210
- }
1211
- };
1212
- var DeckLayout = ({ onDismissToast }) => {
1213
- var _effect = _useSignals17();
1214
- try {
1215
- const { dispatchPromise: dispatch } = useIntentDispatcher6();
1216
- const settings = useCapability8(Capabilities.SettingsStore).getStore(DECK_PLUGIN).value;
1217
- const context = useCapability8(DeckCapabilities.MutableDeckState);
1218
- const { sidebarState, complementarySidebarState, complementarySidebarPanel, deck, toasts } = context;
1219
- const { active, activeCompanions, fullscreen, solo, plankSizing } = deck;
1220
- const breakpoint = useBreakpoints();
1221
- const layoutMode = getMode(deck);
1222
- const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
1223
- const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);
1224
- const pluginManager = usePluginManager();
1225
- const scrollLeftRef = useRef3();
1226
- const deckRef = useRef3(null);
1227
- useEffect5(() => {
1228
- const attended = untracked(() => {
1229
- const attention = pluginManager.context.getCapability(AttentionCapabilities.Attention);
1230
- return attention.current;
1231
- });
1232
- const firstId = solo ?? active[0];
1233
- if (attended.length === 0 && firstId) {
1234
- document.querySelector(`article[data-attendable-id="${firstId}"] button`)?.focus();
1235
- }
1236
- }, []);
1237
- const [isNotMobile] = useMediaQuery("md", {
1238
- ssr: false
1239
- });
1240
- const shouldRevert = useRef3(false);
1241
- useEffect5(() => {
1242
- if (!isNotMobile && getMode(deck) === "deck") {
1243
- const attended = untracked(() => {
1244
- const attention = pluginManager.context.getCapability(AttentionCapabilities.Attention);
1245
- return attention.current;
1246
- });
1247
- shouldRevert.current = true;
1248
- void dispatch(createIntent6(LayoutAction5.SetLayoutMode, {
1249
- part: "mode",
1250
- subject: attended[0],
1251
- options: {
1252
- mode: "solo"
1253
- }
1254
- }));
1255
- } else if (isNotMobile && getMode(deck) === "solo" && shouldRevert.current) {
1256
- void dispatch(createIntent6(LayoutAction5.SetLayoutMode, {
1257
- part: "mode",
1258
- options: {
1259
- revert: true
1260
- }
1261
- }));
1262
- }
1263
- }, [
1264
- isNotMobile,
1265
- deck,
1266
- dispatch
1267
- ]);
1268
- useEffect5(() => {
1269
- if (!settings.enableDeck && layoutMode === "deck") {
1270
- void dispatch(createIntent6(LayoutAction5.SetLayoutMode, {
1271
- part: "mode",
1272
- subject: active[0],
1273
- options: {
1274
- mode: "solo"
1275
- }
1276
- }));
1277
- }
1278
- }, [
1279
- settings.enableDeck,
1280
- dispatch,
1281
- active,
1282
- layoutMode
1283
- ]);
1284
- const handleResize = useCallback7(() => {
1285
- scrollLeftRef.current = null;
1286
- }, []);
1287
- useEffect5(() => {
1288
- window.addEventListener("resize", handleResize);
1289
- return () => window.removeEventListener("resize", handleResize);
1290
- }, [
1291
- handleResize
1292
- ]);
1293
- const restoreScroll = useCallback7(() => {
1294
- if (deckRef.current && scrollLeftRef.current != null) {
1295
- deckRef.current.scrollLeft = scrollLeftRef.current;
1296
- }
1297
- }, []);
1298
- useOnTransition(layoutMode, (mode) => mode !== "deck", "deck", restoreScroll);
1299
- const handleScroll = useCallback7((event) => {
1300
- if (!solo && event.currentTarget === event.target) {
1301
- scrollLeftRef.current = event.target.scrollLeft;
1302
- }
1303
- }, [
1304
- solo
1305
- ]);
1306
- const isEmpty = !solo && active.length === 0;
1307
- const padding = useMemo6(() => {
1308
- if (!solo && settings.overscroll === "centering") {
1309
- return calculateOverscroll(active.length);
1310
- }
1311
- return {};
1312
- }, [
1313
- solo,
1314
- settings.overscroll,
1315
- deck
1316
- ]);
1317
- const mainPosition = useMemo6(() => [
1318
- "grid !block-start-[env(safe-area-inset-top)]",
1319
- topbar && "!block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]",
1320
- hoistStatusbar && "lg:block-end-[--statusbar-size]"
1321
- ], [
1322
- topbar,
1323
- hoistStatusbar
1324
- ]);
1325
- const { order, itemsCount } = useMemo6(() => {
1326
- return active.reduce((acc, entryId) => {
1327
- acc.order[entryId] = acc.itemsCount + 1;
1328
- acc.itemsCount += activeCompanions?.[entryId] ? 3 : 2;
1329
- return acc;
1330
- }, {
1331
- order: {},
1332
- itemsCount: 0
1333
- });
1334
- }, [
1335
- active,
1336
- activeCompanions
1337
- ]);
1338
- return /* @__PURE__ */ React17.createElement(PopoverRoot, null, /* @__PURE__ */ React17.createElement(ActiveNode, null), /* @__PURE__ */ React17.createElement(Main3.Root, {
1339
- navigationSidebarState: fullscreen ? "closed" : context.sidebarState,
1340
- onNavigationSidebarStateChange: (next) => context.sidebarState = next,
1341
- complementarySidebarState: fullscreen ? "closed" : context.complementarySidebarState,
1342
- onComplementarySidebarStateChange: (next) => context.complementarySidebarState = next
1343
- }, /* @__PURE__ */ React17.createElement(Sidebar, null), /* @__PURE__ */ React17.createElement(ComplementarySidebar, {
1344
- current: complementarySidebarPanel
1345
- }), /* @__PURE__ */ React17.createElement(Main3.Overlay, null), isEmpty && /* @__PURE__ */ React17.createElement(Main3.Content, {
1346
- bounce: true,
1347
- handlesFocus: true,
1348
- classNames: mainPosition
1349
- }, /* @__PURE__ */ React17.createElement(ContentEmpty, null)), !isEmpty && /* @__PURE__ */ React17.createElement(Main3.Content, {
1350
- bounce: true,
1351
- handlesFocus: true,
1352
- classNames: mainPosition,
1353
- style: {
1354
- "--dx-main-sidebarWidth": sidebarState === "expanded" ? "var(--nav-sidebar-size)" : sidebarState === "collapsed" ? "var(--l0-size)" : "0",
1355
- "--dx-main-complementaryWidth": complementarySidebarState === "expanded" ? "var(--complementary-sidebar-size)" : complementarySidebarState === "collapsed" ? "var(--rail-size)" : "0",
1356
- "--dx-main-contentFirstWidth": `${plankSizing[active[0] ?? "never"] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
1357
- "--dx-main-contentLastWidth": `${plankSizing[active[(active.length ?? 1) - 1] ?? "never"] ?? DEFAULT_HORIZONTAL_SIZE}rem`
1358
- }
1359
- }, /* @__PURE__ */ React17.createElement("div", {
1360
- role: "none",
1361
- className: !solo ? "relative bg-deckSurface overflow-hidden" : "sr-only",
1362
- ...solo && {
1363
- inert: ""
1364
- }
1365
- }, !topbar && !fullscreen && /* @__PURE__ */ React17.createElement(ToggleSidebarButton, {
1366
- classNames: fixedSidebarToggleStyles
1367
- }), !topbar && !fullscreen && /* @__PURE__ */ React17.createElement(ToggleComplementarySidebarButton, {
1368
- classNames: fixedComplementarySidebarToggleStyles
1369
- }), /* @__PURE__ */ React17.createElement(Stack, {
1370
- ref: deckRef,
1371
- orientation: "horizontal",
1372
- size: "contain",
1373
- classNames: [
1374
- "absolute inset-block-0 -inset-inline-px",
1375
- mainPaddingTransitions
1376
- ],
1377
- itemsCount: itemsCount - 1,
1378
- style: padding,
1379
- onScroll: handleScroll
1380
- }, active.map((entryId) => /* @__PURE__ */ React17.createElement(Fragment3, {
1381
- key: entryId
1382
- }, /* @__PURE__ */ React17.createElement(PlankSeparator, {
1383
- order: order[entryId] - 1
1384
- }), /* @__PURE__ */ React17.createElement(Plank, {
1385
- id: entryId,
1386
- companionId: activeCompanions?.[entryId],
1387
- part: "deck",
1388
- order: order[entryId],
1389
- active,
1390
- layoutMode,
1391
- settings
1392
- }))))), /* @__PURE__ */ React17.createElement("div", {
1393
- role: "none",
1394
- className: solo ? "relative bg-deckSurface overflow-hidden" : "sr-only",
1395
- ...!solo && {
1396
- inert: ""
1397
- }
1398
- }, !topbar && !fullscreen && /* @__PURE__ */ React17.createElement(ToggleSidebarButton, {
1399
- classNames: fixedSidebarToggleStyles
1400
- }), !topbar && !fullscreen && /* @__PURE__ */ React17.createElement(ToggleComplementarySidebarButton, {
1401
- classNames: fixedComplementarySidebarToggleStyles
1402
- }), /* @__PURE__ */ React17.createElement(StackContext.Provider, {
1403
- value: {
1404
- size: "contain",
1405
- orientation: "horizontal",
1406
- rail: true
1407
- }
1408
- }, /* @__PURE__ */ React17.createElement(Plank, {
1409
- id: solo,
1410
- companionId: solo ? activeCompanions?.[solo] : void 0,
1411
- part: "solo",
1412
- layoutMode,
1413
- settings
1414
- })))), topbar && /* @__PURE__ */ React17.createElement(Topbar, null), hoistStatusbar && /* @__PURE__ */ React17.createElement(StatusBar, {
1415
- showHints: settings.showHints
1416
- })), /* @__PURE__ */ React17.createElement(PopoverContent, null), /* @__PURE__ */ React17.createElement(Dialog, null), toasts?.map((toast) => /* @__PURE__ */ React17.createElement(Toast, {
1417
- ...toast,
1418
- key: toast.id,
1419
- onOpenChange: (open) => {
1420
- if (!open) {
1421
- onDismissToast(toast.id);
1422
- }
1423
- return open;
1424
- }
1425
- })));
1426
- } finally {
1427
- _effect.f();
1428
- }
1429
- };
1430
-
1431
- // src/components/DeckSettings/DeckSettings.tsx
1432
- import { useSignals as _useSignals18 } from "@preact-signals/safe-react/tracking";
1433
- import React18 from "react";
1434
- import { Input, Select, useTranslation as useTranslation8 } from "@dxos/react-ui";
1435
- import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
1436
- var isSocket = !!globalThis.__args;
1437
- var DeckSettings = ({ settings }) => {
1438
- var _effect = _useSignals18();
1439
- try {
1440
- const { t } = useTranslation8(DECK_PLUGIN);
1441
- return /* @__PURE__ */ React18.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1442
- label: t("settings enable deck label")
1443
- }, /* @__PURE__ */ React18.createElement(Input.Switch, {
1444
- checked: settings.enableDeck,
1445
- onCheckedChange: (checked) => settings.enableDeck = checked
1446
- })), /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1447
- label: t("select new plank positioning label")
1448
- }, /* @__PURE__ */ React18.createElement(Select.Root, {
1449
- disabled: !settings.enableDeck,
1450
- value: settings.newPlankPositioning ?? "start",
1451
- onValueChange: (value) => settings.newPlankPositioning = value
1452
- }, /* @__PURE__ */ React18.createElement(Select.TriggerButton, {
1453
- placeholder: t("select new plank positioning placeholder")
1454
- }), /* @__PURE__ */ React18.createElement(Select.Portal, null, /* @__PURE__ */ React18.createElement(Select.Content, null, /* @__PURE__ */ React18.createElement(Select.Viewport, null, NewPlankPositions.map((position) => /* @__PURE__ */ React18.createElement(Select.Option, {
1455
- key: position,
1456
- value: position
1457
- }, t(`settings new plank position ${position} label`)))))))), /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1458
- label: t("settings overscroll label")
1459
- }, /* @__PURE__ */ React18.createElement(Select.Root, {
1460
- disabled: !settings.enableDeck,
1461
- value: settings.overscroll ?? "none",
1462
- onValueChange: (value) => settings.overscroll = value
1463
- }, /* @__PURE__ */ React18.createElement(Select.TriggerButton, {
1464
- placeholder: t("select overscroll placeholder")
1465
- }), /* @__PURE__ */ React18.createElement(Select.Portal, null, /* @__PURE__ */ React18.createElement(Select.Content, null, /* @__PURE__ */ React18.createElement(Select.Viewport, null, OverscrollOptions.map((option) => /* @__PURE__ */ React18.createElement(Select.Option, {
1466
- key: option,
1467
- value: option
1468
- }, t(`settings overscroll ${option} label`)))))))), /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1469
- label: t("settings enable statusbar label")
1470
- }, /* @__PURE__ */ React18.createElement(Input.Switch, {
1471
- checked: settings.enableStatusbar,
1472
- onCheckedChange: (checked) => settings.enableStatusbar = checked
1473
- })), /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1474
- label: t("settings show hints label")
1475
- }, /* @__PURE__ */ React18.createElement(Input.Switch, {
1476
- checked: settings.showHints,
1477
- onCheckedChange: (checked) => settings.showHints = checked
1478
- })), !isSocket && /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1479
- label: t("settings native redirect label")
1480
- }, /* @__PURE__ */ React18.createElement(Input.Switch, {
1481
- checked: settings.enableNativeRedirect,
1482
- onCheckedChange: (checked) => settings.enableNativeRedirect = checked
1483
- })));
1484
- } finally {
1485
- _effect.f();
1486
- }
1487
- };
1488
-
1489
- export {
1490
- Banner,
1491
- DeckLayout,
1492
- DeckSettings
1493
- };
1494
- //# sourceMappingURL=chunk-QBKDUEDV.mjs.map