@dxos/plugin-deck 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8

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 (234) hide show
  1. package/dist/lib/browser/Banner-AJW6225V.mjs +14 -0
  2. package/dist/lib/browser/Banner-AJW6225V.mjs.map +7 -0
  3. package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs +96 -0
  4. package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs.map +7 -0
  5. package/dist/lib/browser/{app-graph-builder-DTVCULQ4.mjs → app-graph-builder-MP6INIM2.mjs} +16 -13
  6. package/dist/lib/browser/app-graph-builder-MP6INIM2.mjs.map +7 -0
  7. package/dist/lib/browser/{check-app-scheme-JSRXXIYF.mjs → check-app-scheme-AUNCD2Y6.mjs} +9 -8
  8. package/dist/lib/browser/check-app-scheme-AUNCD2Y6.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-ATFPDN6J.mjs → chunk-3P2FJVXC.mjs} +35 -49
  10. package/dist/lib/browser/chunk-3P2FJVXC.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-BJDEG7YZ.mjs +74 -0
  12. package/dist/lib/browser/chunk-BJDEG7YZ.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-L3RYMAV7.mjs +16 -0
  14. package/dist/lib/browser/chunk-L3RYMAV7.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-UNG4CLLP.mjs → chunk-TAHLKBDO.mjs} +46 -20
  16. package/dist/lib/browser/chunk-TAHLKBDO.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-S4A5UO4K.mjs → chunk-WTNYSXY5.mjs} +221 -281
  18. package/dist/lib/browser/chunk-WTNYSXY5.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +39 -35
  20. package/dist/lib/browser/index.mjs.map +3 -3
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{operation-resolver-CDYBLZJ4.mjs → operation-resolver-2TEGT4PG.mjs} +166 -122
  23. package/dist/lib/browser/operation-resolver-2TEGT4PG.mjs.map +7 -0
  24. package/dist/lib/browser/{react-root-XDCMNENQ.mjs → react-root-XBFHPSCP.mjs} +8 -7
  25. package/dist/lib/browser/react-root-XBFHPSCP.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-4J3BZNT2.mjs +44 -0
  27. package/dist/lib/browser/react-surface-4J3BZNT2.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-OMHVGZ6V.mjs → settings-PTMGCSJH.mjs} +8 -5
  29. package/dist/lib/browser/settings-PTMGCSJH.mjs.map +7 -0
  30. package/dist/lib/browser/{state-OC3BSB6E.mjs → state-MA4SQ7BE.mjs} +11 -8
  31. package/dist/lib/browser/state-MA4SQ7BE.mjs.map +7 -0
  32. package/dist/lib/browser/{toolkit-R53LD3EA.mjs → toolkit-6B34QFU3.mjs} +10 -8
  33. package/dist/lib/browser/toolkit-6B34QFU3.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +4 -5
  35. package/dist/lib/browser/{url-handler-53TE6JZO.mjs → url-handler-FEUFPQIP.mjs} +22 -17
  36. package/dist/lib/browser/url-handler-FEUFPQIP.mjs.map +7 -0
  37. package/dist/lib/node-esm/Banner-XBH2IIDR.mjs +15 -0
  38. package/dist/lib/node-esm/Banner-XBH2IIDR.mjs.map +7 -0
  39. package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs +97 -0
  40. package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs.map +7 -0
  41. package/dist/lib/node-esm/{app-graph-builder-473BNZDJ.mjs → app-graph-builder-ACHG5HY7.mjs} +16 -13
  42. package/dist/lib/node-esm/app-graph-builder-ACHG5HY7.mjs.map +7 -0
  43. package/dist/lib/node-esm/{check-app-scheme-IVYRHKRH.mjs → check-app-scheme-WN76GWVC.mjs} +9 -8
  44. package/dist/lib/node-esm/check-app-scheme-WN76GWVC.mjs.map +7 -0
  45. package/dist/lib/node-esm/{chunk-D34L3ECT.mjs → chunk-CQ3XYTNJ.mjs} +220 -280
  46. package/dist/lib/node-esm/chunk-CQ3XYTNJ.mjs.map +7 -0
  47. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs +76 -0
  48. package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +7 -0
  49. package/dist/lib/node-esm/{chunk-SKEVPQ7E.mjs → chunk-EMU4VIPH.mjs} +46 -20
  50. package/dist/lib/node-esm/chunk-EMU4VIPH.mjs.map +7 -0
  51. package/dist/lib/node-esm/{chunk-XAKTY3EB.mjs → chunk-GZJAQ5IP.mjs} +34 -49
  52. package/dist/lib/node-esm/chunk-GZJAQ5IP.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-XCNF4COU.mjs +18 -0
  54. package/dist/lib/node-esm/chunk-XCNF4COU.mjs.map +7 -0
  55. package/dist/lib/node-esm/index.mjs +39 -35
  56. package/dist/lib/node-esm/index.mjs.map +3 -3
  57. package/dist/lib/node-esm/meta.json +1 -1
  58. package/dist/lib/node-esm/{operation-resolver-WUOE33ID.mjs → operation-resolver-GCMCCI7A.mjs} +166 -122
  59. package/dist/lib/node-esm/operation-resolver-GCMCCI7A.mjs.map +7 -0
  60. package/dist/lib/node-esm/{react-root-O6GZO62Z.mjs → react-root-32LZ6APH.mjs} +8 -7
  61. package/dist/lib/node-esm/react-root-32LZ6APH.mjs.map +7 -0
  62. package/dist/lib/node-esm/{react-surface-IHDJDGC5.mjs → react-surface-CO4ZDZKM.mjs} +18 -16
  63. package/dist/lib/node-esm/react-surface-CO4ZDZKM.mjs.map +7 -0
  64. package/dist/lib/node-esm/{settings-2HB6FKIK.mjs → settings-LPPFLXNJ.mjs} +8 -5
  65. package/dist/lib/node-esm/settings-LPPFLXNJ.mjs.map +7 -0
  66. package/dist/lib/node-esm/{state-JRQ45ACJ.mjs → state-KNRU3GDC.mjs} +11 -8
  67. package/dist/lib/node-esm/state-KNRU3GDC.mjs.map +7 -0
  68. package/dist/lib/node-esm/{toolkit-JLPZNNKB.mjs → toolkit-SOWYKJY3.mjs} +10 -8
  69. package/dist/lib/node-esm/toolkit-SOWYKJY3.mjs.map +7 -0
  70. package/dist/lib/node-esm/types/index.mjs +4 -5
  71. package/dist/lib/node-esm/{url-handler-QGF2R24T.mjs → url-handler-4LEB7UWF.mjs} +22 -17
  72. package/dist/lib/node-esm/url-handler-4LEB7UWF.mjs.map +7 -0
  73. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
  75. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  76. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +1 -1
  77. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -1
  78. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  79. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  80. package/dist/types/src/capabilities/react-root/react-root.d.ts +1 -1
  81. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  83. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  84. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  85. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  87. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/settings/settings.d.ts +4 -3
  89. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/state/index.d.ts +6 -6
  91. package/dist/types/src/capabilities/state/state.d.ts +7 -7
  92. package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/toolkit/index.d.ts +1 -1
  94. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +4 -3
  96. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/tools/tools.d.ts +1 -1
  98. package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -1
  99. package/dist/types/src/capabilities/url-handler/url-handler.d.ts +1 -1
  100. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -1
  101. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
  102. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +1 -0
  103. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
  104. package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -1
  105. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
  106. package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +1 -1
  107. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  108. package/dist/types/src/components/DeckLayout/Toast.d.ts +3 -3
  109. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  110. package/dist/types/src/components/Plank/Plank.d.ts +2 -2
  111. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  112. package/dist/types/src/components/Plank/Plank.stories.d.ts +3 -2
  113. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  114. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  115. package/dist/types/src/components/Plank/PlankError.d.ts +5 -3
  116. package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
  117. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  118. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  119. package/dist/types/src/components/fragments.d.ts +4 -1
  120. package/dist/types/src/components/fragments.d.ts.map +1 -1
  121. package/dist/types/src/components/index.d.ts +0 -1
  122. package/dist/types/src/components/index.d.ts.map +1 -1
  123. package/dist/types/src/containers/Banner/Banner.d.ts +2 -0
  124. package/dist/types/src/containers/Banner/Banner.d.ts.map +1 -0
  125. package/dist/types/src/containers/Banner/index.d.ts +3 -0
  126. package/dist/types/src/containers/Banner/index.d.ts.map +1 -0
  127. package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.d.ts.map +1 -1
  128. package/dist/types/src/containers/DeckSettings/index.d.ts +3 -0
  129. package/dist/types/src/containers/DeckSettings/index.d.ts.map +1 -0
  130. package/dist/types/src/containers/index.d.ts +4 -0
  131. package/dist/types/src/containers/index.d.ts.map +1 -0
  132. package/dist/types/src/hooks/index.d.ts +1 -0
  133. package/dist/types/src/hooks/index.d.ts.map +1 -1
  134. package/dist/types/src/hooks/useDeckCompanions.d.ts +0 -1
  135. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
  136. package/dist/types/src/hooks/useMainSize.d.ts +2 -2
  137. package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
  138. package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
  139. package/dist/types/src/layout.d.ts +1 -7
  140. package/dist/types/src/layout.d.ts.map +1 -1
  141. package/dist/types/src/translations.d.ts +1 -0
  142. package/dist/types/src/translations.d.ts.map +1 -1
  143. package/dist/types/src/types/capabilities.d.ts +6 -6
  144. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  145. package/dist/types/src/types/events.d.ts.map +1 -1
  146. package/dist/types/src/types/schema.d.ts +18 -16
  147. package/dist/types/src/types/schema.d.ts.map +1 -1
  148. package/dist/types/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +48 -44
  150. package/src/DeckPlugin.ts +12 -11
  151. package/src/capabilities/app-graph-builder/app-graph-builder.ts +11 -10
  152. package/src/capabilities/check-app-scheme/check-app-scheme.ts +12 -8
  153. package/src/capabilities/operation-resolver/operation-resolver.ts +110 -107
  154. package/src/capabilities/react-root/react-root.tsx +2 -2
  155. package/src/capabilities/react-surface/react-surface.tsx +11 -10
  156. package/src/capabilities/settings/settings.ts +3 -2
  157. package/src/capabilities/state/state.ts +6 -5
  158. package/src/capabilities/toolkit/toolkit.ts +7 -6
  159. package/src/capabilities/tools/tools.ts +0 -1
  160. package/src/capabilities/url-handler/url-handler.ts +16 -13
  161. package/src/components/DeckLayout/ActiveNode.tsx +3 -2
  162. package/src/components/DeckLayout/Banner.tsx +8 -8
  163. package/src/components/DeckLayout/ContentEmpty.tsx +3 -3
  164. package/src/components/DeckLayout/DeckLayout.stories.tsx +8 -6
  165. package/src/components/DeckLayout/DeckMain.tsx +26 -25
  166. package/src/components/DeckLayout/Dialog.tsx +10 -4
  167. package/src/components/DeckLayout/Fallback.tsx +2 -6
  168. package/src/components/DeckLayout/Popover.tsx +46 -14
  169. package/src/components/DeckLayout/StatusBar.tsx +4 -4
  170. package/src/components/DeckLayout/Toast.tsx +3 -3
  171. package/src/components/Plank/Plank.stories.tsx +7 -5
  172. package/src/components/Plank/Plank.tsx +32 -24
  173. package/src/components/Plank/PlankControls.tsx +6 -8
  174. package/src/components/Plank/PlankError.tsx +29 -15
  175. package/src/components/Plank/PlankHeading.tsx +24 -26
  176. package/src/components/Plank/PlankLoading.tsx +1 -1
  177. package/src/components/Sidebar/ComplementarySidebar.tsx +50 -51
  178. package/src/components/Sidebar/Sidebar.tsx +4 -4
  179. package/src/components/Sidebar/SidebarButton.tsx +12 -12
  180. package/src/components/fragments.ts +9 -4
  181. package/src/components/index.ts +0 -1
  182. package/src/containers/Banner/Banner.tsx +5 -0
  183. package/src/containers/Banner/index.ts +7 -0
  184. package/src/{components → containers}/DeckSettings/DeckSettings.tsx +23 -23
  185. package/src/containers/DeckSettings/index.ts +7 -0
  186. package/src/containers/index.ts +8 -0
  187. package/src/hooks/index.ts +1 -0
  188. package/src/hooks/useCompanions.ts +2 -2
  189. package/src/hooks/useDeckCompanions.ts +3 -8
  190. package/src/hooks/useDeckState.ts +3 -3
  191. package/src/hooks/useHoistStatusbar.ts +1 -1
  192. package/src/hooks/useMainSize.ts +2 -2
  193. package/src/hooks/useNodeActionExpander.ts +1 -1
  194. package/src/hooks/useSelectedCompanion.ts +32 -0
  195. package/src/layout.ts +1 -14
  196. package/src/meta.ts +1 -1
  197. package/src/translations.ts +1 -0
  198. package/src/types/capabilities.ts +5 -5
  199. package/src/types/events.ts +5 -4
  200. package/src/types/schema.ts +22 -21
  201. package/src/util/overscroll.ts +3 -3
  202. package/dist/lib/browser/app-graph-builder-DTVCULQ4.mjs.map +0 -7
  203. package/dist/lib/browser/check-app-scheme-JSRXXIYF.mjs.map +0 -7
  204. package/dist/lib/browser/chunk-ATFPDN6J.mjs.map +0 -7
  205. package/dist/lib/browser/chunk-NHABISX2.mjs +0 -152
  206. package/dist/lib/browser/chunk-NHABISX2.mjs.map +0 -7
  207. package/dist/lib/browser/chunk-S4A5UO4K.mjs.map +0 -7
  208. package/dist/lib/browser/chunk-UNG4CLLP.mjs.map +0 -7
  209. package/dist/lib/browser/operation-resolver-CDYBLZJ4.mjs.map +0 -7
  210. package/dist/lib/browser/react-root-XDCMNENQ.mjs.map +0 -7
  211. package/dist/lib/browser/react-surface-HODERLOL.mjs +0 -42
  212. package/dist/lib/browser/react-surface-HODERLOL.mjs.map +0 -7
  213. package/dist/lib/browser/settings-OMHVGZ6V.mjs.map +0 -7
  214. package/dist/lib/browser/state-OC3BSB6E.mjs.map +0 -7
  215. package/dist/lib/browser/toolkit-R53LD3EA.mjs.map +0 -7
  216. package/dist/lib/browser/url-handler-53TE6JZO.mjs.map +0 -7
  217. package/dist/lib/node-esm/app-graph-builder-473BNZDJ.mjs.map +0 -7
  218. package/dist/lib/node-esm/check-app-scheme-IVYRHKRH.mjs.map +0 -7
  219. package/dist/lib/node-esm/chunk-ADPMWKLL.mjs +0 -154
  220. package/dist/lib/node-esm/chunk-ADPMWKLL.mjs.map +0 -7
  221. package/dist/lib/node-esm/chunk-D34L3ECT.mjs.map +0 -7
  222. package/dist/lib/node-esm/chunk-SKEVPQ7E.mjs.map +0 -7
  223. package/dist/lib/node-esm/chunk-XAKTY3EB.mjs.map +0 -7
  224. package/dist/lib/node-esm/operation-resolver-WUOE33ID.mjs.map +0 -7
  225. package/dist/lib/node-esm/react-root-O6GZO62Z.mjs.map +0 -7
  226. package/dist/lib/node-esm/react-surface-IHDJDGC5.mjs.map +0 -7
  227. package/dist/lib/node-esm/settings-2HB6FKIK.mjs.map +0 -7
  228. package/dist/lib/node-esm/state-JRQ45ACJ.mjs.map +0 -7
  229. package/dist/lib/node-esm/toolkit-JLPZNNKB.mjs.map +0 -7
  230. package/dist/lib/node-esm/url-handler-QGF2R24T.mjs.map +0 -7
  231. package/dist/types/src/components/DeckSettings/index.d.ts +0 -2
  232. package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
  233. package/src/components/DeckSettings/index.ts +0 -5
  234. /package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.d.ts +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/DeckLayout/Banner.tsx", "../../../src/components/Sidebar/ComplementarySidebar.tsx", "../../../src/components/Plank/Plank.tsx", "../../../src/components/Plank/PlankError.tsx", "../../../src/components/Plank/PlankHeading.tsx", "../../../src/components/fragments.ts", "../../../src/components/Plank/PlankControls.tsx", "../../../src/components/Plank/PlankLoading.tsx", "../../../src/components/Sidebar/SidebarButton.tsx", "../../../src/components/Sidebar/Sidebar.tsx", "../../../src/components/DeckLayout/DeckLayout.tsx", "../../../src/components/DeckLayout/ActiveNode.tsx", "../../../src/components/DeckLayout/DeckMain.tsx", "../../../src/components/DeckLayout/ContentEmpty.tsx", "../../../src/components/DeckLayout/StatusBar.tsx", "../../../src/components/DeckLayout/Topbar.tsx", "../../../src/components/DeckLayout/Dialog.tsx", "../../../src/components/DeckLayout/Popover.tsx", "../../../src/components/DeckLayout/Toast.tsx", "../../../src/components/DeckSettings/DeckSettings.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx, osTranslations } from '@dxos/ui-theme';\n\nimport { meta } from '../../meta';\nimport { CloseSidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nexport const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'topbar' | 'sidebar' }>) => {\n const { t } = useTranslation(meta.id);\n return (\n <header\n className={mx(\n 'flex items-stretch relative plb-1 pis-1 pie-2',\n variant === 'topbar' &&\n 'fixed inset-inline-0 block-start-[env(safe-area-inset-top)] bs-[--rail-size] border-be border-separator',\n classNames,\n )}\n >\n {variant === 'sidebar' ? <CloseSidebarButton /> : <ToggleSidebarButton />}\n <span className='self-center grow mis-1'>{t('current app name', { ns: osTranslations })}</span>\n {variant === 'topbar' && (\n <div role='none' className='absolute inset-0 pointer-events-none'>\n <div role='none' className='grid bs-full pointer-fine:p-1 max-is-md mli-auto pointer-events-auto'>\n <Surface role='search-input' limit={1} />\n </div>\n </div>\n )}\n <span role='none' className='grow' />\n <Surface role='header-end' limit={1} />\n <Surface role='notch-start' limit={1} />\n </header>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n Fragment,\n type MouseEvent,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useMemo,\n useState,\n} from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { Surface, useOperationInvoker } from '@dxos/app-framework/react';\nimport { IconButton, type Label, Main, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { mx } from '@dxos/ui-theme';\n\nimport {\n type DeckCompanion,\n getCompanionId,\n useBreakpoints,\n useDeckCompanions,\n useDeckState,\n useHoistStatusbar,\n} from '../../hooks';\nimport { meta } from '../../meta';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\nimport { PlankContentError, PlankLoading } from '../Plank';\n\nimport { ToggleComplementarySidebarButton } from './SidebarButton';\n\nconst label = ['complementary sidebar title', { ns: meta.id }] satisfies Label;\n\nexport type ComplementarySidebarProps = {\n current?: string;\n};\n\nexport const ComplementarySidebar = ({ current }: ComplementarySidebarProps) => {\n const { t } = useTranslation(meta.id);\n const { invokeSync } = useOperationInvoker();\n const { state, deck, updateState } = useDeckState();\n const layoutMode = getMode(deck);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const companions = useDeckCompanions();\n const activeCompanion = companions.find((companion) => getCompanionId(companion.id) === current);\n const activeId = activeCompanion && getCompanionId(activeCompanion.id);\n const [internalValue, setInternalValue] = useState(activeId);\n\n useEffect(() => {\n setInternalValue(activeId);\n }, [activeId]);\n\n const handleTabClick = useCallback(\n (event: MouseEvent) => {\n const nextValue = event.currentTarget.getAttribute('data-value') as string;\n if (nextValue === activeId) {\n updateState((s) => ({\n ...s,\n complementarySidebarState: s.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded',\n }));\n } else {\n setInternalValue(nextValue);\n updateState((s) => ({ ...s, complementarySidebarState: 'expanded' }));\n invokeSync(Common.LayoutOperation.UpdateComplementary, { subject: nextValue });\n }\n },\n [state.complementarySidebarState, activeId, invokeSync, updateState],\n );\n\n const data = useMemo(\n () =>\n activeCompanion && {\n id: activeCompanion.id,\n subject: activeCompanion.data,\n },\n [activeCompanion?.id, activeCompanion?.data],\n );\n\n useEffect(() => {\n if (!activeId) {\n invokeSync(Common.LayoutOperation.UpdateComplementary, { state: 'collapsed' });\n }\n }, [activeId, invokeSync]);\n\n return (\n <Main.ComplementarySidebar\n label={label}\n classNames={[\n topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'block-end-[--statusbar-size]',\n ]}\n >\n <Tabs.Root orientation='vertical' verticalVariant='stateless' value={internalValue} classNames='contents'>\n <div\n role='none'\n className={mx(\n 'absolute z-[1] inset-block-0 inline-end-0 !is-[--r0-size]',\n 'pbs-[env(safe-area-inset-top)] pbe-[env(safe-area-inset-bottom)] border-is border-subduedSeparator',\n 'grid grid-cols-1 grid-rows-[1fr_min-content] bg-baseSurface contain-layout app-drag',\n )}\n >\n <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-[--rail-action] p-1 gap-1 !overflow-y-auto'>\n {companions.map((companion) => (\n <Tabs.Tab key={getCompanionId(companion.id)} value={getCompanionId(companion.id)} asChild>\n <IconButton\n label={toLocalizedString(companion.properties.label, t)}\n icon={companion.properties.icon}\n iconOnly\n tooltipSide='left'\n data-value={getCompanionId(companion.id)}\n variant={\n activeId === getCompanionId(companion.id)\n ? state.complementarySidebarState === 'expanded'\n ? 'primary'\n : 'default'\n : 'ghost'\n }\n onClick={handleTabClick}\n />\n </Tabs.Tab>\n ))}\n </Tabs.Tablist>\n {!hoistStatusbar && (\n <div role='none' className='grid grid-cols-1 auto-rows-[--rail-item] p-1 overflow-y-auto'>\n <Surface role='status-bar--r0-footer' limit={1} />\n </div>\n )}\n <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-[--rail-action] p-1'>\n <ToggleComplementarySidebarButton />\n </div>\n </div>\n {activeId &&\n companions.map((companion) => (\n <Tabs.Tabpanel\n key={getCompanionId(companion.id)}\n value={getCompanionId(companion.id)}\n classNames={[\n 'absolute data-[state=\"inactive\"]:-z-[1] overflow-hidden',\n 'inset-block-0 inline-start-0 is-[calc(100%-var(--r0-size))] lg:is-[--r1-size]',\n 'grid grid-cols-1 grid-rows-[var(--rail-size)_1fr_min-content] pbs-[env(safe-area-inset-top)]',\n ]}\n {...(state.complementarySidebarState !== 'expanded' && { inert: true })}\n >\n <ComplementarySidebarPanel\n companion={companion}\n activeId={activeId}\n data={data}\n hoistStatusbar={hoistStatusbar}\n />\n </Tabs.Tabpanel>\n ))}\n </Tabs.Root>\n </Main.ComplementarySidebar>\n );\n};\n\ntype ComplementarySidebarPanelProps = {\n companion: DeckCompanion;\n activeId: string;\n data?: {\n id: string;\n subject: any;\n };\n hoistStatusbar: boolean;\n};\n\nconst ComplementarySidebarPanel = ({ companion, activeId, data, hoistStatusbar }: ComplementarySidebarPanelProps) => {\n const { t } = useTranslation(meta.id);\n\n if (getCompanionId(companion.id) !== activeId && !data) {\n return null;\n }\n\n const Wrapper = companion.properties.fixed ? Fragment : ScrollArea;\n\n return (\n <>\n <div role='none' className='flex items-center p-1 gap-1 border-be border-subduedSeparator'>\n <IconButton\n label={toLocalizedString(companion.properties.label, t)}\n icon={companion.properties.icon}\n iconOnly\n tooltipSide='left'\n data-value={getCompanionId(companion.id)}\n classNames='bs-10 is-10'\n variant='default'\n />\n <div role='none' className='pli-1'>\n {toLocalizedString(companion.properties.label, t)}\n </div>\n </div>\n <Wrapper>\n <Surface\n role={`deck-companion--${getCompanionId(companion.id)}`}\n data={data}\n fallback={PlankContentError}\n placeholder={<PlankLoading />}\n />\n </Wrapper>\n {!hoistStatusbar && (\n <div\n role='contentinfo'\n className='flex flex-wrap justify-center items-center border-bs border-subduedSeparator pbs-1 pbe-[max(env(safe-area-inset-bottom),0.25rem)]'\n >\n <Surface role='status-bar--r1-footer' limit={1} />\n </div>\n )}\n </>\n );\n};\n\nconst ScrollArea = ({ children }: PropsWithChildren) => {\n return <div className='flex flex-col grow overflow-x-hidden overflow-y-auto scrollbar-thin'>{children}</div>;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport React, {\n type KeyboardEvent,\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { Surface, useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';\nimport { debounce } from '@dxos/async';\nimport { type Node, useNode } from '@dxos/plugin-graph';\nimport { ATTENDABLE_PATH_SEPARATOR, useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/ui-theme';\n\nimport { useCompanions, useDeckState, useMainSize } from '../../hooks';\nimport { parseEntryId } from '../../layout';\nimport { DeckOperation, type DeckSettingsProps, type LayoutMode, type ResolvedPart } from '../../types';\n\nimport { PlankContentError, PlankError } from './PlankError';\nimport { PlankHeading } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\n\nconst UNKNOWN_ID = 'unknown_id';\n\n//\n// Plank\n//\n\nexport type PlankProps = Pick<PlankComponentProps, 'layoutMode' | 'part' | 'path' | 'order' | 'active' | 'settings'> & {\n id?: string;\n companionId?: string;\n};\n\n// TODO(burdon): Factor out conditional rendering.\n// Remove this wrapper component and render the entire set of planks in the deck with conditional visibility\n// to obviate mounting and unmounting when switching between solo and companion mode?\n// NOTE(thure, in reply): Whether any surface should be rendered and hidden is a performance matter — remember that\n// article surfaces contain full experiences, so being able to unmount them will yield relatively large performance\n// benefits. I think where we anticipate users will definitely want to quickly switch between showing and hiding entire\n// articles, over the (again probably large) performance benefit that unmounting them would confer, we can mount and\n// hide them, but I think that scenario in its most unambiguous form is probably rare. You could extrapolate\n// the scenario to include all \"potential\" planks such as companions, which we could keep mounted and hidden, but I\n// don't think the resulting performance would be acceptable. I think the real issue is \"perceived performance\" which\n// has mitigations that are in between mounting and un-mounting since both of those have tradeoffs; we may need one or more\n// \"partially-mounted\" experiences, like loading skeletons at the simple end, or screenshots of \"sleeping\" planks at\n// the advanced end.\n\n/**\n * A Plank is the main container for surfaces within a Deck.\n * It may be paired with a companion plank that enables the user to select one of multiple companion surfaces.\n */\nexport const Plank = memo(({ id = UNKNOWN_ID, companionId, ...props }: PlankProps) => {\n const { graph } = useAppGraph();\n const node = useNode(graph, id);\n const companions = useCompanions(id);\n const currentCompanion = companions.find(({ id }) => id === companionId);\n const hasCompanion = !!(companionId && currentCompanion);\n\n return (\n <PlankContainer\n solo={props.part === 'solo'}\n companion={hasCompanion}\n encapsulate={!!props.settings?.encapsulatedPlanks}\n >\n <PlankComponent\n id={id}\n node={node}\n companioned={hasCompanion ? 'primary' : undefined}\n companions={hasCompanion ? [] : companions}\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-primary' } : {})}\n />\n {hasCompanion && (\n <PlankComponent\n id={companionId}\n node={currentCompanion}\n primary={node}\n companions={companions}\n companioned='companion'\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-companion' } : { order: (props.order ?? 0) + 1 })}\n />\n )}\n </PlankContainer>\n );\n});\n\n//\n// PlankContainer\n//\n\ntype PlankContainerProps = PropsWithChildren<{ solo: boolean; companion: boolean; encapsulate: boolean }>;\n\nconst PlankContainer = ({ children, solo, companion, encapsulate }: PlankContainerProps) => {\n const sizeAttrs = useMainSize();\n if (!solo) {\n return children;\n }\n\n // TODO(burdon): Make resizable.\n return (\n <div\n role='none'\n data-popover-collision-boundary={true}\n className={mx(\n 'absolute inset-[--main-spacing] grid',\n encapsulate && 'border border-separator rounded overflow-hidden',\n companion && 'grid-cols-[6fr_4fr]', // TODO(burdon): Resize.\n railGridHorizontal,\n mainIntrinsicSize,\n )}\n {...sizeAttrs}\n >\n {children}\n </div>\n );\n};\n\n//\n// PlankComponent\n//\n\ntype PlankComponentProps = {\n layoutMode: LayoutMode;\n id: string;\n part: ResolvedPart;\n path?: string[];\n order?: number;\n active?: string[];\n companioned?: 'primary' | 'companion';\n node?: Node.Node;\n primary?: Node.Node;\n companions?: Node.Node[];\n settings?: DeckSettingsProps;\n};\n\nconst PlankComponent = memo(\n ({\n layoutMode,\n id,\n part,\n path,\n order,\n active,\n companioned,\n node,\n primary,\n companions,\n settings,\n }: PlankComponentProps) => {\n const { invokePromise } = useOperationInvoker();\n const { state, deck } = useDeckState();\n const { popoverAnchorId, scrollIntoView } = state;\n const { findFirstFocusable } = useFocusFinders();\n const canResize = layoutMode === 'deck';\n\n const attentionAttrs = useAttentionAttributes(primary?.id ?? id);\n const index = active ? active.findIndex((entryId) => entryId === id) : 0;\n const length = active?.length ?? 1;\n const canIncrementStart = active && index !== undefined && index > 0 && length !== undefined && length > 1;\n const canIncrementEnd = active && index !== undefined && index < length - 1 && length !== undefined;\n\n const rootElement = useRef<HTMLDivElement | null>(null);\n\n const { variant } = parseEntryId(id);\n const sizeKey = `${id.split('+')[0]}${variant ? `${ATTENDABLE_PATH_SEPARATOR}${variant}` : ''}`;\n const size = deck.plankSizing[sizeKey] as number | undefined;\n\n const handleSizeChange = useCallback(\n debounce((nextSize: number) => {\n return invokePromise(DeckOperation.UpdatePlankSize, { id: sizeKey, size: nextSize });\n }, 200),\n [invokePromise, sizeKey],\n );\n\n // TODO(thure): Tabster's focus group should handle moving focus to Main, but something is blocking it.\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.target === event.currentTarget) {\n switch (event.key) {\n case 'Escape':\n rootElement.current?.closest('main')?.focus();\n break;\n case 'Enter':\n rootElement.current && findFirstFocusable(rootElement.current)?.focus();\n break;\n }\n }\n }, []);\n\n useLayoutEffect(() => {\n if (scrollIntoView === id) {\n layoutMode === 'deck' && rootElement.current?.scrollIntoView({ behavior: 'smooth', inline: 'center' });\n // Clear the scroll into view state once it has been actioned.\n void invokePromise(Common.LayoutOperation.ScrollIntoView, { subject: undefined });\n }\n }, [id, scrollIntoView, layoutMode, invokePromise]);\n\n const isSolo = layoutMode.startsWith('solo') && part === 'solo';\n const isAttendable =\n (layoutMode.startsWith('solo') && part.startsWith('solo')) || (layoutMode === 'deck' && part === 'deck');\n\n const sizeAttrs = useMainSize();\n\n const data = useMemo(\n () =>\n node && {\n attendableId: id,\n subject: node.data,\n companionTo: primary?.data,\n properties: node.properties,\n variant,\n path,\n popoverAnchorId,\n },\n [node, node?.data, node?.properties, path, popoverAnchorId, primary?.data, variant],\n );\n\n // TODO(wittjosiah): Change prop to accept a component.\n const placeholder = useMemo(() => <PlankLoading />, []);\n\n const Root = part.startsWith('solo') ? 'article' : StackItem.Root;\n const fullscreen = layoutMode === 'solo--fullscreen';\n const className = mx(\n 'attention-surface relative dx-focus-ring-inset-over-all density-coarse',\n isSolo && 'absolute inset-0',\n isSolo && mainIntrinsicSize,\n railGridHorizontal,\n part.startsWith('solo') && 'grid',\n part.startsWith('solo-') && 'grid-rows-subgrid row-span-2 min-is-0',\n fullscreen && 'grid-rows-1',\n part === 'deck' && (companioned === 'companion' ? '!border-separator border-ie' : '!border-separator border-li'),\n part === 'solo-companion' && '!border-separator border-is',\n settings?.encapsulatedPlanks &&\n !part.startsWith('solo') &&\n 'mli-[--main-spacing] !border-separator border rounded overflow-hidden',\n );\n\n return (\n <Root\n ref={rootElement}\n data-testid='deck.plank'\n data-popover-collision-boundary={true}\n tabIndex={0}\n {...(part.startsWith('solo')\n ? ({ ...sizeAttrs, className } as any)\n : {\n item: { id },\n size,\n onSizeChange: handleSizeChange,\n classNames: className,\n order,\n role: 'article',\n })}\n {...(isAttendable ? attentionAttrs : {})}\n onKeyDown={handleKeyDown}\n >\n {node ? (\n <>\n {!fullscreen && (\n <PlankHeading\n id={id}\n part={part.startsWith('solo-') ? 'solo' : part}\n node={node}\n layoutMode={layoutMode}\n deckEnabled={settings?.enableDeck}\n canIncrementStart={canIncrementStart}\n canIncrementEnd={canIncrementEnd}\n popoverAnchorId={popoverAnchorId}\n primaryId={primary?.id}\n companioned={companioned}\n companions={companions}\n />\n )}\n <Surface\n key={node.id}\n role='article'\n data={data}\n limit={1}\n fallback={PlankContentError}\n placeholder={placeholder}\n />\n </>\n ) : (\n <PlankError id={id} part={part} />\n )}\n {canResize && <StackItem.ResizeHandle />}\n </Root>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useState } from 'react';\n\nimport { type Node } from '@dxos/plugin-graph';\nimport { useTranslation } from '@dxos/react-ui';\nimport { descriptionMessage, mx } from '@dxos/ui-theme';\n\nimport { meta } from '../../meta';\n\nimport { PlankHeading, type PlankHeadingProps } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\n\nexport const PlankContentError = ({ error }: { error?: Error }) => {\n const { t } = useTranslation(meta.id);\n const errorString = error?.toString() ?? '';\n return (\n <div role='none' className='overflow-y-auto p-8 attention-surface grid place-items-center'>\n <p role='alert' className={mx(descriptionMessage, 'break-all rounded-md p-4')}>\n {error ? errorString : t('error fallback message')}\n </p>\n </div>\n );\n};\n\nexport const PlankError = ({\n id,\n part,\n node,\n error,\n}: {\n id: string;\n part: PlankHeadingProps['part'];\n node?: Node.Node;\n error?: Error;\n}) => {\n const [timedOut, setTimedOut] = useState(false);\n useEffect(() => {\n setTimeout(() => setTimedOut(true), 5e3);\n }, []);\n return (\n <>\n <PlankHeading id={id} part={part} node={node} pending={!timedOut} />\n {timedOut ? <PlankContentError error={error} /> : <PlankLoading />}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, type MouseEvent, memo, useCallback, useEffect, useMemo } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { Surface, useAppGraph, useOperationInvoker } from '@dxos/app-framework/react';\nimport { Graph, type Node, useActionRunner } from '@dxos/plugin-graph';\nimport { Icon, IconButton, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\nimport { hoverableControls, hoverableFocusedWithinControls } from '@dxos/ui-theme';\n\nimport { useBreakpoints } from '../../hooks';\nimport { parseEntryId } from '../../layout';\nimport { meta } from '../../meta';\nimport { DeckOperation, type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';\nimport { soloInlinePadding } from '../fragments';\n\nimport { PlankCompanionControls, PlankControls } from './PlankControls';\n\nconst MAX_COMPANIONS = 5;\n\nexport type PlankHeadingProps = {\n id: string;\n part: ResolvedPart;\n layoutMode?: LayoutMode;\n node?: Node.Node;\n deckEnabled?: boolean;\n canIncrementStart?: boolean;\n canIncrementEnd?: boolean;\n popoverAnchorId?: string;\n primaryId?: string;\n pending?: boolean;\n companioned?: 'primary' | 'companion';\n companions?: Node.Node[];\n actions?: StackItemSigilAction[];\n};\n\nexport const PlankHeading = memo(\n ({\n id,\n part,\n node,\n deckEnabled,\n canIncrementStart,\n canIncrementEnd,\n popoverAnchorId,\n primaryId,\n pending,\n companioned,\n companions,\n layoutMode,\n actions = [],\n }: PlankHeadingProps) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise, invokeSync } = useOperationInvoker();\n const runAction = useActionRunner();\n const { graph } = useAppGraph();\n const breakpoint = useBreakpoints();\n const icon = node?.properties?.icon ?? 'ph--placeholder--regular';\n const label = pending\n ? t('pending heading')\n : toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: meta.id }], t);\n\n const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;\n\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n // Load actions for the node.\n if (node) {\n void Graph.expand(graph, node.id);\n }\n });\n\n return () => cancelAnimationFrame(frame);\n }, [node]);\n\n const attendableId = primaryId ?? id;\n const capabilities = useMemo(\n () => ({\n deck: deckEnabled ?? true,\n solo: breakpoint !== 'mobile' && (part === 'solo' || part === 'deck'),\n incrementStart: canIncrementStart,\n incrementEnd: canIncrementEnd,\n fullscreen: !isCompanionNode,\n companion: !isCompanionNode && companions && companions.length > 0,\n }),\n [breakpoint, part, companions, canIncrementStart, canIncrementEnd, isCompanionNode, deckEnabled],\n );\n\n const { variant } = parseEntryId(id);\n const sigilActions = useMemo(() => {\n if (!node) {\n return undefined;\n } else if (variant) {\n return [];\n } else {\n return [\n actions,\n Graph.getActions(graph, node.id).filter((a) =>\n ['list-item', 'list-item-primary', 'heading-list-item'].includes(a.properties.disposition),\n ),\n ].filter((a) => a.length > 0);\n }\n }, [actions, node, variant, graph]);\n\n const handleAction = useCallback(\n (action: StackItemSigilAction) => {\n if (typeof action.data === 'function') {\n void runAction(action as Node.Action, { parent: node, caller: meta.id });\n }\n },\n [node, runAction],\n );\n\n const handlePlankAction = useCallback(\n (eventType: DeckOperation.PartAdjustment) => {\n if (eventType.startsWith('solo')) {\n return invokePromise(DeckOperation.Adjust, { type: eventType, id });\n } else if (eventType === 'close') {\n if (part === 'complementary') {\n return invokeSync(Common.LayoutOperation.UpdateComplementary, { state: 'collapsed' });\n } else {\n return invokeSync(Common.LayoutOperation.Close, { subject: [id] });\n }\n } else {\n return invokePromise(DeckOperation.Adjust, { type: eventType, id });\n }\n },\n [invokePromise, invokeSync, id, part],\n );\n\n const ActionRoot = node && popoverAnchorId === `dxos.org/ui/${meta.id}/${node.id}` ? Popover.Anchor : Fragment;\n\n const handleTabClick = useCallback(\n (event: MouseEvent) => {\n const target = (event.target as HTMLElement).closest('[data-id]') as HTMLElement | null;\n const tabId = target?.dataset?.id;\n if (primaryId && tabId) {\n void invokePromise(DeckOperation.ChangeCompanion, {\n primary: primaryId,\n companion: tabId,\n });\n }\n },\n [primaryId, invokePromise],\n );\n\n return (\n <StackItem.Heading\n classNames={[\n 'plb-1 items-stretch gap-1 sticky inline-start-12 app-drag min-is-0 contain-layout density-coarse',\n part === 'solo' ? soloInlinePadding : 'pli-1',\n ...(layoutMode === 'solo--fullscreen'\n ? [\n hoverableControls,\n hoverableFocusedWithinControls,\n '*:transition-opacity *:opacity-[--controls-opacity] bg-transparent border-transparent transition-[background-color,border-color]',\n 'hover-hover:hover:bg-headerSurface focus-within:bg-headerSurface hover-hover:hover:border-subduedSeparator focus-within:border-subduedSeparator',\n ]\n : []),\n ]}\n data-plank-heading\n >\n {companions && isCompanionNode ? (\n /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */\n <div role='none' className='flex-1 min-is-0 overflow-x-auto scrollbar-none flex gap-1'>\n {companions.map(({ id, properties: { icon, label } }) => (\n <IconButton\n key={id}\n data-id={id}\n icon={icon}\n iconOnly={companions.length > MAX_COMPANIONS && node?.id !== id}\n label={toLocalizedString(label, t)}\n variant={node?.id === id ? 'primary' : 'ghost'}\n onClick={handleTabClick}\n />\n ))}\n </div>\n ) : (\n <>\n <ActionRoot>\n {node && sigilActions ? (\n <StackItem.Sigil\n icon={icon}\n related={part === 'complementary'}\n attendableId={attendableId}\n triggerLabel={t('actions menu label')}\n actions={sigilActions}\n onAction={handleAction}\n >\n <Surface role='menu-footer' data={{ subject: node.data }} />\n </StackItem.Sigil>\n ) : (\n <StackItem.SigilButton>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} />\n </StackItem.SigilButton>\n )}\n </ActionRoot>\n <TextTooltip text={label} onlyWhenTruncating>\n <StackItem.HeadingLabel\n attendableId={attendableId}\n related={part === 'complementary'}\n {...(pending && { classNames: 'text-description' })}\n >\n {label}\n </StackItem.HeadingLabel>\n </TextTooltip>\n </>\n )}\n {node && part !== 'complementary' && <Surface role='navbar-end' data={{ subject: node.data }} />}\n {companioned === 'companion' ? (\n <PlankCompanionControls primary={primaryId} />\n ) : (\n <PlankControls\n capabilities={capabilities}\n layoutMode={layoutMode}\n close={part === 'complementary' ? 'minify-end' : true}\n onClick={handlePlankAction}\n />\n )}\n </StackItem.Heading>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { mx } from '@dxos/ui-theme';\n\nexport const soloInlinePadding =\n 'pis-[calc(env(safe-area-inset-left)+.25rem)] pie-[calc(env(safe-area-inset-left)+.25rem)]';\n\nconst sidebarToggleStyles = 'bs-[--rail-item] is-[--rail-item] absolute block-end-2 z-[1] !bg-deckSurface lg:hidden';\n\nexport const fixedSidebarToggleStyles = mx(sidebarToggleStyles, 'inline-start-2');\n\nexport const fixedComplementarySidebarToggleStyles = mx(sidebarToggleStyles, 'inline-end-2');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/react';\nimport { invariant } from '@dxos/invariant';\nimport { ButtonGroup, type ButtonGroupProps, type ButtonProps, IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '../../meta';\nimport { type DeckAction, DeckOperation, type LayoutMode } from '../../types';\n\nexport type PlankControlHandler = (event: DeckAction.PartAdjustment) => void;\n\nexport type PlankCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n deck?: boolean;\n solo?: boolean;\n fullscreen?: boolean;\n companion?: boolean;\n};\n\nexport type PlankControlsProps = Omit<ButtonGroupProps, 'onClick'> & {\n onClick?: PlankControlHandler;\n variant?: 'hide-disabled' | 'default';\n close?: boolean | 'minify-start' | 'minify-end';\n capabilities: PlankCapabilities;\n layoutMode?: LayoutMode;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return <IconButton label={label} icon={icon} iconOnly variant='ghost' tooltipSide='bottom' {...props} />;\n};\n\nconst plankControlSpacing = 'pli-2';\n\ntype PlankComplimentControlsProps = {\n primary?: string;\n};\n\nexport const PlankCompanionControls = forwardRef<HTMLDivElement, PlankComplimentControlsProps>(\n ({ primary }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const handleCloseCompanion = useCallback(() => {\n invariant(primary);\n return invokePromise(DeckOperation.ChangeCompanion, { primary, companion: null });\n }, [invokePromise, primary]);\n return (\n <div ref={forwardedRef} className='contents app-no-drag'>\n <PlankControl\n label={t('close companion label')}\n variant='ghost'\n icon='ph--x--regular'\n onClick={handleCloseCompanion}\n classNames={plankControlSpacing}\n />\n </div>\n );\n },\n);\n\n// TODO(wittjosiah): Duplicate of stack LayoutControls?\n// Translations were to be duplicated between packages.\n// NOTE(thure): Pinning & unpinning are disabled indefinitely.\nexport const PlankControls = forwardRef<HTMLDivElement, PlankControlsProps>(\n (\n { children, classNames, variant = 'default', capabilities, layoutMode, pin, close = false, onClick, ...props },\n forwardedRef,\n ) => {\n const { t } = useTranslation(meta.id);\n const buttonClassNames =\n variant === 'hide-disabled' ? `disabled:hidden ${plankControlSpacing}` : plankControlSpacing;\n\n const layoutIsAnySolo = !!layoutMode?.startsWith('solo');\n\n return (\n <ButtonGroup {...props} classNames={['app-no-drag !opacity-100', classNames]} ref={forwardedRef}>\n {capabilities.deck ? (\n <>\n {capabilities.solo && (\n <>\n {layoutMode === 'solo' && (\n <PlankControl\n label={t('show fullscreen plank label')}\n classNames={buttonClassNames}\n icon='ph--corners-out--regular'\n onClick={() => onClick?.('solo--fullscreen')}\n />\n )}\n <PlankControl\n label={t(\n layoutMode === 'solo--fullscreen'\n ? 'exit fullscreen label'\n : layoutIsAnySolo\n ? 'show deck plank label'\n : 'show solo plank label',\n )}\n classNames={buttonClassNames}\n icon={\n layoutMode === 'solo--fullscreen'\n ? 'ph--corners-in--regular'\n : layoutIsAnySolo\n ? 'ph--arrows-in-line-horizontal--regular'\n : 'ph--arrows-out-line-horizontal--regular'\n }\n onClick={() => onClick?.(layoutMode === 'solo--fullscreen' ? 'solo--fullscreen' : 'solo')}\n />\n </>\n )}\n\n {!layoutIsAnySolo && (\n <>\n <PlankControl\n label={t('increment start label')}\n disabled={!capabilities.incrementStart}\n classNames={buttonClassNames}\n icon='ph--caret-left--regular'\n onClick={() => onClick?.('increment-start')}\n />\n <PlankControl\n label={t('increment end label')}\n disabled={!capabilities.incrementEnd}\n classNames={buttonClassNames}\n icon='ph--caret-right--regular'\n onClick={() => onClick?.('increment-end')}\n />\n </>\n )}\n </>\n ) : (\n capabilities.fullscreen && (\n <PlankControl\n label={t(layoutMode === 'solo--fullscreen' ? 'exit fullscreen label' : 'show fullscreen plank label')}\n classNames={buttonClassNames}\n icon={layoutMode === 'solo--fullscreen' ? 'ph--corners-in--regular' : 'ph--corners-out--regular'}\n onClick={() => onClick?.('solo--fullscreen')}\n />\n )\n )}\n\n {close && !layoutIsAnySolo && (\n <PlankControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\n data-testid='plankHeading.close'\n icon={\n close === 'minify-start'\n ? 'ph--caret-line-left--regular'\n : close === 'minify-end'\n ? 'ph--caret-line-right--regular'\n : 'ph--x--regular'\n }\n onClick={() => onClick?.('close')}\n />\n )}\n\n {capabilities.companion && (\n <PlankControl\n label={t('open companion label')}\n classNames={buttonClassNames}\n data-testid='plankHeading.companion'\n icon='ph--square-split-horizontal--regular'\n onClick={() => onClick?.('companion')}\n />\n )}\n {children}\n </ButtonGroup>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\n// TODO(burdon): Show skeleton: https://github.com/dxos/dxos/issues/8259\nexport const PlankLoading = () => {\n return <div role='none' className='grid place-items-center attention-surface' />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useOperationInvoker } from '@dxos/app-framework/react';\nimport { IconButton, type IconButtonProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { getCompanionId, useDeckCompanions, useDeckState } from '../../hooks';\nimport { meta } from '../../meta';\n\nexport const ToggleSidebarButton = ({\n classNames,\n variant = 'ghost',\n}: ThemedClassName<Pick<IconButtonProps, 'variant'>>) => {\n const { state, updateState } = useDeckState();\n const { t } = useTranslation(meta.id);\n\n const handleClick = useCallback(() => {\n updateState((s) => ({\n ...s,\n sidebarState: s.sidebarState === 'expanded' ? 'collapsed' : 'expanded',\n }));\n }, [updateState]);\n\n return (\n <IconButton\n variant={variant}\n icon='ph--sidebar--regular'\n iconOnly\n size={4}\n label={t('open navigation sidebar label')}\n onClick={handleClick}\n classNames={classNames}\n />\n );\n};\n\nexport const CloseSidebarButton = () => {\n const { updateState } = useDeckState();\n const { t } = useTranslation(meta.id);\n\n const handleClick = useCallback(() => {\n updateState((s) => ({ ...s, sidebarState: 'collapsed' }));\n }, [updateState]);\n\n return (\n <IconButton\n variant='ghost'\n icon='ph--caret-line-left--regular'\n iconOnly\n size={4}\n label={t('close navigation sidebar label')}\n onClick={handleClick}\n classNames='rounded-none pli-1 dx-focus-ring-inset pie-[max(.5rem,env(safe-area-inset-left))]'\n />\n );\n};\n\nexport const ToggleComplementarySidebarButton = ({\n inR0,\n classNames,\n current,\n}: ThemedClassName<{ inR0?: boolean; current?: string }>) => {\n const { invokeSync } = useOperationInvoker();\n const { state, updateState } = useDeckState();\n const { t } = useTranslation(meta.id);\n\n const companions = useDeckCompanions();\n const handleClick = useCallback(() => {\n const nextState = state.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded';\n updateState((s) => ({ ...s, complementarySidebarState: nextState }));\n\n const subject = state.complementarySidebarPanel ?? (companions[0] && getCompanionId(companions[0].id));\n if (nextState === 'expanded' && !current && subject) {\n invokeSync(Common.LayoutOperation.UpdateComplementary, { subject });\n }\n }, [state, updateState, current, companions, invokeSync]);\n\n return (\n <IconButton\n variant='ghost'\n classNames={['[&>svg]:-scale-x-100', classNames]}\n icon='ph--sidebar-simple--regular'\n iconOnly\n label={t('open complementary sidebar label')}\n size={inR0 ? 5 : 4}\n tooltipSide={inR0 ? 'left' : undefined}\n onClick={handleClick}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { type Label, Main } from '@dxos/react-ui';\n\nimport { useBreakpoints, useDeckState, useHoistStatusbar } from '../../hooks';\nimport { meta } from '../../meta';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\n\nconst label = ['sidebar title', { ns: meta.id }] satisfies Label;\n\nexport const Sidebar = () => {\n const { state, deck } = useDeckState();\n const { popoverAnchorId, activeDeck: current } = state;\n const breakpoint = useBreakpoints();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const navigationData = useMemo(\n () => ({ popoverAnchorId, topbar, hoistStatusbar, current }),\n [popoverAnchorId, topbar, hoistStatusbar, current],\n );\n\n return (\n <Main.NavigationSidebar\n label={label}\n classNames={[\n 'grid',\n topbar && 'block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'block-end-[--statusbar-size]',\n ]}\n >\n <Surface role='navigation' data={navigationData} limit={1} />\n </Main.NavigationSidebar>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Mosaic } from '@dxos/react-ui-mosaic';\n\nimport { useDeckState } from '../../hooks';\n\nimport { ActiveNode } from './ActiveNode';\nimport { DeckMain } from './DeckMain';\nimport { Dialog } from './Dialog';\nimport { PopoverContent, PopoverRoot } from './Popover';\nimport { Toaster, type ToasterProps } from './Toast';\n\nexport type DeckLayoutProps = Pick<ToasterProps, 'onDismissToast'>;\n\nexport const DeckLayout = ({ onDismissToast }: DeckLayoutProps) => {\n const { state } = useDeckState();\n const { toasts } = state;\n\n return (\n <Mosaic.Root>\n <PopoverRoot>\n <ActiveNode />\n <DeckMain />\n <PopoverContent />\n <Dialog />\n <Toaster toasts={toasts} onDismissToast={onDismissToast} />\n </PopoverRoot>\n </Mosaic.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface, useAppGraph } from '@dxos/app-framework/react';\nimport { useNode } from '@dxos/plugin-graph';\nimport { useAttended } from '@dxos/react-ui-attention';\n\nimport { useNodeActionExpander } from '../../hooks';\n\n// TODO(burdon): Factor out to effect in plugin set document title.\nexport const ActiveNode = () => {\n const [id] = useAttended();\n const { graph } = useAppGraph();\n const activeNode = useNode(graph, id);\n useNodeActionExpander(activeNode);\n\n return (\n <div role='none' className='sr-only'>\n {/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.\n Probably this lives in React-land currently in order to access translations? */}\n <Surface role='document-title' data={{ subject: activeNode }} limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { Fragment, type UIEvent, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useAtomCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/react';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Main, type MainContentProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';\nimport { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from '@dxos/react-ui-stack';\nimport { mainPaddingTransitions, mx } from '@dxos/ui-theme';\n\nimport { useBreakpoints, useDeckState, useHoistStatusbar } from '../../hooks';\nimport { DeckCapabilities, getMode } from '../../types';\nimport { calculateOverscroll, layoutAppliesTopbar } from '../../util';\nimport { fixedComplementarySidebarToggleStyles, fixedSidebarToggleStyles } from '../fragments';\nimport { Plank } from '../Plank';\nimport { ComplementarySidebar, Sidebar, ToggleComplementarySidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nimport { ContentEmpty } from './ContentEmpty';\nimport { StatusBar } from './StatusBar';\nimport { Topbar } from './Topbar';\n\nexport const DeckMain = () => {\n const { invokeSync } = useOperationInvoker();\n const settings = useAtomCapability(DeckCapabilities.Settings);\n const { state, deck, updateState } = useDeckState();\n const { sidebarState, complementarySidebarState, complementarySidebarPanel } = state;\n const { active, activeCompanions, fullscreen, solo, plankSizing } = deck;\n const layoutMode = getMode(deck);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n const pluginManager = usePluginManager();\n\n const scrollLeftRef = useRef<number>(null);\n const deckRef = useRef<HTMLDivElement>(null);\n\n // Ensure the first plank is attended when the deck is first rendered.\n useEffect(() => {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attention = pluginManager.capabilities.get(AttentionCapabilities.Attention);\n const attended = attention.getCurrent();\n const firstId = solo ?? active[0];\n if (attended.length === 0 && firstId) {\n // TODO(wittjosiah): Focusing the type button is a workaround.\n // If the plank is directly focused on first load the focus ring appears.\n document.querySelector<HTMLElement>(`article[data-attendable-id=\"${firstId}\"] button`)?.focus();\n }\n }, []);\n\n // Not using `breakpoint` to avoid firing when breakpoint changes between tablet and desktop.\n // `ssr: false` to avoid using fallback values and flashing into solo mode on startup.\n const [isNotMobile] = useMediaQuery('md');\n const shouldRevert = useRef(false);\n useEffect(() => {\n if (!isNotMobile && layoutMode === 'deck') {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attention = pluginManager.capabilities.get(AttentionCapabilities.Attention);\n const attended = attention.getCurrent();\n\n shouldRevert.current = true;\n invokeSync(Common.LayoutOperation.SetLayoutMode, { subject: attended[0], mode: 'solo' });\n } else if (isNotMobile && layoutMode === 'solo' && shouldRevert.current) {\n invokeSync(Common.LayoutOperation.SetLayoutMode, { revert: true });\n }\n // NOTE: Using `layoutMode` instead of `deck` to avoid infinite loops caused by object reference changes.\n }, [isNotMobile, layoutMode, invokeSync]);\n\n // When deck is disabled in settings, set to solo mode if the current layout mode is deck.\n // TODO(thure): Applying this as an effect should be avoided over emitting the operation only when the setting changes.\n useEffect(() => {\n if (!settings?.enableDeck && layoutMode === 'deck') {\n invokeSync(Common.LayoutOperation.SetLayoutMode, { subject: active[0], mode: 'solo' });\n }\n }, [settings?.enableDeck, invokeSync, active, layoutMode]);\n\n /**\n * Clear scroll restoration state if the window is resized.\n */\n const handleResize = useCallback(() => {\n scrollLeftRef.current = null;\n }, []);\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n const restoreScroll = useCallback(() => {\n if (deckRef.current && scrollLeftRef.current != null) {\n deckRef.current.scrollLeft = scrollLeftRef.current;\n }\n }, []);\n useOnTransition(layoutMode, (mode) => mode !== 'deck', 'deck', restoreScroll);\n\n /**\n * Save scroll position as the user scrolls.\n */\n const handleScroll = useCallback(\n (event: UIEvent) => {\n if (!solo && event.currentTarget === event.target) {\n scrollLeftRef.current = (event.target as HTMLDivElement).scrollLeft;\n }\n },\n [solo],\n );\n\n const isEmpty = !solo && active.length === 0;\n\n const padding = useMemo(() => {\n if (!solo && settings?.overscroll === 'centering') {\n return calculateOverscroll(active.length);\n }\n return {};\n }, [solo, settings?.overscroll, deck]);\n\n const mainPosition = useMemo(\n () => [\n 'grid !block-start-[env(safe-area-inset-top)]',\n topbar && '!block-start-[calc(env(safe-area-inset-top)+var(--rail-size))]',\n hoistStatusbar && 'lg:block-end-[--statusbar-size]',\n ],\n [topbar, hoistStatusbar],\n );\n\n const { order, itemsCount }: { order: Record<string, number>; itemsCount: number } = useMemo(() => {\n return active.reduce(\n (acc: { order: Record<string, number>; itemsCount: number }, entryId) => {\n acc.order[entryId] = acc.itemsCount + 1;\n acc.itemsCount += activeCompanions?.[entryId] ? 3 : 2;\n return acc;\n },\n { order: {}, itemsCount: 0 },\n );\n }, [active, activeCompanions]);\n\n const handleNavigationSidebarStateChange = useCallback(\n (next: typeof sidebarState) => {\n updateState((s) => ({ ...s, sidebarState: next }));\n },\n [updateState],\n );\n\n const handleComplementarySidebarStateChange = useCallback(\n (next: typeof complementarySidebarState) => {\n updateState((s) => ({ ...s, complementarySidebarState: next }));\n },\n [updateState],\n );\n\n return (\n <Main.Root\n navigationSidebarState={fullscreen ? 'closed' : sidebarState}\n complementarySidebarState={fullscreen ? 'closed' : complementarySidebarState}\n onNavigationSidebarStateChange={handleNavigationSidebarStateChange}\n onComplementarySidebarStateChange={handleComplementarySidebarStateChange}\n >\n {/* Left sidebar. */}\n <Sidebar />\n\n {/* Right sidebar. */}\n <ComplementarySidebar current={complementarySidebarPanel} />\n\n {/* Dialog overlay to dismiss dialogs. */}\n <Main.Overlay />\n\n {/* No content. */}\n {isEmpty && (\n <Main.Content bounce handlesFocus classNames={mainPosition}>\n <ContentEmpty />\n </Main.Content>\n )}\n\n {/* Solo/deck mode. */}\n {!isEmpty && (\n <Main.Content\n bounce\n handlesFocus\n classNames={mainPosition}\n style={\n {\n '--main-spacing': settings?.encapsulatedPlanks ? '0.75rem' : '0',\n '--dx-main-sidebarWidth':\n sidebarState === 'expanded'\n ? 'var(--nav-sidebar-size)'\n : sidebarState === 'collapsed'\n ? 'var(--l0-size)'\n : '0',\n '--dx-main-complementaryWidth':\n complementarySidebarState === 'expanded'\n ? 'var(--complementary-sidebar-size)'\n : complementarySidebarState === 'collapsed'\n ? 'var(--rail-size)'\n : '0',\n '--dx-main-contentFirstWidth': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n '--dx-main-contentLastWidth': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n } as MainContentProps['style']\n }\n >\n {/* Deck mode. */}\n <div\n role='none'\n className={!solo ? 'relative bg-deckSurface overflow-hidden' : 'sr-only'}\n {...(solo && { inert: true })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <Stack\n ref={deckRef}\n orientation='horizontal'\n size='contain'\n itemsCount={itemsCount - 1}\n classNames={[\n 'absolute inset-block-[--main-spacing] -inset-inline-px bs-[calc(100%-2*var(--main-spacing))]',\n mainPaddingTransitions,\n ]}\n style={padding}\n onScroll={handleScroll}\n >\n {active.map((entryId) => (\n <Fragment key={entryId}>\n <PlankSeparator order={order[entryId] - 1} encapsulate={!!settings?.enableDeck} />\n <Plank\n id={entryId}\n companionId={activeCompanions?.[entryId]}\n part='deck'\n order={order[entryId]}\n active={active}\n layoutMode={layoutMode}\n settings={settings}\n />\n </Fragment>\n ))}\n </Stack>\n </div>\n\n {/* Solo mode. */}\n <div\n role='none'\n className={solo ? 'relative overflow-hidden bg-deckSurface' : 'sr-only'}\n {...(!solo && { inert: true })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <StackContext.Provider\n value={{\n orientation: 'horizontal',\n size: 'contain',\n rail: true,\n }}\n >\n <Plank\n id={solo}\n companionId={solo ? activeCompanions?.[solo] : undefined}\n part='solo'\n layoutMode={layoutMode}\n settings={settings}\n />\n </StackContext.Provider>\n </div>\n </Main.Content>\n )}\n\n {/* Topbar. */}\n {topbar && <Topbar />}\n\n {/* Status bar. */}\n {hoistStatusbar && <StatusBar showHints={settings?.showHints} />}\n </Main.Root>\n );\n};\n\nconst PlankSeparator = ({ order, encapsulate }: { order: number; encapsulate?: boolean }) =>\n order > 0 ? (\n <span\n role='separator'\n className={mx('row-span-2 bg-deckSurface', encapsulate ? 'is-0' : 'is-4')}\n style={{ gridColumn: order }}\n />\n ) : null;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\n\nimport { useBreakpoints, useDeckState } from '../../hooks';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\nimport { fixedSidebarToggleStyles } from '../fragments';\nimport { ToggleSidebarButton } from '../Sidebar';\n\nexport const ContentEmpty = () => {\n const breakpoint = useBreakpoints();\n const { deck } = useDeckState();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n return (\n <div\n role='none'\n className='grid place-items-center p-8 relative bg-deckSurface'\n data-testid='layoutPlugin.firstRunMessage'\n >\n <Surface role='keyshortcuts' />\n {!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { useLandmarkMover } from '@dxos/react-ui';\n\nexport const StatusBar = ({ showHints }: { showHints?: boolean }) => {\n const mover = useLandmarkMover(undefined, '3');\n return (\n <div\n role='contentinfo'\n className='fixed block-end-0 inset-inline-0 bs-[--statusbar-size] border-bs border-separator z-[2] flex text-description'\n {...mover}\n >\n {showHints && <Surface role='hints' limit={1} />}\n <Surface role='status-bar' limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Banner } from './Banner';\n\nexport const Topbar = () => {\n return <Banner variant='topbar' />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';\n\nimport { useDeckState } from '../../hooks';\nimport { PlankContentError } from '../Plank';\n\nexport const Dialog = () => {\n const { state, updateEphemeral } = useDeckState();\n const { dialogOpen, dialogType, dialogBlockAlign, dialogOverlayClasses, dialogOverlayStyle, dialogContent } = state;\n const Root = dialogType === 'alert' ? AlertDialog.Root : NaturalDialog.Root;\n const Overlay = dialogType === 'alert' ? AlertDialog.Overlay : NaturalDialog.Overlay;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n updateEphemeral((s) => ({ ...s, dialogOpen: nextOpen }));\n },\n [updateEphemeral],\n );\n\n // TODO(thure): End block alignment affecting `modal` and whether the surface renders in an overlay is tailored to the needs of the ambient chat dialog. As the feature matures, consider separating concerns.\n return (\n <Root modal={dialogBlockAlign !== 'end'} open={dialogOpen} onOpenChange={handleOpenChange}>\n {dialogBlockAlign === 'end' ? (\n // TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.\n <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} placeholder={<div />} />\n ) : (\n <Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>\n <Surface role='dialog' data={dialogContent} limit={1} fallback={PlankContentError} />\n </Overlay>\n )}\n </Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/react';\nimport { Popover, type PopoverContentInteractOutsideEvent, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { Card } from '@dxos/react-ui-mosaic';\n\nimport { useDeckState } from '../../hooks';\nimport { meta } from '../../meta';\n\nexport type DeckPopoverRootProps = PropsWithChildren<{}>;\n\nconst DEBOUNCE_DELAY = 40;\n\ntype DeckPopoverContextValue = {\n setOpen: (open: boolean) => void;\n};\n\nconst [DeckPopoverProvider, useDeckPopoverContext] = createContext<DeckPopoverContextValue>('DeckPopover');\n\nexport const PopoverRoot = ({ children }: DeckPopoverRootProps) => {\n const { state } = useDeckState();\n const virtualRef = useRef<HTMLButtonElement | null>(null);\n const [virtualIter, setVirtualIter] = useState(0);\n const [open, setOpen] = useState(false);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // TODO(thure): This is a workaround for the race condition between displaying a Popover and either rendering\n // the anchor further down the tree or measuring the virtual trigger's client rect.\n useEffect(() => {\n setOpen(false);\n if (state.popoverOpen) {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if (state.popoverAnchor && virtualRef.current !== state.popoverAnchor) {\n virtualRef.current = state.popoverAnchor ?? null;\n setVirtualIter((iter) => iter + 1);\n }\n debounceRef.current = setTimeout(() => setOpen(true), DEBOUNCE_DELAY);\n }\n }, [state.popoverOpen, state.popoverAnchorId, state.popoverAnchor, state.popoverContent]);\n\n return (\n <DeckPopoverProvider setOpen={setOpen}>\n <Popover.Root modal={false} open={open}>\n {state.popoverAnchor && <Popover.VirtualTrigger key={virtualIter} virtualRef={virtualRef} />}\n {children}\n </Popover.Root>\n </DeckPopoverProvider>\n );\n};\n\nexport const PopoverContent = () => {\n const { t } = useTranslation(meta.id);\n const { state, updateEphemeral } = useDeckState();\n const { setOpen } = useDeckPopoverContext('PopoverContent');\n\n const handleClose = useCallback(() => {\n setOpen(false);\n updateEphemeral((state) => ({\n ...state,\n popoverOpen: false,\n popoverAnchor: undefined,\n popoverAnchorId: undefined,\n popoverSide: undefined,\n }));\n }, [updateEphemeral]);\n\n const handleInteractOutside = useCallback(\n (event: KeyboardEvent | PopoverContentInteractOutsideEvent) => {\n if (\n // TODO(thure): CodeMirror should not focus itself when it updates.\n event.type === 'dismissableLayer.focusOutside' &&\n (event.currentTarget as HTMLElement | undefined)?.classList.contains('cm-content')\n ) {\n event.preventDefault();\n } else {\n handleClose();\n }\n },\n [handleClose],\n );\n\n return (\n <Popover.Portal>\n <Popover.Content\n side={state.popoverSide}\n sticky='always'\n hideWhenDetached\n onInteractOutside={handleInteractOutside}\n onEscapeKeyDown={handleInteractOutside}\n >\n <Popover.Viewport>\n {state.popoverKind === 'card' && (\n <Card.Root>\n <Card.Toolbar>\n {/* TODO(wittjosiah): Cleaner way to handle no drag handle in toolbar? */}\n <span />\n {state.popoverTitle ? <Card.Title>{toLocalizedString(state.popoverTitle, t)}</Card.Title> : <span />}\n <Card.Close onClick={handleClose} />\n </Card.Toolbar>\n <Surface role='card--content' data={state.popoverContent} limit={1} />\n </Card.Root>\n )}\n {state.popoverKind === 'base' && <Surface role='popover' data={state.popoverContent} limit={1} />}\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type Common } from '@dxos/app-framework';\nimport {\n Button,\n Icon,\n Toast as NaturalToast,\n type ToastRootProps,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { meta } from '../../meta';\n\n// TODO(wittjosiah): Render remaining duration as a progress bar within the toast.\nexport const Toast = ({\n id,\n title,\n description,\n icon,\n duration,\n actionLabel,\n actionAlt,\n closeLabel,\n onAction,\n onOpenChange,\n}: Common.LayoutOperation.Toast & Pick<ToastRootProps, 'onOpenChange'>) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <NaturalToast.Root data-testid={id} defaultOpen duration={duration} onOpenChange={onOpenChange}>\n <NaturalToast.Body>\n <NaturalToast.Title classNames='items-center'>\n {icon && <Icon icon={icon} classNames='inline mr-1' />}\n {title && <span>{toLocalizedString(title, t)}</span>}\n </NaturalToast.Title>\n {description && (\n <NaturalToast.Description>{description && toLocalizedString(description, t)}</NaturalToast.Description>\n )}\n </NaturalToast.Body>\n <NaturalToast.Actions>\n {onAction && actionAlt && actionLabel && (\n <NaturalToast.Action altText={toLocalizedString(actionAlt, t)} asChild>\n <Button data-testid='toast.action' variant='primary' onClick={() => onAction?.()}>\n {toLocalizedString(actionLabel, t)}\n </Button>\n </NaturalToast.Action>\n )}\n {closeLabel && (\n <NaturalToast.Close asChild>\n <Button data-testid='toast.close'>{toLocalizedString(closeLabel, t)}</Button>\n </NaturalToast.Close>\n )}\n </NaturalToast.Actions>\n </NaturalToast.Root>\n );\n};\n\nexport type ToasterProps = {\n toasts?: Common.LayoutOperation.Toast[];\n onDismissToast?: (id: string) => void;\n};\n\nexport const Toaster = ({ toasts, onDismissToast }: ToasterProps) => {\n return (\n <>\n {toasts?.map((toast) => (\n <Toast\n {...toast}\n key={toast.id}\n onOpenChange={(open: boolean) => {\n if (!open) {\n onDismissToast?.(toast.id);\n }\n\n return open;\n }}\n />\n ))}\n </>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Input, Select, useTranslation } from '@dxos/react-ui';\nimport { ControlGroup, ControlItemInput, ControlPage, ControlSection } from '@dxos/react-ui-form';\n\nimport { meta } from '../../meta';\nimport {\n type DeckSettingsProps,\n type NewPlankPositioning,\n NewPlankPositions,\n type Overscroll,\n OverscrollOptions,\n} from '../../types';\n\nconst isSocket = !!(globalThis as any).__args;\n\nexport type DeckSettingsComponentProps = {\n settings: DeckSettingsProps;\n onSettingsChange: (fn: (current: DeckSettingsProps) => DeckSettingsProps) => void;\n};\n\nexport const DeckSettings = ({ settings, onSettingsChange }: DeckSettingsComponentProps) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <ControlPage>\n <ControlSection title={t('settings title', { ns: meta.id })}>\n <ControlGroup>\n <ControlItemInput title={t('settings enable deck label')}>\n <Input.Switch\n checked={settings.enableDeck}\n onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, enableDeck: checked }))}\n />\n </ControlItemInput>\n <ControlItemInput title={t('settings encapsulated planks label')}>\n <Input.Switch\n checked={settings.encapsulatedPlanks ?? false}\n onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, encapsulatedPlanks: checked }))}\n />\n </ControlItemInput>\n <ControlItemInput title={t('select new plank positioning label')}>\n <Select.Root\n disabled={!settings.enableDeck}\n value={settings.newPlankPositioning ?? 'start'}\n onValueChange={(value) =>\n onSettingsChange((s) => ({ ...s, newPlankPositioning: value as NewPlankPositioning }))\n }\n >\n <Select.TriggerButton placeholder={t('select new plank positioning placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {NewPlankPositions.map((position) => (\n <Select.Option key={position} value={position}>\n {t(`settings new plank position ${position} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </ControlItemInput>\n <ControlItemInput title={t('settings overscroll label')}>\n <Select.Root\n disabled={!settings.enableDeck}\n value={settings.overscroll ?? 'none'}\n onValueChange={(value) => onSettingsChange((s) => ({ ...s, overscroll: value as Overscroll }))}\n >\n <Select.TriggerButton placeholder={t('select overscroll placeholder')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {OverscrollOptions.map((option) => (\n <Select.Option key={option} value={option}>\n {t(`settings overscroll ${option} label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </ControlItemInput>\n <ControlItemInput title={t('settings enable statusbar label')}>\n <Input.Switch\n checked={settings.enableStatusbar}\n onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, enableStatusbar: checked }))}\n />\n </ControlItemInput>\n <ControlItemInput title={t('settings show hints label')}>\n <Input.Switch\n checked={settings.showHints}\n onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, showHints: checked }))}\n />\n </ControlItemInput>\n {!isSocket && (\n <ControlItemInput title={t('settings native redirect label')}>\n <Input.Switch\n checked={settings.enableNativeRedirect}\n onCheckedChange={(checked) => onSettingsChange((s) => ({ ...s, enableNativeRedirect: checked }))}\n />\n </ControlItemInput>\n )}\n </ControlGroup>\n </ControlSection>\n </ControlPage>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "Surface", "useTranslation", "mx", "osTranslations", "React", "Fragment", "useCallback", "useEffect", "useMemo", "useState", "Common", "Surface", "useOperationInvoker", "IconButton", "Main", "toLocalizedString", "useTranslation", "Tabs", "mx", "useFocusFinders", "React", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "Common", "Surface", "useAppGraph", "useOperationInvoker", "debounce", "useNode", "ATTENDABLE_PATH_SEPARATOR", "useAttentionAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "React", "useEffect", "useState", "useTranslation", "descriptionMessage", "mx", "React", "Fragment", "memo", "useCallback", "useEffect", "useMemo", "Common", "Surface", "useAppGraph", "useOperationInvoker", "Graph", "useActionRunner", "Icon", "IconButton", "Popover", "toLocalizedString", "useTranslation", "StackItem", "TextTooltip", "hoverableControls", "hoverableFocusedWithinControls", "mx", "soloInlinePadding", "sidebarToggleStyles", "fixedSidebarToggleStyles", "mx", "fixedComplementarySidebarToggleStyles", "React", "forwardRef", "useCallback", "useOperationInvoker", "invariant", "ButtonGroup", "IconButton", "useTranslation", "PlankControl", "icon", "label", "props", "IconButton", "iconOnly", "variant", "tooltipSide", "plankControlSpacing", "PlankCompanionControls", "forwardRef", "primary", "forwardedRef", "t", "useTranslation", "meta", "id", "invokePromise", "useOperationInvoker", "handleCloseCompanion", "useCallback", "invariant", "DeckOperation", "ChangeCompanion", "companion", "div", "ref", "className", "onClick", "classNames", "PlankControls", "children", "capabilities", "layoutMode", "pin", "close", "buttonClassNames", "layoutIsAnySolo", "startsWith", "ButtonGroup", "deck", "solo", "disabled", "incrementStart", "incrementEnd", "fullscreen", "data-testid", "MAX_COMPANIONS", "PlankHeading", "memo", "id", "part", "node", "deckEnabled", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "primaryId", "pending", "companioned", "companions", "layoutMode", "actions", "t", "useTranslation", "meta", "invokePromise", "invokeSync", "useOperationInvoker", "runAction", "useActionRunner", "graph", "useAppGraph", "breakpoint", "useBreakpoints", "icon", "properties", "label", "toLocalizedString", "ns", "isCompanionNode", "type", "PLANK_COMPANION_TYPE", "useEffect", "frame", "requestAnimationFrame", "Graph", "expand", "cancelAnimationFrame", "attendableId", "capabilities", "useMemo", "deck", "solo", "incrementStart", "incrementEnd", "fullscreen", "companion", "length", "variant", "parseEntryId", "sigilActions", "undefined", "getActions", "filter", "a", "includes", "disposition", "handleAction", "useCallback", "action", "data", "parent", "caller", "handlePlankAction", "eventType", "startsWith", "DeckOperation", "Adjust", "Common", "LayoutOperation", "UpdateComplementary", "state", "Close", "subject", "ActionRoot", "Popover", "Anchor", "Fragment", "handleTabClick", "event", "target", "closest", "tabId", "dataset", "ChangeCompanion", "primary", "React", "StackItem", "Heading", "classNames", "soloInlinePadding", "hoverableControls", "hoverableFocusedWithinControls", "data-plank-heading", "div", "role", "className", "map", "IconButton", "key", "data-id", "iconOnly", "onClick", "Sigil", "related", "triggerLabel", "onAction", "Surface", "SigilButton", "span", "Icon", "TextTooltip", "text", "onlyWhenTruncating", "HeadingLabel", "PlankCompanionControls", "PlankControls", "close", "React", "PlankLoading", "React", "div", "role", "className", "PlankContentError", "error", "t", "useTranslation", "meta", "id", "errorString", "toString", "React", "div", "role", "className", "p", "mx", "descriptionMessage", "PlankError", "part", "node", "timedOut", "setTimedOut", "useState", "useEffect", "setTimeout", "PlankHeading", "pending", "PlankLoading", "UNKNOWN_ID", "Plank", "memo", "id", "companionId", "props", "graph", "useAppGraph", "node", "useNode", "companions", "useCompanions", "currentCompanion", "find", "hasCompanion", "React", "PlankContainer", "solo", "part", "companion", "encapsulate", "settings", "encapsulatedPlanks", "PlankComponent", "companioned", "undefined", "primary", "order", "children", "sizeAttrs", "useMainSize", "div", "role", "data-popover-collision-boundary", "className", "mx", "railGridHorizontal", "mainIntrinsicSize", "layoutMode", "path", "active", "invokePromise", "useOperationInvoker", "state", "deck", "useDeckState", "popoverAnchorId", "scrollIntoView", "findFirstFocusable", "useFocusFinders", "canResize", "attentionAttrs", "useAttentionAttributes", "index", "findIndex", "entryId", "length", "canIncrementStart", "canIncrementEnd", "rootElement", "useRef", "variant", "parseEntryId", "sizeKey", "split", "ATTENDABLE_PATH_SEPARATOR", "size", "plankSizing", "handleSizeChange", "useCallback", "debounce", "nextSize", "DeckOperation", "UpdatePlankSize", "handleKeyDown", "event", "target", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "behavior", "inline", "Common", "LayoutOperation", "ScrollIntoView", "subject", "isSolo", "startsWith", "isAttendable", "data", "useMemo", "attendableId", "companionTo", "properties", "placeholder", "PlankLoading", "Root", "StackItem", "fullscreen", "ref", "data-testid", "tabIndex", "item", "onSizeChange", "classNames", "onKeyDown", "PlankHeading", "deckEnabled", "enableDeck", "primaryId", "Surface", "limit", "fallback", "PlankContentError", "PlankError", "ResizeHandle", "React", "useCallback", "Common", "useOperationInvoker", "IconButton", "useTranslation", "ToggleSidebarButton", "classNames", "variant", "state", "updateState", "useDeckState", "t", "useTranslation", "meta", "id", "handleClick", "useCallback", "s", "sidebarState", "React", "IconButton", "icon", "iconOnly", "size", "label", "onClick", "CloseSidebarButton", "ToggleComplementarySidebarButton", "inR0", "current", "invokeSync", "useOperationInvoker", "companions", "useDeckCompanions", "nextState", "complementarySidebarState", "subject", "complementarySidebarPanel", "getCompanionId", "Common", "LayoutOperation", "UpdateComplementary", "tooltipSide", "undefined", "label", "ns", "meta", "id", "ComplementarySidebar", "current", "t", "useTranslation", "invokeSync", "useOperationInvoker", "state", "deck", "updateState", "useDeckState", "layoutMode", "getMode", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "companions", "useDeckCompanions", "activeCompanion", "find", "companion", "getCompanionId", "activeId", "internalValue", "setInternalValue", "useState", "useEffect", "handleTabClick", "useCallback", "event", "nextValue", "currentTarget", "getAttribute", "s", "complementarySidebarState", "Common", "LayoutOperation", "UpdateComplementary", "subject", "data", "useMemo", "React", "Main", "classNames", "Tabs", "Root", "orientation", "verticalVariant", "value", "div", "role", "className", "mx", "Tablist", "map", "Tab", "key", "asChild", "IconButton", "toLocalizedString", "properties", "icon", "iconOnly", "tooltipSide", "data-value", "variant", "onClick", "Surface", "limit", "ToggleComplementarySidebarButton", "Tabpanel", "inert", "ComplementarySidebarPanel", "Wrapper", "fixed", "Fragment", "ScrollArea", "fallback", "PlankContentError", "placeholder", "PlankLoading", "children", "React", "useMemo", "Surface", "Main", "label", "ns", "meta", "id", "Sidebar", "state", "deck", "useDeckState", "popoverAnchorId", "activeDeck", "current", "breakpoint", "useBreakpoints", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "navigationData", "useMemo", "React", "Main", "NavigationSidebar", "classNames", "Surface", "role", "data", "limit", "Banner", "variant", "classNames", "t", "useTranslation", "meta", "id", "React", "header", "className", "mx", "CloseSidebarButton", "ToggleSidebarButton", "span", "ns", "osTranslations", "div", "role", "Surface", "limit", "React", "Mosaic", "React", "Surface", "useAppGraph", "useNode", "useAttended", "ActiveNode", "id", "useAttended", "graph", "useAppGraph", "activeNode", "useNode", "useNodeActionExpander", "React", "div", "role", "className", "Surface", "data", "subject", "limit", "React", "Fragment", "useCallback", "useEffect", "useMemo", "useRef", "Common", "useAtomCapability", "useOperationInvoker", "usePluginManager", "AttentionCapabilities", "Main", "useMediaQuery", "useOnTransition", "DEFAULT_HORIZONTAL_SIZE", "Stack", "StackContext", "mainPaddingTransitions", "mx", "React", "Surface", "ContentEmpty", "breakpoint", "useBreakpoints", "deck", "useDeckState", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "React", "div", "role", "className", "data-testid", "Surface", "ToggleSidebarButton", "variant", "classNames", "fixedSidebarToggleStyles", "React", "Surface", "useLandmarkMover", "StatusBar", "showHints", "mover", "useLandmarkMover", "undefined", "React", "div", "role", "className", "Surface", "limit", "React", "Topbar", "React", "Banner", "variant", "DeckMain", "invokeSync", "useOperationInvoker", "settings", "useAtomCapability", "DeckCapabilities", "Settings", "state", "deck", "updateState", "useDeckState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "active", "activeCompanions", "fullscreen", "solo", "plankSizing", "layoutMode", "getMode", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "pluginManager", "usePluginManager", "scrollLeftRef", "useRef", "deckRef", "useEffect", "attention", "capabilities", "get", "AttentionCapabilities", "Attention", "attended", "getCurrent", "firstId", "length", "document", "querySelector", "focus", "isNotMobile", "useMediaQuery", "shouldRevert", "current", "Common", "LayoutOperation", "SetLayoutMode", "subject", "mode", "revert", "enableDeck", "handleResize", "useCallback", "window", "addEventListener", "removeEventListener", "restoreScroll", "scrollLeft", "useOnTransition", "handleScroll", "event", "currentTarget", "target", "isEmpty", "padding", "useMemo", "overscroll", "calculateOverscroll", "mainPosition", "order", "itemsCount", "reduce", "acc", "entryId", "handleNavigationSidebarStateChange", "next", "s", "handleComplementarySidebarStateChange", "React", "Main", "Root", "navigationSidebarState", "onNavigationSidebarStateChange", "onComplementarySidebarStateChange", "Sidebar", "ComplementarySidebar", "Overlay", "Content", "bounce", "handlesFocus", "classNames", "ContentEmpty", "style", "encapsulatedPlanks", "DEFAULT_HORIZONTAL_SIZE", "div", "role", "className", "inert", "ToggleSidebarButton", "fixedSidebarToggleStyles", "ToggleComplementarySidebarButton", "fixedComplementarySidebarToggleStyles", "Stack", "ref", "orientation", "size", "mainPaddingTransitions", "onScroll", "map", "Fragment", "key", "PlankSeparator", "encapsulate", "Plank", "id", "companionId", "part", "StackContext", "Provider", "value", "rail", "undefined", "Topbar", "StatusBar", "showHints", "span", "mx", "gridColumn", "React", "useCallback", "Surface", "AlertDialog", "Dialog", "NaturalDialog", "Dialog", "state", "updateEphemeral", "useDeckState", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "dialogContent", "Root", "AlertDialog", "NaturalDialog", "Overlay", "handleOpenChange", "useCallback", "nextOpen", "s", "React", "modal", "open", "onOpenChange", "Surface", "role", "data", "limit", "fallback", "PlankContentError", "placeholder", "div", "blockAlign", "classNames", "style", "createContext", "React", "useCallback", "useEffect", "useRef", "useState", "Surface", "Popover", "toLocalizedString", "useTranslation", "Card", "DEBOUNCE_DELAY", "DeckPopoverProvider", "useDeckPopoverContext", "createContext", "PopoverRoot", "children", "state", "useDeckState", "virtualRef", "useRef", "virtualIter", "setVirtualIter", "useState", "open", "setOpen", "debounceRef", "useEffect", "popoverOpen", "current", "clearTimeout", "popoverAnchor", "iter", "setTimeout", "popoverAnchorId", "popoverContent", "React", "Popover", "Root", "modal", "VirtualTrigger", "key", "PopoverContent", "t", "useTranslation", "meta", "id", "updateEphemeral", "handleClose", "useCallback", "undefined", "popoverSide", "handleInteractOutside", "event", "type", "currentTarget", "classList", "contains", "preventDefault", "Portal", "Content", "side", "sticky", "hideWhenDetached", "onInteractOutside", "onEscapeKeyDown", "Viewport", "popoverKind", "Card", "Toolbar", "span", "popoverTitle", "Title", "toLocalizedString", "Close", "onClick", "Surface", "role", "data", "limit", "Arrow", "React", "Button", "Icon", "Toast", "NaturalToast", "toLocalizedString", "useTranslation", "Toast", "id", "title", "description", "icon", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "onOpenChange", "t", "useTranslation", "meta", "React", "NaturalToast", "Root", "data-testid", "defaultOpen", "Body", "Title", "classNames", "Icon", "span", "toLocalizedString", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "Toaster", "toasts", "onDismissToast", "map", "toast", "key", "open", "DeckLayout", "onDismissToast", "state", "useDeckState", "toasts", "React", "Mosaic", "Root", "PopoverRoot", "ActiveNode", "DeckMain", "PopoverContent", "Dialog", "Toaster", "React", "Input", "Select", "useTranslation", "ControlGroup", "ControlItemInput", "ControlPage", "ControlSection", "isSocket", "globalThis", "__args", "DeckSettings", "settings", "onSettingsChange", "t", "useTranslation", "meta", "id", "React", "ControlPage", "ControlSection", "title", "ns", "ControlGroup", "ControlItemInput", "Input", "Switch", "checked", "enableDeck", "onCheckedChange", "s", "encapsulatedPlanks", "Select", "Root", "disabled", "value", "newPlankPositioning", "onValueChange", "TriggerButton", "placeholder", "Portal", "Content", "Viewport", "NewPlankPositions", "map", "position", "Option", "key", "Arrow", "overscroll", "OverscrollOptions", "option", "enableStatusbar", "showHints", "enableNativeRedirect"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/hooks/useCompanions.ts", "../../../src/hooks/useDeckState.ts", "../../../src/hooks/useBreakpoints.ts", "../../../src/hooks/useDeckCompanions.ts", "../../../src/hooks/useHoistStatusbar.ts", "../../../src/hooks/useMainSize.ts", "../../../src/hooks/useNodeActionExpander.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { useAppGraph } from '@dxos/app-framework/react';\nimport { useConnections } from '@dxos/plugin-graph';\nimport { byPosition } from '@dxos/util';\n\nimport { PLANK_COMPANION_TYPE } from '../types';\n\nexport const useCompanions = (id?: string) => {\n const { graph } = useAppGraph();\n const nodes = useConnections(graph, id);\n const companions = nodes.filter((node) => node.type === PLANK_COMPANION_TYPE);\n return useMemo(() => companions.toSorted((a, b) => byPosition(a.properties, b.properties)), [companions]);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAtomValue } from '@effect-atom/atom-react';\nimport { useCallback, useMemo } from 'react';\n\nimport { Common } from '@dxos/app-framework';\nimport { useCapability } from '@dxos/app-framework/react';\nimport { invariant } from '@dxos/invariant';\n\nimport {\n DeckCapabilities,\n type DeckEphemeralStateProps,\n type DeckPluginState,\n type DeckState,\n type DeckStateProps,\n} from '../types';\n\nexport type DeckStateHook = {\n /** Combined state value (reactive). Includes both persisted and ephemeral state. */\n state: DeckPluginState;\n /** The active deck, computed from decks[activeDeck]. */\n deck: DeckState;\n /** Update persisted state. */\n updateState: (fn: (current: DeckStateProps) => DeckStateProps) => void;\n /** Update ephemeral state. */\n updateEphemeral: (fn: (current: DeckEphemeralStateProps) => DeckEphemeralStateProps) => void;\n};\n\n/**\n * Hook to access the deck plugin state reactively.\n * Returns the combined state, the active deck, and update functions for each atom.\n */\nexport const useDeckState = (): DeckStateHook => {\n const registry = useCapability(Common.Capability.AtomRegistry);\n const stateAtom = useCapability(DeckCapabilities.State);\n const ephemeralAtom = useCapability(DeckCapabilities.EphemeralState);\n\n const persistedState = useAtomValue(stateAtom);\n const ephemeralState = useAtomValue(ephemeralAtom);\n\n // Compute deck from decks[activeDeck] to ensure it's always current.\n const deck = useMemo(() => {\n const d = persistedState.decks[persistedState.activeDeck];\n invariant(d, `Deck not found: ${persistedState.activeDeck}`);\n return d;\n }, [persistedState.decks, persistedState.activeDeck]);\n\n // Combine persisted and ephemeral state into a unified view.\n const state = useMemo(\n (): DeckPluginState => ({\n ...persistedState,\n ...ephemeralState,\n }),\n [persistedState, ephemeralState],\n );\n\n const updateState = useCallback(\n (fn: (current: DeckStateProps) => DeckStateProps) => {\n registry.set(stateAtom, fn(registry.get(stateAtom)));\n },\n [registry, stateAtom],\n );\n\n const updateEphemeral = useCallback(\n (fn: (current: DeckEphemeralStateProps) => DeckEphemeralStateProps) => {\n registry.set(ephemeralAtom, fn(registry.get(ephemeralAtom)));\n },\n [registry, ephemeralAtom],\n );\n\n return useMemo(\n () => ({\n state,\n deck,\n updateState,\n updateEphemeral,\n }),\n [state, deck, updateState, updateEphemeral],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMediaQuery } from '@dxos/react-ui';\n\nexport const useBreakpoints = () => {\n const [isNotMobile] = useMediaQuery('md');\n const [isDesktop] = useMediaQuery('lg');\n return isDesktop ? 'desktop' : isNotMobile ? 'tablet' : 'mobile';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useAppGraph } from '@dxos/app-framework/react';\nimport { Node, type Node as NodeType } from '@dxos/plugin-graph';\nimport { useConnections } from '@dxos/plugin-graph';\nimport { type Label } from '@dxos/ui-types';\nimport { type Position, byPosition } from '@dxos/util';\n\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from '../types';\n\nexport const getCompanionId = (id: string) => {\n const [_, companionId] = id.split(ATTENDABLE_PATH_SEPARATOR);\n return companionId ?? 'never';\n};\n\nexport type DeckCompanion = NodeType.Node<\n any,\n {\n label: Label;\n icon: string;\n // TODO(burdon): Scroll area should be controlled by surface.\n /** If true, the panel will not be wrapped in a scroll area. */\n fixed?: boolean;\n position?: Position;\n }\n>;\n\nexport const useDeckCompanions = (): DeckCompanion[] => {\n const { graph } = useAppGraph();\n const connections = useConnections(graph, Node.RootId);\n const companions = connections.filter((node) => node.type === DECK_COMPANION_TYPE) as DeckCompanion[];\n return companions.toSorted((a, b) => byPosition(a.properties, b.properties));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useMemo } from 'react';\n\nimport { useAtomCapability } from '@dxos/app-framework/react';\nimport { useThemeContext } from '@dxos/react-ui';\n\nimport { DeckCapabilities, type LayoutMode } from '../types';\n\nexport const useHoistStatusbar = (breakpoint: string, layoutMode?: LayoutMode): boolean => {\n const { safeAreaPadding } = useThemeContext();\n const enableStatusbar = useAtomCapability(DeckCapabilities.Settings).enableStatusbar;\n\n return useMemo(() => {\n return (\n breakpoint === 'desktop' &&\n layoutMode !== 'solo--fullscreen' &&\n !!enableStatusbar &&\n safeAreaPadding?.bottom === 0\n );\n }, [enableStatusbar, breakpoint, safeAreaPadding?.bottom, layoutMode]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useMainContext } from '@dxos/react-ui';\n\nexport const useMainSize = () => {\n const { navigationSidebarState, complementarySidebarState } = useMainContext('DeckPluginPlank');\n return {\n 'data-sidebar-inline-start-state': navigationSidebarState,\n 'data-sidebar-inline-end-state': complementarySidebarState,\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect } from 'react';\n\nimport { Graph, type Node } from '@dxos/plugin-graph';\n\nexport const useNodeActionExpander = (node?: Node.Node) => {\n useEffect(() => {\n if (node) {\n const frame = requestAnimationFrame(() => {\n const graph = Graph.getGraph(node);\n void Graph.expand(graph, node.id);\n });\n return () => cancelAnimationFrame(frame);\n }\n }, [node]);\n};\n"],
5
- "mappings": "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",
6
- "names": ["useMemo", "useAppGraph", "useConnections", "byPosition", "useCompanions", "id", "graph", "useAppGraph", "nodes", "useConnections", "companions", "filter", "node", "type", "PLANK_COMPANION_TYPE", "useMemo", "toSorted", "a", "b", "byPosition", "properties", "useAtomValue", "useCallback", "useMemo", "Common", "useCapability", "invariant", "useDeckState", "registry", "useCapability", "Common", "Capability", "AtomRegistry", "stateAtom", "DeckCapabilities", "State", "ephemeralAtom", "EphemeralState", "persistedState", "useAtomValue", "ephemeralState", "deck", "useMemo", "d", "decks", "activeDeck", "invariant", "state", "updateState", "useCallback", "fn", "set", "get", "updateEphemeral", "useMediaQuery", "useBreakpoints", "isNotMobile", "useMediaQuery", "isDesktop", "useAppGraph", "Node", "useConnections", "byPosition", "getCompanionId", "id", "_", "companionId", "split", "ATTENDABLE_PATH_SEPARATOR", "useDeckCompanions", "graph", "useAppGraph", "connections", "useConnections", "Node", "RootId", "companions", "filter", "node", "type", "DECK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "properties", "useMemo", "useAtomCapability", "useThemeContext", "useHoistStatusbar", "breakpoint", "layoutMode", "safeAreaPadding", "useThemeContext", "enableStatusbar", "useAtomCapability", "DeckCapabilities", "Settings", "useMemo", "bottom", "useMainContext", "useMainSize", "navigationSidebarState", "complementarySidebarState", "useMainContext", "useEffect", "Graph", "useNodeActionExpander", "node", "useEffect", "frame", "requestAnimationFrame", "graph", "Graph", "getGraph", "expand", "id", "cancelAnimationFrame"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/operation-resolver/operation-resolver.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { OperationResolver } from '@dxos/operation';\nimport { Operation } from '@dxos/operation';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Graph, Node } from '@dxos/plugin-graph';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/types';\nimport { byPosition, isNonNullable } from '@dxos/util';\n\nimport { closeEntry, createEntryId, incrementPlank, openEntry } from '../../layout';\nimport { meta } from '../../meta';\nimport {\n DeckCapabilities,\n DeckOperation,\n type DeckState,\n type DeckStateProps,\n type LayoutMode,\n PLANK_COMPANION_TYPE,\n defaultDeck,\n getMode,\n isLayoutMode,\n} from '../../types';\nimport { computeActiveUpdates } from '../../util';\n\n/**\n * Helper to update the active deck within the persisted state.\n */\nconst updateActiveDeck = (current: DeckStateProps, deckUpdates: Partial<DeckState>): DeckStateProps => {\n const currentDeck = current.decks[current.activeDeck];\n invariant(currentDeck, `Deck not found: ${current.activeDeck}`);\n return {\n ...current,\n decks: {\n ...current.decks,\n [current.activeDeck]: {\n ...currentDeck,\n ...deckUpdates,\n },\n },\n };\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Common.Capability.OperationResolver, [\n //\n // UpdateSidebar\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdateSidebar,\n handler: Effect.fnUntraced(function* (input) {\n const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n const next = input.state ?? state.sidebarState;\n if (next !== state.sidebarState) {\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({ ...s, sidebarState: next }));\n }\n }),\n }),\n\n //\n // UpdateComplementary\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdateComplementary,\n handler: Effect.fnUntraced(function* (input) {\n const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n const panelChanged = state.complementarySidebarPanel !== input.subject;\n const next = input.subject ? 'expanded' : (input.state ?? state.complementarySidebarState);\n const stateChanged = next !== state.complementarySidebarState;\n\n if (panelChanged || stateChanged) {\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({\n ...s,\n complementarySidebarPanel: panelChanged ? input.subject : s.complementarySidebarPanel,\n complementarySidebarState: stateChanged ? next : s.complementarySidebarState,\n }));\n }\n }),\n }),\n\n //\n // UpdateDialog\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdateDialog,\n handler: Effect.fnUntraced(function* (input) {\n yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({\n ...s,\n dialogOpen: input.state ?? Boolean(input.subject),\n dialogType: input.type ?? 'default',\n dialogBlockAlign: input.blockAlign ?? 'center',\n dialogOverlayClasses: input.overlayClasses,\n dialogOverlayStyle: input.overlayStyle,\n dialogContent: input.subject ? { component: input.subject, props: input.props } : null,\n }));\n }),\n }),\n\n //\n // UpdatePopover\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.UpdatePopover,\n handler: Effect.fnUntraced(function* (input) {\n yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({\n ...s,\n popoverOpen: input.state ?? Boolean(input.subject),\n popoverKind: input.kind ?? 'base',\n popoverTitle: input.kind === 'card' ? input.title : undefined,\n popoverContent:\n typeof input.subject === 'string'\n ? { component: input.subject, props: input.props }\n : input.subject\n ? { subject: input.subject }\n : null,\n popoverSide: input.side,\n popoverAnchor: input.variant === 'virtual' ? input.anchor : s.popoverAnchor,\n popoverAnchorId: input.variant !== 'virtual' ? input.anchorId : s.popoverAnchorId,\n }));\n }),\n }),\n\n //\n // AddToast\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.AddToast,\n handler: Effect.fnUntraced(function* (input) {\n yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({\n ...s,\n toasts: [...s.toasts, input as Common.LayoutOperation.Toast],\n }));\n }),\n }),\n\n //\n // ShowUndo\n //\n OperationResolver.make({\n operation: Common.UndoOperation.ShowUndo,\n handler: Effect.fnUntraced(function* (input) {\n const historyTracker = yield* Capability.get(Common.Capability.HistoryTracker);\n\n const newUndoId = `show-undo-${Date.now()}`;\n // TODO(wittjosiah): Support undoing further back than the last action.\n yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => {\n const filteredToasts = s.currentUndoId\n ? s.toasts.filter((toast) => toast.id !== s.currentUndoId)\n : s.toasts;\n\n const toast: Common.LayoutOperation.Toast = {\n id: newUndoId,\n title: input.message ?? ['undo available label', { ns: meta.id }],\n duration: 10_000,\n actionLabel: ['undo action label', { ns: meta.id }],\n actionAlt: ['undo action alt', { ns: meta.id }],\n closeLabel: ['undo close label', { ns: meta.id }],\n onAction: () => historyTracker.undoPromise(),\n };\n\n return {\n ...s,\n currentUndoId: newUndoId,\n toasts: [...filteredToasts, toast],\n };\n });\n }),\n }),\n\n //\n // SetLayoutMode\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.SetLayoutMode,\n filter: (input) => {\n if ('mode' in input) {\n return isLayoutMode(input.mode);\n }\n return true;\n },\n handler: Effect.fnUntraced(function* (input) {\n const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n const deck = yield* DeckCapabilities.getDeck();\n\n const computeModeUpdate = (mode: LayoutMode, subject?: string): Partial<DeckState> => {\n const current = deck.solo ? [deck.solo] : deck.active;\n // When un-soloing, the solo entry is added to the deck.\n const next = (\n mode !== 'deck' ? [subject ?? deck.solo ?? deck.active[0]] : [...deck.active, deck.solo]\n ).filter(isNonNullable);\n\n const removed = current.filter((id: string) => !next.includes(id));\n const closed = Array.from(\n new Set([...deck.inactive.filter((id: string) => !next.includes(id)), ...removed]),\n );\n\n // Build deckUpdates object without mutating.\n const soloUpdate =\n mode !== 'deck' && next[0]\n ? { solo: next[0] }\n : mode === 'deck' && deck.solo\n ? { solo: undefined, initialized: true }\n : {};\n\n const fullscreenUpdate = mode === 'solo--fullscreen' ? { fullscreen: !deck.fullscreen } : {};\n\n return {\n inactive: closed,\n ...soloUpdate,\n ...fullscreenUpdate,\n };\n };\n\n if ('mode' in input) {\n const currentMode = getMode(deck);\n const deckUpdates = computeModeUpdate(\n input.mode as LayoutMode,\n 'subject' in input ? input.subject : undefined,\n );\n\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {\n const newPreviousMode =\n currentMode !== input.mode ? { ...s.previousMode, [s.activeDeck]: currentMode } : s.previousMode;\n return {\n ...updateActiveDeck(s, deckUpdates),\n previousMode: newPreviousMode,\n };\n });\n } else if ('revert' in input) {\n const last = state.previousMode[state.activeDeck];\n const deckUpdates = computeModeUpdate(last ?? 'solo');\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));\n } else {\n log.warn('Invalid layout mode', input);\n }\n }),\n }),\n\n //\n // SwitchWorkspace\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.SwitchWorkspace,\n handler: Effect.fnUntraced(function* (input) {\n const { graph } = yield* Capability.get(Common.Capability.AppGraph);\n\n {\n const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.\n // Ideally this should be worked into the data model in a generic way.\n const shouldUpdatePrevious = !state.activeDeck.startsWith('!');\n\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {\n const newDecks = s.decks[input.subject] ? s.decks : { ...s.decks, [input.subject]: { ...defaultDeck } };\n return {\n ...s,\n previousDeck: shouldUpdatePrevious ? s.activeDeck : s.previousDeck,\n activeDeck: input.subject,\n decks: newDecks,\n };\n });\n }\n\n {\n const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n const deck = state.decks[input.subject];\n invariant(deck, `Deck not found: ${input.subject}`);\n\n const first = deck.solo ? deck.solo : deck.active[0];\n if (first) {\n yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, { subject: first });\n } else {\n const [item] = Graph.getConnections(graph, input.subject).filter(\n (node) => !Node.isActionLike(node) && !node.properties.disposition,\n );\n if (item) {\n yield* Operation.schedule(Common.LayoutOperation.Open, { subject: [item.id] });\n }\n }\n }\n }),\n }),\n\n //\n // RevertWorkspace\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.RevertWorkspace,\n handler: Effect.fnUntraced(function* () {\n const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, { subject: state.previousDeck });\n }),\n }),\n\n //\n // Open\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.Open,\n handler: Effect.fnUntraced(function* (input) {\n const { graph } = yield* Capability.get(Common.Capability.AppGraph);\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const settings = yield* Common.Capability.getAtomValue(DeckCapabilities.Settings);\n\n {\n const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n if (input.workspace && state.activeDeck !== input.workspace) {\n yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, { subject: input.workspace });\n }\n }\n\n let previouslyOpenIds: Set<string>;\n {\n const deck = yield* DeckCapabilities.getDeck();\n previouslyOpenIds = new Set<string>(deck.solo ? [deck.solo] : deck.active);\n const next = deck.solo\n ? input.subject.map((id) => createEntryId(id, input.variant))\n : input.subject.reduce(\n (acc, entryId) =>\n openEntry(acc, entryId, {\n key: input.key,\n positioning: input.positioning ?? settings?.newPlankPositioning,\n pivotId: input.pivotId,\n variant: input.variant,\n }),\n deck.active,\n );\n\n const { deckUpdates, toAttend: _toAttend } = computeActiveUpdates({ next, deck, attention });\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));\n }\n\n {\n const deck = yield* DeckCapabilities.getDeck();\n const ids = deck.solo ? [deck.solo] : deck.active;\n const newlyOpen = ids.filter((i: string) => !previouslyOpenIds.has(i));\n\n if (input.scrollIntoView !== false && (newlyOpen[0] ?? input.subject[0])) {\n yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {\n subject: newlyOpen[0] ?? input.subject[0],\n });\n }\n\n if (newlyOpen[0] ?? input.subject[0]) {\n yield* Operation.schedule(Common.LayoutOperation.Expose, { subject: newlyOpen[0] ?? input.subject[0] });\n }\n\n // Send analytics events for newly opened items.\n for (const subjectId of newlyOpen) {\n const typename = Option.match(Graph.getNode(graph, subjectId), {\n onNone: () => undefined,\n onSome: (node) => {\n const active = node.data;\n return Obj.isObject(active) ? Obj.getTypename(active) : undefined;\n },\n });\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'navigation.activate',\n properties: { subjectId, typename },\n });\n }\n }\n }),\n }),\n\n //\n // UpdatePlankSize\n //\n OperationResolver.make({\n operation: DeckOperation.UpdatePlankSize,\n handler: Effect.fnUntraced(function* (input) {\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) =>\n updateActiveDeck(s, {\n plankSizing: {\n ...s.decks[s.activeDeck]?.plankSizing,\n [input.id]: input.size,\n },\n }),\n );\n }),\n }),\n\n //\n // Adjust\n //\n OperationResolver.make({\n operation: DeckOperation.Adjust,\n handler: Effect.fnUntraced(function* (input) {\n const _state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const { graph } = yield* Capability.get(Common.Capability.AppGraph);\n\n // Collect layout operations to run after state updates.\n let soloOperation:\n | { type: 'solo'; entryId: string; mode: string }\n | { type: 'unsolo'; entryId: string }\n | undefined;\n\n if (input.type === 'increment-end' || input.type === 'increment-start') {\n const next = incrementPlank(deck.active, input);\n const { deckUpdates } = computeActiveUpdates({ next, deck, attention });\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));\n }\n\n if (input.type.startsWith('solo')) {\n const entryId = input.id;\n if (!deck.solo) {\n // Solo the entry.\n soloOperation = { type: 'solo', entryId, mode: input.type };\n } else {\n if (input.type === 'solo--fullscreen') {\n // Toggle fullscreen on the current entry.\n soloOperation = { type: 'solo', entryId, mode: 'solo--fullscreen' };\n } else if (input.type === 'solo') {\n // Un-solo the current entry and open it.\n soloOperation = { type: 'unsolo', entryId };\n }\n }\n }\n\n // Run collected solo operations.\n if (soloOperation?.type === 'solo') {\n yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, {\n subject: soloOperation.entryId,\n mode: soloOperation.mode,\n });\n } else if (soloOperation?.type === 'unsolo') {\n yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, { mode: 'deck' });\n yield* Operation.invoke(Common.LayoutOperation.Open, { subject: [soloOperation.entryId] });\n }\n\n if (input.type === 'companion') {\n const companion = Function.pipe(\n Graph.getNode(graph, input.id),\n Option.map((node) =>\n Graph.getConnections(graph, node.id)\n .filter((n) => n.type === PLANK_COMPANION_TYPE)\n .toSorted((a, b) => byPosition(a.properties, b.properties)),\n ),\n Option.flatMap((companions) => (companions.length > 0 ? Option.some(companions[0]) : Option.none())),\n );\n\n if (Option.isSome(companion)) {\n // TODO(wittjosiah): This should remember the previously selected companion.\n yield* Operation.invoke(DeckOperation.ChangeCompanion, {\n primary: input.id,\n companion: companion.value.id,\n });\n }\n }\n }),\n }),\n\n //\n // ChangeCompanion\n //\n OperationResolver.make({\n operation: DeckOperation.ChangeCompanion,\n handler: Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n if (input.companion === null) {\n const { [input.primary]: _, ...nextActiveCompanions } = deck.activeCompanions ?? {};\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) =>\n updateActiveDeck(s, { activeCompanions: nextActiveCompanions }),\n );\n } else {\n const companion = input.companion;\n invariant(companion !== input.primary);\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) =>\n updateActiveDeck(s, {\n activeCompanions: {\n ...deck.activeCompanions,\n [input.primary]: companion,\n },\n }),\n );\n }\n }),\n }),\n\n //\n // Close\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.Close,\n handler: Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n\n const active = deck.solo ? [deck.solo] : deck.active;\n const next = input.subject.reduce((acc, id) => closeEntry(acc, id), active);\n const { deckUpdates, toAttend } = computeActiveUpdates({ next, deck, attention });\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));\n\n // Clear companions for closed entries.\n for (const id of input.subject) {\n if (deck.activeCompanions && id in deck.activeCompanions) {\n yield* Operation.invoke(DeckOperation.ChangeCompanion, { primary: id, companion: null });\n }\n }\n\n if (toAttend) {\n yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, { subject: toAttend });\n }\n }),\n }),\n\n //\n // Set\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.Set,\n handler: Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n\n const { deckUpdates, toAttend } = computeActiveUpdates({\n next: input.subject as string[],\n deck,\n attention,\n });\n yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));\n\n if (toAttend) {\n yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, { subject: toAttend });\n }\n }),\n }),\n\n //\n // ScrollIntoView\n //\n OperationResolver.make({\n operation: Common.LayoutOperation.ScrollIntoView,\n handler: Effect.fnUntraced(function* (input) {\n yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({\n ...s,\n scrollIntoView: input.subject,\n }));\n }),\n }),\n ]);\n }),\n);\n"],
5
- "mappings": "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",
6
- "names": ["Effect", "Function", "Option", "Capability", "Common", "Obj", "invariant", "log", "OperationResolver", "Operation", "AttentionCapabilities", "Graph", "Node", "ObservabilityOperation", "byPosition", "isNonNullable", "updateActiveDeck", "current", "deckUpdates", "currentDeck", "decks", "activeDeck", "invariant", "Capability", "makeModule", "fnUntraced", "contributes", "Common", "OperationResolver", "make", "operation", "LayoutOperation", "UpdateSidebar", "handler", "input", "state", "getAtomValue", "DeckCapabilities", "State", "next", "sidebarState", "updateAtomValue", "s", "UpdateComplementary", "panelChanged", "complementarySidebarPanel", "subject", "complementarySidebarState", "stateChanged", "UpdateDialog", "EphemeralState", "dialogOpen", "Boolean", "dialogType", "type", "dialogBlockAlign", "blockAlign", "dialogOverlayClasses", "overlayClasses", "dialogOverlayStyle", "overlayStyle", "dialogContent", "component", "props", "UpdatePopover", "popoverOpen", "popoverKind", "kind", "popoverTitle", "title", "undefined", "popoverContent", "popoverSide", "side", "popoverAnchor", "variant", "anchor", "popoverAnchorId", "anchorId", "AddToast", "toasts", "UndoOperation", "ShowUndo", "historyTracker", "get", "HistoryTracker", "newUndoId", "Date", "now", "filteredToasts", "currentUndoId", "filter", "toast", "id", "message", "ns", "meta", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "undoPromise", "SetLayoutMode", "isLayoutMode", "mode", "deck", "getDeck", "computeModeUpdate", "solo", "active", "isNonNullable", "removed", "includes", "closed", "Array", "from", "Set", "inactive", "soloUpdate", "initialized", "fullscreenUpdate", "fullscreen", "currentMode", "getMode", "newPreviousMode", "previousMode", "last", "log", "warn", "SwitchWorkspace", "graph", "AppGraph", "shouldUpdatePrevious", "startsWith", "newDecks", "defaultDeck", "previousDeck", "first", "Operation", "schedule", "ScrollIntoView", "item", "Graph", "getConnections", "node", "Node", "isActionLike", "properties", "disposition", "Open", "RevertWorkspace", "invoke", "attention", "AttentionCapabilities", "Attention", "settings", "Settings", "workspace", "previouslyOpenIds", "map", "createEntryId", "reduce", "acc", "entryId", "openEntry", "key", "positioning", "newPlankPositioning", "pivotId", "toAttend", "_toAttend", "computeActiveUpdates", "ids", "newlyOpen", "i", "has", "scrollIntoView", "Expose", "subjectId", "typename", "match", "getNode", "onNone", "onSome", "data", "Obj", "isObject", "getTypename", "ObservabilityOperation", "SendEvent", "name", "DeckOperation", "UpdatePlankSize", "plankSizing", "size", "Adjust", "_state", "soloOperation", "incrementPlank", "companion", "pipe", "n", "PLANK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "flatMap", "companions", "length", "some", "none", "isSome", "ChangeCompanion", "primary", "value", "_", "nextActiveCompanions", "activeCompanions", "Close", "closeEntry"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-root/react-root.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React, { useCallback } from 'react';\n\nimport { Capability, Common } from '@dxos/app-framework';\n\nimport { DeckLayout } from '../../components';\nimport { useDeckState } from '../../hooks';\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.ReactRoot, {\n id: meta.id,\n root: () => {\n const { state, updateEphemeral } = useDeckState();\n\n const handleDismissToast = useCallback(\n (id: string) => {\n const index = state.toasts.findIndex((toast) => toast.id === id);\n if (index !== -1) {\n // Allow time for the toast to animate out.\n // TODO(burdon): Factor out and unregister timeout.\n setTimeout(() => {\n updateEphemeral((s) => {\n const toastToRemove = s.toasts[index];\n const newCurrentUndoId = toastToRemove?.id === s.currentUndoId ? undefined : s.currentUndoId;\n return {\n ...s,\n currentUndoId: newCurrentUndoId,\n toasts: s.toasts.filter((_, i) => i !== index),\n };\n });\n }, 1_000);\n }\n },\n [state.toasts, updateEphemeral],\n );\n\n return <DeckLayout onDismissToast={handleDismissToast} />;\n },\n }),\n ),\n);\n"],
5
- "mappings": ";;;;;;;;;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,SAASC,mBAAmB;AAEnC,SAASC,YAAYC,cAAc;AAMnC,IAAA,qBAAeC,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,OAAOJ,WAAWK,WAAW;EAClDC,IAAIC,KAAKD;EACTE,MAAM,MAAA;AACJ,UAAM,EAAEC,OAAOC,gBAAe,IAAKC,aAAAA;AAEnC,UAAMC,qBAAqBC,YACzB,CAACP,OAAAA;AACC,YAAMQ,QAAQL,MAAMM,OAAOC,UAAU,CAACC,UAAUA,MAAMX,OAAOA,EAAAA;AAC7D,UAAIQ,UAAU,IAAI;AAGhBI,mBAAW,MAAA;AACTR,0BAAgB,CAACS,MAAAA;AACf,kBAAMC,gBAAgBD,EAAEJ,OAAOD,KAAAA;AAC/B,kBAAMO,mBAAmBD,eAAed,OAAOa,EAAEG,gBAAgBC,SAAYJ,EAAEG;AAC/E,mBAAO;cACL,GAAGH;cACHG,eAAeD;cACfN,QAAQI,EAAEJ,OAAOS,OAAO,CAACC,GAAGC,MAAMA,MAAMZ,KAAAA;YAC1C;UACF,CAAA;QACF,GAAG,GAAA;MACL;IACF,GACA;MAACL,MAAMM;MAAQL;KAAgB;AAGjC,WAAO,sBAAA,cAACiB,YAAAA;MAAWC,gBAAgBhB;;EACrC;AACF,CAAA,CAAA,CAAA;",
6
- "names": ["Effect", "React", "useCallback", "Capability", "Common", "Capability", "makeModule", "succeed", "contributes", "Common", "ReactRoot", "id", "meta", "root", "state", "updateEphemeral", "useDeckState", "handleDismissToast", "useCallback", "index", "toasts", "findIndex", "toast", "setTimeout", "s", "toastToRemove", "newCurrentUndoId", "currentUndoId", "undefined", "filter", "_", "i", "DeckLayout", "onDismissToast"]
7
- }
@@ -1,42 +0,0 @@
1
- import {
2
- Banner,
3
- DeckSettings
4
- } from "./chunk-S4A5UO4K.mjs";
5
- import "./chunk-UNG4CLLP.mjs";
6
- import "./chunk-NHABISX2.mjs";
7
- import {
8
- meta
9
- } from "./chunk-ATFPDN6J.mjs";
10
-
11
- // src/capabilities/react-surface/react-surface.tsx
12
- import * as Effect from "effect/Effect";
13
- import React from "react";
14
- import { Capability, Common } from "@dxos/app-framework";
15
- import { useSettingsState } from "@dxos/app-framework/react";
16
- var react_surface_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Common.Capability.ReactSurface, [
17
- Common.createSurface({
18
- id: `${meta.id}/plugin-settings`,
19
- role: "article",
20
- filter: (data) => Common.Capability.isSettings(data.subject) && data.subject.prefix === meta.id,
21
- component: ({ data: { subject } }) => {
22
- const { settings, updateSettings } = useSettingsState(subject.atom);
23
- return /* @__PURE__ */ React.createElement(DeckSettings, {
24
- settings,
25
- onSettingsChange: updateSettings
26
- });
27
- }
28
- }),
29
- Common.createSurface({
30
- id: `${meta.id}/banner`,
31
- role: "banner",
32
- component: ({ data }) => {
33
- return /* @__PURE__ */ React.createElement(Banner, {
34
- variant: data.variant
35
- });
36
- }
37
- })
38
- ])));
39
- export {
40
- react_surface_default as default
41
- };
42
- //# sourceMappingURL=react-surface-HODERLOL.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface/react-surface.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React from 'react';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { useSettingsState } from '@dxos/app-framework/react';\n\nimport { Banner, DeckSettings } from '../../components';\nimport { meta } from '../../meta';\nimport { type DeckSettingsProps } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Common.Capability.ReactSurface, [\n Common.createSurface({\n id: `${meta.id}/plugin-settings`,\n role: 'article',\n filter: (data): data is { subject: Common.Capability.Settings } =>\n Common.Capability.isSettings(data.subject) && data.subject.prefix === meta.id,\n component: ({ data: { subject } }) => {\n const { settings, updateSettings } = useSettingsState<DeckSettingsProps>(subject.atom);\n return <DeckSettings settings={settings} onSettingsChange={updateSettings} />;\n },\n }),\n Common.createSurface({\n id: `${meta.id}/banner`,\n role: 'banner',\n component: ({ data }: { data: { variant?: 'topbar' | 'sidebar' } }) => {\n return <Banner variant={data.variant} />;\n },\n }),\n ]),\n ),\n);\n"],
5
- "mappings": ";;;;;;;;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,WAAW;AAElB,SAASC,YAAYC,cAAc;AACnC,SAASC,wBAAwB;AAMjC,IAAA,wBAAeC,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,OAAOJ,WAAWK,cAAc;EACrDD,OAAOE,cAAc;IACnBC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNC,QAAQ,CAACC,SACPP,OAAOJ,WAAWY,WAAWD,KAAKE,OAAO,KAAKF,KAAKE,QAAQC,WAAWN,KAAKD;IAC7EQ,WAAW,CAAC,EAAEJ,MAAM,EAAEE,QAAO,EAAE,MAAE;AAC/B,YAAM,EAAEG,UAAUC,eAAc,IAAKC,iBAAoCL,QAAQM,IAAI;AACrF,aAAO,sBAAA,cAACC,cAAAA;QAAaJ;QAAoBK,kBAAkBJ;;IAC7D;EACF,CAAA;EACAb,OAAOE,cAAc;IACnBC,IAAI,GAAGC,KAAKD,EAAE;IACdE,MAAM;IACNM,WAAW,CAAC,EAAEJ,KAAI,MAAgD;AAChE,aAAO,sBAAA,cAACW,QAAAA;QAAOC,SAASZ,KAAKY;;IAC/B;EACF,CAAA;CACD,CAAA,CAAA;",
6
- "names": ["Effect", "React", "Capability", "Common", "useSettingsState", "Capability", "makeModule", "succeed", "contributes", "Common", "ReactSurface", "createSurface", "id", "meta", "role", "filter", "data", "isSettings", "subject", "prefix", "component", "settings", "updateSettings", "useSettingsState", "atom", "DeckSettings", "onSettingsChange", "Banner", "variant"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/settings/settings.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { createKvsStore } from '@dxos/effect';\n\nimport { meta } from '../../meta';\nimport { DeckCapabilities, DeckSettingsSchema } from '../../types';\n\nexport default Capability.makeModule(() =>\n Effect.sync(() => {\n const settingsAtom = createKvsStore({\n key: meta.id,\n schema: DeckSettingsSchema,\n defaultValue: () => ({\n showHints: false,\n enableDeck: false,\n enableStatusbar: false,\n enableNativeRedirect: false,\n newPlankPositioning: 'start' as const,\n overscroll: 'none' as const,\n encapsulatedPlanks: false,\n }),\n });\n\n return [\n Capability.contributes(DeckCapabilities.Settings, settingsAtom),\n Capability.contributes(Common.Capability.Settings, {\n prefix: meta.id,\n schema: DeckSettingsSchema,\n atom: settingsAtom,\n }),\n ];\n }),\n);\n"],
5
- "mappings": ";;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,sBAAsB;AAK/B,IAAA,mBAAeC,WAAWC,WAAW,MAC5BC,YAAK,MAAA;AACV,QAAMC,eAAeC,eAAe;IAClCC,KAAKC,KAAKC;IACVC,QAAQC;IACRC,cAAc,OAAO;MACnBC,WAAW;MACXC,YAAY;MACZC,iBAAiB;MACjBC,sBAAsB;MACtBC,qBAAqB;MACrBC,YAAY;MACZC,oBAAoB;IACtB;EACF,CAAA;AAEA,SAAO;IACLjB,WAAWkB,YAAYC,iBAAiBC,UAAUjB,YAAAA;IAClDH,WAAWkB,YAAYG,OAAOrB,WAAWoB,UAAU;MACjDE,QAAQhB,KAAKC;MACbC,QAAQC;MACRc,MAAMpB;IACR,CAAA;;AAEJ,CAAA,CAAA;",
6
- "names": ["Effect", "Capability", "Common", "createKvsStore", "Capability", "makeModule", "sync", "settingsAtom", "createKvsStore", "key", "meta", "id", "schema", "DeckSettingsSchema", "defaultValue", "showHints", "enableDeck", "enableStatusbar", "enableNativeRedirect", "newPlankPositioning", "overscroll", "encapsulatedPlanks", "contributes", "DeckCapabilities", "Settings", "Common", "prefix", "atom"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/state/state.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\n\nimport { Capability, Common } from '@dxos/app-framework';\nimport { createKvsStore } from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\n\nimport { meta } from '../../meta';\nimport {\n DeckCapabilities,\n type DeckEphemeralStateProps,\n type DeckStateProps,\n DeckStateSchema,\n defaultDeck,\n getMode,\n} from '../../types';\n\n/** Default persisted state. */\nconst defaultDeckState: DeckStateProps = {\n sidebarState: 'expanded',\n complementarySidebarState: 'collapsed',\n complementarySidebarPanel: undefined,\n activeDeck: 'default',\n previousDeck: 'default',\n decks: {\n default: { ...defaultDeck },\n },\n previousMode: {},\n};\n\n/** Default ephemeral state. */\nconst defaultDeckEphemeralState: DeckEphemeralStateProps = {\n dialogContent: null,\n dialogOpen: false,\n dialogBlockAlign: undefined,\n dialogType: undefined,\n popoverContent: null,\n popoverAnchor: undefined,\n popoverAnchorId: undefined,\n popoverOpen: false,\n toasts: [],\n currentUndoId: undefined,\n scrollIntoView: undefined,\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const registry = yield* Capability.get(Common.Capability.AtomRegistry);\n\n // Persisted state using KVS store.\n const stateAtom = createKvsStore({\n key: `${meta.id}/state`,\n schema: DeckStateSchema,\n defaultValue: () => ({ ...defaultDeckState }),\n });\n\n // Ephemeral state (not persisted, but kept alive to prevent GC resets).\n const ephemeralAtom = Atom.make<DeckEphemeralStateProps>({ ...defaultDeckEphemeralState }).pipe(Atom.keepAlive);\n\n // Don't allow fullscreen mode to be persisted to prevent getting stuck in it.\n const currentState = registry.get(stateAtom);\n const currentDeck = currentState.decks[currentState.activeDeck];\n if (currentDeck?.fullscreen) {\n registry.set(stateAtom, {\n ...currentState,\n decks: {\n ...currentState.decks,\n [currentState.activeDeck]: {\n ...currentDeck,\n fullscreen: false,\n },\n },\n });\n }\n\n // Create derived layout atom (read-only) from both state atoms.\n const layoutAtom = Atom.make((get) => {\n const state = get(stateAtom);\n const ephemeral = get(ephemeralAtom);\n const deck = state.decks[state.activeDeck];\n invariant(deck, `Deck not found: ${state.activeDeck}`);\n return {\n mode: getMode(deck),\n dialogOpen: ephemeral.dialogOpen,\n sidebarOpen: state.sidebarState === 'expanded',\n complementarySidebarOpen: state.complementarySidebarState === 'expanded',\n workspace: state.activeDeck,\n active: deck.solo ? [deck.solo] : deck.active,\n inactive: deck.inactive,\n scrollIntoView: ephemeral.scrollIntoView,\n } satisfies Common.Capability.Layout;\n }).pipe(Atom.keepAlive);\n\n return [\n Capability.contributes(DeckCapabilities.State, stateAtom),\n Capability.contributes(DeckCapabilities.EphemeralState, ephemeralAtom),\n Capability.contributes(Common.Capability.Layout, layoutAtom),\n ];\n }),\n);\n"],
5
- "mappings": ";;;;;;;;;AAIA,SAASA,YAAY;AACrB,YAAYC,YAAY;AAExB,SAASC,YAAYC,cAAc;AACnC,SAASC,sBAAsB;AAC/B,SAASC,iBAAiB;;AAa1B,IAAMC,mBAAmC;EACvCC,cAAc;EACdC,2BAA2B;EAC3BC,2BAA2BC;EAC3BC,YAAY;EACZC,cAAc;EACdC,OAAO;IACLC,SAAS;MAAE,GAAGC;IAAY;EAC5B;EACAC,cAAc,CAAC;AACjB;AAGA,IAAMC,4BAAqD;EACzDC,eAAe;EACfC,YAAY;EACZC,kBAAkBV;EAClBW,YAAYX;EACZY,gBAAgB;EAChBC,eAAeb;EACfc,iBAAiBd;EACjBe,aAAa;EACbC,QAAQ,CAAA;EACRC,eAAejB;EACfkB,gBAAgBlB;AAClB;AAEA,IAAA,gBAAemB,WAAWC,WACjBC,kBAAW,aAAA;AAChB,QAAMC,WAAW,OAAOH,WAAWI,IAAIC,OAAOL,WAAWM,YAAY;AAGrE,QAAMC,YAAYC,eAAe;IAC/BC,KAAK,GAAGC,KAAKC,EAAE;IACfC,QAAQC;IACRC,cAAc,OAAO;MAAE,GAAGrC;IAAiB;EAC7C,CAAA;AAGA,QAAMsC,gBAAgBC,KAAKC,KAA8B;IAAE,GAAG7B;EAA0B,CAAA,EAAG8B,KAAKF,KAAKG,SAAS;AAG9G,QAAMC,eAAejB,SAASC,IAAIG,SAAAA;AAClC,QAAMc,cAAcD,aAAapC,MAAMoC,aAAatC,UAAU;AAC9D,MAAIuC,aAAaC,YAAY;AAC3BnB,aAASoB,IAAIhB,WAAW;MACtB,GAAGa;MACHpC,OAAO;QACL,GAAGoC,aAAapC;QAChB,CAACoC,aAAatC,UAAU,GAAG;UACzB,GAAGuC;UACHC,YAAY;QACd;MACF;IACF,CAAA;EACF;AAGA,QAAME,aAAaR,KAAKC,KAAK,CAACb,QAAAA;AAC5B,UAAMqB,QAAQrB,IAAIG,SAAAA;AAClB,UAAMmB,YAAYtB,IAAIW,aAAAA;AACtB,UAAMY,OAAOF,MAAMzC,MAAMyC,MAAM3C,UAAU;AACzC8C,cAAUD,MAAM,mBAAmBF,MAAM3C,UAAU,IAAE;;;;;;;;;AACrD,WAAO;MACL+C,MAAMC,QAAQH,IAAAA;MACdrC,YAAYoC,UAAUpC;MACtByC,aAAaN,MAAM/C,iBAAiB;MACpCsD,0BAA0BP,MAAM9C,8BAA8B;MAC9DsD,WAAWR,MAAM3C;MACjBoD,QAAQP,KAAKQ,OAAO;QAACR,KAAKQ;UAAQR,KAAKO;MACvCE,UAAUT,KAAKS;MACfrC,gBAAgB2B,UAAU3B;IAC5B;EACF,CAAA,EAAGmB,KAAKF,KAAKG,SAAS;AAEtB,SAAO;IACLnB,WAAWqC,YAAYC,iBAAiBC,OAAOhC,SAAAA;IAC/CP,WAAWqC,YAAYC,iBAAiBE,gBAAgBzB,aAAAA;IACxDf,WAAWqC,YAAYhC,OAAOL,WAAWyC,QAAQjB,UAAAA;;AAErD,CAAA,CAAA;",
6
- "names": ["Atom", "Effect", "Capability", "Common", "createKvsStore", "invariant", "defaultDeckState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "undefined", "activeDeck", "previousDeck", "decks", "default", "defaultDeck", "previousMode", "defaultDeckEphemeralState", "dialogContent", "dialogOpen", "dialogBlockAlign", "dialogType", "popoverContent", "popoverAnchor", "popoverAnchorId", "popoverOpen", "toasts", "currentUndoId", "scrollIntoView", "Capability", "makeModule", "fnUntraced", "registry", "get", "Common", "AtomRegistry", "stateAtom", "createKvsStore", "key", "meta", "id", "schema", "DeckStateSchema", "defaultValue", "ephemeralAtom", "Atom", "make", "pipe", "keepAlive", "currentState", "currentDeck", "fullscreen", "set", "layoutAtom", "state", "ephemeral", "deck", "invariant", "mode", "getMode", "sidebarOpen", "complementarySidebarOpen", "workspace", "active", "solo", "inactive", "contributes", "DeckCapabilities", "State", "EphemeralState", "Layout"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/toolkit/toolkit.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Tool from '@effect/ai/Tool';\nimport * as Toolkit from '@effect/ai/Toolkit';\nimport * as Effect from 'effect/Effect';\nimport * as Schema from 'effect/Schema';\n\nimport { Capability, type CapabilityManager, Common } from '@dxos/app-framework';\nimport { GenericToolkit } from '@dxos/assistant';\nimport { ArtifactId } from '@dxos/assistant';\nimport { type SpaceId } from '@dxos/keys';\nimport { trim } from '@dxos/util';\n\nimport { DeckCapabilities } from '../../types';\n\nconst Toolkit$ = Toolkit.make(\n Tool.make('open-item', {\n description: trim`\n Opens an item in the application.\n `,\n parameters: {\n id: ArtifactId,\n },\n success: Schema.Any,\n failure: Schema.Never,\n }),\n);\n\nexport namespace DeckToolkit {\n export const Toolkit = Toolkit$;\n\n export const createLayer = (capabilityManager: CapabilityManager.CapabilityManager) =>\n Toolkit$.toLayer({\n 'open-item': ({ id }) =>\n Effect.gen(function* () {\n const registry = capabilityManager.get(Common.Capability.AtomRegistry);\n const stateAtom = capabilityManager.get(DeckCapabilities.State);\n const state = registry.get(stateAtom);\n const dxn = ArtifactId.toDXN(id, state.activeDeck as SpaceId).asEchoDXN();\n if (!dxn) {\n // TODO(wittjosiah): Support other variants.\n throw new Error(`Invalid object ID: ${id}`);\n }\n\n // TODO(wittjosiah): Get capabilities via layers.\n const { invoke } = capabilityManager.get(Common.Capability.OperationInvoker);\n yield* invoke(Common.LayoutOperation.Open, { subject: [`${dxn.spaceId!}:${dxn.echoId}`] });\n }).pipe(Effect.orDie),\n });\n}\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilityManager = yield* Capability.Service;\n\n return Capability.contributes(\n Common.Capability.Toolkit,\n GenericToolkit.make(DeckToolkit.Toolkit, DeckToolkit.createLayer(capabilityManager)),\n );\n }),\n);\n"],
5
- "mappings": ";;;;;AAIA,YAAYA,UAAU;AACtB,YAAYC,aAAa;AACzB,YAAYC,YAAY;AACxB,YAAYC,YAAY;AAExB,SAASC,YAAoCC,cAAc;AAC3D,SAASC,sBAAsB;AAC/B,SAASC,kBAAkB;AAE3B,SAASC,YAAY;AAIrB,IAAMC,WAAmBC,aAClBA,UAAK,aAAa;EACrBC,aAAaC;;;EAGbC,YAAY;IACVC,IAAIC;EACN;EACAC,SAAgBC;EAChBC,SAAgBC;AAClB,CAAA,CAAA;UAGeC,cAAAA;eACFC,UAAUZ;eAEVa,cAAc,CAACC,sBAC1Bd,SAASe,QAAQ;IACf,aAAa,CAAC,EAAEV,GAAE,MACTW,WAAI,aAAA;AACT,YAAMC,WAAWH,kBAAkBI,IAAIC,OAAOC,WAAWC,YAAY;AACrE,YAAMC,YAAYR,kBAAkBI,IAAIK,iBAAiBC,KAAK;AAC9D,YAAMC,QAAQR,SAASC,IAAII,SAAAA;AAC3B,YAAMI,MAAMpB,WAAWqB,MAAMtB,IAAIoB,MAAMG,UAAU,EAAaC,UAAS;AACvE,UAAI,CAACH,KAAK;AAER,cAAM,IAAII,MAAM,sBAAsBzB,EAAAA,EAAI;MAC5C;AAGA,YAAM,EAAE0B,OAAM,IAAKjB,kBAAkBI,IAAIC,OAAOC,WAAWY,gBAAgB;AAC3E,aAAOD,OAAOZ,OAAOc,gBAAgBC,MAAM;QAAEC,SAAS;UAAC,GAAGT,IAAIU,OAAO,IAAKV,IAAIW,MAAM;;MAAI,CAAA;IAC1F,CAAA,EAAGC,KAAYC,YAAK;EACxB,CAAA;AACJ,GArBiB5B,gBAAAA,cAAAA,CAAAA,EAAAA;AAuBjB,IAAA,kBAAeS,WAAWoB,WACjBC,kBAAW,aAAA;AAChB,QAAM3B,oBAAoB,OAAOM,WAAWsB;AAE5C,SAAOtB,WAAWuB,YAChBxB,OAAOC,WAAWR,SAClBgC,eAAe3C,KAAKU,YAAYC,SAASD,YAAYE,YAAYC,iBAAAA,CAAAA,CAAAA;AAErE,CAAA,CAAA;;",
6
- "names": ["Tool", "Toolkit", "Effect", "Schema", "Capability", "Common", "GenericToolkit", "ArtifactId", "trim", "Toolkit$", "make", "description", "trim", "parameters", "id", "ArtifactId", "success", "Any", "failure", "Never", "DeckToolkit", "Toolkit", "createLayer", "capabilityManager", "toLayer", "gen", "registry", "get", "Common", "Capability", "AtomRegistry", "stateAtom", "DeckCapabilities", "State", "state", "dxn", "toDXN", "activeDeck", "asEchoDXN", "Error", "invoke", "OperationInvoker", "LayoutOperation", "Open", "subject", "spaceId", "echoId", "pipe", "orDie", "makeModule", "fnUntraced", "Service", "contributes", "GenericToolkit"]
7
- }