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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (349) hide show
  1. package/dist/lib/neutral/DeckLayout-6SICSSUF.mjs +278 -0
  2. package/dist/lib/neutral/DeckLayout-6SICSSUF.mjs.map +7 -0
  3. package/dist/lib/neutral/DeckPlugin.mjs +70 -0
  4. package/dist/lib/neutral/DeckPlugin.mjs.map +7 -0
  5. package/dist/lib/neutral/DeckPlugin.node.mjs +18 -0
  6. package/dist/lib/neutral/DeckPlugin.node.mjs.map +7 -0
  7. package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs +27 -0
  8. package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs.map +7 -0
  9. package/dist/lib/{browser/add-toast-EUN62IUE.mjs → neutral/add-toast-2OMTFZ2L.mjs} +5 -5
  10. package/dist/lib/{browser/add-toast-EUN62IUE.mjs.map → neutral/add-toast-2OMTFZ2L.mjs.map} +2 -2
  11. package/dist/lib/{browser/adjust-XWB6ZZ6U.mjs → neutral/adjust-RXTF3IT3.mjs} +15 -17
  12. package/dist/lib/neutral/adjust-RXTF3IT3.mjs.map +7 -0
  13. package/dist/lib/neutral/app-graph-builder-GZYYAN5B.mjs +129 -0
  14. package/dist/lib/neutral/app-graph-builder-GZYYAN5B.mjs.map +7 -0
  15. package/dist/lib/neutral/capabilities/index.mjs +23 -0
  16. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  17. package/dist/lib/neutral/check-app-scheme-A7FZVNZO.mjs +10 -0
  18. package/dist/lib/neutral/chunk-4MYX2NT3.mjs +1335 -0
  19. package/dist/lib/neutral/chunk-4MYX2NT3.mjs.map +7 -0
  20. package/dist/lib/neutral/chunk-64ODQD6S.mjs +282 -0
  21. package/dist/lib/neutral/chunk-64ODQD6S.mjs.map +7 -0
  22. package/dist/lib/neutral/chunk-6MOYMDKQ.mjs +8 -0
  23. package/dist/lib/neutral/chunk-6MOYMDKQ.mjs.map +7 -0
  24. package/dist/lib/neutral/chunk-GBIGQKYW.mjs +112 -0
  25. package/dist/lib/neutral/chunk-GBIGQKYW.mjs.map +7 -0
  26. package/dist/lib/{browser/chunk-KUTDCWZF.mjs → neutral/chunk-GLB73Q6U.mjs} +2 -10
  27. package/dist/lib/{browser/chunk-KUTDCWZF.mjs.map → neutral/chunk-GLB73Q6U.mjs.map} +2 -2
  28. package/dist/lib/neutral/chunk-JMYWDX4I.mjs +19 -0
  29. package/dist/lib/neutral/chunk-JMYWDX4I.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-VHETZ22W.mjs +101 -0
  31. package/dist/lib/neutral/chunk-VHETZ22W.mjs.map +7 -0
  32. package/dist/lib/{browser/chunk-DF2VZ6W3.mjs → neutral/chunk-ZYYOSX5I.mjs} +1 -1
  33. package/dist/lib/{browser/chunk-DF2VZ6W3.mjs.map → neutral/chunk-ZYYOSX5I.mjs.map} +2 -2
  34. package/dist/lib/{browser/close-JXK73YIM.mjs → neutral/close-DG5IVQCE.mjs} +12 -12
  35. package/dist/lib/{browser/close-JXK73YIM.mjs.map → neutral/close-DG5IVQCE.mjs.map} +2 -2
  36. package/dist/lib/neutral/components/index.mjs +126 -0
  37. package/dist/lib/neutral/components/index.mjs.map +7 -0
  38. package/dist/lib/neutral/containers/index.mjs +32 -0
  39. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  40. package/dist/lib/neutral/hooks/index.mjs +178 -0
  41. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  42. package/dist/lib/{node-esm/types → neutral}/index.mjs +13 -8
  43. package/dist/lib/neutral/meta.json +1 -0
  44. package/dist/lib/neutral/meta.mjs +8 -0
  45. package/dist/lib/{browser/open-K2JOEW2E.mjs → neutral/open-SGYZO7RF.mjs} +21 -24
  46. package/dist/lib/neutral/open-SGYZO7RF.mjs.map +7 -0
  47. package/dist/lib/neutral/operation-handler-266CVMTW.mjs +13 -0
  48. package/dist/lib/neutral/operation-handler-266CVMTW.mjs.map +7 -0
  49. package/dist/lib/neutral/operations/index.mjs +8 -0
  50. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  51. package/dist/lib/neutral/plugin.mjs +16 -0
  52. package/dist/lib/neutral/plugin.mjs.map +7 -0
  53. package/dist/lib/neutral/react-root-WZ6KH27J.mjs +41 -0
  54. package/dist/lib/neutral/react-root-WZ6KH27J.mjs.map +7 -0
  55. package/dist/lib/neutral/react-surface-KAAZDHV3.mjs +34 -0
  56. package/dist/lib/neutral/react-surface-KAAZDHV3.mjs.map +7 -0
  57. package/dist/lib/{browser/revert-workspace-BNIR5U64.mjs → neutral/revert-workspace-V6D7W6CL.mjs} +5 -5
  58. package/dist/lib/{browser/revert-workspace-BNIR5U64.mjs.map → neutral/revert-workspace-V6D7W6CL.mjs.map} +2 -2
  59. package/dist/lib/{browser/scroll-into-view-4GSKC3GA.mjs → neutral/scroll-into-view-UM446Q2T.mjs} +5 -5
  60. package/dist/lib/{browser/scroll-into-view-4GSKC3GA.mjs.map → neutral/scroll-into-view-UM446Q2T.mjs.map} +2 -2
  61. package/dist/lib/{browser/set-XCG6NIAO.mjs → neutral/set-JFFKT32S.mjs} +11 -11
  62. package/dist/lib/{browser/set-XCG6NIAO.mjs.map → neutral/set-JFFKT32S.mjs.map} +2 -2
  63. package/dist/lib/{browser/set-layout-mode-BEVNGOY2.mjs → neutral/set-layout-mode-I4YV5V2Y.mjs} +10 -15
  64. package/dist/lib/neutral/set-layout-mode-I4YV5V2Y.mjs.map +7 -0
  65. package/dist/lib/neutral/settings-FE7AC5VS.mjs +34 -0
  66. package/dist/lib/neutral/settings-FE7AC5VS.mjs.map +7 -0
  67. package/dist/lib/{browser/show-undo-5RQNREEB.mjs → neutral/show-undo-ZCMF4J2Q.mjs} +5 -5
  68. package/dist/lib/{browser/show-undo-5RQNREEB.mjs.map → neutral/show-undo-ZCMF4J2Q.mjs.map} +2 -2
  69. package/dist/lib/neutral/state-IIDXMQUO.mjs +86 -0
  70. package/dist/lib/neutral/state-IIDXMQUO.mjs.map +7 -0
  71. package/dist/lib/{browser/switch-workspace-ICJJWNFT.mjs → neutral/switch-workspace-CVDYG5YZ.mjs} +8 -16
  72. package/dist/lib/neutral/switch-workspace-CVDYG5YZ.mjs.map +7 -0
  73. package/dist/lib/neutral/translations.mjs +57 -0
  74. package/dist/lib/neutral/translations.mjs.map +7 -0
  75. package/dist/lib/{browser → neutral}/types/index.mjs +7 -5
  76. package/dist/lib/neutral/types/index.mjs.map +7 -0
  77. package/dist/lib/{browser/update-companion-VPCBH3YT.mjs → neutral/update-companion-VPCM7FJX.mjs} +7 -7
  78. package/dist/lib/neutral/update-companion-VPCM7FJX.mjs.map +7 -0
  79. package/dist/lib/{browser/update-complementary-74DEQY6T.mjs → neutral/update-complementary-SEQ6DDWA.mjs} +6 -6
  80. package/dist/lib/neutral/update-complementary-SEQ6DDWA.mjs.map +7 -0
  81. package/dist/lib/{browser/update-dialog-6TDUYI5R.mjs → neutral/update-dialog-VDHYE4QH.mjs} +5 -5
  82. package/dist/lib/{browser/update-dialog-6TDUYI5R.mjs.map → neutral/update-dialog-VDHYE4QH.mjs.map} +2 -2
  83. package/dist/lib/neutral/update-plank-size-ZXOUZD7Y.mjs +26 -0
  84. package/dist/lib/neutral/update-plank-size-ZXOUZD7Y.mjs.map +7 -0
  85. package/dist/lib/{browser/update-popover-W7E2Z5T6.mjs → neutral/update-popover-VFP32W57.mjs} +5 -5
  86. package/dist/lib/{browser/update-popover-W7E2Z5T6.mjs.map → neutral/update-popover-VFP32W57.mjs.map} +2 -2
  87. package/dist/lib/{browser/update-sidebar-H3A6ZFRU.mjs → neutral/update-sidebar-O5HBOXYH.mjs} +6 -6
  88. package/dist/lib/{browser/update-sidebar-H3A6ZFRU.mjs.map → neutral/update-sidebar-O5HBOXYH.mjs.map} +2 -2
  89. package/dist/lib/neutral/url-handler-3QTKEM2K.mjs +184 -0
  90. package/dist/lib/neutral/url-handler-3QTKEM2K.mjs.map +7 -0
  91. package/dist/types/src/DeckPlugin.d.ts +1 -0
  92. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  93. package/dist/types/src/DeckPlugin.node.d.ts +4 -0
  94. package/dist/types/src/DeckPlugin.node.d.ts.map +1 -0
  95. package/dist/types/src/DeckPlugin.test.d.ts +2 -0
  96. package/dist/types/src/DeckPlugin.test.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/check-app-scheme.d.ts +1 -1
  99. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/index.d.ts +17 -17
  101. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
  103. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
  105. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  107. package/dist/types/src/capabilities/state.d.ts +16 -16
  108. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  109. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/url-handler.d.ts +1 -1
  111. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  112. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  113. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +42 -52
  114. package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -1
  115. package/dist/types/src/components/Matrix/Matrix.d.ts +2 -2
  116. package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -1
  117. package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -1
  118. package/dist/types/src/containers/Deck/Banner.d.ts +1 -1
  119. package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -1
  120. package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -1
  121. package/dist/types/src/containers/Deck/Deck.stories.d.ts +42 -52
  122. package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -1
  123. package/dist/types/src/containers/Deck/DeckContent.d.ts +4 -4
  124. package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -1
  125. package/dist/types/src/containers/Deck/DeckRoot.d.ts +5 -8
  126. package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -1
  127. package/dist/types/src/containers/Deck/DeckViewport.d.ts +4 -7
  128. package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -1
  129. package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -1
  130. package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -1
  131. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +42 -52
  132. package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
  133. package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -1
  134. package/dist/types/src/containers/DeckLayout/Toast.d.ts +1 -1
  135. package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -1
  136. package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -1
  137. package/dist/types/src/containers/Plank/Plank.d.ts +1 -1
  138. package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -1
  139. package/dist/types/src/containers/Plank/Plank.stories.d.ts +42 -52
  140. package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -1
  141. package/dist/types/src/containers/Plank/PlankContent.d.ts +1 -1
  142. package/dist/types/src/containers/Plank/PlankError.d.ts +1 -1
  143. package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -1
  144. package/dist/types/src/containers/Plank/PlankRoot.d.ts +1 -1
  145. package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -1
  146. package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  147. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts +1 -1
  148. package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -1
  149. package/dist/types/src/hooks/useBreakpoints.d.ts +1 -1
  150. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
  151. package/dist/types/src/hooks/useDeckCompanions.d.ts +1 -1
  152. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  153. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
  154. package/dist/types/src/hooks/useMainSize.d.ts.map +1 -1
  155. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  156. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -1
  157. package/dist/types/src/index.d.ts +1 -3
  158. package/dist/types/src/index.d.ts.map +1 -1
  159. package/dist/types/src/layout.d.ts.map +1 -1
  160. package/dist/types/src/meta.d.ts.map +1 -1
  161. package/dist/types/src/operations/add-toast.d.ts +1 -1
  162. package/dist/types/src/operations/add-toast.d.ts.map +1 -1
  163. package/dist/types/src/operations/adjust.d.ts +3 -3
  164. package/dist/types/src/operations/adjust.d.ts.map +1 -1
  165. package/dist/types/src/operations/close.d.ts +1 -1
  166. package/dist/types/src/operations/close.d.ts.map +1 -1
  167. package/dist/types/src/operations/helpers.d.ts.map +1 -1
  168. package/dist/types/src/operations/index.d.ts +1 -2
  169. package/dist/types/src/operations/index.d.ts.map +1 -1
  170. package/dist/types/src/operations/open.d.ts +1 -1
  171. package/dist/types/src/operations/open.d.ts.map +1 -1
  172. package/dist/types/src/operations/revert-workspace.d.ts +1 -1
  173. package/dist/types/src/operations/revert-workspace.d.ts.map +1 -1
  174. package/dist/types/src/operations/scroll-into-view.d.ts +1 -1
  175. package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -1
  176. package/dist/types/src/operations/set-layout-mode.d.ts +1 -1
  177. package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -1
  178. package/dist/types/src/operations/set.d.ts +1 -1
  179. package/dist/types/src/operations/set.d.ts.map +1 -1
  180. package/dist/types/src/operations/show-undo.d.ts +1 -1
  181. package/dist/types/src/operations/show-undo.d.ts.map +1 -1
  182. package/dist/types/src/operations/switch-workspace.d.ts +1 -1
  183. package/dist/types/src/operations/switch-workspace.d.ts.map +1 -1
  184. package/dist/types/src/operations/update-companion.d.ts +1 -1
  185. package/dist/types/src/operations/update-companion.d.ts.map +1 -1
  186. package/dist/types/src/operations/update-complementary.d.ts +1 -1
  187. package/dist/types/src/operations/update-complementary.d.ts.map +1 -1
  188. package/dist/types/src/operations/update-dialog.d.ts +1 -1
  189. package/dist/types/src/operations/update-dialog.d.ts.map +1 -1
  190. package/dist/types/src/operations/update-plank-size.d.ts +3 -3
  191. package/dist/types/src/operations/update-plank-size.d.ts.map +1 -1
  192. package/dist/types/src/operations/update-popover.d.ts +1 -1
  193. package/dist/types/src/operations/update-popover.d.ts.map +1 -1
  194. package/dist/types/src/operations/update-sidebar.d.ts +1 -1
  195. package/dist/types/src/operations/update-sidebar.d.ts.map +1 -1
  196. package/dist/types/src/plugin.d.ts +4 -0
  197. package/dist/types/src/plugin.d.ts.map +1 -0
  198. package/dist/types/src/translations.d.ts +42 -53
  199. package/dist/types/src/translations.d.ts.map +1 -1
  200. package/dist/types/src/types/DeckCapabilities.d.ts +188 -0
  201. package/dist/types/src/types/DeckCapabilities.d.ts.map +1 -0
  202. package/dist/types/src/types/DeckEvents.d.ts +5 -0
  203. package/dist/types/src/types/DeckEvents.d.ts.map +1 -0
  204. package/dist/types/src/types/DeckOperation.d.ts +15 -0
  205. package/dist/types/src/types/DeckOperation.d.ts.map +1 -0
  206. package/dist/types/src/types/Settings.d.ts +5 -5
  207. package/dist/types/src/types/Settings.d.ts.map +1 -1
  208. package/dist/types/src/types/index.d.ts +3 -2
  209. package/dist/types/src/types/index.d.ts.map +1 -1
  210. package/dist/types/src/types/schema.d.ts +0 -1
  211. package/dist/types/src/types/schema.d.ts.map +1 -1
  212. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  213. package/dist/types/src/util/plank-url-params.d.ts.map +1 -1
  214. package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -1
  215. package/dist/types/src/util/set-active.d.ts.map +1 -1
  216. package/dist/types/tsconfig.tsbuildinfo +1 -1
  217. package/package.json +102 -66
  218. package/src/DeckPlugin.node.ts +17 -0
  219. package/src/DeckPlugin.test.ts +27 -0
  220. package/src/DeckPlugin.ts +4 -3
  221. package/src/capabilities/app-graph-builder.ts +3 -3
  222. package/src/capabilities/index.ts +1 -1
  223. package/src/capabilities/operation-handler.ts +1 -1
  224. package/src/capabilities/settings.ts +1 -1
  225. package/src/capabilities/url-handler.ts +1 -1
  226. package/src/components/DeckSettings/DeckSettings.stories.tsx +2 -1
  227. package/src/components/DeckSettings/DeckSettings.tsx +8 -47
  228. package/src/components/Matrix/Matrix.stories.tsx +1 -1
  229. package/src/containers/Deck/Banner.tsx +2 -2
  230. package/src/containers/Deck/Deck.stories.tsx +1 -1
  231. package/src/containers/Deck/DeckContent.tsx +1 -1
  232. package/src/containers/Deck/DeckViewport.tsx +4 -9
  233. package/src/containers/DeckLayout/ActiveNode.tsx +1 -1
  234. package/src/containers/DeckLayout/DeckLayout.stories.tsx +2 -2
  235. package/src/containers/DeckLayout/Fallback.tsx +1 -1
  236. package/src/containers/Plank/Plank.stories.tsx +2 -2
  237. package/src/containers/Plank/PlankHeading.tsx +3 -3
  238. package/src/containers/Plank/PlankLoading.tsx +1 -1
  239. package/src/containers/Plank/PlankRoot.tsx +1 -1
  240. package/src/containers/Sidebar/ComplementarySidebar.tsx +5 -7
  241. package/src/containers/Sidebar/SidebarButton.tsx +7 -1
  242. package/src/hooks/useDeckCompanions.ts +1 -1
  243. package/src/index.ts +1 -3
  244. package/src/meta.ts +1 -0
  245. package/src/operations/add-toast.ts +1 -1
  246. package/src/operations/adjust.ts +4 -5
  247. package/src/operations/close.ts +2 -2
  248. package/src/operations/index.ts +1 -3
  249. package/src/operations/open.ts +7 -7
  250. package/src/operations/revert-workspace.ts +1 -1
  251. package/src/operations/scroll-into-view.ts +1 -1
  252. package/src/operations/set-layout-mode.ts +1 -1
  253. package/src/operations/set.ts +2 -2
  254. package/src/operations/show-undo.ts +1 -1
  255. package/src/operations/switch-workspace.ts +1 -1
  256. package/src/operations/update-companion.ts +1 -1
  257. package/src/operations/update-complementary.ts +1 -1
  258. package/src/operations/update-dialog.ts +1 -1
  259. package/src/operations/update-plank-size.ts +3 -4
  260. package/src/operations/update-popover.ts +1 -1
  261. package/src/operations/update-sidebar.ts +1 -1
  262. package/src/plugin.ts +11 -0
  263. package/src/translations.ts +2 -12
  264. package/src/types/DeckCapabilities.ts +34 -0
  265. package/src/types/DeckEvents.ts +21 -0
  266. package/src/{operations/definitions.ts → types/DeckOperation.ts} +6 -4
  267. package/src/types/Settings.ts +30 -5
  268. package/src/types/index.ts +4 -2
  269. package/src/types/schema.ts +0 -2
  270. package/dist/lib/browser/adjust-XWB6ZZ6U.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-5LM6A3EC.mjs +0 -208
  272. package/dist/lib/browser/chunk-5LM6A3EC.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-BRZAVPMC.mjs +0 -48
  274. package/dist/lib/browser/chunk-BRZAVPMC.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-FRVCL5NO.mjs +0 -72
  276. package/dist/lib/browser/chunk-FRVCL5NO.mjs.map +0 -7
  277. package/dist/lib/browser/index.mjs +0 -201
  278. package/dist/lib/browser/index.mjs.map +0 -7
  279. package/dist/lib/browser/meta.json +0 -1
  280. package/dist/lib/browser/open-K2JOEW2E.mjs.map +0 -7
  281. package/dist/lib/browser/operations/index.mjs +0 -13
  282. package/dist/lib/browser/operations/index.mjs.map +0 -7
  283. package/dist/lib/browser/set-layout-mode-BEVNGOY2.mjs.map +0 -7
  284. package/dist/lib/browser/switch-workspace-ICJJWNFT.mjs.map +0 -7
  285. package/dist/lib/browser/update-companion-VPCBH3YT.mjs.map +0 -7
  286. package/dist/lib/browser/update-complementary-74DEQY6T.mjs.map +0 -7
  287. package/dist/lib/browser/update-plank-size-5VHZOTHE.mjs +0 -28
  288. package/dist/lib/browser/update-plank-size-5VHZOTHE.mjs.map +0 -7
  289. package/dist/lib/node-esm/add-toast-AZM7NFNM.mjs +0 -25
  290. package/dist/lib/node-esm/add-toast-AZM7NFNM.mjs.map +0 -7
  291. package/dist/lib/node-esm/adjust-ICALXQ6F.mjs +0 -96
  292. package/dist/lib/node-esm/adjust-ICALXQ6F.mjs.map +0 -7
  293. package/dist/lib/node-esm/chunk-A63Q53TW.mjs +0 -73
  294. package/dist/lib/node-esm/chunk-A63Q53TW.mjs.map +0 -7
  295. package/dist/lib/node-esm/chunk-B7WZXRW4.mjs +0 -209
  296. package/dist/lib/node-esm/chunk-B7WZXRW4.mjs.map +0 -7
  297. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
  298. package/dist/lib/node-esm/chunk-IRWCUYJY.mjs +0 -71
  299. package/dist/lib/node-esm/chunk-IRWCUYJY.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-MB4SDDVY.mjs +0 -50
  301. package/dist/lib/node-esm/chunk-MB4SDDVY.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs +0 -32
  303. package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs.map +0 -7
  304. package/dist/lib/node-esm/close-GC5V3GD5.mjs +0 -45
  305. package/dist/lib/node-esm/close-GC5V3GD5.mjs.map +0 -7
  306. package/dist/lib/node-esm/index.mjs +0 -202
  307. package/dist/lib/node-esm/index.mjs.map +0 -7
  308. package/dist/lib/node-esm/meta.json +0 -1
  309. package/dist/lib/node-esm/open-XXEHIR6G.mjs +0 -151
  310. package/dist/lib/node-esm/open-XXEHIR6G.mjs.map +0 -7
  311. package/dist/lib/node-esm/operations/index.mjs +0 -14
  312. package/dist/lib/node-esm/operations/index.mjs.map +0 -7
  313. package/dist/lib/node-esm/revert-workspace-WCXAL5C6.mjs +0 -22
  314. package/dist/lib/node-esm/revert-workspace-WCXAL5C6.mjs.map +0 -7
  315. package/dist/lib/node-esm/scroll-into-view-2ZNU44ZO.mjs +0 -22
  316. package/dist/lib/node-esm/scroll-into-view-2ZNU44ZO.mjs.map +0 -7
  317. package/dist/lib/node-esm/set-5MO2JCUQ.mjs +0 -38
  318. package/dist/lib/node-esm/set-5MO2JCUQ.mjs.map +0 -7
  319. package/dist/lib/node-esm/set-layout-mode-3RK4HIG7.mjs +0 -91
  320. package/dist/lib/node-esm/set-layout-mode-3RK4HIG7.mjs.map +0 -7
  321. package/dist/lib/node-esm/show-undo-WV7SAYGJ.mjs +0 -60
  322. package/dist/lib/node-esm/show-undo-WV7SAYGJ.mjs.map +0 -7
  323. package/dist/lib/node-esm/switch-workspace-VNM75H66.mjs +0 -69
  324. package/dist/lib/node-esm/switch-workspace-VNM75H66.mjs.map +0 -7
  325. package/dist/lib/node-esm/update-companion-SIB3GWH7.mjs +0 -33
  326. package/dist/lib/node-esm/update-companion-SIB3GWH7.mjs.map +0 -7
  327. package/dist/lib/node-esm/update-complementary-CZTIVIXU.mjs +0 -29
  328. package/dist/lib/node-esm/update-complementary-CZTIVIXU.mjs.map +0 -7
  329. package/dist/lib/node-esm/update-dialog-HEDV5XBB.mjs +0 -30
  330. package/dist/lib/node-esm/update-dialog-HEDV5XBB.mjs.map +0 -7
  331. package/dist/lib/node-esm/update-plank-size-JJLU7VE3.mjs +0 -29
  332. package/dist/lib/node-esm/update-plank-size-JJLU7VE3.mjs.map +0 -7
  333. package/dist/lib/node-esm/update-popover-HI5TU2VT.mjs +0 -34
  334. package/dist/lib/node-esm/update-popover-HI5TU2VT.mjs.map +0 -7
  335. package/dist/lib/node-esm/update-sidebar-QB5BA655.mjs +0 -26
  336. package/dist/lib/node-esm/update-sidebar-QB5BA655.mjs.map +0 -7
  337. package/dist/types/src/operations/definitions.d.ts +0 -15
  338. package/dist/types/src/operations/definitions.d.ts.map +0 -1
  339. package/dist/types/src/types/capabilities.d.ts +0 -191
  340. package/dist/types/src/types/capabilities.d.ts.map +0 -1
  341. package/dist/types/src/types/events.d.ts +0 -7
  342. package/dist/types/src/types/events.d.ts.map +0 -1
  343. package/src/types/capabilities.ts +0 -35
  344. package/src/types/events.ts +0 -21
  345. /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/check-app-scheme-A7FZVNZO.mjs.map} +0 -0
  346. /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
  347. /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  348. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  349. /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -0,0 +1,1335 @@
1
+ import {
2
+ layoutAppliesTopbar
3
+ } from "./chunk-GBIGQKYW.mjs";
4
+
5
+ // src/containers/Plank/PlankLoading.tsx
6
+ import React from "react";
7
+ var PlankLoading = () => {
8
+ return /* @__PURE__ */ React.createElement("div", {
9
+ className: "grid place-items-center dx-attention-surface"
10
+ });
11
+ };
12
+
13
+ // src/containers/Plank/PlankError.tsx
14
+ import React5, { useEffect as useEffect2, useMemo as useMemo2, useState } from "react";
15
+ import { TimeoutError } from "@dxos/errors";
16
+ import { log } from "@dxos/log";
17
+ import { ErrorFallback, useTranslation as useTranslation3 } from "@dxos/react-ui";
18
+ import { descriptionMessage, mx } from "@dxos/ui-theme";
19
+ import { meta as meta3 } from "#meta";
20
+
21
+ // src/containers/Plank/PlankHeading.tsx
22
+ import React4, { Fragment, memo, useCallback as useCallback2, useEffect, useMemo } from "react";
23
+ import { Surface } from "@dxos/app-framework/ui";
24
+ import { AppSurface } from "@dxos/app-toolkit/ui";
25
+ import { Graph, useActionRunner } from "@dxos/plugin-graph";
26
+ import { Icon, IconButton as IconButton2, Popover, toLocalizedString, useTranslation as useTranslation2 } from "@dxos/react-ui";
27
+ import { getLinkedVariant } from "@dxos/react-ui-attention";
28
+ import { StackItem } from "@dxos/react-ui-stack";
29
+ import { TextTooltip } from "@dxos/react-ui-text-tooltip";
30
+ import { hoverableControls, hoverableFocusedWithinControls, iconSize } from "@dxos/ui-theme";
31
+ import { useBreakpoints } from "#hooks";
32
+ import { meta as meta2 } from "#meta";
33
+ import { PLANK_COMPANION_TYPE } from "#types";
34
+
35
+ // src/containers/Plank/PlankControls.tsx
36
+ import React2, { forwardRef, useCallback } from "react";
37
+ import { useOperationInvoker } from "@dxos/app-framework/ui";
38
+ import { LayoutOperation } from "@dxos/app-toolkit";
39
+ import { ButtonGroup, IconButton, useTranslation } from "@dxos/react-ui";
40
+ import { meta } from "#meta";
41
+ var plankControlSpacing = "px-2";
42
+ var PlankCompanionControls = /* @__PURE__ */ forwardRef(({ primary }, forwardedRef) => {
43
+ const { t } = useTranslation(meta.id);
44
+ const { invokePromise } = useOperationInvoker();
45
+ const handleCloseCompanion = useCallback(() => {
46
+ return invokePromise(LayoutOperation.UpdateCompanion, {
47
+ subject: null
48
+ });
49
+ }, [
50
+ invokePromise
51
+ ]);
52
+ return /* @__PURE__ */ React2.createElement("div", {
53
+ ref: forwardedRef,
54
+ className: "contents dx-app-no-drag"
55
+ }, /* @__PURE__ */ React2.createElement(PlankControl, {
56
+ label: t("close-companion.label"),
57
+ variant: "ghost",
58
+ icon: "ph--x--regular",
59
+ onClick: handleCloseCompanion,
60
+ classNames: plankControlSpacing
61
+ }));
62
+ });
63
+ var PlankControl = ({ icon, label: label3, ...props }) => {
64
+ return /* @__PURE__ */ React2.createElement(IconButton, {
65
+ label: label3,
66
+ icon,
67
+ iconOnly: true,
68
+ variant: "ghost",
69
+ tooltipSide: "bottom",
70
+ ...props
71
+ });
72
+ };
73
+ var PlankControls = /* @__PURE__ */ forwardRef(({ children, classNames, variant = "default", capabilities, layoutMode, pin, close = false, onClick, ...props }, forwardedRef) => {
74
+ const { t } = useTranslation(meta.id);
75
+ const buttonClassNames = variant === "hide-disabled" ? `disabled:hidden ${plankControlSpacing}` : plankControlSpacing;
76
+ const layoutIsAnySolo = !!layoutMode?.startsWith("solo");
77
+ return /* @__PURE__ */ React2.createElement(ButtonGroup, {
78
+ ...props,
79
+ classNames: [
80
+ "dx-app-no-drag opacity-100!",
81
+ classNames
82
+ ],
83
+ ref: forwardedRef
84
+ }, capabilities.deck ? /* @__PURE__ */ React2.createElement(React2.Fragment, null, capabilities.solo && /* @__PURE__ */ React2.createElement(React2.Fragment, null, layoutMode === "solo" && /* @__PURE__ */ React2.createElement(PlankControl, {
85
+ label: t("show-fullscreen-plank.label"),
86
+ classNames: buttonClassNames,
87
+ icon: "ph--corners-out--regular",
88
+ onClick: () => onClick?.("solo--fullscreen")
89
+ }), /* @__PURE__ */ React2.createElement(PlankControl, {
90
+ label: t(layoutMode === "solo--fullscreen" ? "exit-fullscreen.label" : layoutIsAnySolo ? "show-deck-plank.label" : "show-solo-plank.label"),
91
+ classNames: buttonClassNames,
92
+ icon: layoutMode === "solo--fullscreen" ? "ph--corners-in--regular" : layoutIsAnySolo ? "ph--arrows-in-line-horizontal--regular" : "ph--arrows-out-line-horizontal--regular",
93
+ onClick: () => onClick?.(layoutMode === "solo--fullscreen" ? "solo--fullscreen" : "solo")
94
+ })), !layoutIsAnySolo && layoutMode !== "multi" && /* @__PURE__ */ React2.createElement(React2.Fragment, null, /* @__PURE__ */ React2.createElement(PlankControl, {
95
+ label: t("increment-start.label"),
96
+ disabled: !capabilities.incrementStart,
97
+ classNames: buttonClassNames,
98
+ icon: "ph--caret-left--regular",
99
+ onClick: () => onClick?.("increment-start")
100
+ }), /* @__PURE__ */ React2.createElement(PlankControl, {
101
+ label: t("increment-end.label"),
102
+ disabled: !capabilities.incrementEnd,
103
+ classNames: buttonClassNames,
104
+ icon: "ph--caret-right--regular",
105
+ onClick: () => onClick?.("increment-end")
106
+ }))) : capabilities.fullscreen && /* @__PURE__ */ React2.createElement(PlankControl, {
107
+ label: t(layoutMode === "solo--fullscreen" ? "exit-fullscreen.label" : "show-fullscreen-plank.label"),
108
+ classNames: buttonClassNames,
109
+ icon: layoutMode === "solo--fullscreen" ? "ph--corners-in--regular" : "ph--corners-out--regular",
110
+ onClick: () => onClick?.("solo--fullscreen")
111
+ }), close && !layoutIsAnySolo && /* @__PURE__ */ React2.createElement(PlankControl, {
112
+ label: t(`${typeof close === "string" ? "minify" : "close"}.label`),
113
+ classNames: buttonClassNames,
114
+ "data-testid": "plankHeading.close",
115
+ icon: close === "minify-start" ? "ph--caret-line-left--regular" : close === "minify-end" ? "ph--caret-line-right--regular" : "ph--x--regular",
116
+ onClick: () => onClick?.("close")
117
+ }), capabilities.companion && /* @__PURE__ */ React2.createElement(PlankControl, {
118
+ label: t("open-companion.label"),
119
+ classNames: buttonClassNames,
120
+ "data-testid": "plankHeading.companion",
121
+ icon: "ph--square-split-horizontal--regular",
122
+ onClick: () => onClick?.("companion")
123
+ }), children);
124
+ });
125
+
126
+ // src/containers/Plank/PlankRoot.tsx
127
+ import { createContext } from "@radix-ui/react-context";
128
+ import React3 from "react";
129
+ var PLANK_NAME = "Plank";
130
+ var [PlankProvider, usePlankContext] = createContext(PLANK_NAME);
131
+ var PlankRoot = ({ children, ...context }) => {
132
+ return /* @__PURE__ */ React3.createElement(PlankProvider, context, children);
133
+ };
134
+
135
+ // src/containers/Plank/PlankHeading.tsx
136
+ var MAX_COMPANIONS = 5;
137
+ var PlankHeading = /* @__PURE__ */ memo(({ id, part, node, deckEnabled, canIncrementStart, canIncrementEnd, popoverAnchorId, primaryId, pending, companioned, companions, layoutMode, actions = [], debug = false }) => {
138
+ const { t } = useTranslation2(meta2.id);
139
+ const { graph, onAdjust, onUpdateCompanion } = usePlankContext("PlankHeading");
140
+ const runAction = useActionRunner();
141
+ const breakpoint = useBreakpoints();
142
+ const icon = node?.properties?.icon ?? "ph--placeholder--regular";
143
+ const label3 = pending ? t("pending.heading") : toLocalizedString(node?.properties?.label ?? [
144
+ "plank-heading-fallback.label",
145
+ {
146
+ ns: meta2.id
147
+ }
148
+ ], t);
149
+ const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;
150
+ useEffect(() => {
151
+ const frame = requestAnimationFrame(() => {
152
+ if (node) {
153
+ void Graph.expand(graph, node.id, "child");
154
+ }
155
+ });
156
+ return () => cancelAnimationFrame(frame);
157
+ }, [
158
+ node
159
+ ]);
160
+ const attendableId = primaryId ?? id;
161
+ const capabilities = useMemo(() => ({
162
+ deck: deckEnabled ?? true,
163
+ solo: breakpoint !== "mobile" && (part === "solo" || part === "multi"),
164
+ incrementStart: canIncrementStart,
165
+ incrementEnd: canIncrementEnd,
166
+ fullscreen: !isCompanionNode,
167
+ companion: layoutMode !== "multi" && !isCompanionNode && companions && companions.length > 0
168
+ }), [
169
+ breakpoint,
170
+ part,
171
+ companions,
172
+ canIncrementStart,
173
+ canIncrementEnd,
174
+ isCompanionNode,
175
+ deckEnabled,
176
+ layoutMode
177
+ ]);
178
+ const variant = isCompanionNode ? getLinkedVariant(id) : void 0;
179
+ const sigilActions = useMemo(() => {
180
+ if (!node) {
181
+ return void 0;
182
+ } else if (variant) {
183
+ return [];
184
+ } else {
185
+ return [
186
+ actions,
187
+ Graph.getActions(graph, node.id).filter((action) => [
188
+ "list-item",
189
+ "list-item-primary",
190
+ "heading-list-item"
191
+ ].includes(action.properties.disposition))
192
+ ].filter((a) => a.length > 0);
193
+ }
194
+ }, [
195
+ actions,
196
+ node,
197
+ variant,
198
+ graph
199
+ ]);
200
+ const handleAction = useCallback2((action) => {
201
+ if (typeof action.data === "function") {
202
+ void runAction(action, {
203
+ parent: node,
204
+ caller: meta2.id
205
+ });
206
+ }
207
+ }, [
208
+ node,
209
+ runAction
210
+ ]);
211
+ const handlePlankAction = useCallback2((eventType) => {
212
+ onAdjust?.(id, eventType);
213
+ }, [
214
+ onAdjust,
215
+ id
216
+ ]);
217
+ const ActionRoot = node && popoverAnchorId === `${meta2.id}:${node.id}` ? Popover.Anchor : Fragment;
218
+ const handleTabClick = useCallback2((event) => {
219
+ const target = event.target.closest("[data-id]");
220
+ const tabId = target?.dataset?.id;
221
+ if (tabId) {
222
+ onUpdateCompanion?.(tabId);
223
+ }
224
+ }, [
225
+ onUpdateCompanion
226
+ ]);
227
+ return /* @__PURE__ */ React4.createElement(StackItem.Heading, {
228
+ "data-tauri-drag-region": true,
229
+ "data-plank-heading": true,
230
+ style: iconSize(5),
231
+ classNames: [
232
+ "py-1 items-stretch gap-1 sticky left-12 dx-app-drag min-w-0 dx-contain-layout dx-density-coarse",
233
+ part === "solo" ? "ps-[calc(env(safe-area-inset-left)+.25rem)] pe-[calc(env(safe-area-inset-right)+.25rem)]" : "px-1",
234
+ ...layoutMode === "solo--fullscreen" ? [
235
+ hoverableControls,
236
+ hoverableFocusedWithinControls,
237
+ "*:transition-opacity *:opacity-(--controls-opacity) bg-transparent",
238
+ "border-transparent transition-[background-color,border-color]",
239
+ "hover-hover:hover:bg-header-surface focus-within:bg-header-surface",
240
+ "hover-hover:hover:border-subdued-separator focus-within:border-subdued-separator"
241
+ ] : []
242
+ ]
243
+ }, companions && isCompanionNode ? (
244
+ /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */
245
+ /* @__PURE__ */ React4.createElement("div", {
246
+ "data-tauri-drag-region": true,
247
+ className: "flex-1 min-w-0 overflow-x-auto scrollbar-none flex gap-1"
248
+ }, companions.map(({ id: id2, properties: { icon: icon2, label: label4 } }) => /* @__PURE__ */ React4.createElement(IconButton2, {
249
+ key: id2,
250
+ "data-id": id2,
251
+ icon: icon2,
252
+ iconOnly: companions.length > MAX_COMPANIONS && node?.id !== id2,
253
+ label: toLocalizedString(label4, t),
254
+ variant: node?.id === id2 ? "primary" : "ghost",
255
+ onClick: handleTabClick
256
+ })))
257
+ ) : /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement(ActionRoot, null, node && sigilActions ? /* @__PURE__ */ React4.createElement(StackItem.Sigil, {
258
+ icon,
259
+ related: part === "complementary",
260
+ attendableId,
261
+ triggerLabel: t("actions-menu.label"),
262
+ actions: sigilActions,
263
+ onAction: handleAction
264
+ }, /* @__PURE__ */ React4.createElement(Surface.Surface, {
265
+ type: AppSurface.MenuFooter,
266
+ data: {
267
+ subject: node.data
268
+ }
269
+ })) : /* @__PURE__ */ React4.createElement(StackItem.SigilButton, null, /* @__PURE__ */ React4.createElement("span", {
270
+ className: "sr-only"
271
+ }, label3), /* @__PURE__ */ React4.createElement(Icon, {
272
+ icon
273
+ }))), /* @__PURE__ */ React4.createElement(TextTooltip, {
274
+ text: label3,
275
+ onlyWhenTruncating: true
276
+ }, /* @__PURE__ */ React4.createElement(StackItem.HeadingLabel, {
277
+ "data-tauri-drag-region": true,
278
+ attendableId,
279
+ related: part === "complementary",
280
+ ...pending && {
281
+ classNames: "text-description"
282
+ }
283
+ }, label3))), debug && /* @__PURE__ */ React4.createElement("div", {
284
+ className: "flex items-center text-sm text-info-text"
285
+ }, layoutMode, ":", part, ":", companioned), node && part !== "complementary" && /* @__PURE__ */ React4.createElement(Surface.Surface, {
286
+ type: AppSurface.NavbarEnd,
287
+ data: {
288
+ subject: node.data
289
+ }
290
+ }), companioned === "companion" ? /* @__PURE__ */ React4.createElement(PlankCompanionControls, {
291
+ primary: primaryId
292
+ }) : /* @__PURE__ */ React4.createElement(PlankControls, {
293
+ capabilities,
294
+ layoutMode,
295
+ close: part === "complementary" ? "minify-end" : true,
296
+ onClick: handlePlankAction
297
+ }));
298
+ });
299
+
300
+ // src/containers/Plank/PlankError.tsx
301
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/containers/Plank/PlankError.tsx";
302
+ var PlankError = ({ id, part, node, error: errorProp }) => {
303
+ const [timedOut, setTimedOut] = useState(false);
304
+ useEffect2(() => {
305
+ const timer = setTimeout(() => setTimedOut(true), 5e3);
306
+ return () => clearTimeout(timer);
307
+ }, []);
308
+ const error = useMemo2(() => {
309
+ if (timedOut) {
310
+ return new TimeoutError({
311
+ message: "Timeout loading content"
312
+ });
313
+ }
314
+ return errorProp;
315
+ }, [
316
+ timedOut,
317
+ errorProp
318
+ ]);
319
+ return /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement(PlankHeading, {
320
+ id,
321
+ part,
322
+ node,
323
+ pending: !timedOut
324
+ }), timedOut ? /* @__PURE__ */ React5.createElement(PlankErrorFallback, {
325
+ error
326
+ }) : /* @__PURE__ */ React5.createElement(PlankLoading, null));
327
+ };
328
+ var PlankErrorFallback = ({ error }) => {
329
+ const { t } = useTranslation3(meta3.id);
330
+ useEffect2(() => {
331
+ if (error) {
332
+ log.error("plank error", {
333
+ error
334
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 44, S: void 0 });
335
+ }
336
+ }, [
337
+ error
338
+ ]);
339
+ if (process.env.NODE_ENV === "development") {
340
+ return /* @__PURE__ */ React5.createElement(ErrorFallback, {
341
+ title: "Plank Error",
342
+ error
343
+ });
344
+ } else {
345
+ const errorString = error?.toString() ?? "";
346
+ return /* @__PURE__ */ React5.createElement("div", {
347
+ role: "alert",
348
+ "data-testid": "plank-content-error",
349
+ className: "dx-attention-surface overflow-y-auto p-8 grid place-items-center"
350
+ }, /* @__PURE__ */ React5.createElement("p", {
351
+ className: mx(descriptionMessage, "break-all rounded-md p-4")
352
+ }, error ? errorString : t("error-fallback.message")));
353
+ }
354
+ };
355
+
356
+ // src/containers/Plank/PlankComponent.tsx
357
+ import { useFocusFinders } from "@fluentui/react-tabster";
358
+ import React6, { memo as memo2, useCallback as useCallback3, useLayoutEffect, useMemo as useMemo3, useRef } from "react";
359
+ import { Surface as Surface2 } from "@dxos/app-framework/ui";
360
+ import { AppSurface as AppSurface2 } from "@dxos/app-toolkit/ui";
361
+ import { debounce } from "@dxos/async";
362
+ import { getLinkedVariant as getLinkedVariant2 } from "@dxos/react-ui-attention";
363
+ import { useAttentionAttributes } from "@dxos/react-ui-attention";
364
+ import { StackItem as StackItem2, railGridHorizontal } from "@dxos/react-ui-stack";
365
+ import { mainIntrinsicSize, mx as mx2 } from "@dxos/ui-theme";
366
+ import { useMainSize } from "#hooks";
367
+ import { PLANK_COMPANION_TYPE as PLANK_COMPANION_TYPE2 } from "#types";
368
+ var smoothScrollTo = (element, target, duration) => {
369
+ const start = element.scrollLeft;
370
+ const distance = target - start;
371
+ const startTime = performance.now();
372
+ const step = (currentTime) => {
373
+ const elapsed = currentTime - startTime;
374
+ const progress = Math.min(elapsed / duration, 1);
375
+ const eased = 1 - Math.pow(1 - progress, 3);
376
+ element.scrollLeft = start + distance * eased;
377
+ if (progress < 1) {
378
+ requestAnimationFrame(step);
379
+ }
380
+ };
381
+ requestAnimationFrame(step);
382
+ };
383
+ var DEFAULT_SIZE = 48;
384
+ var DEFAULT_COMPANION_SIZE = 35;
385
+ var PlankComponent = /* @__PURE__ */ memo2(({ part, id, path, order, active, node, primary, companions, companioned }) => {
386
+ const { layoutMode, settings, popoverAnchorId, scrollIntoView, plankSizing, onResize, onScrollIntoView } = usePlankContext("PlankComponent");
387
+ const canResize = layoutMode === "multi";
388
+ const { findFirstFocusable } = useFocusFinders();
389
+ const isCompanion = companioned === "companion";
390
+ const attentionAttrs = useAttentionAttributes(primary?.id ?? id);
391
+ const orderId = isCompanion ? primary?.id : id;
392
+ const index = orderId && active ? active.findIndex((entryId) => entryId === orderId) : -1;
393
+ const length = active?.length ?? 1;
394
+ const isOrdered = !!active && index >= 0;
395
+ const canIncrementStart = isOrdered && index > 0;
396
+ const canIncrementEnd = isOrdered && index < length - 1;
397
+ const rootElement = useRef(null);
398
+ const variant = node?.type === PLANK_COMPANION_TYPE2 ? getLinkedVariant2(id) : void 0;
399
+ const sizeAttrs = useMainSize();
400
+ const sizeKey = id.split("+")[0];
401
+ const size = isCompanion ? DEFAULT_COMPANION_SIZE : plankSizing?.[sizeKey] ?? DEFAULT_SIZE;
402
+ const handleSizeChange = useCallback3(debounce((nextSize) => {
403
+ const size2 = Math.round(nextSize);
404
+ onResize?.(sizeKey, size2);
405
+ }, 200), [
406
+ sizeKey,
407
+ onResize
408
+ ]);
409
+ const handleKeyDown = useCallback3((event) => {
410
+ if (event.target === event.currentTarget) {
411
+ switch (event.key) {
412
+ case "Escape":
413
+ rootElement.current?.closest("main")?.focus();
414
+ break;
415
+ case "Enter":
416
+ rootElement.current && findFirstFocusable(rootElement.current)?.focus();
417
+ break;
418
+ }
419
+ }
420
+ }, []);
421
+ useLayoutEffect(() => {
422
+ if (scrollIntoView === id && layoutMode === "multi" && rootElement.current) {
423
+ const element = rootElement.current;
424
+ const scrollParent = element.closest('[style*="overflow"], .overflow-x-auto');
425
+ if (scrollParent) {
426
+ const elementRect = element.getBoundingClientRect();
427
+ const parentRect = scrollParent.getBoundingClientRect();
428
+ const targetScrollLeft = scrollParent.scrollLeft + (elementRect.left - parentRect.left);
429
+ smoothScrollTo(scrollParent, targetScrollLeft, 300);
430
+ }
431
+ onScrollIntoView?.(void 0);
432
+ }
433
+ }, [
434
+ id,
435
+ scrollIntoView,
436
+ layoutMode,
437
+ onScrollIntoView
438
+ ]);
439
+ const isSolo = layoutMode.startsWith("solo") && part === "solo";
440
+ const isAttendable = layoutMode.startsWith("solo") && part.startsWith("solo") || layoutMode === "multi" && part === "multi";
441
+ const data = useMemo3(() => node && {
442
+ attendableId: id,
443
+ subject: node.data,
444
+ companionTo: primary?.data,
445
+ properties: node.properties,
446
+ variant,
447
+ path,
448
+ popoverAnchorId
449
+ }, [
450
+ node,
451
+ node?.data,
452
+ node?.properties,
453
+ path,
454
+ popoverAnchorId,
455
+ primary?.data,
456
+ variant
457
+ ]);
458
+ const placeholder = useMemo3(() => /* @__PURE__ */ React6.createElement(PlankLoading, null), []);
459
+ const Root = part.startsWith("solo") ? "article" : StackItem2.Root;
460
+ const fullscreen = layoutMode === "solo--fullscreen";
461
+ const classNames = [
462
+ "dx-attention-surface relative dx-focus-ring-inset-over-all dx-density-coarse",
463
+ isSolo && "absolute inset-0",
464
+ isSolo && mainIntrinsicSize,
465
+ railGridHorizontal,
466
+ part.startsWith("solo") && "grid",
467
+ part.startsWith("solo-") && "grid-rows-subgrid row-span-2 min-w-0",
468
+ fullscreen && "grid-rows-1",
469
+ part === "multi" && (isCompanion ? "border-separator! border-e" : "border-separator! border-x"),
470
+ part === "solo-companion" && "border-separator! border-s",
471
+ settings?.encapsulatedPlanks && !part.startsWith("solo") && "mx-(--main-spacing) border-separator! border rounded-sm overflow-hidden"
472
+ ];
473
+ return /* @__PURE__ */ React6.createElement(Root, {
474
+ ref: rootElement,
475
+ "data-testid": "deck.plank",
476
+ "data-popover-collision-boundary": true,
477
+ tabIndex: 0,
478
+ ...part.startsWith("solo") ? {
479
+ className: mx2(classNames),
480
+ ...sizeAttrs
481
+ } : {
482
+ role: "article",
483
+ item: {
484
+ id
485
+ },
486
+ classNames,
487
+ order,
488
+ size,
489
+ onSizeChange: handleSizeChange
490
+ },
491
+ ...isAttendable ? attentionAttrs : {},
492
+ onKeyDown: handleKeyDown
493
+ }, node ? /* @__PURE__ */ React6.createElement(React6.Fragment, null, !fullscreen && /* @__PURE__ */ React6.createElement(PlankHeading, {
494
+ id,
495
+ part: part.startsWith("solo-") ? "solo" : part,
496
+ node,
497
+ layoutMode,
498
+ deckEnabled: settings?.enableDeck,
499
+ canIncrementStart,
500
+ canIncrementEnd,
501
+ popoverAnchorId,
502
+ primaryId: primary?.id,
503
+ companioned,
504
+ companions
505
+ }), /* @__PURE__ */ React6.createElement(Surface2.Surface, {
506
+ key: node.id,
507
+ type: AppSurface2.Article,
508
+ data,
509
+ limit: 1,
510
+ fallback: PlankErrorFallback,
511
+ placeholder
512
+ })) : /* @__PURE__ */ React6.createElement(PlankError, {
513
+ id,
514
+ part
515
+ }), canResize && /* @__PURE__ */ React6.createElement(StackItem2.ResizeHandle, null));
516
+ });
517
+
518
+ // src/containers/Plank/PlankContent.tsx
519
+ import React7 from "react";
520
+ import { railGridHorizontal as railGridHorizontal2 } from "@dxos/react-ui-stack";
521
+ import { composable, composableProps, mainIntrinsicSize as mainIntrinsicSize2 } from "@dxos/ui-theme";
522
+ import { useMainSize as useMainSize2 } from "#hooks";
523
+ var PlankContent = composable(({ children, solo, companion, encapsulate, ...props }, forwardedRef) => {
524
+ const sizeAttrs = useMainSize2();
525
+ if (!solo) {
526
+ return children;
527
+ }
528
+ return /* @__PURE__ */ React7.createElement("div", {
529
+ ...sizeAttrs,
530
+ ...composableProps(props, {
531
+ role: "none",
532
+ classNames: [
533
+ "absolute inset-(--main-spacing) grid",
534
+ railGridHorizontal2,
535
+ mainIntrinsicSize2,
536
+ companion && "grid-cols-[6fr_4fr]",
537
+ encapsulate && "border border-separator rounded-sm overflow-hidden"
538
+ ]
539
+ }),
540
+ "data-popover-collision-boundary": true,
541
+ ref: forwardedRef
542
+ }, children);
543
+ });
544
+
545
+ // src/containers/Plank/Plank.tsx
546
+ var Plank = {
547
+ Root: PlankRoot,
548
+ Content: PlankContent,
549
+ Component: PlankComponent,
550
+ Heading: PlankHeading,
551
+ Controls: PlankControls
552
+ };
553
+
554
+ // src/containers/Sidebar/SidebarButton.tsx
555
+ import React8, { useCallback as useCallback4 } from "react";
556
+ import { useOperationInvoker as useOperationInvoker2 } from "@dxos/app-framework/ui";
557
+ import { LayoutOperation as LayoutOperation2 } from "@dxos/app-toolkit";
558
+ import { IconButton as IconButton3, useTranslation as useTranslation4 } from "@dxos/react-ui";
559
+ import { getLinkedVariant as getLinkedVariant3 } from "@dxos/react-ui-attention";
560
+ import { useDeckCompanions, useDeckState } from "#hooks";
561
+ import { meta as meta4 } from "#meta";
562
+ var ToggleSidebarButton = ({ classNames, variant = "ghost" }) => {
563
+ const { updateState } = useDeckState();
564
+ const { t } = useTranslation4(meta4.id);
565
+ const handleClick = useCallback4(() => {
566
+ updateState((state) => ({
567
+ ...state,
568
+ sidebarState: state.sidebarState === "expanded" ? "collapsed" : "expanded"
569
+ }));
570
+ }, [
571
+ updateState
572
+ ]);
573
+ return /* @__PURE__ */ React8.createElement(IconButton3, {
574
+ variant,
575
+ icon: "ph--sidebar--regular",
576
+ iconOnly: true,
577
+ size: 4,
578
+ label: t("open-navigation-sidebar.label"),
579
+ onClick: handleClick,
580
+ classNames
581
+ });
582
+ };
583
+ var CloseSidebarButton = () => {
584
+ const { updateState } = useDeckState();
585
+ const { t } = useTranslation4(meta4.id);
586
+ const handleClick = useCallback4(() => {
587
+ updateState((state) => ({
588
+ ...state,
589
+ sidebarState: "collapsed"
590
+ }));
591
+ }, [
592
+ updateState
593
+ ]);
594
+ return /* @__PURE__ */ React8.createElement(IconButton3, {
595
+ variant: "ghost",
596
+ icon: "ph--caret-line-left--regular",
597
+ iconOnly: true,
598
+ size: 4,
599
+ label: t("close-navigation-sidebar.button"),
600
+ onClick: handleClick,
601
+ classNames: "rounded-none px-1 dx-focus-ring-inset pe-[max(.5rem,env(safe-area-inset-left))]"
602
+ });
603
+ };
604
+ var ToggleComplementarySidebarButton = ({ inR0, classNames, current }) => {
605
+ const { invokePromise } = useOperationInvoker2();
606
+ const { state, updateState } = useDeckState();
607
+ const { t } = useTranslation4(meta4.id);
608
+ const companions = useDeckCompanions();
609
+ const handleClick = useCallback4(() => {
610
+ const nextState = state.complementarySidebarState === "expanded" ? "collapsed" : "expanded";
611
+ updateState((state2) => ({
612
+ ...state2,
613
+ complementarySidebarState: nextState
614
+ }));
615
+ const subject = state.complementarySidebarPanel ?? (companions[0] && getLinkedVariant3(companions[0].id));
616
+ if (nextState === "expanded" && !current && subject) {
617
+ void invokePromise(LayoutOperation2.UpdateComplementary, {
618
+ subject
619
+ });
620
+ }
621
+ }, [
622
+ state,
623
+ updateState,
624
+ current,
625
+ companions,
626
+ invokePromise
627
+ ]);
628
+ const label3 = t(state.complementarySidebarState === "expanded" ? "close-complementary-sidebar.label" : "open-complementary-sidebar.label");
629
+ return /* @__PURE__ */ React8.createElement(IconButton3, {
630
+ variant: "ghost",
631
+ classNames: [
632
+ "[&>svg]:-scale-x-100",
633
+ classNames
634
+ ],
635
+ icon: "ph--sidebar-simple--regular",
636
+ iconOnly: true,
637
+ label: label3,
638
+ tooltipSide: inR0 ? "left" : void 0,
639
+ onClick: handleClick
640
+ });
641
+ };
642
+
643
+ // src/containers/Sidebar/ComplementarySidebar.tsx
644
+ import React9, { useCallback as useCallback5, useEffect as useEffect3, useMemo as useMemo4, useState as useState2 } from "react";
645
+ import { Surface as Surface3, useOperationInvoker as useOperationInvoker3 } from "@dxos/app-framework/ui";
646
+ import { LayoutOperation as LayoutOperation3 } from "@dxos/app-toolkit";
647
+ import { IconButton as IconButton4, Main, Panel, toLocalizedString as toLocalizedString2, Toolbar, useTranslation as useTranslation5 } from "@dxos/react-ui";
648
+ import { getLinkedVariant as getLinkedVariant4 } from "@dxos/react-ui-attention";
649
+ import { Tabs } from "@dxos/react-ui-tabs";
650
+ import { iconSize as iconSize2, mx as mx3 } from "@dxos/ui-theme";
651
+ import { useBreakpoints as useBreakpoints2, useDeckCompanions as useDeckCompanions2, useDeckState as useDeckState2, useHoistStatusbar } from "#hooks";
652
+ import { meta as meta5 } from "#meta";
653
+ import { getMode } from "#types";
654
+ var label = [
655
+ "complementary-sidebar.title",
656
+ {
657
+ ns: meta5.id
658
+ }
659
+ ];
660
+ var ComplementarySidebar = ({ current }) => {
661
+ const { invokePromise } = useOperationInvoker3();
662
+ const { t } = useTranslation5(meta5.id);
663
+ const { state, deck, updateState } = useDeckState2();
664
+ const layoutMode = getMode(deck);
665
+ const breakpoint = useBreakpoints2();
666
+ const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
667
+ const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);
668
+ const companions = useDeckCompanions2();
669
+ const activeCompanion = companions.find((companion) => getLinkedVariant4(companion.id) === current);
670
+ const activeId = activeCompanion && getLinkedVariant4(activeCompanion.id);
671
+ const [internalValue, setInternalValue] = useState2(activeId);
672
+ useEffect3(() => {
673
+ setInternalValue(activeId);
674
+ }, [
675
+ activeId
676
+ ]);
677
+ const handleTabClick = useCallback5((event) => {
678
+ const nextValue = event.currentTarget.getAttribute("data-value");
679
+ if (nextValue === activeId) {
680
+ updateState((state2) => ({
681
+ ...state2,
682
+ complementarySidebarState: state2.complementarySidebarState === "expanded" ? "collapsed" : "expanded"
683
+ }));
684
+ } else {
685
+ setInternalValue(nextValue);
686
+ updateState((state2) => ({
687
+ ...state2,
688
+ complementarySidebarState: "expanded"
689
+ }));
690
+ void invokePromise(LayoutOperation3.UpdateComplementary, {
691
+ subject: nextValue
692
+ });
693
+ }
694
+ }, [
695
+ state.complementarySidebarState,
696
+ activeId,
697
+ invokePromise,
698
+ updateState
699
+ ]);
700
+ const data = useMemo4(() => activeCompanion && {
701
+ id: activeCompanion.id,
702
+ subject: activeCompanion.data
703
+ }, [
704
+ activeCompanion?.id,
705
+ activeCompanion?.data
706
+ ]);
707
+ useEffect3(() => {
708
+ if (!activeId) {
709
+ void invokePromise(LayoutOperation3.UpdateComplementary, {
710
+ state: "collapsed"
711
+ });
712
+ }
713
+ }, [
714
+ activeId,
715
+ invokePromise
716
+ ]);
717
+ return /* @__PURE__ */ React9.createElement(Main.ComplementarySidebar, {
718
+ label,
719
+ classNames: [
720
+ topbar && "top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]",
721
+ hoistStatusbar && "bottom-(--dx-statusbar-size)"
722
+ ]
723
+ }, /* @__PURE__ */ React9.createElement(Tabs.Root, {
724
+ classNames: "contents",
725
+ orientation: "vertical",
726
+ value: internalValue
727
+ }, /* @__PURE__ */ React9.createElement("div", {
728
+ "data-tauri-drag-region": true,
729
+ style: iconSize2(5),
730
+ className: mx3("absolute z-1 inset-y-0 end-0 w-(--dx-r0-size)!", "py-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] border-s border-subdued-separator", "grid grid-cols-1 grid-rows-[1fr_min-content] bg-toolbar-surface dx-contain-layout dx-app-drag")
731
+ }, /* @__PURE__ */ React9.createElement(Tabs.Tablist, {
732
+ classNames: "grid grid-cols-1 auto-rows-(--dx-rail-action) overflow-y-auto"
733
+ }, companions.map((companion) => /* @__PURE__ */ React9.createElement(Tabs.Tab, {
734
+ key: getLinkedVariant4(companion.id),
735
+ value: getLinkedVariant4(companion.id),
736
+ asChild: true
737
+ }, /* @__PURE__ */ React9.createElement(IconButton4, {
738
+ label: toLocalizedString2(companion.properties.label, t),
739
+ icon: companion.properties.icon,
740
+ iconOnly: true,
741
+ tooltipSide: "left",
742
+ "data-value": getLinkedVariant4(companion.id),
743
+ ...companion.properties.joyride && {
744
+ "data-joyride": companion.properties.joyride
745
+ },
746
+ variant: activeId === getLinkedVariant4(companion.id) ? state.complementarySidebarState === "expanded" ? "primary" : "ghost" : "ghost",
747
+ onClick: handleTabClick
748
+ })))), !hoistStatusbar && /* @__PURE__ */ React9.createElement("div", {
749
+ className: "grid grid-cols-1 auto-rows-(--dx-rail-item) py-0.5 gap-0.5 overflow-y-auto scrollbar-none",
750
+ style: iconSize2(4)
751
+ }, /* @__PURE__ */ React9.createElement(Surface3.Surface, {
752
+ role: "status-indicator"
753
+ })), /* @__PURE__ */ React9.createElement("div", {
754
+ className: "hidden lg:grid grid-cols-1 auto-rows-(--dx-rail-action) p-1"
755
+ }, /* @__PURE__ */ React9.createElement(ToggleComplementarySidebarButton, null))), activeId && companions.map((companion) => /* @__PURE__ */ React9.createElement(Tabs.Panel, {
756
+ key: getLinkedVariant4(companion.id),
757
+ value: getLinkedVariant4(companion.id),
758
+ classNames: [
759
+ 'absolute data-[state="inactive"]:-z-[1] overflow-hidden',
760
+ "inset-y-0 start-0 w-full lg:w-(--dx-r1-size)"
761
+ ],
762
+ ...state.complementarySidebarState !== "expanded" && {
763
+ inert: true
764
+ }
765
+ }, /* @__PURE__ */ React9.createElement(ComplementarySidebarPanel, {
766
+ companion,
767
+ activeId,
768
+ data,
769
+ hoistStatusbar
770
+ })))));
771
+ };
772
+ var ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }) => {
773
+ const { t } = useTranslation5(meta5.id);
774
+ if (getLinkedVariant4(companion.id) !== activeId && !data) {
775
+ return null;
776
+ }
777
+ return /* @__PURE__ */ React9.createElement(Panel.Root, null, /* @__PURE__ */ React9.createElement(Panel.Toolbar, {
778
+ asChild: true,
779
+ size: "lg"
780
+ }, /* @__PURE__ */ React9.createElement(Toolbar.Root, {
781
+ classNames: "bg-modal-surface border-b border-subdued-separator"
782
+ }, /* @__PURE__ */ React9.createElement(IconButton4, {
783
+ label: toLocalizedString2(companion.properties.label, t),
784
+ icon: companion.properties.icon,
785
+ iconOnly: true,
786
+ tooltipSide: "left",
787
+ "data-value": getLinkedVariant4(companion.id),
788
+ classNames: "h-10 w-10",
789
+ variant: "default"
790
+ }), /* @__PURE__ */ React9.createElement("div", {
791
+ role: "none",
792
+ className: "px-1"
793
+ }, toLocalizedString2(companion.properties.label, t)))), /* @__PURE__ */ React9.createElement(Panel.Content, {
794
+ classNames: "bg-base-surface"
795
+ }, /* @__PURE__ */ React9.createElement(Surface3.Surface, {
796
+ role: `deck-companion--${getLinkedVariant4(companion.id)}`,
797
+ data,
798
+ fallback: PlankErrorFallback,
799
+ placeholder: /* @__PURE__ */ React9.createElement(PlankLoading, null)
800
+ })), !hoistStatusbar && /* @__PURE__ */ React9.createElement(Panel.Statusbar, {
801
+ size: "sm"
802
+ }, /* @__PURE__ */ React9.createElement(Surface3.Surface, {
803
+ role: "status-bar--r1-footer",
804
+ limit: 1
805
+ })));
806
+ };
807
+
808
+ // src/containers/Sidebar/Sidebar.tsx
809
+ import React10, { useMemo as useMemo5 } from "react";
810
+ import { Surface as Surface4 } from "@dxos/app-framework/ui";
811
+ import { AppSurface as AppSurface3 } from "@dxos/app-toolkit/ui";
812
+ import { Main as Main2 } from "@dxos/react-ui";
813
+ import { useBreakpoints as useBreakpoints3, useDeckState as useDeckState3, useHoistStatusbar as useHoistStatusbar2 } from "#hooks";
814
+ import { meta as meta6 } from "#meta";
815
+ import { getMode as getMode2 } from "#types";
816
+ var label2 = [
817
+ "sidebar.title",
818
+ {
819
+ ns: meta6.id
820
+ }
821
+ ];
822
+ var Sidebar = () => {
823
+ const { state, deck } = useDeckState3();
824
+ const { popoverAnchorId, activeDeck: current } = state;
825
+ const breakpoint = useBreakpoints3();
826
+ const layoutMode = getMode2(deck);
827
+ const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
828
+ const hoistStatusbar = useHoistStatusbar2(breakpoint, layoutMode);
829
+ const navigationData = useMemo5(() => ({
830
+ popoverAnchorId,
831
+ topbar,
832
+ hoistStatusbar,
833
+ current
834
+ }), [
835
+ popoverAnchorId,
836
+ topbar,
837
+ hoistStatusbar,
838
+ current
839
+ ]);
840
+ return /* @__PURE__ */ React10.createElement(Main2.NavigationSidebar, {
841
+ label: label2,
842
+ classNames: [
843
+ "grid",
844
+ topbar && "top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]",
845
+ hoistStatusbar && "bottom-(--dx-statusbar-size)"
846
+ ]
847
+ }, /* @__PURE__ */ React10.createElement(Surface4.Surface, {
848
+ type: AppSurface3.Navigation,
849
+ data: navigationData,
850
+ limit: 1
851
+ }));
852
+ };
853
+
854
+ // src/containers/Deck/DeckContent.tsx
855
+ import React14, { useCallback as useCallback6, useEffect as useEffect4, useRef as useRef2 } from "react";
856
+ import { AttentionCapabilities } from "@dxos/plugin-attention";
857
+ import { Main as Main3, useMediaQuery } from "@dxos/react-ui";
858
+ import { useBreakpoints as useBreakpoints4, useHoistStatusbar as useHoistStatusbar3 } from "#hooks";
859
+
860
+ // src/containers/Deck/Banner.tsx
861
+ import React11 from "react";
862
+ import { Surface as Surface5 } from "@dxos/app-framework/ui";
863
+ import { useTranslation as useTranslation6 } from "@dxos/react-ui";
864
+ import { mx as mx4, osTranslations } from "@dxos/ui-theme";
865
+ import { meta as meta7 } from "#meta";
866
+ var Banner = ({ variant, classNames }) => {
867
+ const { t } = useTranslation6(meta7.id);
868
+ return /* @__PURE__ */ React11.createElement("header", {
869
+ className: mx4("flex items-stretch relative py-1 ps-1 pe-2", variant === "topbar" && "fixed inset-x-0 top-[env(safe-area-inset-top)] h-(--dx-rail-size) border-b border-separator", classNames)
870
+ }, variant === "sidebar" ? /* @__PURE__ */ React11.createElement(CloseSidebarButton, null) : /* @__PURE__ */ React11.createElement(ToggleSidebarButton, null), /* @__PURE__ */ React11.createElement("span", {
871
+ className: "self-center grow ms-1"
872
+ }, t("current-app.name", {
873
+ ns: osTranslations
874
+ })), variant === "topbar" && /* @__PURE__ */ React11.createElement("div", {
875
+ className: "absolute inset-0 pointer-events-none"
876
+ }, /* @__PURE__ */ React11.createElement("div", {
877
+ className: "grid h-full pointer-fine:p-1 max-w-md mx-auto pointer-events-auto"
878
+ }, /* @__PURE__ */ React11.createElement(Surface5.Surface, {
879
+ role: "search-input",
880
+ limit: 1
881
+ }))), /* @__PURE__ */ React11.createElement("span", {
882
+ role: "none",
883
+ className: "grow"
884
+ }), /* @__PURE__ */ React11.createElement(Surface5.Surface, {
885
+ role: "version-info",
886
+ limit: 1
887
+ }), /* @__PURE__ */ React11.createElement(Surface5.Surface, {
888
+ role: "notch-start",
889
+ limit: 1
890
+ }));
891
+ };
892
+
893
+ // src/containers/Deck/DeckRoot.tsx
894
+ import { createContext as createContext2 } from "@radix-ui/react-context";
895
+ import React12 from "react";
896
+ var DECK_NAME = "Deck";
897
+ var DECK_ROOT_NAME = "DeckRoot";
898
+ var [DeckProvider, useDeckContext] = createContext2(DECK_NAME);
899
+ var DeckRoot = ({ children, ...context }) => {
900
+ return /* @__PURE__ */ React12.createElement(DeckProvider, context, children);
901
+ };
902
+ DeckRoot.displayName = DECK_ROOT_NAME;
903
+
904
+ // src/containers/Deck/StatusBar.tsx
905
+ import React13 from "react";
906
+ import { Surface as Surface6 } from "@dxos/app-framework/ui";
907
+ import { useLandmarkMover } from "@dxos/react-ui";
908
+ var StatusBar = ({ showHints }) => {
909
+ const mover = useLandmarkMover(void 0, "3");
910
+ return /* @__PURE__ */ React13.createElement("div", {
911
+ role: "contentinfo",
912
+ className: "fixed bottom-0 inset-x-0 h-(--dx-statusbar-size) border-y border-separator z-[2] flex text-description",
913
+ ...mover
914
+ }, showHints && /* @__PURE__ */ React13.createElement(Surface6.Surface, {
915
+ role: "hints",
916
+ limit: 1
917
+ }), /* @__PURE__ */ React13.createElement(Surface6.Surface, {
918
+ role: "status-bar",
919
+ limit: 1
920
+ }));
921
+ };
922
+
923
+ // src/containers/Deck/DeckContent.tsx
924
+ var DECK_CONTENT_NAME = "DeckContent";
925
+ var DeckContent = ({ children }) => {
926
+ const { state: { sidebarState, complementarySidebarState, complementarySidebarPanel }, deck: { active, fullscreen, solo }, updateState, layoutMode, settings, pluginManager, onLayoutChange } = useDeckContext(DECK_CONTENT_NAME);
927
+ const breakpoint = useBreakpoints4();
928
+ const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
929
+ const hoistStatusbar = useHoistStatusbar3(breakpoint, layoutMode);
930
+ useEffect4(() => {
931
+ const attention = pluginManager.capabilities.get(AttentionCapabilities.Attention);
932
+ const attended = attention.getCurrent();
933
+ const firstId = solo ?? active[0];
934
+ if (attended.length === 0 && firstId) {
935
+ document.querySelector(`article[data-attendable-id="${firstId}"] button`)?.focus();
936
+ }
937
+ }, []);
938
+ const [isNotMobile] = useMediaQuery("md");
939
+ const shouldRevert = useRef2(false);
940
+ useEffect4(() => {
941
+ if (!isNotMobile && layoutMode === "multi") {
942
+ const attention = pluginManager.capabilities.get(AttentionCapabilities.Attention);
943
+ const attended = attention.getCurrent();
944
+ shouldRevert.current = true;
945
+ onLayoutChange({
946
+ subject: attended[0],
947
+ mode: "solo"
948
+ });
949
+ } else if (isNotMobile && layoutMode === "solo" && shouldRevert.current) {
950
+ onLayoutChange({
951
+ revert: true
952
+ });
953
+ }
954
+ }, [
955
+ isNotMobile,
956
+ layoutMode,
957
+ onLayoutChange
958
+ ]);
959
+ useEffect4(() => {
960
+ if (!settings?.enableDeck && layoutMode === "multi") {
961
+ onLayoutChange({
962
+ subject: active[0],
963
+ mode: "solo"
964
+ });
965
+ }
966
+ }, [
967
+ settings?.enableDeck,
968
+ onLayoutChange,
969
+ active,
970
+ layoutMode
971
+ ]);
972
+ const handleNavigationSidebarStateChange = useCallback6((next) => {
973
+ updateState((s) => ({
974
+ ...s,
975
+ sidebarState: next
976
+ }));
977
+ }, [
978
+ updateState
979
+ ]);
980
+ const handleComplementarySidebarStateChange = useCallback6((next) => {
981
+ updateState((s) => ({
982
+ ...s,
983
+ complementarySidebarState: next
984
+ }));
985
+ }, [
986
+ updateState
987
+ ]);
988
+ return /* @__PURE__ */ React14.createElement(Main3.Root, {
989
+ navigationSidebarState: fullscreen ? "closed" : sidebarState,
990
+ complementarySidebarState: fullscreen ? "closed" : complementarySidebarState,
991
+ onNavigationSidebarStateChange: handleNavigationSidebarStateChange,
992
+ onComplementarySidebarStateChange: handleComplementarySidebarStateChange
993
+ }, /* @__PURE__ */ React14.createElement(Sidebar, null), /* @__PURE__ */ React14.createElement(ComplementarySidebar, {
994
+ current: complementarySidebarPanel
995
+ }), /* @__PURE__ */ React14.createElement(Main3.Overlay, null), children, topbar && /* @__PURE__ */ React14.createElement(Banner, {
996
+ variant: "topbar"
997
+ }), hoistStatusbar && /* @__PURE__ */ React14.createElement(StatusBar, {
998
+ showHints: settings?.showHints
999
+ }));
1000
+ };
1001
+ DeckContent.displayName = DECK_CONTENT_NAME;
1002
+
1003
+ // src/containers/Deck/DeckViewport.tsx
1004
+ import React15, { Fragment as Fragment2, memo as memo3, useCallback as useCallback7, useEffect as useEffect5, useMemo as useMemo6, useRef as useRef3 } from "react";
1005
+ import { Surface as Surface7, useOperationInvoker as useOperationInvoker4 } from "@dxos/app-framework/ui";
1006
+ import { LayoutOperation as LayoutOperation4 } from "@dxos/app-toolkit";
1007
+ import { useAppGraph } from "@dxos/app-toolkit/ui";
1008
+ import { addEventListener } from "@dxos/async";
1009
+ import { invariant } from "@dxos/invariant";
1010
+ import { useNode } from "@dxos/plugin-graph";
1011
+ import { IconButton as IconButton5, Main as Main4, useOnTransition, useTranslation as useTranslation7 } from "@dxos/react-ui";
1012
+ import { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from "@dxos/react-ui-stack";
1013
+ import { hoverableControls as hoverableControls2, hoverableFocusedWithinControls as hoverableFocusedWithinControls2, mainPaddingTransitions, mx as mx5 } from "@dxos/ui-theme";
1014
+ import { useBreakpoints as useBreakpoints5, useCompanions, useDeckState as useDeckState4, useHoistStatusbar as useHoistStatusbar4, useSelectedCompanion } from "#hooks";
1015
+ import { meta as meta8 } from "#meta";
1016
+ import { DeckOperation } from "#types";
1017
+ import { getMode as getMode3 } from "#types";
1018
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/containers/Deck/DeckViewport.tsx";
1019
+ var DECK_VIEWPORT_NAME = "DeckViewport";
1020
+ var DeckViewport = ({ children }) => {
1021
+ const { deck: { active, plankSizing }, state: { sidebarState, complementarySidebarState }, settings, layoutMode } = useDeckContext(DECK_VIEWPORT_NAME);
1022
+ const breakpoint = useBreakpoints5();
1023
+ const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
1024
+ const hoistStatusbar = useHoistStatusbar4(breakpoint, layoutMode);
1025
+ return /* @__PURE__ */ React15.createElement(Main4.Content, {
1026
+ bounce: true,
1027
+ handlesFocus: true,
1028
+ classNames: [
1029
+ "grid top-[env(safe-area-inset-top)]!",
1030
+ topbar && "top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]!",
1031
+ hoistStatusbar && "lg:bottom-(--dx-statusbar-size)"
1032
+ ],
1033
+ style: {
1034
+ "--main-spacing": settings?.encapsulatedPlanks ? "0.75rem" : "0",
1035
+ "--main-sidebar-width": sidebarState === "expanded" ? "var(--dx-nav-sidebar-size)" : sidebarState === "collapsed" ? "var(--dx-l0-size)" : "0",
1036
+ "--main-complementary-width": complementarySidebarState === "expanded" ? "var(--dx-complementary-sidebar-size)" : complementarySidebarState === "collapsed" ? "var(--dx-rail-size)" : "0",
1037
+ "--main-content-first-width": `${plankSizing[active[0] ?? "never"] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
1038
+ "--main-content-last-width": `${plankSizing[active[(active.length ?? 1) - 1] ?? "never"] ?? DEFAULT_HORIZONTAL_SIZE}rem`
1039
+ }
1040
+ }, children);
1041
+ };
1042
+ DeckViewport.displayName = DECK_VIEWPORT_NAME;
1043
+ var DeckContentEmpty = () => {
1044
+ const breakpoint = useBreakpoints5();
1045
+ const { deck } = useDeckState4();
1046
+ const layoutMode = getMode3(deck);
1047
+ const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
1048
+ return /* @__PURE__ */ React15.createElement("div", {
1049
+ className: "grid place-items-center p-8 relative bg-deck-surface",
1050
+ "data-testid": "layoutPlugin.firstRunMessage"
1051
+ }, /* @__PURE__ */ React15.createElement(Surface7.Surface, {
1052
+ role: "keyshortcuts"
1053
+ }), !topbar && /* @__PURE__ */ React15.createElement(ToggleSidebarButton2, null));
1054
+ };
1055
+ var DeckSoloMode = () => {
1056
+ const { deck, settings, layoutMode, onLayoutChange } = useDeckContext("DeckSoloMode");
1057
+ const { companionOpen, companionVariant, fullscreen, solo } = deck;
1058
+ const effectiveCompanionVariant = fullscreen ? void 0 : companionOpen ? companionVariant : void 0;
1059
+ const breakpoint = useBreakpoints5();
1060
+ const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
1061
+ invariant(solo, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 74, S: void 0, A: ["solo", ""] });
1062
+ useEffect5(() => {
1063
+ if (!fullscreen) {
1064
+ return;
1065
+ }
1066
+ const handleKeyDown = (event) => {
1067
+ if (event.key === "Escape") {
1068
+ event.preventDefault();
1069
+ event.stopPropagation();
1070
+ onLayoutChange({
1071
+ mode: "solo--fullscreen"
1072
+ });
1073
+ }
1074
+ };
1075
+ document.addEventListener("keydown", handleKeyDown);
1076
+ return () => document.removeEventListener("keydown", handleKeyDown);
1077
+ }, [
1078
+ fullscreen,
1079
+ onLayoutChange
1080
+ ]);
1081
+ return /* @__PURE__ */ React15.createElement("div", {
1082
+ className: "relative overflow-hidden bg-deck-surface"
1083
+ }, /* @__PURE__ */ React15.createElement(DeckSidebarToggles, {
1084
+ topbar,
1085
+ fullscreen
1086
+ }), fullscreen && /* @__PURE__ */ React15.createElement(ExitFullscreenButton, {
1087
+ onExit: () => onLayoutChange({
1088
+ mode: "solo--fullscreen"
1089
+ })
1090
+ }), /* @__PURE__ */ React15.createElement(StackContext.Provider, {
1091
+ value: {
1092
+ orientation: "horizontal",
1093
+ size: "contain",
1094
+ rail: true
1095
+ }
1096
+ }, /* @__PURE__ */ React15.createElement(PlankContainer, {
1097
+ id: solo,
1098
+ part: "solo",
1099
+ layoutMode,
1100
+ companionVariant: effectiveCompanionVariant,
1101
+ settings
1102
+ })));
1103
+ };
1104
+ var DeckMultiMode = () => {
1105
+ const { deck: { active, companionVariant, fullscreen }, settings, layoutMode } = useDeckContext("DeckMultiMode");
1106
+ const effectiveCompanionVariant = companionVariant;
1107
+ const lastPlankId = active[active.length - 1];
1108
+ const lastPlankCompanions = useCompanions(lastPlankId);
1109
+ const breakpoint = useBreakpoints5();
1110
+ const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
1111
+ const deckRef = useRef3(null);
1112
+ const scrollLeftRef = useRef3(null);
1113
+ useEffect5(() => addEventListener(window, "resize", () => {
1114
+ scrollLeftRef.current = null;
1115
+ }), []);
1116
+ const restoreScroll = useCallback7(() => {
1117
+ if (deckRef.current && scrollLeftRef.current != null) {
1118
+ deckRef.current.scrollLeft = scrollLeftRef.current;
1119
+ }
1120
+ }, []);
1121
+ useOnTransition(layoutMode, (mode) => mode !== "multi", "multi", restoreScroll);
1122
+ const handleScroll = useCallback7((event) => {
1123
+ if (event.currentTarget === event.target) {
1124
+ scrollLeftRef.current = event.target.scrollLeft;
1125
+ }
1126
+ }, []);
1127
+ const { order, itemsCount } = useMemo6(() => {
1128
+ const lastHasCompanions = lastPlankCompanions.length > 0;
1129
+ return active.reduce((acc, entryId, index) => {
1130
+ const isLastPlank = index === active.length - 1;
1131
+ acc.order[entryId] = acc.itemsCount + 1;
1132
+ acc.itemsCount += lastHasCompanions && isLastPlank ? 3 : 2;
1133
+ return acc;
1134
+ }, {
1135
+ order: {},
1136
+ itemsCount: 0
1137
+ });
1138
+ }, [
1139
+ active,
1140
+ lastPlankCompanions.length
1141
+ ]);
1142
+ return /* @__PURE__ */ React15.createElement("div", {
1143
+ className: "relative bg-deck-surface overflow-hidden"
1144
+ }, /* @__PURE__ */ React15.createElement(DeckSidebarToggles, {
1145
+ topbar,
1146
+ fullscreen
1147
+ }), /* @__PURE__ */ React15.createElement(Stack, {
1148
+ classNames: [
1149
+ "absolute h-[calc(100%-2*var(--main-spacing))] w-full inset-y-(--main-spacing) -inset-w-px",
1150
+ mainPaddingTransitions
1151
+ ],
1152
+ orientation: "horizontal",
1153
+ size: "contain",
1154
+ itemsCount: itemsCount - 1,
1155
+ onScroll: handleScroll,
1156
+ ref: deckRef
1157
+ }, active.map((entryId) => /* @__PURE__ */ React15.createElement(Fragment2, {
1158
+ key: entryId
1159
+ }, /* @__PURE__ */ React15.createElement(PlankSeparator, {
1160
+ hidden: true,
1161
+ order: order[entryId] - 1,
1162
+ encapsulate: !!settings?.encapsulatedPlanks
1163
+ }), /* @__PURE__ */ React15.createElement(PlankContainer, {
1164
+ id: entryId,
1165
+ part: "multi",
1166
+ active,
1167
+ order: order[entryId],
1168
+ layoutMode,
1169
+ companionVariant: effectiveCompanionVariant,
1170
+ settings
1171
+ })))));
1172
+ };
1173
+ var sidebarToggleStyles = "h-(--dx-rail-item) w-(--dx-rail-item) absolute bottom-2 z-[1] bg-deck-surface! lg:hidden";
1174
+ var ToggleSidebarButton2 = () => /* @__PURE__ */ React15.createElement(ToggleSidebarButton, {
1175
+ classNames: mx5(sidebarToggleStyles, "left-2")
1176
+ });
1177
+ var ToggleComplementarySidebarButton2 = () => /* @__PURE__ */ React15.createElement(ToggleComplementarySidebarButton, {
1178
+ classNames: mx5(sidebarToggleStyles, "right-2")
1179
+ });
1180
+ var ExitFullscreenButton = ({ onExit }) => {
1181
+ const { t } = useTranslation7(meta8.id);
1182
+ return /* @__PURE__ */ React15.createElement("div", {
1183
+ className: mx5("fixed top-2 right-2 z-[1]", hoverableControls2, hoverableFocusedWithinControls2, "transition-opacity opacity-(--controls-opacity)")
1184
+ }, /* @__PURE__ */ React15.createElement(IconButton5, {
1185
+ label: t("exit-fullscreen.label"),
1186
+ icon: "ph--corners-in--regular",
1187
+ iconOnly: true,
1188
+ variant: "ghost",
1189
+ tooltipSide: "bottom",
1190
+ onClick: onExit
1191
+ }));
1192
+ };
1193
+ var DeckSidebarToggles = ({ topbar, fullscreen }) => {
1194
+ if (topbar || fullscreen) {
1195
+ return null;
1196
+ }
1197
+ return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(ToggleSidebarButton2, null), /* @__PURE__ */ React15.createElement(ToggleComplementarySidebarButton2, null));
1198
+ };
1199
+ var PlankSeparator = ({ order, hidden, encapsulate }) => order > 0 && /* @__PURE__ */ React15.createElement("span", {
1200
+ role: "separator",
1201
+ className: mx5("row-span-2 bg-deck-surface", hidden && "hidden", encapsulate ? "w-0" : "w-4"),
1202
+ style: {
1203
+ gridColumn: order
1204
+ }
1205
+ });
1206
+ var PlankContainer = /* @__PURE__ */ memo3(({ id, layoutMode, part, order, settings, companionVariant, active, ...props }) => {
1207
+ const { graph } = useAppGraph();
1208
+ const { invokePromise } = useOperationInvoker4();
1209
+ const { state, deck } = useDeckState4();
1210
+ const node = useNode(graph, id);
1211
+ const companions = useCompanions(id);
1212
+ const isLastPlankInMulti = layoutMode === "multi" && active && active.length > 0 && active[active.length - 1] === id;
1213
+ const variantForThisPlank = layoutMode === "multi" ? isLastPlankInMulti ? companionVariant : void 0 : companionVariant;
1214
+ const { companionId } = useSelectedCompanion(companions, variantForThisPlank);
1215
+ const resolvedCompanionId = layoutMode === "multi" && isLastPlankInMulti && companions.length > 0 ? companionId : variantForThisPlank ? companionId : void 0;
1216
+ const currentCompanion = companions.find(({ id: id2 }) => id2 === resolvedCompanionId);
1217
+ const hasCompanion = !!(resolvedCompanionId && currentCompanion);
1218
+ const handleAdjust = useCallback7((plankId, type) => {
1219
+ if (type === "close") {
1220
+ if (part === "complementary") {
1221
+ return invokePromise(LayoutOperation4.UpdateComplementary, {
1222
+ state: "collapsed"
1223
+ });
1224
+ } else if (active) {
1225
+ const index = active.indexOf(plankId);
1226
+ const toClose = index !== -1 ? active.slice(index) : [
1227
+ plankId
1228
+ ];
1229
+ return invokePromise(LayoutOperation4.Close, {
1230
+ subject: toClose
1231
+ });
1232
+ } else {
1233
+ return invokePromise(LayoutOperation4.Close, {
1234
+ subject: [
1235
+ plankId
1236
+ ]
1237
+ });
1238
+ }
1239
+ } else {
1240
+ return invokePromise(DeckOperation.Adjust, {
1241
+ type,
1242
+ id: plankId
1243
+ });
1244
+ }
1245
+ }, [
1246
+ invokePromise,
1247
+ part,
1248
+ active
1249
+ ]);
1250
+ const handleResize = useCallback7((plankId, size) => invokePromise(DeckOperation.UpdatePlankSize, {
1251
+ id: plankId,
1252
+ size
1253
+ }), [
1254
+ invokePromise
1255
+ ]);
1256
+ const handleScrollIntoView = useCallback7((subject) => invokePromise(LayoutOperation4.ScrollIntoView, {
1257
+ subject
1258
+ }), [
1259
+ invokePromise
1260
+ ]);
1261
+ const handleUpdateCompanion = useCallback7((companion) => invokePromise(LayoutOperation4.UpdateCompanion, {
1262
+ subject: companion
1263
+ }), [
1264
+ invokePromise
1265
+ ]);
1266
+ return /* @__PURE__ */ React15.createElement(Plank.Root, {
1267
+ graph,
1268
+ layoutMode,
1269
+ part,
1270
+ settings,
1271
+ popoverAnchorId: state.popoverAnchorId,
1272
+ scrollIntoView: state.scrollIntoView,
1273
+ plankSizing: deck.plankSizing,
1274
+ onAdjust: handleAdjust,
1275
+ onResize: handleResize,
1276
+ onScrollIntoView: handleScrollIntoView,
1277
+ onUpdateCompanion: handleUpdateCompanion
1278
+ }, /* @__PURE__ */ React15.createElement(Plank.Content, {
1279
+ solo: part === "solo",
1280
+ companion: hasCompanion,
1281
+ encapsulate: !!settings?.encapsulatedPlanks
1282
+ }, /* @__PURE__ */ React15.createElement(Plank.Component, {
1283
+ ...props,
1284
+ active,
1285
+ id,
1286
+ node,
1287
+ companioned: hasCompanion ? "primary" : void 0,
1288
+ companions: hasCompanion ? [] : companions,
1289
+ order,
1290
+ ...part === "solo" ? {
1291
+ part: "solo-primary"
1292
+ } : {
1293
+ part
1294
+ }
1295
+ }), hasCompanion && /* @__PURE__ */ React15.createElement(Plank.Component, {
1296
+ ...props,
1297
+ active,
1298
+ id: resolvedCompanionId,
1299
+ node: currentCompanion,
1300
+ companions,
1301
+ companioned: "companion",
1302
+ primary: node,
1303
+ ...part === "solo" ? {
1304
+ order,
1305
+ part: "solo-companion"
1306
+ } : {
1307
+ order: (order ?? 0) + 1,
1308
+ part
1309
+ }
1310
+ })));
1311
+ });
1312
+
1313
+ // src/containers/Deck/Deck.tsx
1314
+ var Deck = {
1315
+ Root: DeckRoot,
1316
+ Content: DeckContent,
1317
+ Viewport: DeckViewport,
1318
+ ContentEmpty: DeckContentEmpty,
1319
+ MultiMode: DeckMultiMode,
1320
+ SoloMode: DeckSoloMode
1321
+ };
1322
+
1323
+ export {
1324
+ PlankLoading,
1325
+ PlankError,
1326
+ PlankErrorFallback,
1327
+ Plank,
1328
+ ToggleSidebarButton,
1329
+ CloseSidebarButton,
1330
+ ToggleComplementarySidebarButton,
1331
+ ComplementarySidebar,
1332
+ Sidebar,
1333
+ Deck
1334
+ };
1335
+ //# sourceMappingURL=chunk-4MYX2NT3.mjs.map