@dxos/plugin-deck 0.8.4-main.bc674ce → 0.8.4-main.c351d160a8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/Banner-AJW6225V.mjs +14 -0
- package/dist/lib/browser/Banner-AJW6225V.mjs.map +7 -0
- package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs +96 -0
- package/dist/lib/browser/DeckSettings-HSSQKFNE.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-DTVCULQ4.mjs → app-graph-builder-MP6INIM2.mjs} +16 -13
- package/dist/lib/browser/app-graph-builder-MP6INIM2.mjs.map +7 -0
- package/dist/lib/browser/{check-app-scheme-JSRXXIYF.mjs → check-app-scheme-AUNCD2Y6.mjs} +9 -8
- package/dist/lib/browser/check-app-scheme-AUNCD2Y6.mjs.map +7 -0
- package/dist/lib/browser/{chunk-ATFPDN6J.mjs → chunk-3P2FJVXC.mjs} +35 -49
- package/dist/lib/browser/chunk-3P2FJVXC.mjs.map +7 -0
- package/dist/lib/browser/chunk-BJDEG7YZ.mjs +74 -0
- package/dist/lib/browser/chunk-BJDEG7YZ.mjs.map +7 -0
- package/dist/lib/browser/chunk-L3RYMAV7.mjs +16 -0
- package/dist/lib/browser/chunk-L3RYMAV7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-UNG4CLLP.mjs → chunk-TAHLKBDO.mjs} +46 -20
- package/dist/lib/browser/chunk-TAHLKBDO.mjs.map +7 -0
- package/dist/lib/browser/{chunk-S4A5UO4K.mjs → chunk-WTNYSXY5.mjs} +221 -281
- package/dist/lib/browser/chunk-WTNYSXY5.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +39 -35
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{operation-resolver-CDYBLZJ4.mjs → operation-resolver-2TEGT4PG.mjs} +166 -122
- package/dist/lib/browser/operation-resolver-2TEGT4PG.mjs.map +7 -0
- package/dist/lib/browser/{react-root-XDCMNENQ.mjs → react-root-XBFHPSCP.mjs} +8 -7
- package/dist/lib/browser/react-root-XBFHPSCP.mjs.map +7 -0
- package/dist/lib/browser/react-surface-4J3BZNT2.mjs +44 -0
- package/dist/lib/browser/react-surface-4J3BZNT2.mjs.map +7 -0
- package/dist/lib/browser/{settings-OMHVGZ6V.mjs → settings-PTMGCSJH.mjs} +8 -5
- package/dist/lib/browser/settings-PTMGCSJH.mjs.map +7 -0
- package/dist/lib/browser/{state-OC3BSB6E.mjs → state-MA4SQ7BE.mjs} +11 -8
- package/dist/lib/browser/state-MA4SQ7BE.mjs.map +7 -0
- package/dist/lib/browser/{toolkit-R53LD3EA.mjs → toolkit-6B34QFU3.mjs} +10 -8
- package/dist/lib/browser/toolkit-6B34QFU3.mjs.map +7 -0
- package/dist/lib/browser/types/index.mjs +4 -5
- package/dist/lib/browser/{url-handler-53TE6JZO.mjs → url-handler-FEUFPQIP.mjs} +22 -17
- package/dist/lib/browser/url-handler-FEUFPQIP.mjs.map +7 -0
- package/dist/lib/node-esm/Banner-XBH2IIDR.mjs +15 -0
- package/dist/lib/node-esm/Banner-XBH2IIDR.mjs.map +7 -0
- package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs +97 -0
- package/dist/lib/node-esm/DeckSettings-DJRFLKQS.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-473BNZDJ.mjs → app-graph-builder-ACHG5HY7.mjs} +16 -13
- package/dist/lib/node-esm/app-graph-builder-ACHG5HY7.mjs.map +7 -0
- package/dist/lib/node-esm/{check-app-scheme-IVYRHKRH.mjs → check-app-scheme-WN76GWVC.mjs} +9 -8
- package/dist/lib/node-esm/check-app-scheme-WN76GWVC.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-D34L3ECT.mjs → chunk-CQ3XYTNJ.mjs} +220 -280
- package/dist/lib/node-esm/chunk-CQ3XYTNJ.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs +76 -0
- package/dist/lib/node-esm/chunk-DGTRKKWZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SKEVPQ7E.mjs → chunk-EMU4VIPH.mjs} +46 -20
- package/dist/lib/node-esm/chunk-EMU4VIPH.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-XAKTY3EB.mjs → chunk-GZJAQ5IP.mjs} +34 -49
- package/dist/lib/node-esm/chunk-GZJAQ5IP.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-XCNF4COU.mjs +18 -0
- package/dist/lib/node-esm/chunk-XCNF4COU.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +39 -35
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{operation-resolver-WUOE33ID.mjs → operation-resolver-GCMCCI7A.mjs} +166 -122
- package/dist/lib/node-esm/operation-resolver-GCMCCI7A.mjs.map +7 -0
- package/dist/lib/node-esm/{react-root-O6GZO62Z.mjs → react-root-32LZ6APH.mjs} +8 -7
- package/dist/lib/node-esm/react-root-32LZ6APH.mjs.map +7 -0
- package/dist/lib/node-esm/{react-surface-IHDJDGC5.mjs → react-surface-CO4ZDZKM.mjs} +18 -16
- package/dist/lib/node-esm/react-surface-CO4ZDZKM.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-2HB6FKIK.mjs → settings-LPPFLXNJ.mjs} +8 -5
- package/dist/lib/node-esm/settings-LPPFLXNJ.mjs.map +7 -0
- package/dist/lib/node-esm/{state-JRQ45ACJ.mjs → state-KNRU3GDC.mjs} +11 -8
- package/dist/lib/node-esm/state-KNRU3GDC.mjs.map +7 -0
- package/dist/lib/node-esm/{toolkit-JLPZNNKB.mjs → toolkit-SOWYKJY3.mjs} +10 -8
- package/dist/lib/node-esm/toolkit-SOWYKJY3.mjs.map +7 -0
- package/dist/lib/node-esm/types/index.mjs +4 -5
- package/dist/lib/node-esm/{url-handler-QGF2R24T.mjs → url-handler-4LEB7UWF.mjs} +22 -17
- package/dist/lib/node-esm/url-handler-4LEB7UWF.mjs.map +7 -0
- package/dist/types/src/DeckPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +1 -1
- package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts +1 -1
- package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
- package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts +1 -1
- package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
- package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
- package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings/index.d.ts +1 -1
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/settings/settings.d.ts +4 -3
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
- package/dist/types/src/capabilities/state/index.d.ts +6 -6
- package/dist/types/src/capabilities/state/state.d.ts +7 -7
- package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit/index.d.ts +1 -1
- package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/toolkit/toolkit.d.ts +4 -3
- package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -1
- package/dist/types/src/capabilities/tools/tools.d.ts +1 -1
- package/dist/types/src/capabilities/tools/tools.d.ts.map +1 -1
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts +1 -1
- package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +1 -0
- 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 +2 -2
- package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
- package/dist/types/src/components/Plank/Plank.stories.d.ts +3 -2
- package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
- package/dist/types/src/components/Plank/PlankError.d.ts +5 -3
- package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
- 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/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/{components → containers}/DeckSettings/DeckSettings.d.ts.map +1 -1
- 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 +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useDeckCompanions.d.ts +0 -1
- package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -1
- package/dist/types/src/hooks/useMainSize.d.ts +2 -2
- 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/layout.d.ts +1 -7
- package/dist/types/src/layout.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/capabilities.d.ts +6 -6
- package/dist/types/src/types/capabilities.d.ts.map +1 -1
- package/dist/types/src/types/events.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +18 -16
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +48 -44
- package/src/DeckPlugin.ts +12 -11
- package/src/capabilities/app-graph-builder/app-graph-builder.ts +11 -10
- package/src/capabilities/check-app-scheme/check-app-scheme.ts +12 -8
- package/src/capabilities/operation-resolver/operation-resolver.ts +110 -107
- package/src/capabilities/react-root/react-root.tsx +2 -2
- package/src/capabilities/react-surface/react-surface.tsx +11 -10
- package/src/capabilities/settings/settings.ts +3 -2
- package/src/capabilities/state/state.ts +6 -5
- package/src/capabilities/toolkit/toolkit.ts +7 -6
- package/src/capabilities/tools/tools.ts +0 -1
- package/src/capabilities/url-handler/url-handler.ts +16 -13
- package/src/components/DeckLayout/ActiveNode.tsx +3 -2
- package/src/components/DeckLayout/Banner.tsx +8 -8
- package/src/components/DeckLayout/ContentEmpty.tsx +3 -3
- package/src/components/DeckLayout/DeckLayout.stories.tsx +8 -6
- package/src/components/DeckLayout/DeckMain.tsx +26 -25
- package/src/components/DeckLayout/Dialog.tsx +10 -4
- package/src/components/DeckLayout/Fallback.tsx +2 -6
- package/src/components/DeckLayout/Popover.tsx +46 -14
- package/src/components/DeckLayout/StatusBar.tsx +4 -4
- package/src/components/DeckLayout/Toast.tsx +3 -3
- package/src/components/Plank/Plank.stories.tsx +7 -5
- package/src/components/Plank/Plank.tsx +32 -24
- package/src/components/Plank/PlankControls.tsx +6 -8
- package/src/components/Plank/PlankError.tsx +29 -15
- package/src/components/Plank/PlankHeading.tsx +24 -26
- package/src/components/Plank/PlankLoading.tsx +1 -1
- package/src/components/Sidebar/ComplementarySidebar.tsx +50 -51
- package/src/components/Sidebar/Sidebar.tsx +4 -4
- package/src/components/Sidebar/SidebarButton.tsx +12 -12
- package/src/components/fragments.ts +9 -4
- 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 +23 -23
- package/src/containers/DeckSettings/index.ts +7 -0
- package/src/containers/index.ts +8 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useCompanions.ts +2 -2
- package/src/hooks/useDeckCompanions.ts +3 -8
- package/src/hooks/useDeckState.ts +3 -3
- package/src/hooks/useHoistStatusbar.ts +1 -1
- package/src/hooks/useMainSize.ts +2 -2
- package/src/hooks/useNodeActionExpander.ts +1 -1
- package/src/hooks/useSelectedCompanion.ts +32 -0
- package/src/layout.ts +1 -14
- package/src/meta.ts +1 -1
- package/src/translations.ts +1 -0
- package/src/types/capabilities.ts +5 -5
- package/src/types/events.ts +5 -4
- package/src/types/schema.ts +22 -21
- package/src/util/overscroll.ts +3 -3
- package/dist/lib/browser/app-graph-builder-DTVCULQ4.mjs.map +0 -7
- package/dist/lib/browser/check-app-scheme-JSRXXIYF.mjs.map +0 -7
- package/dist/lib/browser/chunk-ATFPDN6J.mjs.map +0 -7
- package/dist/lib/browser/chunk-NHABISX2.mjs +0 -152
- package/dist/lib/browser/chunk-NHABISX2.mjs.map +0 -7
- package/dist/lib/browser/chunk-S4A5UO4K.mjs.map +0 -7
- package/dist/lib/browser/chunk-UNG4CLLP.mjs.map +0 -7
- package/dist/lib/browser/operation-resolver-CDYBLZJ4.mjs.map +0 -7
- package/dist/lib/browser/react-root-XDCMNENQ.mjs.map +0 -7
- package/dist/lib/browser/react-surface-HODERLOL.mjs +0 -42
- package/dist/lib/browser/react-surface-HODERLOL.mjs.map +0 -7
- package/dist/lib/browser/settings-OMHVGZ6V.mjs.map +0 -7
- package/dist/lib/browser/state-OC3BSB6E.mjs.map +0 -7
- package/dist/lib/browser/toolkit-R53LD3EA.mjs.map +0 -7
- package/dist/lib/browser/url-handler-53TE6JZO.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-473BNZDJ.mjs.map +0 -7
- package/dist/lib/node-esm/check-app-scheme-IVYRHKRH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ADPMWKLL.mjs +0 -154
- package/dist/lib/node-esm/chunk-ADPMWKLL.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-D34L3ECT.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SKEVPQ7E.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-XAKTY3EB.mjs.map +0 -7
- package/dist/lib/node-esm/operation-resolver-WUOE33ID.mjs.map +0 -7
- package/dist/lib/node-esm/react-root-O6GZO62Z.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-IHDJDGC5.mjs.map +0 -7
- package/dist/lib/node-esm/settings-2HB6FKIK.mjs.map +0 -7
- package/dist/lib/node-esm/state-JRQ45ACJ.mjs.map +0 -7
- package/dist/lib/node-esm/toolkit-JLPZNNKB.mjs.map +0 -7
- package/dist/lib/node-esm/url-handler-QGF2R24T.mjs.map +0 -7
- package/dist/types/src/components/DeckSettings/index.d.ts +0 -2
- package/dist/types/src/components/DeckSettings/index.d.ts.map +0 -1
- package/src/components/DeckSettings/index.ts +0 -5
- /package/dist/types/src/{components → containers}/DeckSettings/DeckSettings.d.ts +0 -0
|
@@ -7,8 +7,9 @@ import * as Toolkit from '@effect/ai/Toolkit';
|
|
|
7
7
|
import * as Effect from 'effect/Effect';
|
|
8
8
|
import * as Schema from 'effect/Schema';
|
|
9
9
|
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { GenericToolkit } from '@dxos/ai';
|
|
11
|
+
import { Capabilities, Capability, type CapabilityManager } from '@dxos/app-framework';
|
|
12
|
+
import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
|
|
12
13
|
import { ArtifactId } from '@dxos/assistant';
|
|
13
14
|
import { type SpaceId } from '@dxos/keys';
|
|
14
15
|
import { trim } from '@dxos/util';
|
|
@@ -35,7 +36,7 @@ export namespace DeckToolkit {
|
|
|
35
36
|
Toolkit$.toLayer({
|
|
36
37
|
'open-item': ({ id }) =>
|
|
37
38
|
Effect.gen(function* () {
|
|
38
|
-
const registry = capabilityManager.get(
|
|
39
|
+
const registry = capabilityManager.get(Capabilities.AtomRegistry);
|
|
39
40
|
const stateAtom = capabilityManager.get(DeckCapabilities.State);
|
|
40
41
|
const state = registry.get(stateAtom);
|
|
41
42
|
const dxn = ArtifactId.toDXN(id, state.activeDeck as SpaceId).asEchoDXN();
|
|
@@ -45,8 +46,8 @@ export namespace DeckToolkit {
|
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
// TODO(wittjosiah): Get capabilities via layers.
|
|
48
|
-
const { invoke } = capabilityManager.get(
|
|
49
|
-
yield* invoke(
|
|
49
|
+
const { invoke } = capabilityManager.get(Capabilities.OperationInvoker);
|
|
50
|
+
yield* invoke(LayoutOperation.Open, { subject: [`${dxn.spaceId!}:${dxn.echoId}`] });
|
|
50
51
|
}).pipe(Effect.orDie),
|
|
51
52
|
});
|
|
52
53
|
}
|
|
@@ -56,7 +57,7 @@ export default Capability.makeModule(
|
|
|
56
57
|
const capabilityManager = yield* Capability.Service;
|
|
57
58
|
|
|
58
59
|
return Capability.contributes(
|
|
59
|
-
|
|
60
|
+
AppCapabilities.Toolkit,
|
|
60
61
|
GenericToolkit.make(DeckToolkit.Toolkit, DeckToolkit.createLayer(capabilityManager)),
|
|
61
62
|
);
|
|
62
63
|
}),
|
|
@@ -4,16 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
import * as Effect from 'effect/Effect';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import { Capabilities, Capability } from '@dxos/app-framework';
|
|
8
|
+
import { LayoutOperation, fromUrlPath, getWorkspaceFromPath, toUrlPath } from '@dxos/app-toolkit';
|
|
8
9
|
import { invariant } from '@dxos/invariant';
|
|
10
|
+
import { Node } from '@dxos/plugin-graph';
|
|
9
11
|
|
|
10
12
|
import { DeckCapabilities, type DeckStateProps, defaultDeck } from '../../types';
|
|
11
13
|
|
|
12
|
-
// TODO(wittjosiah): Cleanup the url handling. May justify introducing routing capabilities.
|
|
13
14
|
export default Capability.makeModule(
|
|
14
15
|
Effect.fnUntraced(function* () {
|
|
15
|
-
const { invokeSync } = yield* Capability.get(
|
|
16
|
-
const registry = yield* Capability.get(
|
|
16
|
+
const { invokeSync } = yield* Capability.get(Capabilities.OperationInvoker);
|
|
17
|
+
const registry = yield* Capability.get(Capabilities.AtomRegistry);
|
|
17
18
|
const stateAtom = yield* Capability.get(DeckCapabilities.State);
|
|
18
19
|
|
|
19
20
|
// Helper to get state.
|
|
@@ -47,16 +48,18 @@ export default Capability.makeModule(
|
|
|
47
48
|
return;
|
|
48
49
|
}
|
|
49
50
|
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
const qualifiedId = fromUrlPath(pathname);
|
|
52
|
+
const workspace = getWorkspaceFromPath(qualifiedId);
|
|
53
|
+
if (workspace !== Node.RootId && workspace !== state.activeDeck) {
|
|
54
|
+
invokeSync(LayoutOperation.SwitchWorkspace, { subject: workspace });
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
const deck = getDeck();
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
const activeId = qualifiedId !== workspace ? qualifiedId : undefined;
|
|
59
|
+
if (activeId && activeId !== deck.solo) {
|
|
60
|
+
invokeSync(LayoutOperation.SetLayoutMode, { subject: activeId, mode: 'solo' });
|
|
61
|
+
} else if (!activeId && deck.solo) {
|
|
62
|
+
invokeSync(LayoutOperation.SetLayoutMode, { mode: 'deck' });
|
|
60
63
|
}
|
|
61
64
|
};
|
|
62
65
|
|
|
@@ -77,7 +80,7 @@ export default Capability.makeModule(
|
|
|
77
80
|
lastSolo = solo;
|
|
78
81
|
lastActiveDeck = activeDeck;
|
|
79
82
|
|
|
80
|
-
const path = solo ?
|
|
83
|
+
const path = solo ? toUrlPath(solo) : toUrlPath(activeDeck);
|
|
81
84
|
if (window.location.pathname !== path) {
|
|
82
85
|
// TODO(thure): In some browsers, this only preserves the most recent state change, even though this is not `history.replace`…
|
|
83
86
|
history.pushState(null, '', `${path}${window.location.search}`);
|
|
@@ -85,7 +88,7 @@ export default Capability.makeModule(
|
|
|
85
88
|
}
|
|
86
89
|
});
|
|
87
90
|
|
|
88
|
-
return Capability.contributes(
|
|
91
|
+
return Capability.contributes(Capabilities.Null, null, () =>
|
|
89
92
|
Effect.sync(() => {
|
|
90
93
|
window.removeEventListener('popstate', handleNavigation);
|
|
91
94
|
unsubscribe();
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { Surface
|
|
7
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
8
|
+
import { useAppGraph } from '@dxos/app-toolkit/ui';
|
|
8
9
|
import { useNode } from '@dxos/plugin-graph';
|
|
9
10
|
import { useAttended } from '@dxos/react-ui-attention';
|
|
10
11
|
|
|
@@ -21,7 +22,7 @@ export const ActiveNode = () => {
|
|
|
21
22
|
<div role='none' className='sr-only'>
|
|
22
23
|
{/* TODO(wittjosiah): Weird that this is a surface, feel like it's not really render logic.
|
|
23
24
|
Probably this lives in React-land currently in order to access translations? */}
|
|
24
|
-
<Surface role='document-title' data={{ subject: activeNode }} limit={1} />
|
|
25
|
+
<Surface.Surface role='document-title' data={{ subject: activeNode }} limit={1} />
|
|
25
26
|
</div>
|
|
26
27
|
);
|
|
27
28
|
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { Surface } from '@dxos/app-framework/
|
|
7
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
8
8
|
import { type ThemedClassName, useTranslation } from '@dxos/react-ui';
|
|
9
9
|
import { mx, osTranslations } from '@dxos/ui-theme';
|
|
10
10
|
|
|
@@ -16,24 +16,24 @@ export const Banner = ({ variant, classNames }: ThemedClassName<{ variant?: 'top
|
|
|
16
16
|
return (
|
|
17
17
|
<header
|
|
18
18
|
className={mx(
|
|
19
|
-
'flex items-stretch relative
|
|
19
|
+
'flex items-stretch relative py-1 ps-1 pe-2',
|
|
20
20
|
variant === 'topbar' &&
|
|
21
|
-
'fixed inset-
|
|
21
|
+
'fixed inset-x-0 top-[env(safe-area-inset-top)] h-(--dx-rail-size) border-b border-separator',
|
|
22
22
|
classNames,
|
|
23
23
|
)}
|
|
24
24
|
>
|
|
25
25
|
{variant === 'sidebar' ? <CloseSidebarButton /> : <ToggleSidebarButton />}
|
|
26
|
-
<span className='self-center grow
|
|
26
|
+
<span className='self-center grow ms-1'>{t('current app name', { ns: osTranslations })}</span>
|
|
27
27
|
{variant === 'topbar' && (
|
|
28
28
|
<div role='none' className='absolute inset-0 pointer-events-none'>
|
|
29
|
-
<div role='none' className='grid
|
|
30
|
-
<Surface role='search-input' limit={1} />
|
|
29
|
+
<div role='none' className='grid h-full pointer-fine:p-1 max-w-md mx-auto pointer-events-auto'>
|
|
30
|
+
<Surface.Surface role='search-input' limit={1} />
|
|
31
31
|
</div>
|
|
32
32
|
</div>
|
|
33
33
|
)}
|
|
34
34
|
<span role='none' className='grow' />
|
|
35
|
-
<Surface role='header-end' limit={1} />
|
|
36
|
-
<Surface role='notch-start' limit={1} />
|
|
35
|
+
<Surface.Surface role='header-end' limit={1} />
|
|
36
|
+
<Surface.Surface role='notch-start' limit={1} />
|
|
37
37
|
</header>
|
|
38
38
|
);
|
|
39
39
|
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { Surface } from '@dxos/app-framework/
|
|
7
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
8
8
|
|
|
9
9
|
import { useBreakpoints, useDeckState } from '../../hooks';
|
|
10
10
|
import { getMode } from '../../types';
|
|
@@ -20,10 +20,10 @@ export const ContentEmpty = () => {
|
|
|
20
20
|
return (
|
|
21
21
|
<div
|
|
22
22
|
role='none'
|
|
23
|
-
className='grid place-items-center p-8 relative bg-
|
|
23
|
+
className='grid place-items-center p-8 relative bg-deck-surface'
|
|
24
24
|
data-testid='layoutPlugin.firstRunMessage'
|
|
25
25
|
>
|
|
26
|
-
<Surface role='keyshortcuts' />
|
|
26
|
+
<Surface.Surface role='keyshortcuts' />
|
|
27
27
|
{!topbar && <ToggleSidebarButton variant='default' classNames={fixedSidebarToggleStyles} />}
|
|
28
28
|
</div>
|
|
29
29
|
);
|
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import { Capability,
|
|
8
|
+
import { Capability, Plugin } from '@dxos/app-framework';
|
|
9
9
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
|
+
import { AppActivationEvents, AppPlugin } from '@dxos/app-toolkit';
|
|
10
11
|
import { corePlugins } from '@dxos/plugin-testing';
|
|
11
|
-
import { withTheme } from '@dxos/react-ui/testing';
|
|
12
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
12
13
|
|
|
13
14
|
import { DeckState, LayoutOperationResolver } from '../../capabilities';
|
|
14
15
|
import { meta as pluginMeta } from '../../meta';
|
|
@@ -19,21 +20,22 @@ import { DeckLayout } from './DeckLayout';
|
|
|
19
20
|
const TestPlugin = Plugin.define(pluginMeta).pipe(
|
|
20
21
|
Plugin.addModule({
|
|
21
22
|
id: Capability.getModuleTag(DeckState),
|
|
22
|
-
activatesOn:
|
|
23
|
+
activatesOn: AppActivationEvents.AppGraphReady,
|
|
23
24
|
activate: () => DeckState(),
|
|
24
25
|
}),
|
|
25
|
-
|
|
26
|
+
AppPlugin.addOperationResolverModule({
|
|
26
27
|
activate: LayoutOperationResolver,
|
|
27
28
|
}),
|
|
28
29
|
Plugin.make,
|
|
29
30
|
);
|
|
30
31
|
|
|
31
32
|
const meta = {
|
|
32
|
-
title: 'plugins/plugin-deck/DeckLayout',
|
|
33
|
+
title: 'plugins/plugin-deck/components/DeckLayout',
|
|
33
34
|
component: DeckLayout,
|
|
34
35
|
render: (args) => <DeckLayout {...args} />,
|
|
35
36
|
decorators: [
|
|
36
|
-
withTheme,
|
|
37
|
+
withTheme(),
|
|
38
|
+
withLayout({ layout: 'fullscreen' }),
|
|
37
39
|
withPluginManager({
|
|
38
40
|
plugins: [...corePlugins(), TestPlugin()],
|
|
39
41
|
}),
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { Fragment, type UIEvent, useCallback, useEffect, useMemo, useRef } from 'react';
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
7
|
+
import { useAtomCapability, useOperationInvoker, usePluginManager } from '@dxos/app-framework/ui';
|
|
8
|
+
import { LayoutOperation } from '@dxos/app-toolkit';
|
|
9
9
|
import { AttentionCapabilities } from '@dxos/plugin-attention';
|
|
10
10
|
import { Main, type MainContentProps, useMediaQuery, useOnTransition } from '@dxos/react-ui';
|
|
11
11
|
import { DEFAULT_HORIZONTAL_SIZE, Stack, StackContext } from '@dxos/react-ui-stack';
|
|
@@ -27,7 +27,8 @@ export const DeckMain = () => {
|
|
|
27
27
|
const settings = useAtomCapability(DeckCapabilities.Settings);
|
|
28
28
|
const { state, deck, updateState } = useDeckState();
|
|
29
29
|
const { sidebarState, complementarySidebarState, complementarySidebarPanel } = state;
|
|
30
|
-
const { active,
|
|
30
|
+
const { active, companionOpen, companionVariant, fullscreen, solo, plankSizing } = deck;
|
|
31
|
+
const effectiveCompanionVariant = companionOpen ? companionVariant : undefined;
|
|
31
32
|
const layoutMode = getMode(deck);
|
|
32
33
|
const breakpoint = useBreakpoints();
|
|
33
34
|
const topbar = layoutAppliesTopbar(breakpoint, layoutMode);
|
|
@@ -61,9 +62,9 @@ export const DeckMain = () => {
|
|
|
61
62
|
const attended = attention.getCurrent();
|
|
62
63
|
|
|
63
64
|
shouldRevert.current = true;
|
|
64
|
-
invokeSync(
|
|
65
|
+
invokeSync(LayoutOperation.SetLayoutMode, { subject: attended[0], mode: 'solo' });
|
|
65
66
|
} else if (isNotMobile && layoutMode === 'solo' && shouldRevert.current) {
|
|
66
|
-
invokeSync(
|
|
67
|
+
invokeSync(LayoutOperation.SetLayoutMode, { revert: true });
|
|
67
68
|
}
|
|
68
69
|
// NOTE: Using `layoutMode` instead of `deck` to avoid infinite loops caused by object reference changes.
|
|
69
70
|
}, [isNotMobile, layoutMode, invokeSync]);
|
|
@@ -72,7 +73,7 @@ export const DeckMain = () => {
|
|
|
72
73
|
// TODO(thure): Applying this as an effect should be avoided over emitting the operation only when the setting changes.
|
|
73
74
|
useEffect(() => {
|
|
74
75
|
if (!settings?.enableDeck && layoutMode === 'deck') {
|
|
75
|
-
invokeSync(
|
|
76
|
+
invokeSync(LayoutOperation.SetLayoutMode, { subject: active[0], mode: 'solo' });
|
|
76
77
|
}
|
|
77
78
|
}, [settings?.enableDeck, invokeSync, active, layoutMode]);
|
|
78
79
|
|
|
@@ -118,9 +119,9 @@ export const DeckMain = () => {
|
|
|
118
119
|
|
|
119
120
|
const mainPosition = useMemo(
|
|
120
121
|
() => [
|
|
121
|
-
'grid !
|
|
122
|
-
topbar && '!
|
|
123
|
-
hoistStatusbar && 'lg:
|
|
122
|
+
'grid !top-[env(safe-area-inset-top)]',
|
|
123
|
+
topbar && '!top-[calc(env(safe-area-inset-top)+var(--dx-rail-size))]',
|
|
124
|
+
hoistStatusbar && 'lg:bottom-(--dx-statusbar-size)',
|
|
124
125
|
],
|
|
125
126
|
[topbar, hoistStatusbar],
|
|
126
127
|
);
|
|
@@ -129,12 +130,12 @@ export const DeckMain = () => {
|
|
|
129
130
|
return active.reduce(
|
|
130
131
|
(acc: { order: Record<string, number>; itemsCount: number }, entryId) => {
|
|
131
132
|
acc.order[entryId] = acc.itemsCount + 1;
|
|
132
|
-
acc.itemsCount +=
|
|
133
|
+
acc.itemsCount += companionOpen ? 3 : 2;
|
|
133
134
|
return acc;
|
|
134
135
|
},
|
|
135
136
|
{ order: {}, itemsCount: 0 },
|
|
136
137
|
);
|
|
137
|
-
}, [active,
|
|
138
|
+
}, [active, companionOpen]);
|
|
138
139
|
|
|
139
140
|
const handleNavigationSidebarStateChange = useCallback(
|
|
140
141
|
(next: typeof sidebarState) => {
|
|
@@ -182,27 +183,27 @@ export const DeckMain = () => {
|
|
|
182
183
|
style={
|
|
183
184
|
{
|
|
184
185
|
'--main-spacing': settings?.encapsulatedPlanks ? '0.75rem' : '0',
|
|
185
|
-
'--dx-main-
|
|
186
|
+
'--dx-main-sidebar-width':
|
|
186
187
|
sidebarState === 'expanded'
|
|
187
|
-
? 'var(--nav-sidebar-size)'
|
|
188
|
+
? 'var(--dx-nav-sidebar-size)'
|
|
188
189
|
: sidebarState === 'collapsed'
|
|
189
|
-
? 'var(--l0-size)'
|
|
190
|
+
? 'var(--dx-l0-size)'
|
|
190
191
|
: '0',
|
|
191
|
-
'--dx-main-
|
|
192
|
+
'--dx-main-complementary-width':
|
|
192
193
|
complementarySidebarState === 'expanded'
|
|
193
|
-
? 'var(--complementary-sidebar-size)'
|
|
194
|
+
? 'var(--dx-complementary-sidebar-size)'
|
|
194
195
|
: complementarySidebarState === 'collapsed'
|
|
195
|
-
? 'var(--rail-size)'
|
|
196
|
+
? 'var(--dx-rail-size)'
|
|
196
197
|
: '0',
|
|
197
|
-
'--dx-main-
|
|
198
|
-
'--dx-main-
|
|
198
|
+
'--dx-main-content-first-width': `${plankSizing[active[0] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
|
|
199
|
+
'--dx-main-content-last-width': `${plankSizing[active[(active.length ?? 1) - 1] ?? 'never'] ?? DEFAULT_HORIZONTAL_SIZE}rem`,
|
|
199
200
|
} as MainContentProps['style']
|
|
200
201
|
}
|
|
201
202
|
>
|
|
202
203
|
{/* Deck mode. */}
|
|
203
204
|
<div
|
|
204
205
|
role='none'
|
|
205
|
-
className={!solo ? 'relative bg-
|
|
206
|
+
className={!solo ? 'relative bg-deck-surface overflow-hidden' : 'sr-only'}
|
|
206
207
|
{...(solo && { inert: true })}
|
|
207
208
|
>
|
|
208
209
|
{!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}
|
|
@@ -215,7 +216,7 @@ export const DeckMain = () => {
|
|
|
215
216
|
size='contain'
|
|
216
217
|
itemsCount={itemsCount - 1}
|
|
217
218
|
classNames={[
|
|
218
|
-
'absolute inset-
|
|
219
|
+
'absolute inset-y-(--main-spacing) -inset-w-px h-[calc(100%-2*var(--main-spacing))]',
|
|
219
220
|
mainPaddingTransitions,
|
|
220
221
|
]}
|
|
221
222
|
style={padding}
|
|
@@ -226,7 +227,7 @@ export const DeckMain = () => {
|
|
|
226
227
|
<PlankSeparator order={order[entryId] - 1} encapsulate={!!settings?.enableDeck} />
|
|
227
228
|
<Plank
|
|
228
229
|
id={entryId}
|
|
229
|
-
|
|
230
|
+
companionVariant={effectiveCompanionVariant}
|
|
230
231
|
part='deck'
|
|
231
232
|
order={order[entryId]}
|
|
232
233
|
active={active}
|
|
@@ -241,7 +242,7 @@ export const DeckMain = () => {
|
|
|
241
242
|
{/* Solo mode. */}
|
|
242
243
|
<div
|
|
243
244
|
role='none'
|
|
244
|
-
className={solo ? 'relative overflow-hidden bg-
|
|
245
|
+
className={solo ? 'relative overflow-hidden bg-deck-surface' : 'sr-only'}
|
|
245
246
|
{...(!solo && { inert: true })}
|
|
246
247
|
>
|
|
247
248
|
{!topbar && !fullscreen && <ToggleSidebarButton classNames={fixedSidebarToggleStyles} />}
|
|
@@ -257,7 +258,7 @@ export const DeckMain = () => {
|
|
|
257
258
|
>
|
|
258
259
|
<Plank
|
|
259
260
|
id={solo}
|
|
260
|
-
|
|
261
|
+
companionVariant={effectiveCompanionVariant}
|
|
261
262
|
part='solo'
|
|
262
263
|
layoutMode={layoutMode}
|
|
263
264
|
settings={settings}
|
|
@@ -280,7 +281,7 @@ const PlankSeparator = ({ order, encapsulate }: { order: number; encapsulate?: b
|
|
|
280
281
|
order > 0 ? (
|
|
281
282
|
<span
|
|
282
283
|
role='separator'
|
|
283
|
-
className={mx('row-span-2 bg-
|
|
284
|
+
className={mx('row-span-2 bg-deck-surface', encapsulate ? 'w-0' : 'w-4')}
|
|
284
285
|
style={{ gridColumn: order }}
|
|
285
286
|
/>
|
|
286
287
|
) : null;
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
import React, { useCallback } from 'react';
|
|
6
6
|
|
|
7
|
-
import { Surface } from '@dxos/app-framework/
|
|
7
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
8
8
|
import { AlertDialog, Dialog as NaturalDialog } from '@dxos/react-ui';
|
|
9
9
|
|
|
10
10
|
import { useDeckState } from '../../hooks';
|
|
11
|
-
import {
|
|
11
|
+
import { PlankErrorFallback } from '../Plank';
|
|
12
12
|
|
|
13
13
|
export const Dialog = () => {
|
|
14
14
|
const { state, updateEphemeral } = useDeckState();
|
|
@@ -28,10 +28,16 @@ export const Dialog = () => {
|
|
|
28
28
|
<Root modal={dialogBlockAlign !== 'end'} open={dialogOpen} onOpenChange={handleOpenChange}>
|
|
29
29
|
{dialogBlockAlign === 'end' ? (
|
|
30
30
|
// TODO(burdon): Placeholder creates a suspense boundary; replace with defaults.
|
|
31
|
-
<Surface
|
|
31
|
+
<Surface.Surface
|
|
32
|
+
role='dialog'
|
|
33
|
+
data={dialogContent}
|
|
34
|
+
limit={1}
|
|
35
|
+
fallback={PlankErrorFallback}
|
|
36
|
+
placeholder={<div />}
|
|
37
|
+
/>
|
|
32
38
|
) : (
|
|
33
39
|
<Overlay blockAlign={dialogBlockAlign} classNames={dialogOverlayClasses} style={dialogOverlayStyle}>
|
|
34
|
-
<Surface role='dialog' data={dialogContent} limit={1} fallback={
|
|
40
|
+
<Surface.Surface role='dialog' data={dialogContent} limit={1} fallback={PlankErrorFallback} />
|
|
35
41
|
</Overlay>
|
|
36
42
|
)}
|
|
37
43
|
</Root>
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
7
|
import { useTranslation } from '@dxos/react-ui';
|
|
8
|
-
import { errorText, mx } from '@dxos/ui-theme';
|
|
9
8
|
|
|
10
9
|
import { meta } from '../../meta';
|
|
11
10
|
|
|
@@ -13,13 +12,10 @@ export const Fallback = () => {
|
|
|
13
12
|
const { t } = useTranslation(meta.id);
|
|
14
13
|
|
|
15
14
|
return (
|
|
16
|
-
<div role='none' className='min-
|
|
15
|
+
<div role='none' className='min-h-screen w-full flex items-center justify-center p-8'>
|
|
17
16
|
<p
|
|
18
17
|
role='alert'
|
|
19
|
-
className=
|
|
20
|
-
errorText,
|
|
21
|
-
'border border-roseFill rounded-md flex items-center justify-center p-8 font-normal text-lg',
|
|
22
|
-
)}
|
|
18
|
+
className='flex items-center justify-center p-8 font-normal text-lg text-error-text border border-rose-fill rounded-md'
|
|
23
19
|
>
|
|
24
20
|
{t('plugin error message')}
|
|
25
21
|
</p>
|
|
@@ -3,11 +3,22 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { createContext } from '@radix-ui/react-context';
|
|
6
|
+
import * as Function from 'effect/Function';
|
|
7
|
+
import * as Option from 'effect/Option';
|
|
6
8
|
import React, { type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';
|
|
7
9
|
|
|
8
|
-
import { Surface } from '@dxos/app-framework/
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
10
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
11
|
+
import { useObjectMenuItems } from '@dxos/app-toolkit/ui';
|
|
12
|
+
import { Annotation, Obj } from '@dxos/echo';
|
|
13
|
+
import {
|
|
14
|
+
Card,
|
|
15
|
+
Popover,
|
|
16
|
+
type PopoverContentInteractOutsideEvent,
|
|
17
|
+
toLocalizedString,
|
|
18
|
+
Toolbar,
|
|
19
|
+
useTranslation,
|
|
20
|
+
} from '@dxos/react-ui';
|
|
21
|
+
import { Menu } from '@dxos/react-ui-menu';
|
|
11
22
|
|
|
12
23
|
import { useDeckState } from '../../hooks';
|
|
13
24
|
import { meta } from '../../meta';
|
|
@@ -59,7 +70,18 @@ export const PopoverContent = () => {
|
|
|
59
70
|
const { t } = useTranslation(meta.id);
|
|
60
71
|
const { state, updateEphemeral } = useDeckState();
|
|
61
72
|
const { setOpen } = useDeckPopoverContext('PopoverContent');
|
|
62
|
-
|
|
73
|
+
const popoverSubject = state.popoverContent?.subject;
|
|
74
|
+
const isObjectPopover = Obj.isObject(popoverSubject);
|
|
75
|
+
const objectMenuItems = useObjectMenuItems(popoverSubject);
|
|
76
|
+
const icon = isObjectPopover
|
|
77
|
+
? Function.pipe(
|
|
78
|
+
Obj.getSchema(popoverSubject),
|
|
79
|
+
Option.fromNullable,
|
|
80
|
+
Option.flatMap(Annotation.IconAnnotation.get),
|
|
81
|
+
Option.map(({ icon }) => icon),
|
|
82
|
+
Option.getOrElse(() => 'ph--placeholder--regular'),
|
|
83
|
+
)
|
|
84
|
+
: undefined;
|
|
63
85
|
const handleClose = useCallback(() => {
|
|
64
86
|
setOpen(false);
|
|
65
87
|
updateEphemeral((state) => ({
|
|
@@ -96,18 +118,28 @@ export const PopoverContent = () => {
|
|
|
96
118
|
onEscapeKeyDown={handleInteractOutside}
|
|
97
119
|
>
|
|
98
120
|
<Popover.Viewport>
|
|
121
|
+
{/* TODO(burdon): Set/disable column context. */}
|
|
122
|
+
{state.popoverKind === 'base' && <Surface.Surface role='popover' data={state.popoverContent} limit={1} />}
|
|
99
123
|
{state.popoverKind === 'card' && (
|
|
100
|
-
<
|
|
101
|
-
<Card.
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
124
|
+
<Menu.Root>
|
|
125
|
+
<Card.Root border={false} classNames='dx-card-popover'>
|
|
126
|
+
<Card.Toolbar>
|
|
127
|
+
{icon ? <Card.Icon icon={icon} /> : <Card.IconBlock />}
|
|
128
|
+
{state.popoverTitle ? <Card.Title>{toLocalizedString(state.popoverTitle, t)}</Card.Title> : <span />}
|
|
129
|
+
<Menu.Trigger asChild disabled={!objectMenuItems.length}>
|
|
130
|
+
<Toolbar.IconButton
|
|
131
|
+
iconOnly
|
|
132
|
+
variant='ghost'
|
|
133
|
+
icon='ph--dots-three-vertical--regular'
|
|
134
|
+
label='Actions'
|
|
135
|
+
/>
|
|
136
|
+
</Menu.Trigger>
|
|
137
|
+
<Menu.Content items={objectMenuItems} />
|
|
138
|
+
</Card.Toolbar>
|
|
139
|
+
<Surface.Surface role='card--content' data={state.popoverContent} limit={1} />
|
|
140
|
+
</Card.Root>
|
|
141
|
+
</Menu.Root>
|
|
109
142
|
)}
|
|
110
|
-
{state.popoverKind === 'base' && <Surface role='popover' data={state.popoverContent} limit={1} />}
|
|
111
143
|
</Popover.Viewport>
|
|
112
144
|
<Popover.Arrow />
|
|
113
145
|
</Popover.Content>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { Surface } from '@dxos/app-framework/
|
|
7
|
+
import { Surface } from '@dxos/app-framework/ui';
|
|
8
8
|
import { useLandmarkMover } from '@dxos/react-ui';
|
|
9
9
|
|
|
10
10
|
export const StatusBar = ({ showHints }: { showHints?: boolean }) => {
|
|
@@ -12,11 +12,11 @@ export const StatusBar = ({ showHints }: { showHints?: boolean }) => {
|
|
|
12
12
|
return (
|
|
13
13
|
<div
|
|
14
14
|
role='contentinfo'
|
|
15
|
-
className='fixed
|
|
15
|
+
className='fixed bottom-0 inset-x-0 h-(--dx-statusbar-size) border-y border-separator z-[2] flex text-description'
|
|
16
16
|
{...mover}
|
|
17
17
|
>
|
|
18
|
-
{showHints && <Surface role='hints' limit={1} />}
|
|
19
|
-
<Surface role='status-bar' limit={1} />
|
|
18
|
+
{showHints && <Surface.Surface role='hints' limit={1} />}
|
|
19
|
+
<Surface.Surface role='status-bar' limit={1} />
|
|
20
20
|
</div>
|
|
21
21
|
);
|
|
22
22
|
};
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import React from 'react';
|
|
6
6
|
|
|
7
|
-
import { type
|
|
7
|
+
import { type LayoutOperation } from '@dxos/app-toolkit';
|
|
8
8
|
import {
|
|
9
9
|
Button,
|
|
10
10
|
Icon,
|
|
@@ -28,7 +28,7 @@ export const Toast = ({
|
|
|
28
28
|
closeLabel,
|
|
29
29
|
onAction,
|
|
30
30
|
onOpenChange,
|
|
31
|
-
}:
|
|
31
|
+
}: LayoutOperation.Toast & Pick<ToastRootProps, 'onOpenChange'>) => {
|
|
32
32
|
const { t } = useTranslation(meta.id);
|
|
33
33
|
|
|
34
34
|
return (
|
|
@@ -61,7 +61,7 @@ export const Toast = ({
|
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
export type ToasterProps = {
|
|
64
|
-
toasts?:
|
|
64
|
+
toasts?: LayoutOperation.Toast[];
|
|
65
65
|
onDismissToast?: (id: string) => void;
|
|
66
66
|
};
|
|
67
67
|
|
|
@@ -5,10 +5,11 @@
|
|
|
5
5
|
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
6
|
import React from 'react';
|
|
7
7
|
|
|
8
|
-
import { Capability,
|
|
8
|
+
import { Capability, Plugin } from '@dxos/app-framework';
|
|
9
9
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
10
|
+
import { AppActivationEvents } from '@dxos/app-toolkit';
|
|
10
11
|
import { corePlugins } from '@dxos/plugin-testing';
|
|
11
|
-
import { withTheme } from '@dxos/react-ui/testing';
|
|
12
|
+
import { withLayout, withTheme } from '@dxos/react-ui/testing';
|
|
12
13
|
import { Stack } from '@dxos/react-ui-stack';
|
|
13
14
|
|
|
14
15
|
import { DeckState } from '../../capabilities';
|
|
@@ -20,14 +21,14 @@ import { Plank } from './Plank';
|
|
|
20
21
|
const TestPlugin = Plugin.define(pluginMeta).pipe(
|
|
21
22
|
Plugin.addModule({
|
|
22
23
|
id: Capability.getModuleTag(DeckState),
|
|
23
|
-
activatesOn:
|
|
24
|
+
activatesOn: AppActivationEvents.AppGraphReady,
|
|
24
25
|
activate: () => DeckState(),
|
|
25
26
|
}),
|
|
26
27
|
Plugin.make,
|
|
27
28
|
);
|
|
28
29
|
|
|
29
30
|
const meta = {
|
|
30
|
-
title: 'plugins/plugin-deck/Plank',
|
|
31
|
+
title: 'plugins/plugin-deck/components/Plank',
|
|
31
32
|
component: Plank,
|
|
32
33
|
render: (args) => {
|
|
33
34
|
return (
|
|
@@ -37,7 +38,8 @@ const meta = {
|
|
|
37
38
|
);
|
|
38
39
|
},
|
|
39
40
|
decorators: [
|
|
40
|
-
withTheme,
|
|
41
|
+
withTheme(),
|
|
42
|
+
withLayout({ layout: 'fullscreen' }),
|
|
41
43
|
withPluginManager({
|
|
42
44
|
plugins: [...corePlugins(), TestPlugin()],
|
|
43
45
|
}),
|