@dxos/plugin-deck 0.8.4-main.72ec0f3 → 0.8.4-main.7996785055

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