@dxos/plugin-deck 0.8.4-main.422d1c7879 → 0.8.4-main.4f23b4e393
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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/{browser/add-toast-EUN62IUE.mjs → neutral/add-toast-2OMTFZ2L.mjs} +5 -5
- package/dist/lib/{browser/add-toast-EUN62IUE.mjs.map → neutral/add-toast-2OMTFZ2L.mjs.map} +2 -2
- package/dist/lib/{browser/adjust-XWB6ZZ6U.mjs → neutral/adjust-RXTF3IT3.mjs} +15 -17
- 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/{browser/chunk-KUTDCWZF.mjs → neutral/chunk-GLB73Q6U.mjs} +2 -10
- package/dist/lib/{browser/chunk-KUTDCWZF.mjs.map → neutral/chunk-GLB73Q6U.mjs.map} +2 -2
- package/dist/lib/neutral/chunk-JMYWDX4I.mjs +19 -0
- package/dist/lib/neutral/chunk-JMYWDX4I.mjs.map +7 -0
- package/dist/lib/neutral/chunk-VHETZ22W.mjs +101 -0
- package/dist/lib/neutral/chunk-VHETZ22W.mjs.map +7 -0
- package/dist/lib/{browser/chunk-DF2VZ6W3.mjs → neutral/chunk-ZYYOSX5I.mjs} +1 -1
- package/dist/lib/{browser/chunk-DF2VZ6W3.mjs.map → neutral/chunk-ZYYOSX5I.mjs.map} +2 -2
- package/dist/lib/{browser/close-JXK73YIM.mjs → neutral/close-DG5IVQCE.mjs} +12 -12
- package/dist/lib/{browser/close-JXK73YIM.mjs.map → neutral/close-DG5IVQCE.mjs.map} +2 -2
- 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/neutral/hooks/index.mjs +178 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/{node-esm/types → neutral}/index.mjs +13 -8
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +8 -0
- package/dist/lib/{browser/open-K2JOEW2E.mjs → neutral/open-SGYZO7RF.mjs} +21 -24
- 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/neutral/react-root-WZ6KH27J.mjs +41 -0
- 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/{browser/revert-workspace-BNIR5U64.mjs → neutral/revert-workspace-V6D7W6CL.mjs} +5 -5
- package/dist/lib/{browser/revert-workspace-BNIR5U64.mjs.map → neutral/revert-workspace-V6D7W6CL.mjs.map} +2 -2
- package/dist/lib/{browser/scroll-into-view-4GSKC3GA.mjs → neutral/scroll-into-view-UM446Q2T.mjs} +5 -5
- package/dist/lib/{browser/scroll-into-view-4GSKC3GA.mjs.map → neutral/scroll-into-view-UM446Q2T.mjs.map} +2 -2
- package/dist/lib/{browser/set-XCG6NIAO.mjs → neutral/set-JFFKT32S.mjs} +11 -11
- package/dist/lib/{browser/set-XCG6NIAO.mjs.map → neutral/set-JFFKT32S.mjs.map} +2 -2
- package/dist/lib/{browser/set-layout-mode-BEVNGOY2.mjs → neutral/set-layout-mode-I4YV5V2Y.mjs} +10 -15
- package/dist/lib/neutral/set-layout-mode-I4YV5V2Y.mjs.map +7 -0
- package/dist/lib/neutral/settings-FE7AC5VS.mjs +34 -0
- package/dist/lib/neutral/settings-FE7AC5VS.mjs.map +7 -0
- package/dist/lib/{browser/show-undo-5RQNREEB.mjs → neutral/show-undo-ZCMF4J2Q.mjs} +5 -5
- package/dist/lib/{browser/show-undo-5RQNREEB.mjs.map → neutral/show-undo-ZCMF4J2Q.mjs.map} +2 -2
- package/dist/lib/neutral/state-IIDXMQUO.mjs +86 -0
- package/dist/lib/neutral/state-IIDXMQUO.mjs.map +7 -0
- package/dist/lib/{browser/switch-workspace-ICJJWNFT.mjs → neutral/switch-workspace-CVDYG5YZ.mjs} +8 -16
- 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/{browser → neutral}/types/index.mjs +7 -5
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/lib/{browser/update-companion-VPCBH3YT.mjs → neutral/update-companion-VPCM7FJX.mjs} +7 -7
- package/dist/lib/neutral/update-companion-VPCM7FJX.mjs.map +7 -0
- package/dist/lib/{browser/update-complementary-74DEQY6T.mjs → neutral/update-complementary-SEQ6DDWA.mjs} +6 -6
- package/dist/lib/neutral/update-complementary-SEQ6DDWA.mjs.map +7 -0
- package/dist/lib/{browser/update-dialog-6TDUYI5R.mjs → neutral/update-dialog-VDHYE4QH.mjs} +5 -5
- package/dist/lib/{browser/update-dialog-6TDUYI5R.mjs.map → neutral/update-dialog-VDHYE4QH.mjs.map} +2 -2
- 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/{browser/update-popover-W7E2Z5T6.mjs → neutral/update-popover-VFP32W57.mjs} +5 -5
- package/dist/lib/{browser/update-popover-W7E2Z5T6.mjs.map → neutral/update-popover-VFP32W57.mjs.map} +2 -2
- package/dist/lib/{browser/update-sidebar-H3A6ZFRU.mjs → neutral/update-sidebar-O5HBOXYH.mjs} +6 -6
- package/dist/lib/{browser/update-sidebar-H3A6ZFRU.mjs.map → neutral/update-sidebar-O5HBOXYH.mjs.map} +2 -2
- 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 -1
- package/dist/types/src/capabilities/check-app-scheme.d.ts +1 -1
- package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +17 -17
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +16 -16
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/tools.d.ts.map +1 -1
- package/dist/types/src/capabilities/url-handler.d.ts +1 -1
- package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
- package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts +42 -52
- package/dist/types/src/components/DeckSettings/DeckSettings.stories.d.ts.map +1 -1
- package/dist/types/src/components/Matrix/Matrix.d.ts +2 -2
- package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -1
- package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/Banner.d.ts +1 -1
- package/dist/types/src/containers/Deck/Banner.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/Deck.stories.d.ts +42 -52
- package/dist/types/src/containers/Deck/Deck.stories.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/DeckContent.d.ts +4 -4
- package/dist/types/src/containers/Deck/DeckContent.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/DeckRoot.d.ts +5 -8
- package/dist/types/src/containers/Deck/DeckRoot.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/DeckViewport.d.ts +4 -7
- package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/StatusBar.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/DeckLayout.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +42 -52
- package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/Popover.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/Toast.d.ts +1 -1
- package/dist/types/src/containers/DeckLayout/Toast.d.ts.map +1 -1
- package/dist/types/src/containers/DeckLayout/index.d.ts.map +1 -1
- package/dist/types/src/containers/Plank/Plank.d.ts +1 -1
- package/dist/types/src/containers/Plank/Plank.d.ts.map +1 -1
- package/dist/types/src/containers/Plank/Plank.stories.d.ts +42 -52
- package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +1 -1
- package/dist/types/src/containers/Plank/PlankContent.d.ts +1 -1
- package/dist/types/src/containers/Plank/PlankError.d.ts +1 -1
- package/dist/types/src/containers/Plank/PlankError.d.ts.map +1 -1
- package/dist/types/src/containers/Plank/PlankRoot.d.ts +1 -1
- package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +1 -1
- package/dist/types/src/containers/Sidebar/ComplementarySidebar.d.ts.map +1 -1
- package/dist/types/src/containers/Sidebar/SidebarButton.d.ts +1 -1
- package/dist/types/src/containers/Sidebar/SidebarButton.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 +1 -1
- package/dist/types/src/hooks/useDeckCompanions.d.ts.map +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.map +1 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/add-toast.d.ts +1 -1
- package/dist/types/src/operations/add-toast.d.ts.map +1 -1
- package/dist/types/src/operations/adjust.d.ts +3 -3
- package/dist/types/src/operations/adjust.d.ts.map +1 -1
- package/dist/types/src/operations/close.d.ts +1 -1
- package/dist/types/src/operations/close.d.ts.map +1 -1
- package/dist/types/src/operations/helpers.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +1 -2
- package/dist/types/src/operations/index.d.ts.map +1 -1
- package/dist/types/src/operations/open.d.ts +1 -1
- package/dist/types/src/operations/open.d.ts.map +1 -1
- package/dist/types/src/operations/revert-workspace.d.ts +1 -1
- package/dist/types/src/operations/revert-workspace.d.ts.map +1 -1
- package/dist/types/src/operations/scroll-into-view.d.ts +1 -1
- package/dist/types/src/operations/scroll-into-view.d.ts.map +1 -1
- package/dist/types/src/operations/set-layout-mode.d.ts +1 -1
- package/dist/types/src/operations/set-layout-mode.d.ts.map +1 -1
- package/dist/types/src/operations/set.d.ts +1 -1
- package/dist/types/src/operations/set.d.ts.map +1 -1
- package/dist/types/src/operations/show-undo.d.ts +1 -1
- package/dist/types/src/operations/show-undo.d.ts.map +1 -1
- package/dist/types/src/operations/switch-workspace.d.ts +1 -1
- package/dist/types/src/operations/switch-workspace.d.ts.map +1 -1
- package/dist/types/src/operations/update-companion.d.ts +1 -1
- package/dist/types/src/operations/update-companion.d.ts.map +1 -1
- package/dist/types/src/operations/update-complementary.d.ts +1 -1
- package/dist/types/src/operations/update-complementary.d.ts.map +1 -1
- package/dist/types/src/operations/update-dialog.d.ts +1 -1
- package/dist/types/src/operations/update-dialog.d.ts.map +1 -1
- package/dist/types/src/operations/update-plank-size.d.ts +3 -3
- package/dist/types/src/operations/update-plank-size.d.ts.map +1 -1
- package/dist/types/src/operations/update-popover.d.ts +1 -1
- package/dist/types/src/operations/update-popover.d.ts.map +1 -1
- package/dist/types/src/operations/update-sidebar.d.ts +1 -1
- package/dist/types/src/operations/update-sidebar.d.ts.map +1 -1
- 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 -53
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/DeckCapabilities.d.ts +188 -0
- 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 +5 -5
- package/dist/types/src/types/Settings.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +3 -2
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +0 -1
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
- package/dist/types/src/util/plank-url-params.d.ts.map +1 -1
- package/dist/types/src/util/sanitize-persisted-state.d.ts.map +1 -1
- package/dist/types/src/util/set-active.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +102 -66
- package/src/DeckPlugin.node.ts +17 -0
- package/src/DeckPlugin.test.ts +27 -0
- package/src/DeckPlugin.ts +4 -3
- package/src/capabilities/app-graph-builder.ts +3 -3
- package/src/capabilities/index.ts +1 -1
- package/src/capabilities/operation-handler.ts +1 -1
- package/src/capabilities/settings.ts +1 -1
- package/src/capabilities/url-handler.ts +1 -1
- package/src/components/DeckSettings/DeckSettings.stories.tsx +2 -1
- package/src/components/DeckSettings/DeckSettings.tsx +8 -47
- package/src/components/Matrix/Matrix.stories.tsx +1 -1
- package/src/containers/Deck/Banner.tsx +2 -2
- package/src/containers/Deck/Deck.stories.tsx +1 -1
- package/src/containers/Deck/DeckContent.tsx +1 -1
- package/src/containers/Deck/DeckViewport.tsx +4 -9
- package/src/containers/DeckLayout/ActiveNode.tsx +1 -1
- package/src/containers/DeckLayout/DeckLayout.stories.tsx +2 -2
- package/src/containers/DeckLayout/Fallback.tsx +1 -1
- package/src/containers/Plank/Plank.stories.tsx +2 -2
- package/src/containers/Plank/PlankHeading.tsx +3 -3
- package/src/containers/Plank/PlankLoading.tsx +1 -1
- package/src/containers/Plank/PlankRoot.tsx +1 -1
- package/src/containers/Sidebar/ComplementarySidebar.tsx +5 -7
- package/src/containers/Sidebar/SidebarButton.tsx +7 -1
- package/src/hooks/useDeckCompanions.ts +1 -1
- package/src/index.ts +1 -3
- package/src/meta.ts +1 -0
- package/src/operations/add-toast.ts +1 -1
- package/src/operations/adjust.ts +4 -5
- package/src/operations/close.ts +2 -2
- package/src/operations/index.ts +1 -3
- package/src/operations/open.ts +7 -7
- package/src/operations/revert-workspace.ts +1 -1
- package/src/operations/scroll-into-view.ts +1 -1
- package/src/operations/set-layout-mode.ts +1 -1
- package/src/operations/set.ts +2 -2
- package/src/operations/show-undo.ts +1 -1
- package/src/operations/switch-workspace.ts +1 -1
- package/src/operations/update-companion.ts +1 -1
- package/src/operations/update-complementary.ts +1 -1
- package/src/operations/update-dialog.ts +1 -1
- package/src/operations/update-plank-size.ts +3 -4
- package/src/operations/update-popover.ts +1 -1
- package/src/operations/update-sidebar.ts +1 -1
- package/src/plugin.ts +11 -0
- package/src/translations.ts +2 -12
- package/src/types/DeckCapabilities.ts +34 -0
- package/src/types/DeckEvents.ts +21 -0
- package/src/{operations/definitions.ts → types/DeckOperation.ts} +6 -4
- package/src/types/Settings.ts +30 -5
- package/src/types/index.ts +4 -2
- package/src/types/schema.ts +0 -2
- package/dist/lib/browser/adjust-XWB6ZZ6U.mjs.map +0 -7
- package/dist/lib/browser/chunk-5LM6A3EC.mjs +0 -208
- package/dist/lib/browser/chunk-5LM6A3EC.mjs.map +0 -7
- package/dist/lib/browser/chunk-BRZAVPMC.mjs +0 -48
- package/dist/lib/browser/chunk-BRZAVPMC.mjs.map +0 -7
- package/dist/lib/browser/chunk-FRVCL5NO.mjs +0 -72
- package/dist/lib/browser/chunk-FRVCL5NO.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -201
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/open-K2JOEW2E.mjs.map +0 -7
- package/dist/lib/browser/operations/index.mjs +0 -13
- package/dist/lib/browser/operations/index.mjs.map +0 -7
- package/dist/lib/browser/set-layout-mode-BEVNGOY2.mjs.map +0 -7
- package/dist/lib/browser/switch-workspace-ICJJWNFT.mjs.map +0 -7
- package/dist/lib/browser/update-companion-VPCBH3YT.mjs.map +0 -7
- package/dist/lib/browser/update-complementary-74DEQY6T.mjs.map +0 -7
- package/dist/lib/browser/update-plank-size-5VHZOTHE.mjs +0 -28
- package/dist/lib/browser/update-plank-size-5VHZOTHE.mjs.map +0 -7
- package/dist/lib/node-esm/add-toast-AZM7NFNM.mjs +0 -25
- package/dist/lib/node-esm/add-toast-AZM7NFNM.mjs.map +0 -7
- package/dist/lib/node-esm/adjust-ICALXQ6F.mjs +0 -96
- package/dist/lib/node-esm/adjust-ICALXQ6F.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-A63Q53TW.mjs +0 -73
- package/dist/lib/node-esm/chunk-A63Q53TW.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-B7WZXRW4.mjs +0 -209
- package/dist/lib/node-esm/chunk-B7WZXRW4.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +0 -11
- package/dist/lib/node-esm/chunk-IRWCUYJY.mjs +0 -71
- package/dist/lib/node-esm/chunk-IRWCUYJY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MB4SDDVY.mjs +0 -50
- package/dist/lib/node-esm/chunk-MB4SDDVY.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs +0 -32
- package/dist/lib/node-esm/chunk-MLVJ2ODW.mjs.map +0 -7
- package/dist/lib/node-esm/close-GC5V3GD5.mjs +0 -45
- package/dist/lib/node-esm/close-GC5V3GD5.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -202
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/open-XXEHIR6G.mjs +0 -151
- package/dist/lib/node-esm/open-XXEHIR6G.mjs.map +0 -7
- package/dist/lib/node-esm/operations/index.mjs +0 -14
- package/dist/lib/node-esm/operations/index.mjs.map +0 -7
- package/dist/lib/node-esm/revert-workspace-WCXAL5C6.mjs +0 -22
- package/dist/lib/node-esm/revert-workspace-WCXAL5C6.mjs.map +0 -7
- package/dist/lib/node-esm/scroll-into-view-2ZNU44ZO.mjs +0 -22
- package/dist/lib/node-esm/scroll-into-view-2ZNU44ZO.mjs.map +0 -7
- package/dist/lib/node-esm/set-5MO2JCUQ.mjs +0 -38
- package/dist/lib/node-esm/set-5MO2JCUQ.mjs.map +0 -7
- package/dist/lib/node-esm/set-layout-mode-3RK4HIG7.mjs +0 -91
- package/dist/lib/node-esm/set-layout-mode-3RK4HIG7.mjs.map +0 -7
- package/dist/lib/node-esm/show-undo-WV7SAYGJ.mjs +0 -60
- package/dist/lib/node-esm/show-undo-WV7SAYGJ.mjs.map +0 -7
- package/dist/lib/node-esm/switch-workspace-VNM75H66.mjs +0 -69
- package/dist/lib/node-esm/switch-workspace-VNM75H66.mjs.map +0 -7
- package/dist/lib/node-esm/update-companion-SIB3GWH7.mjs +0 -33
- package/dist/lib/node-esm/update-companion-SIB3GWH7.mjs.map +0 -7
- package/dist/lib/node-esm/update-complementary-CZTIVIXU.mjs +0 -29
- package/dist/lib/node-esm/update-complementary-CZTIVIXU.mjs.map +0 -7
- package/dist/lib/node-esm/update-dialog-HEDV5XBB.mjs +0 -30
- package/dist/lib/node-esm/update-dialog-HEDV5XBB.mjs.map +0 -7
- package/dist/lib/node-esm/update-plank-size-JJLU7VE3.mjs +0 -29
- package/dist/lib/node-esm/update-plank-size-JJLU7VE3.mjs.map +0 -7
- package/dist/lib/node-esm/update-popover-HI5TU2VT.mjs +0 -34
- package/dist/lib/node-esm/update-popover-HI5TU2VT.mjs.map +0 -7
- package/dist/lib/node-esm/update-sidebar-QB5BA655.mjs +0 -26
- package/dist/lib/node-esm/update-sidebar-QB5BA655.mjs.map +0 -7
- package/dist/types/src/operations/definitions.d.ts +0 -15
- package/dist/types/src/operations/definitions.d.ts.map +0 -1
- package/dist/types/src/types/capabilities.d.ts +0 -191
- 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/src/types/capabilities.ts +0 -35
- package/src/types/events.ts +0 -21
- /package/dist/lib/{browser/chunk-J5LGTIGS.mjs.map → neutral/check-app-scheme-A7FZVNZO.mjs.map} +0 -0
- /package/dist/lib/{browser → neutral}/chunk-J5LGTIGS.mjs +0 -0
- /package/dist/lib/{browser/types/index.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
- /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
- /package/dist/lib/{node-esm/chunk-HSLMI22Q.mjs.map → neutral/meta.mjs.map} +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
// src/operations/index.ts
|
|
2
|
+
import { OperationHandlerSet } from "@dxos/compute";
|
|
3
|
+
var DeckOperationHandlerSet = OperationHandlerSet.lazy(() => import("./add-toast-2OMTFZ2L.mjs"), () => import("./adjust-RXTF3IT3.mjs"), () => import("./close-DG5IVQCE.mjs"), () => import("./open-SGYZO7RF.mjs"), () => import("./revert-workspace-V6D7W6CL.mjs"), () => import("./scroll-into-view-UM446Q2T.mjs"), () => import("./set-JFFKT32S.mjs"), () => import("./set-layout-mode-I4YV5V2Y.mjs"), () => import("./show-undo-ZCMF4J2Q.mjs"), () => import("./switch-workspace-CVDYG5YZ.mjs"), () => import("./update-companion-VPCM7FJX.mjs"), () => import("./update-complementary-SEQ6DDWA.mjs"), () => import("./update-dialog-VDHYE4QH.mjs"), () => import("./update-plank-size-ZXOUZD7Y.mjs"), () => import("./update-popover-VFP32W57.mjs"), () => import("./update-sidebar-O5HBOXYH.mjs"));
|
|
4
|
+
|
|
5
|
+
export {
|
|
6
|
+
DeckOperationHandlerSet
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=chunk-6MOYMDKQ.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/operations/index.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { OperationHandlerSet } from '@dxos/compute';\n\nexport const DeckOperationHandlerSet = OperationHandlerSet.lazy(\n () => import('./add-toast'),\n () => import('./adjust'),\n () => import('./close'),\n () => import('./open'),\n () => import('./revert-workspace'),\n () => import('./scroll-into-view'),\n () => import('./set'),\n () => import('./set-layout-mode'),\n () => import('./show-undo'),\n () => import('./switch-workspace'),\n () => import('./update-companion'),\n () => import('./update-complementary'),\n () => import('./update-dialog'),\n () => import('./update-plank-size'),\n () => import('./update-popover'),\n () => import('./update-sidebar'),\n);\n"],
|
|
5
|
+
"mappings": ";AAIA,SAASA,2BAA2B;AAE7B,IAAMC,0BAA0BD,oBAAoBE,KACzD,MAAM,OAAO,0BAAA,GACb,MAAM,OAAO,uBAAA,GACb,MAAM,OAAO,sBAAA,GACb,MAAM,OAAO,qBAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,oBAAA,GACb,MAAM,OAAO,gCAAA,GACb,MAAM,OAAO,0BAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,iCAAA,GACb,MAAM,OAAO,qCAAA,GACb,MAAM,OAAO,8BAAA,GACb,MAAM,OAAO,kCAAA,GACb,MAAM,OAAO,+BAAA,GACb,MAAM,OAAO,+BAAA,CAAA;",
|
|
6
|
+
"names": ["OperationHandlerSet", "DeckOperationHandlerSet", "lazy"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
// src/util/plank-url-params.ts
|
|
2
|
+
import { fromUrlPath, toUrlPath } from "@dxos/app-toolkit";
|
|
3
|
+
var PLANK_PARAM = "plank";
|
|
4
|
+
var serializePlanks = (active, existingSearch) => {
|
|
5
|
+
const params = new URLSearchParams(existingSearch);
|
|
6
|
+
params.delete(PLANK_PARAM);
|
|
7
|
+
for (const id of active) {
|
|
8
|
+
params.append(PLANK_PARAM, toUrlPath(id));
|
|
9
|
+
}
|
|
10
|
+
return params.size > 0 ? `?${params.toString()}` : "";
|
|
11
|
+
};
|
|
12
|
+
var deserializePlanks = (url) => {
|
|
13
|
+
return url.searchParams.getAll(PLANK_PARAM).map(fromUrlPath);
|
|
14
|
+
};
|
|
15
|
+
var stripPlanks = (existingSearch) => {
|
|
16
|
+
const params = new URLSearchParams(existingSearch);
|
|
17
|
+
params.delete(PLANK_PARAM);
|
|
18
|
+
return params.size > 0 ? `?${params.toString()}` : "";
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// src/util/sanitize-persisted-state.ts
|
|
22
|
+
var sanitizePersistedState = (state) => {
|
|
23
|
+
let needsUpdate = false;
|
|
24
|
+
const cleanedDecks = {
|
|
25
|
+
...state.decks
|
|
26
|
+
};
|
|
27
|
+
for (const [id, deck] of Object.entries(cleanedDecks)) {
|
|
28
|
+
if (!deck) {
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
let updated = false;
|
|
32
|
+
let cleanedDeck = deck;
|
|
33
|
+
if (deck.fullscreen) {
|
|
34
|
+
cleanedDeck = {
|
|
35
|
+
...cleanedDeck,
|
|
36
|
+
fullscreen: false
|
|
37
|
+
};
|
|
38
|
+
updated = true;
|
|
39
|
+
}
|
|
40
|
+
if (deck.solo && deck.active.length > 0) {
|
|
41
|
+
cleanedDeck = {
|
|
42
|
+
...cleanedDeck,
|
|
43
|
+
active: []
|
|
44
|
+
};
|
|
45
|
+
updated = true;
|
|
46
|
+
}
|
|
47
|
+
if (updated) {
|
|
48
|
+
cleanedDecks[id] = cleanedDeck;
|
|
49
|
+
needsUpdate = true;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return needsUpdate ? {
|
|
53
|
+
...state,
|
|
54
|
+
decks: cleanedDecks
|
|
55
|
+
} : state;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// src/util/set-active.ts
|
|
59
|
+
var computeActiveUpdates = ({ next, deck, attention }) => {
|
|
60
|
+
const active = deck.solo ? [
|
|
61
|
+
deck.solo
|
|
62
|
+
] : deck.active;
|
|
63
|
+
const removed = active.filter((id) => !next.includes(id));
|
|
64
|
+
const closed = Array.from(/* @__PURE__ */ new Set([
|
|
65
|
+
...deck.inactive.filter((id) => !next.includes(id)),
|
|
66
|
+
...removed
|
|
67
|
+
]));
|
|
68
|
+
const updates = {
|
|
69
|
+
inactive: closed,
|
|
70
|
+
solo: deck.solo,
|
|
71
|
+
active: deck.active,
|
|
72
|
+
fullscreen: deck.fullscreen
|
|
73
|
+
};
|
|
74
|
+
if (deck.solo || !deck.initialized) {
|
|
75
|
+
updates.solo = next[0];
|
|
76
|
+
} else {
|
|
77
|
+
updates.active = next;
|
|
78
|
+
}
|
|
79
|
+
if (deck.fullscreen && !updates.solo) {
|
|
80
|
+
updates.fullscreen = false;
|
|
81
|
+
}
|
|
82
|
+
let toAttend;
|
|
83
|
+
if (attention) {
|
|
84
|
+
const attended = attention.getCurrent();
|
|
85
|
+
const [attendedId] = Array.from(attended);
|
|
86
|
+
const isAttendedAvailable = !!attendedId && next.includes(attendedId);
|
|
87
|
+
if (!isAttendedAvailable) {
|
|
88
|
+
const attendedIndex = active.indexOf(attendedId);
|
|
89
|
+
const index = attendedIndex === -1 ? 0 : attendedIndex >= next.length ? next.length - 1 : attendedIndex;
|
|
90
|
+
toAttend = next[index];
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
deckUpdates: updates,
|
|
95
|
+
toAttend
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
// src/util/layoutAppliesTopbar.ts
|
|
100
|
+
var layoutAppliesTopbar = (breakpoint, layoutMode) => {
|
|
101
|
+
return document.body.getAttribute("data-platform") === "windows" && breakpoint === "desktop" && layoutMode !== "solo--fullscreen";
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
export {
|
|
105
|
+
layoutAppliesTopbar,
|
|
106
|
+
serializePlanks,
|
|
107
|
+
deserializePlanks,
|
|
108
|
+
stripPlanks,
|
|
109
|
+
sanitizePersistedState,
|
|
110
|
+
computeActiveUpdates
|
|
111
|
+
};
|
|
112
|
+
//# sourceMappingURL=chunk-GBIGQKYW.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/util/plank-url-params.ts", "../../../src/util/sanitize-persisted-state.ts", "../../../src/util/set-active.ts", "../../../src/util/layoutAppliesTopbar.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { fromUrlPath, toUrlPath } from '@dxos/app-toolkit';\n\nconst PLANK_PARAM = 'plank';\n\n/**\n * Serialize deck active qualified IDs into a URL search string.\n * Preserves non-plank query params from the existing search string.\n */\nexport const serializePlanks = (active: readonly string[], existingSearch: string): string => {\n const params = new URLSearchParams(existingSearch);\n params.delete(PLANK_PARAM);\n for (const id of active) {\n params.append(PLANK_PARAM, toUrlPath(id));\n }\n return params.size > 0 ? `?${params.toString()}` : '';\n};\n\n/**\n * Deserialize plank query params from a URL back to qualified graph IDs.\n */\nexport const deserializePlanks = (url: URL): string[] => {\n return url.searchParams.getAll(PLANK_PARAM).map(fromUrlPath);\n};\n\n/**\n * Strip plank query params from a search string, preserving all others.\n */\nexport const stripPlanks = (existingSearch: string): string => {\n const params = new URLSearchParams(existingSearch);\n params.delete(PLANK_PARAM);\n return params.size > 0 ? `?${params.toString()}` : '';\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type StoredDeckState } from '#types';\n\n/**\n * Sanitizes persisted deck state on startup.\n *\n * Persisted state may contain values that are inappropriate to restore across sessions:\n *\n * - **Fullscreen**: Cleared unconditionally to prevent the user from getting stuck in fullscreen\n * mode if the app was closed (or crashed) while fullscreen was active.\n *\n * - **Active planks in solo-mode decks**: When a deck is in solo mode, any items in `active`\n * represent planks that were kept mounted (hidden) during the session for fast deck↔solo\n * switching. After a restart these planks would need to fully remount anyway, so retaining\n * them only adds unnecessary load. Clearing `active` for solo-mode decks avoids rendering\n * stale planks in the background on startup.\n *\n * Returns a new state object if any changes were made, or the original state if clean.\n */\nexport const sanitizePersistedState = (state: StoredDeckState): StoredDeckState => {\n let needsUpdate = false;\n const cleanedDecks = { ...state.decks };\n\n for (const [id, deck] of Object.entries(cleanedDecks)) {\n if (!deck) {\n continue;\n }\n\n let updated = false;\n let cleanedDeck = deck;\n\n if (deck.fullscreen) {\n cleanedDeck = { ...cleanedDeck, fullscreen: false };\n updated = true;\n }\n\n if (deck.solo && deck.active.length > 0) {\n cleanedDeck = { ...cleanedDeck, active: [] };\n updated = true;\n }\n\n if (updated) {\n cleanedDecks[id] = cleanedDeck;\n needsUpdate = true;\n }\n }\n\n return needsUpdate ? { ...state, decks: cleanedDecks } : state;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AttentionManager } from '@dxos/react-ui-attention';\n\nimport { type DeckState } from '#types';\n\nexport type SetActiveOptions = {\n next: string[];\n deck: DeckState;\n attention?: AttentionManager;\n};\n\nexport type SetActiveResult = {\n /** Updates to apply to the deck. */\n deckUpdates: {\n inactive: string[];\n solo: string | undefined;\n active: string[];\n fullscreen: boolean;\n };\n /** ID of the item to attend (scroll into view) if attention changed. */\n toAttend?: string;\n};\n\n/**\n * Computes the new active state for the deck without mutating.\n * Returns the updates to apply and optionally an item to attend.\n */\nexport const computeActiveUpdates = ({ next, deck, attention }: SetActiveOptions): SetActiveResult => {\n const active = deck.solo ? [deck.solo] : deck.active;\n const removed = active.filter((id) => !next.includes(id));\n const closed = Array.from(new Set([...deck.inactive.filter((id) => !next.includes(id)), ...removed]));\n\n const updates = {\n inactive: closed,\n solo: deck.solo,\n active: deck.active,\n fullscreen: deck.fullscreen,\n };\n\n if (deck.solo || !deck.initialized) {\n updates.solo = next[0];\n } else {\n updates.active = next;\n }\n\n if (deck.fullscreen && !updates.solo) {\n updates.fullscreen = false;\n }\n\n let toAttend: string | undefined;\n if (attention) {\n const attended = attention.getCurrent();\n const [attendedId] = Array.from(attended);\n const isAttendedAvailable = !!attendedId && next.includes(attendedId);\n if (!isAttendedAvailable) {\n const attendedIndex = active.indexOf(attendedId);\n // If outside of bounds, focus on the first/last plank, otherwise focus on the new plank in the same position.\n const index = attendedIndex === -1 ? 0 : attendedIndex >= next.length ? next.length - 1 : attendedIndex;\n toAttend = next[index];\n }\n }\n\n return { deckUpdates: updates, toAttend };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type LayoutMode } from '#types';\n\nexport const layoutAppliesTopbar = (breakpoint: string, layoutMode?: LayoutMode) => {\n return (\n document.body.getAttribute('data-platform') === 'windows' &&\n breakpoint === 'desktop' &&\n layoutMode !== 'solo--fullscreen'\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["fromUrlPath", "toUrlPath", "PLANK_PARAM", "serializePlanks", "active", "existingSearch", "params", "URLSearchParams", "delete", "id", "append", "size", "toString", "deserializePlanks", "url", "searchParams", "getAll", "map", "stripPlanks", "sanitizePersistedState", "state", "needsUpdate", "cleanedDecks", "decks", "id", "deck", "Object", "entries", "updated", "cleanedDeck", "fullscreen", "solo", "active", "length", "computeActiveUpdates", "next", "deck", "attention", "active", "solo", "removed", "filter", "id", "includes", "closed", "Array", "from", "Set", "inactive", "updates", "fullscreen", "initialized", "toAttend", "attended", "getCurrent", "attendedId", "isAttendedAvailable", "attendedIndex", "indexOf", "index", "length", "deckUpdates", "layoutAppliesTopbar", "breakpoint", "layoutMode", "document", "body", "getAttribute"]
|
|
7
|
+
}
|
|
@@ -3,15 +3,7 @@ import { invariant } from "@dxos/invariant";
|
|
|
3
3
|
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/operations/helpers.ts";
|
|
4
4
|
var updateActiveDeck = (current, deckUpdates) => {
|
|
5
5
|
const currentDeck = current.decks[current.activeDeck];
|
|
6
|
-
invariant(currentDeck, `Deck not found: ${current.activeDeck}`, {
|
|
7
|
-
F: __dxlog_file,
|
|
8
|
-
L: 11,
|
|
9
|
-
S: void 0,
|
|
10
|
-
A: [
|
|
11
|
-
"currentDeck",
|
|
12
|
-
"`Deck not found: ${current.activeDeck}`"
|
|
13
|
-
]
|
|
14
|
-
});
|
|
6
|
+
invariant(currentDeck, `Deck not found: ${current.activeDeck}`, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 7, S: void 0, A: ["currentDeck", "`Deck not found: ${current.activeDeck}`"] });
|
|
15
7
|
return {
|
|
16
8
|
...current,
|
|
17
9
|
decks: {
|
|
@@ -27,4 +19,4 @@ var updateActiveDeck = (current, deckUpdates) => {
|
|
|
27
19
|
export {
|
|
28
20
|
updateActiveDeck
|
|
29
21
|
};
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
22
|
+
//# sourceMappingURL=chunk-GLB73Q6U.mjs.map
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/operations/helpers.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type DeckState, type StoredDeckState } from '../types';\n\nexport const updateActiveDeck = (current: StoredDeckState, deckUpdates: Partial<DeckState>): StoredDeckState => {\n const currentDeck = current.decks[current.activeDeck];\n invariant(currentDeck, `Deck not found: ${current.activeDeck}`);\n return {\n ...current,\n decks: {\n ...current.decks,\n [current.activeDeck]: {\n ...currentDeck,\n ...deckUpdates,\n },\n },\n };\n};\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,iBAAiB
|
|
6
|
-
"names": ["invariant", "updateActiveDeck", "
|
|
5
|
+
"mappings": ";AAIA,SAASA,iBAAiB;AAI1B,IAAA,eAAaC;AAEXD,IAAAA,mBAAwB,CAAA,SAAA,gBAA0BE;AAClD,QAAA,cAAO,QAAA,MAAA,QAAA,UAAA;YACFC,aAAO,mBAAA,QAAA,UAAA,IAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,GAAA,GAAA,QAAA,GAAA,CAAA,eAAA,yCAAA,EAAA,CAAA;SACVC;;WAEGD;iBACIE;eACAC,UAAW,GAAA;QAChB,GAAA;QACF,GAAA;MACF;IACA;;;",
|
|
6
|
+
"names": ["invariant", "updateActiveDeck", "activeDeck", "current", "decks", "currentDeck", "deckUpdates"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/meta.ts
|
|
2
|
+
import { trim } from "@dxos/util";
|
|
3
|
+
var meta = {
|
|
4
|
+
id: "org.dxos.plugin.deck",
|
|
5
|
+
name: "Layout",
|
|
6
|
+
description: trim`
|
|
7
|
+
Flexible layout system for arranging workspace views in tabs, splits, and panels.
|
|
8
|
+
Customize your workspace organization with drag-and-drop layout management.
|
|
9
|
+
`,
|
|
10
|
+
icon: "ph--layout--regular",
|
|
11
|
+
tags: [
|
|
12
|
+
"system"
|
|
13
|
+
]
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export {
|
|
17
|
+
meta
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=chunk-JMYWDX4I.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/meta.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Plugin } from '@dxos/app-framework';\nimport { trim } from '@dxos/util';\n\nexport const meta: Plugin.Meta = {\n id: 'org.dxos.plugin.deck',\n name: 'Layout',\n description: trim`\n Flexible layout system for arranging workspace views in tabs, splits, and panels.\n Customize your workspace organization with drag-and-drop layout management.\n `,\n icon: 'ph--layout--regular',\n tags: ['system'],\n};\n"],
|
|
5
|
+
"mappings": ";AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaJ;;;;EAIbK,MAAM;EACNC,MAAM;IAAC;;AACT;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "icon", "tags"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
// src/capabilities/check-app-scheme.ts
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
4
|
+
import { APP_SCHEME, AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
|
|
5
|
+
import { runAndForwardErrors } from "@dxos/effect";
|
|
6
|
+
import { isTauri } from "@dxos/util";
|
|
7
|
+
import { DeckCapabilities } from "#types";
|
|
8
|
+
var NATIVE_REDIRECT_DIALOG = "org.dxos.plugin.welcome.component.native-redirect-dialog";
|
|
9
|
+
var SCHEME_TIMEOUT_MS = 500;
|
|
10
|
+
var isSafari = () => {
|
|
11
|
+
const ua = navigator.userAgent;
|
|
12
|
+
return ua.includes("Safari") && !ua.includes("Chrome") && !ua.includes("Chromium");
|
|
13
|
+
};
|
|
14
|
+
var canRedirectToScheme = () => {
|
|
15
|
+
try {
|
|
16
|
+
const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\/+/, "") + window.location.search;
|
|
17
|
+
new URL(schemeUrl);
|
|
18
|
+
return true;
|
|
19
|
+
} catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var tryOpenNativeApp = () => {
|
|
24
|
+
return new Promise((resolve) => {
|
|
25
|
+
let resolved = false;
|
|
26
|
+
const onBlur = () => {
|
|
27
|
+
if (!resolved) {
|
|
28
|
+
resolved = true;
|
|
29
|
+
cleanup();
|
|
30
|
+
resolve(true);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
const cleanup = () => {
|
|
34
|
+
window.removeEventListener("blur", onBlur);
|
|
35
|
+
document.removeEventListener("visibilitychange", onVisibilityChange);
|
|
36
|
+
};
|
|
37
|
+
const onVisibilityChange = () => {
|
|
38
|
+
if (document.hidden) {
|
|
39
|
+
onBlur();
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
window.addEventListener("blur", onBlur);
|
|
43
|
+
document.addEventListener("visibilitychange", onVisibilityChange);
|
|
44
|
+
const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\/+/, "") + window.location.search;
|
|
45
|
+
const iframe = document.createElement("iframe");
|
|
46
|
+
iframe.style.display = "none";
|
|
47
|
+
iframe.src = schemeUrl;
|
|
48
|
+
document.body.appendChild(iframe);
|
|
49
|
+
setTimeout(() => iframe.remove(), 3e3);
|
|
50
|
+
setTimeout(() => {
|
|
51
|
+
if (!resolved) {
|
|
52
|
+
resolved = true;
|
|
53
|
+
cleanup();
|
|
54
|
+
resolve(false);
|
|
55
|
+
}
|
|
56
|
+
}, SCHEME_TIMEOUT_MS);
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
var dispatchNavigationHandlers = Effect.fn(function* () {
|
|
60
|
+
const url = new URL(window.location.href);
|
|
61
|
+
const handlers = yield* Capability.getAll(AppCapabilities.NavigationHandler);
|
|
62
|
+
yield* Effect.all(handlers.map((handler) => handler(url)), {
|
|
63
|
+
concurrency: "unbounded"
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
var shouldDeferNavigationHandlers = () => {
|
|
67
|
+
return !isTauri() && !isSafari() && !import.meta.env.DEV && canRedirectToScheme();
|
|
68
|
+
};
|
|
69
|
+
var check_app_scheme_default = Capability.makeModule(Effect.fnUntraced(function* () {
|
|
70
|
+
const capabilities = yield* Capability.Service;
|
|
71
|
+
const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);
|
|
72
|
+
const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);
|
|
73
|
+
if (!settings?.enableNativeRedirect || !shouldDeferNavigationHandlers()) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
const appOpened = yield* Effect.promise(() => tryOpenNativeApp());
|
|
77
|
+
if (appOpened) {
|
|
78
|
+
const onOpenHere = () => Effect.gen(function* () {
|
|
79
|
+
yield* dispatchNavigationHandlers();
|
|
80
|
+
yield* invoke(LayoutOperation.UpdateDialog, {
|
|
81
|
+
state: false
|
|
82
|
+
});
|
|
83
|
+
}).pipe(Effect.provideService(Capability.Service, capabilities), runAndForwardErrors);
|
|
84
|
+
yield* invoke(LayoutOperation.UpdateDialog, {
|
|
85
|
+
subject: NATIVE_REDIRECT_DIALOG,
|
|
86
|
+
type: "alert",
|
|
87
|
+
overlayClasses: "dark bg-neutral-950!",
|
|
88
|
+
props: {
|
|
89
|
+
onOpenHere
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
} else {
|
|
93
|
+
yield* dispatchNavigationHandlers();
|
|
94
|
+
}
|
|
95
|
+
}));
|
|
96
|
+
|
|
97
|
+
export {
|
|
98
|
+
shouldDeferNavigationHandlers,
|
|
99
|
+
check_app_scheme_default
|
|
100
|
+
};
|
|
101
|
+
//# sourceMappingURL=chunk-VHETZ22W.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/capabilities/check-app-scheme.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { APP_SCHEME, AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { runAndForwardErrors } from '@dxos/effect';\nimport { isTauri } from '@dxos/util';\n\nimport { DeckCapabilities } from '#types';\n\n/** Identifier for the native redirect dialog surface (defined in welcome plugin). */\nconst NATIVE_REDIRECT_DIALOG = 'org.dxos.plugin.welcome.component.native-redirect-dialog';\n\nconst SCHEME_TIMEOUT_MS = 500;\n\nconst isSafari = (): boolean => {\n const ua = navigator.userAgent;\n return ua.includes('Safari') && !ua.includes('Chrome') && !ua.includes('Chromium');\n};\n\n/** Check if the current page URL can be converted to a valid custom scheme URL. */\nconst canRedirectToScheme = (): boolean => {\n try {\n const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\\/+/, '') + window.location.search;\n new URL(schemeUrl);\n return true;\n } catch {\n return false;\n }\n};\n\n/**\n * Try to open the native app via custom scheme.\n * Resolves `true` if the app opened (page lost focus), `false` if it didn't within the timeout.\n */\nconst tryOpenNativeApp = (): Promise<boolean> => {\n return new Promise((resolve) => {\n let resolved = false;\n\n const onBlur = () => {\n if (!resolved) {\n resolved = true;\n cleanup();\n resolve(true);\n }\n };\n\n const cleanup = () => {\n window.removeEventListener('blur', onBlur);\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n\n const onVisibilityChange = () => {\n if (document.hidden) {\n onBlur();\n }\n };\n\n window.addEventListener('blur', onBlur);\n document.addEventListener('visibilitychange', onVisibilityChange);\n\n // Try the scheme via hidden iframe.\n const schemeUrl = APP_SCHEME + window.location.pathname.replace(/^\\/+/, '') + window.location.search;\n const iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = schemeUrl;\n document.body.appendChild(iframe);\n setTimeout(() => iframe.remove(), 3000);\n\n // If no blur within timeout, the app isn't running.\n setTimeout(() => {\n if (!resolved) {\n resolved = true;\n cleanup();\n resolve(false);\n }\n }, SCHEME_TIMEOUT_MS);\n });\n};\n\n/** Dispatch all NavigationHandler contributions with the current page URL. */\nconst dispatchNavigationHandlers = Effect.fn(function* () {\n const url = new URL(window.location.href);\n const handlers = yield* Capability.getAll(AppCapabilities.NavigationHandler);\n yield* Effect.all(\n handlers.map((handler) => handler(url)),\n { concurrency: 'unbounded' },\n );\n});\n\n/**\n * Checks whether the native redirect setting is enabled and the redirect should be attempted.\n * Exported for the URL handler to decide whether to defer NavigationHandler dispatch.\n */\nexport const shouldDeferNavigationHandlers = (): boolean => {\n return !isTauri() && !isSafari() && !import.meta.env.DEV && canRedirectToScheme();\n};\n\n/**\n * When running in a web browser (not Tauri) with native redirect enabled,\n * tries to open the native app via custom scheme. Defers NavigationHandlers\n * to prevent the web app from consuming one-time tokens before the native app.\n *\n * If the app opens: shows dialog with \"Open here\" callback that dispatches handlers.\n * If the app doesn't open: dispatches handlers immediately.\n * In Safari: universal links handle this natively, so the check is skipped.\n */\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const capabilities = yield* Capability.Service;\n const { invoke } = yield* Capability.get(Capabilities.OperationInvoker);\n const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);\n\n if (!settings?.enableNativeRedirect || !shouldDeferNavigationHandlers()) {\n return;\n }\n\n const appOpened = yield* Effect.promise(() => tryOpenNativeApp());\n if (appOpened) {\n const onOpenHere = () =>\n Effect.gen(function* () {\n yield* dispatchNavigationHandlers();\n yield* invoke(LayoutOperation.UpdateDialog, { state: false });\n }).pipe(Effect.provideService(Capability.Service, capabilities), runAndForwardErrors);\n\n yield* invoke(LayoutOperation.UpdateDialog, {\n subject: NATIVE_REDIRECT_DIALOG,\n type: 'alert',\n overlayClasses: 'dark bg-neutral-950!',\n props: { onOpenHere },\n });\n } else {\n yield* dispatchNavigationHandlers();\n }\n }),\n);\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Effect", "Capabilities", "Capability", "APP_SCHEME", "AppCapabilities", "LayoutOperation", "runAndForwardErrors", "isTauri", "DeckCapabilities", "NATIVE_REDIRECT_DIALOG", "SCHEME_TIMEOUT_MS", "isSafari", "ua", "navigator", "userAgent", "includes", "canRedirectToScheme", "schemeUrl", "window", "location", "pathname", "replace", "search", "URL", "tryOpenNativeApp", "Promise", "resolve", "resolved", "onBlur", "cleanup", "removeEventListener", "document", "onVisibilityChange", "hidden", "addEventListener", "iframe", "createElement", "style", "display", "src", "body", "appendChild", "setTimeout", "remove", "dispatchNavigationHandlers", "fn", "url", "href", "handlers", "getAll", "NavigationHandler", "all", "map", "handler", "concurrency", "shouldDeferNavigationHandlers", "env", "DEV", "makeModule", "fnUntraced", "capabilities", "Service", "invoke", "get", "OperationInvoker", "settings", "getAtomValue", "Settings", "enableNativeRedirect", "appOpened", "promise", "onOpenHere", "gen", "UpdateDialog", "state", "pipe", "provideService", "subject", "type", "overlayClasses", "props"]
|
|
7
|
+
}
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/layout.ts"],
|
|
4
4
|
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { produce } from 'immer';\n\nimport { type DeckAction } from '#types';\n\ntype OpenLayoutEntryOptions = {\n key?: string;\n};\n\n/**\n * Mutates a deck list using stack semantics: new items open to the right (`push`).\n * Callers that open from a pivot must truncate the deck first (see deck `open` operation).\n */\nexport const openEntry = (deck: readonly string[], entryId: string, options?: OpenLayoutEntryOptions): string[] => {\n return produce([...deck], (draft) => {\n if (draft.find((id) => id === entryId)) {\n return;\n }\n\n const key = options?.key;\n if (key) {\n const index = draft.findIndex((id) => id.split('+')[0] === key);\n if (index !== -1) {\n draft.splice(index, 1, entryId);\n return;\n }\n }\n\n draft.push(entryId);\n });\n};\n\nexport type OpenSubjectsOnActiveDeckOptions = {\n pivotId?: string;\n key?: string;\n};\n\n/**\n * Computes the next multi-mode `active` list for {@link LayoutOperation.Open}.\n * If `pivotId` is present and found, truncates the deck after that id.\n * Applies each subject with {@link openEntry}.\n * If the pivot is missing, appends onto the full `active` list.\n *\n * When all subjects are already present in the active deck, the deck is returned\n * unchanged so that pivot truncation does not discard open planks when navigating\n * to something that is already visible.\n */\nexport const openSubjectsOnActiveDeck = (\n active: readonly string[],\n subject: readonly string[],\n options?: OpenSubjectsOnActiveDeckOptions,\n): string[] => {\n if (subject.length > 0 && subject.every((id) => active.includes(id))) {\n return [...active];\n }\n\n const { pivotId, key } = options ?? {};\n const pivotIndex = pivotId ? active.findIndex((id) => id === pivotId) : -1;\n const baseDeck = pivotIndex !== -1 ? active.slice(0, pivotIndex + 1) : [...active];\n return subject.reduce((acc, entryId) => openEntry(acc, entryId, { key }), baseDeck);\n};\n\nexport const closeEntry = (deck: string[], entryId: string): string[] => {\n return produce(deck, (draft) => {\n const index = draft.findIndex((id) => id === entryId);\n if (index !== -1) {\n draft.splice(index, 1);\n }\n });\n};\n\nexport const incrementPlank = (deck: string[], adjustment: DeckAction.Adjustment): string[] => {\n return produce(deck, (draft) => {\n const index = draft.findIndex((id) => id === adjustment.id);\n if (\n index === -1 ||\n (adjustment.type === 'increment-start' && index === 0) ||\n (adjustment.type === 'increment-end' && index === draft.length - 1)\n ) {\n return;\n }\n\n if (adjustment.type === 'increment-start') {\n // Swap the current item with the previous item.\n [draft[index - 1], draft[index]] = [draft[index], draft[index - 1]];\n } else if (adjustment.type === 'increment-end') {\n // Swap the current item with the next item.\n [draft[index], draft[index + 1]] = [draft[index + 1], draft[index]];\n }\n });\n};\n"],
|
|
5
|
-
"mappings": ";AAIA,SAASA,eAAe;AAYjB,IAAMC,YAAY,CAACC,MAAyBC,SAAiBC,YAAAA;AAClE,
|
|
6
|
-
"names": ["produce", "openEntry", "deck", "entryId", "options", "
|
|
5
|
+
"mappings": ";AAIA,SAASA,eAAe;AAYjB,IAAMC,YAAY,CAACC,MAAyBC,SAAiBC,YAAAA;AAClE,SAAOJ,QAAQ;OAAIE;KAAO,CAACG,UAAAA;AACzB,QAAIA,MAAMC,KAAK,CAACC,OAAOA,OAAOJ,OAAAA,GAAU;AACtC;IACF;AAEA,UAAMK,MAAMJ,SAASI;AACrB,QAAIA,KAAK;AACP,YAAMC,QAAQJ,MAAMK,UAAU,CAACH,OAAOA,GAAGI,MAAM,GAAA,EAAK,CAAA,MAAOH,GAAAA;AAC3D,UAAIC,UAAU,IAAI;AAChBJ,cAAMO,OAAOH,OAAO,GAAGN,OAAAA;AACvB;MACF;IACF;AAEAE,UAAMQ,KAAKV,OAAAA;EACb,CAAA;AACF;AAiBO,IAAMW,2BAA2B,CACtCC,QACAC,SACAZ,YAAAA;AAEA,MAAIY,QAAQC,SAAS,KAAKD,QAAQE,MAAM,CAACX,OAAOQ,OAAOI,SAASZ,EAAAA,CAAAA,GAAM;AACpE,WAAO;SAAIQ;;EACb;AAEA,QAAM,EAAEK,SAASZ,IAAG,IAAKJ,WAAW,CAAC;AACrC,QAAMiB,aAAaD,UAAUL,OAAOL,UAAU,CAACH,OAAOA,OAAOa,OAAAA,IAAW;AACxE,QAAME,WAAWD,eAAe,KAAKN,OAAOQ,MAAM,GAAGF,aAAa,CAAA,IAAK;OAAIN;;AAC3E,SAAOC,QAAQQ,OAAO,CAACC,KAAKtB,YAAYF,UAAUwB,KAAKtB,SAAS;IAAEK;EAAI,CAAA,GAAIc,QAAAA;AAC5E;AAEO,IAAMI,aAAa,CAACxB,MAAgBC,YAAAA;AACzC,SAAOH,QAAQE,MAAM,CAACG,UAAAA;AACpB,UAAMI,QAAQJ,MAAMK,UAAU,CAACH,OAAOA,OAAOJ,OAAAA;AAC7C,QAAIM,UAAU,IAAI;AAChBJ,YAAMO,OAAOH,OAAO,CAAA;IACtB;EACF,CAAA;AACF;AAEO,IAAMkB,iBAAiB,CAACzB,MAAgB0B,eAAAA;AAC7C,SAAO5B,QAAQE,MAAM,CAACG,UAAAA;AACpB,UAAMI,QAAQJ,MAAMK,UAAU,CAACH,OAAOA,OAAOqB,WAAWrB,EAAE;AAC1D,QACEE,UAAU,MACTmB,WAAWC,SAAS,qBAAqBpB,UAAU,KACnDmB,WAAWC,SAAS,mBAAmBpB,UAAUJ,MAAMY,SAAS,GACjE;AACA;IACF;AAEA,QAAIW,WAAWC,SAAS,mBAAmB;AAEzC,OAACxB,MAAMI,QAAQ,CAAA,GAAIJ,MAAMI,KAAAA,CAAM,IAAI;QAACJ,MAAMI,KAAAA;QAAQJ,MAAMI,QAAQ,CAAA;;IAClE,WAAWmB,WAAWC,SAAS,iBAAiB;AAE9C,OAACxB,MAAMI,KAAAA,GAAQJ,MAAMI,QAAQ,CAAA,CAAE,IAAI;QAACJ,MAAMI,QAAQ,CAAA;QAAIJ,MAAMI,KAAAA;;IAC9D;EACF,CAAA;AACF;",
|
|
6
|
+
"names": ["produce", "openEntry", "deck", "entryId", "options", "draft", "find", "id", "key", "index", "findIndex", "split", "splice", "push", "openSubjectsOnActiveDeck", "active", "subject", "length", "every", "includes", "pivotId", "pivotIndex", "baseDeck", "slice", "reduce", "acc", "closeEntry", "incrementPlank", "adjustment", "type"]
|
|
7
7
|
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
2
|
closeEntry
|
|
3
|
-
} from "./chunk-
|
|
4
|
-
import {
|
|
5
|
-
computeActiveUpdates
|
|
6
|
-
} from "./chunk-BRZAVPMC.mjs";
|
|
3
|
+
} from "./chunk-ZYYOSX5I.mjs";
|
|
7
4
|
import {
|
|
8
5
|
updateActiveDeck
|
|
9
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-GLB73Q6U.mjs";
|
|
10
7
|
import {
|
|
11
|
-
|
|
12
|
-
} from "./chunk-
|
|
8
|
+
DeckCapabilities_exports
|
|
9
|
+
} from "./chunk-64ODQD6S.mjs";
|
|
10
|
+
import {
|
|
11
|
+
computeActiveUpdates
|
|
12
|
+
} from "./chunk-GBIGQKYW.mjs";
|
|
13
13
|
import "./chunk-J5LGTIGS.mjs";
|
|
14
14
|
|
|
15
15
|
// src/operations/close.ts
|
|
16
16
|
import * as Effect from "effect/Effect";
|
|
17
17
|
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
18
18
|
import { LayoutOperation } from "@dxos/app-toolkit";
|
|
19
|
-
import { Operation } from "@dxos/
|
|
20
|
-
import { AttentionCapabilities } from "@dxos/plugin-attention
|
|
19
|
+
import { Operation } from "@dxos/compute";
|
|
20
|
+
import { AttentionCapabilities } from "@dxos/plugin-attention";
|
|
21
21
|
var handler = LayoutOperation.Close.pipe(Operation.withHandler(Effect.fnUntraced(function* (input) {
|
|
22
|
-
const deck = yield*
|
|
22
|
+
const deck = yield* DeckCapabilities_exports.getDeck();
|
|
23
23
|
const attention = yield* Capability.get(AttentionCapabilities.Attention);
|
|
24
24
|
const active = deck.solo ? [
|
|
25
25
|
deck.solo
|
|
@@ -30,7 +30,7 @@ var handler = LayoutOperation.Close.pipe(Operation.withHandler(Effect.fnUntraced
|
|
|
30
30
|
deck,
|
|
31
31
|
attention
|
|
32
32
|
});
|
|
33
|
-
yield* Capabilities.updateAtomValue(
|
|
33
|
+
yield* Capabilities.updateAtomValue(DeckCapabilities_exports.State, (state) => updateActiveDeck(state, deckUpdates));
|
|
34
34
|
if (toAttend) {
|
|
35
35
|
yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
|
|
36
36
|
subject: toAttend
|
|
@@ -41,4 +41,4 @@ var close_default = handler;
|
|
|
41
41
|
export {
|
|
42
42
|
close_default as default
|
|
43
43
|
};
|
|
44
|
-
//# sourceMappingURL=close-
|
|
44
|
+
//# sourceMappingURL=close-DG5IVQCE.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/operations/close.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,6BAA6B;AAOtC,IAAMC,UAA+DC,gBAAgBC,MAAMC,KACzFC,UAAUC,YACDC,kBAAW,WAAWC,OAAK;AAChC,QAAMC,OAAO,OAAOC,
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\n\nimport { closeEntry } from '../layout';\nimport { DeckCapabilities } from '../types';\nimport { computeActiveUpdates } from '../util';\nimport { updateActiveDeck } from './helpers';\n\nconst handler: Operation.WithHandler<typeof LayoutOperation.Close> = LayoutOperation.Close.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n\n const active = deck.solo ? [deck.solo] : deck.active;\n const next = input.subject.reduce((acc, id) => closeEntry(acc, id), active);\n const { deckUpdates, toAttend } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));\n\n if (toAttend) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: toAttend });\n }\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,uBAAuB;AAChC,SAASC,iBAAiB;AAC1B,SAASC,6BAA6B;AAOtC,IAAMC,UAA+DC,gBAAgBC,MAAMC,KACzFC,UAAUC,YACDC,kBAAW,WAAWC,OAAK;AAChC,QAAMC,OAAO,OAAOC,yBAAiBC,QAAO;AAC5C,QAAMC,YAAY,OAAOC,WAAWC,IAAIC,sBAAsBC,SAAS;AAEvE,QAAMC,SAASR,KAAKS,OAAO;IAACT,KAAKS;MAAQT,KAAKQ;AAC9C,QAAME,OAAOX,MAAMY,QAAQC,OAAO,CAACC,KAAKC,OAAOC,WAAWF,KAAKC,EAAAA,GAAKN,MAAAA;AACpE,QAAM,EAAEQ,aAAaC,SAAQ,IAAKC,qBAAqB;IAAER;IAAMV;IAAMG;EAAU,CAAA;AAC/E,SAAOgB,aAAaC,gBAAgBnB,yBAAiBoB,OAAO,CAACC,UAAUC,iBAAiBD,OAAON,WAAAA,CAAAA;AAE/F,MAAIC,UAAU;AACZ,WAAOrB,UAAU4B,SAAS/B,gBAAgBgC,gBAAgB;MAAEd,SAASM;IAAS,CAAA;EAChF;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,gBAAezB;",
|
|
6
6
|
"names": ["Effect", "Capabilities", "Capability", "LayoutOperation", "Operation", "AttentionCapabilities", "handler", "LayoutOperation", "Close", "pipe", "Operation", "withHandler", "fnUntraced", "input", "deck", "DeckCapabilities", "getDeck", "attention", "Capability", "get", "AttentionCapabilities", "Attention", "active", "solo", "next", "subject", "reduce", "acc", "id", "closeEntry", "deckUpdates", "toAttend", "computeActiveUpdates", "Capabilities", "updateAtomValue", "State", "state", "updateActiveDeck", "schedule", "ScrollIntoView"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import "../chunk-J5LGTIGS.mjs";
|
|
2
|
+
|
|
3
|
+
// src/components/index.ts
|
|
4
|
+
import { lazy } from "react";
|
|
5
|
+
|
|
6
|
+
// src/components/Matrix/Matrix.tsx
|
|
7
|
+
import { useFocusFinders } from "@fluentui/react-tabster";
|
|
8
|
+
import { createContext } from "@radix-ui/react-context";
|
|
9
|
+
import React, { forwardRef, useCallback, useEffect, useImperativeHandle, useRef } from "react";
|
|
10
|
+
import { ScrollArea } from "@dxos/react-ui";
|
|
11
|
+
import { useAttended } from "@dxos/react-ui-attention";
|
|
12
|
+
import { Mosaic } from "@dxos/react-ui-mosaic";
|
|
13
|
+
import { composable, composableProps } from "@dxos/ui-theme";
|
|
14
|
+
var MATRIX_NAME = "Matrix";
|
|
15
|
+
var [MatrixProvider, useMatrixContext] = createContext(MATRIX_NAME);
|
|
16
|
+
var MATRIX_ROOT_NAME = "Matrix.Root";
|
|
17
|
+
var MatrixRoot = /* @__PURE__ */ forwardRef(({ children, items = [], Tile, current, onCurrentChange }, forwardedRef) => {
|
|
18
|
+
const viewportRef = useRef(null);
|
|
19
|
+
const registerViewport = useCallback((element) => {
|
|
20
|
+
viewportRef.current = element;
|
|
21
|
+
}, []);
|
|
22
|
+
const { findFirstFocusable } = useFocusFinders();
|
|
23
|
+
const findFirstFocusableRef = useRef(findFirstFocusable);
|
|
24
|
+
findFirstFocusableRef.current = findFirstFocusable;
|
|
25
|
+
const attended = useAttended();
|
|
26
|
+
const itemIds = useRef(/* @__PURE__ */ new Set());
|
|
27
|
+
useEffect(() => {
|
|
28
|
+
itemIds.current = new Set(items.map((item) => item.id));
|
|
29
|
+
}, [
|
|
30
|
+
items
|
|
31
|
+
]);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
const matchedId = attended.find((id) => itemIds.current.has(id));
|
|
34
|
+
if (matchedId !== current) {
|
|
35
|
+
onCurrentChange?.(matchedId);
|
|
36
|
+
}
|
|
37
|
+
}, [
|
|
38
|
+
attended,
|
|
39
|
+
current,
|
|
40
|
+
onCurrentChange
|
|
41
|
+
]);
|
|
42
|
+
useImperativeHandle(forwardedRef, () => ({
|
|
43
|
+
scrollTo: (id) => {
|
|
44
|
+
const viewport = viewportRef.current;
|
|
45
|
+
if (!viewport) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const tile = viewport.querySelector(`[data-object-id="${CSS.escape(id)}"]`);
|
|
49
|
+
if (!tile) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const focusable = findFirstFocusableRef.current(tile);
|
|
53
|
+
(focusable ?? tile).focus({
|
|
54
|
+
preventScroll: true
|
|
55
|
+
});
|
|
56
|
+
const tileRect = tile.getBoundingClientRect();
|
|
57
|
+
const viewportRect = viewport.getBoundingClientRect();
|
|
58
|
+
const offset = tileRect.left - viewportRect.left + viewport.scrollLeft;
|
|
59
|
+
if (Math.abs(offset - viewport.scrollLeft) > 1) {
|
|
60
|
+
viewport.scrollTo({
|
|
61
|
+
left: offset,
|
|
62
|
+
behavior: "smooth"
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}));
|
|
67
|
+
return /* @__PURE__ */ React.createElement(MatrixProvider, {
|
|
68
|
+
items,
|
|
69
|
+
Tile,
|
|
70
|
+
current,
|
|
71
|
+
onCurrentChange,
|
|
72
|
+
registerViewport
|
|
73
|
+
}, children);
|
|
74
|
+
});
|
|
75
|
+
MatrixRoot.displayName = MATRIX_ROOT_NAME;
|
|
76
|
+
var MATRIX_CONTENT_NAME = "Matrix.Content";
|
|
77
|
+
var MatrixContent = composable(({ children, ...props }, forwardedRef) => {
|
|
78
|
+
const { className, ...rest } = composableProps(props);
|
|
79
|
+
return /* @__PURE__ */ React.createElement(Mosaic.Container, {
|
|
80
|
+
ref: forwardedRef,
|
|
81
|
+
classNames: className,
|
|
82
|
+
orientation: "horizontal",
|
|
83
|
+
...rest
|
|
84
|
+
}, children);
|
|
85
|
+
});
|
|
86
|
+
MatrixContent.displayName = MATRIX_CONTENT_NAME;
|
|
87
|
+
var MATRIX_VIEWPORT_NAME = "Matrix.Viewport";
|
|
88
|
+
var getId = (item) => item.id;
|
|
89
|
+
var MatrixViewport = composable(({ ...props }, forwardedRef) => {
|
|
90
|
+
const { items, Tile, registerViewport } = useMatrixContext(MATRIX_VIEWPORT_NAME);
|
|
91
|
+
const viewportRef = useCallback((element) => {
|
|
92
|
+
registerViewport(element);
|
|
93
|
+
}, [
|
|
94
|
+
registerViewport
|
|
95
|
+
]);
|
|
96
|
+
return /* @__PURE__ */ React.createElement(ScrollArea.Root, {
|
|
97
|
+
orientation: "horizontal",
|
|
98
|
+
padding: true,
|
|
99
|
+
snap: true,
|
|
100
|
+
...composableProps(props),
|
|
101
|
+
ref: forwardedRef
|
|
102
|
+
}, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
|
|
103
|
+
ref: viewportRef
|
|
104
|
+
}, /* @__PURE__ */ React.createElement(Mosaic.Stack, {
|
|
105
|
+
orientation: "horizontal",
|
|
106
|
+
classNames: "snap-x snap-mandatory gap-2",
|
|
107
|
+
getId,
|
|
108
|
+
items,
|
|
109
|
+
Tile,
|
|
110
|
+
draggable: false
|
|
111
|
+
})));
|
|
112
|
+
});
|
|
113
|
+
MatrixViewport.displayName = MATRIX_VIEWPORT_NAME;
|
|
114
|
+
var Matrix = {
|
|
115
|
+
Root: MatrixRoot,
|
|
116
|
+
Content: MatrixContent,
|
|
117
|
+
Viewport: MatrixViewport
|
|
118
|
+
};
|
|
119
|
+
|
|
120
|
+
// src/components/index.ts
|
|
121
|
+
var DeckSettings = lazy(() => import("../DeckSettings-W5I57OXM.mjs"));
|
|
122
|
+
export {
|
|
123
|
+
DeckSettings,
|
|
124
|
+
Matrix
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/components/index.ts", "../../../../src/components/Matrix/Matrix.tsx"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ComponentType, lazy } from 'react';\n\nexport const DeckSettings: ComponentType<any> = lazy(() => import('./DeckSettings'));\n\nexport { Matrix } from './Matrix';\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { forwardRef, type PropsWithChildren, useCallback, useEffect, useImperativeHandle, useRef } from 'react';\n\nimport { Obj } from '@dxos/echo';\nimport { ScrollArea } from '@dxos/react-ui';\nimport { useAttended } from '@dxos/react-ui-attention';\nimport { type MosaicStackTileComponent, Mosaic } from '@dxos/react-ui-mosaic';\nimport { composable, composableProps } from '@dxos/ui-theme';\nimport { type ComposableProps } from '@dxos/ui-types';\n\n//\n// Context\n//\n\nconst MATRIX_NAME = 'Matrix';\n\ntype MatrixContextValue = {\n /** Items to render. */\n items: Obj.Any[];\n /** Tile component to render for each item. */\n Tile: MosaicStackTileComponent<Obj.Any>;\n /** Currently attended tile ID. */\n current?: Obj.ID;\n /** Callback when the attended tile changes. */\n onCurrentChange?: (id: Obj.ID | undefined) => void;\n /** Register the viewport element for scroll operations. */\n registerViewport: (element: HTMLElement | null) => void;\n};\n\nconst [MatrixProvider, useMatrixContext] = createContext<MatrixContextValue>(MATRIX_NAME);\n\n//\n// Controller\n//\n\ninterface MatrixController {\n scrollTo: (id: Obj.ID) => void;\n}\n\n//\n// Root\n//\n\nconst MATRIX_ROOT_NAME = 'Matrix.Root';\n\ntype MatrixRootProps = PropsWithChildren<{\n /** Items to render. */\n items?: Obj.Any[];\n /** Tile component to render for each item. */\n Tile: MosaicStackTileComponent<Obj.Any>;\n /** Currently attended tile ID. */\n current?: Obj.ID;\n /** Callback when the attended tile changes. */\n onCurrentChange?: (id: Obj.ID | undefined) => void;\n}>;\n\n/**\n * Headless root that provides matrix context.\n * Syncs the attention system with `onCurrentChange` — when a tile gains attention, the callback fires.\n */\nconst MatrixRoot = forwardRef<MatrixController, MatrixRootProps>(\n ({ children, items = [], Tile, current, onCurrentChange }, forwardedRef) => {\n const viewportRef = useRef<HTMLElement | null>(null);\n const registerViewport = useCallback((element: HTMLElement | null) => {\n viewportRef.current = element;\n }, []);\n\n const { findFirstFocusable } = useFocusFinders();\n const findFirstFocusableRef = useRef(findFirstFocusable);\n findFirstFocusableRef.current = findFirstFocusable;\n\n // Sync attention system with current tile.\n const attended = useAttended();\n const itemIds = useRef(new Set<string>());\n useEffect(() => {\n itemIds.current = new Set(items.map((item) => item.id));\n }, [items]);\n\n useEffect(() => {\n // Find the first attended ID that matches an item.\n const matchedId = attended.find((id) => itemIds.current.has(id));\n if (matchedId !== current) {\n onCurrentChange?.(matchedId);\n }\n }, [attended, current, onCurrentChange]);\n\n useImperativeHandle(forwardedRef, () => ({\n scrollTo: (id) => {\n const viewport = viewportRef.current;\n if (!viewport) {\n return;\n }\n\n const tile = viewport.querySelector<HTMLElement>(`[data-object-id=\"${CSS.escape(id)}\"]`);\n if (!tile) {\n return;\n }\n\n // Focus first focusable element so attention updates immediately, then scroll.\n const focusable = findFirstFocusableRef.current(tile);\n (focusable ?? tile).focus({ preventScroll: true });\n\n const tileRect = tile.getBoundingClientRect();\n const viewportRect = viewport.getBoundingClientRect();\n const offset = tileRect.left - viewportRect.left + viewport.scrollLeft;\n if (Math.abs(offset - viewport.scrollLeft) > 1) {\n viewport.scrollTo({ left: offset, behavior: 'smooth' });\n }\n },\n }));\n\n return (\n <MatrixProvider\n items={items}\n Tile={Tile}\n current={current}\n onCurrentChange={onCurrentChange}\n registerViewport={registerViewport}\n >\n {children}\n </MatrixProvider>\n );\n },\n);\n\nMatrixRoot.displayName = MATRIX_ROOT_NAME;\n\n//\n// Content\n//\n\nconst MATRIX_CONTENT_NAME = 'Matrix.Content';\n\ntype MatrixContentProps = ComposableProps;\n\n/**\n * Styled container wrapping Mosaic.Container for drag-and-drop support.\n */\nconst MatrixContent = composable<HTMLDivElement>(({ children, ...props }, forwardedRef) => {\n const { className, ...rest } = composableProps(props);\n return (\n <Mosaic.Container ref={forwardedRef} classNames={className} orientation='horizontal' {...rest}>\n {children}\n </Mosaic.Container>\n );\n});\n\nMatrixContent.displayName = MATRIX_CONTENT_NAME;\n\n//\n// Viewport\n//\n\nconst MATRIX_VIEWPORT_NAME = 'Matrix.Viewport';\n\ntype MatrixViewportProps = ComposableProps;\n\nconst getId = (item: Obj.Any) => item.id;\n\n/**\n * Horizontally scrollable viewport that renders tiles from context.\n */\nconst MatrixViewport = composable<HTMLDivElement>(({ ...props }, forwardedRef) => {\n const { items, Tile, registerViewport } = useMatrixContext(MATRIX_VIEWPORT_NAME);\n const viewportRef = useCallback(\n (element: HTMLElement | null) => {\n registerViewport(element);\n },\n [registerViewport],\n );\n\n return (\n <ScrollArea.Root orientation='horizontal' padding snap {...composableProps(props)} ref={forwardedRef}>\n <ScrollArea.Viewport ref={viewportRef}>\n <Mosaic.Stack\n orientation='horizontal'\n classNames='snap-x snap-mandatory gap-2'\n getId={getId}\n items={items}\n Tile={Tile}\n draggable={false}\n />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n});\n\nMatrixViewport.displayName = MATRIX_VIEWPORT_NAME;\n\n//\n// Matrix\n//\n\nexport const Matrix = {\n Root: MatrixRoot,\n Content: MatrixContent,\n Viewport: MatrixViewport,\n};\n\nexport type { MatrixController, MatrixRootProps, MatrixContentProps, MatrixViewportProps };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["lazy", "useFocusFinders", "createContext", "React", "forwardRef", "useCallback", "useEffect", "useImperativeHandle", "useRef", "ScrollArea", "useAttended", "Mosaic", "composable", "composableProps", "MATRIX_NAME", "MatrixProvider", "useMatrixContext", "MATRIX_ROOT_NAME", "MatrixRoot", "children", "items", "Tile", "current", "onCurrentChange", "forwardedRef", "viewportRef", "registerViewport", "element", "findFirstFocusable", "findFirstFocusableRef", "attended", "itemIds", "Set", "map", "item", "id", "matchedId", "find", "has", "scrollTo", "viewport", "tile", "querySelector", "CSS", "escape", "focusable", "focus", "preventScroll", "tileRect", "getBoundingClientRect", "viewportRect", "offset", "left", "scrollLeft", "Math", "abs", "behavior", "displayName", "MATRIX_CONTENT_NAME", "MatrixContent", "props", "className", "rest", "Container", "ref", "classNames", "orientation", "MATRIX_VIEWPORT_NAME", "getId", "MatrixViewport", "Root", "padding", "snap", "Viewport", "Stack", "draggable", "Matrix", "Content", "DeckSettings", "lazy"]
|
|
7
|
+
}
|