@dxos/plugin-deck 0.9.1-main.c7dcc2e112 → 0.10.0
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/PLUGIN.mdl +3 -1
- package/dist/lib/neutral/{DeckLayout-VX2BP4Q2.mjs → DeckLayout-B3RUUV5P.mjs} +4 -3
- package/dist/lib/neutral/DeckLayout-B3RUUV5P.mjs.map +7 -0
- package/dist/lib/neutral/DeckPlugin.mjs +2 -6
- package/dist/lib/neutral/DeckPlugin.mjs.map +3 -3
- package/dist/lib/neutral/DeckSettings-Z7GMB7XJ.mjs +32 -0
- package/dist/lib/neutral/DeckSettings-Z7GMB7XJ.mjs.map +7 -0
- package/dist/lib/neutral/{add-toast-APKTCLIA.mjs → add-toast-BHNEH5UY.mjs} +2 -2
- package/dist/lib/neutral/{adjust-7CZI4GK3.mjs → adjust-MJB6UMRQ.mjs} +16 -10
- package/dist/lib/neutral/adjust-MJB6UMRQ.mjs.map +7 -0
- package/dist/lib/neutral/{app-graph-builder-6HTXRTU2.mjs → app-graph-builder-2F7P4IFQ.mjs} +4 -3
- package/dist/lib/neutral/app-graph-builder-2F7P4IFQ.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +5 -5
- package/dist/lib/neutral/chunk-FKGYHBUB.mjs +8 -0
- package/dist/lib/neutral/{chunk-CL7JIOI5.mjs → chunk-ICOJ4GMB.mjs} +10 -6
- package/dist/lib/neutral/chunk-ICOJ4GMB.mjs.map +7 -0
- package/dist/lib/neutral/{chunk-NGX6RXNV.mjs → chunk-PP32NEVY.mjs} +2 -2
- package/dist/lib/neutral/chunk-PP32NEVY.mjs.map +7 -0
- package/dist/lib/neutral/chunk-SONATB35.mjs +20 -0
- package/dist/lib/neutral/chunk-SONATB35.mjs.map +7 -0
- package/dist/lib/neutral/chunk-Z2B5RSVI.mjs +1096 -0
- package/dist/lib/neutral/chunk-Z2B5RSVI.mjs.map +7 -0
- package/dist/lib/neutral/{close-KJUCFIJ5.mjs → close-2YGB5IIP.mjs} +4 -3
- package/dist/lib/neutral/{close-KJUCFIJ5.mjs.map → close-2YGB5IIP.mjs.map} +1 -1
- package/dist/lib/neutral/components/index.mjs +201 -16
- package/dist/lib/neutral/components/index.mjs.map +4 -4
- package/dist/lib/neutral/containers/index.mjs +6 -11
- package/dist/lib/neutral/containers/index.mjs.map +3 -3
- package/dist/lib/neutral/hooks/index.mjs +101 -17
- package/dist/lib/neutral/hooks/index.mjs.map +4 -4
- package/dist/lib/neutral/index.mjs +7 -1
- package/dist/lib/neutral/meta.json +1 -1
- package/dist/lib/neutral/{notification-tracker-CUDFRDCF.mjs → notification-tracker-Y5CRTWJM.mjs} +4 -2
- package/dist/lib/neutral/notification-tracker-Y5CRTWJM.mjs.map +7 -0
- package/dist/lib/neutral/{open-VU7YS3HB.mjs → open-P6XQ56M7.mjs} +4 -3
- package/dist/lib/neutral/{open-VU7YS3HB.mjs.map → open-P6XQ56M7.mjs.map} +1 -1
- package/dist/lib/neutral/operations/index.mjs +1 -1
- package/dist/lib/neutral/plugin.mjs +1 -1
- package/dist/lib/neutral/{react-surface-O4POQWYL.mjs → react-surface-H63FXUK3.mjs} +2 -2
- package/dist/lib/neutral/{react-surface-O4POQWYL.mjs.map → react-surface-H63FXUK3.mjs.map} +1 -1
- package/dist/lib/neutral/{revert-workspace-24TKG3I7.mjs → revert-workspace-RXWP2TEE.mjs} +2 -2
- package/dist/lib/neutral/{scroll-into-view-3VXT6TWC.mjs → scroll-into-view-HFV5EGYZ.mjs} +2 -2
- package/dist/lib/neutral/{set-RFOLTI57.mjs → set-HOOVB7E4.mjs} +4 -3
- package/dist/lib/neutral/{set-RFOLTI57.mjs.map → set-HOOVB7E4.mjs.map} +1 -1
- package/dist/lib/neutral/{set-layout-mode-AZ73W52Z.mjs → set-layout-mode-XAGSZZGB.mjs} +2 -2
- package/dist/lib/neutral/{state-D3YXB5NP.mjs → state-F4X5GPGZ.mjs} +3 -2
- package/dist/lib/neutral/{state-D3YXB5NP.mjs.map → state-F4X5GPGZ.mjs.map} +1 -1
- package/dist/lib/neutral/{switch-workspace-TBPT23CZ.mjs → switch-workspace-PA7N6EUX.mjs} +2 -2
- package/dist/lib/neutral/translations.mjs +2 -2
- package/dist/lib/neutral/translations.mjs.map +2 -2
- package/dist/lib/neutral/types/index.mjs +1 -1
- package/dist/lib/neutral/{update-companion-5LCY6QME.mjs → update-companion-6A2SKQAI.mjs} +14 -6
- package/dist/lib/neutral/update-companion-6A2SKQAI.mjs.map +7 -0
- package/dist/lib/neutral/{update-complementary-HZ7QXZYE.mjs → update-complementary-K55I5EV5.mjs} +2 -2
- package/dist/lib/neutral/{update-dialog-A7W3R5EI.mjs → update-dialog-Z3GEXMVV.mjs} +2 -2
- package/dist/lib/neutral/{update-plank-size-XHTYBLSD.mjs → update-plank-size-BTESVV7N.mjs} +2 -2
- package/dist/lib/neutral/{update-popover-RDIHG73B.mjs → update-popover-QEVDSZSH.mjs} +2 -2
- package/dist/lib/neutral/{update-sidebar-GEI7USA5.mjs → update-sidebar-VSRCN47U.mjs} +2 -2
- package/dist/lib/neutral/{url-handler-PUS4X33T.mjs → url-handler-ERZXXEYR.mjs} +3 -2
- package/dist/lib/neutral/{url-handler-PUS4X33T.mjs.map → url-handler-ERZXXEYR.mjs.map} +1 -1
- package/dist/types/src/DeckPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/notification-tracker.d.ts +1 -1
- package/dist/types/src/capabilities/notification-tracker.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root.d.ts +1 -5
- package/dist/types/src/capabilities/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts +1 -1
- package/dist/types/src/capabilities/settings.d.ts +1 -3
- package/dist/types/src/capabilities/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state.d.ts +1 -187
- package/dist/types/src/capabilities/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/tools.d.ts +1 -1
- package/dist/types/src/capabilities/url-handler.d.ts +1 -1
- package/dist/types/src/components/Companion/Companion.d.ts +17 -0
- package/dist/types/src/components/Companion/Companion.d.ts.map +1 -0
- package/dist/types/src/components/Companion/index.d.ts +2 -0
- package/dist/types/src/components/Companion/index.d.ts.map +1 -0
- package/dist/types/src/components/Matrix/Matrix.d.ts +1 -1
- package/dist/types/src/components/Matrix/Matrix.d.ts.map +1 -1
- package/dist/types/src/components/Matrix/Matrix.stories.d.ts +2 -2
- package/dist/types/src/components/Matrix/Matrix.stories.d.ts.map +1 -1
- package/dist/types/src/components/Matrix/index.d.ts +1 -1
- package/dist/types/src/components/Matrix/index.d.ts.map +1 -1
- package/dist/types/src/components/Pane/Pane.d.ts +45 -0
- package/dist/types/src/components/Pane/Pane.d.ts.map +1 -0
- package/dist/types/src/components/Pane/Pane.stories.d.ts +7 -0
- package/dist/types/src/components/Pane/Pane.stories.d.ts.map +1 -0
- package/dist/types/src/components/Pane/index.d.ts +2 -0
- package/dist/types/src/components/Pane/index.d.ts.map +1 -0
- package/dist/types/src/components/Plank/Plank.d.ts +74 -0
- package/dist/types/src/components/Plank/Plank.d.ts.map +1 -0
- package/dist/types/src/components/Plank/Plank.stories.d.ts +6 -0
- package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -0
- package/dist/types/src/components/Plank/index.d.ts +2 -0
- package/dist/types/src/components/Plank/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +3 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/Deck.d.ts +1 -1
- package/dist/types/src/containers/Deck/Deck.d.ts.map +1 -1
- package/dist/types/src/containers/Deck/Deck.stories.d.ts +2 -2
- package/dist/types/src/containers/Deck/DeckPlank.d.ts +21 -0
- package/dist/types/src/containers/Deck/DeckPlank.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/DeckViewport.d.ts +3 -1
- package/dist/types/src/containers/Deck/DeckViewport.d.ts.map +1 -1
- package/dist/types/src/containers/{Plank → Deck}/PlankControls.d.ts +3 -10
- package/dist/types/src/containers/Deck/PlankControls.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/PlankFallback.d.ts +6 -0
- package/dist/types/src/containers/Deck/PlankFallback.d.ts.map +1 -0
- package/dist/types/src/containers/Deck/useDeckPlank.d.ts +49 -0
- package/dist/types/src/containers/Deck/useDeckPlank.d.ts.map +1 -0
- package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts +2 -2
- package/dist/types/src/containers/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
- package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.d.ts +1 -1
- package/dist/types/src/containers/DeckSettings/DeckSettings.d.ts.map +1 -0
- package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.stories.d.ts +2 -2
- package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.stories.d.ts.map +1 -1
- package/dist/types/src/containers/DeckSettings/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +1 -1
- package/dist/types/src/containers/index.d.ts.map +1 -1
- 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/useCompanionSplit.d.ts +28 -0
- package/dist/types/src/hooks/useCompanionSplit.d.ts.map +1 -0
- package/dist/types/src/hooks/useCompanions.d.ts +11 -7
- package/dist/types/src/hooks/useCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckCompanions.d.ts +2 -2
- package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckState.d.ts +1 -1
- package/dist/types/src/hooks/useDeckState.d.ts.map +1 -1
- package/dist/types/src/hooks/useSelectedCompanionVariant.d.ts +6 -0
- package/dist/types/src/hooks/useSelectedCompanionVariant.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +4 -0
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/adjust.d.ts.map +1 -1
- package/dist/types/src/operations/update-companion.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +2 -2
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/DeckCapabilities.d.ts +2 -2
- package/dist/types/src/types/DeckCapabilities.d.ts.map +1 -1
- package/dist/types/src/types/DeckOperation.d.ts +2 -2
- package/dist/types/src/types/DeckOperation.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +7 -7
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/src/util/companion-view-state.d.ts +16 -0
- package/dist/types/src/util/companion-view-state.d.ts.map +1 -0
- 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/plank-url-params.d.ts +2 -0
- package/dist/types/src/util/plank-url-params.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +49 -47
- package/src/DeckPlugin.ts +1 -2
- package/src/capabilities/app-graph-builder.ts +3 -2
- package/src/capabilities/notification-tracker.ts +3 -1
- package/src/capabilities/react-surface.tsx +1 -1
- package/src/components/Companion/Companion.tsx +91 -0
- package/src/components/Companion/index.ts +5 -0
- package/src/components/Matrix/Matrix.stories.tsx +13 -26
- package/src/components/Matrix/Matrix.tsx +3 -3
- package/src/components/Matrix/SPEC.md +1 -1
- package/src/components/Matrix/index.ts +1 -1
- package/src/components/Pane/Pane.stories.tsx +92 -0
- package/src/components/Pane/Pane.tsx +178 -0
- package/src/components/Pane/index.ts +5 -0
- package/src/components/Plank/Plank.stories.tsx +103 -0
- package/src/components/Plank/Plank.tsx +149 -0
- package/src/components/Plank/index.ts +5 -0
- package/src/components/index.ts +3 -4
- package/src/containers/Deck/Deck.tsx +3 -3
- package/src/containers/Deck/DeckPlank.tsx +187 -0
- package/src/containers/Deck/DeckViewport.tsx +116 -243
- package/src/containers/{Plank → Deck}/PlankControls.tsx +19 -17
- package/src/containers/Deck/PlankFallback.tsx +42 -0
- package/src/containers/Deck/useDeckPlank.ts +219 -0
- package/src/containers/DeckLayout/DeckLayout.stories.tsx +38 -51
- package/src/containers/DeckLayout/Dialog.tsx +1 -1
- package/src/{components → containers}/DeckSettings/DeckSettings.stories.tsx +1 -1
- package/src/containers/DeckSettings/DeckSettings.tsx +42 -0
- package/src/containers/Sidebar/ComplementarySidebar.tsx +2 -2
- package/src/containers/index.ts +1 -1
- package/src/hooks/index.ts +2 -0
- package/src/hooks/useCompanionSplit.ts +78 -0
- package/src/hooks/useCompanions.ts +39 -7
- package/src/hooks/useDeckCompanions.ts +3 -3
- package/src/hooks/useDeckState.ts +1 -1
- package/src/hooks/useSelectedCompanionVariant.ts +14 -0
- package/src/index.ts +7 -0
- package/src/operations/adjust.ts +23 -12
- package/src/operations/update-companion.ts +10 -6
- package/src/translations.ts +2 -2
- package/src/types/DeckCapabilities.ts +1 -1
- package/src/types/DeckOperation.ts +2 -1
- package/src/types/schema.ts +5 -4
- package/src/util/companion-view-state.ts +28 -0
- package/src/util/index.ts +1 -0
- package/src/util/plank-url-params.test.ts +5 -0
- package/src/util/plank-url-params.ts +3 -1
- package/src/util/sanitize-persisted-state.test.ts +1 -1
- package/src/util/set-active.test.ts +1 -1
- package/dist/lib/neutral/DeckLayout-VX2BP4Q2.mjs.map +0 -7
- package/dist/lib/neutral/DeckSettings-CQQZJ2YS.mjs +0 -27
- package/dist/lib/neutral/DeckSettings-CQQZJ2YS.mjs.map +0 -7
- package/dist/lib/neutral/adjust-7CZI4GK3.mjs.map +0 -7
- package/dist/lib/neutral/app-graph-builder-6HTXRTU2.mjs.map +0 -7
- package/dist/lib/neutral/chunk-CL7JIOI5.mjs.map +0 -7
- package/dist/lib/neutral/chunk-DNG3L5QN.mjs +0 -1304
- package/dist/lib/neutral/chunk-DNG3L5QN.mjs.map +0 -7
- package/dist/lib/neutral/chunk-NGX6RXNV.mjs.map +0 -7
- package/dist/lib/neutral/chunk-UZLAR4DR.mjs +0 -8
- package/dist/lib/neutral/notification-tracker-CUDFRDCF.mjs.map +0 -7
- package/dist/lib/neutral/update-companion-5LCY6QME.mjs.map +0 -7
- package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +0 -1
- package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/Plank.d.ts +0 -17
- package/dist/types/src/containers/Plank/Plank.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/Plank.stories.d.ts +0 -67
- package/dist/types/src/containers/Plank/Plank.stories.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/PlankComponent.d.ts +0 -17
- package/dist/types/src/containers/Plank/PlankComponent.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/PlankContent.d.ts +0 -10
- package/dist/types/src/containers/Plank/PlankContent.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/PlankControls.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/PlankError.d.ts +0 -15
- package/dist/types/src/containers/Plank/PlankError.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/PlankHeading.d.ts +0 -22
- package/dist/types/src/containers/Plank/PlankHeading.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/PlankLoading.d.ts +0 -3
- package/dist/types/src/containers/Plank/PlankLoading.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/PlankRoot.d.ts +0 -37
- package/dist/types/src/containers/Plank/PlankRoot.d.ts.map +0 -1
- package/dist/types/src/containers/Plank/index.d.ts +0 -4
- package/dist/types/src/containers/Plank/index.d.ts.map +0 -1
- package/src/components/DeckSettings/DeckSettings.tsx +0 -34
- package/src/containers/Plank/Plank.stories.tsx +0 -108
- package/src/containers/Plank/Plank.tsx +0 -22
- package/src/containers/Plank/PlankComponent.tsx +0 -223
- package/src/containers/Plank/PlankContent.tsx +0 -45
- package/src/containers/Plank/PlankError.tsx +0 -82
- package/src/containers/Plank/PlankHeading.tsx +0 -236
- package/src/containers/Plank/PlankLoading.tsx +0 -10
- package/src/containers/Plank/PlankRoot.tsx +0 -49
- package/src/containers/Plank/index.ts +0 -7
- /package/dist/lib/neutral/{add-toast-APKTCLIA.mjs.map → add-toast-BHNEH5UY.mjs.map} +0 -0
- /package/dist/lib/neutral/{chunk-UZLAR4DR.mjs.map → chunk-FKGYHBUB.mjs.map} +0 -0
- /package/dist/lib/neutral/{revert-workspace-24TKG3I7.mjs.map → revert-workspace-RXWP2TEE.mjs.map} +0 -0
- /package/dist/lib/neutral/{scroll-into-view-3VXT6TWC.mjs.map → scroll-into-view-HFV5EGYZ.mjs.map} +0 -0
- /package/dist/lib/neutral/{set-layout-mode-AZ73W52Z.mjs.map → set-layout-mode-XAGSZZGB.mjs.map} +0 -0
- /package/dist/lib/neutral/{switch-workspace-TBPT23CZ.mjs.map → switch-workspace-PA7N6EUX.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-complementary-HZ7QXZYE.mjs.map → update-complementary-K55I5EV5.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-dialog-A7W3R5EI.mjs.map → update-dialog-Z3GEXMVV.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-plank-size-XHTYBLSD.mjs.map → update-plank-size-BTESVV7N.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-popover-RDIHG73B.mjs.map → update-popover-QEVDSZSH.mjs.map} +0 -0
- /package/dist/lib/neutral/{update-sidebar-GEI7USA5.mjs.map → update-sidebar-VSRCN47U.mjs.map} +0 -0
- /package/dist/types/src/{components → containers}/DeckSettings/index.d.ts +0 -0
- /package/src/{components → containers}/DeckSettings/index.ts +0 -0
package/src/operations/adjust.ts
CHANGED
|
@@ -11,7 +11,6 @@ import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
|
|
|
11
11
|
import { Operation } from '@dxos/compute';
|
|
12
12
|
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
13
13
|
import { Graph } from '@dxos/plugin-graph';
|
|
14
|
-
import { byPosition } from '@dxos/util';
|
|
15
14
|
|
|
16
15
|
import { incrementPlank } from '../layout';
|
|
17
16
|
import { DeckCapabilities, DeckOperation, PLANK_COMPANION_TYPE } from '../types';
|
|
@@ -60,19 +59,31 @@ const handler: Operation.WithHandler<typeof DeckOperation.Adjust> = DeckOperatio
|
|
|
60
59
|
yield* Operation.invoke(LayoutOperation.Open, { subject: [soloOperation.entryId] });
|
|
61
60
|
}
|
|
62
61
|
|
|
63
|
-
if (input.type === 'companion') {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
),
|
|
71
|
-
Option.flatMap((companions) => (companions.length > 0 ? Option.some(companions[0]) : Option.none())),
|
|
62
|
+
if (input.type === 'companion' || input.type === 'companion-vertical') {
|
|
63
|
+
const orientation = input.type === 'companion-vertical' ? 'vertical' : 'horizontal';
|
|
64
|
+
|
|
65
|
+
// Set the orientation first so an already-open companion re-orients in place (the Splitter stays
|
|
66
|
+
// mounted and only its `orientation` prop changes — panels are never unmounted).
|
|
67
|
+
yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
|
|
68
|
+
updateActiveDeck(state, { companionOrientation: orientation }),
|
|
72
69
|
);
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
// Open the companion when one is available; the selected variant lives in global view state and is
|
|
72
|
+
// resolved at render time, so opening restores the last-selected tab rather than forcing the first.
|
|
73
|
+
if (!deck.companionOpen) {
|
|
74
|
+
const hasCompanion = Function.pipe(
|
|
75
|
+
Graph.getNode(graph, input.id),
|
|
76
|
+
Option.map((node) =>
|
|
77
|
+
Graph.getConnections(graph, node.id, 'child').some((n) => n.type === PLANK_COMPANION_TYPE),
|
|
78
|
+
),
|
|
79
|
+
Option.getOrElse(() => false),
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
if (hasCompanion) {
|
|
83
|
+
yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
|
|
84
|
+
updateActiveDeck(state, { companionOpen: true }),
|
|
85
|
+
);
|
|
86
|
+
}
|
|
76
87
|
}
|
|
77
88
|
}
|
|
78
89
|
}),
|
|
@@ -4,28 +4,32 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
|
-
import { Capabilities } from '@dxos/app-framework';
|
|
7
|
+
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
8
8
|
import { LayoutOperation } from '@dxos/app-toolkit';
|
|
9
9
|
import { Operation } from '@dxos/compute';
|
|
10
|
+
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
10
11
|
import { getLinkedVariant } from '@dxos/react-ui-attention';
|
|
11
12
|
|
|
12
13
|
import { DeckCapabilities } from '../types';
|
|
14
|
+
import { COMPANION_VIEW_STATE_CONTEXT, companionVariantAspect } from '../util';
|
|
13
15
|
import { updateActiveDeck } from './helpers';
|
|
14
16
|
|
|
15
17
|
const handler: Operation.WithHandler<typeof LayoutOperation.UpdateCompanion> = LayoutOperation.UpdateCompanion.pipe(
|
|
16
18
|
Operation.withHandler(
|
|
17
19
|
Effect.fnUntraced(function* (input) {
|
|
18
20
|
if (input.subject === null) {
|
|
21
|
+
// Leave the selected variant intact so reopening the companion restores the last tab.
|
|
19
22
|
yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
|
|
20
23
|
updateActiveDeck(state, { companionOpen: false }),
|
|
21
24
|
);
|
|
22
25
|
} else {
|
|
23
|
-
|
|
26
|
+
// The selected variant is global view state (shared with the split point), not deck state.
|
|
27
|
+
const viewState = yield* Capability.get(AttentionCapabilities.ViewState);
|
|
28
|
+
viewState.set(companionVariantAspect, COMPANION_VIEW_STATE_CONTEXT, {
|
|
29
|
+
variant: getLinkedVariant(input.subject),
|
|
30
|
+
});
|
|
24
31
|
yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
|
|
25
|
-
updateActiveDeck(state, {
|
|
26
|
-
companionOpen: true,
|
|
27
|
-
companionVariant: variant,
|
|
28
|
-
}),
|
|
32
|
+
updateActiveDeck(state, { companionOpen: true }),
|
|
29
33
|
);
|
|
30
34
|
}
|
|
31
35
|
}),
|
package/src/translations.ts
CHANGED
|
@@ -11,7 +11,6 @@ export const translations = [
|
|
|
11
11
|
'en-US': {
|
|
12
12
|
[meta.profile.key]: {
|
|
13
13
|
'plugin.name': 'Deck',
|
|
14
|
-
'settings.title': 'Deck settings',
|
|
15
14
|
'main-header.label': 'Main header',
|
|
16
15
|
'open-navigation-sidebar.label': 'Open sidebar',
|
|
17
16
|
'collapse-navigation-sidebar.label': 'Close sidebar',
|
|
@@ -46,7 +45,8 @@ export const translations = [
|
|
|
46
45
|
'show-fullscreen-plank.label': 'Fullscreen',
|
|
47
46
|
'close.label': 'Close',
|
|
48
47
|
'minify.label': 'Minify',
|
|
49
|
-
'open-companion.label': 'Open companion',
|
|
48
|
+
'open-companion.label': 'Open companion side-by-side',
|
|
49
|
+
'open-companion-vertical.label': 'Open companion stacked',
|
|
50
50
|
'close-companion.label': 'Close companion',
|
|
51
51
|
'close-current.label': 'Close current plank',
|
|
52
52
|
'close-others.label': 'Close other planks',
|
|
@@ -12,7 +12,7 @@ import { invariant } from '@dxos/invariant';
|
|
|
12
12
|
|
|
13
13
|
import { meta } from '#meta';
|
|
14
14
|
|
|
15
|
-
import { type
|
|
15
|
+
import { type DeckState, type EphemeralDeckState, type StoredDeckState } from './schema';
|
|
16
16
|
|
|
17
17
|
export const Settings = Capability.make<Atom.Writable<import('./Settings').Settings>>(
|
|
18
18
|
`${meta.profile.key}.capability.settings`,
|
|
@@ -16,7 +16,8 @@ const makeKey = (name: string) => DXN.make(`${meta.profile.key}.operation.${name
|
|
|
16
16
|
|
|
17
17
|
const PartAdjustmentSchema = Schema.Union(
|
|
18
18
|
Schema.Literal('close').annotations({ description: 'Close the plank.' }),
|
|
19
|
-
Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),
|
|
19
|
+
Schema.Literal('companion').annotations({ description: 'Open the companion plank side-by-side.' }),
|
|
20
|
+
Schema.Literal('companion-vertical').annotations({ description: 'Open the companion plank stacked vertically.' }),
|
|
20
21
|
Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),
|
|
21
22
|
Schema.Literal('solo--fullscreen').annotations({ description: 'Fullscreen the plank.' }),
|
|
22
23
|
Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),
|
package/src/types/schema.ts
CHANGED
|
@@ -33,8 +33,8 @@ export const DeckState = Schema.Struct({
|
|
|
33
33
|
plankSizing: Schema.mutable(PlankSizing),
|
|
34
34
|
/** Whether the companion pane is visible alongside the active plank(s). */
|
|
35
35
|
companionOpen: Schema.Boolean,
|
|
36
|
-
/**
|
|
37
|
-
|
|
36
|
+
/** Orientation of the companion splitter: `horizontal` (side-by-side) or `vertical` (stacked). */
|
|
37
|
+
companionOrientation: Schema.optional(Schema.Literal('horizontal', 'vertical')),
|
|
38
38
|
/** Persisted companion frame widths in rem, keyed by frame ID. */
|
|
39
39
|
companionFrameSizing: Schema.mutable(PlankSizing),
|
|
40
40
|
});
|
|
@@ -48,7 +48,7 @@ export const defaultDeck: DeckState = {
|
|
|
48
48
|
fullscreen: false,
|
|
49
49
|
plankSizing: {},
|
|
50
50
|
companionOpen: false,
|
|
51
|
-
|
|
51
|
+
companionOrientation: 'horizontal',
|
|
52
52
|
companionFrameSizing: {},
|
|
53
53
|
};
|
|
54
54
|
|
|
@@ -116,7 +116,8 @@ export type DeckPluginState = StoredDeckState & EphemeralDeckState;
|
|
|
116
116
|
export namespace DeckAction {
|
|
117
117
|
const PartAdjustmentSchema = Schema.Union(
|
|
118
118
|
Schema.Literal('close').annotations({ description: 'Close the plank.' }),
|
|
119
|
-
Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),
|
|
119
|
+
Schema.Literal('companion').annotations({ description: 'Open the companion plank side-by-side.' }),
|
|
120
|
+
Schema.Literal('companion-vertical').annotations({ description: 'Open the companion plank stacked vertically.' }),
|
|
120
121
|
Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),
|
|
121
122
|
Schema.Literal('solo--fullscreen').annotations({ description: 'Fullscreen the plank.' }),
|
|
122
123
|
Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import * as Schema from 'effect/Schema';
|
|
6
|
+
|
|
7
|
+
import { type AspectDef, defineViewState } from '@dxos/react-ui-attention';
|
|
8
|
+
|
|
9
|
+
/** Global context shared by the deck-companion view-state aspects (split point + selected variant). */
|
|
10
|
+
export const COMPANION_VIEW_STATE_CONTEXT = 'deck-companion';
|
|
11
|
+
|
|
12
|
+
const CompanionSelectionSchema = Schema.Struct({
|
|
13
|
+
/** Linked variant of the currently selected companion tab. */
|
|
14
|
+
variant: Schema.optional(Schema.String),
|
|
15
|
+
}).pipe(Schema.mutable);
|
|
16
|
+
|
|
17
|
+
export type CompanionSelection = Schema.Schema.Type<typeof CompanionSelectionSchema>;
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The globally-selected companion variant, persisted (localStorage) so reopening the companion restores
|
|
21
|
+
* the last-selected tab. Stored via react-ui-attention view state for consistency with the split point.
|
|
22
|
+
*/
|
|
23
|
+
export const companionVariantAspect: AspectDef<CompanionSelection> = defineViewState<CompanionSelection>({
|
|
24
|
+
key: 'deck-companion-variant',
|
|
25
|
+
backend: 'local',
|
|
26
|
+
schema: CompanionSelectionSchema,
|
|
27
|
+
defaultValue: () => ({}),
|
|
28
|
+
});
|
package/src/util/index.ts
CHANGED
|
@@ -52,6 +52,11 @@ describe('deserializePlanks', () => {
|
|
|
52
52
|
const url = new URL('http://localhost/?plank=%2Fa&plank=%2Fb&plank=%2Fc');
|
|
53
53
|
expect(deserializePlanks(url)).toEqual(['root/a', 'root/b', 'root/c']);
|
|
54
54
|
});
|
|
55
|
+
|
|
56
|
+
test('drops duplicate planks, preserving first occurrence', ({ expect }) => {
|
|
57
|
+
const url = new URL('http://localhost/?plank=%2Fa&plank=%2Fb&plank=%2Fa');
|
|
58
|
+
expect(deserializePlanks(url)).toEqual(['root/a', 'root/b']);
|
|
59
|
+
});
|
|
55
60
|
});
|
|
56
61
|
|
|
57
62
|
describe('stripPlanks', () => {
|
|
@@ -21,9 +21,11 @@ export const serializePlanks = (active: readonly string[], existingSearch: strin
|
|
|
21
21
|
|
|
22
22
|
/**
|
|
23
23
|
* Deserialize plank query params from a URL back to qualified graph IDs.
|
|
24
|
+
* Duplicates are dropped (preserving first occurrence): a shared or hand-edited URL may repeat a
|
|
25
|
+
* `plank` param, and the deck's `active` list must stay unique so each plank renders under a distinct key.
|
|
24
26
|
*/
|
|
25
27
|
export const deserializePlanks = (url: URL): string[] => {
|
|
26
|
-
return url.searchParams.getAll(PLANK_PARAM).map(Paths.fromUrlPath);
|
|
28
|
+
return Array.from(new Set(url.searchParams.getAll(PLANK_PARAM).map(Paths.fromUrlPath)));
|
|
27
29
|
};
|
|
28
30
|
|
|
29
31
|
/**
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { describe, test } from 'vitest';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { type DeckState, type StoredDeckState, defaultDeck } from '#types';
|
|
8
8
|
|
|
9
9
|
import { sanitizePersistedState } from './sanitize-persisted-state';
|
|
10
10
|
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/containers/DeckLayout/DeckLayout.tsx", "../../../src/containers/DeckLayout/ActiveNode.tsx", "../../../src/containers/DeckLayout/Dialog.tsx", "../../../src/containers/DeckLayout/Popover.tsx", "../../../src/containers/DeckLayout/Toast.tsx", "../../../src/containers/DeckLayout/constants.ts", "../../../src/containers/DeckLayout/index.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { useAtomCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';\nimport { LayoutOperation } from '@dxos/app-toolkit';\nimport { Mosaic } from '@dxos/react-ui-mosaic';\n\nimport { useDeckState } from '#hooks';\nimport { DeckCapabilities, getMode } from '#types';\n\nimport { Deck, type DeckLayoutChangeRequest } from '../Deck';\nimport { ActiveNode } from './ActiveNode';\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 settings = useAtomCapability(DeckCapabilities.Settings);\n const pluginManager = usePluginManager();\n const { invokePromise } = useOperationInvoker();\n const { deck, state, updateState } = useDeckState();\n const layoutMode = getMode(deck);\n const { toasts } = state;\n\n const handleLayoutChange = useCallback(\n (request: DeckLayoutChangeRequest) => {\n void invokePromise(LayoutOperation.SetLayoutMode, request);\n },\n [invokePromise],\n );\n\n return (\n <Mosaic.Root>\n <PopoverRoot>\n <ActiveNode />\n <Deck.Root\n settings={settings}\n pluginManager={pluginManager}\n layoutMode={layoutMode}\n deck={deck}\n state={state}\n updateState={updateState}\n onLayoutChange={handleLayoutChange}\n >\n <Deck.Content>\n <Deck.Viewport>\n {deck.solo ? <Deck.SoloMode /> : deck.active.length === 0 ? <Deck.ContentEmpty /> : <Deck.MultiMode />}\n </Deck.Viewport>\n </Deck.Content>\n </Deck.Root>\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 { AppSurface, 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 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\n type={AppSurface.DocumentTitle}\n data={{ subject: activeNode } satisfies AppSurface.DocumentTitleData}\n limit={1}\n />\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';\n\nimport { useDeckState } from '#hooks';\n\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 type={AppSurface.Dialog}\n data={dialogContent ?? undefined}\n limit={1}\n fallback={PlankErrorFallback}\n placeholder={<div />}\n />\n ) : (\n <Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>\n <Surface.Surface\n type={AppSurface.Dialog}\n data={dialogContent ?? undefined}\n limit={1}\n fallback={PlankErrorFallback}\n />\n </Overlay>\n )}\n </Root>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';\n\nimport { Surface } from '@dxos/app-framework/ui';\nimport { AppSurface, useObjectMenuItems } from '@dxos/app-toolkit/ui';\nimport { Obj } from '@dxos/echo';\nimport {\n Card,\n Icon,\n IconButton,\n Popover,\n type PopoverContentInteractOutsideEvent,\n toLocalizedString,\n useMediaQuery,\n useTranslation,\n} from '@dxos/react-ui';\nimport { Menu } from '@dxos/react-ui-menu';\n\nimport { useDeckState } from '#hooks';\nimport { meta } from '#meta';\n\nconst DEBOUNCE_DELAY = 40;\n\ntype DeckPopoverContextValue = {\n setOpen: (open: boolean) => void;\n};\n\nconst [DeckPopoverProvider, useDeckPopoverContext] = createContext<DeckPopoverContextValue>('DeckPopover');\n\nexport type PopoverRootProps = PropsWithChildren;\n\nexport const PopoverRoot = ({ children }: PopoverRootProps) => {\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 // The rename popover is modal so other navtree item menus are inert while it is open.\n const modal = state.popoverKind === 'rename';\n\n return (\n <DeckPopoverProvider setOpen={setOpen}>\n <Popover.Root modal={modal} 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.profile.key);\n const { state, updateEphemeral } = useDeckState();\n const { setOpen } = useDeckPopoverContext('PopoverContent');\n const popoverSubject =\n state.popoverContent && 'subject' in state.popoverContent ? state.popoverContent.subject : undefined;\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 ? (Obj.getIcon(popoverSubject)?.icon ?? 'ph--circle-dashed--regular') : undefined;\n const content = state.popoverContent;\n // Base and rename popovers render a plugin-provided component; everything else falls through to the card.\n const isComponentPopover =\n (state.popoverKind === 'base' || state.popoverKind === 'rename') && !!content && 'component' in content;\n const isRename = state.popoverKind === 'rename';\n\n // Anchor to the right of the row on wide displays; drop centered below on narrow ones.\n const [isLg] = useMediaQuery('lg', { fallback: [true] });\n const side = isRename ? (isLg ? 'right' : 'bottom') : state.popoverSide;\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 // Focus leaving the popover (clicking into the card surfaces a portaled menu, or CodeMirror\n // re-focusing itself) must not dismiss it — only a pointer-down genuinely outside the card, or\n // Escape, closes. (Clicks inside the card never reach here; Radix scopes them to the content.)\n if (event.type === 'dismissableLayer.focusOutside') {\n event.preventDefault();\n return;\n }\n handleClose();\n },\n [handleClose],\n );\n\n return (\n <Popover.Portal>\n <Popover.Content\n side={side}\n sticky='always'\n hideWhenDetached\n // Rename focuses its input; other popovers keep focus where it was.\n onOpenAutoFocus={isRename ? undefined : (event) => event.preventDefault()}\n onInteractOutside={handleInteractOutside}\n onEscapeKeyDown={handleInteractOutside}\n // Reuse the dialog's enter/exit motion so the rename popover does not flicker on open.\n classNames={\n isRename\n ? ['data-[state=open]:animate-slide-up-and-fade', 'data-[state=closed]:animate-slide-down-and-fade']\n : undefined\n }\n >\n <Popover.Viewport>\n {isComponentPopover && content && 'component' in content ? (\n /* Base popover: a plugin-provided component (e.g. editor link preview). */\n <Surface.Surface type={AppSurface.Popover} data={content} limit={1} />\n ) : (\n /*\n * Card popover (default). Rendered for any open popover that isn't an explicit\n * base-component popover so the popover can never collapse to a bare 1px frame: the\n * header (icon + title + menu) always renders, and the body falls back to a fixed-\n * height \"no preview\" row when no subject resolves a card Surface (e.g. system-type\n * objects like a raw Feed that have no registered card and no renderable fields).\n */\n <Menu.Root>\n <Card.Root border={false} classNames='dx-card-popover'>\n <Card.Header>\n <Card.Block>{icon && <Icon icon={icon} />}</Card.Block>\n <Card.Title>{title}</Card.Title>\n {/* TODO(wittjosiah): Reconcile with Card.Menu. */}\n <Card.Block end>\n <Menu.Trigger asChild disabled={!objectMenuItems.length}>\n <IconButton\n variant='ghost'\n density='sm'\n icon='ph--dots-three-vertical--regular'\n iconOnly\n label='Actions'\n />\n </Menu.Trigger>\n <Menu.Content items={objectMenuItems} />\n </Card.Block>\n </Card.Header>\n\n {content && 'subject' in content ? (\n <Surface.Surface type={AppSurface.CardContent} data={content} limit={1} />\n ) : (\n <Card.Body classNames='min-bs-8'>\n <Card.Row>\n <Card.Text variant='description'>{t('popover-no-preview.message')}</Card.Text>\n </Card.Row>\n </Card.Body>\n )}\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, { useState } from 'react';\n\nimport { type LayoutOperation } from '@dxos/app-toolkit';\nimport { Button, Toast as NaturalToast, type ToastRootProps, toLocalizedString, useTranslation } 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 onAction,\n onOpenChange,\n}: LayoutOperation.Toast & Pick<ToastRootProps, 'onOpenChange'>) => {\n const { t } = useTranslation(meta.profile.key);\n\n // Control the open state so closing flips Radix's `open` (playing the exit animation) rather than\n // unmounting abruptly. Both the close button and Radix's own timeout/swipe route through here.\n const [open, setOpen] = useState(true);\n const handleOpenChange = (next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n };\n\n return (\n <NaturalToast.Root data-testid={id} open={open} duration={duration} onOpenChange={handleOpenChange}>\n <NaturalToast.Title icon={icon} onClose={() => handleOpenChange(false)}>\n {title && <span>{toLocalizedString(title, t)}</span>}\n </NaturalToast.Title>\n {description && <NaturalToast.Description>{toLocalizedString(description, t)}</NaturalToast.Description>}\n {onAction && actionAlt && actionLabel && (\n <NaturalToast.Actions>\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 </NaturalToast.Actions>\n )}\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", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const NAV_ID = 'NavTree';\n\nexport const SURFACE_PREFIX = 'surface:';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { DeckLayout } from './DeckLayout';\n\nexport { NAV_ID } from './constants';\n\nexport default DeckLayout;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "useCallback", "useAtomCapability", "useOperationInvoker", "usePluginManager", "LayoutOperation", "Mosaic", "useDeckState", "DeckCapabilities", "getMode", "React", "Surface", "AppSurface", "useAppGraph", "useNode", "useAttended", "useNodeActionExpander", "ActiveNode", "id", "graph", "activeNode", "div", "className", "type", "DocumentTitle", "data", "subject", "limit", "React", "useCallback", "Surface", "AppSurface", "AlertDialog", "Dialog", "NaturalDialog", "useDeckState", "Dialog", "state", "updateEphemeral", "useDeckState", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "dialogContent", "Root", "AlertDialog", "NaturalDialog", "Overlay", "handleOpenChange", "useCallback", "nextOpen", "s", "React", "modal", "open", "onOpenChange", "Surface", "type", "AppSurface", "data", "undefined", "limit", "fallback", "PlankErrorFallback", "placeholder", "div", "blockAlign", "classNames", "style", "createContext", "React", "useCallback", "useEffect", "useRef", "useState", "Surface", "AppSurface", "useObjectMenuItems", "Obj", "Card", "Icon", "IconButton", "Popover", "toLocalizedString", "useMediaQuery", "useTranslation", "Menu", "useDeckState", "meta", "DEBOUNCE_DELAY", "DeckPopoverProvider", "useDeckPopoverContext", "PopoverRoot", "children", "state", "virtualRef", "virtualIter", "setVirtualIter", "open", "setOpen", "debounceRef", "popoverOpen", "current", "clearTimeout", "popoverAnchor", "iter", "setTimeout", "popoverAnchorId", "popoverContent", "modal", "popoverKind", "Root", "VirtualTrigger", "key", "PopoverContent", "t", "profile", "updateEphemeral", "popoverSubject", "subject", "undefined", "isObjectPopover", "isObject", "objectMenuItems", "title", "popoverTitle", "icon", "getIcon", "content", "isComponentPopover", "isRename", "isLg", "fallback", "side", "popoverSide", "handleClose", "handleInteractOutside", "event", "type", "preventDefault", "Portal", "Content", "sticky", "hideWhenDetached", "onOpenAutoFocus", "onInteractOutside", "onEscapeKeyDown", "classNames", "Viewport", "data", "limit", "border", "Header", "Block", "Title", "end", "Trigger", "asChild", "disabled", "length", "variant", "density", "iconOnly", "label", "items", "CardContent", "Body", "Row", "Text", "Arrow", "React", "useState", "Button", "Toast", "NaturalToast", "toLocalizedString", "useTranslation", "meta", "id", "title", "description", "icon", "duration", "actionLabel", "actionAlt", "onAction", "onOpenChange", "t", "profile", "key", "open", "setOpen", "handleOpenChange", "next", "Root", "data-testid", "Title", "onClose", "span", "Description", "Actions", "Action", "altText", "asChild", "variant", "onClick", "Toaster", "toasts", "onDismissToast", "map", "toast", "DeckLayout", "onDismissToast", "settings", "useAtomCapability", "DeckCapabilities", "Settings", "pluginManager", "usePluginManager", "invokePromise", "useOperationInvoker", "deck", "state", "updateState", "useDeckState", "layoutMode", "getMode", "toasts", "handleLayoutChange", "useCallback", "request", "LayoutOperation", "SetLayoutMode", "React", "Mosaic", "Root", "PopoverRoot", "ActiveNode", "Deck", "onLayoutChange", "Content", "Viewport", "solo", "SoloMode", "active", "length", "ContentEmpty", "MultiMode", "PopoverContent", "Dialog", "Toaster", "NAV_ID", "DeckLayout"]
|
|
7
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import "./chunk-J5LGTIGS.mjs";
|
|
2
|
-
|
|
3
|
-
// src/components/DeckSettings/DeckSettings.tsx
|
|
4
|
-
import React from "react";
|
|
5
|
-
import { useTranslation } from "@dxos/react-ui";
|
|
6
|
-
import { Settings as SettingsForm } from "@dxos/react-ui-form";
|
|
7
|
-
import { meta } from "#meta";
|
|
8
|
-
import { Settings } from "#types";
|
|
9
|
-
var isSocket = !!globalThis.__args;
|
|
10
|
-
var DeckSettings = ({ settings, onSettingsChange }) => {
|
|
11
|
-
const { t } = useTranslation(meta.profile.key);
|
|
12
|
-
return /* @__PURE__ */ React.createElement(SettingsForm.Viewport, null, /* @__PURE__ */ React.createElement(SettingsForm.Section, {
|
|
13
|
-
title: t("settings.title", {
|
|
14
|
-
ns: meta.profile.key
|
|
15
|
-
})
|
|
16
|
-
}, /* @__PURE__ */ React.createElement(SettingsForm.FieldSet, {
|
|
17
|
-
readonly: !onSettingsChange,
|
|
18
|
-
schema: Settings.Settings,
|
|
19
|
-
visible: (path) => path !== "enableNativeRedirect" || !isSocket,
|
|
20
|
-
values: settings,
|
|
21
|
-
onValuesChanged: (values) => onSettingsChange?.(() => values)
|
|
22
|
-
})));
|
|
23
|
-
};
|
|
24
|
-
export {
|
|
25
|
-
DeckSettings as default
|
|
26
|
-
};
|
|
27
|
-
//# sourceMappingURL=DeckSettings-CQQZJ2YS.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/DeckSettings/DeckSettings.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { useTranslation } from '@dxos/react-ui';\nimport { Settings as SettingsForm } from '@dxos/react-ui-form';\n\nimport { meta } from '#meta';\nimport { Settings } from '#types';\n\nconst isSocket = !!(globalThis as any).__args;\n\nexport type DeckSettingsProps = AppSurface.SettingsArticleProps<Settings.Settings>;\n\nexport const DeckSettings = ({ settings, onSettingsChange }: DeckSettingsProps) => {\n const { t } = useTranslation(meta.profile.key);\n\n return (\n <SettingsForm.Viewport>\n <SettingsForm.Section title={t('settings.title', { ns: meta.profile.key })}>\n <SettingsForm.FieldSet\n readonly={!onSettingsChange}\n schema={Settings.Settings}\n visible={(path) => path !== 'enableNativeRedirect' || !isSocket}\n values={settings}\n onValuesChanged={(values) => onSettingsChange?.(() => values)}\n />\n </SettingsForm.Section>\n </SettingsForm.Viewport>\n );\n};\n"],
|
|
5
|
-
"mappings": ";;;AAIA,OAAOA,WAAW;AAGlB,SAASC,sBAAsB;AAC/B,SAASC,YAAYC,oBAAoB;AAEzC,SAASC,YAAY;AACrB,SAASF,gBAAgB;AAEzB,IAAMG,WAAW,CAAC,CAAEC,WAAmBC;AAIhC,IAAMC,eAAe,CAAC,EAAEC,UAAUC,iBAAgB,MAAqB;AAC5E,QAAM,EAAEC,EAAC,IAAKV,eAAeG,KAAKQ,QAAQC,GAAG;AAE7C,SACE,sBAAA,cAACV,aAAaW,UAAQ,MACpB,sBAAA,cAACX,aAAaY,SAAO;IAACC,OAAOL,EAAE,kBAAkB;MAAEM,IAAIb,KAAKQ,QAAQC;IAAI,CAAA;KACtE,sBAAA,cAACV,aAAae,UAAQ;IACpBC,UAAU,CAACT;IACXU,QAAQlB,SAASA;IACjBmB,SAAS,CAACC,SAASA,SAAS,0BAA0B,CAACjB;IACvDkB,QAAQd;IACRe,iBAAiB,CAACD,WAAWb,mBAAmB,MAAMa,MAAAA;;AAKhE;",
|
|
6
|
-
"names": ["React", "useTranslation", "Settings", "SettingsForm", "meta", "isSocket", "globalThis", "__args", "DeckSettings", "settings", "onSettingsChange", "t", "profile", "key", "Viewport", "Section", "title", "ns", "FieldSet", "readonly", "schema", "visible", "path", "values", "onValuesChanged"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/operations/adjust.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Graph } from '@dxos/plugin-graph';\nimport { byPosition } from '@dxos/util';\n\nimport { incrementPlank } from '../layout';\nimport { DeckCapabilities, DeckOperation, PLANK_COMPANION_TYPE } from '../types';\nimport { computeActiveUpdates } from '../util';\nimport { updateActiveDeck } from './helpers';\n\nconst handler: Operation.WithHandler<typeof DeckOperation.Adjust> = DeckOperation.Adjust.pipe(\n Operation.withHandler(\n Effect.fnUntraced(function* (input) {\n const _state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n\n let soloOperation:\n | { type: 'solo'; entryId: string; mode: string }\n | { type: 'unsolo'; entryId: string }\n | undefined;\n\n if (input.type === 'increment-end' || input.type === 'increment-start') {\n const next = incrementPlank(deck.active, input);\n const { deckUpdates } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));\n }\n\n if (input.type.startsWith('solo')) {\n const entryId = input.id;\n if (!deck.solo) {\n soloOperation = { type: 'solo', entryId, mode: input.type };\n } else {\n if (input.type === 'solo--fullscreen') {\n soloOperation = { type: 'solo', entryId, mode: 'solo--fullscreen' };\n } else if (input.type === 'solo') {\n soloOperation = { type: 'unsolo', entryId };\n }\n }\n }\n\n if (soloOperation?.type === 'solo') {\n yield* Operation.invoke(LayoutOperation.SetLayoutMode, {\n subject: soloOperation.entryId,\n mode: soloOperation.mode,\n });\n } else if (soloOperation?.type === 'unsolo') {\n yield* Operation.invoke(LayoutOperation.SetLayoutMode, { mode: 'multi' });\n yield* Operation.invoke(LayoutOperation.Open, { subject: [soloOperation.entryId] });\n }\n\n if (input.type === 'companion') {\n const companion = Function.pipe(\n Graph.getNode(graph, input.id),\n Option.map((node) =>\n Graph.getConnections(graph, node.id, 'child')\n .filter((n) => n.type === PLANK_COMPANION_TYPE)\n .toSorted((a, b) => byPosition(a.properties, b.properties)),\n ),\n Option.flatMap((companions) => (companions.length > 0 ? Option.some(companions[0]) : Option.none())),\n );\n\n if (Option.isSome(companion)) {\n yield* Operation.invoke(LayoutOperation.UpdateCompanion, { subject: companion.value.id });\n }\n }\n }),\n ),\n);\n\nexport default handler;\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAIA,YAAYA,YAAY;AACxB,YAAYC,cAAc;AAC1B,YAAYC,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,iBAAiBC,uBAAuB;AACjD,SAASC,iBAAiB;AAC1B,SAASC,6BAA6B;AACtC,SAASC,aAAa;AACtB,SAASC,kBAAkB;AAO3B,IAAMC,UAA8DC,sBAAcC,OAAOC,KACvFC,UAAUC,YACDC,kBAAW,WAAWC,OAAK;AAChC,QAAMC,SAAS,OAAOC,aAAaC,aAAaC,yBAAiBC,KAAK;AACtE,QAAMC,OAAO,OAAOF,yBAAiBG,QAAO;AAC5C,QAAMC,YAAY,OAAOC,WAAWC,IAAIC,sBAAsBC,SAAS;AACvE,QAAM,EAAEC,MAAK,IAAK,OAAOJ,WAAWC,IAAII,gBAAgBC,QAAQ;AAEhE,MAAIC;AAKJ,MAAIhB,MAAMiB,SAAS,mBAAmBjB,MAAMiB,SAAS,mBAAmB;AACtE,UAAMC,OAAOC,eAAeb,KAAKc,QAAQpB,KAAAA;AACzC,UAAM,EAAEqB,YAAW,IAAKC,qBAAqB;MAAEJ;MAAMZ;MAAME;IAAU,CAAA;AACrE,WAAON,aAAaqB,gBAAgBnB,yBAAiBC,OAAO,CAACmB,UAAUC,iBAAiBD,OAAOH,WAAAA,CAAAA;EACjG;AAEA,MAAIrB,MAAMiB,KAAKS,WAAW,MAAA,GAAS;AACjC,UAAMC,UAAU3B,MAAM4B;AACtB,QAAI,CAACtB,KAAKuB,MAAM;AACdb,sBAAgB;QAAEC,MAAM;QAAQU;QAASG,MAAM9B,MAAMiB;MAAK;IAC5D,OAAO;AACL,UAAIjB,MAAMiB,SAAS,oBAAoB;AACrCD,wBAAgB;UAAEC,MAAM;UAAQU;UAASG,MAAM;QAAmB;MACpE,WAAW9B,MAAMiB,SAAS,QAAQ;AAChCD,wBAAgB;UAAEC,MAAM;UAAUU;QAAQ;MAC5C;IACF;EACF;AAEA,MAAIX,eAAeC,SAAS,QAAQ;AAClC,WAAOpB,UAAUkC,OAAOC,gBAAgBC,eAAe;MACrDC,SAASlB,cAAcW;MACvBG,MAAMd,cAAcc;IACtB,CAAA;EACF,WAAWd,eAAeC,SAAS,UAAU;AAC3C,WAAOpB,UAAUkC,OAAOC,gBAAgBC,eAAe;MAAEH,MAAM;IAAQ,CAAA;AACvE,WAAOjC,UAAUkC,OAAOC,gBAAgBG,MAAM;MAAED,SAAS;QAAClB,cAAcW;;IAAS,CAAA;EACnF;AAEA,MAAI3B,MAAMiB,SAAS,aAAa;AAC9B,UAAMmB,YAAqBxC,cACzByC,MAAMC,QAAQzB,OAAOb,MAAM4B,EAAE,GACtBW,WAAI,CAACC,SACVH,MAAMI,eAAe5B,OAAO2B,KAAKZ,IAAI,OAAA,EAClCc,OAAO,CAACC,MAAMA,EAAE1B,SAAS2B,oBAAAA,EACzBC,SAAS,CAACC,GAAGC,MAAMC,WAAWF,EAAEG,YAAYF,EAAEE,UAAU,CAAA,CAAA,GAEtDC,eAAQ,CAACC,eAAgBA,WAAWC,SAAS,IAAWC,YAAKF,WAAW,CAAA,CAAE,IAAWG,YAAI,CAAA,CAAA;AAGlG,QAAWC,cAAOnB,SAAAA,GAAY;AAC5B,aAAOvC,UAAUkC,OAAOC,gBAAgBwB,iBAAiB;QAAEtB,SAASE,UAAUqB,MAAM7B;MAAG,CAAA;IACzF;EACF;AACF,CAAA,CAAA,CAAA;AAIJ,IAAA,iBAAenC;",
|
|
6
|
-
"names": ["Effect", "Function", "Option", "Capabilities", "Capability", "AppCapabilities", "LayoutOperation", "Operation", "AttentionCapabilities", "Graph", "byPosition", "handler", "DeckOperation", "Adjust", "pipe", "Operation", "withHandler", "fnUntraced", "input", "_state", "Capabilities", "getAtomValue", "DeckCapabilities", "State", "deck", "getDeck", "attention", "Capability", "get", "AttentionCapabilities", "Attention", "graph", "AppCapabilities", "AppGraph", "soloOperation", "type", "next", "incrementPlank", "active", "deckUpdates", "computeActiveUpdates", "updateAtomValue", "state", "updateActiveDeck", "startsWith", "entryId", "id", "solo", "mode", "invoke", "LayoutOperation", "SetLayoutMode", "subject", "Open", "companion", "Graph", "getNode", "map", "node", "getConnections", "filter", "n", "PLANK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "properties", "flatMap", "companions", "length", "some", "none", "isSome", "UpdateCompanion", "value"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/app-graph-builder.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { AppCapabilities, AppNode, LayoutOperation } from '@dxos/app-toolkit';\nimport { Operation } from '@dxos/compute';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { GraphBuilder, NodeMatcher } from '@dxos/plugin-graph';\n\nimport { meta } from '#meta';\nimport { DeckCapabilities } from '#types';\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n const extensions = yield* Effect.all([\n GraphBuilder.createExtension({\n id: 'notFound',\n match: NodeMatcher.whenRoot,\n connector: () => Effect.succeed([AppNode.makeNotFound()]),\n }),\n\n GraphBuilder.createExtension({\n id: 'root',\n match: NodeMatcher.whenRoot,\n actions: (_node, get) =>\n Effect.gen(function* () {\n // NOTE(Zan): This is currently disabled.\n // TODO(Zan): Fullscreen needs to know the active node and provide that to the layout part.\n // const _fullscreen = {\n // id: `${LayoutAction.UpdateLayout._tag}/fullscreen`,\n // data: async () => {\n // const { dispatchPromise: dispatch } = context.get(Capabilities.IntentDispatcher);\n // await dispatch(\n // createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'fullscreen' } }),\n // );\n // },\n // properties: {\n // label: ['toggle-fullscreen.label', { ns: meta.id }],\n // icon: 'ph--arrows-out--regular',\n // keyBinding: {\n // macos: 'ctrl+meta+f',\n // windows: 'shift+ctrl+f',\n // },\n // },\n // };\n\n const closeCurrent = {\n id: `${LayoutOperation.Close.meta.key}.current`,\n data: Effect.fnUntraced(function* () {\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const attended = attention.getCurrent().at(-1);\n if (attended) {\n yield* Operation.invoke(LayoutOperation.Close, { subject: [attended] });\n }\n }),\n properties: {\n label: ['close-current.label', { ns: meta.profile.key }],\n icon: 'ph--x--regular',\n },\n };\n\n const closeOthers = {\n id: `${LayoutOperation.Close.meta.key}.others`,\n data: Effect.fnUntraced(function* () {\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const deck = yield* DeckCapabilities.getDeck();\n const attended = attention.getCurrent().at(-1);\n const ids = deck.active.filter((id: string) => id !== attended) ?? [];\n yield* Operation.invoke(LayoutOperation.Close, { subject: ids });\n }),\n properties: {\n label: ['close-others.label', { ns: meta.profile.key }],\n icon: 'ph--x-square--regular',\n },\n };\n\n const closeAll = {\n id: `${LayoutOperation.Close.meta.key}.all`,\n data: Effect.fnUntraced(function* () {\n const deck = yield* DeckCapabilities.getDeck();\n yield* Operation.invoke(LayoutOperation.Close, { subject: deck.active });\n }),\n properties: {\n label: ['close-all.label', { ns: meta.profile.key }],\n icon: 'ph--x-circle--regular',\n },\n };\n\n const state = get(yield* Capability.get(DeckCapabilities.State));\n const deck = state.decks[state.activeDeck];\n\n const toggleSidebar = {\n id: `${LayoutOperation.UpdateSidebar.meta.key}.nav`,\n data: Effect.fnUntraced(function* () {\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (s) => ({\n ...s,\n sidebarState: s.sidebarState === 'expanded' ? ('collapsed' as const) : ('expanded' as const),\n }));\n }),\n properties: {\n label: [\n state.sidebarState === 'expanded'\n ? 'collapse-navigation-sidebar.label'\n : 'open-navigation-sidebar.label',\n { ns: meta.profile.key },\n ],\n icon: 'ph--sidebar--regular',\n keyBinding: {\n macos: \"meta+'\",\n },\n disposition: 'pin-end',\n position: 'last',\n l0Breakpoint: 'lg',\n },\n };\n\n return !deck?.solo ? [closeCurrent, closeOthers, closeAll, toggleSidebar] : [toggleSidebar];\n }),\n }),\n ]);\n\n return Capability.contributes(AppCapabilities.AppGraphBuilder, extensions.flat());\n }),\n);\n"],
|
|
5
|
-
"mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,cAAcC,kBAAkB;AACzC,SAASC,iBAAiBC,SAASC,uBAAuB;AAC1D,SAASC,iBAAiB;AAC1B,SAASC,6BAA6B;AACtC,SAASC,cAAcC,mBAAmB;AAE1C,SAASC,YAAY;AACrB,SAASC,wBAAwB;AAEjC,IAAA,4BAAeT,WAAWU,WACjBC,kBAAW,aAAA;AAChB,QAAMC,aAAa,OAAcC,WAAI;IACnCP,aAAaQ,gBAAgB;MAC3BC,IAAI;MACJC,OAAOT,YAAYU;MACnBC,WAAW,MAAaC,eAAQ;QAACjB,QAAQkB,aAAY;OAAG;IAC1D,CAAA;IAEAd,aAAaQ,gBAAgB;MAC3BC,IAAI;MACJC,OAAOT,YAAYU;MACnBI,SAAS,CAACC,OAAOC,QACRC,WAAI,aAAA;AAqBT,cAAMC,eAAe;UACnBV,IAAI,GAAGZ,gBAAgBuB,MAAMlB,KAAKmB,GAAG;UACrCC,MAAajB,kBAAW,aAAA;AACtB,kBAAMkB,YAAY,OAAO7B,WAAWuB,IAAIlB,sBAAsByB,SAAS;AACvE,kBAAMC,WAAWF,UAAUG,WAAU,EAAGC,GAAG,EAAC;AAC5C,gBAAIF,UAAU;AACZ,qBAAO3B,UAAU8B,OAAO/B,gBAAgBuB,OAAO;gBAAES,SAAS;kBAACJ;;cAAU,CAAA;YACvE;UACF,CAAA;UACAK,YAAY;YACVC,OAAO;cAAC;cAAuB;gBAAEC,IAAI9B,KAAK+B,QAAQZ;cAAI;;YACtDa,MAAM;UACR;QACF;AAEA,cAAMC,cAAc;UAClB1B,IAAI,GAAGZ,gBAAgBuB,MAAMlB,KAAKmB,GAAG;UACrCC,MAAajB,kBAAW,aAAA;AACtB,kBAAMkB,YAAY,OAAO7B,WAAWuB,IAAIlB,sBAAsByB,SAAS;AACvE,kBAAMY,QAAO,OAAOjC,iBAAiBkC,QAAO;AAC5C,kBAAMZ,WAAWF,UAAUG,WAAU,EAAGC,GAAG,EAAC;AAC5C,kBAAMW,MAAMF,MAAKG,OAAOC,OAAO,CAAC/B,OAAeA,OAAOgB,QAAAA,KAAa,CAAA;AACnE,mBAAO3B,UAAU8B,OAAO/B,gBAAgBuB,OAAO;cAAES,SAASS;YAAI,CAAA;UAChE,CAAA;UACAR,YAAY;YACVC,OAAO;cAAC;cAAsB;gBAAEC,IAAI9B,KAAK+B,QAAQZ;cAAI;;YACrDa,MAAM;UACR;QACF;AAEA,cAAMO,WAAW;UACfhC,IAAI,GAAGZ,gBAAgBuB,MAAMlB,KAAKmB,GAAG;UACrCC,MAAajB,kBAAW,aAAA;AACtB,kBAAM+B,QAAO,OAAOjC,iBAAiBkC,QAAO;AAC5C,mBAAOvC,UAAU8B,OAAO/B,gBAAgBuB,OAAO;cAAES,SAASO,MAAKG;YAAO,CAAA;UACxE,CAAA;UACAT,YAAY;YACVC,OAAO;cAAC;cAAmB;gBAAEC,IAAI9B,KAAK+B,QAAQZ;cAAI;;YAClDa,MAAM;UACR;QACF;AAEA,cAAMQ,QAAQzB,IAAI,OAAOvB,WAAWuB,IAAId,iBAAiBwC,KAAK,CAAA;AAC9D,cAAMP,OAAOM,MAAME,MAAMF,MAAMG,UAAU;AAEzC,cAAMC,gBAAgB;UACpBrC,IAAI,GAAGZ,gBAAgBkD,cAAc7C,KAAKmB,GAAG;UAC7CC,MAAajB,kBAAW,aAAA;AACtB,mBAAOZ,aAAauD,gBAAgB7C,iBAAiBwC,OAAO,CAACM,OAAO;cAClE,GAAGA;cACHC,cAAcD,EAAEC,iBAAiB,aAAc,cAAyB;YAC1E,EAAA;UACF,CAAA;UACApB,YAAY;YACVC,OAAO;cACLW,MAAMQ,iBAAiB,aACnB,sCACA;cACJ;gBAAElB,IAAI9B,KAAK+B,QAAQZ;cAAI;;YAEzBa,MAAM;YACNiB,YAAY;cACVC,OAAO;YACT;YACAC,aAAa;YACbC,UAAU;YACVC,cAAc;UAChB;QACF;AAEA,eAAO,CAACnB,MAAMoB,OAAO;UAACrC;UAAcgB;UAAaM;UAAUK;YAAiB;UAACA;;MAC/E,CAAA;IACJ,CAAA;GACD;AAED,SAAOpD,WAAW+D,YAAY9D,gBAAgB+D,iBAAiBpD,WAAWqD,KAAI,CAAA;AAChF,CAAA,CAAA;",
|
|
6
|
-
"names": ["Effect", "Capabilities", "Capability", "AppCapabilities", "AppNode", "LayoutOperation", "Operation", "AttentionCapabilities", "GraphBuilder", "NodeMatcher", "meta", "DeckCapabilities", "makeModule", "fnUntraced", "extensions", "all", "createExtension", "id", "match", "whenRoot", "connector", "succeed", "makeNotFound", "actions", "_node", "get", "gen", "closeCurrent", "Close", "key", "data", "attention", "Attention", "attended", "getCurrent", "at", "invoke", "subject", "properties", "label", "ns", "profile", "icon", "closeOthers", "deck", "getDeck", "ids", "active", "filter", "closeAll", "state", "State", "decks", "activeDeck", "toggleSidebar", "UpdateSidebar", "updateAtomValue", "s", "sidebarState", "keyBinding", "macos", "disposition", "position", "l0Breakpoint", "solo", "contributes", "AppGraphBuilder", "flat"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/schema.ts", "../../../src/types/surface.ts", "../../../src/types/DeckCapabilities.ts", "../../../src/types/DeckEvents.ts", "../../../src/types/DeckOperation.ts", "../../../src/types/Settings.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { AppNode, LayoutOperation, Translations } from '@dxos/app-toolkit';\nimport { type DeepReadonly } from '@dxos/util';\n\nimport { meta } from '#meta';\n\nexport const PLANK_COMPANION_TYPE = AppNode.PLANK_COMPANION_TYPE;\nexport const DECK_COMPANION_TYPE = AppNode.DECK_COMPANION_TYPE;\n\nexport type Part = 'solo' | 'multi' | 'complementary';\nexport type ResolvedPart = Part | 'solo-primary' | 'solo-companion';\n\nexport const PlankSizing = Schema.Record({ key: Schema.String, value: Schema.Number });\nexport type PlankSizing = Schema.Schema.Type<typeof PlankSizing>;\n\nexport const DeckState = Schema.Struct({\n /** If false, the deck has not yet left solo mode and new planks should be soloed. */\n initialized: Schema.Boolean,\n /** Item IDs of planks currently displayed in multi-mode. */\n active: Schema.mutable(Schema.Array(Schema.String)),\n /** Item IDs of planks that have been closed; used for state persistence and reopening. */\n inactive: Schema.mutable(Schema.Array(Schema.String)),\n /** Item ID of the single plank displayed in solo or fullscreen mode. */\n solo: Schema.optional(Schema.String),\n /** Whether the solo plank is displayed in fullscreen mode (no heading or sidebars). */\n fullscreen: Schema.Boolean,\n /** Persisted plank widths in rem, keyed by item ID. */\n plankSizing: Schema.mutable(PlankSizing),\n /** Whether the companion pane is visible alongside the active plank(s). */\n companionOpen: Schema.Boolean,\n /** Which companion variant to display when the companion pane is open. */\n companionVariant: Schema.optional(Schema.String),\n /** Persisted companion frame widths in rem, keyed by frame ID. */\n companionFrameSizing: Schema.mutable(PlankSizing),\n});\nexport type DeckState = Schema.Schema.Type<typeof DeckState>;\n\nexport const defaultDeck: DeckState = {\n initialized: false,\n active: [],\n inactive: [],\n solo: undefined,\n fullscreen: false,\n plankSizing: {},\n companionOpen: false,\n companionVariant: undefined,\n companionFrameSizing: {},\n};\n\n//\n// Layout\n//\n\nconst LayoutMode = Schema.Literal('multi', 'solo', 'solo--fullscreen');\nexport type LayoutMode = Schema.Schema.Type<typeof LayoutMode>;\nexport const isLayoutMode = (value: any): value is LayoutMode => Schema.is(LayoutMode)(value);\nexport const getMode = (deck: DeckState | DeepReadonly<DeckState>): LayoutMode => {\n if (deck.solo) {\n return deck.fullscreen ? 'solo--fullscreen' : 'solo';\n }\n\n return 'multi';\n};\n\n// Persisted plugin state (stored in KVS/localStorage).\nexport const StoredDeckState = Schema.Struct({\n sidebarState: Schema.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarState: Schema.Literal('closed', 'collapsed', 'expanded'),\n complementarySidebarPanel: Schema.optional(Schema.String),\n activeDeck: Schema.String,\n previousDeck: Schema.String,\n decks: Schema.mutable(Schema.Record({ key: Schema.String, value: Schema.mutable(DeckState) })),\n previousMode: Schema.mutable(Schema.Record({ key: Schema.String, value: LayoutMode })),\n}).pipe(Schema.mutable);\nexport type StoredDeckState = Schema.Schema.Type<typeof StoredDeckState>;\n\n// Transient/ephemeral plugin state (not persisted).\nexport const EphemeralDeckState = Schema.Struct({\n dialogOpen: Schema.Boolean,\n dialogType: Schema.optional(Schema.Literal('default', 'alert')),\n dialogBlockAlign: Schema.optional(Schema.Literal('start', 'center', 'end')),\n dialogOverlayClasses: Schema.optional(Schema.String),\n dialogOverlayStyle: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n /** Data to be passed to the dialog Surface. */\n dialogContent: Schema.NullOr(Schema.Struct({ component: Schema.String, props: Schema.optional(Schema.Any) })),\n popoverOpen: Schema.Boolean,\n popoverSide: Schema.optional(Schema.Literal('top', 'right', 'bottom', 'left')),\n popoverAnchor: Schema.optional(Schema.Any),\n popoverAnchorId: Schema.optional(Schema.String),\n popoverKind: Schema.optional(Schema.Literal('base', 'card', 'rename')),\n popoverTitle: Schema.optional(Translations.Label.annotations({ description: 'The title of the popover.' })),\n /** Ref of the subject to be passed to the popover Surface. */\n popoverContentRef: Schema.optional(Schema.String),\n /** Data to be passed to the popover Surface. */\n popoverContent: Schema.NullOr(\n Schema.Union(\n Schema.Struct({ component: Schema.String, props: Schema.optional(Schema.Any) }),\n Schema.Struct({ subject: Schema.Any }),\n ),\n ),\n toasts: Schema.mutable(Schema.Array(LayoutOperation.Toast)),\n currentUndoId: Schema.optional(Schema.String),\n /** The identifier of a component to scroll into view when it is mounted. */\n scrollIntoView: Schema.optional(Schema.String),\n}).pipe(Schema.mutable);\nexport type EphemeralDeckState = Schema.Schema.Type<typeof EphemeralDeckState>;\n\n// Combined state type (for convenience in components that need both).\nexport type DeckPluginState = StoredDeckState & EphemeralDeckState;\n\nexport namespace DeckAction {\n const PartAdjustmentSchema = Schema.Union(\n Schema.Literal('close').annotations({ description: 'Close the plank.' }),\n Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),\n Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),\n Schema.Literal('solo--fullscreen').annotations({ description: 'Fullscreen the plank.' }),\n Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),\n Schema.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),\n );\n export type PartAdjustment = Schema.Schema.Type<typeof PartAdjustmentSchema>;\n export const Adjustment = Schema.mutable(Schema.Struct({ id: Schema.String, type: PartAdjustmentSchema }));\n export type Adjustment = Schema.Schema.Type<typeof Adjustment>;\n\n // An atomic transaction to apply to the deck, describing which element to move to which location.\n export class Adjust extends Schema.TaggedClass<Adjust>()(`${meta.profile.key}.action.adjust`, {\n input: Adjustment,\n output: Schema.Void,\n }) {}\n\n export class UpdatePlankSize extends Schema.TaggedClass<UpdatePlankSize>()(\n `${meta.profile.key}.action.update-plank-size`,\n {\n input: Schema.Struct({\n id: Schema.String,\n size: Schema.Number,\n }),\n output: Schema.Void,\n },\n ) {}\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Surface } from '@dxos/app-framework/ui';\n\n/** Slot for the main status-bar container. */\nexport const StatusBar: Surface.RoleToken<Record<string, unknown>> = Surface.makeType(\n 'org.dxos.plugin.statusBar.role.statusBar',\n);\n\n/** Slot for the status-bar footer region. */\nexport const StatusBarFooter: Surface.RoleToken<Record<string, unknown>> = Surface.makeType(\n 'org.dxos.plugin.statusBar.role.footer',\n);\n\n/** Slot for the version-info widget in the banner. */\nexport const VersionInfo: Surface.RoleToken<Record<string, unknown>> = Surface.makeType(\n 'org.dxos.plugin.statusBar.role.versionInfo',\n);\n\n/** Slot for the keyboard-shortcuts hints overlay. */\nexport const Hints: Surface.RoleToken<Record<string, unknown>> = Surface.makeType('org.dxos.plugin.support.role.hints');\n\n/** Slot for the full keyboard-shortcuts list. */\nexport const Keyshortcuts: Surface.RoleToken<Record<string, unknown>> = Surface.makeType(\n 'org.dxos.plugin.support.role.keyshortcuts',\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type Atom } from '@effect-atom/atom-react';\nimport * as Effect from 'effect/Effect';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\n\nimport { meta } from '#meta';\n\nimport { type EphemeralDeckState, type DeckState, type StoredDeckState } from './schema';\n\nexport const Settings = Capability.make<Atom.Writable<import('./Settings').Settings>>(\n `${meta.profile.key}.capability.settings`,\n);\n\n/** Persisted state (stored in KVS/localStorage). */\nexport const State = Capability.make<Atom.Writable<StoredDeckState>>(`${meta.profile.key}.capability.state`);\n\n/** Transient/ephemeral state (not persisted). */\nexport const EphemeralState = Capability.make<Atom.Writable<EphemeralDeckState>>(\n `${meta.profile.key}.capability.ephemeral-state`,\n);\n\n/** Get the current active deck from state. */\nexport const getDeck = (): Effect.Effect<DeckState, Error, Capability.Service> =>\n Effect.gen(function* () {\n const state = yield* Capabilities.getAtomValue(State);\n const deck = state.decks[state.activeDeck];\n invariant(deck, `Deck not found: ${state.activeDeck}`);\n return deck;\n });\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type ActivationEvent } from '@dxos/app-framework';\nimport { AppActivationEvents } from '@dxos/app-toolkit';\n\nimport { meta } from '#meta';\n\nimport * as DeckCapabilities from './DeckCapabilities';\n\nexport const StateReady: ActivationEvent.ActivationEvent = AppActivationEvents.createStateEvent(\n `${meta.profile.key}.state-ready`,\n);\n\n/** Fired when DeckSettings capability is ready. */\nexport const SettingsReady: ActivationEvent.ActivationEvent = AppActivationEvents.createSettingsEvent(\n DeckCapabilities.Settings.identifier,\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { Capability } from '@dxos/app-framework';\nimport { Operation } from '@dxos/compute';\nimport { DXN } from '@dxos/keys';\n\nimport { meta } from '#meta';\n\nconst makeKey = (name: string) => DXN.make(`${meta.profile.key}.operation.${name}`);\n\nconst PartAdjustmentSchema = Schema.Union(\n Schema.Literal('close').annotations({ description: 'Close the plank.' }),\n Schema.Literal('companion').annotations({ description: 'Open the companion plank.' }),\n Schema.Literal('solo').annotations({ description: 'Solo the plank.' }),\n Schema.Literal('solo--fullscreen').annotations({ description: 'Fullscreen the plank.' }),\n Schema.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),\n Schema.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),\n);\n\nexport type PartAdjustment = Schema.Schema.Type<typeof PartAdjustmentSchema>;\n\nexport const Adjust = Operation.make({\n meta: {\n key: makeKey('adjust'),\n name: 'Adjust',\n description: 'Adjust the layout of a plank.',\n icon: 'ph--layout--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n id: Schema.String.annotations({ description: 'The id of the plank to adjust.' }),\n type: PartAdjustmentSchema.annotations({ description: 'The type of adjustment to make.' }),\n }),\n output: Schema.Void,\n});\n\nexport const UpdatePlankSize = Operation.make({\n meta: {\n key: makeKey('updatePlankSize'),\n name: 'Update Plank Size',\n description: 'Update the size of a plank.',\n icon: 'ph--arrows-out--regular',\n },\n services: [Capability.Service],\n input: Schema.Struct({\n id: Schema.String.annotations({ description: 'The id of the plank to resize.' }),\n size: Schema.Number.annotations({ description: 'The new size of the plank.' }),\n }),\n output: Schema.Void,\n});\n", "//\n// Copyright 2023 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nexport const Settings = Schema.Struct({\n enableDeck: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Enable Deck',\n description: 'Display multiple panels side by side instead of one at a time.',\n }),\n ),\n // TODO(burdon): Rename layoutMode? (e.g., bento/encapsulated or floating/compact, etc.)\n encapsulatedPlanks: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Encapsulated planks',\n description: 'Render each plank inside its own isolated container.',\n }),\n ),\n showHints: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Show hints',\n description: 'Show helpful tips and keyboard shortcut hints in the interface.',\n }),\n ),\n enableNativeRedirect: Schema.optional(\n Schema.Boolean.annotations({\n title: 'Enable native url redirect',\n description: 'Redirect supported URLs to the native desktop application.',\n }),\n ),\n}).pipe(Schema.mutable);\nexport interface Settings extends Schema.Schema.Type<typeof Settings> {}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Schema", "AppNode", "LayoutOperation", "Translations", "meta", "PLANK_COMPANION_TYPE", "DECK_COMPANION_TYPE", "PlankSizing", "Record", "key", "String", "value", "Number", "DeckState", "Struct", "initialized", "Boolean", "active", "mutable", "Array", "inactive", "solo", "optional", "fullscreen", "plankSizing", "companionOpen", "companionVariant", "companionFrameSizing", "defaultDeck", "undefined", "LayoutMode", "Literal", "isLayoutMode", "is", "getMode", "deck", "StoredDeckState", "sidebarState", "complementarySidebarState", "complementarySidebarPanel", "activeDeck", "previousDeck", "decks", "previousMode", "pipe", "EphemeralDeckState", "dialogOpen", "dialogType", "dialogBlockAlign", "dialogOverlayClasses", "dialogOverlayStyle", "Any", "dialogContent", "NullOr", "component", "props", "popoverOpen", "popoverSide", "popoverAnchor", "popoverAnchorId", "popoverKind", "popoverTitle", "Label", "annotations", "description", "popoverContentRef", "popoverContent", "Union", "subject", "toasts", "Toast", "currentUndoId", "scrollIntoView", "DeckAction", "PartAdjustmentSchema", "Adjustment", "id", "type", "Adjust", "TaggedClass", "profile", "input", "output", "Void", "UpdatePlankSize", "size", "Surface", "StatusBar", "makeType", "StatusBarFooter", "VersionInfo", "Hints", "Keyshortcuts", "Effect", "Capabilities", "Capability", "invariant", "meta", "Settings", "getDeck", "State", "deck", "activeDeck", "AppActivationEvents", "meta", "StateReady", "AppActivationEvents", "createStateEvent", "meta", "profile", "key", "SettingsReady", "createSettingsEvent", "Settings", "identifier", "Schema", "Capability", "Operation", "DXN", "meta", "makeKey", "name", "make", "profile", "key", "PartAdjustmentSchema", "Union", "Literal", "annotations", "description", "Adjust", "icon", "services", "Service", "input", "Struct", "id", "String", "type", "output", "Void", "UpdatePlankSize", "size", "Number", "Settings", "Schema", "Struct", "enableDeck", "optional", "Boolean", "annotations", "title", "description", "encapsulatedPlanks", "showHints", "enableNativeRedirect", "pipe", "mutable"]
|
|
7
|
-
}
|