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