@dxos/plugin-deck 0.8.4-main.4a85c3132b → 0.8.4-main.4f23b4e393
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/neutral/DeckLayout-6SICSSUF.mjs +278 -0
- package/dist/lib/neutral/DeckLayout-6SICSSUF.mjs.map +7 -0
- package/dist/lib/neutral/DeckPlugin.mjs +70 -0
- package/dist/lib/neutral/DeckPlugin.mjs.map +7 -0
- package/dist/lib/neutral/DeckPlugin.node.mjs +18 -0
- package/dist/lib/neutral/DeckPlugin.node.mjs.map +7 -0
- package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs +27 -0
- package/dist/lib/neutral/DeckSettings-W5I57OXM.mjs.map +7 -0
- package/dist/lib/neutral/add-toast-2OMTFZ2L.mjs +24 -0
- package/dist/lib/neutral/add-toast-2OMTFZ2L.mjs.map +7 -0
- package/dist/lib/neutral/adjust-RXTF3IT3.mjs +93 -0
- package/dist/lib/neutral/adjust-RXTF3IT3.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-GZYYAN5B.mjs +129 -0
- package/dist/lib/neutral/app-graph-builder-GZYYAN5B.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +23 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/check-app-scheme-A7FZVNZO.mjs +10 -0
- package/dist/lib/neutral/chunk-4MYX2NT3.mjs +1335 -0
- package/dist/lib/neutral/chunk-4MYX2NT3.mjs.map +7 -0
- package/dist/lib/neutral/chunk-64ODQD6S.mjs +282 -0
- package/dist/lib/neutral/chunk-64ODQD6S.mjs.map +7 -0
- package/dist/lib/neutral/chunk-6MOYMDKQ.mjs +8 -0
- package/dist/lib/neutral/chunk-6MOYMDKQ.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GBIGQKYW.mjs +112 -0
- package/dist/lib/neutral/chunk-GBIGQKYW.mjs.map +7 -0
- package/dist/lib/neutral/chunk-GLB73Q6U.mjs +22 -0
- package/dist/lib/neutral/chunk-GLB73Q6U.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/{browser/chunk-FBL4WVYZ.mjs → neutral/chunk-JMYWDX4I.mjs} +6 -3
- package/dist/lib/{browser/chunk-FBL4WVYZ.mjs.map → neutral/chunk-JMYWDX4I.mjs.map} +3 -3
- package/dist/lib/neutral/chunk-VHETZ22W.mjs +101 -0
- package/dist/lib/neutral/chunk-VHETZ22W.mjs.map +7 -0
- package/dist/lib/{browser/chunk-SKBPLX5T.mjs → neutral/chunk-ZYYOSX5I.mjs} +22 -34
- package/dist/lib/neutral/chunk-ZYYOSX5I.mjs.map +7 -0
- package/dist/lib/neutral/close-DG5IVQCE.mjs +44 -0
- package/dist/lib/neutral/close-DG5IVQCE.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +126 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +32 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/{browser/chunk-Q4GUCIRE.mjs → neutral/hooks/index.mjs} +34 -56
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +38 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/open-SGYZO7RF.mjs +147 -0
- package/dist/lib/neutral/open-SGYZO7RF.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-266CVMTW.mjs +13 -0
- package/dist/lib/neutral/operation-handler-266CVMTW.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/{browser/react-root-4ESZAM6D.mjs → neutral/react-root-WZ6KH27J.mjs} +6 -14
- package/dist/lib/neutral/react-root-WZ6KH27J.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-KAAZDHV3.mjs +34 -0
- package/dist/lib/neutral/react-surface-KAAZDHV3.mjs.map +7 -0
- package/dist/lib/neutral/revert-workspace-V6D7W6CL.mjs +21 -0
- package/dist/lib/neutral/revert-workspace-V6D7W6CL.mjs.map +7 -0
- package/dist/lib/neutral/scroll-into-view-UM446Q2T.mjs +21 -0
- package/dist/lib/neutral/scroll-into-view-UM446Q2T.mjs.map +7 -0
- package/dist/lib/neutral/set-JFFKT32S.mjs +37 -0
- package/dist/lib/neutral/set-JFFKT32S.mjs.map +7 -0
- package/dist/lib/neutral/set-layout-mode-I4YV5V2Y.mjs +85 -0
- package/dist/lib/neutral/set-layout-mode-I4YV5V2Y.mjs.map +7 -0
- package/dist/lib/{browser/settings-RY2TBSGP.mjs → neutral/settings-FE7AC5VS.mjs} +7 -13
- package/dist/lib/neutral/settings-FE7AC5VS.mjs.map +7 -0
- package/dist/lib/neutral/show-undo-ZCMF4J2Q.mjs +59 -0
- package/dist/lib/neutral/show-undo-ZCMF4J2Q.mjs.map +7 -0
- package/dist/lib/{browser/state-CSTTMJ43.mjs → neutral/state-IIDXMQUO.mjs} +14 -34
- package/dist/lib/neutral/state-IIDXMQUO.mjs.map +7 -0
- package/dist/lib/neutral/switch-workspace-CVDYG5YZ.mjs +60 -0
- package/dist/lib/neutral/switch-workspace-CVDYG5YZ.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +57 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +34 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/neutral/update-companion-VPCM7FJX.mjs +32 -0
- package/dist/lib/neutral/update-companion-VPCM7FJX.mjs.map +7 -0
- package/dist/lib/neutral/update-complementary-SEQ6DDWA.mjs +28 -0
- package/dist/lib/neutral/update-complementary-SEQ6DDWA.mjs.map +7 -0
- package/dist/lib/neutral/update-dialog-VDHYE4QH.mjs +29 -0
- package/dist/lib/neutral/update-dialog-VDHYE4QH.mjs.map +7 -0
- package/dist/lib/neutral/update-plank-size-ZXOUZD7Y.mjs +26 -0
- package/dist/lib/neutral/update-plank-size-ZXOUZD7Y.mjs.map +7 -0
- package/dist/lib/neutral/update-popover-VFP32W57.mjs +33 -0
- package/dist/lib/neutral/update-popover-VFP32W57.mjs.map +7 -0
- package/dist/lib/neutral/update-sidebar-O5HBOXYH.mjs +25 -0
- package/dist/lib/neutral/update-sidebar-O5HBOXYH.mjs.map +7 -0
- package/dist/lib/neutral/url-handler-3QTKEM2K.mjs +184 -0
- package/dist/lib/neutral/url-handler-3QTKEM2K.mjs.map +7 -0
- package/dist/types/src/DeckPlugin.d.ts +1 -0
- package/dist/types/src/DeckPlugin.d.ts.map +1 -1
- package/dist/types/src/DeckPlugin.node.d.ts +4 -0
- package/dist/types/src/DeckPlugin.node.d.ts.map +1 -0
- package/dist/types/src/DeckPlugin.test.d.ts +2 -0
- package/dist/types/src/DeckPlugin.test.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/check-app-scheme.d.ts +19 -0
- package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +198 -9
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings.d.ts +7 -0
- package/dist/types/src/capabilities/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/{state/state.d.ts → state.d.ts} +38 -22
- package/dist/types/src/capabilities/state.d.ts.map +1 -0
- package/dist/types/src/capabilities/{tools/tools.d.ts → tools.d.ts} +1 -1
- package/dist/types/src/capabilities/tools.d.ts.map +1 -0
- package/dist/types/src/capabilities/{url-handler/url-handler.d.ts → url-handler.d.ts} +1 -1
- package/dist/types/src/capabilities/url-handler.d.ts.map +1 -0
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +6 -0
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -0
- package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +61 -0
- package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -0
- package/dist/types/src/components/DeckSettings/index.d.ts +2 -0
- package/dist/types/src/components/DeckSettings/index.d.ts.map +1 -0
- package/dist/types/src/components/Matrix/Matrix.d.ts +41 -0
- package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -0
- package/dist/types/src/components/Matrix/Matrix.stories.d.ts +17 -0
- package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -0
- package/dist/types/src/components/Matrix/index.d.ts +3 -0
- package/dist/types/src/components/Matrix/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +3 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/{components/DeckLayout → containers/Deck}/Banner.d.ts +1 -1
- package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/Deck.d.ts +25 -0
- package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/Deck.stories.d.ts +61 -0
- package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/DeckContent.d.ts +7 -0
- package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/DeckRoot.d.ts +39 -0
- package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/DeckViewport.d.ts +16 -0
- package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/index.d.ts +2 -0
- package/dist/types/src/containers/Deck/index.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/DeckLayout/ActiveNode.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -0
- package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +63 -0
- package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -0
- package/dist/types/src/containers/DeckLayout/Dialog.d.ts.map +1 -0
- package/dist/types/src/containers/DeckLayout/Fallback.d.ts +2 -0
- package/dist/types/src/containers/DeckLayout/Fallback.d.ts.map +1 -0
- package/dist/types/src/containers/DeckLayout/Popover.d.ts +5 -0
- package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/DeckLayout/Toast.d.ts +1 -1
- package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -0
- package/dist/types/src/containers/DeckLayout/constants.d.ts.map +1 -0
- package/dist/types/src/containers/DeckLayout/index.d.ts +4 -0
- package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -0
- package/dist/types/src/containers/Plank/Plank.d.ts +17 -0
- package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -0
- package/dist/types/src/containers/Plank/Plank.stories.d.ts +61 -0
- package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -0
- package/dist/types/src/containers/Plank/PlankComponent.d.ts +17 -0
- package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +1 -0
- package/dist/types/src/containers/Plank/PlankContent.d.ts +10 -0
- package/dist/types/src/containers/Plank/PlankContent.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/Plank/PlankControls.d.ts +5 -6
- package/dist/types/src/containers/Plank/PlankControls.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/Plank/PlankError.d.ts +2 -2
- package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/Plank/PlankHeading.d.ts +3 -2
- package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts.map +1 -1
- package/dist/types/src/containers/Plank/PlankRoot.d.ts +37 -0
- package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -0
- package/dist/types/src/containers/Plank/index.d.ts +4 -0
- package/dist/types/src/containers/Plank/index.d.ts.map +1 -0
- package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -0
- package/dist/types/src/containers/Sidebar/Sidebar.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/Sidebar/SidebarButton.d.ts +1 -1
- package/dist/types/src/containers/Sidebar/SidebarButton.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/Sidebar/index.d.ts.map +1 -1
- package/dist/types/src/containers/index.d.ts +4 -2
- package/dist/types/src/containers/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useBreakpoints.d.ts +1 -1
- package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckCompanions.d.ts +2 -2
- package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckState.d.ts +3 -3
- package/dist/types/src/hooks/useDeckState.d.ts.map +1 -1
- package/dist/types/src/hooks/useHoistStatusbar.d.ts +1 -1
- package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -1
- package/dist/types/src/hooks/useMainSize.d.ts.map +1 -1
- package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
- package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/layout.d.ts +20 -9
- package/dist/types/src/layout.d.ts.map +1 -1
- package/dist/types/src/layout.test.d.ts +2 -0
- package/dist/types/src/layout.test.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/add-toast.d.ts +5 -0
- package/dist/types/src/operations/add-toast.d.ts.map +1 -0
- package/dist/types/src/operations/adjust.d.ts +5 -0
- package/dist/types/src/operations/adjust.d.ts.map +1 -0
- package/dist/types/src/operations/close.d.ts +5 -0
- package/dist/types/src/operations/close.d.ts.map +1 -0
- package/dist/types/src/operations/helpers.d.ts +3 -0
- package/dist/types/src/operations/helpers.d.ts.map +1 -0
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/open.d.ts +5 -0
- package/dist/types/src/operations/open.d.ts.map +1 -0
- package/dist/types/src/operations/revert-workspace.d.ts +5 -0
- package/dist/types/src/operations/revert-workspace.d.ts.map +1 -0
- package/dist/types/src/operations/scroll-into-view.d.ts +5 -0
- package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -0
- package/dist/types/src/operations/set-layout-mode.d.ts +9 -0
- package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -0
- package/dist/types/src/operations/set.d.ts +5 -0
- package/dist/types/src/operations/set.d.ts.map +1 -0
- package/dist/types/src/operations/show-undo.d.ts +5 -0
- package/dist/types/src/operations/show-undo.d.ts.map +1 -0
- package/dist/types/src/operations/switch-workspace.d.ts +5 -0
- package/dist/types/src/operations/switch-workspace.d.ts.map +1 -0
- package/dist/types/src/operations/update-companion.d.ts +5 -0
- package/dist/types/src/operations/update-companion.d.ts.map +1 -0
- package/dist/types/src/operations/update-complementary.d.ts +5 -0
- package/dist/types/src/operations/update-complementary.d.ts.map +1 -0
- package/dist/types/src/operations/update-dialog.d.ts +5 -0
- package/dist/types/src/operations/update-dialog.d.ts.map +1 -0
- package/dist/types/src/operations/update-plank-size.d.ts +5 -0
- package/dist/types/src/operations/update-plank-size.d.ts.map +1 -0
- package/dist/types/src/operations/update-popover.d.ts +5 -0
- package/dist/types/src/operations/update-popover.d.ts.map +1 -0
- package/dist/types/src/operations/update-sidebar.d.ts +5 -0
- package/dist/types/src/operations/update-sidebar.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +42 -56
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/{capabilities/state/index.d.ts → types/DeckCapabilities.d.ts} +51 -35
- package/dist/types/src/types/DeckCapabilities.d.ts.map +1 -0
- package/dist/types/src/types/DeckEvents.d.ts +5 -0
- package/dist/types/src/types/DeckEvents.d.ts.map +1 -0
- package/dist/types/src/types/DeckOperation.d.ts +15 -0
- package/dist/types/src/types/DeckOperation.d.ts.map +1 -0
- package/dist/types/src/types/Settings.d.ts +11 -0
- package/dist/types/src/types/Settings.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +4 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +43 -104
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +2 -1
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/layoutAppliesTopbar.d.ts +1 -1
- package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
- package/dist/types/src/util/plank-url-params.d.ts +14 -0
- package/dist/types/src/util/plank-url-params.d.ts.map +1 -0
- package/dist/types/src/util/plank-url-params.test.d.ts +2 -0
- package/dist/types/src/util/plank-url-params.test.d.ts.map +1 -0
- package/dist/types/src/util/sanitize-persisted-state.d.ts +19 -0
- package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -0
- package/dist/types/src/util/sanitize-persisted-state.test.d.ts +2 -0
- package/dist/types/src/util/sanitize-persisted-state.test.d.ts.map +1 -0
- package/dist/types/src/util/set-active.d.ts +2 -2
- package/dist/types/src/util/set-active.d.ts.map +1 -1
- package/dist/types/src/util/set-active.test.d.ts +2 -0
- package/dist/types/src/util/set-active.test.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +108 -52
- package/src/DeckPlugin.node.ts +17 -0
- package/src/DeckPlugin.test.ts +27 -0
- package/src/DeckPlugin.ts +12 -16
- package/src/capabilities/app-graph-builder.ts +127 -0
- package/src/capabilities/check-app-scheme.ts +139 -0
- package/src/capabilities/index.ts +14 -10
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/{react-root/react-root.tsx → react-root.tsx} +3 -3
- package/src/capabilities/{react-surface/react-surface.tsx → react-surface.tsx} +12 -14
- package/src/capabilities/{settings/settings.ts → settings.ts} +4 -6
- package/src/capabilities/{state/state.ts → state.ts} +13 -27
- package/src/capabilities/{tools/tools.ts → tools.ts} +6 -6
- package/src/capabilities/url-handler.ts +231 -0
- package/src/components/DeckSettings/DeckSettings.stories.tsx +38 -0
- package/src/components/DeckSettings/DeckSettings.tsx +34 -0
- package/src/components/DeckSettings/index.ts +5 -0
- package/src/components/Matrix/Matrix.stories.tsx +220 -0
- package/src/components/Matrix/Matrix.tsx +205 -0
- package/src/components/Matrix/SPEC.md +219 -0
- package/src/components/Matrix/index.ts +6 -0
- package/src/components/index.ts +6 -2
- package/src/{components/DeckLayout → containers/Deck}/Banner.tsx +7 -5
- package/src/containers/Deck/Deck.stories.tsx +81 -0
- package/src/containers/Deck/Deck.tsx +21 -0
- package/src/containers/Deck/DeckContent.tsx +105 -0
- package/src/containers/Deck/DeckRoot.tsx +50 -0
- package/src/containers/Deck/DeckViewport.tsx +451 -0
- package/src/containers/Deck/index.ts +5 -0
- package/src/{components → containers}/DeckLayout/ActiveNode.tsx +8 -4
- package/src/containers/DeckLayout/DeckLayout.stories.tsx +397 -0
- package/src/containers/DeckLayout/DeckLayout.tsx +62 -0
- package/src/{components → containers}/DeckLayout/Dialog.tsx +11 -4
- package/src/{components → containers}/DeckLayout/Fallback.tsx +4 -4
- package/src/{components → containers}/DeckLayout/Popover.tsx +62 -43
- package/src/{components → containers}/DeckLayout/Toast.tsx +1 -1
- package/src/{components → containers}/DeckLayout/constants.ts +1 -0
- package/src/{components → containers}/DeckLayout/index.ts +3 -2
- package/src/containers/Plank/Plank.stories.tsx +108 -0
- package/src/containers/Plank/Plank.tsx +22 -0
- package/src/containers/Plank/PlankComponent.tsx +217 -0
- package/src/containers/Plank/PlankContent.tsx +45 -0
- package/src/{components → containers}/Plank/PlankControls.tsx +37 -28
- package/src/{components → containers}/Plank/PlankError.tsx +20 -4
- package/src/{components → containers}/Plank/PlankHeading.tsx +53 -42
- package/src/{components → containers}/Plank/PlankLoading.tsx +1 -1
- package/src/containers/Plank/PlankRoot.tsx +49 -0
- package/src/{components → containers}/Plank/index.ts +0 -2
- package/src/{components → containers}/Sidebar/ComplementarySidebar.tsx +66 -83
- package/src/{components → containers}/Sidebar/Sidebar.tsx +8 -6
- package/src/{components → containers}/Sidebar/SidebarButton.tsx +16 -10
- package/src/containers/index.ts +5 -2
- package/src/hooks/useCompanions.ts +1 -1
- package/src/hooks/useDeckCompanions.ts +3 -7
- package/src/hooks/useDeckState.ts +11 -20
- package/src/hooks/useHoistStatusbar.ts +1 -1
- package/src/hooks/useSelectedCompanion.ts +4 -10
- package/src/index.ts +1 -3
- package/src/layout.test.ts +59 -0
- package/src/layout.ts +38 -40
- package/src/meta.ts +2 -1
- package/src/operations/add-toast.ts +24 -0
- package/src/operations/adjust.ts +82 -0
- package/src/operations/close.ts +35 -0
- package/src/operations/helpers.ts +22 -0
- package/src/operations/index.ts +24 -0
- package/src/operations/open.ts +184 -0
- package/src/operations/revert-workspace.ts +22 -0
- package/src/operations/scroll-into-view.ts +24 -0
- package/src/operations/set-layout-mode.ts +84 -0
- package/src/operations/set.ts +36 -0
- package/src/operations/show-undo.ts +47 -0
- package/src/operations/switch-workspace.ts +60 -0
- package/src/operations/update-companion.ts +35 -0
- package/src/operations/update-complementary.ts +33 -0
- package/src/operations/update-dialog.ts +34 -0
- package/src/operations/update-plank-size.ts +28 -0
- package/src/operations/update-popover.ts +36 -0
- package/src/operations/update-sidebar.ts +28 -0
- package/src/plugin.ts +11 -0
- package/src/translations.ts +42 -55
- package/src/types/DeckCapabilities.ts +34 -0
- package/src/types/DeckEvents.ts +21 -0
- package/src/types/DeckOperation.ts +51 -0
- package/src/types/Settings.ts +42 -0
- package/src/types/index.ts +5 -2
- package/src/types/schema.ts +35 -117
- package/src/util/index.ts +2 -1
- package/src/util/layoutAppliesTopbar.ts +1 -1
- package/src/util/plank-url-params.test.ts +85 -0
- package/src/util/plank-url-params.ts +36 -0
- package/src/util/sanitize-persisted-state.test.ts +79 -0
- package/src/util/sanitize-persisted-state.ts +52 -0
- package/src/util/set-active.test.ts +106 -0
- package/src/util/set-active.ts +2 -2
- package/src/vite-env.d.ts +5 -0
- package/dist/lib/browser/Banner-DR6B7XTO.mjs +0 -15
- package/dist/lib/browser/Banner-DR6B7XTO.mjs.map +0 -7
- package/dist/lib/browser/DeckSettings-HB5TKG2F.mjs +0 -96
- package/dist/lib/browser/DeckSettings-HB5TKG2F.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-22XAL7YE.mjs +0 -123
- package/dist/lib/browser/app-graph-builder-22XAL7YE.mjs.map +0 -7
- package/dist/lib/browser/check-app-scheme-ZV3QWNNZ.mjs +0 -33
- package/dist/lib/browser/check-app-scheme-ZV3QWNNZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-BJDEG7YZ.mjs +0 -74
- package/dist/lib/browser/chunk-BJDEG7YZ.mjs.map +0 -7
- package/dist/lib/browser/chunk-OAPMV5ZR.mjs +0 -280
- package/dist/lib/browser/chunk-OAPMV5ZR.mjs.map +0 -7
- package/dist/lib/browser/chunk-Q4GUCIRE.mjs.map +0 -7
- package/dist/lib/browser/chunk-SKBPLX5T.mjs.map +0 -7
- package/dist/lib/browser/chunk-YGOOWRJE.mjs +0 -1390
- package/dist/lib/browser/chunk-YGOOWRJE.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -185
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/operation-resolver-BLZGJWLO.mjs +0 -580
- package/dist/lib/browser/operation-resolver-BLZGJWLO.mjs.map +0 -7
- package/dist/lib/browser/react-root-4ESZAM6D.mjs.map +0 -7
- package/dist/lib/browser/react-surface-KYQGCALN.mjs +0 -44
- package/dist/lib/browser/react-surface-KYQGCALN.mjs.map +0 -7
- package/dist/lib/browser/settings-RY2TBSGP.mjs.map +0 -7
- package/dist/lib/browser/state-CSTTMJ43.mjs.map +0 -7
- package/dist/lib/browser/toolkit-EONRPYA5.mjs +0 -55
- package/dist/lib/browser/toolkit-EONRPYA5.mjs.map +0 -7
- package/dist/lib/browser/types/index.mjs +0 -40
- package/dist/lib/browser/url-handler-EM3SYHHX.mjs +0 -95
- package/dist/lib/browser/url-handler-EM3SYHHX.mjs.map +0 -7
- package/dist/lib/node-esm/Banner-HR7DPUZU.mjs +0 -16
- package/dist/lib/node-esm/Banner-HR7DPUZU.mjs.map +0 -7
- package/dist/lib/node-esm/DeckSettings-MWTR7HU2.mjs +0 -97
- package/dist/lib/node-esm/DeckSettings-MWTR7HU2.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-GNNNCWGN.mjs +0 -124
- package/dist/lib/node-esm/app-graph-builder-GNNNCWGN.mjs.map +0 -7
- package/dist/lib/node-esm/check-app-scheme-ZNISVRFH.mjs +0 -34
- package/dist/lib/node-esm/check-app-scheme-ZNISVRFH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs +0 -76
- package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-EGFOT3DE.mjs +0 -18
- package/dist/lib/node-esm/chunk-EGFOT3DE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-IR6ODCNC.mjs +0 -83
- package/dist/lib/node-esm/chunk-IR6ODCNC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-L2NPJPGL.mjs +0 -281
- package/dist/lib/node-esm/chunk-L2NPJPGL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-O4IOJICP.mjs +0 -201
- package/dist/lib/node-esm/chunk-O4IOJICP.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-Z43MBISY.mjs +0 -1391
- package/dist/lib/node-esm/chunk-Z43MBISY.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -186
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/operation-resolver-5BYDNQND.mjs +0 -581
- package/dist/lib/node-esm/operation-resolver-5BYDNQND.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-YO7IIC75.mjs +0 -50
- package/dist/lib/node-esm/react-root-YO7IIC75.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-G7VRKT4U.mjs +0 -45
- package/dist/lib/node-esm/react-surface-G7VRKT4U.mjs.map +0 -7
- package/dist/lib/node-esm/settings-GYLWWOBK.mjs +0 -41
- package/dist/lib/node-esm/settings-GYLWWOBK.mjs.map +0 -7
- package/dist/lib/node-esm/state-RQXTBWUX.mjs +0 -107
- package/dist/lib/node-esm/state-RQXTBWUX.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-EU3Z2R4H.mjs +0 -56
- package/dist/lib/node-esm/toolkit-EU3Z2R4H.mjs.map +0 -7
- package/dist/lib/node-esm/types/index.mjs +0 -41
- package/dist/lib/node-esm/url-handler-VUK2LBJV.mjs +0 -96
- package/dist/lib/node-esm/url-handler-VUK2LBJV.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +0 -3
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +0 -5
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +0 -1
- package/dist/types/src/capabilities/check-app-scheme/index.d.ts +0 -3
- package/dist/types/src/capabilities/check-app-scheme/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/index.d.ts +0 -3
- package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +0 -5
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root/index.d.ts +0 -6
- package/dist/types/src/capabilities/react-root/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +0 -3
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings/index.d.ts +0 -19
- package/dist/types/src/capabilities/settings/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings/settings.d.ts +0 -22
- package/dist/types/src/capabilities/settings/settings.d.ts.map +0 -1
- package/dist/types/src/capabilities/state/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/state/state.d.ts.map +0 -1
- package/dist/types/src/capabilities/toolkit/index.d.ts +0 -3
- package/dist/types/src/capabilities/toolkit/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/toolkit/toolkit.d.ts +0 -27
- package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +0 -1
- package/dist/types/src/capabilities/tools/index.d.ts +0 -3
- package/dist/types/src/capabilities/tools/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/tools/tools.d.ts.map +0 -1
- package/dist/types/src/capabilities/url-handler/index.d.ts +0 -3
- package/dist/types/src/capabilities/url-handler/index.d.ts.map +0 -1
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/Banner.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts +0 -3
- package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +0 -75
- package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/DeckMain.d.ts +0 -3
- package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/Fallback.d.ts +0 -3
- package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/Popover.d.ts +0 -5
- package/dist/types/src/components/DeckLayout/Popover.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/Toast.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/Topbar.d.ts +0 -3
- package/dist/types/src/components/DeckLayout/Topbar.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/constants.d.ts.map +0 -1
- package/dist/types/src/components/DeckLayout/index.d.ts +0 -4
- package/dist/types/src/components/DeckLayout/index.d.ts.map +0 -1
- package/dist/types/src/components/Plank/Plank.d.ts +0 -27
- package/dist/types/src/components/Plank/Plank.d.ts.map +0 -1
- package/dist/types/src/components/Plank/Plank.stories.d.ts +0 -108
- package/dist/types/src/components/Plank/Plank.stories.d.ts.map +0 -1
- package/dist/types/src/components/Plank/PlankControls.d.ts.map +0 -1
- package/dist/types/src/components/Plank/PlankError.d.ts.map +0 -1
- package/dist/types/src/components/Plank/PlankHeading.d.ts.map +0 -1
- package/dist/types/src/components/Plank/index.d.ts +0 -6
- package/dist/types/src/components/Plank/index.d.ts.map +0 -1
- package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +0 -1
- package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +0 -1
- package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +0 -1
- package/dist/types/src/components/fragments.d.ts +0 -7
- package/dist/types/src/components/fragments.d.ts.map +0 -1
- package/dist/types/src/containers/Banner/Banner.d.ts +0 -2
- package/dist/types/src/containers/Banner/Banner.d.ts.map +0 -1
- package/dist/types/src/containers/Banner/index.d.ts +0 -3
- package/dist/types/src/containers/Banner/index.d.ts.map +0 -1
- package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts +0 -8
- package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts.map +0 -1
- package/dist/types/src/containers/DeckSettings/index.d.ts +0 -3
- package/dist/types/src/containers/DeckSettings/index.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -190
- package/dist/types/src/types/capabilities.d.ts.map +0 -1
- package/dist/types/src/types/events.d.ts +0 -7
- package/dist/types/src/types/events.d.ts.map +0 -1
- package/dist/types/src/util/overscroll.d.ts +0 -47
- package/dist/types/src/util/overscroll.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +0 -119
- package/src/capabilities/app-graph-builder/index.ts +0 -7
- package/src/capabilities/check-app-scheme/check-app-scheme.ts +0 -45
- package/src/capabilities/check-app-scheme/index.ts +0 -7
- package/src/capabilities/operation-resolver/index.ts +0 -10
- package/src/capabilities/operation-resolver/operation-resolver.ts +0 -560
- package/src/capabilities/react-root/index.ts +0 -7
- package/src/capabilities/react-surface/index.ts +0 -7
- package/src/capabilities/settings/index.ts +0 -7
- package/src/capabilities/state/index.ts +0 -7
- package/src/capabilities/toolkit/index.ts +0 -7
- package/src/capabilities/toolkit/toolkit.ts +0 -64
- package/src/capabilities/tools/index.ts +0 -7
- package/src/capabilities/url-handler/index.ts +0 -7
- package/src/capabilities/url-handler/url-handler.ts +0 -96
- package/src/components/DeckLayout/ContentEmpty.tsx +0 -30
- package/src/components/DeckLayout/DeckLayout.stories.tsx +0 -53
- package/src/components/DeckLayout/DeckLayout.tsx +0 -34
- package/src/components/DeckLayout/DeckMain.tsx +0 -287
- package/src/components/DeckLayout/Topbar.tsx +0 -11
- package/src/components/Plank/Plank.stories.tsx +0 -64
- package/src/components/Plank/Plank.tsx +0 -302
- package/src/components/fragments.ts +0 -19
- package/src/containers/Banner/Banner.tsx +0 -5
- package/src/containers/Banner/index.ts +0 -7
- package/src/containers/DeckSettings/DeckSettings.tsx +0 -113
- package/src/containers/DeckSettings/index.ts +0 -7
- package/src/types/capabilities.ts +0 -33
- package/src/types/events.ts +0 -21
- package/src/util/overscroll.ts +0 -69
- /package/dist/lib/{browser/types/index.mjs.map → neutral/check-app-scheme-A7FZVNZO.mjs.map} +0 -0
- /package/dist/lib/{node-esm/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/types/src/capabilities/{app-graph-builder/app-graph-builder.d.ts → app-graph-builder.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-root/react-root.d.ts → react-root.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-surface/react-surface.d.ts → react-surface.d.ts} +0 -0
- /package/dist/types/src/{components/DeckLayout → containers/Deck}/StatusBar.d.ts +0 -0
- /package/dist/types/src/{components → containers}/DeckLayout/ActiveNode.d.ts +0 -0
- /package/dist/types/src/{components → containers}/DeckLayout/DeckLayout.d.ts +0 -0
- /package/dist/types/src/{components → containers}/DeckLayout/Dialog.d.ts +0 -0
- /package/dist/types/src/{components → containers}/DeckLayout/constants.d.ts +0 -0
- /package/dist/types/src/{components → containers}/Plank/PlankLoading.d.ts +0 -0
- /package/dist/types/src/{components → containers}/Sidebar/ComplementarySidebar.d.ts +0 -0
- /package/dist/types/src/{components → containers}/Sidebar/Sidebar.d.ts +0 -0
- /package/dist/types/src/{components → containers}/Sidebar/index.d.ts +0 -0
- /package/src/{components/DeckLayout → containers/Deck}/StatusBar.tsx +0 -0
- /package/src/{components → containers}/Sidebar/index.ts +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/containers/Plank/PlankLoading.tsx", "../../../src/containers/Plank/PlankError.tsx", "../../../src/containers/Plank/PlankHeading.tsx", "../../../src/containers/Plank/PlankControls.tsx", "../../../src/containers/Plank/PlankRoot.tsx", "../../../src/containers/Plank/PlankComponent.tsx", "../../../src/containers/Plank/PlankContent.tsx", "../../../src/containers/Plank/Plank.tsx", "../../../src/containers/Sidebar/SidebarButton.tsx", "../../../src/containers/Sidebar/ComplementarySidebar.tsx", "../../../src/containers/Sidebar/Sidebar.tsx", "../../../src/containers/Deck/DeckContent.tsx", "../../../src/containers/Deck/Banner.tsx", "../../../src/containers/Deck/DeckRoot.tsx", "../../../src/containers/Deck/StatusBar.tsx", "../../../src/containers/Deck/DeckViewport.tsx", "../../../src/containers/Deck/Deck.tsx"],
|
|
4
|
+
"sourcesContent": ["//\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 className='grid place-items-center dx-attention-surface' />;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { TimeoutError } from '@dxos/errors';\nimport { log } from '@dxos/log';\nimport { type Node } from '@dxos/plugin-graph';\nimport { ErrorFallback, type ErrorFallbackProps, 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 PlankError = ({\n id,\n part,\n node,\n error: errorProp,\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 const timer = setTimeout(() => setTimedOut(true), 5_000);\n return () => clearTimeout(timer);\n }, []);\n\n const error = useMemo(() => {\n if (timedOut) {\n return new TimeoutError({ message: 'Timeout loading content' });\n }\n\n return errorProp;\n }, [timedOut, errorProp]);\n\n return (\n <>\n <PlankHeading id={id} part={part} node={node} pending={!timedOut} />\n {timedOut ? <PlankErrorFallback error={error} /> : <PlankLoading />}\n </>\n );\n};\n\n/**\n * User facing error fallback.\n */\nexport const PlankErrorFallback = ({ error }: ErrorFallbackProps) => {\n const { t } = useTranslation(meta.id);\n\n useEffect(() => {\n if (error) {\n log.error('plank error', { error });\n }\n }, [error]);\n\n if (process.env.NODE_ENV === 'development') {\n return <ErrorFallback title='Plank Error' error={error} />;\n } else {\n const errorString = error?.toString() ?? '';\n return (\n <div\n role='alert'\n data-testid='plank-content-error'\n className='dx-attention-surface overflow-y-auto p-8 grid place-items-center'\n >\n <p className={mx(descriptionMessage, 'break-all rounded-md p-4')}>\n {error ? errorString : t('error-fallback.message')}\n </p>\n </div>\n );\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { Fragment, type MouseEvent, memo, useCallback, useEffect, useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { Graph, type Node, useActionRunner } from '@dxos/plugin-graph';\nimport { Icon, IconButton, Popover, toLocalizedString, useTranslation } from '@dxos/react-ui';\nimport { getLinkedVariant } from '@dxos/react-ui-attention';\nimport { StackItem, type StackItemSigilAction } from '@dxos/react-ui-stack';\nimport { TextTooltip } from '@dxos/react-ui-text-tooltip';\nimport { hoverableControls, hoverableFocusedWithinControls, iconSize } from '@dxos/ui-theme';\n\nimport { useBreakpoints } from '#hooks';\nimport { meta } from '#meta';\nimport { DeckOperation } from '#types';\nimport { type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '#types';\n\nimport { PlankCompanionControls, PlankControls } from './PlankControls';\nimport { usePlankContext } from './PlankRoot';\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 debug?: boolean;\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 debug = false,\n }: PlankHeadingProps) => {\n const { t } = useTranslation(meta.id);\n const { graph, onAdjust, onUpdateCompanion } = usePlankContext('PlankHeading');\n const runAction = useActionRunner();\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, 'child');\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 === 'multi'),\n incrementStart: canIncrementStart,\n incrementEnd: canIncrementEnd,\n fullscreen: !isCompanionNode,\n companion: layoutMode !== 'multi' && !isCompanionNode && companions && companions.length > 0,\n }),\n [breakpoint, part, companions, canIncrementStart, canIncrementEnd, isCompanionNode, deckEnabled, layoutMode],\n );\n\n const variant = isCompanionNode ? getLinkedVariant(id) : undefined;\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((action) =>\n ['list-item', 'list-item-primary', 'heading-list-item'].includes(action.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 onAdjust?.(id, eventType);\n },\n [onAdjust, id],\n );\n\n const ActionRoot = node && popoverAnchorId === `${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 (tabId) {\n onUpdateCompanion?.(tabId);\n }\n },\n [onUpdateCompanion],\n );\n\n return (\n <StackItem.Heading\n data-tauri-drag-region\n data-plank-heading\n style={iconSize(5)}\n classNames={[\n 'py-1 items-stretch gap-1 sticky left-12 dx-app-drag min-w-0 dx-contain-layout dx-density-coarse',\n part === 'solo'\n ? 'ps-[calc(env(safe-area-inset-left)+.25rem)] pe-[calc(env(safe-area-inset-right)+.25rem)]'\n : 'px-1',\n ...(layoutMode === 'solo--fullscreen'\n ? [\n hoverableControls,\n hoverableFocusedWithinControls,\n '*:transition-opacity *:opacity-(--controls-opacity) bg-transparent',\n 'border-transparent transition-[background-color,border-color]',\n 'hover-hover:hover:bg-header-surface focus-within:bg-header-surface',\n 'hover-hover:hover:border-subdued-separator focus-within:border-subdued-separator',\n ]\n : []),\n ]}\n >\n {companions && isCompanionNode ? (\n /* TODO(thure): IMPORTANT: This is a tablist; it should be implemented as such. */\n <div data-tauri-drag-region className='flex-1 min-w-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.Surface\n type={AppSurface.MenuFooter}\n data={{ subject: node.data } satisfies AppSurface.MenuFooterData}\n />\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 data-tauri-drag-region\n attendableId={attendableId}\n related={part === 'complementary'}\n {...(pending && { classNames: 'text-description' })}\n >\n {label}\n </StackItem.HeadingLabel>\n </TextTooltip>\n </>\n )}\n {debug && (\n <div className='flex items-center text-sm text-info-text'>\n {layoutMode}:{part}:{companioned}\n </div>\n )}\n {node && part !== 'complementary' && (\n <Surface.Surface\n type={AppSurface.NavbarEnd}\n data={{ subject: node.data } satisfies AppSurface.NavbarEndData}\n />\n )}\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 2024 DXOS.org\n//\n\nimport React, { forwardRef, useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { ButtonGroup, type ButtonGroupProps, type ButtonProps, IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\nimport { type DeckAction, 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\n//\n// Controls\n//\n\nconst plankControlSpacing = 'px-2';\n\nexport type PlankCompanionControlsProps = {\n primary?: string;\n};\n\nexport const PlankCompanionControls = forwardRef<HTMLDivElement, PlankCompanionControlsProps>(\n ({ primary }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const handleCloseCompanion = useCallback(() => {\n return invokePromise(LayoutOperation.UpdateCompanion, { subject: null });\n }, [invokePromise]);\n return (\n <div ref={forwardedRef} className='contents dx-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\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\n//\n// PlankControls\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\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={['dx-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 && layoutMode !== 'multi' && (\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 2026 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { PropsWithChildren } from 'react';\n\nimport { type Graph } from '@dxos/plugin-graph';\n\nimport { type DeckOperation } from '#types';\nimport { type LayoutMode, type PlankSizing, type ResolvedPart, type Settings } from '#types';\n\nconst PLANK_NAME = 'Plank';\n\nexport type PlankContextValue = {\n /** The application graph. */\n graph: Graph.ExpandableGraph;\n /** Which part of the layout this plank occupies. */\n part: ResolvedPart;\n /** Current layout mode. */\n layoutMode: LayoutMode;\n /** Deck settings. */\n settings?: Settings.Settings;\n /** Popover anchor ID for heading menus. */\n popoverAnchorId?: string;\n /** ID of plank that should be scrolled into view. */\n scrollIntoView?: string;\n /** Persisted plank sizes keyed by plank ID. */\n plankSizing?: PlankSizing;\n /** Callback for plank adjustments (close, solo, increment, companion). */\n onAdjust?: (id: string, type: DeckOperation.PartAdjustment) => void;\n /** Callback for plank resize. */\n onResize?: (id: string, size: number) => void;\n /** Callback to clear scroll-into-view state. */\n onScrollIntoView?: (id?: string) => void;\n /** Callback to update the companion. */\n onUpdateCompanion?: (companion: string | null) => void;\n};\n\nexport const [PlankProvider, usePlankContext] = createContext<PlankContextValue>(PLANK_NAME);\n\nexport type PlankRootProps = PropsWithChildren<PlankContextValue>;\n\n/**\n * Headless root that provides plank context.\n */\nexport const PlankRoot = ({ children, ...context }: PlankRootProps) => {\n return <PlankProvider {...context}>{children}</PlankProvider>;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport React, { type KeyboardEvent, memo, useCallback, useLayoutEffect, useMemo, useRef } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { debounce } from '@dxos/async';\nimport { type Node } from '@dxos/plugin-graph';\nimport { getLinkedVariant } from '@dxos/react-ui-attention';\nimport { useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, type StackItemSize, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/ui-theme';\n\nimport { useMainSize } from '#hooks';\nimport { PLANK_COMPANION_TYPE } from '#types';\n\nimport { PlankError, PlankErrorFallback } from './PlankError';\nimport { PlankHeading } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\nimport { PlankRootProps, usePlankContext } from './PlankRoot';\n\n/**\n * JS-based smooth scroll that won't be interrupted by MutationObserver or layout changes.\n */\nconst smoothScrollTo = (element: HTMLElement, target: number, duration: number) => {\n const start = element.scrollLeft;\n const distance = target - start;\n const startTime = performance.now();\n\n const step = (currentTime: number) => {\n const elapsed = currentTime - startTime;\n const progress = Math.min(elapsed / duration, 1);\n // Ease-out cubic.\n const eased = 1 - Math.pow(1 - progress, 3);\n element.scrollLeft = start + distance * eased;\n if (progress < 1) {\n requestAnimationFrame(step);\n }\n };\n\n requestAnimationFrame(step);\n};\n\n// NOTE: Calibrated to show PLANK + COMPANION on MBP 16\" screen.\nexport const DEFAULT_SIZE = 48 satisfies StackItemSize;\nexport const DEFAULT_COMPANION_SIZE = 35 satisfies StackItemSize;\n\nexport type PlankComponentProps = Pick<PlankRootProps, 'part'> & {\n id: string;\n path?: string[];\n order?: number;\n active?: string[];\n node?: Node.Node;\n primary?: Node.Node;\n companions?: Node.Node[];\n companioned?: 'primary' | 'companion';\n};\n\nexport const PlankComponent = memo(\n ({ part, id, path, order, active, node, primary, companions, companioned }: PlankComponentProps) => {\n const { layoutMode, settings, popoverAnchorId, scrollIntoView, plankSizing, onResize, onScrollIntoView } =\n usePlankContext('PlankComponent');\n\n const canResize = layoutMode === 'multi';\n const { findFirstFocusable } = useFocusFinders();\n const isCompanion = companioned === 'companion';\n const attentionAttrs = useAttentionAttributes(primary?.id ?? id);\n const orderId = isCompanion ? primary?.id : id;\n const index = orderId && active ? active.findIndex((entryId) => entryId === orderId) : -1;\n const length = active?.length ?? 1;\n const isOrdered = !!active && index >= 0;\n const canIncrementStart = isOrdered && index > 0;\n const canIncrementEnd = isOrdered && index < length - 1;\n const rootElement = useRef<HTMLDivElement | null>(null);\n const variant = node?.type === PLANK_COMPANION_TYPE ? getLinkedVariant(id) : undefined;\n\n // Sizing.\n const sizeAttrs = useMainSize();\n const sizeKey = id.split('+')[0];\n const size = isCompanion\n ? DEFAULT_COMPANION_SIZE\n : ((plankSizing?.[sizeKey] as number | undefined) ?? DEFAULT_SIZE);\n const handleSizeChange = useCallback(\n debounce((nextSize: number) => {\n const size = Math.round(nextSize);\n onResize?.(sizeKey, size);\n }, 200),\n [sizeKey, onResize],\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 && layoutMode === 'multi' && rootElement.current) {\n const element = rootElement.current;\n const scrollParent = element.closest('[style*=\"overflow\"], .overflow-x-auto') as HTMLElement | null;\n if (scrollParent) {\n const elementRect = element.getBoundingClientRect();\n const parentRect = scrollParent.getBoundingClientRect();\n const targetScrollLeft = scrollParent.scrollLeft + (elementRect.left - parentRect.left);\n\n smoothScrollTo(scrollParent, targetScrollLeft, 300);\n }\n\n onScrollIntoView?.(undefined);\n }\n }, [id, scrollIntoView, layoutMode, onScrollIntoView]);\n\n const isSolo = layoutMode.startsWith('solo') && part === 'solo';\n const isAttendable =\n (layoutMode.startsWith('solo') && part.startsWith('solo')) || (layoutMode === 'multi' && part === 'multi');\n\n const data = useMemo<AppSurface.ArticleData | undefined>(\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 classNames = [\n 'dx-attention-surface relative dx-focus-ring-inset-over-all dx-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-w-0',\n fullscreen && 'grid-rows-1',\n part === 'multi' && (isCompanion ? 'border-separator! border-e' : 'border-separator! border-x'),\n part === 'solo-companion' && 'border-separator! border-s',\n settings?.encapsulatedPlanks &&\n !part.startsWith('solo') &&\n 'mx-(--main-spacing) border-separator! border rounded-sm 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 ? ({\n className: mx(classNames),\n ...sizeAttrs,\n } as any)\n : {\n role: 'article',\n item: { id },\n classNames,\n order,\n size,\n onSizeChange: handleSizeChange,\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.Surface\n key={node.id}\n type={AppSurface.Article}\n data={data}\n limit={1}\n fallback={PlankErrorFallback}\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, { type PropsWithChildren } from 'react';\n\nimport { railGridHorizontal } from '@dxos/react-ui-stack';\nimport { composable, composableProps, mainIntrinsicSize } from '@dxos/ui-theme';\n\nimport { useMainSize } from '#hooks';\n\nexport type PlankContentProps = PropsWithChildren<{\n solo: boolean;\n companion: boolean;\n encapsulate: boolean;\n}>;\n\nexport const PlankContent = composable<HTMLDivElement, PlankContentProps>(\n ({ children, solo, companion, encapsulate, ...props }, forwardedRef) => {\n const sizeAttrs = useMainSize();\n if (!solo) {\n return children;\n }\n\n return (\n <div\n {...sizeAttrs}\n {...composableProps(props, {\n role: 'none',\n classNames: [\n 'absolute inset-(--main-spacing) grid',\n railGridHorizontal,\n mainIntrinsicSize,\n companion && 'grid-cols-[6fr_4fr]', // Ration of primary to companion.\n encapsulate && 'border border-separator rounded-sm overflow-hidden',\n ],\n })}\n data-popover-collision-boundary={true}\n ref={forwardedRef}\n >\n {children}\n </div>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { PlankComponent, PlankComponentProps } from './PlankComponent';\nimport { PlankContent, PlankContentProps } from './PlankContent';\nimport { PlankControls } from './PlankControls';\nimport { PlankHeading } from './PlankHeading';\nimport { PlankRoot, PlankRootProps } from './PlankRoot';\n\n/**\n * Radix-style composite Plank component.\n */\nexport const Plank = {\n Root: PlankRoot,\n Content: PlankContent,\n Component: PlankComponent,\n Heading: PlankHeading,\n Controls: PlankControls,\n};\n\nexport type { PlankRootProps, PlankComponentProps, PlankContentProps };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { IconButton, type IconButtonProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { getLinkedVariant } from '@dxos/react-ui-attention';\n\nimport { useDeckCompanions, useDeckState } from '#hooks';\nimport { meta } from '#meta';\n\nexport const ToggleSidebarButton = ({\n classNames,\n variant = 'ghost',\n}: ThemedClassName<Pick<IconButtonProps, 'variant'>>) => {\n const { updateState } = useDeckState();\n const { t } = useTranslation(meta.id);\n\n const handleClick = useCallback(() => {\n updateState((state) => ({\n ...state,\n sidebarState: state.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((state) => ({ ...state, 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.button')}\n onClick={handleClick}\n classNames='rounded-none px-1 dx-focus-ring-inset pe-[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 { invokePromise } = 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((state) => ({ ...state, complementarySidebarState: nextState }));\n\n const subject = state.complementarySidebarPanel ?? (companions[0] && getLinkedVariant(companions[0].id));\n if (nextState === 'expanded' && !current && subject) {\n void invokePromise(LayoutOperation.UpdateComplementary, { subject });\n }\n }, [state, updateState, current, companions, invokePromise]);\n\n const label = t(\n state.complementarySidebarState === 'expanded'\n ? 'close-complementary-sidebar.label'\n : 'open-complementary-sidebar.label',\n );\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={label}\n tooltipSide={inR0 ? 'left' : undefined}\n onClick={handleClick}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type MouseEvent, useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Surface, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { IconButton, type Label, Main, Panel, toLocalizedString, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { getLinkedVariant } from '@dxos/react-ui-attention';\nimport { Tabs } from '@dxos/react-ui-tabs';\nimport { iconSize, mx } from '@dxos/ui-theme';\n\nimport { type DeckCompanion, useBreakpoints, useDeckCompanions, useDeckState, useHoistStatusbar } from '#hooks';\nimport { meta } from '#meta';\nimport { getMode } from '#types';\n\nimport { layoutAppliesTopbar } from '../../util';\nimport { PlankErrorFallback, PlankLoading } from '../Plank';\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 { invokePromise } = useOperationInvoker();\n const { t } = useTranslation(meta.id);\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) => getLinkedVariant(companion.id) === current);\n const activeId = activeCompanion && getLinkedVariant(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((state) => ({\n ...state,\n complementarySidebarState: state.complementarySidebarState === 'expanded' ? 'collapsed' : 'expanded',\n }));\n } else {\n setInternalValue(nextValue);\n updateState((state) => ({ ...state, complementarySidebarState: 'expanded' }));\n void invokePromise(LayoutOperation.UpdateComplementary, { subject: nextValue });\n }\n },\n [state.complementarySidebarState, activeId, invokePromise, 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 void invokePromise(LayoutOperation.UpdateComplementary, { state: 'collapsed' });\n }\n }, [activeId, invokePromise]);\n\n return (\n <Main.ComplementarySidebar\n label={label}\n classNames={[\n topbar && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',\n hoistStatusbar && 'bottom-(--dx-statusbar-size)',\n ]}\n >\n {/* R0 Tabs */}\n <Tabs.Root classNames='contents' orientation='vertical' value={internalValue}>\n <div\n data-tauri-drag-region\n style={iconSize(5)}\n className={mx(\n 'absolute z-1 inset-y-0 end-0 w-(--dx-r0-size)!',\n 'py-[env(safe-area-inset-top)] pb-[env(safe-area-inset-bottom)] border-s border-subdued-separator',\n 'grid grid-cols-1 grid-rows-[1fr_min-content] bg-toolbar-surface dx-contain-layout dx-app-drag',\n )}\n >\n {/* TODO(burdon): ScrollArea. */}\n <Tabs.Tablist classNames='grid grid-cols-1 auto-rows-(--dx-rail-action) overflow-y-auto'>\n {companions.map((companion) => (\n <Tabs.Tab key={getLinkedVariant(companion.id)} value={getLinkedVariant(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={getLinkedVariant(companion.id)}\n {...(companion.properties.joyride && { 'data-joyride': companion.properties.joyride })}\n variant={\n activeId === getLinkedVariant(companion.id)\n ? state.complementarySidebarState === 'expanded'\n ? 'primary'\n : 'ghost'\n : 'ghost'\n }\n onClick={handleTabClick}\n />\n </Tabs.Tab>\n ))}\n </Tabs.Tablist>\n {!hoistStatusbar && (\n <div\n className='grid grid-cols-1 auto-rows-(--dx-rail-item) py-0.5 gap-0.5 overflow-y-auto scrollbar-none'\n style={iconSize(4)}\n >\n <Surface.Surface role='status-indicator' />\n </div>\n )}\n <div className='hidden lg:grid grid-cols-1 auto-rows-(--dx-rail-action) p-1'>\n <ToggleComplementarySidebarButton />\n </div>\n </div>\n\n {/* R1 Content. */}\n {activeId &&\n companions.map((companion) => (\n <Tabs.Panel\n key={getLinkedVariant(companion.id)}\n value={getLinkedVariant(companion.id)}\n classNames={[\n 'absolute data-[state=\"inactive\"]:-z-[1] overflow-hidden',\n 'inset-y-0 start-0 w-full lg:w-(--dx-r1-size)',\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.Panel>\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 (getLinkedVariant(companion.id) !== activeId && !data) {\n return null;\n }\n\n return (\n <Panel.Root>\n <Panel.Toolbar asChild size='lg'>\n <Toolbar.Root classNames='bg-modal-surface border-b border-subdued-separator'>\n <IconButton\n label={toLocalizedString(companion.properties.label, t)}\n icon={companion.properties.icon}\n iconOnly\n tooltipSide='left'\n data-value={getLinkedVariant(companion.id)}\n classNames='h-10 w-10'\n variant='default'\n />\n <div role='none' className='px-1'>\n {toLocalizedString(companion.properties.label, t)}\n </div>\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content classNames='bg-base-surface'>\n <Surface.Surface\n role={`deck-companion--${getLinkedVariant(companion.id)}`}\n data={data}\n fallback={PlankErrorFallback}\n placeholder={<PlankLoading />}\n />\n </Panel.Content>\n {!hoistStatusbar && (\n <Panel.Statusbar size='sm'>\n <Surface.Surface role='status-bar--r1-footer' limit={1} />\n </Panel.Statusbar>\n )}\n </Panel.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { type Label, Main } from '@dxos/react-ui';\n\nimport { useBreakpoints, useDeckState, useHoistStatusbar } from '#hooks';\nimport { meta } from '#meta';\nimport { getMode } from '#types';\n\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<AppSurface.NavigationData<{ topbar: boolean; hoistStatusbar: boolean }>>(\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 && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',\n hoistStatusbar && 'bottom-(--dx-statusbar-size)',\n ]}\n >\n <Surface.Surface type={AppSurface.Navigation} data={navigationData} limit={1} />\n </Main.NavigationSidebar>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useCallback, useEffect, useRef } from 'react';\n\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Main, useMediaQuery } from '@dxos/react-ui';\n\nimport { useBreakpoints, useHoistStatusbar } from '#hooks';\n\nimport { layoutAppliesTopbar } from '../../util';\nimport { ComplementarySidebar, Sidebar } from '../Sidebar';\nimport { Banner } from './Banner';\nimport { useDeckContext } from './DeckRoot';\nimport { StatusBar } from './StatusBar';\n\nconst DECK_CONTENT_NAME = 'DeckContent';\n\nexport type DeckContentProps = PropsWithChildren;\n\nexport const DeckContent = ({ children }: DeckContentProps) => {\n const {\n state: { sidebarState, complementarySidebarState, complementarySidebarPanel },\n deck: { active, fullscreen, solo },\n updateState,\n layoutMode,\n settings,\n pluginManager,\n onLayoutChange,\n } = useDeckContext(DECK_CONTENT_NAME);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\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 === 'multi') {\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 shouldRevert.current = true;\n onLayoutChange({ subject: attended[0], mode: 'solo' });\n } else if (isNotMobile && layoutMode === 'solo' && shouldRevert.current) {\n onLayoutChange({ revert: true });\n }\n // NOTE: Using `layoutMode` instead of `deck` to avoid infinite loops caused by object reference changes.\n }, [isNotMobile, layoutMode, onLayoutChange]);\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 === 'multi') {\n onLayoutChange({ subject: active[0], mode: 'solo' });\n }\n }, [settings?.enableDeck, onLayoutChange, active, layoutMode]);\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 <Sidebar />\n <ComplementarySidebar current={complementarySidebarPanel} />\n <Main.Overlay />\n {children}\n {topbar && <Banner variant='topbar' />}\n {hoistStatusbar && <StatusBar showHints={settings?.showHints} />}\n </Main.Root>\n );\n};\n\nDeckContent.displayName = DECK_CONTENT_NAME;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type ThemedClassName, useTranslation } from '@dxos/react-ui';\nimport { mx, osTranslations } from '@dxos/ui-theme';\n\nimport { meta } from '#meta';\n\nimport { CloseSidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nexport const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'topbar' | 'sidebar' }>) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <header\n className={mx(\n 'flex items-stretch relative py-1 ps-1 pe-2',\n variant === 'topbar' &&\n 'fixed inset-x-0 top-[env(safe-area-inset-top)] h-(--dx-rail-size) border-b border-separator',\n classNames,\n )}\n >\n {variant === 'sidebar' ? <CloseSidebarButton /> : <ToggleSidebarButton />}\n <span className='self-center grow ms-1'>{t('current-app.name', { ns: osTranslations })}</span>\n {variant === 'topbar' && (\n <div className='absolute inset-0 pointer-events-none'>\n <div className='grid h-full pointer-fine:p-1 max-w-md mx-auto pointer-events-auto'>\n <Surface.Surface role='search-input' limit={1} />\n </div>\n </div>\n )}\n <span role='none' className='grow' />\n <Surface.Surface role='version-info' limit={1} />\n <Surface.Surface role='notch-start' limit={1} />\n </header>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { PropsWithChildren } from 'react';\n\nimport { type PluginManager } from '@dxos/app-framework';\n\nimport { type LayoutMode, type Settings } from '#types';\n\nimport { type DeckStateHook } from '../../hooks/useDeckState';\n\nconst DECK_NAME = 'Deck';\nconst DECK_ROOT_NAME = 'DeckRoot';\n\n/** Request to change the layout mode. */\nexport type DeckLayoutChangeRequest = { subject?: string; mode: LayoutMode } | { revert: true };\n\n//\n// Context\n//\n\nexport type DeckContextValue = {\n /** Deck plugin settings. */\n settings?: Settings.Settings;\n /** Plugin manager for capability access. */\n pluginManager: PluginManager.PluginManager;\n /** Layout mode. */\n layoutMode: LayoutMode;\n /** Callback for layout mode changes. */\n onLayoutChange: (request: DeckLayoutChangeRequest) => void;\n} & Pick<DeckStateHook, 'state' | 'deck' | 'updateState'>;\n\nexport const [DeckProvider, useDeckContext] = createContext<DeckContextValue>(DECK_NAME);\n\n//\n// Root\n//\n\nexport type DeckRootProps = PropsWithChildren<DeckContextValue>;\n\n/**\n * Headless root that provides Deck context.\n */\nexport const DeckRoot = ({ children, ...context }: DeckRootProps) => {\n return <DeckProvider {...context}>{children}</DeckProvider>;\n};\n\nDeckRoot.displayName = DECK_ROOT_NAME;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\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 bottom-0 inset-x-0 h-(--dx-statusbar-size) border-y border-separator z-[2] flex text-description'\n {...mover}\n >\n {showHints && <Surface.Surface role='hints' limit={1} />}\n <Surface.Surface role='status-bar' limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React, {\n Fragment,\n memo,\n type PropsWithChildren,\n type UIEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { Surface, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { addEventListener } from '@dxos/async';\nimport { invariant } from '@dxos/invariant';\nimport { useNode } from '@dxos/plugin-graph';\nimport { IconButton, Main, type MainContentProps, useOnTransition, useTranslation } from '@dxos/react-ui';\nimport { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from '@dxos/react-ui-stack';\nimport { hoverableControls, hoverableFocusedWithinControls, mainPaddingTransitions, mx } from '@dxos/ui-theme';\n\nimport { useBreakpoints, useCompanions, useDeckState, useHoistStatusbar, useSelectedCompanion } from '#hooks';\nimport { meta } from '#meta';\nimport { DeckOperation } from '#types';\nimport { getMode } from '#types';\n\nimport { layoutAppliesTopbar } from '../../util';\nimport { Plank, PlankRootProps, type PlankComponentProps } from '../Plank';\nimport {\n ToggleComplementarySidebarButton as NaturalToggleComplementarySidebarButton,\n ToggleSidebarButton as NaturalToggleSidebarButton,\n} from '../Sidebar';\nimport { useDeckContext } from './DeckRoot';\n\nconst DECK_VIEWPORT_NAME = 'DeckViewport';\n\n//\n// DeckViewport\n//\n\nexport type DeckViewportProps = PropsWithChildren;\n\n/**\n * Deck viewport that renders the main content area and sets CSS variables for plank sizing.\n */\nexport const DeckViewport = ({ children }: DeckViewportProps) => {\n const {\n deck: { active, plankSizing },\n state: { sidebarState, complementarySidebarState },\n settings,\n layoutMode,\n } = useDeckContext(DECK_VIEWPORT_NAME);\n\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n return (\n <Main.Content\n bounce\n handlesFocus\n classNames={[\n 'grid top-[env(safe-area-inset-top)]!',\n topbar && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]!',\n hoistStatusbar && 'lg:bottom-(--dx-statusbar-size)',\n ]}\n style={\n {\n '--main-spacing': settings?.encapsulatedPlanks ? '0.75rem' : '0',\n '--main-sidebar-width':\n sidebarState === 'expanded'\n ? 'var(--dx-nav-sidebar-size)'\n : sidebarState === 'collapsed'\n ? 'var(--dx-l0-size)'\n : '0',\n '--main-complementary-width':\n complementarySidebarState === 'expanded'\n ? 'var(--dx-complementary-sidebar-size)'\n : complementarySidebarState === 'collapsed'\n ? 'var(--dx-rail-size)'\n : '0',\n '--main-content-first-width': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n '--main-content-last-width': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n } as MainContentProps['style']\n }\n >\n {children}\n </Main.Content>\n );\n};\n\nDeckViewport.displayName = DECK_VIEWPORT_NAME;\n\n//\n// ContentEmpty\n//\n\nexport const DeckContentEmpty = () => {\n const breakpoint = useBreakpoints();\n const { deck } = useDeckState();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n return (\n <div className='grid place-items-center p-8 relative bg-deck-surface' data-testid='layoutPlugin.firstRunMessage'>\n <Surface.Surface role='keyshortcuts' />\n {!topbar && <ToggleSidebarButton />}\n </div>\n );\n};\n\n//\n// DeckSoloMode\n//\n\n/**\n * Single-plank layout with optional companion.\n */\nexport const DeckSoloMode = () => {\n const { deck, settings, layoutMode, onLayoutChange } = useDeckContext('DeckSoloMode');\n const { companionOpen, companionVariant, fullscreen, solo } = deck;\n const effectiveCompanionVariant = fullscreen ? undefined : companionOpen ? companionVariant : undefined;\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n invariant(solo);\n\n useEffect(() => {\n if (!fullscreen) {\n return;\n }\n\n const handleKeyDown = (event: globalThis.KeyboardEvent) => {\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n onLayoutChange({ mode: 'solo--fullscreen' });\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [fullscreen, onLayoutChange]);\n\n return (\n <div className='relative overflow-hidden bg-deck-surface'>\n <DeckSidebarToggles topbar={topbar} fullscreen={fullscreen} />\n {fullscreen && <ExitFullscreenButton onExit={() => onLayoutChange({ mode: 'solo--fullscreen' })} />}\n <StackContext.Provider\n value={{\n orientation: 'horizontal',\n size: 'contain',\n rail: true,\n }}\n >\n <PlankContainer\n id={solo}\n part='solo'\n layoutMode={layoutMode}\n companionVariant={effectiveCompanionVariant}\n settings={settings}\n />\n </StackContext.Provider>\n </div>\n );\n};\n\n//\n// DeckMultiMode\n//\n\n/**\n * Multi-plank horizontal scrolling layout.\n */\nexport const DeckMultiMode = () => {\n const {\n deck: { active, companionVariant, fullscreen },\n settings,\n layoutMode,\n } = useDeckContext('DeckMultiMode');\n /** In multi mode the companion column is always shown when the last plank has companions (not gated by `companionOpen`). */\n const effectiveCompanionVariant = companionVariant;\n const lastPlankId = active[active.length - 1];\n const lastPlankCompanions = useCompanions(lastPlankId);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const deckRef = useRef<HTMLDivElement>(null);\n\n /** Clear scroll restoration state if the window is resized. */\n const scrollLeftRef = useRef<number>(null);\n useEffect(\n () =>\n addEventListener(window, 'resize', () => {\n scrollLeftRef.current = null;\n }),\n [],\n );\n\n const restoreScroll = useCallback(() => {\n if (deckRef.current && scrollLeftRef.current != null) {\n deckRef.current.scrollLeft = scrollLeftRef.current;\n }\n }, []);\n\n useOnTransition(layoutMode, (mode) => mode !== 'multi', 'multi', restoreScroll);\n\n /** Save scroll position as the user scrolls. */\n const handleScroll = useCallback((event: UIEvent) => {\n if (event.currentTarget === event.target) {\n scrollLeftRef.current = (event.target as HTMLDivElement).scrollLeft;\n }\n }, []);\n\n // Create order map.\n // In multi mode only the last plank hosts the companion pane, so only that plank adds the extra column.\n const { order, itemsCount } = useMemo(() => {\n const lastHasCompanions = lastPlankCompanions.length > 0;\n return active.reduce(\n (acc: { order: Record<string, number>; itemsCount: number }, entryId, index) => {\n const isLastPlank = index === active.length - 1;\n acc.order[entryId] = acc.itemsCount + 1;\n acc.itemsCount += lastHasCompanions && isLastPlank ? 3 : 2;\n return acc;\n },\n { order: {}, itemsCount: 0 },\n );\n }, [active, lastPlankCompanions.length]);\n\n return (\n <div className='relative bg-deck-surface overflow-hidden'>\n <DeckSidebarToggles topbar={topbar} fullscreen={fullscreen} />\n <Stack\n classNames={[\n 'absolute h-[calc(100%-2*var(--main-spacing))] w-full inset-y-(--main-spacing) -inset-w-px',\n mainPaddingTransitions,\n ]}\n orientation='horizontal'\n size='contain'\n itemsCount={itemsCount - 1}\n onScroll={handleScroll}\n ref={deckRef}\n >\n {active.map((entryId) => (\n <Fragment key={entryId}>\n {/* TODO(burdon): Setting for separator. */}\n <PlankSeparator hidden order={order[entryId] - 1} encapsulate={!!settings?.encapsulatedPlanks} />\n <PlankContainer\n id={entryId}\n part='multi'\n active={active}\n order={order[entryId]}\n layoutMode={layoutMode}\n companionVariant={effectiveCompanionVariant}\n settings={settings}\n />\n </Fragment>\n ))}\n </Stack>\n </div>\n );\n};\n\n//\n// SidebarToggles\n//\n\nconst sidebarToggleStyles = 'h-(--dx-rail-item) w-(--dx-rail-item) absolute bottom-2 z-[1] bg-deck-surface! lg:hidden';\n\nconst ToggleSidebarButton = () => <NaturalToggleSidebarButton classNames={mx(sidebarToggleStyles, 'left-2')} />;\nconst ToggleComplementarySidebarButton = () => (\n <NaturalToggleComplementarySidebarButton classNames={mx(sidebarToggleStyles, 'right-2')} />\n);\n\nconst ExitFullscreenButton = ({ onExit }: { onExit: () => void }) => {\n const { t } = useTranslation(meta.id);\n return (\n <div\n className={mx(\n 'fixed top-2 right-2 z-[1]',\n hoverableControls,\n hoverableFocusedWithinControls,\n 'transition-opacity opacity-(--controls-opacity)',\n )}\n >\n <IconButton\n label={t('exit-fullscreen.label')}\n icon='ph--corners-in--regular'\n iconOnly\n variant='ghost'\n tooltipSide='bottom'\n onClick={onExit}\n />\n </div>\n );\n};\n\nconst DeckSidebarToggles = ({ topbar, fullscreen }: { topbar: boolean; fullscreen: boolean }) => {\n if (topbar || fullscreen) {\n return null;\n }\n\n return (\n <>\n <ToggleSidebarButton />\n <ToggleComplementarySidebarButton />\n </>\n );\n};\n\n//\n// PlankSeparator\n//\n\nconst PlankSeparator = ({ order, hidden, encapsulate }: { order: number; hidden?: boolean; encapsulate?: boolean }) =>\n order > 0 && (\n <span\n role='separator'\n className={mx('row-span-2 bg-deck-surface', hidden && 'hidden', encapsulate ? 'w-0' : 'w-4')}\n style={{ gridColumn: order }}\n />\n );\n\n//\n// PlankContainer\n//\n\ntype PlankContainerProps = Pick<PlankRootProps, 'layoutMode' | 'part' | 'settings'> &\n Pick<PlankComponentProps, 'id'> &\n Partial<Pick<PlankComponentProps, 'path' | 'order' | 'active'>> & {\n companionVariant?: string;\n };\n\n/**\n * Connected Plank that calls hooks and renders the radix-style Plank tree.\n * This is the bridge between DeckViewport (which knows about framework hooks) and\n * the pure Plank components (which receive everything via context).\n */\nconst PlankContainer = memo(\n ({ id, layoutMode, part, order, settings, companionVariant, active, ...props }: PlankContainerProps) => {\n const { graph } = useAppGraph();\n const { invokePromise } = useOperationInvoker();\n const { state, deck } = useDeckState();\n const node = useNode(graph, id);\n const companions = useCompanions(id);\n const isLastPlankInMulti =\n layoutMode === 'multi' && active && active.length > 0 && active[active.length - 1] === id;\n const variantForThisPlank =\n layoutMode === 'multi' ? (isLastPlankInMulti ? companionVariant : undefined) : companionVariant;\n const { companionId } = useSelectedCompanion(companions, variantForThisPlank);\n const resolvedCompanionId =\n layoutMode === 'multi' && isLastPlankInMulti && companions.length > 0\n ? companionId\n : variantForThisPlank\n ? companionId\n : undefined;\n const currentCompanion = companions.find(({ id }) => id === resolvedCompanionId);\n const hasCompanion = !!(resolvedCompanionId && currentCompanion);\n\n const handleAdjust = useCallback(\n (plankId: string, type: DeckOperation.PartAdjustment) => {\n if (type === 'close') {\n if (part === 'complementary') {\n return invokePromise(LayoutOperation.UpdateComplementary, { state: 'collapsed' });\n } else if (active) {\n // Close the plank and everything to the right (stack pop).\n const index = active.indexOf(plankId);\n const toClose = index !== -1 ? active.slice(index) : [plankId];\n return invokePromise(LayoutOperation.Close, { subject: toClose });\n } else {\n return invokePromise(LayoutOperation.Close, { subject: [plankId] });\n }\n } else {\n return invokePromise(DeckOperation.Adjust, { type, id: plankId });\n }\n },\n [invokePromise, part, active],\n );\n\n const handleResize = useCallback(\n (plankId: string, size: number) => invokePromise(DeckOperation.UpdatePlankSize, { id: plankId, size }),\n [invokePromise],\n );\n\n const handleScrollIntoView = useCallback(\n (subject?: string) => invokePromise(LayoutOperation.ScrollIntoView, { subject }),\n [invokePromise],\n );\n\n const handleUpdateCompanion = useCallback(\n (companion: string | null) => invokePromise(LayoutOperation.UpdateCompanion, { subject: companion }),\n [invokePromise],\n );\n\n return (\n <Plank.Root\n graph={graph}\n layoutMode={layoutMode}\n part={part}\n settings={settings}\n popoverAnchorId={state.popoverAnchorId}\n scrollIntoView={state.scrollIntoView}\n plankSizing={deck.plankSizing}\n onAdjust={handleAdjust}\n onResize={handleResize}\n onScrollIntoView={handleScrollIntoView}\n onUpdateCompanion={handleUpdateCompanion}\n >\n <Plank.Content solo={part === 'solo'} companion={hasCompanion} encapsulate={!!settings?.encapsulatedPlanks}>\n <Plank.Component\n {...props}\n active={active}\n id={id}\n node={node}\n companioned={hasCompanion ? 'primary' : undefined}\n companions={hasCompanion ? [] : companions}\n order={order}\n {...(part === 'solo'\n ? {\n part: 'solo-primary',\n }\n : {\n part,\n })}\n />\n {hasCompanion && (\n <Plank.Component\n {...props}\n active={active}\n id={resolvedCompanionId}\n node={currentCompanion}\n companions={companions}\n companioned='companion'\n primary={node}\n {...(part === 'solo'\n ? {\n order,\n part: 'solo-companion',\n }\n : {\n order: (order ?? 0) + 1,\n part,\n })}\n />\n )}\n </Plank.Content>\n </Plank.Root>\n );\n },\n);\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { DeckContent, DeckContentProps } from './DeckContent';\nimport { DeckRoot, DeckLayoutChangeRequest, DeckRootProps } from './DeckRoot';\nimport { DeckViewport, DeckMultiMode, DeckSoloMode, DeckViewportProps, DeckContentEmpty } from './DeckViewport';\n\n/**\n * Radix-style composite Deck component.\n */\nexport const Deck = {\n Root: DeckRoot,\n Content: DeckContent,\n Viewport: DeckViewport,\n ContentEmpty: DeckContentEmpty,\n MultiMode: DeckMultiMode,\n SoloMode: DeckSoloMode,\n};\n\nexport type { DeckLayoutChangeRequest, DeckRootProps, DeckContentProps, DeckViewportProps };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["React", "PlankLoading", "div", "className", "React", "useEffect", "useMemo", "useState", "TimeoutError", "log", "ErrorFallback", "useTranslation", "descriptionMessage", "mx", "meta", "React", "Fragment", "memo", "useCallback", "useEffect", "useMemo", "Surface", "AppSurface", "Graph", "useActionRunner", "Icon", "IconButton", "Popover", "toLocalizedString", "useTranslation", "getLinkedVariant", "StackItem", "TextTooltip", "hoverableControls", "hoverableFocusedWithinControls", "iconSize", "useBreakpoints", "meta", "PLANK_COMPANION_TYPE", "React", "forwardRef", "useCallback", "useOperationInvoker", "LayoutOperation", "ButtonGroup", "IconButton", "useTranslation", "meta", "plankControlSpacing", "PlankCompanionControls", "primary", "forwardedRef", "t", "id", "invokePromise", "handleCloseCompanion", "UpdateCompanion", "subject", "div", "ref", "className", "PlankControl", "label", "variant", "icon", "onClick", "classNames", "props", "iconOnly", "tooltipSide", "PlankControls", "children", "capabilities", "layoutMode", "pin", "close", "buttonClassNames", "layoutIsAnySolo", "startsWith", "deck", "solo", "disabled", "incrementStart", "incrementEnd", "fullscreen", "data-testid", "companion", "createContext", "React", "PLANK_NAME", "PlankProvider", "usePlankContext", "PlankRoot", "children", "context", "MAX_COMPANIONS", "PlankHeading", "memo", "id", "part", "node", "deckEnabled", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "primaryId", "pending", "companioned", "companions", "layoutMode", "actions", "debug", "t", "useTranslation", "meta", "graph", "onAdjust", "onUpdateCompanion", "usePlankContext", "runAction", "useActionRunner", "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", "getLinkedVariant", "undefined", "sigilActions", "getActions", "filter", "action", "includes", "disposition", "a", "handleAction", "useCallback", "data", "parent", "caller", "handlePlankAction", "eventType", "ActionRoot", "Popover", "Anchor", "Fragment", "handleTabClick", "event", "target", "closest", "tabId", "dataset", "React", "StackItem", "Heading", "data-tauri-drag-region", "data-plank-heading", "style", "iconSize", "classNames", "hoverableControls", "hoverableFocusedWithinControls", "div", "className", "map", "IconButton", "key", "data-id", "iconOnly", "onClick", "Sigil", "related", "triggerLabel", "onAction", "Surface", "AppSurface", "MenuFooter", "subject", "SigilButton", "span", "Icon", "TextTooltip", "text", "onlyWhenTruncating", "HeadingLabel", "NavbarEnd", "PlankCompanionControls", "primary", "PlankControls", "close", "PlankError", "useEffect", "timer", "setTimeout", "setTimedOut", "error", "useMemo", "TimeoutError", "message", "timedOut", "part", "node", "pending", "React", "PlankLoading", "meta", "log", "process", "title", "role", "className", "mx", "errorString", "useFocusFinders", "React", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "Surface", "AppSurface", "debounce", "getLinkedVariant", "useAttentionAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "useMainSize", "PLANK_COMPANION_TYPE", "smoothScrollTo", "element", "target", "duration", "start", "scrollLeft", "distance", "startTime", "performance", "now", "step", "currentTime", "elapsed", "progress", "Math", "min", "eased", "pow", "requestAnimationFrame", "DEFAULT_SIZE", "DEFAULT_COMPANION_SIZE", "PlankComponent", "memo", "part", "id", "path", "order", "active", "node", "primary", "companions", "companioned", "layoutMode", "settings", "popoverAnchorId", "scrollIntoView", "plankSizing", "onResize", "onScrollIntoView", "usePlankContext", "canResize", "findFirstFocusable", "useFocusFinders", "isCompanion", "attentionAttrs", "useAttentionAttributes", "orderId", "index", "findIndex", "entryId", "length", "isOrdered", "canIncrementStart", "canIncrementEnd", "rootElement", "useRef", "variant", "type", "PLANK_COMPANION_TYPE", "getLinkedVariant", "undefined", "sizeAttrs", "useMainSize", "sizeKey", "split", "size", "handleSizeChange", "useCallback", "debounce", "nextSize", "round", "handleKeyDown", "event", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "scrollParent", "elementRect", "getBoundingClientRect", "parentRect", "targetScrollLeft", "left", "isSolo", "startsWith", "isAttendable", "data", "useMemo", "attendableId", "subject", "companionTo", "properties", "placeholder", "React", "PlankLoading", "Root", "StackItem", "fullscreen", "classNames", "mainIntrinsicSize", "railGridHorizontal", "encapsulatedPlanks", "ref", "data-testid", "data-popover-collision-boundary", "tabIndex", "className", "mx", "role", "item", "onSizeChange", "onKeyDown", "PlankHeading", "deckEnabled", "enableDeck", "primaryId", "Surface", "AppSurface", "Article", "limit", "fallback", "PlankErrorFallback", "PlankError", "ResizeHandle", "React", "railGridHorizontal", "composable", "composableProps", "mainIntrinsicSize", "useMainSize", "PlankContent", "children", "solo", "companion", "encapsulate", "props", "forwardedRef", "sizeAttrs", "div", "role", "classNames", "data-popover-collision-boundary", "ref", "Plank", "Root", "PlankRoot", "Content", "PlankContent", "Component", "PlankComponent", "Heading", "PlankHeading", "Controls", "PlankControls", "React", "useCallback", "useOperationInvoker", "LayoutOperation", "IconButton", "useTranslation", "getLinkedVariant", "useDeckCompanions", "useDeckState", "meta", "ToggleSidebarButton", "classNames", "variant", "updateState", "t", "id", "handleClick", "state", "sidebarState", "icon", "iconOnly", "size", "label", "onClick", "CloseSidebarButton", "ToggleComplementarySidebarButton", "inR0", "current", "invokePromise", "companions", "nextState", "complementarySidebarState", "subject", "complementarySidebarPanel", "UpdateComplementary", "tooltipSide", "undefined", "React", "useCallback", "useEffect", "useMemo", "useState", "Surface", "useOperationInvoker", "LayoutOperation", "IconButton", "Main", "Panel", "toLocalizedString", "Toolbar", "useTranslation", "getLinkedVariant", "Tabs", "iconSize", "mx", "useBreakpoints", "useDeckCompanions", "useDeckState", "useHoistStatusbar", "meta", "getMode", "label", "ns", "meta", "id", "ComplementarySidebar", "current", "invokePromise", "useOperationInvoker", "t", "useTranslation", "state", "deck", "updateState", "useDeckState", "layoutMode", "getMode", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "companions", "useDeckCompanions", "activeCompanion", "find", "companion", "getLinkedVariant", "activeId", "internalValue", "setInternalValue", "useState", "useEffect", "handleTabClick", "useCallback", "event", "nextValue", "currentTarget", "getAttribute", "complementarySidebarState", "LayoutOperation", "UpdateComplementary", "subject", "data", "useMemo", "React", "Main", "classNames", "Tabs", "Root", "orientation", "value", "div", "data-tauri-drag-region", "style", "iconSize", "className", "mx", "Tablist", "map", "Tab", "key", "asChild", "IconButton", "toLocalizedString", "properties", "icon", "iconOnly", "tooltipSide", "data-value", "joyride", "variant", "onClick", "Surface", "role", "ToggleComplementarySidebarButton", "Panel", "inert", "ComplementarySidebarPanel", "Toolbar", "size", "Content", "fallback", "PlankErrorFallback", "placeholder", "PlankLoading", "Statusbar", "limit", "React", "useMemo", "Surface", "AppSurface", "Main", "useBreakpoints", "useDeckState", "useHoistStatusbar", "meta", "getMode", "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", "type", "AppSurface", "Navigation", "data", "limit", "React", "useCallback", "useEffect", "useRef", "AttentionCapabilities", "Main", "useMediaQuery", "useBreakpoints", "useHoistStatusbar", "React", "Surface", "useTranslation", "mx", "osTranslations", "meta", "Banner", "variant", "classNames", "t", "useTranslation", "meta", "id", "React", "header", "className", "mx", "CloseSidebarButton", "ToggleSidebarButton", "span", "ns", "osTranslations", "div", "Surface", "role", "limit", "createContext", "React", "DECK_NAME", "DECK_ROOT_NAME", "DeckProvider", "useDeckContext", "DeckRoot", "children", "context", "displayName", "React", "Surface", "useLandmarkMover", "StatusBar", "showHints", "mover", "undefined", "div", "role", "className", "limit", "DECK_CONTENT_NAME", "DeckContent", "children", "state", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "deck", "active", "fullscreen", "solo", "updateState", "layoutMode", "settings", "pluginManager", "onLayoutChange", "useDeckContext", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "useEffect", "attention", "capabilities", "get", "AttentionCapabilities", "Attention", "attended", "getCurrent", "firstId", "length", "document", "querySelector", "focus", "isNotMobile", "useMediaQuery", "shouldRevert", "useRef", "current", "subject", "mode", "revert", "enableDeck", "handleNavigationSidebarStateChange", "useCallback", "next", "s", "handleComplementarySidebarStateChange", "React", "Main", "Root", "navigationSidebarState", "onNavigationSidebarStateChange", "onComplementarySidebarStateChange", "Sidebar", "ComplementarySidebar", "Overlay", "Banner", "variant", "StatusBar", "showHints", "displayName", "React", "Fragment", "memo", "useCallback", "useEffect", "useMemo", "useRef", "Surface", "useOperationInvoker", "LayoutOperation", "useAppGraph", "addEventListener", "invariant", "useNode", "IconButton", "Main", "useOnTransition", "useTranslation", "DEFAULT_HORIZONTAL_SIZE", "Stack", "StackContext", "hoverableControls", "hoverableFocusedWithinControls", "mainPaddingTransitions", "mx", "useBreakpoints", "useCompanions", "useDeckState", "useHoistStatusbar", "useSelectedCompanion", "meta", "DeckOperation", "getMode", "__dxlog_file", "DECK_VIEWPORT_NAME", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "layoutMode", "hoistStatusbar", "useHoistStatusbar", "Content", "bounce", "handlesFocus", "classNames", "style", "complementarySidebarState", "plankSizing", "DEFAULT_HORIZONTAL_SIZE", "length", "children", "DeckViewport", "displayName", "deck", "useDeckState", "getMode", "className", "React", "role", "Surface", "ToggleSidebarButton", "companionOpen", "companionVariant", "effectiveCompanionVariant", "fullscreen", "undefined", "invariant", "solo", "useEffect", "preventDefault", "event", "stopPropagation", "onLayoutChange", "mode", "document", "DeckSidebarToggles", "onExit", "value", "orientation", "size", "rail", "id", "settings", "lastPlankId", "active", "deckRef", "useRef", "addEventListener", "restoreScroll", "useCallback", "current", "scrollLeftRef", "useOnTransition", "currentTarget", "scrollLeft", "acc", "entryId", "index", "itemsCount", "lastHasCompanions", "isLastPlank", "order", "mainPaddingTransitions", "onScroll", "ref", "key", "PlankSeparator", "hidden", "encapsulate", "sidebarToggleStyles", "ToggleComplementarySidebarButton", "ExitFullscreenButton", "meta", "IconButton", "label", "mx", "hoverableControls", "hoverableFocusedWithinControls", "iconOnly", "variant", "tooltipSide", "onClick", "gridColumn", "useOperationInvoker", "state", "node", "graph", "companions", "useCompanions", "isLastPlankInMulti", "variantForThisPlank", "useSelectedCompanion", "resolvedCompanionId", "companionId", "currentCompanion", "hasCompanion", "handleAdjust", "plankId", "type", "invokePromise", "LayoutOperation", "part", "popoverAnchorId", "scrollIntoView", "onAdjust", "onResize", "handleResize", "onScrollIntoView", "onUpdateCompanion", "companioned", "primary", "Deck", "Root", "DeckRoot", "Content", "DeckContent", "Viewport", "DeckViewport", "ContentEmpty", "DeckContentEmpty", "MultiMode", "DeckMultiMode", "SoloMode", "DeckSoloMode"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import {
|
|
2
|
+
__export
|
|
3
|
+
} from "./chunk-J5LGTIGS.mjs";
|
|
4
|
+
|
|
5
|
+
// src/types/schema.ts
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
import { Label, LayoutOperation } from "@dxos/app-toolkit";
|
|
8
|
+
import { meta } from "#meta";
|
|
9
|
+
import { PLANK_COMPANION_TYPE, DECK_COMPANION_TYPE } from "@dxos/app-toolkit";
|
|
10
|
+
var PlankSizing = Schema.Record({
|
|
11
|
+
key: Schema.String,
|
|
12
|
+
value: Schema.Number
|
|
13
|
+
});
|
|
14
|
+
var DeckState = Schema.Struct({
|
|
15
|
+
/** If false, the deck has not yet left solo mode and new planks should be soloed. */
|
|
16
|
+
initialized: Schema.Boolean,
|
|
17
|
+
/** Item IDs of planks currently displayed in multi-mode. */
|
|
18
|
+
active: Schema.mutable(Schema.Array(Schema.String)),
|
|
19
|
+
/** Item IDs of planks that have been closed; used for state persistence and reopening. */
|
|
20
|
+
inactive: Schema.mutable(Schema.Array(Schema.String)),
|
|
21
|
+
/** Item ID of the single plank displayed in solo or fullscreen mode. */
|
|
22
|
+
solo: Schema.optional(Schema.String),
|
|
23
|
+
/** Whether the solo plank is displayed in fullscreen mode (no heading or sidebars). */
|
|
24
|
+
fullscreen: Schema.Boolean,
|
|
25
|
+
/** Persisted plank widths in rem, keyed by item ID. */
|
|
26
|
+
plankSizing: Schema.mutable(PlankSizing),
|
|
27
|
+
/** Whether the companion pane is visible alongside the active plank(s). */
|
|
28
|
+
companionOpen: Schema.Boolean,
|
|
29
|
+
/** Which companion variant to display when the companion pane is open. */
|
|
30
|
+
companionVariant: Schema.optional(Schema.String),
|
|
31
|
+
/** Persisted companion frame widths in rem, keyed by frame ID. */
|
|
32
|
+
companionFrameSizing: Schema.mutable(PlankSizing)
|
|
33
|
+
});
|
|
34
|
+
var defaultDeck = {
|
|
35
|
+
initialized: false,
|
|
36
|
+
active: [],
|
|
37
|
+
inactive: [],
|
|
38
|
+
solo: void 0,
|
|
39
|
+
fullscreen: false,
|
|
40
|
+
plankSizing: {},
|
|
41
|
+
companionOpen: false,
|
|
42
|
+
companionVariant: void 0,
|
|
43
|
+
companionFrameSizing: {}
|
|
44
|
+
};
|
|
45
|
+
var LayoutMode = Schema.Literal("multi", "solo", "solo--fullscreen");
|
|
46
|
+
var isLayoutMode = (value) => Schema.is(LayoutMode)(value);
|
|
47
|
+
var getMode = (deck) => {
|
|
48
|
+
if (deck.solo) {
|
|
49
|
+
return deck.fullscreen ? "solo--fullscreen" : "solo";
|
|
50
|
+
}
|
|
51
|
+
return "multi";
|
|
52
|
+
};
|
|
53
|
+
var StoredDeckState = Schema.Struct({
|
|
54
|
+
sidebarState: Schema.Literal("closed", "collapsed", "expanded"),
|
|
55
|
+
complementarySidebarState: Schema.Literal("closed", "collapsed", "expanded"),
|
|
56
|
+
complementarySidebarPanel: Schema.optional(Schema.String),
|
|
57
|
+
activeDeck: Schema.String,
|
|
58
|
+
previousDeck: Schema.String,
|
|
59
|
+
decks: Schema.mutable(Schema.Record({
|
|
60
|
+
key: Schema.String,
|
|
61
|
+
value: Schema.mutable(DeckState)
|
|
62
|
+
})),
|
|
63
|
+
previousMode: Schema.mutable(Schema.Record({
|
|
64
|
+
key: Schema.String,
|
|
65
|
+
value: LayoutMode
|
|
66
|
+
}))
|
|
67
|
+
}).pipe(Schema.mutable);
|
|
68
|
+
var EphemeralDeckState = Schema.Struct({
|
|
69
|
+
dialogOpen: Schema.Boolean,
|
|
70
|
+
dialogType: Schema.optional(Schema.Literal("default", "alert")),
|
|
71
|
+
dialogBlockAlign: Schema.optional(Schema.Literal("start", "center", "end")),
|
|
72
|
+
dialogOverlayClasses: Schema.optional(Schema.String),
|
|
73
|
+
dialogOverlayStyle: Schema.optional(Schema.Record({
|
|
74
|
+
key: Schema.String,
|
|
75
|
+
value: Schema.Any
|
|
76
|
+
})),
|
|
77
|
+
/** Data to be passed to the dialog Surface. */
|
|
78
|
+
dialogContent: Schema.NullOr(Schema.Struct({
|
|
79
|
+
component: Schema.String,
|
|
80
|
+
props: Schema.optional(Schema.Any)
|
|
81
|
+
})),
|
|
82
|
+
popoverOpen: Schema.Boolean,
|
|
83
|
+
popoverSide: Schema.optional(Schema.Literal("top", "right", "bottom", "left")),
|
|
84
|
+
popoverAnchor: Schema.optional(Schema.Any),
|
|
85
|
+
popoverAnchorId: Schema.optional(Schema.String),
|
|
86
|
+
popoverKind: Schema.optional(Schema.Literal("base", "card")),
|
|
87
|
+
popoverTitle: Schema.optional(Label.annotations({
|
|
88
|
+
description: "The title of the popover."
|
|
89
|
+
})),
|
|
90
|
+
/** Ref of the subject to be passed to the popover Surface. */
|
|
91
|
+
popoverContentRef: Schema.optional(Schema.String),
|
|
92
|
+
/** Data to be passed to the popover Surface. */
|
|
93
|
+
popoverContent: Schema.NullOr(Schema.Union(Schema.Struct({
|
|
94
|
+
component: Schema.String,
|
|
95
|
+
props: Schema.optional(Schema.Any)
|
|
96
|
+
}), Schema.Struct({
|
|
97
|
+
subject: Schema.Any
|
|
98
|
+
}))),
|
|
99
|
+
toasts: Schema.mutable(Schema.Array(LayoutOperation.Toast)),
|
|
100
|
+
currentUndoId: Schema.optional(Schema.String),
|
|
101
|
+
/** The identifier of a component to scroll into view when it is mounted. */
|
|
102
|
+
scrollIntoView: Schema.optional(Schema.String)
|
|
103
|
+
}).pipe(Schema.mutable);
|
|
104
|
+
(function(DeckAction2) {
|
|
105
|
+
const PartAdjustmentSchema2 = Schema.Union(Schema.Literal("close").annotations({
|
|
106
|
+
description: "Close the plank."
|
|
107
|
+
}), Schema.Literal("companion").annotations({
|
|
108
|
+
description: "Open the companion plank."
|
|
109
|
+
}), Schema.Literal("solo").annotations({
|
|
110
|
+
description: "Solo the plank."
|
|
111
|
+
}), Schema.Literal("solo--fullscreen").annotations({
|
|
112
|
+
description: "Fullscreen the plank."
|
|
113
|
+
}), Schema.Literal("increment-start").annotations({
|
|
114
|
+
description: "Move the plank towards the start of the deck."
|
|
115
|
+
}), Schema.Literal("increment-end").annotations({
|
|
116
|
+
description: "Move the plank towards the end of the deck."
|
|
117
|
+
}));
|
|
118
|
+
DeckAction2.Adjustment = Schema.mutable(Schema.Struct({
|
|
119
|
+
id: Schema.String,
|
|
120
|
+
type: PartAdjustmentSchema2
|
|
121
|
+
}));
|
|
122
|
+
class Adjust2 extends Schema.TaggedClass()(`${meta.id}.action.adjust`, {
|
|
123
|
+
input: DeckAction2.Adjustment,
|
|
124
|
+
output: Schema.Void
|
|
125
|
+
}) {
|
|
126
|
+
}
|
|
127
|
+
DeckAction2.Adjust = Adjust2;
|
|
128
|
+
class UpdatePlankSize2 extends Schema.TaggedClass()(`${meta.id}.action.update-plank-size`, {
|
|
129
|
+
input: Schema.Struct({
|
|
130
|
+
id: Schema.String,
|
|
131
|
+
size: Schema.Number
|
|
132
|
+
}),
|
|
133
|
+
output: Schema.Void
|
|
134
|
+
}) {
|
|
135
|
+
}
|
|
136
|
+
DeckAction2.UpdatePlankSize = UpdatePlankSize2;
|
|
137
|
+
})(DeckAction || (DeckAction = {}));
|
|
138
|
+
var DeckAction;
|
|
139
|
+
|
|
140
|
+
// src/types/DeckCapabilities.ts
|
|
141
|
+
var DeckCapabilities_exports = {};
|
|
142
|
+
__export(DeckCapabilities_exports, {
|
|
143
|
+
EphemeralState: () => EphemeralState,
|
|
144
|
+
Settings: () => Settings,
|
|
145
|
+
State: () => State,
|
|
146
|
+
getDeck: () => getDeck
|
|
147
|
+
});
|
|
148
|
+
import * as Effect from "effect/Effect";
|
|
149
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
150
|
+
import { invariant } from "@dxos/invariant";
|
|
151
|
+
import { meta as meta2 } from "#meta";
|
|
152
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/types/DeckCapabilities.ts";
|
|
153
|
+
var Settings = Capability.make(`${meta2.id}.capability.settings`);
|
|
154
|
+
var State = Capability.make(`${meta2.id}.capability.state`);
|
|
155
|
+
var EphemeralState = Capability.make(`${meta2.id}.capability.ephemeral-state`);
|
|
156
|
+
var getDeck = () => Effect.gen(function* () {
|
|
157
|
+
const state = yield* Capabilities.getAtomValue(State);
|
|
158
|
+
const deck = state.decks[state.activeDeck];
|
|
159
|
+
invariant(deck, `Deck not found: ${state.activeDeck}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 15, S: this, A: ["deck", "`Deck not found: ${state.activeDeck}`"] });
|
|
160
|
+
return deck;
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
// src/types/DeckEvents.ts
|
|
164
|
+
var DeckEvents_exports = {};
|
|
165
|
+
__export(DeckEvents_exports, {
|
|
166
|
+
SettingsReady: () => SettingsReady,
|
|
167
|
+
StateReady: () => StateReady
|
|
168
|
+
});
|
|
169
|
+
import { AppActivationEvents } from "@dxos/app-toolkit";
|
|
170
|
+
import { meta as meta3 } from "#meta";
|
|
171
|
+
var StateReady = AppActivationEvents.createStateEvent(`${meta3.id}.state-ready`);
|
|
172
|
+
var SettingsReady = AppActivationEvents.createSettingsEvent(Settings.identifier);
|
|
173
|
+
|
|
174
|
+
// src/types/DeckOperation.ts
|
|
175
|
+
var DeckOperation_exports = {};
|
|
176
|
+
__export(DeckOperation_exports, {
|
|
177
|
+
Adjust: () => Adjust,
|
|
178
|
+
UpdatePlankSize: () => UpdatePlankSize
|
|
179
|
+
});
|
|
180
|
+
import * as Schema2 from "effect/Schema";
|
|
181
|
+
import { Capability as Capability2 } from "@dxos/app-framework";
|
|
182
|
+
import { Operation } from "@dxos/compute";
|
|
183
|
+
import { meta as meta4 } from "#meta";
|
|
184
|
+
var PartAdjustmentSchema = Schema2.Union(Schema2.Literal("close").annotations({
|
|
185
|
+
description: "Close the plank."
|
|
186
|
+
}), Schema2.Literal("companion").annotations({
|
|
187
|
+
description: "Open the companion plank."
|
|
188
|
+
}), Schema2.Literal("solo").annotations({
|
|
189
|
+
description: "Solo the plank."
|
|
190
|
+
}), Schema2.Literal("solo--fullscreen").annotations({
|
|
191
|
+
description: "Fullscreen the plank."
|
|
192
|
+
}), Schema2.Literal("increment-start").annotations({
|
|
193
|
+
description: "Move the plank towards the start of the deck."
|
|
194
|
+
}), Schema2.Literal("increment-end").annotations({
|
|
195
|
+
description: "Move the plank towards the end of the deck."
|
|
196
|
+
}));
|
|
197
|
+
var Adjust = Operation.make({
|
|
198
|
+
meta: {
|
|
199
|
+
key: `${meta4.id}.operation.adjust`,
|
|
200
|
+
name: "Adjust",
|
|
201
|
+
description: "Adjust the layout of a plank."
|
|
202
|
+
},
|
|
203
|
+
services: [
|
|
204
|
+
Capability2.Service
|
|
205
|
+
],
|
|
206
|
+
input: Schema2.Struct({
|
|
207
|
+
id: Schema2.String.annotations({
|
|
208
|
+
description: "The id of the plank to adjust."
|
|
209
|
+
}),
|
|
210
|
+
type: PartAdjustmentSchema.annotations({
|
|
211
|
+
description: "The type of adjustment to make."
|
|
212
|
+
})
|
|
213
|
+
}),
|
|
214
|
+
output: Schema2.Void
|
|
215
|
+
});
|
|
216
|
+
var UpdatePlankSize = Operation.make({
|
|
217
|
+
meta: {
|
|
218
|
+
key: `${meta4.id}.operation.update-plank-size`,
|
|
219
|
+
name: "Update Plank Size",
|
|
220
|
+
description: "Update the size of a plank."
|
|
221
|
+
},
|
|
222
|
+
services: [
|
|
223
|
+
Capability2.Service
|
|
224
|
+
],
|
|
225
|
+
input: Schema2.Struct({
|
|
226
|
+
id: Schema2.String.annotations({
|
|
227
|
+
description: "The id of the plank to resize."
|
|
228
|
+
}),
|
|
229
|
+
size: Schema2.Number.annotations({
|
|
230
|
+
description: "The new size of the plank."
|
|
231
|
+
})
|
|
232
|
+
}),
|
|
233
|
+
output: Schema2.Void
|
|
234
|
+
});
|
|
235
|
+
|
|
236
|
+
// src/types/Settings.ts
|
|
237
|
+
var Settings_exports = {};
|
|
238
|
+
__export(Settings_exports, {
|
|
239
|
+
Settings: () => Settings2
|
|
240
|
+
});
|
|
241
|
+
import * as Schema3 from "effect/Schema";
|
|
242
|
+
var Settings2 = Schema3.Struct({
|
|
243
|
+
enableDeck: Schema3.optional(Schema3.Boolean.annotations({
|
|
244
|
+
title: "Enable Deck",
|
|
245
|
+
description: "Display multiple panels side by side instead of one at a time."
|
|
246
|
+
})),
|
|
247
|
+
// TODO(burdon): Rename layoutMode? (e.g., bento | encapsulated?)
|
|
248
|
+
encapsulatedPlanks: Schema3.optional(Schema3.Boolean.annotations({
|
|
249
|
+
title: "Encapsulated planks",
|
|
250
|
+
description: "Render each plank inside its own isolated container."
|
|
251
|
+
})),
|
|
252
|
+
enableStatusbar: Schema3.optional(Schema3.Boolean.annotations({
|
|
253
|
+
title: "Show status bar",
|
|
254
|
+
description: "Display a status bar at the bottom of the application."
|
|
255
|
+
})),
|
|
256
|
+
showHints: Schema3.optional(Schema3.Boolean.annotations({
|
|
257
|
+
title: "Show hints",
|
|
258
|
+
description: "Show helpful tips and keyboard shortcut hints in the interface."
|
|
259
|
+
})),
|
|
260
|
+
enableNativeRedirect: Schema3.optional(Schema3.Boolean.annotations({
|
|
261
|
+
title: "Enable native url redirect",
|
|
262
|
+
description: "Redirect supported URLs to the native desktop application."
|
|
263
|
+
}))
|
|
264
|
+
}).pipe(Schema3.mutable);
|
|
265
|
+
|
|
266
|
+
export {
|
|
267
|
+
PlankSizing,
|
|
268
|
+
DeckState,
|
|
269
|
+
defaultDeck,
|
|
270
|
+
isLayoutMode,
|
|
271
|
+
getMode,
|
|
272
|
+
StoredDeckState,
|
|
273
|
+
EphemeralDeckState,
|
|
274
|
+
DeckAction,
|
|
275
|
+
PLANK_COMPANION_TYPE,
|
|
276
|
+
DECK_COMPANION_TYPE,
|
|
277
|
+
DeckCapabilities_exports,
|
|
278
|
+
DeckEvents_exports,
|
|
279
|
+
DeckOperation_exports,
|
|
280
|
+
Settings_exports
|
|
281
|
+
};
|
|
282
|
+
//# sourceMappingURL=chunk-64ODQD6S.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/schema.ts", "../../../src/types/DeckCapabilities.ts", "../../../src/types/DeckEvents.ts", "../../../src/types/DeckOperation.ts", "../../../src/types/Settings.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { Label, LayoutOperation } from '@dxos/app-toolkit';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nexport { PLANK_COMPANION_TYPE, DECK_COMPANION_TYPE } from '@dxos/app-toolkit';\n\nexport type Part = 'solo' | 'multi' | 'complementary';\nexport type ResolvedPart = Part | 'solo-primary' | 'solo-companion';\n\nexport const PlankSizing = Schema.Record({ key: Schema.String, value: Schema.Number });\nexport type PlankSizing = Schema.Schema.Type<typeof PlankSizing>;\n\nexport const DeckState = Schema.Struct({\n /** If false, the deck has not yet left solo mode and new planks should be soloed. */\n initialized: Schema.Boolean,\n /** Item IDs of planks currently displayed in multi-mode. */\n active: Schema.mutable(Schema.Array(Schema.String)),\n /** Item IDs of planks that have been closed; used for state persistence and reopening. */\n inactive: Schema.mutable(Schema.Array(Schema.String)),\n /** Item ID of the single plank displayed in solo or fullscreen mode. */\n solo: Schema.optional(Schema.String),\n /** Whether the solo plank is displayed in fullscreen mode (no heading or sidebars). */\n fullscreen: Schema.Boolean,\n /** Persisted plank widths in rem, keyed by item ID. */\n plankSizing: Schema.mutable(PlankSizing),\n /** Whether the companion pane is visible alongside the active plank(s). */\n companionOpen: Schema.Boolean,\n /** Which companion variant to display when the companion pane is open. */\n companionVariant: Schema.optional(Schema.String),\n /** Persisted companion frame widths in rem, keyed by frame ID. */\n companionFrameSizing: Schema.mutable(PlankSizing),\n});\nexport type DeckState = Schema.Schema.Type<typeof DeckState>;\n\nexport const defaultDeck: DeckState = {\n initialized: false,\n active: [],\n inactive: [],\n solo: undefined,\n fullscreen: false,\n plankSizing: {},\n companionOpen: false,\n companionVariant: undefined,\n companionFrameSizing: {},\n};\n\n//\n// Layout\n//\n\nconst LayoutMode = Schema.Literal('multi', 'solo', 'solo--fullscreen');\nexport type LayoutMode = Schema.Schema.Type<typeof LayoutMode>;\nexport const isLayoutMode = (value: any): value is LayoutMode => Schema.is(LayoutMode)(value);\nexport const getMode = (deck: DeckState | DeepReadonly<DeckState>): LayoutMode => {\n if (deck.solo) {\n return deck.fullscreen ? 'solo--fullscreen' : 'solo';\n }\n\n return 'multi';\n};\n\n// Persisted plugin state (stored in KVS/localStorage).\nexport const StoredDeckState = Schema.Struct({\n sidebarState: Schema.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarState: Schema.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarPanel: Schema.optional(Schema.String),\n activeDeck: Schema.String,\n previousDeck: Schema.String,\n decks: Schema.mutable(Schema.Record({ key: Schema.String, value: Schema.mutable(DeckState) })),\n previousMode: Schema.mutable(Schema.Record({ key: Schema.String, value: LayoutMode })),\n}).pipe(Schema.mutable);\nexport type StoredDeckState = Schema.Schema.Type<typeof StoredDeckState>;\n\n// Transient/ephemeral plugin state (not persisted).\nexport const EphemeralDeckState = Schema.Struct({\n dialogOpen: Schema.Boolean,\n dialogType: Schema.optional(Schema.Literal('default', 'alert')),\n dialogBlockAlign: Schema.optional(Schema.Literal('start', 'center', 'end')),\n dialogOverlayClasses: Schema.optional(Schema.String),\n dialogOverlayStyle: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n /** Data to be passed to the dialog Surface. */\n dialogContent: Schema.NullOr(Schema.Struct({ component: Schema.String, props: Schema.optional(Schema.Any) })),\n popoverOpen: Schema.Boolean,\n popoverSide: Schema.optional(Schema.Literal('top', 'right', 'bottom', 'left')),\n popoverAnchor: Schema.optional(Schema.Any),\n popoverAnchorId: Schema.optional(Schema.String),\n popoverKind: Schema.optional(Schema.Literal('base', 'card')),\n popoverTitle: Schema.optional(Label.annotations({ description: 'The title of the popover.' })),\n /** Ref of the subject to be passed to the popover Surface. */\n popoverContentRef: Schema.optional(Schema.String),\n /** Data to be passed to the popover Surface. */\n popoverContent: Schema.NullOr(\n Schema.Union(\n Schema.Struct({ component: Schema.String, props: Schema.optional(Schema.Any) }),\n Schema.Struct({ subject: Schema.Any }),\n ),\n ),\n toasts: Schema.mutable(Schema.Array(LayoutOperation.Toast)),\n currentUndoId: Schema.optional(Schema.String),\n /** The identifier of a component to scroll into view when it is mounted. */\n scrollIntoView: Schema.optional(Schema.String),\n}).pipe(Schema.mutable);\nexport type EphemeralDeckState = Schema.Schema.Type<typeof EphemeralDeckState>;\n\n// Combined state type (for convenience in components that need both).\nexport type DeckPluginState = StoredDeckState & EphemeralDeckState;\n\nexport namespace DeckAction {\n const PartAdjustmentSchema = Schema.Union(\n Schema.Literal('close').annotations({ description: 'Close the plank.' }),\n Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),\n Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),\n Schema.Literal('solo--fullscreen').annotations({ description: 'Fullscreen the plank.' }),\n Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),\n Schema.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),\n );\n export type PartAdjustment = Schema.Schema.Type<typeof PartAdjustmentSchema>;\n export const Adjustment = Schema.mutable(Schema.Struct({ id: Schema.String, type: PartAdjustmentSchema }));\n export type Adjustment = Schema.Schema.Type<typeof Adjustment>;\n\n // An atomic transaction to apply to the deck, describing which element to move to which location.\n export class Adjust extends Schema.TaggedClass<Adjust>()(`${meta.id}.action.adjust`, {\n input: Adjustment,\n output: Schema.Void,\n }) {}\n\n export class UpdatePlankSize extends Schema.TaggedClass<UpdatePlankSize>()(`${meta.id}.action.update-plank-size`, {\n input: Schema.Struct({\n id: Schema.String,\n size: Schema.Number,\n }),\n output: Schema.Void,\n }) {}\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\n\nimport { meta } from '#meta';\n\nimport { type EphemeralDeckState, type DeckState, type StoredDeckState } from './schema';\n\nexport const Settings = Capability.make<Atom.Writable<import('./Settings').Settings>>(`${meta.id}.capability.settings`);\n\n/** Persisted state (stored in KVS/localStorage). */\nexport const State = Capability.make<Atom.Writable<StoredDeckState>>(`${meta.id}.capability.state`);\n\n/** Transient/ephemeral state (not persisted). */\nexport const EphemeralState = Capability.make<Atom.Writable<EphemeralDeckState>>(\n `${meta.id}.capability.ephemeral-state`,\n);\n\n/** Get the current active deck from state. */\nexport const getDeck = (): Effect.Effect<DeckState, Error, Capability.Service> =>\n Effect.gen(function* () {\n const state = yield* Capabilities.getAtomValue(State);\n const deck = state.decks[state.activeDeck];\n invariant(deck, `Deck not found: ${state.activeDeck}`);\n return deck;\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { meta } from '#meta';\n\nimport * as DeckCapabilities from './DeckCapabilities';\n\nexport const StateReady: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(\n `${meta.id}.state-ready`,\n);\n\n/** Fired when DeckSettings capability is ready. */\nexport const SettingsReady: ActivationEvent.ActivationEvent = AppActivationEvents.createSettingsEvent(\n DeckCapabilities.Settings.identifier,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\n\nimport { meta } from '#meta';\n\nconst PartAdjustmentSchema = Schema.Union(\n Schema.Literal('close').annotations({ description: 'Close the plank.' }),\n Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),\n Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),\n Schema.Literal('solo--fullscreen').annotations({ description: 'Fullscreen the plank.' }),\n Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),\n Schema.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),\n);\n\nexport type PartAdjustment = Schema.Schema.Type<typeof PartAdjustmentSchema>;\n\nexport const Adjust = Operation.make({\n meta: {\n key: `${meta.id}.operation.adjust`,\n name: 'Adjust',\n description: 'Adjust the layout of a plank.',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n id: Schema.String.annotations({ description: 'The id of the plank to adjust.' }),\n type: PartAdjustmentSchema.annotations({ description: 'The type of adjustment to make.' }),\n }),\n output: Schema.Void,\n});\n\nexport const UpdatePlankSize = Operation.make({\n meta: {\n key: `${meta.id}.operation.update-plank-size`,\n name: 'Update Plank Size',\n description: 'Update the size of a plank.',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n id: Schema.String.annotations({ description: 'The id of the plank to resize.' }),\n size: Schema.Number.annotations({ description: 'The new size of the plank.' }),\n }),\n output: Schema.Void,\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nexport const Settings = Schema.Struct({\n enableDeck: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Enable Deck',\n description: 'Display multiple panels side by side instead of one at a time.',\n }),\n ),\n // TODO(burdon): Rename layoutMode? (e.g., bento | encapsulated?)\n encapsulatedPlanks: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Encapsulated planks',\n description: 'Render each plank inside its own isolated container.',\n }),\n ),\n enableStatusbar: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Show status bar',\n description: 'Display a status bar at the bottom of the application.',\n }),\n ),\n showHints: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Show hints',\n description: 'Show helpful tips and keyboard shortcut hints in the interface.',\n }),\n ),\n enableNativeRedirect: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Enable native url redirect',\n description: 'Redirect supported URLs to the native desktop application.',\n }),\n ),\n}).pipe(Schema.mutable);\nexport interface Settings extends Schema.Schema.Type<typeof Settings> {}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Schema", "Label", "LayoutOperation", "meta", "PLANK_COMPANION_TYPE", "DECK_COMPANION_TYPE", "PlankSizing", "Record", "key", "String", "value", "Number", "DeckState", "Struct", "initialized", "Boolean", "active", "mutable", "Array", "inactive", "solo", "optional", "fullscreen", "plankSizing", "companionOpen", "companionVariant", "companionFrameSizing", "defaultDeck", "undefined", "LayoutMode", "Literal", "isLayoutMode", "is", "getMode", "deck", "StoredDeckState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "activeDeck", "previousDeck", "decks", "previousMode", "pipe", "EphemeralDeckState", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "Any", "dialogContent", "NullOr", "component", "props", "popoverOpen", "popoverSide", "popoverAnchor", "popoverAnchorId", "popoverKind", "popoverTitle", "annotations", "description", "popoverContentRef", "popoverContent", "Union", "subject", "toasts", "Toast", "currentUndoId", "scrollIntoView", "DeckAction", "PartAdjustmentSchema", "Adjustment", "id", "type", "Adjust", "TaggedClass", "input", "output", "Void", "UpdatePlankSize", "size", "Effect", "Capabilities", "Capability", "invariant", "meta", "Settings", "EphemeralState", "getDeck", "State", "deck", "activeDeck", "AppActivationEvents", "meta", "StateReady", "AppActivationEvents", "createStateEvent", "meta", "id", "SettingsReady", "createSettingsEvent", "Settings", "identifier", "Schema", "Capability", "Operation", "meta", "PartAdjustmentSchema", "Union", "Literal", "annotations", "description", "Adjust", "make", "key", "id", "name", "services", "Service", "input", "Struct", "String", "type", "output", "Void", "UpdatePlankSize", "size", "Number", "Settings", "Schema", "Struct", "enableDeck", "optional", "Boolean", "annotations", "title", "description", "encapsulatedPlanks", "enableStatusbar", "showHints", "enableNativeRedirect", "pipe", "mutable"]
|
|
7
|
+
}
|