@dxos/plugin-deck 0.8.4-main.72ec0f3 → 0.8.4-main.7996785055
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/Banner-TJ4ZQ7A6.mjs +16 -0
- package/dist/lib/browser/Banner-TJ4ZQ7A6.mjs.map +7 -0
- package/dist/lib/browser/DeckSettings-CZ3KWAXT.mjs +96 -0
- package/dist/lib/browser/DeckSettings-CZ3KWAXT.mjs.map +7 -0
- package/dist/lib/browser/add-toast-XOLZDESF.mjs +24 -0
- package/dist/lib/browser/add-toast-XOLZDESF.mjs.map +7 -0
- package/dist/lib/browser/adjust-N4YCWW3J.mjs +96 -0
- package/dist/lib/browser/adjust-N4YCWW3J.mjs.map +7 -0
- package/dist/lib/browser/app-graph-builder-34HXGUI2.mjs +123 -0
- package/dist/lib/browser/app-graph-builder-34HXGUI2.mjs.map +7 -0
- package/dist/lib/browser/change-companion-ONLIPI6F.mjs +34 -0
- package/dist/lib/browser/change-companion-ONLIPI6F.mjs.map +7 -0
- package/dist/lib/browser/check-app-scheme-72BBQSF6.mjs +33 -0
- package/dist/lib/browser/check-app-scheme-72BBQSF6.mjs.map +7 -0
- package/dist/lib/browser/chunk-26ZKVZIN.mjs +112 -0
- package/dist/lib/browser/chunk-26ZKVZIN.mjs.map +7 -0
- package/dist/lib/browser/chunk-4RO3FRCR.mjs +187 -0
- package/dist/lib/browser/chunk-4RO3FRCR.mjs.map +7 -0
- package/dist/lib/browser/chunk-4TLX2UGY.mjs +88 -0
- package/dist/lib/browser/chunk-4TLX2UGY.mjs.map +7 -0
- package/dist/lib/browser/chunk-J6OERAED.mjs +69 -0
- package/dist/lib/browser/chunk-J6OERAED.mjs.map +7 -0
- package/dist/lib/browser/chunk-PPM7LZSC.mjs +8 -0
- package/dist/lib/browser/chunk-PPM7LZSC.mjs.map +7 -0
- package/dist/lib/browser/chunk-RCLJGMR7.mjs +1417 -0
- package/dist/lib/browser/chunk-RCLJGMR7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-UXLU6CMW.mjs → chunk-UN7XQWDE.mjs} +9 -2
- package/dist/lib/browser/chunk-UN7XQWDE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-F3VCCHVL.mjs → chunk-WZXKWTDN.mjs} +74 -35
- package/dist/lib/browser/chunk-WZXKWTDN.mjs.map +7 -0
- package/dist/lib/browser/chunk-YAAXLCVX.mjs +30 -0
- package/dist/lib/browser/chunk-YAAXLCVX.mjs.map +7 -0
- package/dist/lib/browser/close-SPUQQH2F.mjs +44 -0
- package/dist/lib/browser/close-SPUQQH2F.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +77 -76
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/open-2DK2GFUW.mjs +95 -0
- package/dist/lib/browser/open-2DK2GFUW.mjs.map +7 -0
- package/dist/lib/browser/operation-handler-ETCDHJUK.mjs +16 -0
- package/dist/lib/browser/operation-handler-ETCDHJUK.mjs.map +7 -0
- package/dist/lib/browser/operations/index.mjs +12 -0
- package/dist/lib/browser/react-root-2IXL32LF.mjs +50 -0
- package/dist/lib/browser/react-root-2IXL32LF.mjs.map +7 -0
- package/dist/lib/browser/react-surface-LMALTBUM.mjs +44 -0
- package/dist/lib/browser/react-surface-LMALTBUM.mjs.map +7 -0
- package/dist/lib/browser/revert-workspace-NIXRKBAQ.mjs +21 -0
- package/dist/lib/browser/revert-workspace-NIXRKBAQ.mjs.map +7 -0
- package/dist/lib/browser/scroll-into-view-QUORIGE3.mjs +21 -0
- package/dist/lib/browser/scroll-into-view-QUORIGE3.mjs.map +7 -0
- package/dist/lib/browser/set-GKTHE4IZ.mjs +37 -0
- package/dist/lib/browser/set-GKTHE4IZ.mjs.map +7 -0
- package/dist/lib/browser/set-layout-mode-TRWCEJAO.mjs +91 -0
- package/dist/lib/browser/set-layout-mode-TRWCEJAO.mjs.map +7 -0
- package/dist/lib/browser/settings-3MYJVL5V.mjs +40 -0
- package/dist/lib/browser/settings-3MYJVL5V.mjs.map +7 -0
- package/dist/lib/browser/show-undo-OSWJQUSO.mjs +60 -0
- package/dist/lib/browser/show-undo-OSWJQUSO.mjs.map +7 -0
- package/dist/lib/browser/state-CFEZH3DH.mjs +100 -0
- package/dist/lib/browser/state-CFEZH3DH.mjs.map +7 -0
- package/dist/lib/browser/switch-workspace-JXIYKYFR.mjs +68 -0
- package/dist/lib/browser/switch-workspace-JXIYKYFR.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +12 -8
- package/dist/lib/browser/update-complementary-IDQANYVM.mjs +28 -0
- package/dist/lib/browser/update-complementary-IDQANYVM.mjs.map +7 -0
- package/dist/lib/browser/update-dialog-LEF6XOAA.mjs +29 -0
- package/dist/lib/browser/update-dialog-LEF6XOAA.mjs.map +7 -0
- package/dist/lib/browser/update-plank-size-VMGJQJKT.mjs +28 -0
- package/dist/lib/browser/update-plank-size-VMGJQJKT.mjs.map +7 -0
- package/dist/lib/browser/update-popover-HLFD3DXD.mjs +33 -0
- package/dist/lib/browser/update-popover-HLFD3DXD.mjs.map +7 -0
- package/dist/lib/browser/update-sidebar-NJ3PB2Z4.mjs +25 -0
- package/dist/lib/browser/update-sidebar-NJ3PB2Z4.mjs.map +7 -0
- package/dist/lib/browser/url-handler-2QE6C6KP.mjs +106 -0
- package/dist/lib/browser/url-handler-2QE6C6KP.mjs.map +7 -0
- package/dist/lib/node-esm/Banner-3Y6W3VK3.mjs +17 -0
- package/dist/lib/node-esm/Banner-3Y6W3VK3.mjs.map +7 -0
- package/dist/lib/node-esm/DeckSettings-ULPBDAT3.mjs +97 -0
- package/dist/lib/node-esm/DeckSettings-ULPBDAT3.mjs.map +7 -0
- package/dist/lib/node-esm/add-toast-HQEPHXHX.mjs +25 -0
- package/dist/lib/node-esm/add-toast-HQEPHXHX.mjs.map +7 -0
- package/dist/lib/node-esm/adjust-MR6Z7HI3.mjs +97 -0
- package/dist/lib/node-esm/adjust-MR6Z7HI3.mjs.map +7 -0
- package/dist/lib/node-esm/app-graph-builder-4BD6BABT.mjs +124 -0
- package/dist/lib/node-esm/app-graph-builder-4BD6BABT.mjs.map +7 -0
- package/dist/lib/node-esm/change-companion-JJ6MFJYZ.mjs +35 -0
- package/dist/lib/node-esm/change-companion-JJ6MFJYZ.mjs.map +7 -0
- package/dist/lib/node-esm/check-app-scheme-NNJD4MJ3.mjs +34 -0
- package/dist/lib/node-esm/check-app-scheme-NNJD4MJ3.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-2K2OUSFN.mjs +10 -0
- package/dist/lib/node-esm/chunk-2K2OUSFN.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-3QUPGLN4.mjs +188 -0
- package/dist/lib/node-esm/chunk-3QUPGLN4.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4EIUXR64.mjs +71 -0
- package/dist/lib/node-esm/chunk-4EIUXR64.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-4NLQZESJ.mjs +89 -0
- package/dist/lib/node-esm/chunk-4NLQZESJ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-CMISPQAO.mjs +24 -0
- package/dist/lib/node-esm/chunk-CMISPQAO.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-HM4KJZ6L.mjs +1418 -0
- package/dist/lib/node-esm/chunk-HM4KJZ6L.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-J2AFCKMH.mjs +202 -0
- package/dist/lib/node-esm/chunk-J2AFCKMH.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-WD6BJV6B.mjs +32 -0
- package/dist/lib/node-esm/chunk-WD6BJV6B.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YYXVVZSS.mjs +114 -0
- package/dist/lib/node-esm/chunk-YYXVVZSS.mjs.map +7 -0
- package/dist/lib/node-esm/close-FWQQ3IH2.mjs +45 -0
- package/dist/lib/node-esm/close-FWQQ3IH2.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +176 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/lib/node-esm/open-FCSJ42AD.mjs +96 -0
- package/dist/lib/node-esm/open-FCSJ42AD.mjs.map +7 -0
- package/dist/lib/node-esm/operation-handler-A3FWOT4M.mjs +17 -0
- package/dist/lib/node-esm/operation-handler-A3FWOT4M.mjs.map +7 -0
- package/dist/lib/node-esm/operations/index.mjs +13 -0
- package/dist/lib/node-esm/operations/index.mjs.map +7 -0
- package/dist/lib/node-esm/react-root-44EZV4V7.mjs +51 -0
- package/dist/lib/node-esm/react-root-44EZV4V7.mjs.map +7 -0
- package/dist/lib/node-esm/react-surface-KFFPAGAC.mjs +45 -0
- package/dist/lib/node-esm/react-surface-KFFPAGAC.mjs.map +7 -0
- package/dist/lib/node-esm/revert-workspace-APB6WY3W.mjs +22 -0
- package/dist/lib/node-esm/revert-workspace-APB6WY3W.mjs.map +7 -0
- package/dist/lib/node-esm/scroll-into-view-YZVRLJKB.mjs +22 -0
- package/dist/lib/node-esm/scroll-into-view-YZVRLJKB.mjs.map +7 -0
- package/dist/lib/node-esm/set-WSNRQ3DI.mjs +38 -0
- package/dist/lib/node-esm/set-WSNRQ3DI.mjs.map +7 -0
- package/dist/lib/node-esm/set-layout-mode-LGAF5R4U.mjs +92 -0
- package/dist/lib/node-esm/set-layout-mode-LGAF5R4U.mjs.map +7 -0
- package/dist/lib/node-esm/settings-77JXSDLC.mjs +41 -0
- package/dist/lib/node-esm/settings-77JXSDLC.mjs.map +7 -0
- package/dist/lib/node-esm/show-undo-R3LATVTS.mjs +61 -0
- package/dist/lib/node-esm/show-undo-R3LATVTS.mjs.map +7 -0
- package/dist/lib/node-esm/state-I3LRM7SB.mjs +101 -0
- package/dist/lib/node-esm/state-I3LRM7SB.mjs.map +7 -0
- package/dist/lib/node-esm/switch-workspace-FKZT6EL4.mjs +69 -0
- package/dist/lib/node-esm/switch-workspace-FKZT6EL4.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +37 -0
- package/dist/lib/node-esm/types/index.mjs.map +7 -0
- package/dist/lib/node-esm/update-complementary-KVLJTKK3.mjs +29 -0
- package/dist/lib/node-esm/update-complementary-KVLJTKK3.mjs.map +7 -0
- package/dist/lib/node-esm/update-dialog-EXY2PCHT.mjs +30 -0
- package/dist/lib/node-esm/update-dialog-EXY2PCHT.mjs.map +7 -0
- package/dist/lib/node-esm/update-plank-size-67U7Z5VK.mjs +29 -0
- package/dist/lib/node-esm/update-plank-size-67U7Z5VK.mjs.map +7 -0
- package/dist/lib/node-esm/update-popover-MDOZNY2D.mjs +34 -0
- package/dist/lib/node-esm/update-popover-MDOZNY2D.mjs.map +7 -0
- package/dist/lib/node-esm/update-sidebar-5LEWTTGW.mjs +26 -0
- package/dist/lib/node-esm/update-sidebar-5LEWTTGW.mjs.map +7 -0
- package/dist/lib/node-esm/url-handler-WSC5K5ME.mjs +107 -0
- package/dist/lib/node-esm/url-handler-WSC5K5ME.mjs.map +7 -0
- package/dist/types/src/DeckPlugin.d.ts +2 -1
- package/dist/types/src/DeckPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
- package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +5 -0
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -0
- package/dist/types/src/capabilities/check-app-scheme/index.d.ts +3 -0
- package/dist/types/src/capabilities/check-app-scheme/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/index.d.ts +7 -13
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler/index.d.ts +4 -0
- package/dist/types/src/capabilities/operation-handler/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/index.d.ts +6 -0
- package/dist/types/src/capabilities/react-root/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts +9 -0
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/index.d.ts +19 -0
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/settings.d.ts +22 -0
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/index.d.ts +172 -0
- package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/state/state.d.ts +175 -0
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
- package/dist/types/src/capabilities/tools/index.d.ts +3 -0
- package/dist/types/src/capabilities/tools/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/tools/tools.d.ts +12 -0
- package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -0
- package/dist/types/src/capabilities/url-handler/index.d.ts +3 -0
- package/dist/types/src/capabilities/url-handler/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts +5 -0
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +2 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckMain.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Fallback.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Toast.d.ts +3 -3
- package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Plank/Plank.d.ts +5 -5
- package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
- package/dist/types/src/components/Plank/Plank.stories.d.ts +26 -7
- package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankControls.d.ts +1 -1
- package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankError.d.ts +7 -5
- package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankHeading.d.ts +2 -2
- package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
- package/dist/types/src/components/fragments.d.ts +4 -1
- package/dist/types/src/components/fragments.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +0 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/Banner/Banner.d.ts +2 -0
- package/dist/types/src/containers/Banner/Banner.d.ts.map +1 -0
- package/dist/types/src/containers/Banner/index.d.ts +3 -0
- package/dist/types/src/containers/Banner/index.d.ts.map +1 -0
- package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts +8 -0
- package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts.map +1 -0
- package/dist/types/src/containers/DeckSettings/index.d.ts +3 -0
- package/dist/types/src/containers/DeckSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +4 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +2 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckCompanions.d.ts +3 -4
- package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckState.d.ts +17 -0
- package/dist/types/src/hooks/useDeckState.d.ts.map +1 -0
- 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 +2 -2
- package/dist/types/src/hooks/useNodeActionExpander.d.ts +1 -1
- package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
- package/dist/types/src/hooks/useSelectedCompanion.d.ts +13 -0
- package/dist/types/src/hooks/useSelectedCompanion.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/layout.d.ts +1 -7
- package/dist/types/src/layout.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -2
- 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/change-companion.d.ts +5 -0
- package/dist/types/src/operations/change-companion.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/definitions.d.ts +18 -0
- package/dist/types/src/operations/definitions.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 +4 -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 +5 -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-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/translations.d.ts +2 -1
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/{capabilities → types}/capabilities.d.ts +96 -90
- package/dist/types/src/types/capabilities.d.ts.map +1 -0
- package/dist/types/src/types/events.d.ts +7 -0
- package/dist/types/src/types/events.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +2 -0
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +40 -38
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +1 -0
- package/dist/types/src/util/index.d.ts.map +1 -1
- 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 +18 -3
- 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 +69 -49
- package/src/DeckPlugin.ts +26 -52
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +119 -0
- package/src/capabilities/app-graph-builder/index.ts +7 -0
- package/src/capabilities/check-app-scheme/check-app-scheme.ts +45 -0
- package/src/capabilities/check-app-scheme/index.ts +7 -0
- package/src/capabilities/index.ts +8 -14
- package/src/capabilities/operation-handler/index.ts +11 -0
- package/src/capabilities/operation-handler/operation-handler.ts +16 -0
- package/src/capabilities/react-root/index.ts +7 -0
- package/src/capabilities/react-root/react-root.tsx +47 -0
- package/src/capabilities/react-surface/index.ts +7 -0
- package/src/capabilities/react-surface/react-surface.tsx +38 -0
- package/src/capabilities/settings/index.ts +7 -0
- package/src/capabilities/settings/settings.ts +39 -0
- package/src/capabilities/state/index.ts +7 -0
- package/src/capabilities/state/state.ts +97 -0
- package/src/capabilities/tools/index.ts +7 -0
- package/src/capabilities/tools/tools.ts +91 -0
- package/src/capabilities/url-handler/index.ts +7 -0
- package/src/capabilities/url-handler/url-handler.ts +108 -0
- package/src/components/DeckLayout/ActiveNode.tsx +3 -2
- package/src/components/DeckLayout/Banner.tsx +9 -9
- package/src/components/DeckLayout/ContentEmpty.tsx +5 -6
- package/src/components/DeckLayout/DeckLayout.stories.tsx +20 -31
- package/src/components/DeckLayout/DeckLayout.tsx +13 -11
- package/src/components/DeckLayout/DeckMain.tsx +65 -59
- package/src/components/DeckLayout/Dialog.tsx +22 -13
- package/src/components/DeckLayout/Fallback.tsx +2 -6
- package/src/components/DeckLayout/Popover.tsx +83 -22
- package/src/components/DeckLayout/StatusBar.tsx +4 -4
- package/src/components/DeckLayout/Toast.tsx +4 -4
- package/src/components/Plank/Plank.stories.tsx +18 -9
- package/src/components/Plank/Plank.tsx +41 -38
- package/src/components/Plank/PlankControls.tsx +9 -11
- package/src/components/Plank/PlankError.tsx +49 -19
- package/src/components/Plank/PlankHeading.tsx +41 -46
- package/src/components/Plank/PlankLoading.tsx +1 -1
- package/src/components/Sidebar/ComplementarySidebar.tsx +78 -86
- package/src/components/Sidebar/Sidebar.tsx +7 -7
- package/src/components/Sidebar/SidebarButton.tsx +31 -26
- package/src/components/fragments.ts +10 -5
- package/src/components/index.ts +0 -1
- package/src/containers/Banner/Banner.tsx +5 -0
- package/src/containers/Banner/index.ts +7 -0
- package/src/{components → containers}/DeckSettings/DeckSettings.tsx +41 -31
- package/src/containers/DeckSettings/index.ts +7 -0
- package/src/containers/index.ts +8 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useCompanions.ts +2 -2
- package/src/hooks/useDeckCompanions.ts +7 -11
- package/src/hooks/useDeckState.ts +82 -0
- package/src/hooks/useHoistStatusbar.ts +3 -6
- package/src/hooks/useMainSize.ts +2 -2
- package/src/hooks/useNodeActionExpander.ts +4 -4
- package/src/hooks/useSelectedCompanion.ts +32 -0
- package/src/index.ts +1 -2
- package/src/layout.ts +1 -14
- package/src/meta.ts +3 -3
- package/src/operations/add-toast.ts +24 -0
- package/src/operations/adjust.ts +83 -0
- package/src/operations/change-companion.ts +35 -0
- package/src/operations/close.ts +35 -0
- package/src/operations/definitions.ts +61 -0
- package/src/operations/helpers.ts +22 -0
- package/src/operations/index.ts +26 -0
- package/src/operations/open.ts +89 -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 +80 -0
- package/src/operations/set.ts +36 -0
- package/src/operations/show-undo.ts +46 -0
- package/src/operations/switch-workspace.ts +60 -0
- package/src/operations/update-complementary.ts +33 -0
- package/src/operations/update-dialog.ts +34 -0
- package/src/operations/update-plank-size.ts +29 -0
- package/src/operations/update-popover.ts +36 -0
- package/src/operations/update-sidebar.ts +28 -0
- package/src/translations.ts +2 -1
- package/src/types/capabilities.ts +33 -0
- package/src/types/events.ts +21 -0
- package/src/types/index.ts +2 -0
- package/src/types/schema.ts +32 -25
- package/src/util/index.ts +1 -0
- package/src/util/layoutAppliesTopbar.ts +1 -1
- package/src/util/overscroll.ts +3 -3
- 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 +49 -29
- package/dist/lib/browser/app-graph-builder-D74NTOMK.mjs +0 -128
- package/dist/lib/browser/app-graph-builder-D74NTOMK.mjs.map +0 -7
- package/dist/lib/browser/check-app-scheme-HIEVFAAX.mjs +0 -32
- package/dist/lib/browser/check-app-scheme-HIEVFAAX.mjs.map +0 -7
- package/dist/lib/browser/chunk-5KMJPIQC.mjs +0 -16
- package/dist/lib/browser/chunk-5KMJPIQC.mjs.map +0 -7
- package/dist/lib/browser/chunk-CNTGBCMK.mjs +0 -145
- package/dist/lib/browser/chunk-CNTGBCMK.mjs.map +0 -7
- package/dist/lib/browser/chunk-F3VCCHVL.mjs.map +0 -7
- package/dist/lib/browser/chunk-OLDBLCAX.mjs +0 -128
- package/dist/lib/browser/chunk-OLDBLCAX.mjs.map +0 -7
- package/dist/lib/browser/chunk-SDIYDK47.mjs +0 -1553
- package/dist/lib/browser/chunk-SDIYDK47.mjs.map +0 -7
- package/dist/lib/browser/chunk-UXLU6CMW.mjs.map +0 -7
- package/dist/lib/browser/chunk-VBYJ664A.mjs +0 -132
- package/dist/lib/browser/chunk-VBYJ664A.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-UA4YQGAC.mjs +0 -524
- package/dist/lib/browser/intent-resolver-UA4YQGAC.mjs.map +0 -7
- package/dist/lib/browser/react-root-76RSDA6R.mjs +0 -44
- package/dist/lib/browser/react-root-76RSDA6R.mjs.map +0 -7
- package/dist/lib/browser/react-surface-2CSKDN7K.mjs +0 -40
- package/dist/lib/browser/react-surface-2CSKDN7K.mjs.map +0 -7
- package/dist/lib/browser/settings-SDPTOCCM.mjs +0 -30
- package/dist/lib/browser/settings-SDPTOCCM.mjs.map +0 -7
- package/dist/lib/browser/state-7IFAGZQO.mjs +0 -12
- package/dist/lib/browser/toolkit-L5CFXJCF.mjs +0 -52
- package/dist/lib/browser/toolkit-L5CFXJCF.mjs.map +0 -7
- package/dist/lib/browser/url-handler-QEYGYE2H.mjs +0 -70
- package/dist/lib/browser/url-handler-QEYGYE2H.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
- package/dist/types/src/capabilities/check-app-scheme.d.ts +0 -4
- package/dist/types/src/capabilities/check-app-scheme.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root.d.ts +0 -7
- package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts +0 -4
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings.d.ts +0 -4
- package/dist/types/src/capabilities/settings.d.ts.map +0 -1
- package/dist/types/src/capabilities/state.d.ts +0 -104
- package/dist/types/src/capabilities/state.d.ts.map +0 -1
- package/dist/types/src/capabilities/toolkit.d.ts +0 -25
- package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
- package/dist/types/src/capabilities/tools.d.ts +0 -11
- package/dist/types/src/capabilities/tools.d.ts.map +0 -1
- package/dist/types/src/capabilities/url-handler.d.ts +0 -4
- package/dist/types/src/capabilities/url-handler.d.ts.map +0 -1
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts +0 -6
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +0 -1
- package/dist/types/src/components/DeckSettings/index.d.ts +0 -2
- package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
- package/dist/types/src/events.d.ts +0 -4
- package/dist/types/src/events.d.ts.map +0 -1
- package/src/capabilities/app-graph-builder.ts +0 -143
- package/src/capabilities/capabilities.ts +0 -14
- package/src/capabilities/check-app-scheme.ts +0 -40
- package/src/capabilities/intent-resolver.ts +0 -471
- package/src/capabilities/react-root.tsx +0 -40
- package/src/capabilities/react-surface.tsx +0 -30
- package/src/capabilities/settings.ts +0 -27
- package/src/capabilities/state.ts +0 -113
- package/src/capabilities/toolkit.ts +0 -66
- package/src/capabilities/tools.ts +0 -84
- package/src/capabilities/url-handler.ts +0 -60
- package/src/components/DeckSettings/index.ts +0 -5
- package/src/events.ts +0 -11
- /package/dist/lib/browser/{state-7IFAGZQO.mjs.map → operations/index.mjs.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/components/DeckLayout/Banner.tsx", "../../../src/components/Sidebar/ComplementarySidebar.tsx", "../../../src/components/Plank/Plank.tsx", "../../../src/components/Plank/PlankError.tsx", "../../../src/components/Plank/PlankHeading.tsx", "../../../src/components/fragments.ts", "../../../src/components/Plank/PlankControls.tsx", "../../../src/components/Plank/PlankLoading.tsx", "../../../src/components/Sidebar/SidebarButton.tsx", "../../../src/components/Sidebar/Sidebar.tsx", "../../../src/components/DeckLayout/DeckLayout.tsx", "../../../src/components/DeckLayout/ActiveNode.tsx", "../../../src/components/DeckLayout/DeckMain.tsx", "../../../src/components/DeckLayout/ContentEmpty.tsx", "../../../src/components/DeckLayout/StatusBar.tsx", "../../../src/components/DeckLayout/Topbar.tsx", "../../../src/components/DeckLayout/Dialog.tsx", "../../../src/components/DeckLayout/Popover.tsx", "../../../src/components/DeckLayout/Toast.tsx"],
|
|
4
|
+
"sourcesContent": ["//\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';\nimport { CloseSidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nexport const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'topbar' | 'sidebar' }>) => {\n const { t } = useTranslation(meta.id);\n return (\n <header\n className={mx(\n 'flex items-stretch relative 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 role='none' className='absolute inset-0 pointer-events-none'>\n <div role='none' 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 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, getCompanionVariant } from '@dxos/app-toolkit';\nimport { IconButton, type Label, Main, Panel, toLocalizedString, Toolbar, useTranslation } from '@dxos/react-ui';\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';\nimport { layoutAppliesTopbar } from '../../util';\nimport { PlankErrorFallback, PlankLoading } from '../Plank';\n\nimport { ToggleComplementarySidebarButton } from './SidebarButton';\n\nconst label = ['complementary sidebar title', { ns: meta.id }] satisfies Label;\n\nexport type ComplementarySidebarProps = {\n current?: string;\n};\n\nexport const ComplementarySidebar = ({ current }: ComplementarySidebarProps) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const { state, deck, updateState } = useDeckState();\n const layoutMode = getMode(deck);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const companions = useDeckCompanions();\n const activeCompanion = companions.find((companion) => getCompanionVariant(companion.id) === current);\n const activeId = activeCompanion && getCompanionVariant(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 {/* TODO(burdon): asChild. */}\n <Tabs.Root orientation='vertical' value={internalValue} classNames='contents'>\n <div\n data-tauri-drag-region\n role='none'\n style={iconSize(5)}\n className={mx(\n 'absolute z-20 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={getCompanionVariant(companion.id)} value={getCompanionVariant(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={getCompanionVariant(companion.id)}\n variant={\n activeId === getCompanionVariant(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 role='none'\n className='grid grid-cols-1 auto-rows-(--dx-rail-item) gap-0.5 overflow-y-auto'\n style={iconSize(4)}\n >\n <Surface.Surface role='status-indicator' />\n </div>\n )}\n <div role='none' className='hidden lg:grid grid-cols-1 auto-rows-(--dx-rail-action) p-1'>\n <ToggleComplementarySidebarButton />\n </div>\n </div>\n {activeId &&\n companions.map((companion) => (\n <Tabs.Panel\n key={getCompanionVariant(companion.id)}\n value={getCompanionVariant(companion.id)}\n classNames={[\n 'absolute data-[state=\"inactive\"]:-z-[1] overflow-hidden',\n 'inset-y-0 start-0 w-[calc(100%-var(--dx-r0-size))] 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 (getCompanionVariant(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={getCompanionVariant(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--${getCompanionVariant(companion.id)}`}\n data={data}\n fallback={PlankErrorFallback}\n placeholder={<PlankLoading />}\n />\n </Panel.Content>\n {!hoistStatusbar && (\n <Panel.Statusbar classNames='px-1' 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 { useFocusFinders } from '@fluentui/react-tabster';\nimport React, {\n type KeyboardEvent,\n type PropsWithChildren,\n memo,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react';\n\nimport { Surface, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation, getCompanionVariant } from '@dxos/app-toolkit';\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { debounce } from '@dxos/async';\nimport { type Node, useNode } from '@dxos/plugin-graph';\nimport { useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { StackItem, railGridHorizontal } from '@dxos/react-ui-stack';\nimport { mainIntrinsicSize, mx } from '@dxos/ui-theme';\n\nimport { useCompanions, useDeckState, useMainSize, useSelectedCompanion } from '../../hooks';\nimport { type DeckSettingsProps, type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';\nimport { DeckOperation } from '../../operations';\n\nimport { PlankError, PlankErrorFallback } from './PlankError';\nimport { PlankHeading } from './PlankHeading';\nimport { PlankLoading } from './PlankLoading';\n\nconst UNKNOWN_ID = 'unknown_id';\n\n//\n// Plank\n//\n\nexport type PlankProps = Pick<PlankComponentProps, 'layoutMode' | 'part' | 'path' | 'order' | 'active' | 'settings'> & {\n id?: string;\n companionVariant?: string;\n};\n\n// TODO(burdon): Factor out conditional rendering.\n// Remove this wrapper component and render the entire set of planks in the deck with conditional visibility\n// to obviate mounting and unmounting when switching between solo and companion mode?\n// NOTE(thure, in reply): Whether any surface should be rendered and hidden is a performance matter — remember that\n// article surfaces contain full experiences, so being able to unmount them will yield relatively large performance\n// benefits. I think where we anticipate users will definitely want to quickly switch between showing and hiding entire\n// articles, over the (again probably large) performance benefit that unmounting them would confer, we can mount and\n// hide them, but I think that scenario in its most unambiguous form is probably rare. You could extrapolate\n// the scenario to include all \"potential\" planks such as companions, which we could keep mounted and hidden, but I\n// don't think the resulting performance would be acceptable. I think the real issue is \"perceived performance\" which\n// has mitigations that are in between mounting and un-mounting since both of those have tradeoffs; we may need one or more\n// \"partially-mounted\" experiences, like loading skeletons at the simple end, or screenshots of \"sleeping\" planks at\n// the advanced end.\n\n/**\n * A Plank is the main container for surfaces within a Deck.\n * It may be paired with a companion plank that enables the user to select one of multiple companion surfaces.\n */\nexport const Plank = memo(({ id = UNKNOWN_ID, companionVariant, ...props }: PlankProps) => {\n const { graph } = useAppGraph();\n const node = useNode(graph, id);\n const companions = useCompanions(id);\n const { companionId } = useSelectedCompanion(companions, companionVariant);\n const resolvedCompanionId = companionVariant ? companionId : undefined;\n const currentCompanion = companions.find(({ id }) => id === resolvedCompanionId);\n const hasCompanion = !!(resolvedCompanionId && currentCompanion);\n\n return (\n <PlankContainer\n solo={props.part === 'solo'}\n companion={hasCompanion}\n encapsulate={!!props.settings?.encapsulatedPlanks}\n >\n <PlankComponent\n id={id}\n node={node}\n companioned={hasCompanion ? 'primary' : undefined}\n companions={hasCompanion ? [] : companions}\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-primary' } : {})}\n />\n {hasCompanion && (\n <PlankComponent\n id={resolvedCompanionId}\n node={currentCompanion}\n primary={node}\n companions={companions}\n companioned='companion'\n {...props}\n {...(props.part === 'solo' ? { part: 'solo-companion' } : { order: (props.order ?? 0) + 1 })}\n />\n )}\n </PlankContainer>\n );\n});\n\n//\n// PlankContainer\n//\n\ntype PlankContainerProps = PropsWithChildren<{ solo: boolean; companion: boolean; encapsulate: boolean }>;\n\nconst PlankContainer = ({ children, solo, companion, encapsulate }: PlankContainerProps) => {\n const sizeAttrs = useMainSize();\n if (!solo) {\n return children;\n }\n\n // TODO(burdon): Make resizable.\n return (\n <div\n role='none'\n data-popover-collision-boundary={true}\n className={mx(\n 'absolute inset-(--main-spacing) grid',\n encapsulate && 'border border-separator rounded-sm overflow-hidden',\n companion && 'grid-cols-[6fr_4fr]', // TODO(burdon): Resize.\n railGridHorizontal,\n mainIntrinsicSize,\n )}\n {...sizeAttrs}\n >\n {children}\n </div>\n );\n};\n\n//\n// PlankComponent\n//\n\ntype PlankComponentProps = {\n layoutMode: LayoutMode;\n id: string;\n part: ResolvedPart;\n path?: string[];\n order?: number;\n active?: string[];\n companioned?: 'primary' | 'companion';\n node?: Node.Node;\n primary?: Node.Node;\n companions?: Node.Node[];\n settings?: DeckSettingsProps;\n};\n\nconst PlankComponent = memo(\n ({\n layoutMode,\n id,\n part,\n path,\n order,\n active,\n companioned,\n node,\n primary,\n companions,\n settings,\n }: PlankComponentProps) => {\n const { invokePromise } = useOperationInvoker();\n const { state, deck } = useDeckState();\n const { popoverAnchorId, scrollIntoView } = state;\n const { findFirstFocusable } = useFocusFinders();\n const canResize = layoutMode === 'deck';\n\n const attentionAttrs = useAttentionAttributes(primary?.id ?? id);\n const index = active ? active.findIndex((entryId) => entryId === id) : 0;\n const length = active?.length ?? 1;\n const canIncrementStart = active && index !== undefined && index > 0 && length !== undefined && length > 1;\n const canIncrementEnd = active && index !== undefined && index < length - 1 && length !== undefined;\n\n const rootElement = useRef<HTMLDivElement | null>(null);\n\n const variant = node?.type === PLANK_COMPANION_TYPE ? getCompanionVariant(id) : undefined;\n const sizeKey = id.split('+')[0];\n const size = deck.plankSizing[sizeKey] as number | undefined;\n\n const handleSizeChange = useCallback(\n debounce((nextSize: number) => {\n return invokePromise(DeckOperation.UpdatePlankSize, { id: sizeKey, size: nextSize });\n }, 200),\n [invokePromise, sizeKey],\n );\n\n // TODO(thure): Tabster's focus group should handle moving focus to Main, but something is blocking it.\n const handleKeyDown = useCallback((event: KeyboardEvent) => {\n if (event.target === event.currentTarget) {\n switch (event.key) {\n case 'Escape':\n rootElement.current?.closest('main')?.focus();\n break;\n case 'Enter':\n rootElement.current && findFirstFocusable(rootElement.current)?.focus();\n break;\n }\n }\n }, []);\n\n useLayoutEffect(() => {\n if (scrollIntoView === id) {\n layoutMode === 'deck' && rootElement.current?.scrollIntoView({ behavior: 'smooth', inline: 'center' });\n // Clear the scroll into view state once it has been actioned.\n void invokePromise(LayoutOperation.ScrollIntoView, { subject: undefined });\n }\n }, [id, scrollIntoView, layoutMode, invokePromise]);\n\n const isSolo = layoutMode.startsWith('solo') && part === 'solo';\n const isAttendable =\n (layoutMode.startsWith('solo') && part.startsWith('solo')) || (layoutMode === 'deck' && part === 'deck');\n\n const sizeAttrs = useMainSize();\n\n const data = useMemo(\n () =>\n node && {\n attendableId: id,\n subject: node.data,\n companionTo: primary?.data,\n properties: node.properties,\n variant,\n path,\n popoverAnchorId,\n },\n [node, node?.data, node?.properties, path, popoverAnchorId, primary?.data, variant],\n );\n\n // TODO(wittjosiah): Change prop to accept a component.\n const placeholder = useMemo(() => <PlankLoading />, []);\n\n const Root = part.startsWith('solo') ? 'article' : StackItem.Root;\n const fullscreen = layoutMode === 'solo--fullscreen';\n const className = mx(\n '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 === 'deck' && (companioned === 'companion' ? '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 ? ({ ...sizeAttrs, className } as any)\n : {\n item: { id },\n size,\n onSizeChange: handleSizeChange,\n classNames: className,\n order,\n role: 'article',\n })}\n {...(isAttendable ? attentionAttrs : {})}\n onKeyDown={handleKeyDown}\n >\n {node ? (\n <>\n {!fullscreen && (\n <PlankHeading\n id={id}\n part={part.startsWith('solo-') ? 'solo' : part}\n node={node}\n layoutMode={layoutMode}\n deckEnabled={settings?.enableDeck}\n canIncrementStart={canIncrementStart}\n canIncrementEnd={canIncrementEnd}\n popoverAnchorId={popoverAnchorId}\n primaryId={primary?.id}\n companioned={companioned}\n companions={companions}\n />\n )}\n <Surface.Surface\n key={node.id}\n role='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, { 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(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, useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation, getCompanionVariant } from '@dxos/app-toolkit';\nimport { useAppGraph } 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 { 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 { type LayoutMode, PLANK_COMPANION_TYPE, type ResolvedPart } from '../../types';\nimport { DeckOperation } from '../../operations';\nimport { soloInlinePadding } from '../fragments';\n\nimport { PlankCompanionControls, PlankControls } from './PlankControls';\n\nconst MAX_COMPANIONS = 5;\n\nexport type PlankHeadingProps = {\n id: string;\n part: ResolvedPart;\n layoutMode?: LayoutMode;\n node?: Node.Node;\n deckEnabled?: boolean;\n canIncrementStart?: boolean;\n canIncrementEnd?: boolean;\n popoverAnchorId?: string;\n primaryId?: string;\n pending?: boolean;\n companioned?: 'primary' | 'companion';\n companions?: Node.Node[];\n actions?: StackItemSigilAction[];\n};\n\nexport const PlankHeading = memo(\n ({\n id,\n part,\n node,\n deckEnabled,\n canIncrementStart,\n canIncrementEnd,\n popoverAnchorId,\n primaryId,\n pending,\n companioned,\n companions,\n layoutMode,\n actions = [],\n }: PlankHeadingProps) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const runAction = useActionRunner();\n const { graph } = useAppGraph();\n const breakpoint = useBreakpoints();\n const icon = node?.properties?.icon ?? 'ph--placeholder--regular';\n const label = pending\n ? t('pending heading')\n : toLocalizedString(node?.properties?.label ?? ['plank heading fallback label', { ns: meta.id }], t);\n\n const isCompanionNode = node?.type === PLANK_COMPANION_TYPE;\n\n useEffect(() => {\n const frame = requestAnimationFrame(() => {\n // Load actions for the node.\n if (node) {\n void Graph.expand(graph, node.id, '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 === 'deck'),\n incrementStart: canIncrementStart,\n incrementEnd: canIncrementEnd,\n fullscreen: !isCompanionNode,\n companion: !isCompanionNode && companions && companions.length > 0,\n }),\n [breakpoint, part, companions, canIncrementStart, canIncrementEnd, isCompanionNode, deckEnabled],\n );\n\n const variant = isCompanionNode ? getCompanionVariant(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 if (eventType.startsWith('solo')) {\n return invokePromise(DeckOperation.Adjust, { type: eventType, id });\n } else if (eventType === 'close') {\n if (part === 'complementary') {\n return invokePromise(LayoutOperation.UpdateComplementary, { state: 'collapsed' });\n } else {\n return invokePromise(LayoutOperation.Close, { subject: [id] });\n }\n } else {\n return invokePromise(DeckOperation.Adjust, { type: eventType, id });\n }\n },\n [invokePromise, id, part],\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 void invokePromise(DeckOperation.ChangeCompanion, { companion: tabId });\n }\n },\n [invokePromise],\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' ? soloInlinePadding : 'px-1',\n ...(layoutMode === 'solo--fullscreen'\n ? [\n hoverableControls,\n hoverableFocusedWithinControls,\n '*:transition-opacity *:opacity-(--controls-opacity) bg-transparent border-transparent transition-[background-color,border-color]',\n 'hover-hover:hover:bg-header-surface focus-within:bg-header-surface 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 role='none' 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 role='menu-footer' data={{ subject: node.data }} />\n </StackItem.Sigil>\n ) : (\n <StackItem.SigilButton>\n <span className='sr-only'>{label}</span>\n <Icon icon={icon} />\n </StackItem.SigilButton>\n )}\n </ActionRoot>\n <TextTooltip text={label} onlyWhenTruncating>\n <StackItem.HeadingLabel\n 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 {node && part !== 'complementary' && <Surface.Surface role='navbar-end' data={{ subject: node.data }} />}\n {companioned === 'companion' ? (\n <PlankCompanionControls primary={primaryId} />\n ) : (\n <PlankControls\n capabilities={capabilities}\n layoutMode={layoutMode}\n close={part === 'complementary' ? 'minify-end' : true}\n onClick={handlePlankAction}\n />\n )}\n </StackItem.Heading>\n );\n },\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { mx } from '@dxos/ui-theme';\n\n// TODO(burdon): Move to these as dx-components?\n\n/** @private */\nexport const soloInlinePadding =\n 'ps-[calc(env(safe-area-inset-left)+.25rem)] pe-[calc(env(safe-area-inset-right)+.25rem)]';\n\nconst sidebarToggleStyles = 'h-(--dx-rail-item) w-(--dx-rail-item) absolute bottom-2 z-[1] !bg-deck-surface lg:hidden';\n\n/** @private */\nexport const fixedSidebarToggleStyles = mx(sidebarToggleStyles, 'left-2');\n\n/** @private */\nexport const fixedComplementarySidebarToggleStyles = mx(sidebarToggleStyles, 'right-2');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { forwardRef, useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { ButtonGroup, type ButtonGroupProps, type ButtonProps, IconButton, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '../../meta';\nimport { type DeckAction, type LayoutMode } from '../../types';\nimport { DeckOperation } from '../../operations';\n\nexport type PlankControlHandler = (event: DeckAction.PartAdjustment) => void;\n\nexport type PlankCapabilities = {\n incrementStart?: boolean;\n incrementEnd?: boolean;\n deck?: boolean;\n solo?: boolean;\n fullscreen?: boolean;\n companion?: boolean;\n};\n\nexport type PlankControlsProps = Omit<ButtonGroupProps, 'onClick'> & {\n onClick?: PlankControlHandler;\n variant?: 'hide-disabled' | 'default';\n close?: boolean | 'minify-start' | 'minify-end';\n capabilities: PlankCapabilities;\n layoutMode?: LayoutMode;\n pin?: 'start' | 'end' | 'both';\n};\n\nconst PlankControl = ({ icon, label, ...props }: Omit<ButtonProps, 'children'> & { label: string; icon: string }) => {\n return <IconButton label={label} icon={icon} iconOnly variant='ghost' tooltipSide='bottom' {...props} />;\n};\n\nconst plankControlSpacing = 'px-2';\n\ntype PlankComplimentControlsProps = {\n primary?: string;\n};\n\nexport const PlankCompanionControls = forwardRef<HTMLDivElement, PlankComplimentControlsProps>(\n ({ primary }, forwardedRef) => {\n const { t } = useTranslation(meta.id);\n const { invokePromise } = useOperationInvoker();\n const handleCloseCompanion = useCallback(() => {\n return invokePromise(DeckOperation.ChangeCompanion, { companion: 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\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 && (\n <>\n <PlankControl\n label={t('increment start label')}\n disabled={!capabilities.incrementStart}\n classNames={buttonClassNames}\n icon='ph--caret-left--regular'\n onClick={() => onClick?.('increment-start')}\n />\n <PlankControl\n label={t('increment end label')}\n disabled={!capabilities.incrementEnd}\n classNames={buttonClassNames}\n icon='ph--caret-right--regular'\n onClick={() => onClick?.('increment-end')}\n />\n </>\n )}\n </>\n ) : (\n capabilities.fullscreen && (\n <PlankControl\n label={t(layoutMode === 'solo--fullscreen' ? 'exit fullscreen label' : 'show fullscreen plank label')}\n classNames={buttonClassNames}\n icon={layoutMode === 'solo--fullscreen' ? 'ph--corners-in--regular' : 'ph--corners-out--regular'}\n onClick={() => onClick?.('solo--fullscreen')}\n />\n )\n )}\n\n {close && !layoutIsAnySolo && (\n <PlankControl\n label={t(`${typeof close === 'string' ? 'minify' : 'close'} label`)}\n classNames={buttonClassNames}\n data-testid='plankHeading.close'\n icon={\n close === 'minify-start'\n ? 'ph--caret-line-left--regular'\n : close === 'minify-end'\n ? 'ph--caret-line-right--regular'\n : 'ph--x--regular'\n }\n onClick={() => onClick?.('close')}\n />\n )}\n\n {capabilities.companion && (\n <PlankControl\n label={t('open companion label')}\n classNames={buttonClassNames}\n data-testid='plankHeading.companion'\n icon='ph--square-split-horizontal--regular'\n onClick={() => onClick?.('companion')}\n />\n )}\n {children}\n </ButtonGroup>\n );\n },\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\n// TODO(burdon): Show skeleton: https://github.com/dxos/dxos/issues/8259\nexport const PlankLoading = () => {\n return <div role='none' className='grid place-items-center dx-attention-surface' />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { LayoutOperation, getCompanionVariant } from '@dxos/app-toolkit';\nimport { IconButton, type IconButtonProps, type ThemedClassName, useTranslation } from '@dxos/react-ui';\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 label')}\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] && getCompanionVariant(companions[0].id));\n if (nextState === 'expanded' && !current && subject) {\n void invokePromise(LayoutOperation.UpdateComplementary, { subject });\n }\n }, [state, updateState, current, companions, invokePromise]);\n\n return (\n <IconButton\n variant='ghost'\n classNames={['[&>svg]:-scale-x-100', classNames]}\n icon='ph--sidebar-simple--regular'\n iconOnly\n label={t('open complementary sidebar label')}\n tooltipSide={inR0 ? 'left' : undefined}\n onClick={handleClick}\n />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { type Label, Main } from '@dxos/react-ui';\n\nimport { useBreakpoints, useDeckState, useHoistStatusbar } from '../../hooks';\nimport { meta } from '../../meta';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\n\nconst label = ['sidebar title', { ns: meta.id }] satisfies Label;\n\nexport const Sidebar = () => {\n const { state, deck } = useDeckState();\n const { popoverAnchorId, activeDeck: current } = state;\n const breakpoint = useBreakpoints();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n\n const navigationData = useMemo(\n () => ({ popoverAnchorId, topbar, hoistStatusbar, current }),\n [popoverAnchorId, topbar, hoistStatusbar, current],\n );\n\n return (\n <Main.NavigationSidebar\n label={label}\n classNames={[\n 'grid',\n topbar && 'top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',\n hoistStatusbar && 'bottom-(--dx-statusbar-size)',\n ]}\n >\n <Surface.Surface role='navigation' data={navigationData} limit={1} />\n </Main.NavigationSidebar>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Mosaic } from '@dxos/react-ui-mosaic';\n\nimport { useDeckState } from '../../hooks';\n\nimport { ActiveNode } from './ActiveNode';\nimport { DeckMain } from './DeckMain';\nimport { Dialog } from './Dialog';\nimport { PopoverContent, PopoverRoot } from './Popover';\nimport { Toaster, type ToasterProps } from './Toast';\n\nexport type DeckLayoutProps = Pick<ToasterProps, 'onDismissToast'>;\n\nexport const DeckLayout = ({ onDismissToast }: DeckLayoutProps) => {\n const { state } = useDeckState();\n const { toasts } = state;\n\n return (\n <Mosaic.Root>\n <PopoverRoot>\n <ActiveNode />\n <DeckMain />\n <PopoverContent />\n <Dialog />\n <Toaster toasts={toasts} onDismissToast={onDismissToast} />\n </PopoverRoot>\n </Mosaic.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { useAppGraph } from '@dxos/app-toolkit/ui';\nimport { useNode } from '@dxos/plugin-graph';\nimport { useAttended } from '@dxos/react-ui-attention';\n\nimport { useNodeActionExpander } from '../../hooks';\n\n// TODO(burdon): Factor out to effect in plugin set document title.\nexport const ActiveNode = () => {\n const [id] = useAttended();\n const { graph } = useAppGraph();\n const activeNode = useNode(graph, id);\n useNodeActionExpander(activeNode);\n\n return (\n <div role='none' className='sr-only'>\n {/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.\n Probably this lives in React-land currently in order to access translations? */}\n <Surface.Surface role='document-title' data={{ subject: activeNode }} limit={1} />\n </div>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { Fragment, type UIEvent, useCallback, useEffect, useMemo, useRef } from 'react';\n\nimport { useAtomCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Main, type MainContentProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';\nimport { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from '@dxos/react-ui-stack';\nimport { mainPaddingTransitions, mx } from '@dxos/ui-theme';\n\nimport { useBreakpoints, useDeckState, useHoistStatusbar } from '../../hooks';\nimport { DeckCapabilities, getMode } from '../../types';\nimport { calculateOverscroll, layoutAppliesTopbar } from '../../util';\nimport { fixedComplementarySidebarToggleStyles, fixedSidebarToggleStyles } from '../fragments';\nimport { Plank } from '../Plank';\nimport { ComplementarySidebar, Sidebar, ToggleComplementarySidebarButton, ToggleSidebarButton } from '../Sidebar';\n\nimport { ContentEmpty } from './ContentEmpty';\nimport { StatusBar } from './StatusBar';\nimport { Topbar } from './Topbar';\n\nexport const DeckMain = () => {\n const { invokePromise } = useOperationInvoker();\n const settings = useAtomCapability(DeckCapabilities.Settings);\n const { state, deck, updateState } = useDeckState();\n const { sidebarState, complementarySidebarState, complementarySidebarPanel } = state;\n const { active, companionOpen, companionVariant, fullscreen, solo, plankSizing } = deck;\n const effectiveCompanionVariant = companionOpen ? companionVariant : undefined;\n const layoutMode = getMode(deck);\n const breakpoint = useBreakpoints();\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n const hoistStatusbar = useHoistStatusbar(breakpoint, layoutMode);\n const pluginManager = usePluginManager();\n\n const scrollLeftRef = useRef<number>(null);\n const deckRef = useRef<HTMLDivElement>(null);\n\n // Ensure the first plank is attended when the deck is first rendered.\n useEffect(() => {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attention = pluginManager.capabilities.get(AttentionCapabilities.Attention);\n const attended = attention.getCurrent();\n const firstId = solo ?? active[0];\n if (attended.length === 0 && firstId) {\n // TODO(wittjosiah): Focusing the type button is a workaround.\n // If the plank is directly focused on first load the focus ring appears.\n document.querySelector<HTMLElement>(`article[data-attendable-id=\"${firstId}\"] button`)?.focus();\n }\n }, []);\n\n // Not using `breakpoint` to avoid firing when breakpoint changes between tablet and desktop.\n // `ssr: false` to avoid using fallback values and flashing into solo mode on startup.\n const [isNotMobile] = useMediaQuery('md');\n const shouldRevert = useRef(false);\n useEffect(() => {\n if (!isNotMobile && layoutMode === 'deck') {\n // NOTE: Not `useAttended` so that the layout component is not re-rendered when the attended list changes.\n const attention = pluginManager.capabilities.get(AttentionCapabilities.Attention);\n const attended = attention.getCurrent();\n\n shouldRevert.current = true;\n void invokePromise(LayoutOperation.SetLayoutMode, { subject: attended[0], mode: 'solo' });\n } else if (isNotMobile && layoutMode === 'solo' && shouldRevert.current) {\n void invokePromise(LayoutOperation.SetLayoutMode, { revert: true });\n }\n // NOTE: Using `layoutMode` instead of `deck` to avoid infinite loops caused by object reference changes.\n }, [isNotMobile, layoutMode, invokePromise]);\n\n // When deck is disabled in settings, set to solo mode if the current layout mode is deck.\n // TODO(thure): Applying this as an effect should be avoided over emitting the operation only when the setting changes.\n useEffect(() => {\n if (!settings?.enableDeck && layoutMode === 'deck') {\n void invokePromise(LayoutOperation.SetLayoutMode, { subject: active[0], mode: 'solo' });\n }\n }, [settings?.enableDeck, invokePromise, active, layoutMode]);\n\n /**\n * Clear scroll restoration state if the window is resized.\n */\n const handleResize = useCallback(() => {\n scrollLeftRef.current = null;\n }, []);\n\n useEffect(() => {\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, [handleResize]);\n\n const restoreScroll = useCallback(() => {\n if (deckRef.current && scrollLeftRef.current != null) {\n deckRef.current.scrollLeft = scrollLeftRef.current;\n }\n }, []);\n useOnTransition(layoutMode, (mode) => mode !== 'deck', 'deck', restoreScroll);\n\n /**\n * Save scroll position as the user scrolls.\n */\n const handleScroll = useCallback(\n (event: UIEvent) => {\n if (!solo && event.currentTarget === event.target) {\n scrollLeftRef.current = (event.target as HTMLDivElement).scrollLeft;\n }\n },\n [solo],\n );\n\n const isEmpty = !solo && active.length === 0;\n\n const padding = useMemo(() => {\n if (!solo && settings?.overscroll === 'centering') {\n return calculateOverscroll(active.length);\n }\n return {};\n }, [solo, settings?.overscroll, deck]);\n\n const mainPosition = useMemo(\n () => [\n 'grid !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 [topbar, hoistStatusbar],\n );\n\n const { order, itemsCount }: { order: Record<string, number>; itemsCount: number } = useMemo(() => {\n return active.reduce(\n (acc: { order: Record<string, number>; itemsCount: number }, entryId) => {\n acc.order[entryId] = acc.itemsCount + 1;\n acc.itemsCount += companionOpen ? 3 : 2;\n return acc;\n },\n { order: {}, itemsCount: 0 },\n );\n }, [active, companionOpen]);\n\n const handleNavigationSidebarStateChange = useCallback(\n (next: typeof sidebarState) => {\n updateState((s) => ({ ...s, sidebarState: next }));\n },\n [updateState],\n );\n\n const handleComplementarySidebarStateChange = useCallback(\n (next: typeof complementarySidebarState) => {\n updateState((s) => ({ ...s, complementarySidebarState: next }));\n },\n [updateState],\n );\n\n return (\n <Main.Root\n navigationSidebarState={fullscreen ? 'closed' : sidebarState}\n complementarySidebarState={fullscreen ? 'closed' : complementarySidebarState}\n onNavigationSidebarStateChange={handleNavigationSidebarStateChange}\n onComplementarySidebarStateChange={handleComplementarySidebarStateChange}\n >\n {/* Left sidebar. */}\n <Sidebar />\n\n {/* Right sidebar. */}\n <ComplementarySidebar current={complementarySidebarPanel} />\n\n {/* Dialog overlay to dismiss dialogs. */}\n <Main.Overlay />\n\n {/* No content. */}\n {isEmpty && (\n <Main.Content bounce handlesFocus classNames={mainPosition}>\n <ContentEmpty />\n </Main.Content>\n )}\n\n {/* Solo/deck mode. */}\n {!isEmpty && (\n <Main.Content\n bounce\n handlesFocus\n classNames={mainPosition}\n style={\n {\n '--main-spacing': settings?.encapsulatedPlanks ? '0.75rem' : '0',\n '--dx-main-sidebar-width':\n sidebarState === 'expanded'\n ? 'var(--dx-nav-sidebar-size)'\n : sidebarState === 'collapsed'\n ? 'var(--dx-l0-size)'\n : '0',\n '--dx-main-complementary-width':\n complementarySidebarState === 'expanded'\n ? 'var(--dx-complementary-sidebar-size)'\n : complementarySidebarState === 'collapsed'\n ? 'var(--dx-rail-size)'\n : '0',\n '--dx-main-content-first-width': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n '--dx-main-content-last-width': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,\n } as MainContentProps['style']\n }\n >\n {/* Deck mode. */}\n <div\n role='none'\n className={!solo ? 'relative bg-deck-surface overflow-hidden' : 'sr-only'}\n {...(solo && { inert: true })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <Stack\n orientation='horizontal'\n size='contain'\n itemsCount={itemsCount - 1}\n classNames={[\n 'absolute inset-y-(--main-spacing) -inset-w-px h-[calc(100%-2*var(--main-spacing))]',\n mainPaddingTransitions,\n ]}\n style={padding}\n onScroll={handleScroll}\n ref={deckRef}\n >\n {active.map((entryId) => (\n <Fragment key={entryId}>\n <PlankSeparator order={order[entryId] - 1} encapsulate={!!settings?.enableDeck} />\n <Plank\n id={entryId}\n companionVariant={effectiveCompanionVariant}\n part='deck'\n order={order[entryId]}\n active={active}\n layoutMode={layoutMode}\n settings={settings}\n />\n </Fragment>\n ))}\n </Stack>\n </div>\n\n {/* Solo mode. */}\n <div\n role='none'\n className={solo ? 'relative overflow-hidden bg-deck-surface' : 'sr-only'}\n {...(!solo && { inert: true })}\n >\n {!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}\n {!topbar && !fullscreen && (\n <ToggleComplementarySidebarButton classNames={fixedComplementarySidebarToggleStyles} />\n )}\n <StackContext.Provider\n value={{\n orientation: 'horizontal',\n size: 'contain',\n rail: true,\n }}\n >\n <Plank\n id={solo}\n companionVariant={effectiveCompanionVariant}\n part='solo'\n layoutMode={layoutMode}\n settings={settings}\n />\n </StackContext.Provider>\n </div>\n </Main.Content>\n )}\n\n {/* Topbar. */}\n {topbar && <Topbar />}\n\n {/* Status bar. */}\n {hoistStatusbar && <StatusBar showHints={settings?.showHints} />}\n </Main.Root>\n );\n};\n\nconst PlankSeparator = ({ order, encapsulate }: { order: number; encapsulate?: boolean }) =>\n order > 0 ? (\n <span\n role='separator'\n className={mx('row-span-2 bg-deck-surface', encapsulate ? 'w-0' : 'w-4')}\n style={{ gridColumn: order }}\n />\n ) : null;\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\n\nimport { useBreakpoints, useDeckState } from '../../hooks';\nimport { getMode } from '../../types';\nimport { layoutAppliesTopbar } from '../../util';\nimport { fixedSidebarToggleStyles } from '../fragments';\nimport { ToggleSidebarButton } from '../Sidebar';\n\nexport const ContentEmpty = () => {\n const breakpoint = useBreakpoints();\n const { deck } = useDeckState();\n const layoutMode = getMode(deck);\n const topbar = layoutAppliesTopbar(breakpoint, layoutMode);\n return (\n <div\n role='none'\n className='grid place-items-center p-8 relative bg-deck-surface'\n data-testid='layoutPlugin.firstRunMessage'\n >\n <Surface.Surface role='keyshortcuts' />\n {!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Surface } from '@dxos/app-framework/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 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Banner } from './Banner';\n\nexport const Topbar = () => {\n return <Banner variant='topbar' />;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';\n\nimport { useDeckState } from '../../hooks';\nimport { PlankErrorFallback } from '../Plank';\n\nexport const Dialog = () => {\n const { state, updateEphemeral } = useDeckState();\n const { dialogOpen, dialogType, dialogBlockAlign, dialogOverlayClasses, dialogOverlayStyle, dialogContent } = state;\n const Root = dialogType === 'alert' ? AlertDialog.Root : NaturalDialog.Root;\n const Overlay = dialogType === 'alert' ? AlertDialog.Overlay : NaturalDialog.Overlay;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n updateEphemeral((s) => ({ ...s, dialogOpen: nextOpen }));\n },\n [updateEphemeral],\n );\n\n // TODO(thure): End block alignment affecting `modal` and whether the surface renders in an overlay is tailored to the needs of the ambient chat dialog. As the feature matures, consider separating concerns.\n return (\n <Root modal={dialogBlockAlign !== 'end'} open={dialogOpen} onOpenChange={handleOpenChange}>\n {dialogBlockAlign === 'end' ? (\n // TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.\n <Surface.Surface\n role='dialog'\n data={dialogContent}\n limit={1}\n fallback={PlankErrorFallback}\n placeholder={<div />}\n />\n ) : (\n <Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>\n <Surface.Surface role='dialog' data={dialogContent} limit={1} fallback={PlankErrorFallback} />\n </Overlay>\n )}\n </Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport React, { type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Annotation, Obj } from '@dxos/echo';\nimport {\n Card,\n Popover,\n type PopoverContentInteractOutsideEvent,\n toLocalizedString,\n Toolbar,\n useTranslation,\n} from '@dxos/react-ui';\nimport { Menu } from '@dxos/react-ui-menu';\n\nimport { useDeckState } from '../../hooks';\nimport { meta } from '../../meta';\n\nexport type DeckPopoverRootProps = PropsWithChildren<{}>;\n\nconst DEBOUNCE_DELAY = 40;\n\ntype DeckPopoverContextValue = {\n setOpen: (open: boolean) => void;\n};\n\nconst [DeckPopoverProvider, useDeckPopoverContext] = createContext<DeckPopoverContextValue>('DeckPopover');\n\nexport const PopoverRoot = ({ children }: DeckPopoverRootProps) => {\n const { state } = useDeckState();\n const virtualRef = useRef<HTMLButtonElement | null>(null);\n const [virtualIter, setVirtualIter] = useState(0);\n const [open, setOpen] = useState(false);\n const debounceRef = useRef<NodeJS.Timeout | null>(null);\n\n // TODO(thure): This is a workaround for the race condition between displaying a Popover and either rendering\n // the anchor further down the tree or measuring the virtual trigger's client rect.\n useEffect(() => {\n setOpen(false);\n if (state.popoverOpen) {\n if (debounceRef.current) {\n clearTimeout(debounceRef.current);\n }\n if (state.popoverAnchor && virtualRef.current !== state.popoverAnchor) {\n virtualRef.current = state.popoverAnchor ?? null;\n setVirtualIter((iter) => iter + 1);\n }\n debounceRef.current = setTimeout(() => setOpen(true), DEBOUNCE_DELAY);\n }\n }, [state.popoverOpen, state.popoverAnchorId, state.popoverAnchor, state.popoverContent]);\n\n return (\n <DeckPopoverProvider setOpen={setOpen}>\n <Popover.Root modal={false} open={open}>\n {state.popoverAnchor && <Popover.VirtualTrigger key={virtualIter} virtualRef={virtualRef} />}\n {children}\n </Popover.Root>\n </DeckPopoverProvider>\n );\n};\n\nexport const PopoverContent = () => {\n const { t } = useTranslation(meta.id);\n const { state, updateEphemeral } = useDeckState();\n const { setOpen } = useDeckPopoverContext('PopoverContent');\n const popoverSubject = state.popoverContent?.subject;\n const isObjectPopover = Obj.isObject(popoverSubject);\n const objectMenuItems = useObjectMenuItems(popoverSubject);\n const title = state.popoverTitle ? toLocalizedString(state.popoverTitle, t) : 'Unknown';\n const icon = isObjectPopover\n ? Function.pipe(\n Obj.getSchema(popoverSubject),\n Option.fromNullable,\n Option.flatMap(Annotation.IconAnnotation.get),\n Option.map(({ icon }) => icon),\n Option.getOrElse(() => 'ph--placeholder--regular'),\n )\n : undefined;\n\n const handleClose = useCallback(() => {\n setOpen(false);\n updateEphemeral((state) => ({\n ...state,\n popoverOpen: false,\n popoverAnchor: undefined,\n popoverAnchorId: undefined,\n popoverSide: undefined,\n }));\n }, [updateEphemeral]);\n\n const handleInteractOutside = useCallback(\n (event: KeyboardEvent | PopoverContentInteractOutsideEvent) => {\n if (\n // TODO(thure): CodeMirror should not focus itself when it updates.\n event.type === 'dismissableLayer.focusOutside' &&\n (event.currentTarget as HTMLElement | undefined)?.classList.contains('cm-content')\n ) {\n event.preventDefault();\n } else {\n handleClose();\n }\n },\n [handleClose],\n );\n\n return (\n <Popover.Portal>\n <Popover.Content\n side={state.popoverSide}\n sticky='always'\n hideWhenDetached\n onInteractOutside={handleInteractOutside}\n onEscapeKeyDown={handleInteractOutside}\n >\n <Popover.Viewport>\n {/* Base popover */}\n {state.popoverKind === 'base' && <Surface.Surface role='popover' data={state.popoverContent} limit={1} />}\n\n {/* Card popover */}\n {state.popoverKind === 'card' && (\n <Menu.Root>\n <Card.Root border={false} classNames='dx-card-popover'>\n <Card.Toolbar>\n <Card.IconBlock padding>{icon && <Card.Icon icon={icon} />}</Card.IconBlock>\n <Card.Title>{title}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Card.IconBlock padding>\n <Menu.Trigger asChild disabled={!objectMenuItems.length}>\n <Toolbar.IconButton\n variant='ghost'\n icon='ph--dots-three-vertical--regular'\n iconOnly\n label='Actions'\n />\n </Menu.Trigger>\n <Menu.Content items={objectMenuItems} />\n </Card.IconBlock>\n </Card.Toolbar>\n\n <Surface.Surface role='card--content' data={state.popoverContent} limit={1} />\n </Card.Root>\n </Menu.Root>\n )}\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type LayoutOperation } from '@dxos/app-toolkit';\nimport {\n Button,\n Icon,\n Toast as NaturalToast,\n type ToastRootProps,\n toLocalizedString,\n useTranslation,\n} from '@dxos/react-ui';\n\nimport { meta } from '../../meta';\n\n// TODO(wittjosiah): Render remaining duration as a progress bar within the toast.\nexport const Toast = ({\n id,\n title,\n description,\n icon,\n duration,\n actionLabel,\n actionAlt,\n closeLabel,\n onAction,\n onOpenChange,\n}: LayoutOperation.Toast & Pick<ToastRootProps, 'onOpenChange'>) => {\n const { t } = useTranslation(meta.id);\n\n return (\n <NaturalToast.Root data-testid={id} defaultOpen duration={duration} onOpenChange={onOpenChange}>\n <NaturalToast.Body>\n <NaturalToast.Title classNames='items-center'>\n {icon && <Icon icon={icon} classNames='inline mr-1' />}\n {title && <span>{toLocalizedString(title, t)}</span>}\n </NaturalToast.Title>\n {description && (\n <NaturalToast.Description>{description && toLocalizedString(description, t)}</NaturalToast.Description>\n )}\n </NaturalToast.Body>\n <NaturalToast.Actions>\n {onAction && actionAlt && actionLabel && (\n <NaturalToast.Action altText={toLocalizedString(actionAlt, t)} asChild>\n <Button data-testid='toast.action' variant='primary' onClick={() => onAction?.()}>\n {toLocalizedString(actionLabel, t)}\n </Button>\n </NaturalToast.Action>\n )}\n {closeLabel && (\n <NaturalToast.Close asChild>\n <Button data-testid='toast.close'>{toLocalizedString(closeLabel, t)}</Button>\n </NaturalToast.Close>\n )}\n </NaturalToast.Actions>\n </NaturalToast.Root>\n );\n};\n\nexport type ToasterProps = {\n toasts?: LayoutOperation.Toast[];\n onDismissToast?: (id: string) => void;\n};\n\nexport const Toaster = ({ toasts, onDismissToast }: ToasterProps) => {\n return (\n <>\n {toasts?.map((toast) => (\n <Toast\n {...toast}\n key={toast.id}\n onOpenChange={(open: boolean) => {\n if (!open) {\n onDismissToast?.(toast.id);\n }\n\n return open;\n }}\n />\n ))}\n </>\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,YAAW;AAElB,SAASC,WAAAA,gBAAe;AACxB,SAA+BC,kBAAAA,uBAAsB;AACrD,SAASC,MAAAA,KAAIC,sBAAsB;;;ACJnC,OAAOC,UAA0BC,eAAAA,cAAaC,aAAAA,YAAWC,WAAAA,UAASC,YAAAA,iBAAgB;AAElF,SAASC,WAAAA,UAASC,uBAAAA,4BAA2B;AAC7C,SAASC,mBAAAA,kBAAiBC,uBAAAA,4BAA2B;AACrD,SAASC,cAAAA,aAAwBC,MAAMC,OAAOC,qBAAAA,oBAAmBC,SAASC,kBAAAA,uBAAsB;AAChG,SAASC,YAAY;AACrB,SAASC,YAAAA,WAAUC,MAAAA,WAAU;;;ACN7B,SAASC,uBAAuB;AAChC,OAAOC,UAGLC,QAAAA,OACAC,eAAAA,cACAC,iBACAC,WAAAA,UACAC,cACK;AAEP,SAASC,WAAAA,UAASC,uBAAAA,4BAA2B;AAC7C,SAASC,mBAAAA,kBAAiBC,uBAAAA,4BAA2B;AACrD,SAASC,eAAAA,oBAAmB;AAC5B,SAASC,gBAAgB;AACzB,SAAoBC,eAAe;AACnC,SAASC,8BAA8B;AACvC,SAASC,aAAAA,YAAWC,0BAA0B;AAC9C,SAASC,mBAAmBC,MAAAA,WAAU;;;AClBtC,OAAOC,UAASC,aAAAA,YAAWC,WAAAA,UAASC,gBAAgB;AAEpD,SAASC,oBAAoB;AAC7B,SAASC,WAAW;AAEpB,SAASC,eAAwCC,kBAAAA,uBAAsB;AACvE,OAAuC;;;ACNvC,OAAOC,UAASC,UAA2BC,MAAMC,eAAAA,cAAaC,WAAWC,eAAe;AAExF,SAASC,SAASC,uBAAAA,4BAA2B;AAC7C,SAASC,iBAAiBC,2BAA2B;AACrD,SAASC,mBAAmB;AAC5B,SAASC,OAAkBC,uBAAuB;AAClD,SAASC,MAAMC,cAAAA,aAAYC,SAASC,mBAAmBC,kBAAAA,uBAAsB;AAC7E,SAASC,iBAA4C;AACrD,SAASC,mBAAmB;AAC5B,SAASC,mBAAmBC,gCAAgCC,gBAAgB;;;ACT5E,SAASC,UAAU;AAKZ,IAAMC,oBACX;AAEF,IAAMC,sBAAsB;AAGrB,IAAMC,2BAA2BC,GAAGF,qBAAqB,QAAA;AAGzD,IAAMG,wCAAwCD,GAAGF,qBAAqB,SAAA;;;ACd7E,OAAOI,SAASC,YAAYC,mBAAmB;AAE/C,SAASC,2BAA2B;AACpC,SAASC,aAAsDC,YAAYC,sBAAsB;AA0BjG,IAAMC,eAAe,CAAC,EAAEC,MAAMC,OAAAA,QAAO,GAAGC,MAAAA,MAAwE;AAC9G,SAAO,sBAAA,cAACC,YAAAA;IAAWF,OAAOA;IAAOD;IAAYI,UAAAA;IAASC,SAAQ;IAAQC,aAAY;IAAU,GAAGJ;;AACjG;AAEA,IAAMK,sBAAsB;AAMrB,IAAMC,yBAAyBC,2BACpC,CAAC,EAAEC,QAAO,GAAIC,iBAAAA;AACZ,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,QAAM,EAAEC,cAAa,IAAKC,oBAAAA;AAC1B,QAAMC,uBAAuBC,YAAY,MAAA;AACvC,WAAOH,cAAcI,oBAAcC,iBAAiB;MAAEC,WAAW;IAAK,CAAA;EACxE,GAAG;IAACN;GAAc;AAClB,SACE,sBAAA,cAACO,OAAAA;IAAIC,KAAKb;IAAcc,WAAU;KAChC,sBAAA,cAAC1B,cAAAA;IACCE,OAAOW,EAAE,uBAAA;IACTP,SAAQ;IACRL,MAAK;IACL0B,SAASR;IACTS,YAAYpB;;AAIpB,CAAA;AAMK,IAAMqB,gBAAgBnB,2BAC3B,CACE,EAAEoB,UAAUF,YAAYtB,UAAU,WAAWyB,cAAcC,YAAYC,KAAKC,QAAQ,OAAOP,SAAS,GAAGxB,MAAAA,GACvGS,iBAAAA;AAEA,QAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,QAAMmB,mBACJ7B,YAAY,kBAAkB,mBAAmBE,mBAAAA,KAAwBA;AAE3E,QAAM4B,kBAAkB,CAAC,CAACJ,YAAYK,WAAW,MAAA;AAEjD,SACE,sBAAA,cAACC,aAAAA;IAAa,GAAGnC;IAAOyB,YAAY;MAAC;MAA+BA;;IAAaH,KAAKb;KACnFmB,aAAaQ,OACZ,sBAAA,cAAA,MAAA,UAAA,MACGR,aAAaS,QACZ,sBAAA,cAAA,MAAA,UAAA,MACGR,eAAe,UACd,sBAAA,cAAChC,cAAAA;IACCE,OAAOW,EAAE,6BAAA;IACTe,YAAYO;IACZlC,MAAK;IACL0B,SAAS,MAAMA,UAAU,kBAAA;MAG7B,sBAAA,cAAC3B,cAAAA;IACCE,OAAOW,EACLmB,eAAe,qBACX,0BACAI,kBACE,0BACA,uBAAA;IAERR,YAAYO;IACZlC,MACE+B,eAAe,qBACX,4BACAI,kBACE,2CACA;IAERT,SAAS,MAAMA,UAAUK,eAAe,qBAAqB,qBAAqB,MAAA;OAKvF,CAACI,mBACA,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACpC,cAAAA;IACCE,OAAOW,EAAE,uBAAA;IACT4B,UAAU,CAACV,aAAaW;IACxBd,YAAYO;IACZlC,MAAK;IACL0B,SAAS,MAAMA,UAAU,iBAAA;MAE3B,sBAAA,cAAC3B,cAAAA;IACCE,OAAOW,EAAE,qBAAA;IACT4B,UAAU,CAACV,aAAaY;IACxBf,YAAYO;IACZlC,MAAK;IACL0B,SAAS,MAAMA,UAAU,eAAA;SAMjCI,aAAaa,cACX,sBAAA,cAAC5C,cAAAA;IACCE,OAAOW,EAAEmB,eAAe,qBAAqB,0BAA0B,6BAAA;IACvEJ,YAAYO;IACZlC,MAAM+B,eAAe,qBAAqB,4BAA4B;IACtEL,SAAS,MAAMA,UAAU,kBAAA;MAK9BO,SAAS,CAACE,mBACT,sBAAA,cAACpC,cAAAA;IACCE,OAAOW,EAAE,GAAG,OAAOqB,UAAU,WAAW,WAAW,OAAA,QAAe;IAClEN,YAAYO;IACZU,eAAY;IACZ5C,MACEiC,UAAU,iBACN,iCACAA,UAAU,eACR,kCACA;IAERP,SAAS,MAAMA,UAAU,OAAA;MAI5BI,aAAaR,aACZ,sBAAA,cAACvB,cAAAA;IACCE,OAAOW,EAAE,sBAAA;IACTe,YAAYO;IACZU,eAAY;IACZ5C,MAAK;IACL0B,SAAS,MAAMA,UAAU,WAAA;MAG5BG,QAAAA;AAGP,CAAA;;;AFpJF,IAAMgB,iBAAiB;AAkBhB,IAAMC,eAAeC,qBAC1B,CAAC,EACCC,IACAC,MACAC,MACAC,aACAC,mBACAC,iBACAC,iBACAC,WACAC,SACAC,aACAC,YACAC,YACAC,UAAU,CAAA,EAAE,MACM;AAClB,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKf,EAAE;AACpC,QAAM,EAAEgB,cAAa,IAAKC,qBAAAA;AAC1B,QAAMC,YAAYC,gBAAAA;AAClB,QAAM,EAAEC,MAAK,IAAKC,YAAAA;AAClB,QAAMC,aAAaC,eAAAA;AACnB,QAAMC,OAAOtB,MAAMuB,YAAYD,QAAQ;AACvC,QAAME,SAAQlB,UACVK,EAAE,iBAAA,IACFc,kBAAkBzB,MAAMuB,YAAYC,SAAS;IAAC;IAAgC;MAAEE,IAAIb,KAAKf;IAAG;KAAIa,CAAAA;AAEpG,QAAMgB,kBAAkB3B,MAAM4B,SAASC;AAEvCC,YAAU,MAAA;AACR,UAAMC,QAAQC,sBAAsB,MAAA;AAElC,UAAIhC,MAAM;AACR,aAAKiC,MAAMC,OAAOhB,OAAOlB,KAAKF,IAAI,OAAA;MACpC;IACF,CAAA;AAEA,WAAO,MAAMqC,qBAAqBJ,KAAAA;EACpC,GAAG;IAAC/B;GAAK;AAET,QAAMoC,eAAe/B,aAAaP;AAClC,QAAMuC,eAAeC,QACnB,OAAO;IACLC,MAAMtC,eAAe;IACrBuC,MAAMpB,eAAe,aAAarB,SAAS,UAAUA,SAAS;IAC9D0C,gBAAgBvC;IAChBwC,cAAcvC;IACdwC,YAAY,CAAChB;IACbiB,WAAW,CAACjB,mBAAmBnB,cAAcA,WAAWqC,SAAS;EACnE,IACA;IAACzB;IAAYrB;IAAMS;IAAYN;IAAmBC;IAAiBwB;IAAiB1B;GAAY;AAGlG,QAAM6C,UAAUnB,kBAAkBoB,oBAAoBjD,EAAAA,IAAMkD;AAC5D,QAAMC,eAAeX,QAAQ,MAAA;AAC3B,QAAI,CAACtC,MAAM;AACT,aAAOgD;IACT,WAAWF,SAAS;AAClB,aAAO,CAAA;IACT,OAAO;AACL,aAAO;QACLpC;QACAuB,MAAMiB,WAAWhC,OAAOlB,KAAKF,EAAE,EAAEqD,OAAO,CAACC,WACvC;UAAC;UAAa;UAAqB;UAAqBC,SAASD,OAAO7B,WAAW+B,WAAW,CAAA;QAEhGH,OAAO,CAACI,MAAMA,EAAEV,SAAS,CAAA;IAC7B;EACF,GAAG;IAACnC;IAASV;IAAM8C;IAAS5B;GAAM;AAElC,QAAMsC,eAAeC,aACnB,CAACL,WAAAA;AACC,QAAI,OAAOA,OAAOM,SAAS,YAAY;AACrC,WAAK1C,UAAUoC,QAAuB;QAAEO,QAAQ3D;QAAM4D,QAAQ/C,KAAKf;MAAG,CAAA;IACxE;EACF,GACA;IAACE;IAAMgB;GAAU;AAGnB,QAAM6C,oBAAoBJ,aACxB,CAACK,cAAAA;AACC,QAAIA,UAAUC,WAAW,MAAA,GAAS;AAChC,aAAOjD,cAAckD,oBAAcC,QAAQ;QAAErC,MAAMkC;QAAWhE;MAAG,CAAA;IACnE,WAAWgE,cAAc,SAAS;AAChC,UAAI/D,SAAS,iBAAiB;AAC5B,eAAOe,cAAcoD,gBAAgBC,qBAAqB;UAAEC,OAAO;QAAY,CAAA;MACjF,OAAO;AACL,eAAOtD,cAAcoD,gBAAgBG,OAAO;UAAEC,SAAS;YAACxE;;QAAI,CAAA;MAC9D;IACF,OAAO;AACL,aAAOgB,cAAckD,oBAAcC,QAAQ;QAAErC,MAAMkC;QAAWhE;MAAG,CAAA;IACnE;EACF,GACA;IAACgB;IAAehB;IAAIC;GAAK;AAG3B,QAAMwE,aAAavE,QAAQI,oBAAoB,GAAGS,KAAKf,EAAE,IAAIE,KAAKF,EAAE,KAAK0E,QAAQC,SAASC;AAE1F,QAAMC,iBAAiBlB,aACrB,CAACmB,UAAAA;AACC,UAAMC,SAAUD,MAAMC,OAAuBC,QAAQ,WAAA;AACrD,UAAMC,QAAQF,QAAQG,SAASlF;AAC/B,QAAIiF,OAAO;AACT,WAAKjE,cAAckD,oBAAciB,iBAAiB;QAAErC,WAAWmC;MAAM,CAAA;IACvE;EACF,GACA;IAACjE;GAAc;AAGjB,SACE,gBAAAoE,OAAA,cAACC,UAAUC,SAAO;IAChBC,0BAAAA;IACAC,sBAAAA;IACAC,OAAOC,SAAS,CAAA;IAChBC,YAAY;MACV;MACA1F,SAAS,SAAS2F,oBAAoB;SAClCjF,eAAe,qBACf;QACEkF;QACAC;QACA;QACA;UAEF,CAAA;;KAGLpF,cAAcmB;;IAEb,gBAAAuD,OAAA,cAACW,OAAAA;MAAIR,0BAAAA;MAAuBS,MAAK;MAAOC,WAAU;OAC/CvF,WAAWwF,IAAI,CAAC,EAAElG,IAAAA,KAAIyB,YAAY,EAAED,MAAAA,OAAME,OAAAA,OAAK,EAAE,MAChD,gBAAA0D,OAAA,cAACe,aAAAA;MACCC,KAAKpG;MACLqG,WAASrG;MACTwB,MAAMA;MACN8E,UAAU5F,WAAWqC,SAASlD,kBAAkBK,MAAMF,OAAOA;MAC7D0B,OAAOC,kBAAkBD,QAAOb,CAAAA;MAChCmC,SAAS9C,MAAMF,OAAOA,MAAK,YAAY;MACvCuG,SAAS1B;;MAKf,gBAAAO,OAAA,cAAAA,OAAA,UAAA,MACE,gBAAAA,OAAA,cAACX,YAAAA,MACEvE,QAAQiD,eACP,gBAAAiC,OAAA,cAACC,UAAUmB,OAAK;IACdhF;IACAiF,SAASxG,SAAS;IAClBqC;IACAoE,cAAc7F,EAAE,oBAAA;IAChBD,SAASuC;IACTwD,UAAUjD;KAEV,gBAAA0B,OAAA,cAACwB,QAAQA,SAAO;IAACZ,MAAK;IAAcpC,MAAM;MAAEY,SAAStE,KAAK0D;IAAK;QAGjE,gBAAAwB,OAAA,cAACC,UAAUwB,aAAW,MACpB,gBAAAzB,OAAA,cAAC0B,QAAAA;IAAKb,WAAU;KAAWvE,MAAAA,GAC3B,gBAAA0D,OAAA,cAAC2B,MAAAA;IAAKvF;QAIZ,gBAAA4D,OAAA,cAAC4B,aAAAA;IAAYC,MAAMvF;IAAOwF,oBAAAA;KACxB,gBAAA9B,OAAA,cAACC,UAAU8B,cAAY;IACrB5B,0BAAAA;IACAjD;IACAmE,SAASxG,SAAS;IACjB,GAAIO,WAAW;MAAEmF,YAAY;IAAmB;KAEhDjE,MAAAA,CAAAA,CAAAA,GAKRxB,QAAQD,SAAS,mBAAmB,gBAAAmF,OAAA,cAACwB,QAAQA,SAAO;IAACZ,MAAK;IAAapC,MAAM;MAAEY,SAAStE,KAAK0D;IAAK;MAClGnD,gBAAgB,cACf,gBAAA2E,OAAA,cAACgC,wBAAAA;IAAuBC,SAAS9G;OAEjC,gBAAA6E,OAAA,cAACkC,eAAAA;IACC/E;IACA5B;IACA4G,OAAOtH,SAAS,kBAAkB,eAAe;IACjDsG,SAASxC;;AAKnB,CAAA;;;AG/NF,OAAOyD,YAAW;AAGX,IAAMC,eAAe,MAAA;AAC1B,SAAO,gBAAAC,OAAA,cAACC,OAAAA;IAAIC,MAAK;IAAOC,WAAU;;AACpC;;;;AJQO,IAAMC,aAAa,CAAC,EACzBC,IACAC,MACAC,MACAC,OAAOC,UAAS,MAMjB;AACC,QAAM,CAACC,UAAUC,WAAAA,IAAeC,SAAS,KAAA;AACzCC,EAAAA,WAAU,MAAA;AACR,UAAMC,QAAQC,WAAW,MAAMJ,YAAY,IAAA,GAAO,GAAA;AAClD,WAAO,MAAMK,aAAaF,KAAAA;EAC5B,GAAG,CAAA,CAAE;AAEL,QAAMN,QAAQS,SAAQ,MAAA;AACpB,QAAIP,UAAU;AACZ,aAAO,IAAIQ,aAAa;QAAEC,SAAS;MAA0B,CAAA;IAC/D;AAEA,WAAOV;EACT,GAAG;IAACC;IAAUD;GAAU;AAExB,SACE,gBAAAW,OAAA,cAAAA,OAAA,UAAA,MACE,gBAAAA,OAAA,cAACC,cAAAA;IAAahB;IAAQC;IAAYC;IAAYe,SAAS,CAACZ;MACvDA,WAAW,gBAAAU,OAAA,cAACG,oBAAAA;IAAmBf;OAAmB,gBAAAY,OAAA,cAACI,cAAAA,IAAAA,CAAAA;AAG1D;AAKO,IAAMD,qBAAqB,CAAC,EAAEf,MAAK,MAAsB;AAC9D,QAAM,EAAEiB,EAAC,IAAKC,gBAAeC,KAAKtB,EAAE;AAEpCQ,EAAAA,WAAU,MAAA;AACR,QAAIL,OAAO;AACToB,UAAIpB,MAAMA,OAAAA,QAAAA;;;;;;IACZ;EACF,GAAG;IAACA;GAAM;AAEV,MAAIqB,MAAwC;AAC1C,WAAO,gBAAAT,OAAA,cAACU,eAAAA;MAAcC,OAAM;MAAcvB;;EAC5C,OAAO;AACL,UAAMwB,cAAcxB,OAAOyB,SAAAA,KAAc;AACzC,WACE,gBAAAb,OAAA,cAACc,OAAAA;MACCC,MAAK;MACLC,eAAY;MACZC,WAAU;OAEV,gBAAAjB,OAAA,cAACkB,KAAAA;MAAED,WAAWE,IAAGC,oBAAoB,0BAAA;OAClChC,QAAQwB,cAAcP,EAAE,wBAAA,CAAA,CAAA;EAIjC;AACF;;;AD9CA,IAAMgB,aAAa;AA6BZ,IAAMC,QAAQC,gBAAAA,MAAK,CAAC,EAAEC,KAAKH,YAAYI,kBAAkB,GAAGC,MAAAA,MAAmB;AACpF,QAAM,EAAEC,MAAK,IAAKC,aAAAA;AAClB,QAAMC,OAAOC,QAAQH,OAAOH,EAAAA;AAC5B,QAAMO,aAAaC,cAAcR,EAAAA;AACjC,QAAM,EAAES,YAAW,IAAKC,qBAAqBH,YAAYN,gBAAAA;AACzD,QAAMU,sBAAsBV,mBAAmBQ,cAAcG;AAC7D,QAAMC,mBAAmBN,WAAWO,KAAK,CAAC,EAAEd,IAAAA,IAAE,MAAOA,QAAOW,mBAAAA;AAC5D,QAAMI,eAAe,CAAC,EAAEJ,uBAAuBE;AAE/C,SACE,gBAAAG,OAAA,cAACC,gBAAAA;IACCC,MAAMhB,MAAMiB,SAAS;IACrBC,WAAWL;IACXM,aAAa,CAAC,CAACnB,MAAMoB,UAAUC;KAE/B,gBAAAP,OAAA,cAACQ,gBAAAA;IACCxB;IACAK;IACAoB,aAAaV,eAAe,YAAYH;IACxCL,YAAYQ,eAAe,CAAA,IAAKR;IAC/B,GAAGL;IACH,GAAIA,MAAMiB,SAAS,SAAS;MAAEA,MAAM;IAAe,IAAI,CAAC;MAE1DJ,gBACC,gBAAAC,OAAA,cAACQ,gBAAAA;IACCxB,IAAIW;IACJN,MAAMQ;IACNa,SAASrB;IACTE;IACAkB,aAAY;IACX,GAAGvB;IACH,GAAIA,MAAMiB,SAAS,SAAS;MAAEA,MAAM;IAAiB,IAAI;MAAEQ,QAAQzB,MAAMyB,SAAS,KAAK;IAAE;;AAKpG,CAAA;AAQA,IAAMV,iBAAiB,CAAC,EAAEW,UAAUV,MAAME,WAAWC,YAAW,MAAuB;AACrF,QAAMQ,YAAYC,YAAAA;AAClB,MAAI,CAACZ,MAAM;AACT,WAAOU;EACT;AAGA,SACE,gBAAAZ,OAAA,cAACe,OAAAA;IACCC,MAAK;IACLC,mCAAiC;IACjCC,WAAWC,IACT,wCACAd,eAAe,sDACfD,aAAa,uBACbgB,oBACAC,iBAAAA;IAED,GAAGR;KAEHD,QAAAA;AAGP;AAoBA,IAAMJ,iBAAiBzB,gBAAAA,MACrB,CAAC,EACCuC,YACAtC,IACAmB,MACAoB,MACAZ,OACAa,QACAf,aACApB,MACAqB,SACAnB,YACAe,SAAQ,MACY;AACpB,QAAM,EAAEmB,cAAa,IAAKC,qBAAAA;AAC1B,QAAM,EAAEC,OAAOC,KAAI,IAAKC,aAAAA;AACxB,QAAM,EAAEC,iBAAiBC,eAAc,IAAKJ;AAC5C,QAAM,EAAEK,mBAAkB,IAAKC,gBAAAA;AAC/B,QAAMC,YAAYZ,eAAe;AAEjC,QAAMa,iBAAiBC,uBAAuB1B,SAAS1B,MAAMA,EAAAA;AAC7D,QAAMqD,QAAQb,SAASA,OAAOc,UAAU,CAACC,YAAYA,YAAYvD,EAAAA,IAAM;AACvE,QAAMwD,SAAShB,QAAQgB,UAAU;AACjC,QAAMC,oBAAoBjB,UAAUa,UAAUzC,UAAayC,QAAQ,KAAKG,WAAW5C,UAAa4C,SAAS;AACzG,QAAME,kBAAkBlB,UAAUa,UAAUzC,UAAayC,QAAQG,SAAS,KAAKA,WAAW5C;AAE1F,QAAM+C,cAAcC,OAA8B,IAAA;AAElD,QAAMC,UAAUxD,MAAMyD,SAASC,uBAAuBC,qBAAoBhE,EAAAA,IAAMY;AAChF,QAAMqD,UAAUjE,GAAGkE,MAAM,GAAA,EAAK,CAAA;AAC9B,QAAMC,OAAOvB,KAAKwB,YAAYH,OAAAA;AAE9B,QAAMI,mBAAmBC,aACvBC,SAAS,CAACC,aAAAA;AACR,WAAO/B,cAAcgC,oBAAcC,iBAAiB;MAAE1E,IAAIiE;MAASE,MAAMK;IAAS,CAAA;EACpF,GAAG,GAAA,GACH;IAAC/B;IAAewB;GAAQ;AAI1B,QAAMU,gBAAgBL,aAAY,CAACM,UAAAA;AACjC,QAAIA,MAAMC,WAAWD,MAAME,eAAe;AACxC,cAAQF,MAAMG,KAAG;QACf,KAAK;AACHpB,sBAAYqB,SAASC,QAAQ,MAAA,GAASC,MAAAA;AACtC;QACF,KAAK;AACHvB,sBAAYqB,WAAWhC,mBAAmBW,YAAYqB,OAAO,GAAGE,MAAAA;AAChE;MACJ;IACF;EACF,GAAG,CAAA,CAAE;AAELC,kBAAgB,MAAA;AACd,QAAIpC,mBAAmB/C,IAAI;AACzBsC,qBAAe,UAAUqB,YAAYqB,SAASjC,eAAe;QAAEqC,UAAU;QAAUC,QAAQ;MAAS,CAAA;AAEpG,WAAK5C,cAAc6C,iBAAgBC,gBAAgB;QAAEC,SAAS5E;MAAU,CAAA;IAC1E;EACF,GAAG;IAACZ;IAAI+C;IAAgBT;IAAYG;GAAc;AAElD,QAAMgD,SAASnD,WAAWoD,WAAW,MAAA,KAAWvE,SAAS;AACzD,QAAMwE,eACHrD,WAAWoD,WAAW,MAAA,KAAWvE,KAAKuE,WAAW,MAAA,KAAapD,eAAe,UAAUnB,SAAS;AAEnG,QAAMU,YAAYC,YAAAA;AAElB,QAAM8D,OAAOC,SACX,MACExF,QAAQ;IACNyF,cAAc9F;IACdwF,SAASnF,KAAKuF;IACdG,aAAarE,SAASkE;IACtBI,YAAY3F,KAAK2F;IACjBnC;IACAtB;IACAO;EACF,GACF;IAACzC;IAAMA,MAAMuF;IAAMvF,MAAM2F;IAAYzD;IAAMO;IAAiBpB,SAASkE;IAAM/B;GAAQ;AAIrF,QAAMoC,cAAcJ,SAAQ,MAAM,gBAAA7E,OAAA,cAACkF,cAAAA,IAAAA,GAAiB,CAAA,CAAE;AAEtD,QAAMC,OAAOhF,KAAKuE,WAAW,MAAA,IAAU,YAAYU,WAAUD;AAC7D,QAAME,aAAa/D,eAAe;AAClC,QAAMJ,YAAYC,IAChB,gFACAsD,UAAU,oBACVA,UAAUpD,mBACVD,oBACAjB,KAAKuE,WAAW,MAAA,KAAW,QAC3BvE,KAAKuE,WAAW,OAAA,KAAY,wCAC5BW,cAAc,eACdlF,SAAS,WAAWM,gBAAgB,cAAc,+BAA+B,+BACjFN,SAAS,oBAAoB,8BAC7BG,UAAUC,sBACR,CAACJ,KAAKuE,WAAW,MAAA,KACjB,yEAAA;AAGJ,SACE,gBAAA1E,OAAA,cAACmF,MAAAA;IACCG,KAAK3C;IACL4C,eAAY;IACZtE,mCAAiC;IACjCuE,UAAU;IACT,GAAIrF,KAAKuE,WAAW,MAAA,IAChB;MAAE,GAAG7D;MAAWK;IAAU,IAC3B;MACEuE,MAAM;QAAEzG;MAAG;MACXmE;MACAuC,cAAcrC;MACdsC,YAAYzE;MACZP;MACAK,MAAM;IACR;IACH,GAAI2D,eAAexC,iBAAiB,CAAC;IACtCyD,WAAWjC;KAEVtE,OACC,gBAAAW,OAAA,cAAAA,OAAA,UAAA,MACG,CAACqF,cACA,gBAAArF,OAAA,cAAC6F,cAAAA;IACC7G;IACAmB,MAAMA,KAAKuE,WAAW,OAAA,IAAW,SAASvE;IAC1Cd;IACAiC;IACAwE,aAAaxF,UAAUyF;IACvBtD;IACAC;IACAZ;IACAkE,WAAWtF,SAAS1B;IACpByB;IACAlB;MAGJ,gBAAAS,OAAA,cAACiG,SAAQA,SAAO;IACdlC,KAAK1E,KAAKL;IACVgC,MAAK;IACL4D;IACAsB,OAAO;IACPC,UAAUC;IACVnB;QAIJ,gBAAAjF,OAAA,cAACqG,YAAAA;IAAWrH;IAAQmB;MAErB+B,aAAa,gBAAAlC,OAAA,cAACoF,WAAUkB,cAAY,IAAA,CAAA;AAG3C,CAAA;;;AMxSF,OAAOC,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,uBAAAA,4BAA2B;AACpC,SAASC,mBAAAA,kBAAiBC,uBAAAA,4BAA2B;AACrD,SAASC,cAAAA,aAAwDC,kBAAAA,uBAAsB;AAKhF,IAAMC,sBAAsB,CAAC,EAClCC,YACAC,UAAU,QAAO,MACiC;AAClD,QAAM,EAAEC,YAAW,IAAKC,aAAAA;AACxB,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AAEpC,QAAMC,cAAcC,aAAY,MAAA;AAC9BP,gBAAY,CAACQ,WAAW;MACtB,GAAGA;MACHC,cAAcD,MAAMC,iBAAiB,aAAa,cAAc;IAClE,EAAA;EACF,GAAG;IAACT;GAAY;AAEhB,SACE,gBAAAU,OAAA,cAACC,aAAAA;IACCZ;IACAa,MAAK;IACLC,UAAAA;IACAC,MAAM;IACNC,OAAOb,EAAE,+BAAA;IACTc,SAASV;IACTR;;AAGN;AAEO,IAAMmB,qBAAqB,MAAA;AAChC,QAAM,EAAEjB,YAAW,IAAKC,aAAAA;AACxB,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AAEpC,QAAMC,cAAcC,aAAY,MAAA;AAC9BP,gBAAY,CAACQ,WAAW;MAAE,GAAGA;MAAOC,cAAc;IAAY,EAAA;EAChE,GAAG;IAACT;GAAY;AAEhB,SACE,gBAAAU,OAAA,cAACC,aAAAA;IACCZ,SAAQ;IACRa,MAAK;IACLC,UAAAA;IACAC,MAAM;IACNC,OAAOb,EAAE,gCAAA;IACTc,SAASV;IACTR,YAAW;;AAGjB;AAEO,IAAMoB,mCAAmC,CAAC,EAC/CC,MACArB,YACAsB,QAAO,MAC+C;AACtD,QAAM,EAAEC,cAAa,IAAKC,qBAAAA;AAC1B,QAAM,EAAEd,OAAOR,YAAW,IAAKC,aAAAA;AAC/B,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AAEpC,QAAMkB,aAAaC,kBAAAA;AACnB,QAAMlB,cAAcC,aAAY,MAAA;AAC9B,UAAMkB,YAAYjB,MAAMkB,8BAA8B,aAAa,cAAc;AACjF1B,gBAAY,CAACQ,YAAW;MAAE,GAAGA;MAAOkB,2BAA2BD;IAAU,EAAA;AAEzE,UAAME,UAAUnB,MAAMoB,8BAA8BL,WAAW,CAAA,KAAMM,qBAAoBN,WAAW,CAAA,EAAGlB,EAAE;AACzG,QAAIoB,cAAc,cAAc,CAACL,WAAWO,SAAS;AACnD,WAAKN,cAAcS,iBAAgBC,qBAAqB;QAAEJ;MAAQ,CAAA;IACpE;EACF,GAAG;IAACnB;IAAOR;IAAaoB;IAASG;IAAYF;GAAc;AAE3D,SACE,gBAAAX,OAAA,cAACC,aAAAA;IACCZ,SAAQ;IACRD,YAAY;MAAC;MAAwBA;;IACrCc,MAAK;IACLC,UAAAA;IACAE,OAAOb,EAAE,kCAAA;IACT8B,aAAab,OAAO,SAASc;IAC7BjB,SAASV;;AAGf;;;APxEA,IAAM4B,QAAQ;EAAC;EAA+B;IAAEC,IAAIC,KAAKC;EAAG;;AAMrD,IAAMC,uBAAuB,CAAC,EAAEC,QAAO,MAA6B;AACzE,QAAM,EAAEC,EAAC,IAAKC,gBAAeL,KAAKC,EAAE;AACpC,QAAM,EAAEK,cAAa,IAAKC,qBAAAA;AAC1B,QAAM,EAAEC,OAAOC,MAAMC,YAAW,IAAKC,aAAAA;AACrC,QAAMC,aAAaC,QAAQJ,IAAAA;AAC3B,QAAMK,aAAaC,eAAAA;AACnB,QAAMC,SAASC,oBAAoBH,YAAYF,UAAAA;AAC/C,QAAMM,iBAAiBC,kBAAkBL,YAAYF,UAAAA;AAErD,QAAMQ,aAAaC,kBAAAA;AACnB,QAAMC,kBAAkBF,WAAWG,KAAK,CAACC,cAAcC,qBAAoBD,UAAUvB,EAAE,MAAME,OAAAA;AAC7F,QAAMuB,WAAWJ,mBAAmBG,qBAAoBH,gBAAgBrB,EAAE;AAC1E,QAAM,CAAC0B,eAAeC,gBAAAA,IAAoBC,UAASH,QAAAA;AAEnDI,EAAAA,WAAU,MAAA;AACRF,qBAAiBF,QAAAA;EACnB,GAAG;IAACA;GAAS;AAEb,QAAMK,iBAAiBC,aACrB,CAACC,UAAAA;AACC,UAAMC,YAAYD,MAAME,cAAcC,aAAa,YAAA;AACnD,QAAIF,cAAcR,UAAU;AAC1BhB,kBAAY,CAACF,YAAW;QACtB,GAAGA;QACH6B,2BAA2B7B,OAAM6B,8BAA8B,aAAa,cAAc;MAC5F,EAAA;IACF,OAAO;AACLT,uBAAiBM,SAAAA;AACjBxB,kBAAY,CAACF,YAAW;QAAE,GAAGA;QAAO6B,2BAA2B;MAAW,EAAA;AAC1E,WAAK/B,cAAcgC,iBAAgBC,qBAAqB;QAAEC,SAASN;MAAU,CAAA;IAC/E;EACF,GACA;IAAC1B,MAAM6B;IAA2BX;IAAUpB;IAAeI;GAAY;AAGzE,QAAM+B,OAAOC,SACX,MACEpB,mBAAmB;IACjBrB,IAAIqB,gBAAgBrB;IACpBuC,SAASlB,gBAAgBmB;EAC3B,GACF;IAACnB,iBAAiBrB;IAAIqB,iBAAiBmB;GAAK;AAG9CX,EAAAA,WAAU,MAAA;AACR,QAAI,CAACJ,UAAU;AACb,WAAKpB,cAAcgC,iBAAgBC,qBAAqB;QAAE/B,OAAO;MAAY,CAAA;IAC/E;EACF,GAAG;IAACkB;IAAUpB;GAAc;AAE5B,SACE,gBAAAqC,OAAA,cAACC,KAAK1C,sBAAoB;IACxBJ;IACA+C,YAAY;MACV7B,UAAU;MACVE,kBAAkB;;KAIpB,gBAAAyB,OAAA,cAACG,KAAKC,MAAI;IAACC,aAAY;IAAWC,OAAOtB;IAAekB,YAAW;KACjE,gBAAAF,OAAA,cAACO,OAAAA;IACCC,0BAAAA;IACAC,MAAK;IACLC,OAAOC,UAAS,CAAA;IAChBC,WAAWC,IACT,mDACA,oGACA,+FAAA;KAIF,gBAAAb,OAAA,cAACG,KAAKW,SAAO;IAACZ,YAAW;KACtBzB,WAAWsC,IAAI,CAAClC,cACf,gBAAAmB,OAAA,cAACG,KAAKa,KAAG;IAACC,KAAKnC,qBAAoBD,UAAUvB,EAAE;IAAGgD,OAAOxB,qBAAoBD,UAAUvB,EAAE;IAAG4D,SAAAA;KAC1F,gBAAAlB,OAAA,cAACmB,aAAAA;IACChE,OAAOiE,mBAAkBvC,UAAUwC,WAAWlE,OAAOM,CAAAA;IACrD6D,MAAMzC,UAAUwC,WAAWC;IAC3BC,UAAAA;IACAC,aAAY;IACZC,cAAY3C,qBAAoBD,UAAUvB,EAAE;IAC5CoE,SACE3C,aAAaD,qBAAoBD,UAAUvB,EAAE,IACzCO,MAAM6B,8BAA8B,aAClC,YACA,UACF;IAENiC,SAASvC;SAKhB,CAACb,kBACA,gBAAAyB,OAAA,cAACO,OAAAA;IACCE,MAAK;IACLG,WAAU;IACVF,OAAOC,UAAS,CAAA;KAEhB,gBAAAX,OAAA,cAAC4B,SAAQA,SAAO;IAACnB,MAAK;OAG1B,gBAAAT,OAAA,cAACO,OAAAA;IAAIE,MAAK;IAAOG,WAAU;KACzB,gBAAAZ,OAAA,cAAC6B,kCAAAA,IAAAA,CAAAA,CAAAA,GAGJ9C,YACCN,WAAWsC,IAAI,CAAClC,cACd,gBAAAmB,OAAA,cAACG,KAAK2B,OAAK;IACTb,KAAKnC,qBAAoBD,UAAUvB,EAAE;IACrCgD,OAAOxB,qBAAoBD,UAAUvB,EAAE;IACvC4C,YAAY;MACV;MACA;;IAED,GAAIrC,MAAM6B,8BAA8B,cAAc;MAAEqC,OAAO;IAAK;KAErE,gBAAA/B,OAAA,cAACgC,2BAAAA;IACCnD;IACAE;IACAe;IACAvB;;AAOhB;AAYA,IAAMyD,4BAA4B,CAAC,EAAEnD,WAAWE,UAAUe,MAAMvB,eAAc,MAAkC;AAC9G,QAAM,EAAEd,EAAC,IAAKC,gBAAeL,KAAKC,EAAE;AAEpC,MAAIwB,qBAAoBD,UAAUvB,EAAE,MAAMyB,YAAY,CAACe,MAAM;AAC3D,WAAO;EACT;AAEA,SACE,gBAAAE,OAAA,cAAC8B,MAAM1B,MAAI,MACT,gBAAAJ,OAAA,cAAC8B,MAAMG,SAAO;IAACf,SAAAA;IAAQgB,MAAK;KAC1B,gBAAAlC,OAAA,cAACiC,QAAQ7B,MAAI;IAACF,YAAW;KACvB,gBAAAF,OAAA,cAACmB,aAAAA;IACChE,OAAOiE,mBAAkBvC,UAAUwC,WAAWlE,OAAOM,CAAAA;IACrD6D,MAAMzC,UAAUwC,WAAWC;IAC3BC,UAAAA;IACAC,aAAY;IACZC,cAAY3C,qBAAoBD,UAAUvB,EAAE;IAC5C4C,YAAW;IACXwB,SAAQ;MAEV,gBAAA1B,OAAA,cAACO,OAAAA;IAAIE,MAAK;IAAOG,WAAU;KACxBQ,mBAAkBvC,UAAUwC,WAAWlE,OAAOM,CAAAA,CAAAA,CAAAA,CAAAA,GAIrD,gBAAAuC,OAAA,cAAC8B,MAAMK,SAAO;IAACjC,YAAW;KACxB,gBAAAF,OAAA,cAAC4B,SAAQA,SAAO;IACdnB,MAAM,mBAAmB3B,qBAAoBD,UAAUvB,EAAE,CAAA;IACzDwC;IACAsC,UAAUC;IACVC,aAAa,gBAAAtC,OAAA,cAACuC,cAAAA,IAAAA;OAGjB,CAAChE,kBACA,gBAAAyB,OAAA,cAAC8B,MAAMU,WAAS;IAACtC,YAAW;IAAOgC,MAAK;KACtC,gBAAAlC,OAAA,cAAC4B,SAAQA,SAAO;IAACnB,MAAK;IAAwBgC,OAAO;;AAK/D;;;AQzMA,OAAOC,UAASC,WAAAA,gBAAe;AAE/B,SAASC,WAAAA,gBAAe;AACxB,SAAqBC,QAAAA,aAAY;AAOjC,IAAMC,SAAQ;EAAC;EAAiB;IAAEC,IAAIC,KAAKC;EAAG;;AAEvC,IAAMC,UAAU,MAAA;AACrB,QAAM,EAAEC,OAAOC,KAAI,IAAKC,aAAAA;AACxB,QAAM,EAAEC,iBAAiBC,YAAYC,QAAO,IAAKL;AACjD,QAAMM,aAAaC,eAAAA;AACnB,QAAMC,aAAaC,QAAQR,IAAAA;AAC3B,QAAMS,SAASC,oBAAoBL,YAAYE,UAAAA;AAC/C,QAAMI,iBAAiBC,kBAAkBP,YAAYE,UAAAA;AAErD,QAAMM,iBAAiBC,SACrB,OAAO;IAAEZ;IAAiBO;IAAQE;IAAgBP;EAAQ,IAC1D;IAACF;IAAiBO;IAAQE;IAAgBP;GAAQ;AAGpD,SACE,gBAAAW,OAAA,cAACC,MAAKC,mBAAiB;IACrBvB,OAAOA;IACPwB,YAAY;MACV;MACAT,UAAU;MACVE,kBAAkB;;KAGpB,gBAAAI,OAAA,cAACI,SAAQA,SAAO;IAACC,MAAK;IAAaC,MAAMR;IAAgBS,OAAO;;AAGtE;;;AT5BO,IAAMC,SAAS,CAAC,EAAEC,SAASC,WAAU,MAAuD;AACjG,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,SACE,gBAAAC,OAAA,cAACC,UAAAA;IACCC,WAAWC,IACT,8CACAT,YAAY,YACV,+FACFC,UAAAA;KAGDD,YAAY,YAAY,gBAAAM,OAAA,cAACI,oBAAAA,IAAAA,IAAwB,gBAAAJ,OAAA,cAACK,qBAAAA,IAAAA,GACnD,gBAAAL,OAAA,cAACM,QAAAA;IAAKJ,WAAU;KAAyBN,EAAE,oBAAoB;IAAEW,IAAIC;EAAe,CAAA,CAAA,GACnFd,YAAY,YACX,gBAAAM,OAAA,cAACS,OAAAA;IAAIC,MAAK;IAAOR,WAAU;KACzB,gBAAAF,OAAA,cAACS,OAAAA;IAAIC,MAAK;IAAOR,WAAU;KACzB,gBAAAF,OAAA,cAACW,SAAQA,SAAO;IAACD,MAAK;IAAeE,OAAO;QAIlD,gBAAAZ,OAAA,cAACM,QAAAA;IAAKI,MAAK;IAAOR,WAAU;MAC5B,gBAAAF,OAAA,cAACW,SAAQA,SAAO;IAACD,MAAK;IAAeE,OAAO;MAC5C,gBAAAZ,OAAA,cAACW,SAAQA,SAAO;IAACD,MAAK;IAAcE,OAAO;;AAGjD;;;AUlCA,OAAOC,aAAW;AAElB,SAASC,cAAc;;;ACFvB,OAAOC,aAAW;AAElB,SAASC,WAAAA,gBAAe;AACxB,SAASC,eAAAA,oBAAmB;AAC5B,SAASC,WAAAA,gBAAe;AACxB,SAASC,mBAAmB;AAKrB,IAAMC,aAAa,MAAA;AACxB,QAAM,CAACC,EAAAA,IAAMC,YAAAA;AACb,QAAM,EAAEC,MAAK,IAAKC,aAAAA;AAClB,QAAMC,aAAaC,SAAQH,OAAOF,EAAAA;AAClCM,wBAAsBF,UAAAA;AAEtB,SACE,gBAAAG,QAAA,cAACC,OAAAA;IAAIC,MAAK;IAAOC,WAAU;KAGzB,gBAAAH,QAAA,cAACI,SAAQA,SAAO;IAACF,MAAK;IAAiBG,MAAM;MAAEC,SAAST;IAAW;IAAGU,OAAO;;AAGnF;;;ACvBA,OAAOC,WAASC,YAAAA,WAAwBC,eAAAA,cAAaC,aAAAA,YAAWC,WAAAA,UAASC,UAAAA,eAAc;AAEvF,SAASC,mBAAmBC,uBAAAA,sBAAqBC,wBAAwB;AACzE,SAASC,mBAAAA,wBAAuB;AAChC,SAASC,6BAA6B;AACtC,SAASC,QAAAA,OAA6BC,eAAeC,uBAAuB;AAC5E,SAASC,yBAAyBC,OAAOC,oBAAoB;AAC7D,SAASC,wBAAwBC,MAAAA,WAAU;;;ACP3C,OAAOC,aAAW;AAElB,SAASC,WAAAA,gBAAe;AAQjB,IAAMC,eAAe,MAAA;AAC1B,QAAMC,aAAaC,eAAAA;AACnB,QAAM,EAAEC,KAAI,IAAKC,aAAAA;AACjB,QAAMC,aAAaC,QAAQH,IAAAA;AAC3B,QAAMI,SAASC,oBAAoBP,YAAYI,UAAAA;AAC/C,SACE,gBAAAI,QAAA,cAACC,OAAAA;IACCC,MAAK;IACLC,WAAU;IACVC,eAAY;KAEZ,gBAAAJ,QAAA,cAACK,SAAQA,SAAO;IAACH,MAAK;MACrB,CAACJ,UAAU,gBAAAE,QAAA,cAACM,qBAAAA;IAAoBC,SAAQ;IAAUC,YAAYC;;AAGrE;;;ACzBA,OAAOC,aAAW;AAElB,SAASC,WAAAA,gBAAe;AACxB,SAASC,wBAAwB;AAE1B,IAAMC,YAAY,CAAC,EAAEC,UAAS,MAA2B;AAC9D,QAAMC,QAAQC,iBAAiBC,QAAW,GAAA;AAC1C,SACE,gBAAAC,QAAA,cAACC,OAAAA;IACCC,MAAK;IACLC,WAAU;IACT,GAAGN;KAEHD,aAAa,gBAAAI,QAAA,cAACI,SAAQA,SAAO;IAACF,MAAK;IAAQG,OAAO;MACnD,gBAAAL,QAAA,cAACI,SAAQA,SAAO;IAACF,MAAK;IAAaG,OAAO;;AAGhD;;;ACjBA,OAAOC,aAAW;AAIX,IAAMC,SAAS,MAAA;AACpB,SAAO,gBAAAC,QAAA,cAACC,QAAAA;IAAOC,SAAQ;;AACzB;;;AHcO,IAAMC,WAAW,MAAA;AACtB,QAAM,EAAEC,cAAa,IAAKC,qBAAAA;AAC1B,QAAMC,WAAWC,kBAAkBC,iBAAiBC,QAAQ;AAC5D,QAAM,EAAEC,OAAOC,MAAMC,YAAW,IAAKC,aAAAA;AACrC,QAAM,EAAEC,cAAcC,2BAA2BC,0BAAyB,IAAKN;AAC/E,QAAM,EAAEO,QAAQC,eAAeC,kBAAkBC,YAAYC,MAAMC,YAAW,IAAKX;AACnF,QAAMY,4BAA4BL,gBAAgBC,mBAAmBK;AACrE,QAAMC,aAAaC,QAAQf,IAAAA;AAC3B,QAAMgB,aAAaC,eAAAA;AACnB,QAAMC,SAASC,oBAAoBH,YAAYF,UAAAA;AAC/C,QAAMM,iBAAiBC,kBAAkBL,YAAYF,UAAAA;AACrD,QAAMQ,gBAAgBC,iBAAAA;AAEtB,QAAMC,gBAAgBC,QAAe,IAAA;AACrC,QAAMC,UAAUD,QAAuB,IAAA;AAGvCE,EAAAA,WAAU,MAAA;AAER,UAAMC,YAAYN,cAAcO,aAAaC,IAAIC,sBAAsBC,SAAS;AAChF,UAAMC,WAAWL,UAAUM,WAAU;AACrC,UAAMC,UAAUzB,QAAQJ,OAAO,CAAA;AAC/B,QAAI2B,SAASG,WAAW,KAAKD,SAAS;AAGpCE,eAASC,cAA2B,+BAA+BH,OAAAA,WAAkB,GAAGI,MAAAA;IAC1F;EACF,GAAG,CAAA,CAAE;AAIL,QAAM,CAACC,WAAAA,IAAeC,cAAc,IAAA;AACpC,QAAMC,eAAejB,QAAO,KAAA;AAC5BE,EAAAA,WAAU,MAAA;AACR,QAAI,CAACa,eAAe1B,eAAe,QAAQ;AAEzC,YAAMc,YAAYN,cAAcO,aAAaC,IAAIC,sBAAsBC,SAAS;AAChF,YAAMC,WAAWL,UAAUM,WAAU;AAErCQ,mBAAaC,UAAU;AACvB,WAAKlD,cAAcmD,iBAAgBC,eAAe;QAAEC,SAASb,SAAS,CAAA;QAAIc,MAAM;MAAO,CAAA;IACzF,WAAWP,eAAe1B,eAAe,UAAU4B,aAAaC,SAAS;AACvE,WAAKlD,cAAcmD,iBAAgBC,eAAe;QAAEG,QAAQ;MAAK,CAAA;IACnE;EAEF,GAAG;IAACR;IAAa1B;IAAYrB;GAAc;AAI3CkC,EAAAA,WAAU,MAAA;AACR,QAAI,CAAChC,UAAUsD,cAAcnC,eAAe,QAAQ;AAClD,WAAKrB,cAAcmD,iBAAgBC,eAAe;QAAEC,SAASxC,OAAO,CAAA;QAAIyC,MAAM;MAAO,CAAA;IACvF;EACF,GAAG;IAACpD,UAAUsD;IAAYxD;IAAea;IAAQQ;GAAW;AAK5D,QAAMoC,eAAeC,aAAY,MAAA;AAC/B3B,kBAAcmB,UAAU;EAC1B,GAAG,CAAA,CAAE;AAELhB,EAAAA,WAAU,MAAA;AACRyB,WAAOC,iBAAiB,UAAUH,YAAAA;AAClC,WAAO,MAAME,OAAOE,oBAAoB,UAAUJ,YAAAA;EACpD,GAAG;IAACA;GAAa;AAEjB,QAAMK,gBAAgBJ,aAAY,MAAA;AAChC,QAAIzB,QAAQiB,WAAWnB,cAAcmB,WAAW,MAAM;AACpDjB,cAAQiB,QAAQa,aAAahC,cAAcmB;IAC7C;EACF,GAAG,CAAA,CAAE;AACLc,kBAAgB3C,YAAY,CAACiC,SAASA,SAAS,QAAQ,QAAQQ,aAAAA;AAK/D,QAAMG,eAAeP,aACnB,CAACQ,UAAAA;AACC,QAAI,CAACjD,QAAQiD,MAAMC,kBAAkBD,MAAME,QAAQ;AACjDrC,oBAAcmB,UAAWgB,MAAME,OAA0BL;IAC3D;EACF,GACA;IAAC9C;GAAK;AAGR,QAAMoD,UAAU,CAACpD,QAAQJ,OAAO8B,WAAW;AAE3C,QAAM2B,UAAUC,SAAQ,MAAA;AACtB,QAAI,CAACtD,QAAQf,UAAUsE,eAAe,aAAa;AACjD,aAAOC,oBAAoB5D,OAAO8B,MAAM;IAC1C;AACA,WAAO,CAAC;EACV,GAAG;IAAC1B;IAAMf,UAAUsE;IAAYjE;GAAK;AAErC,QAAMmE,eAAeH,SACnB,MAAM;IACJ;IACA9C,UAAU;IACVE,kBAAkB;KAEpB;IAACF;IAAQE;GAAe;AAG1B,QAAM,EAAEgD,OAAOC,WAAU,IAA4DL,SAAQ,MAAA;AAC3F,WAAO1D,OAAOgE,OACZ,CAACC,KAA4DC,YAAAA;AAC3DD,UAAIH,MAAMI,OAAAA,IAAWD,IAAIF,aAAa;AACtCE,UAAIF,cAAc9D,gBAAgB,IAAI;AACtC,aAAOgE;IACT,GACA;MAAEH,OAAO,CAAC;MAAGC,YAAY;IAAE,CAAA;EAE/B,GAAG;IAAC/D;IAAQC;GAAc;AAE1B,QAAMkE,qCAAqCtB,aACzC,CAACuB,SAAAA;AACCzE,gBAAY,CAAC0E,OAAO;MAAE,GAAGA;MAAGxE,cAAcuE;IAAK,EAAA;EACjD,GACA;IAACzE;GAAY;AAGf,QAAM2E,wCAAwCzB,aAC5C,CAACuB,SAAAA;AACCzE,gBAAY,CAAC0E,OAAO;MAAE,GAAGA;MAAGvE,2BAA2BsE;IAAK,EAAA;EAC9D,GACA;IAACzE;GAAY;AAGf,SACE,gBAAA4E,QAAA,cAACC,MAAKC,MAAI;IACRC,wBAAwBvE,aAAa,WAAWN;IAChDC,2BAA2BK,aAAa,WAAWL;IACnD6E,gCAAgCR;IAChCS,mCAAmCN;KAGnC,gBAAAC,QAAA,cAACM,SAAAA,IAAAA,GAGD,gBAAAN,QAAA,cAACO,sBAAAA;IAAqBzC,SAAStC;MAG/B,gBAAAwE,QAAA,cAACC,MAAKO,SAAO,IAAA,GAGZvB,WACC,gBAAAe,QAAA,cAACC,MAAKQ,SAAO;IAACC,QAAAA;IAAOC,cAAAA;IAAaC,YAAYtB;KAC5C,gBAAAU,QAAA,cAACa,cAAAA,IAAAA,CAAAA,GAKJ,CAAC5B,WACA,gBAAAe,QAAA,cAACC,MAAKQ,SAAO;IACXC,QAAAA;IACAC,cAAAA;IACAC,YAAYtB;IACZwB,OACE;MACE,kBAAkBhG,UAAUiG,qBAAqB,YAAY;MAC7D,2BACEzF,iBAAiB,aACb,+BACAA,iBAAiB,cACf,sBACA;MACR,iCACEC,8BAA8B,aAC1B,yCACAA,8BAA8B,cAC5B,wBACA;MACR,iCAAiC,GAAGO,YAAYL,OAAO,CAAA,KAAM,OAAA,KAAYuF,uBAAAA;MACzE,gCAAgC,GAAGlF,YAAYL,QAAQA,OAAO8B,UAAU,KAAK,CAAA,KAAM,OAAA,KAAYyD,uBAAAA;IACjG;KAIF,gBAAAhB,QAAA,cAACiB,OAAAA;IACCC,MAAK;IACLC,WAAW,CAACtF,OAAO,6CAA6C;IAC/D,GAAIA,QAAQ;MAAEuF,OAAO;IAAK;KAE1B,CAAC/E,UAAU,CAACT,cAAc,gBAAAoE,QAAA,cAACqB,qBAAAA;IAAoBT,YAAYU;MAC3D,CAACjF,UAAU,CAACT,cACX,gBAAAoE,QAAA,cAACuB,kCAAAA;IAAiCX,YAAYY;MAEhD,gBAAAxB,QAAA,cAACyB,OAAAA;IACCC,aAAY;IACZC,MAAK;IACLnC,YAAYA,aAAa;IACzBoB,YAAY;MACV;MACAgB;;IAEFd,OAAO5B;IACP2C,UAAUhD;IACViD,KAAKjF;KAEJpB,OAAOsG,IAAI,CAACpC,YACX,gBAAAK,QAAA,cAACgC,WAAAA;IAASC,KAAKtC;KACb,gBAAAK,QAAA,cAACkC,gBAAAA;IAAe3C,OAAOA,MAAMI,OAAAA,IAAW;IAAGwC,aAAa,CAAC,CAACrH,UAAUsD;MACpE,gBAAA4B,QAAA,cAACoC,OAAAA;IACCC,IAAI1C;IACJhE,kBAAkBI;IAClBuG,MAAK;IACL/C,OAAOA,MAAMI,OAAAA;IACblE;IACAQ;IACAnB;UAQV,gBAAAkF,QAAA,cAACiB,OAAAA;IACCC,MAAK;IACLC,WAAWtF,OAAO,6CAA6C;IAC9D,GAAI,CAACA,QAAQ;MAAEuF,OAAO;IAAK;KAE3B,CAAC/E,UAAU,CAACT,cAAc,gBAAAoE,QAAA,cAACqB,qBAAAA;IAAoBT,YAAYU;MAC3D,CAACjF,UAAU,CAACT,cACX,gBAAAoE,QAAA,cAACuB,kCAAAA;IAAiCX,YAAYY;MAEhD,gBAAAxB,QAAA,cAACuC,aAAaC,UAAQ;IACpBC,OAAO;MACLf,aAAa;MACbC,MAAM;MACNe,MAAM;IACR;KAEA,gBAAA1C,QAAA,cAACoC,OAAAA;IACCC,IAAIxG;IACJF,kBAAkBI;IAClBuG,MAAK;IACLrG;IACAnB;SAQTuB,UAAU,gBAAA2D,QAAA,cAAC2C,QAAAA,IAAAA,GAGXpG,kBAAkB,gBAAAyD,QAAA,cAAC4C,WAAAA;IAAUC,WAAW/H,UAAU+H;;AAGzD;AAEA,IAAMX,iBAAiB,CAAC,EAAE3C,OAAO4C,YAAW,MAC1C5C,QAAQ,IACN,gBAAAS,QAAA,cAAC8C,QAAAA;EACC5B,MAAK;EACLC,WAAW4B,IAAG,8BAA8BZ,cAAc,QAAQ,KAAA;EAClErB,OAAO;IAAEkC,YAAYzD;EAAM;KAE3B;;;AI1RN,OAAO0D,WAASC,eAAAA,oBAAmB;AAEnC,SAASC,WAAAA,gBAAe;AACxB,SAASC,aAAaC,UAAUC,qBAAqB;AAK9C,IAAMC,SAAS,MAAA;AACpB,QAAM,EAAEC,OAAOC,gBAAe,IAAKC,aAAAA;AACnC,QAAM,EAAEC,YAAYC,YAAYC,kBAAkBC,sBAAsBC,oBAAoBC,cAAa,IAAKR;AAC9G,QAAMS,OAAOL,eAAe,UAAUM,YAAYD,OAAOE,cAAcF;AACvE,QAAMG,UAAUR,eAAe,UAAUM,YAAYE,UAAUD,cAAcC;AAE7E,QAAMC,mBAAmBC,aACvB,CAACC,aAAAA;AACCd,oBAAgB,CAACe,OAAO;MAAE,GAAGA;MAAGb,YAAYY;IAAS,EAAA;EACvD,GACA;IAACd;GAAgB;AAInB,SACE,gBAAAgB,QAAA,cAACR,MAAAA;IAAKS,OAAOb,qBAAqB;IAAOc,MAAMhB;IAAYiB,cAAcP;KACtER,qBAAqB;;IAEpB,gBAAAY,QAAA,cAACI,SAAQA,SAAO;MACdC,MAAK;MACLC,MAAMf;MACNgB,OAAO;MACPC,UAAUC;MACVC,aAAa,gBAAAV,QAAA,cAACW,OAAAA,IAAAA;;MAGhB,gBAAAX,QAAA,cAACL,SAAAA;IAAQiB,YAAYxB;IAAkByB,YAAYxB;IAAsByB,OAAOxB;KAC9E,gBAAAU,QAAA,cAACI,SAAQA,SAAO;IAACC,MAAK;IAASC,MAAMf;IAAegB,OAAO;IAAGC,UAAUC;;AAKlF;;;ACxCA,SAASM,qBAAqB;AAC9B,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AACxB,OAAOC,WAAiCC,eAAAA,cAAaC,aAAAA,YAAWC,UAAAA,SAAQC,YAAAA,iBAAgB;AAExF,SAASC,WAAAA,iBAAe;AACxB,SAASC,0BAA0B;AACnC,SAASC,YAAYC,WAAW;AAChC,SACEC,MACAC,WAAAA,UAEAC,qBAAAA,oBACAC,WAAAA,UACAC,kBAAAA,uBACK;AACP,SAASC,YAAY;AAOrB,IAAMC,iBAAiB;AAMvB,IAAM,CAACC,qBAAqBC,qBAAAA,IAAyBC,cAAuC,aAAA;AAErF,IAAMC,cAAc,CAAC,EAAEC,SAAQ,MAAwB;AAC5D,QAAM,EAAEC,MAAK,IAAKC,aAAAA;AAClB,QAAMC,aAAaC,QAAiC,IAAA;AACpD,QAAM,CAACC,aAAaC,cAAAA,IAAkBC,UAAS,CAAA;AAC/C,QAAM,CAACC,MAAMC,OAAAA,IAAWF,UAAS,KAAA;AACjC,QAAMG,cAAcN,QAA8B,IAAA;AAIlDO,EAAAA,WAAU,MAAA;AACRF,YAAQ,KAAA;AACR,QAAIR,MAAMW,aAAa;AACrB,UAAIF,YAAYG,SAAS;AACvBC,qBAAaJ,YAAYG,OAAO;MAClC;AACA,UAAIZ,MAAMc,iBAAiBZ,WAAWU,YAAYZ,MAAMc,eAAe;AACrEZ,mBAAWU,UAAUZ,MAAMc,iBAAiB;AAC5CT,uBAAe,CAACU,SAASA,OAAO,CAAA;MAClC;AACAN,kBAAYG,UAAUI,WAAW,MAAMR,QAAQ,IAAA,GAAOd,cAAAA;IACxD;EACF,GAAG;IAACM,MAAMW;IAAaX,MAAMiB;IAAiBjB,MAAMc;IAAed,MAAMkB;GAAe;AAExF,SACE,gBAAAC,QAAA,cAACxB,qBAAAA;IAAoBa;KACnB,gBAAAW,QAAA,cAACC,SAAQC,MAAI;IAACC,OAAO;IAAOf;KACzBP,MAAMc,iBAAiB,gBAAAK,QAAA,cAACC,SAAQG,gBAAc;IAACC,KAAKpB;IAAaF;MACjEH,QAAAA,CAAAA;AAIT;AAEO,IAAM0B,iBAAiB,MAAA;AAC5B,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,QAAM,EAAE7B,OAAO8B,gBAAe,IAAK7B,aAAAA;AACnC,QAAM,EAAEO,QAAO,IAAKZ,sBAAsB,gBAAA;AAC1C,QAAMmC,iBAAiB/B,MAAMkB,gBAAgBc;AAC7C,QAAMC,kBAAkBC,IAAIC,SAASJ,cAAAA;AACrC,QAAMK,kBAAkBC,mBAAmBN,cAAAA;AAC3C,QAAMO,QAAQtC,MAAMuC,eAAeC,mBAAkBxC,MAAMuC,cAAcb,CAAAA,IAAK;AAC9E,QAAMe,OAAOR,kBACAS,cACPR,IAAIS,UAAUZ,cAAAA,GACPa,qBACAC,eAAQC,WAAWC,eAAeC,GAAG,GACrCC,WAAI,CAAC,EAAER,MAAAA,MAAI,MAAOA,KAAAA,GAClBS,iBAAU,MAAM,0BAAA,CAAA,IAEzBC;AAEJ,QAAMC,cAAcC,aAAY,MAAA;AAC9B7C,YAAQ,KAAA;AACRsB,oBAAgB,CAAC9B,YAAW;MAC1B,GAAGA;MACHW,aAAa;MACbG,eAAeqC;MACflC,iBAAiBkC;MACjBG,aAAaH;IACf,EAAA;EACF,GAAG;IAACrB;GAAgB;AAEpB,QAAMyB,wBAAwBF,aAC5B,CAACG,UAAAA;AACC;;MAEEA,MAAMC,SAAS,mCACdD,MAAME,eAA2CC,UAAUC,SAAS,YAAA;MACrE;AACAJ,YAAMK,eAAc;IACtB,OAAO;AACLT,kBAAAA;IACF;EACF,GACA;IAACA;GAAY;AAGf,SACE,gBAAAjC,QAAA,cAACC,SAAQ0C,QAAM,MACb,gBAAA3C,QAAA,cAACC,SAAQ2C,SAAO;IACdC,MAAMhE,MAAMsD;IACZW,QAAO;IACPC,kBAAAA;IACAC,mBAAmBZ;IACnBa,iBAAiBb;KAEjB,gBAAApC,QAAA,cAACC,SAAQiD,UAAQ,MAEdrE,MAAMsE,gBAAgB,UAAU,gBAAAnD,QAAA,cAACoD,UAAQA,SAAO;IAACC,MAAK;IAAUC,MAAMzE,MAAMkB;IAAgBwD,OAAO;MAGnG1E,MAAMsE,gBAAgB,UACrB,gBAAAnD,QAAA,cAACwD,KAAKtD,MAAI,MACR,gBAAAF,QAAA,cAACyD,KAAKvD,MAAI;IAACwD,QAAQ;IAAOC,YAAW;KACnC,gBAAA3D,QAAA,cAACyD,KAAKG,SAAO,MACX,gBAAA5D,QAAA,cAACyD,KAAKI,WAAS;IAACC,SAAAA;KAASxC,QAAQ,gBAAAtB,QAAA,cAACyD,KAAKM,MAAI;IAACzC;OAC5C,gBAAAtB,QAAA,cAACyD,KAAKO,OAAK,MAAE7C,KAAAA,GAEb,gBAAAnB,QAAA,cAACyD,KAAKI,WAAS;IAACC,SAAAA;KACd,gBAAA9D,QAAA,cAACwD,KAAKS,SAAO;IAACC,SAAAA;IAAQC,UAAU,CAAClD,gBAAgBmD;KAC/C,gBAAApE,QAAA,cAAC4D,SAAQS,YAAU;IACjBC,SAAQ;IACRhD,MAAK;IACLiD,UAAAA;IACAC,OAAM;OAGV,gBAAAxE,QAAA,cAACwD,KAAKZ,SAAO;IAAC6B,OAAOxD;QAIzB,gBAAAjB,QAAA,cAACoD,UAAQA,SAAO;IAACC,MAAK;IAAgBC,MAAMzE,MAAMkB;IAAgBwD,OAAO;SAKjF,gBAAAvD,QAAA,cAACC,SAAQyE,OAAK,IAAA,CAAA,CAAA;AAItB;;;ACvJA,OAAOC,aAAW;AAGlB,SACEC,QACAC,QAAAA,OACAC,SAASC,cAETC,qBAAAA,oBACAC,kBAAAA,uBACK;AAKA,IAAMC,QAAQ,CAAC,EACpBC,IACAC,OACAC,aACAC,MACAC,UACAC,aACAC,WACAC,YACAC,UACAC,aAAY,MACiD;AAC7D,QAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKZ,EAAE;AAEpC,SACE,gBAAAa,QAAA,cAACC,aAAaC,MAAI;IAACC,eAAahB;IAAIiB,aAAAA;IAAYb;IAAoBK;KAClE,gBAAAI,QAAA,cAACC,aAAaI,MAAI,MAChB,gBAAAL,QAAA,cAACC,aAAaK,OAAK;IAACC,YAAW;KAC5BjB,QAAQ,gBAAAU,QAAA,cAACQ,OAAAA;IAAKlB;IAAYiB,YAAW;MACrCnB,SAAS,gBAAAY,QAAA,cAACS,QAAAA,MAAMC,mBAAkBtB,OAAOS,CAAAA,CAAAA,CAAAA,GAE3CR,eACC,gBAAAW,QAAA,cAACC,aAAaU,aAAW,MAAEtB,eAAeqB,mBAAkBrB,aAAaQ,CAAAA,CAAAA,CAAAA,GAG7E,gBAAAG,QAAA,cAACC,aAAaW,SAAO,MAClBjB,YAAYF,aAAaD,eACxB,gBAAAQ,QAAA,cAACC,aAAaY,QAAM;IAACC,SAASJ,mBAAkBjB,WAAWI,CAAAA;IAAIkB,SAAAA;KAC7D,gBAAAf,QAAA,cAACgB,QAAAA;IAAOb,eAAY;IAAec,SAAQ;IAAUC,SAAS,MAAMvB,WAAAA;KACjEe,mBAAkBlB,aAAaK,CAAAA,CAAAA,CAAAA,GAIrCH,cACC,gBAAAM,QAAA,cAACC,aAAakB,OAAK;IAACJ,SAAAA;KAClB,gBAAAf,QAAA,cAACgB,QAAAA;IAAOb,eAAY;KAAeO,mBAAkBhB,YAAYG,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA;AAM7E;AAOO,IAAMuB,UAAU,CAAC,EAAEC,QAAQC,eAAc,MAAgB;AAC9D,SACE,gBAAAtB,QAAA,cAAAA,QAAA,UAAA,MACGqB,QAAQE,IAAI,CAACC,UACZ,gBAAAxB,QAAA,cAACd,OAAAA;IACE,GAAGsC;IACJC,KAAKD,MAAMrC;IACXS,cAAc,CAAC8B,SAAAA;AACb,UAAI,CAACA,MAAM;AACTJ,yBAAiBE,MAAMrC,EAAE;MAC3B;AAEA,aAAOuC;IACT;;AAKV;;;ARnEO,IAAMC,aAAa,CAAC,EAAEC,eAAc,MAAmB;AAC5D,QAAM,EAAEC,MAAK,IAAKC,aAAAA;AAClB,QAAM,EAAEC,OAAM,IAAKF;AAEnB,SACE,gBAAAG,QAAA,cAACC,OAAOC,MAAI,MACV,gBAAAF,QAAA,cAACG,aAAAA,MACC,gBAAAH,QAAA,cAACI,YAAAA,IAAAA,GACD,gBAAAJ,QAAA,cAACK,UAAAA,IAAAA,GACD,gBAAAL,QAAA,cAACM,gBAAAA,IAAAA,GACD,gBAAAN,QAAA,cAACO,QAAAA,IAAAA,GACD,gBAAAP,QAAA,cAACQ,SAAAA;IAAQT;IAAgBH;;AAIjC;",
|
|
6
|
+
"names": ["React", "Surface", "useTranslation", "mx", "osTranslations", "React", "useCallback", "useEffect", "useMemo", "useState", "Surface", "useOperationInvoker", "LayoutOperation", "getCompanionVariant", "IconButton", "Main", "Panel", "toLocalizedString", "Toolbar", "useTranslation", "Tabs", "iconSize", "mx", "useFocusFinders", "React", "memo", "useCallback", "useLayoutEffect", "useMemo", "useRef", "Surface", "useOperationInvoker", "LayoutOperation", "getCompanionVariant", "useAppGraph", "debounce", "useNode", "useAttentionAttributes", "StackItem", "railGridHorizontal", "mainIntrinsicSize", "mx", "React", "useEffect", "useMemo", "useState", "TimeoutError", "log", "ErrorFallback", "useTranslation", "React", "Fragment", "memo", "useCallback", "useEffect", "useMemo", "Surface", "useOperationInvoker", "LayoutOperation", "getCompanionVariant", "useAppGraph", "Graph", "useActionRunner", "Icon", "IconButton", "Popover", "toLocalizedString", "useTranslation", "StackItem", "TextTooltip", "hoverableControls", "hoverableFocusedWithinControls", "iconSize", "mx", "soloInlinePadding", "sidebarToggleStyles", "fixedSidebarToggleStyles", "mx", "fixedComplementarySidebarToggleStyles", "React", "forwardRef", "useCallback", "useOperationInvoker", "ButtonGroup", "IconButton", "useTranslation", "PlankControl", "icon", "label", "props", "IconButton", "iconOnly", "variant", "tooltipSide", "plankControlSpacing", "PlankCompanionControls", "forwardRef", "primary", "forwardedRef", "t", "useTranslation", "meta", "id", "invokePromise", "useOperationInvoker", "handleCloseCompanion", "useCallback", "DeckOperation", "ChangeCompanion", "companion", "div", "ref", "className", "onClick", "classNames", "PlankControls", "children", "capabilities", "layoutMode", "pin", "close", "buttonClassNames", "layoutIsAnySolo", "startsWith", "ButtonGroup", "deck", "solo", "disabled", "incrementStart", "incrementEnd", "fullscreen", "data-testid", "MAX_COMPANIONS", "PlankHeading", "memo", "id", "part", "node", "deckEnabled", "canIncrementStart", "canIncrementEnd", "popoverAnchorId", "primaryId", "pending", "companioned", "companions", "layoutMode", "actions", "t", "useTranslation", "meta", "invokePromise", "useOperationInvoker", "runAction", "useActionRunner", "graph", "useAppGraph", "breakpoint", "useBreakpoints", "icon", "properties", "label", "toLocalizedString", "ns", "isCompanionNode", "type", "PLANK_COMPANION_TYPE", "useEffect", "frame", "requestAnimationFrame", "Graph", "expand", "cancelAnimationFrame", "attendableId", "capabilities", "useMemo", "deck", "solo", "incrementStart", "incrementEnd", "fullscreen", "companion", "length", "variant", "getCompanionVariant", "undefined", "sigilActions", "getActions", "filter", "action", "includes", "disposition", "a", "handleAction", "useCallback", "data", "parent", "caller", "handlePlankAction", "eventType", "startsWith", "DeckOperation", "Adjust", "LayoutOperation", "UpdateComplementary", "state", "Close", "subject", "ActionRoot", "Popover", "Anchor", "Fragment", "handleTabClick", "event", "target", "closest", "tabId", "dataset", "ChangeCompanion", "React", "StackItem", "Heading", "data-tauri-drag-region", "data-plank-heading", "style", "iconSize", "classNames", "soloInlinePadding", "hoverableControls", "hoverableFocusedWithinControls", "div", "role", "className", "map", "IconButton", "key", "data-id", "iconOnly", "onClick", "Sigil", "related", "triggerLabel", "onAction", "Surface", "SigilButton", "span", "Icon", "TextTooltip", "text", "onlyWhenTruncating", "HeadingLabel", "PlankCompanionControls", "primary", "PlankControls", "close", "React", "PlankLoading", "React", "div", "role", "className", "PlankError", "id", "part", "node", "error", "errorProp", "timedOut", "setTimedOut", "useState", "useEffect", "timer", "setTimeout", "clearTimeout", "useMemo", "TimeoutError", "message", "React", "PlankHeading", "pending", "PlankErrorFallback", "PlankLoading", "t", "useTranslation", "meta", "log", "process", "ErrorFallback", "title", "errorString", "toString", "div", "role", "data-testid", "className", "p", "mx", "descriptionMessage", "UNKNOWN_ID", "Plank", "memo", "id", "companionVariant", "props", "graph", "useAppGraph", "node", "useNode", "companions", "useCompanions", "companionId", "useSelectedCompanion", "resolvedCompanionId", "undefined", "currentCompanion", "find", "hasCompanion", "React", "PlankContainer", "solo", "part", "companion", "encapsulate", "settings", "encapsulatedPlanks", "PlankComponent", "companioned", "primary", "order", "children", "sizeAttrs", "useMainSize", "div", "role", "data-popover-collision-boundary", "className", "mx", "railGridHorizontal", "mainIntrinsicSize", "layoutMode", "path", "active", "invokePromise", "useOperationInvoker", "state", "deck", "useDeckState", "popoverAnchorId", "scrollIntoView", "findFirstFocusable", "useFocusFinders", "canResize", "attentionAttrs", "useAttentionAttributes", "index", "findIndex", "entryId", "length", "canIncrementStart", "canIncrementEnd", "rootElement", "useRef", "variant", "type", "PLANK_COMPANION_TYPE", "getCompanionVariant", "sizeKey", "split", "size", "plankSizing", "handleSizeChange", "useCallback", "debounce", "nextSize", "DeckOperation", "UpdatePlankSize", "handleKeyDown", "event", "target", "currentTarget", "key", "current", "closest", "focus", "useLayoutEffect", "behavior", "inline", "LayoutOperation", "ScrollIntoView", "subject", "isSolo", "startsWith", "isAttendable", "data", "useMemo", "attendableId", "companionTo", "properties", "placeholder", "PlankLoading", "Root", "StackItem", "fullscreen", "ref", "data-testid", "tabIndex", "item", "onSizeChange", "classNames", "onKeyDown", "PlankHeading", "deckEnabled", "enableDeck", "primaryId", "Surface", "limit", "fallback", "PlankErrorFallback", "PlankError", "ResizeHandle", "React", "useCallback", "useOperationInvoker", "LayoutOperation", "getCompanionVariant", "IconButton", "useTranslation", "ToggleSidebarButton", "classNames", "variant", "updateState", "useDeckState", "t", "useTranslation", "meta", "id", "handleClick", "useCallback", "state", "sidebarState", "React", "IconButton", "icon", "iconOnly", "size", "label", "onClick", "CloseSidebarButton", "ToggleComplementarySidebarButton", "inR0", "current", "invokePromise", "useOperationInvoker", "companions", "useDeckCompanions", "nextState", "complementarySidebarState", "subject", "complementarySidebarPanel", "getCompanionVariant", "LayoutOperation", "UpdateComplementary", "tooltipSide", "undefined", "label", "ns", "meta", "id", "ComplementarySidebar", "current", "t", "useTranslation", "invokePromise", "useOperationInvoker", "state", "deck", "updateState", "useDeckState", "layoutMode", "getMode", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "companions", "useDeckCompanions", "activeCompanion", "find", "companion", "getCompanionVariant", "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", "role", "style", "iconSize", "className", "mx", "Tablist", "map", "Tab", "key", "asChild", "IconButton", "toLocalizedString", "properties", "icon", "iconOnly", "tooltipSide", "data-value", "variant", "onClick", "Surface", "ToggleComplementarySidebarButton", "Panel", "inert", "ComplementarySidebarPanel", "Toolbar", "size", "Content", "fallback", "PlankErrorFallback", "placeholder", "PlankLoading", "Statusbar", "limit", "React", "useMemo", "Surface", "Main", "label", "ns", "meta", "id", "Sidebar", "state", "deck", "useDeckState", "popoverAnchorId", "activeDeck", "current", "breakpoint", "useBreakpoints", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "navigationData", "useMemo", "React", "Main", "NavigationSidebar", "classNames", "Surface", "role", "data", "limit", "Banner", "variant", "classNames", "t", "useTranslation", "meta", "id", "React", "header", "className", "mx", "CloseSidebarButton", "ToggleSidebarButton", "span", "ns", "osTranslations", "div", "role", "Surface", "limit", "React", "Mosaic", "React", "Surface", "useAppGraph", "useNode", "useAttended", "ActiveNode", "id", "useAttended", "graph", "useAppGraph", "activeNode", "useNode", "useNodeActionExpander", "React", "div", "role", "className", "Surface", "data", "subject", "limit", "React", "Fragment", "useCallback", "useEffect", "useMemo", "useRef", "useAtomCapability", "useOperationInvoker", "usePluginManager", "LayoutOperation", "AttentionCapabilities", "Main", "useMediaQuery", "useOnTransition", "DEFAULT_HORIZONTAL_SIZE", "Stack", "StackContext", "mainPaddingTransitions", "mx", "React", "Surface", "ContentEmpty", "breakpoint", "useBreakpoints", "deck", "useDeckState", "layoutMode", "getMode", "topbar", "layoutAppliesTopbar", "React", "div", "role", "className", "data-testid", "Surface", "ToggleSidebarButton", "variant", "classNames", "fixedSidebarToggleStyles", "React", "Surface", "useLandmarkMover", "StatusBar", "showHints", "mover", "useLandmarkMover", "undefined", "React", "div", "role", "className", "Surface", "limit", "React", "Topbar", "React", "Banner", "variant", "DeckMain", "invokePromise", "useOperationInvoker", "settings", "useAtomCapability", "DeckCapabilities", "Settings", "state", "deck", "updateState", "useDeckState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "active", "companionOpen", "companionVariant", "fullscreen", "solo", "plankSizing", "effectiveCompanionVariant", "undefined", "layoutMode", "getMode", "breakpoint", "useBreakpoints", "topbar", "layoutAppliesTopbar", "hoistStatusbar", "useHoistStatusbar", "pluginManager", "usePluginManager", "scrollLeftRef", "useRef", "deckRef", "useEffect", "attention", "capabilities", "get", "AttentionCapabilities", "Attention", "attended", "getCurrent", "firstId", "length", "document", "querySelector", "focus", "isNotMobile", "useMediaQuery", "shouldRevert", "current", "LayoutOperation", "SetLayoutMode", "subject", "mode", "revert", "enableDeck", "handleResize", "useCallback", "window", "addEventListener", "removeEventListener", "restoreScroll", "scrollLeft", "useOnTransition", "handleScroll", "event", "currentTarget", "target", "isEmpty", "padding", "useMemo", "overscroll", "calculateOverscroll", "mainPosition", "order", "itemsCount", "reduce", "acc", "entryId", "handleNavigationSidebarStateChange", "next", "s", "handleComplementarySidebarStateChange", "React", "Main", "Root", "navigationSidebarState", "onNavigationSidebarStateChange", "onComplementarySidebarStateChange", "Sidebar", "ComplementarySidebar", "Overlay", "Content", "bounce", "handlesFocus", "classNames", "ContentEmpty", "style", "encapsulatedPlanks", "DEFAULT_HORIZONTAL_SIZE", "div", "role", "className", "inert", "ToggleSidebarButton", "fixedSidebarToggleStyles", "ToggleComplementarySidebarButton", "fixedComplementarySidebarToggleStyles", "Stack", "orientation", "size", "mainPaddingTransitions", "onScroll", "ref", "map", "Fragment", "key", "PlankSeparator", "encapsulate", "Plank", "id", "part", "StackContext", "Provider", "value", "rail", "Topbar", "StatusBar", "showHints", "span", "mx", "gridColumn", "React", "useCallback", "Surface", "AlertDialog", "Dialog", "NaturalDialog", "Dialog", "state", "updateEphemeral", "useDeckState", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "dialogContent", "Root", "AlertDialog", "NaturalDialog", "Overlay", "handleOpenChange", "useCallback", "nextOpen", "s", "React", "modal", "open", "onOpenChange", "Surface", "role", "data", "limit", "fallback", "PlankErrorFallback", "placeholder", "div", "blockAlign", "classNames", "style", "createContext", "Function", "Option", "React", "useCallback", "useEffect", "useRef", "useState", "Surface", "useObjectMenuItems", "Annotation", "Obj", "Card", "Popover", "toLocalizedString", "Toolbar", "useTranslation", "Menu", "DEBOUNCE_DELAY", "DeckPopoverProvider", "useDeckPopoverContext", "createContext", "PopoverRoot", "children", "state", "useDeckState", "virtualRef", "useRef", "virtualIter", "setVirtualIter", "useState", "open", "setOpen", "debounceRef", "useEffect", "popoverOpen", "current", "clearTimeout", "popoverAnchor", "iter", "setTimeout", "popoverAnchorId", "popoverContent", "React", "Popover", "Root", "modal", "VirtualTrigger", "key", "PopoverContent", "t", "useTranslation", "meta", "id", "updateEphemeral", "popoverSubject", "subject", "isObjectPopover", "Obj", "isObject", "objectMenuItems", "useObjectMenuItems", "title", "popoverTitle", "toLocalizedString", "icon", "pipe", "getSchema", "fromNullable", "flatMap", "Annotation", "IconAnnotation", "get", "map", "getOrElse", "undefined", "handleClose", "useCallback", "popoverSide", "handleInteractOutside", "event", "type", "currentTarget", "classList", "contains", "preventDefault", "Portal", "Content", "side", "sticky", "hideWhenDetached", "onInteractOutside", "onEscapeKeyDown", "Viewport", "popoverKind", "Surface", "role", "data", "limit", "Menu", "Card", "border", "classNames", "Toolbar", "IconBlock", "padding", "Icon", "Title", "Trigger", "asChild", "disabled", "length", "IconButton", "variant", "iconOnly", "label", "items", "Arrow", "React", "Button", "Icon", "Toast", "NaturalToast", "toLocalizedString", "useTranslation", "Toast", "id", "title", "description", "icon", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "onOpenChange", "t", "useTranslation", "meta", "React", "NaturalToast", "Root", "data-testid", "defaultOpen", "Body", "Title", "classNames", "Icon", "span", "toLocalizedString", "Description", "Actions", "Action", "altText", "asChild", "Button", "variant", "onClick", "Close", "Toaster", "toasts", "onDismissToast", "map", "toast", "key", "open", "DeckLayout", "onDismissToast", "state", "useDeckState", "toasts", "React", "Mosaic", "Root", "PopoverRoot", "ActiveNode", "DeckMain", "PopoverContent", "Dialog", "Toaster"]
|
|
7
|
+
}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __export = (target, all) => {
|
|
3
|
+
for (var name in all)
|
|
4
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
5
|
+
};
|
|
6
|
+
|
|
1
7
|
// src/meta.ts
|
|
2
8
|
import { trim } from "@dxos/util";
|
|
3
9
|
var meta = {
|
|
4
|
-
id: "dxos.
|
|
10
|
+
id: "org.dxos.plugin.deck",
|
|
5
11
|
name: "Layout",
|
|
6
12
|
description: trim`
|
|
7
13
|
Flexible layout system for arranging workspace views in tabs, splits, and panels.
|
|
@@ -11,6 +17,7 @@ var meta = {
|
|
|
11
17
|
};
|
|
12
18
|
|
|
13
19
|
export {
|
|
20
|
+
__export,
|
|
14
21
|
meta
|
|
15
22
|
};
|
|
16
|
-
//# sourceMappingURL=chunk-
|
|
23
|
+
//# sourceMappingURL=chunk-UN7XQWDE.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};\n"],
|
|
5
|
+
"mappings": ";;;;;;;AAKA,SAASA,YAAY;AAEd,IAAMC,OAAoB;EAC/BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;EAIbC,MAAM;AACR;",
|
|
6
|
+
"names": ["trim", "meta", "id", "name", "description", "trim", "icon"]
|
|
7
|
+
}
|
|
@@ -1,18 +1,51 @@
|
|
|
1
1
|
import {
|
|
2
2
|
meta
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-UN7XQWDE.mjs";
|
|
4
|
+
|
|
5
|
+
// src/types/capabilities.ts
|
|
6
|
+
import * as Effect from "effect/Effect";
|
|
7
|
+
import { Capabilities, Capability } from "@dxos/app-framework";
|
|
8
|
+
import { invariant } from "@dxos/invariant";
|
|
9
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/types/capabilities.ts";
|
|
10
|
+
(function(DeckCapabilities2) {
|
|
11
|
+
DeckCapabilities2.Settings = Capability.make(`${meta.id}.capability.settings`);
|
|
12
|
+
DeckCapabilities2.State = Capability.make(`${meta.id}.capability.state`);
|
|
13
|
+
DeckCapabilities2.EphemeralState = Capability.make(`${meta.id}.capability.ephemeral-state`);
|
|
14
|
+
DeckCapabilities2.getDeck = () => Effect.gen(function* () {
|
|
15
|
+
const state = yield* Capabilities.getAtomValue(DeckCapabilities2.State);
|
|
16
|
+
const deck = state.decks[state.activeDeck];
|
|
17
|
+
invariant(deck, `Deck not found: ${state.activeDeck}`, {
|
|
18
|
+
F: __dxlog_file,
|
|
19
|
+
L: 30,
|
|
20
|
+
S: this,
|
|
21
|
+
A: [
|
|
22
|
+
"deck",
|
|
23
|
+
"`Deck not found: ${state.activeDeck}`"
|
|
24
|
+
]
|
|
25
|
+
});
|
|
26
|
+
return deck;
|
|
27
|
+
});
|
|
28
|
+
})(DeckCapabilities || (DeckCapabilities = {}));
|
|
29
|
+
var DeckCapabilities;
|
|
30
|
+
|
|
31
|
+
// src/types/events.ts
|
|
32
|
+
import { AppActivationEvents } from "@dxos/app-toolkit";
|
|
33
|
+
(function(DeckEvents2) {
|
|
34
|
+
DeckEvents2.StateReady = AppActivationEvents.createStateEvent(`${meta.id}.state-ready`);
|
|
35
|
+
DeckEvents2.SettingsReady = AppActivationEvents.createSettingsEvent(DeckCapabilities.Settings.identifier);
|
|
36
|
+
})(DeckEvents || (DeckEvents = {}));
|
|
37
|
+
var DeckEvents;
|
|
4
38
|
|
|
5
39
|
// src/types/schema.ts
|
|
6
40
|
import * as Schema from "effect/Schema";
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
var
|
|
10
|
-
var DECK_COMPANION_TYPE = `${meta.id}/deck-companion`;
|
|
41
|
+
import { Label, LayoutOperation } from "@dxos/app-toolkit";
|
|
42
|
+
var PLANK_COMPANION_TYPE = `${meta.id}.plank-companion`;
|
|
43
|
+
var DECK_COMPANION_TYPE = `${meta.id}.deck-companion`;
|
|
11
44
|
var NewPlankPositions = [
|
|
12
45
|
"start",
|
|
13
46
|
"end"
|
|
14
47
|
];
|
|
15
|
-
var
|
|
48
|
+
var OverScrollToProps = [
|
|
16
49
|
"none",
|
|
17
50
|
"centering"
|
|
18
51
|
];
|
|
@@ -22,7 +55,7 @@ var DeckSettingsSchema = Schema.Struct({
|
|
|
22
55
|
enableStatusbar: Schema.optional(Schema.Boolean),
|
|
23
56
|
enableNativeRedirect: Schema.optional(Schema.Boolean),
|
|
24
57
|
newPlankPositioning: Schema.optional(Schema.Literal(...NewPlankPositions)),
|
|
25
|
-
overscroll: Schema.optional(Schema.Literal(...
|
|
58
|
+
overscroll: Schema.optional(Schema.Literal(...OverScrollToProps)),
|
|
26
59
|
// TODO(burdon): Rename layoutMode? (e.g., bento | encapsulated?)
|
|
27
60
|
encapsulatedPlanks: Schema.optional(Schema.Boolean)
|
|
28
61
|
}).pipe(Schema.mutable);
|
|
@@ -34,11 +67,8 @@ var DeckState = Schema.Struct({
|
|
|
34
67
|
/** If false, the deck has not yet left solo mode and new planks should be soloed. */
|
|
35
68
|
initialized: Schema.Boolean,
|
|
36
69
|
active: Schema.mutable(Schema.Array(Schema.String)),
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
key: Schema.String,
|
|
40
|
-
value: Schema.String
|
|
41
|
-
}))),
|
|
70
|
+
companionOpen: Schema.Boolean,
|
|
71
|
+
companionVariant: Schema.optional(Schema.String),
|
|
42
72
|
inactive: Schema.mutable(Schema.Array(Schema.String)),
|
|
43
73
|
solo: Schema.optional(Schema.String),
|
|
44
74
|
fullscreen: Schema.Boolean,
|
|
@@ -48,7 +78,8 @@ var DeckState = Schema.Struct({
|
|
|
48
78
|
var defaultDeck = {
|
|
49
79
|
initialized: false,
|
|
50
80
|
active: [],
|
|
51
|
-
|
|
81
|
+
companionOpen: false,
|
|
82
|
+
companionVariant: void 0,
|
|
52
83
|
inactive: [],
|
|
53
84
|
solo: void 0,
|
|
54
85
|
fullscreen: false,
|
|
@@ -63,10 +94,22 @@ var getMode = (deck) => {
|
|
|
63
94
|
}
|
|
64
95
|
return "deck";
|
|
65
96
|
};
|
|
66
|
-
var
|
|
97
|
+
var DeckStateSchema = Schema.Struct({
|
|
67
98
|
sidebarState: Schema.Literal("closed", "collapsed", "expanded"),
|
|
68
99
|
complementarySidebarState: Schema.Literal("closed", "collapsed", "expanded"),
|
|
69
100
|
complementarySidebarPanel: Schema.optional(Schema.String),
|
|
101
|
+
activeDeck: Schema.String,
|
|
102
|
+
previousDeck: Schema.String,
|
|
103
|
+
decks: Schema.mutable(Schema.Record({
|
|
104
|
+
key: Schema.String,
|
|
105
|
+
value: Schema.mutable(DeckState)
|
|
106
|
+
})),
|
|
107
|
+
previousMode: Schema.mutable(Schema.Record({
|
|
108
|
+
key: Schema.String,
|
|
109
|
+
value: LayoutMode
|
|
110
|
+
}))
|
|
111
|
+
}).pipe(Schema.mutable);
|
|
112
|
+
var DeckEphemeralStateSchema = Schema.Struct({
|
|
70
113
|
dialogOpen: Schema.Boolean,
|
|
71
114
|
dialogType: Schema.optional(Schema.Literal("default", "alert")),
|
|
72
115
|
dialogBlockAlign: Schema.optional(Schema.Literal("start", "center", "end")),
|
|
@@ -81,21 +124,16 @@ var DeckPluginState = Schema.Struct({
|
|
|
81
124
|
popoverSide: Schema.optional(Schema.Literal("top", "right", "bottom", "left")),
|
|
82
125
|
popoverAnchor: Schema.optional(Schema.Any),
|
|
83
126
|
popoverAnchorId: Schema.optional(Schema.String),
|
|
127
|
+
popoverKind: Schema.optional(Schema.Literal("base", "card")),
|
|
128
|
+
popoverTitle: Schema.optional(Label.annotations({
|
|
129
|
+
description: "The title of the popover."
|
|
130
|
+
})),
|
|
131
|
+
/** Ref of the subject to be passed to the popover Surface. */
|
|
132
|
+
popoverContentRef: Schema.optional(Schema.String),
|
|
84
133
|
/** Data to be passed to the popover Surface. */
|
|
85
134
|
popoverContent: Schema.optional(Schema.Any),
|
|
86
|
-
toasts: Schema.mutable(Schema.Array(
|
|
135
|
+
toasts: Schema.mutable(Schema.Array(LayoutOperation.Toast)),
|
|
87
136
|
currentUndoId: Schema.optional(Schema.String),
|
|
88
|
-
activeDeck: Schema.String,
|
|
89
|
-
previousDeck: Schema.String,
|
|
90
|
-
decks: Schema.mutable(Schema.Record({
|
|
91
|
-
key: Schema.String,
|
|
92
|
-
value: Schema.mutable(DeckState)
|
|
93
|
-
})),
|
|
94
|
-
previousMode: Schema.mutable(Schema.Record({
|
|
95
|
-
key: Schema.String,
|
|
96
|
-
value: LayoutMode
|
|
97
|
-
})),
|
|
98
|
-
deck: Schema.mutable(DeckState),
|
|
99
137
|
/** The identifier of a component to scroll into view when it is mounted. */
|
|
100
138
|
scrollIntoView: Schema.optional(Schema.String)
|
|
101
139
|
}).pipe(Schema.mutable);
|
|
@@ -117,13 +155,13 @@ var DeckPluginState = Schema.Struct({
|
|
|
117
155
|
id: Schema.String,
|
|
118
156
|
type: PartAdjustmentSchema
|
|
119
157
|
}));
|
|
120
|
-
class Adjust extends Schema.TaggedClass()(`${meta.id}
|
|
158
|
+
class Adjust extends Schema.TaggedClass()(`${meta.id}.action.adjust`, {
|
|
121
159
|
input: DeckAction2.Adjustment,
|
|
122
160
|
output: Schema.Void
|
|
123
161
|
}) {
|
|
124
162
|
}
|
|
125
163
|
DeckAction2.Adjust = Adjust;
|
|
126
|
-
class UpdatePlankSize extends Schema.TaggedClass()(`${meta.id}
|
|
164
|
+
class UpdatePlankSize extends Schema.TaggedClass()(`${meta.id}.action.update-plank-size`, {
|
|
127
165
|
input: Schema.Struct({
|
|
128
166
|
id: Schema.String,
|
|
129
167
|
size: Schema.Number
|
|
@@ -132,9 +170,8 @@ var DeckPluginState = Schema.Struct({
|
|
|
132
170
|
}) {
|
|
133
171
|
}
|
|
134
172
|
DeckAction2.UpdatePlankSize = UpdatePlankSize;
|
|
135
|
-
class ChangeCompanion extends Schema.TaggedClass()(`${meta.id}
|
|
173
|
+
class ChangeCompanion extends Schema.TaggedClass()(`${meta.id}.action.change-companion`, {
|
|
136
174
|
input: Schema.Struct({
|
|
137
|
-
primary: Schema.String,
|
|
138
175
|
companion: Schema.Union(Schema.String, Schema.Null)
|
|
139
176
|
}),
|
|
140
177
|
output: Schema.Void
|
|
@@ -145,18 +182,20 @@ var DeckPluginState = Schema.Struct({
|
|
|
145
182
|
var DeckAction;
|
|
146
183
|
|
|
147
184
|
export {
|
|
185
|
+
DeckCapabilities,
|
|
186
|
+
DeckEvents,
|
|
148
187
|
PLANK_COMPANION_TYPE,
|
|
149
188
|
DECK_COMPANION_TYPE,
|
|
150
189
|
NewPlankPositions,
|
|
151
|
-
|
|
190
|
+
OverScrollToProps,
|
|
152
191
|
DeckSettingsSchema,
|
|
153
192
|
PlankSizing,
|
|
154
193
|
DeckState,
|
|
155
194
|
defaultDeck,
|
|
156
195
|
isLayoutMode,
|
|
157
196
|
getMode,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
197
|
+
DeckStateSchema,
|
|
198
|
+
DeckEphemeralStateSchema,
|
|
199
|
+
DeckAction
|
|
161
200
|
};
|
|
162
|
-
//# sourceMappingURL=chunk-
|
|
201
|
+
//# sourceMappingURL=chunk-WZXKWTDN.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/capabilities.ts", "../../../src/types/events.ts", "../../../src/types/schema.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\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';\nimport { type DeckEphemeralStateProps, type DeckSettingsProps, type DeckState, type DeckStateProps } from '../types';\n\nexport namespace DeckCapabilities {\n export const Settings = Capability.make<Atom.Writable<DeckSettingsProps>>(`${meta.id}.capability.settings`);\n\n /** Persisted state (stored in KVS/localStorage). */\n export const State = Capability.make<Atom.Writable<DeckStateProps>>(`${meta.id}.capability.state`);\n\n /** Transient/ephemeral state (not persisted). */\n export const EphemeralState = Capability.make<Atom.Writable<DeckEphemeralStateProps>>(\n `${meta.id}.capability.ephemeral-state`,\n );\n\n /** Get the current active deck from state. */\n export 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", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { meta } from '../meta';\n\nimport { DeckCapabilities } from './capabilities';\n\nexport namespace DeckEvents {\n export const StateReady: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(\n `${meta.id}.state-ready`,\n );\n\n /** Fired when DeckSettings capability is ready. */\n export const SettingsReady: ActivationEvent.ActivationEvent = AppActivationEvents.createSettingsEvent(\n DeckCapabilities.Settings.identifier,\n );\n}\n", "//\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 const PLANK_COMPANION_TYPE = `${meta.id}.plank-companion`;\nexport const DECK_COMPANION_TYPE = `${meta.id}.deck-companion`;\n\n// TODO(Zan): In the future we should consider adding new planks adjacent to the attended plank.\nexport const NewPlankPositions = ['start', 'end'] as const;\nexport type NewPlankPositioning = (typeof NewPlankPositions)[number];\n\nexport const OverScrollToProps = ['none', 'centering'] as const;\nexport type Overscroll = (typeof OverScrollToProps)[number];\n\nexport type Part = 'solo' | 'deck' | 'complementary';\nexport type ResolvedPart = Part | 'solo-primary' | 'solo-companion';\n\nexport const DeckSettingsSchema = Schema.Struct({\n showHints: Schema.optional(Schema.Boolean),\n enableDeck: Schema.optional(Schema.Boolean),\n enableStatusbar: Schema.optional(Schema.Boolean),\n enableNativeRedirect: Schema.optional(Schema.Boolean),\n newPlankPositioning: Schema.optional(Schema.Literal(...NewPlankPositions)),\n overscroll: Schema.optional(Schema.Literal(...OverScrollToProps)),\n // TODO(burdon): Rename layoutMode? (e.g., bento | encapsulated?)\n encapsulatedPlanks: Schema.optional(Schema.Boolean),\n}).pipe(Schema.mutable);\nexport type DeckSettingsProps = Schema.Schema.Type<typeof DeckSettingsSchema>;\n\nexport const PlankSizing = Schema.Record({ key: Schema.String, value: Schema.Number });\nexport type PlankSizing = Schema.Schema.Type<typeof PlankSizing>;\n\n// State of an individual deck.\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 active: Schema.mutable(Schema.Array(Schema.String)),\n companionOpen: Schema.Boolean,\n companionVariant: Schema.optional(Schema.String),\n inactive: Schema.mutable(Schema.Array(Schema.String)),\n solo: Schema.optional(Schema.String),\n fullscreen: Schema.Boolean,\n plankSizing: Schema.mutable(PlankSizing),\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 companionOpen: false,\n companionVariant: undefined,\n inactive: [],\n solo: undefined,\n fullscreen: false,\n plankSizing: {},\n companionFrameSizing: {},\n};\n\nconst LayoutMode = Schema.Literal('deck', 'solo', 'solo--fullscreen');\nexport type LayoutMode = Schema.Schema.Type<typeof LayoutMode>;\nexport const isLayoutMode = (value: any): value is LayoutMode => Schema.is(LayoutMode)(value);\n\nexport const getMode = (deck: DeckState | DeepReadonly<DeckState>): LayoutMode => {\n if (deck.solo) {\n return deck.fullscreen ? 'solo--fullscreen' : 'solo';\n }\n\n return 'deck';\n};\n\n// Persisted plugin state (stored in KVS/localStorage).\nexport const DeckStateSchema = 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 DeckStateProps = Schema.Schema.Type<typeof DeckStateSchema>;\n\n// TODO(burdon): Factor out state (in common with other layouts?)\n// Transient/ephemeral plugin state (not persisted).\nexport const DeckEphemeralStateSchema = 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.optional(Schema.Any),\n\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.optional(Schema.Any),\n\n toasts: Schema.mutable(Schema.Array(LayoutOperation.Toast)),\n currentUndoId: Schema.optional(Schema.String),\n\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 DeckEphemeralStateProps = Schema.Schema.Type<typeof DeckEphemeralStateSchema>;\n\n// Combined state type (for convenience in components that need both).\nexport type DeckPluginState = DeckStateProps & DeckEphemeralStateProps;\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 export class ChangeCompanion extends Schema.TaggedClass<ChangeCompanion>()(`${meta.id}.action.change-companion`, {\n input: Schema.Struct({\n companion: Schema.Union(Schema.String, Schema.Null),\n }),\n output: Schema.Void,\n }) {}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["Effect", "Capabilities", "Capability", "invariant", "DeckCapabilities", "Settings", "Capability", "make", "meta", "id", "State", "EphemeralState", "getDeck", "gen", "state", "Capabilities", "getAtomValue", "deck", "decks", "activeDeck", "invariant", "AppActivationEvents", "DeckEvents", "StateReady", "AppActivationEvents", "createStateEvent", "meta", "id", "SettingsReady", "createSettingsEvent", "DeckCapabilities", "Settings", "identifier", "Schema", "Label", "LayoutOperation", "PLANK_COMPANION_TYPE", "meta", "id", "DECK_COMPANION_TYPE", "NewPlankPositions", "OverScrollToProps", "DeckSettingsSchema", "Struct", "showHints", "optional", "Boolean", "enableDeck", "enableStatusbar", "enableNativeRedirect", "newPlankPositioning", "Literal", "overscroll", "encapsulatedPlanks", "pipe", "mutable", "PlankSizing", "Record", "key", "String", "value", "Number", "DeckState", "initialized", "active", "Array", "companionOpen", "companionVariant", "inactive", "solo", "fullscreen", "plankSizing", "companionFrameSizing", "defaultDeck", "undefined", "LayoutMode", "isLayoutMode", "is", "getMode", "deck", "DeckStateSchema", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "activeDeck", "previousDeck", "decks", "previousMode", "DeckEphemeralStateSchema", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "Any", "dialogContent", "popoverOpen", "popoverSide", "popoverAnchor", "popoverAnchorId", "popoverKind", "popoverTitle", "Label", "annotations", "description", "popoverContentRef", "popoverContent", "toasts", "LayoutOperation", "Toast", "currentUndoId", "scrollIntoView", "DeckAction", "PartAdjustmentSchema", "Union", "Adjustment", "type", "Adjust", "TaggedClass", "input", "output", "Void", "UpdatePlankSize", "size", "ChangeCompanion", "companion", "Null"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// src/operations/helpers.ts
|
|
2
|
+
import { invariant } from "@dxos/invariant";
|
|
3
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-deck/src/operations/helpers.ts";
|
|
4
|
+
var updateActiveDeck = (current, deckUpdates) => {
|
|
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
|
+
});
|
|
15
|
+
return {
|
|
16
|
+
...current,
|
|
17
|
+
decks: {
|
|
18
|
+
...current.decks,
|
|
19
|
+
[current.activeDeck]: {
|
|
20
|
+
...currentDeck,
|
|
21
|
+
...deckUpdates
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export {
|
|
28
|
+
updateActiveDeck
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=chunk-YAAXLCVX.mjs.map
|