@dxos/plugin-deck 0.7.5-labs.e27f9b9 → 0.7.5-main.2567c87
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/{app-graph-builder-CI6ZFMNL.mjs → app-graph-builder-67VRUD5K.mjs} +31 -57
- package/dist/lib/browser/app-graph-builder-67VRUD5K.mjs.map +7 -0
- package/dist/lib/browser/{check-app-scheme-S3EYUPMF.mjs → check-app-scheme-GEX6W2R5.mjs} +3 -3
- package/dist/lib/browser/{check-app-scheme-S3EYUPMF.mjs.map → check-app-scheme-GEX6W2R5.mjs.map} +2 -2
- package/dist/lib/browser/chunk-2M4PXYNB.mjs +1052 -0
- package/dist/lib/browser/chunk-2M4PXYNB.mjs.map +7 -0
- package/dist/lib/browser/chunk-2PJNBVCY.mjs +39 -0
- package/dist/lib/browser/chunk-2PJNBVCY.mjs.map +7 -0
- package/dist/lib/browser/chunk-4C2AFTET.mjs +186 -0
- package/dist/lib/browser/chunk-4C2AFTET.mjs.map +7 -0
- package/dist/lib/browser/{chunk-YQ2GWTDU.mjs → chunk-5VFDMW5M.mjs} +2 -2
- package/dist/lib/browser/chunk-5VFDMW5M.mjs.map +7 -0
- package/dist/lib/browser/{chunk-N7TEPFVR.mjs → chunk-JQJ5UWVB.mjs} +2 -3
- package/dist/lib/browser/{chunk-N7TEPFVR.mjs.map → chunk-JQJ5UWVB.mjs.map} +3 -3
- package/dist/lib/browser/chunk-KY5WXIXY.mjs +44 -0
- package/dist/lib/browser/chunk-KY5WXIXY.mjs.map +7 -0
- package/dist/lib/browser/deck-PLCSKPGL.mjs +26 -0
- package/dist/lib/browser/deck-PLCSKPGL.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +76 -36
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/intent-resolver-FVOQSTBX.mjs +152 -0
- package/dist/lib/browser/intent-resolver-FVOQSTBX.mjs.map +7 -0
- package/dist/lib/browser/intent-resolver-K7GW4A2I.mjs +249 -0
- package/dist/lib/browser/intent-resolver-K7GW4A2I.mjs.map +7 -0
- package/dist/lib/browser/location-QHRBQBQN.mjs +35 -0
- package/dist/lib/browser/location-QHRBQBQN.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/react-context-3BDW7W2N.mjs +32 -0
- package/dist/lib/browser/react-context-3BDW7W2N.mjs.map +7 -0
- package/dist/lib/browser/{react-root-HIHLRMCW.mjs → react-root-UL7ZDRVZ.mjs} +14 -10
- package/dist/lib/browser/react-root-UL7ZDRVZ.mjs.map +7 -0
- package/dist/lib/browser/react-surface-VPNOGGNN.mjs +28 -0
- package/dist/lib/browser/react-surface-VPNOGGNN.mjs.map +7 -0
- package/dist/lib/browser/{settings-WACNLCPB.mjs → settings-FNWW6WIJ.mjs} +7 -6
- package/dist/lib/browser/settings-FNWW6WIJ.mjs.map +7 -0
- package/dist/lib/browser/state-7I5BD7SE.mjs +34 -0
- package/dist/lib/browser/state-7I5BD7SE.mjs.map +7 -0
- package/dist/lib/browser/types.mjs +4 -16
- package/dist/lib/browser/url-handler-Z5B7LD3N.mjs +76 -0
- package/dist/lib/browser/url-handler-Z5B7LD3N.mjs.map +7 -0
- package/dist/types/src/DeckPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +3 -132
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +3 -188
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/{app-graph-builder.d.ts → layout/app-graph-builder.d.ts} +22 -22
- package/dist/types/src/capabilities/layout/app-graph-builder.d.ts.map +1 -0
- package/dist/types/src/capabilities/layout/deck.d.ts +4 -0
- package/dist/types/src/capabilities/layout/deck.d.ts.map +1 -0
- package/dist/types/src/capabilities/layout/index.d.ts +229 -0
- package/dist/types/src/capabilities/layout/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/layout/intent-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/layout/react-context.d.ts +8 -0
- package/dist/types/src/capabilities/layout/react-context.d.ts.map +1 -0
- package/dist/types/src/capabilities/layout/react-root.d.ts.map +1 -0
- package/dist/types/src/capabilities/layout/state.d.ts +42 -0
- package/dist/types/src/capabilities/layout/state.d.ts.map +1 -0
- package/dist/types/src/capabilities/navigation/check-app-scheme.d.ts.map +1 -0
- package/dist/types/src/capabilities/navigation/index.d.ts +5 -0
- package/dist/types/src/capabilities/navigation/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/navigation/intent-resolver.d.ts +4 -0
- package/dist/types/src/capabilities/navigation/intent-resolver.d.ts.map +1 -0
- package/dist/types/src/capabilities/navigation/location.d.ts +4 -0
- package/dist/types/src/capabilities/navigation/location.d.ts.map +1 -0
- package/dist/types/src/capabilities/navigation/set-location.d.ts +10 -0
- package/dist/types/src/capabilities/navigation/set-location.d.ts.map +1 -0
- package/dist/types/src/capabilities/navigation/url-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/index.d.ts +3 -0
- package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/react-surface.d.ts.map +1 -0
- package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
- package/dist/types/src/components/DeckContext.d.ts +11 -0
- package/dist/types/src/components/DeckContext.d.ts.map +1 -0
- package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/ComplementarySidebar.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts +4 -1
- package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Fullscreen.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/NodePlankHeading.d.ts +3 -3
- package/dist/types/src/components/DeckLayout/NodePlankHeading.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Plank.d.ts +6 -8
- package/dist/types/src/components/DeckLayout/Plank.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/PlankControls.d.ts +2 -2
- package/dist/types/src/components/DeckLayout/PlankControls.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/PlankError.d.ts +3 -4
- package/dist/types/src/components/DeckLayout/PlankError.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Sidebar.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/SidebarButton.d.ts +3 -5
- package/dist/types/src/components/DeckLayout/SidebarButton.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +1 -1
- package/dist/types/src/components/DeckLayout/Toast.d.ts +2 -2
- package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
- package/dist/types/src/components/LayoutContext.d.ts +5 -0
- package/dist/types/src/components/LayoutContext.d.ts.map +1 -0
- package/dist/types/src/components/fragments.d.ts +0 -2
- package/dist/types/src/components/fragments.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +2 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useMainSize.d.ts +2 -2
- package/dist/types/src/layout.d.ts +19 -5
- package/dist/types/src/layout.d.ts.map +1 -1
- package/dist/types/src/layout.test.d.ts +2 -0
- package/dist/types/src/layout.test.d.ts.map +1 -0
- package/dist/types/src/meta.d.ts +0 -1
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +3 -3
- package/dist/types/src/types.d.ts +2 -107
- package/dist/types/src/types.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +1 -2
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/layout-parts.d.ts +7 -0
- package/dist/types/src/util/layout-parts.d.ts.map +1 -0
- package/dist/types/src/util/useHoistStatusbar.d.ts.map +1 -1
- package/package.json +31 -32
- package/src/DeckPlugin.ts +57 -17
- package/src/capabilities/capabilities.ts +3 -4
- package/src/capabilities/index.ts +3 -12
- package/src/capabilities/{app-graph-builder.ts → layout/app-graph-builder.ts} +28 -36
- package/src/capabilities/layout/deck.ts +25 -0
- package/src/capabilities/layout/index.ts +12 -0
- package/src/capabilities/layout/intent-resolver.ts +128 -0
- package/src/capabilities/layout/react-context.tsx +26 -0
- package/src/capabilities/{react-root.tsx → layout/react-root.tsx} +11 -7
- package/src/capabilities/layout/state.ts +32 -0
- package/src/capabilities/{check-app-scheme.ts → navigation/check-app-scheme.ts} +2 -2
- package/src/capabilities/navigation/index.ts +10 -0
- package/src/capabilities/navigation/intent-resolver.ts +216 -0
- package/src/capabilities/navigation/location.ts +28 -0
- package/src/capabilities/navigation/set-location.ts +38 -0
- package/src/capabilities/navigation/url-handler.ts +67 -0
- package/src/capabilities/settings/index.ts +8 -0
- package/src/capabilities/settings/react-surface.tsx +23 -0
- package/src/capabilities/{settings.ts → settings/settings.ts} +5 -4
- package/src/components/DeckContext.ts +19 -0
- package/src/components/DeckLayout/ActiveNode.tsx +3 -2
- package/src/components/DeckLayout/ComplementarySidebar.tsx +69 -120
- package/src/components/DeckLayout/ContentEmpty.tsx +10 -7
- package/src/components/DeckLayout/DeckLayout.tsx +61 -103
- package/src/components/DeckLayout/Fullscreen.tsx +3 -2
- package/src/components/DeckLayout/NodePlankHeading.tsx +65 -57
- package/src/components/DeckLayout/Plank.tsx +41 -32
- package/src/components/DeckLayout/PlankControls.tsx +10 -11
- package/src/components/DeckLayout/PlankError.tsx +5 -6
- package/src/components/DeckLayout/Sidebar.tsx +20 -17
- package/src/components/DeckLayout/SidebarButton.tsx +31 -25
- package/src/components/DeckLayout/StatusBar.tsx +11 -5
- package/src/components/DeckLayout/Toast.tsx +2 -2
- package/src/components/LayoutContext.ts +12 -0
- package/src/components/LayoutSettings.tsx +8 -8
- package/src/components/fragments.ts +0 -8
- package/src/components/index.ts +2 -0
- package/src/hooks/useMainSize.ts +3 -3
- package/src/layout.test.ts +380 -0
- package/src/layout.ts +212 -43
- package/src/meta.ts +0 -1
- package/src/translations.ts +8 -8
- package/src/types.ts +2 -88
- package/src/util/index.ts +1 -2
- package/src/util/layout-parts.ts +12 -0
- package/src/util/useHoistStatusbar.ts +8 -17
- package/dist/lib/browser/app-graph-builder-CI6ZFMNL.mjs.map +0 -7
- package/dist/lib/browser/chunk-BTDY6SES.mjs +0 -1119
- package/dist/lib/browser/chunk-BTDY6SES.mjs.map +0 -7
- package/dist/lib/browser/chunk-FZOBKOA2.mjs +0 -24
- package/dist/lib/browser/chunk-FZOBKOA2.mjs.map +0 -7
- package/dist/lib/browser/chunk-M2L53AIH.mjs +0 -126
- package/dist/lib/browser/chunk-M2L53AIH.mjs.map +0 -7
- package/dist/lib/browser/chunk-YQ2GWTDU.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-CSXFDKTC.mjs +0 -494
- package/dist/lib/browser/intent-resolver-CSXFDKTC.mjs.map +0 -7
- package/dist/lib/browser/react-root-HIHLRMCW.mjs.map +0 -7
- package/dist/lib/browser/react-surface-4QVWKQYY.mjs +0 -38
- package/dist/lib/browser/react-surface-4QVWKQYY.mjs.map +0 -7
- package/dist/lib/browser/settings-WACNLCPB.mjs.map +0 -7
- package/dist/lib/browser/state-VPOYUKK6.mjs +0 -117
- package/dist/lib/browser/state-VPOYUKK6.mjs.map +0 -7
- package/dist/lib/browser/tools-5LDJNU56.mjs +0 -51
- package/dist/lib/browser/tools-5LDJNU56.mjs.map +0 -7
- package/dist/lib/browser/url-handler-HLF42IHP.mjs +0 -70
- package/dist/lib/browser/url-handler-HLF42IHP.mjs.map +0 -7
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
- package/dist/types/src/capabilities/check-app-scheme.d.ts.map +0 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-root.d.ts.map +0 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
- package/dist/types/src/capabilities/set-active.d.ts +0 -9
- package/dist/types/src/capabilities/set-active.d.ts.map +0 -1
- package/dist/types/src/capabilities/settings.d.ts.map +0 -1
- package/dist/types/src/capabilities/state.d.ts +0 -76
- package/dist/types/src/capabilities/state.d.ts.map +0 -1
- package/dist/types/src/capabilities/tools.d.ts +0 -10
- package/dist/types/src/capabilities/tools.d.ts.map +0 -1
- package/dist/types/src/capabilities/url-handler.d.ts.map +0 -1
- package/dist/types/src/util/layoutAppliesTopbar.d.ts +0 -2
- package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +0 -1
- package/src/capabilities/intent-resolver.ts +0 -350
- package/src/capabilities/react-surface.tsx +0 -31
- package/src/capabilities/set-active.ts +0 -43
- package/src/capabilities/state.ts +0 -102
- package/src/capabilities/tools.ts +0 -61
- package/src/capabilities/url-handler.ts +0 -63
- package/src/util/layoutAppliesTopbar.ts +0 -7
- /package/dist/types/src/capabilities/{intent-resolver.d.ts → layout/intent-resolver.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-root.d.ts → layout/react-root.d.ts} +0 -0
- /package/dist/types/src/capabilities/{check-app-scheme.d.ts → navigation/check-app-scheme.d.ts} +0 -0
- /package/dist/types/src/capabilities/{url-handler.d.ts → navigation/url-handler.d.ts} +0 -0
- /package/dist/types/src/capabilities/{react-surface.d.ts → settings/react-surface.d.ts} +0 -0
- /package/dist/types/src/capabilities/{settings.d.ts → settings/settings.d.ts} +0 -0
package/src/layout.ts
CHANGED
|
@@ -4,76 +4,245 @@
|
|
|
4
4
|
|
|
5
5
|
import { produce } from 'immer';
|
|
6
6
|
|
|
7
|
-
import {
|
|
7
|
+
import {
|
|
8
|
+
type LayoutAdjustment,
|
|
9
|
+
type LayoutCoordinate,
|
|
10
|
+
type LayoutEntry,
|
|
11
|
+
type LayoutPart,
|
|
12
|
+
type LayoutParts,
|
|
13
|
+
SLUG_ENTRY_SEPARATOR,
|
|
14
|
+
SLUG_KEY_VALUE_SEPARATOR,
|
|
15
|
+
SLUG_LIST_SEPARATOR,
|
|
16
|
+
SLUG_PATH_SEPARATOR,
|
|
17
|
+
} from '@dxos/app-framework';
|
|
8
18
|
|
|
9
|
-
|
|
19
|
+
import { type NewPlankPositioning } from './types';
|
|
10
20
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
21
|
+
// Part feature support
|
|
22
|
+
const partsThatSupportIncrement = ['main'] as LayoutPart[];
|
|
23
|
+
|
|
24
|
+
//
|
|
25
|
+
// --- Layout Parts Manipulation ----------------------------------------------
|
|
17
26
|
|
|
18
|
-
|
|
19
|
-
const plankPositioning = options?.positioning ?? 'start';
|
|
20
|
-
const pivotId = options?.pivotId;
|
|
27
|
+
type OpenLayoutEntryOptions = { positioning?: NewPlankPositioning; pivotId?: string };
|
|
21
28
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
29
|
+
export const openEntry = (
|
|
30
|
+
layout: LayoutParts,
|
|
31
|
+
part: LayoutPart,
|
|
32
|
+
entry: LayoutEntry,
|
|
33
|
+
options?: OpenLayoutEntryOptions,
|
|
34
|
+
): LayoutParts => {
|
|
35
|
+
return produce(layout, (draft) => {
|
|
36
|
+
const layoutPart = draft[part];
|
|
37
|
+
// If the part doesn't exist, create it.
|
|
38
|
+
if (!layoutPart) {
|
|
39
|
+
draft[part] = [entry];
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
if (part === 'main') {
|
|
43
|
+
// Check that the entry is not already in the part
|
|
44
|
+
if (layoutPart.find((e) => e.id === entry.id)) {
|
|
26
45
|
return;
|
|
27
46
|
}
|
|
28
|
-
}
|
|
29
47
|
|
|
30
|
-
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
48
|
+
const plankPositioning = options?.positioning ?? 'start';
|
|
49
|
+
const pivotId = options?.pivotId;
|
|
50
|
+
|
|
51
|
+
if (pivotId) {
|
|
52
|
+
const pivotIndex = layoutPart.findIndex((e) => e.id === pivotId);
|
|
53
|
+
if (pivotIndex !== -1) {
|
|
54
|
+
if (plankPositioning === 'start') {
|
|
55
|
+
layoutPart.splice(pivotIndex, 0, entry);
|
|
56
|
+
} else {
|
|
57
|
+
layoutPart.splice(pivotIndex + 1, 0, entry);
|
|
58
|
+
}
|
|
59
|
+
return;
|
|
37
60
|
}
|
|
38
|
-
return;
|
|
39
61
|
}
|
|
40
|
-
}
|
|
41
62
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
63
|
+
// If no pivot found or provided, fall back to original behavior
|
|
64
|
+
if (plankPositioning === 'start') {
|
|
65
|
+
layoutPart.unshift(entry);
|
|
66
|
+
} else {
|
|
67
|
+
layoutPart.push(entry);
|
|
68
|
+
}
|
|
45
69
|
} else {
|
|
46
|
-
|
|
70
|
+
// If the part is not main, we're going to replace the single entry in the part with the new entry.
|
|
71
|
+
draft[part] = [entry];
|
|
47
72
|
}
|
|
48
73
|
});
|
|
49
74
|
};
|
|
50
75
|
|
|
51
|
-
export const closeEntry = (
|
|
52
|
-
return produce(
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
76
|
+
export const closeEntry = (layout: LayoutParts, layoutCoordinate: LayoutCoordinate): LayoutParts => {
|
|
77
|
+
return produce(layout, (draft) => {
|
|
78
|
+
const { part, entryId: slugId } = layoutCoordinate;
|
|
79
|
+
const layoutPart = draft[part];
|
|
80
|
+
if (!layoutPart) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const index = layoutPart.findIndex((entry) => entry.id === slugId);
|
|
85
|
+
if (index === -1) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// If there's only one entry in the layout part, remove the whole part from the layout.
|
|
90
|
+
if (layoutPart.length === 1) {
|
|
91
|
+
delete draft[part];
|
|
92
|
+
} else {
|
|
93
|
+
layoutPart.splice(index, 1);
|
|
56
94
|
}
|
|
57
95
|
});
|
|
58
96
|
};
|
|
59
97
|
|
|
60
|
-
export const incrementPlank = (
|
|
61
|
-
return produce(
|
|
62
|
-
const
|
|
98
|
+
export const incrementPlank = (layout: LayoutParts, adjustment: LayoutAdjustment): LayoutParts => {
|
|
99
|
+
return produce(layout, (draft) => {
|
|
100
|
+
const { layoutCoordinate, type } = adjustment;
|
|
101
|
+
const { part, entryId } = layoutCoordinate;
|
|
102
|
+
|
|
103
|
+
// Only allow adjustments in the 'main' part
|
|
104
|
+
if (partsThatSupportIncrement.includes(part) === false) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
const layoutPart = draft[part];
|
|
109
|
+
if (!layoutPart) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const index = layoutPart.findIndex((entry) => entry.id === entryId);
|
|
63
113
|
if (
|
|
64
114
|
index === -1 ||
|
|
65
|
-
(
|
|
66
|
-
(
|
|
115
|
+
(type === 'increment-start' && index === 0) ||
|
|
116
|
+
(type === 'increment-end' && index === layoutPart.length - 1)
|
|
67
117
|
) {
|
|
68
118
|
return;
|
|
69
119
|
}
|
|
70
120
|
|
|
71
|
-
if (
|
|
121
|
+
if (type === 'increment-start') {
|
|
72
122
|
// Swap the current item with the previous item.
|
|
73
|
-
[
|
|
74
|
-
} else if (
|
|
123
|
+
[layoutPart[index - 1], layoutPart[index]] = [layoutPart[index], layoutPart[index - 1]];
|
|
124
|
+
} else if (type === 'increment-end') {
|
|
75
125
|
// Swap the current item with the next item.
|
|
76
|
-
[
|
|
126
|
+
[layoutPart[index], layoutPart[index + 1]] = [layoutPart[index + 1], layoutPart[index]];
|
|
77
127
|
}
|
|
78
128
|
});
|
|
79
129
|
};
|
|
130
|
+
|
|
131
|
+
export const removePart = (layout: LayoutParts, part: LayoutPart): LayoutParts => {
|
|
132
|
+
return produce(layout, (draft) => {
|
|
133
|
+
delete draft[part];
|
|
134
|
+
});
|
|
135
|
+
};
|
|
136
|
+
|
|
137
|
+
export const mergeLayoutParts = (...layoutParts: LayoutParts[]): LayoutParts => {
|
|
138
|
+
return layoutParts.reduce(
|
|
139
|
+
(merged, current) =>
|
|
140
|
+
produce(merged, (draft) => {
|
|
141
|
+
Object.entries(current).forEach(([part, entries]) => {
|
|
142
|
+
const typedPart = part as LayoutPart;
|
|
143
|
+
|
|
144
|
+
if (!draft[typedPart]) {
|
|
145
|
+
draft[typedPart] = [];
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
const partEntries = draft[typedPart] as LayoutEntry[];
|
|
149
|
+
|
|
150
|
+
entries.forEach((entry) => {
|
|
151
|
+
const existingIndex = partEntries.findIndex((e) => e.id === entry.id);
|
|
152
|
+
if (existingIndex !== -1) {
|
|
153
|
+
partEntries[existingIndex] = entry;
|
|
154
|
+
} else {
|
|
155
|
+
partEntries.push(entry);
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
});
|
|
159
|
+
}),
|
|
160
|
+
{} as LayoutParts,
|
|
161
|
+
);
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
//
|
|
165
|
+
// URI Projection
|
|
166
|
+
//
|
|
167
|
+
|
|
168
|
+
const parseLayoutEntry = (itemString: string): LayoutEntry => {
|
|
169
|
+
// Layout entries are in the form of 'id~path' or just 'id'
|
|
170
|
+
const [id, path] = itemString.split(SLUG_PATH_SEPARATOR);
|
|
171
|
+
const entry: LayoutEntry = { id };
|
|
172
|
+
if (path) {
|
|
173
|
+
entry.path = path;
|
|
174
|
+
}
|
|
175
|
+
return entry;
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
export const uriToSoloPart = (uri: string): LayoutParts | undefined => {
|
|
179
|
+
// Now after the domain part, there will be a single ID with an optional path
|
|
180
|
+
const parts = uri.split('/');
|
|
181
|
+
const slug = parts[parts.length - 1]; // Take the last part of the URI
|
|
182
|
+
|
|
183
|
+
if (slug.length > 0) {
|
|
184
|
+
return {
|
|
185
|
+
solo: [parseLayoutEntry(slug)],
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return undefined;
|
|
190
|
+
};
|
|
191
|
+
|
|
192
|
+
export const soloPartToUri = (layout: LayoutParts): string => {
|
|
193
|
+
const soloPart = layout?.solo;
|
|
194
|
+
if (!soloPart || soloPart.length === 0) {
|
|
195
|
+
return '';
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const entry = soloPart[0];
|
|
199
|
+
return `${entry.id}${entry.path ? SLUG_PATH_SEPARATOR + entry.path : ''}`;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
/**
|
|
203
|
+
* Converts a URI string into a LayoutParts object.
|
|
204
|
+
* @deprecated Keeping these as a reference for now. We should remove these once we're sure we don't need them.
|
|
205
|
+
*/
|
|
206
|
+
export const uriToActiveParts = (uri: string): LayoutParts => {
|
|
207
|
+
const parts = uri.split('/');
|
|
208
|
+
const slug = parts[parts.length - 1]; // Take the last part of the URI
|
|
209
|
+
|
|
210
|
+
if (!slug) {
|
|
211
|
+
return {}; // Return an empty object if the slug is empty
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return slug.split(SLUG_ENTRY_SEPARATOR).reduce((acc: LayoutParts, partDescriptor) => {
|
|
215
|
+
const [part, layoutEntry] = partDescriptor.split(SLUG_KEY_VALUE_SEPARATOR);
|
|
216
|
+
if (part && layoutEntry) {
|
|
217
|
+
// TODO(Zan): Remove this cast.
|
|
218
|
+
acc[part as LayoutPart] = layoutEntry.split(SLUG_LIST_SEPARATOR).map(parseLayoutEntry);
|
|
219
|
+
}
|
|
220
|
+
return acc;
|
|
221
|
+
}, {} as LayoutParts);
|
|
222
|
+
};
|
|
223
|
+
|
|
224
|
+
const formatLayoutEntry = ({ id, path }: LayoutEntry): string => {
|
|
225
|
+
// NOTE(Zan): Format = `[SOLO_INDICATOR] ID [PATH_SEPARATOR PATH]`.
|
|
226
|
+
let entry = '';
|
|
227
|
+
entry += id;
|
|
228
|
+
if (path) {
|
|
229
|
+
entry += `${SLUG_PATH_SEPARATOR}${path}`;
|
|
230
|
+
}
|
|
231
|
+
return entry;
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
const formatPartDescriptor = (part: LayoutPart, layoutEntries: LayoutEntry[]): string => {
|
|
235
|
+
const formattedEntries = layoutEntries.map(formatLayoutEntry).join(SLUG_LIST_SEPARATOR);
|
|
236
|
+
return `${part}${SLUG_KEY_VALUE_SEPARATOR}${formattedEntries}`;
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* Converts a LayoutParts object into a URI string.
|
|
241
|
+
* @deprecated Keeping these as a reference for now. We should remove these once we're sure we don't need them.
|
|
242
|
+
*/
|
|
243
|
+
export const activePartsToUri = (activeParts: LayoutParts): string => {
|
|
244
|
+
return Object.entries(activeParts)
|
|
245
|
+
.filter(([, layoutEntries]) => layoutEntries.length > 0) // Only include non-empty parts
|
|
246
|
+
.map(([part, layoutEntries]) => formatPartDescriptor(part as LayoutPart, layoutEntries))
|
|
247
|
+
.join(SLUG_ENTRY_SEPARATOR);
|
|
248
|
+
};
|
package/src/meta.ts
CHANGED
package/src/translations.ts
CHANGED
|
@@ -8,12 +8,11 @@ export default [
|
|
|
8
8
|
{
|
|
9
9
|
'en-US': {
|
|
10
10
|
[DECK_PLUGIN]: {
|
|
11
|
-
'plugin name': 'Deck',
|
|
12
11
|
'main header label': 'Main header',
|
|
13
|
-
'open navigation sidebar label': 'Open sidebar',
|
|
14
|
-
'
|
|
15
|
-
'open complementary sidebar label': 'Open
|
|
16
|
-
'close complementary sidebar label': 'Minimize
|
|
12
|
+
'open navigation sidebar label': 'Open navigation sidebar',
|
|
13
|
+
'close navigation sidebar label': 'Minimize navigation sidebar',
|
|
14
|
+
'open complementary sidebar label': 'Open sidebar',
|
|
15
|
+
'close complementary sidebar label': 'Minimize sidebar',
|
|
17
16
|
'plugin error message': 'Content failed to render.',
|
|
18
17
|
'content fallback message': 'Unsupported',
|
|
19
18
|
'content fallback description':
|
|
@@ -21,6 +20,7 @@ export default [
|
|
|
21
20
|
'toggle fullscreen label': 'Toggle fullscreen',
|
|
22
21
|
'settings show hints label': 'Show hints',
|
|
23
22
|
'settings native redirect label': 'Enable native url redirect (experimental)',
|
|
23
|
+
'settings custom slots': 'Theme option (experimental)',
|
|
24
24
|
'settings new plank position start label': 'Start',
|
|
25
25
|
'settings new plank position end label': 'End',
|
|
26
26
|
'select new plank positioning placeholder': 'Select new plank positioning',
|
|
@@ -32,7 +32,7 @@ export default [
|
|
|
32
32
|
'error fallback message': 'Unable to open this item',
|
|
33
33
|
'plank heading fallback label': 'Untitled',
|
|
34
34
|
'actions menu label': 'Options',
|
|
35
|
-
'settings deck label': 'Disable
|
|
35
|
+
'settings deck label': 'Disable Deck',
|
|
36
36
|
'reload required message': 'Reload required.',
|
|
37
37
|
'pending heading': 'Loading…',
|
|
38
38
|
'insert plank label': 'Open',
|
|
@@ -45,11 +45,11 @@ export default [
|
|
|
45
45
|
'show solo plank label': 'Maximize',
|
|
46
46
|
'close label': 'Close',
|
|
47
47
|
'minify label': 'Minify',
|
|
48
|
-
'settings overscroll label': 'Plank
|
|
48
|
+
'settings overscroll label': 'Plank Overscrolling',
|
|
49
49
|
'select overscroll placeholder': 'Select plank overscrolling behavior',
|
|
50
50
|
'settings overscroll centering label': 'Centering',
|
|
51
51
|
'settings overscroll none label': 'None',
|
|
52
|
-
'settings
|
|
52
|
+
'settings flat deck': 'Flatten deck appearance',
|
|
53
53
|
'close current label': 'Close current plank',
|
|
54
54
|
'close others label': 'Close other planks',
|
|
55
55
|
'close all label': 'Close all planks',
|
package/src/types.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { LayoutAction } from '@dxos/app-framework';
|
|
6
5
|
import { S } from '@dxos/echo-schema';
|
|
7
6
|
import { type Label } from '@dxos/react-ui';
|
|
8
7
|
|
|
@@ -21,8 +20,9 @@ export type Panel = { id: string; label: Label; icon: string };
|
|
|
21
20
|
export const DeckSettingsSchema = S.mutable(
|
|
22
21
|
S.Struct({
|
|
23
22
|
showHints: S.Boolean,
|
|
23
|
+
customSlots: S.Boolean,
|
|
24
|
+
flatDeck: S.Boolean,
|
|
24
25
|
enableNativeRedirect: S.Boolean,
|
|
25
|
-
enableIdeStyleStatusbar: S.Boolean,
|
|
26
26
|
newPlankPositioning: S.Literal(...NewPlankPositions),
|
|
27
27
|
overscroll: S.Literal(...OverscrollOptions),
|
|
28
28
|
}),
|
|
@@ -30,95 +30,9 @@ export const DeckSettingsSchema = S.mutable(
|
|
|
30
30
|
|
|
31
31
|
export type DeckSettingsProps = S.Schema.Type<typeof DeckSettingsSchema>;
|
|
32
32
|
|
|
33
|
-
const LayoutMode = S.Union(S.Literal('deck'), S.Literal('solo'), S.Literal('fullscreen'));
|
|
34
|
-
export const isLayoutMode = (value: any): value is LayoutMode => S.is(LayoutMode)(value);
|
|
35
|
-
export type LayoutMode = S.Schema.Type<typeof LayoutMode>;
|
|
36
|
-
|
|
37
|
-
export const PlankSizing = S.Record({ key: S.String, value: S.Number });
|
|
38
|
-
export type PlankSizing = S.Schema.Type<typeof PlankSizing>;
|
|
39
|
-
|
|
40
|
-
export const Deck = S.Struct({
|
|
41
|
-
initialized: S.Boolean.annotations({
|
|
42
|
-
description: "If false, the deck has not yet left solo mode and new planks should be solo'd.",
|
|
43
|
-
}),
|
|
44
|
-
active: S.mutable(S.Array(S.String)),
|
|
45
|
-
inactive: S.mutable(S.Array(S.String)),
|
|
46
|
-
solo: S.optional(S.String),
|
|
47
|
-
fullscreen: S.Boolean,
|
|
48
|
-
plankSizing: S.mutable(PlankSizing),
|
|
49
|
-
});
|
|
50
|
-
export type Deck = S.Schema.Type<typeof Deck>;
|
|
51
|
-
|
|
52
|
-
export const DeckState = S.mutable(
|
|
53
|
-
S.Struct({
|
|
54
|
-
sidebarState: S.Literal('closed', 'collapsed', 'expanded'),
|
|
55
|
-
complementarySidebarState: S.Literal('closed', 'collapsed', 'expanded'),
|
|
56
|
-
complementarySidebarPanel: S.optional(S.String),
|
|
57
|
-
|
|
58
|
-
dialogOpen: S.Boolean,
|
|
59
|
-
/**
|
|
60
|
-
* Data to be passed to the dialog Surface.
|
|
61
|
-
*/
|
|
62
|
-
dialogContent: S.optional(S.Any),
|
|
63
|
-
dialogBlockAlign: S.optional(S.Literal('start', 'center')),
|
|
64
|
-
dialogType: S.optional(S.Literal('default', 'alert')),
|
|
65
|
-
|
|
66
|
-
popoverOpen: S.Boolean,
|
|
67
|
-
/**
|
|
68
|
-
* Data to be passed to the popover Surface.
|
|
69
|
-
*/
|
|
70
|
-
popoverContent: S.optional(S.Any),
|
|
71
|
-
popoverAnchorId: S.optional(S.String),
|
|
72
|
-
|
|
73
|
-
toasts: S.mutable(S.Array(LayoutAction.Toast)),
|
|
74
|
-
currentUndoId: S.optional(S.String),
|
|
75
|
-
|
|
76
|
-
activeDeck: S.String,
|
|
77
|
-
decks: S.mutable(S.Record({ key: S.String, value: S.mutable(Deck) })),
|
|
78
|
-
previousMode: S.mutable(S.Record({ key: S.String, value: LayoutMode })),
|
|
79
|
-
deck: S.mutable(Deck),
|
|
80
|
-
|
|
81
|
-
/**
|
|
82
|
-
* The identifier of a component to scroll into view when it is mounted.
|
|
83
|
-
*/
|
|
84
|
-
scrollIntoView: S.optional(S.String),
|
|
85
|
-
}),
|
|
86
|
-
);
|
|
87
|
-
|
|
88
|
-
export type DeckState = S.Schema.Type<typeof DeckState>;
|
|
89
|
-
|
|
90
|
-
export const getMode = (deck: Deck): LayoutMode => {
|
|
91
|
-
if (deck.solo) {
|
|
92
|
-
return deck.fullscreen ? 'fullscreen' : 'solo';
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return 'deck';
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
// NOTE: Chosen from RFC 1738’s `safe` characters: http://www.faqs.org/rfcs/rfc1738.html
|
|
99
|
-
export const SLUG_PATH_SEPARATOR = '~';
|
|
100
|
-
|
|
101
33
|
export const DECK_ACTION = `${DECK_PLUGIN}/action`;
|
|
102
34
|
|
|
103
35
|
export namespace DeckAction {
|
|
104
|
-
const PartAdjustmentSchema = S.Union(
|
|
105
|
-
S.Literal('close').annotations({ description: 'Close the plank.' }),
|
|
106
|
-
S.Literal('solo').annotations({ description: 'Solo the plank.' }),
|
|
107
|
-
S.Literal('increment-start').annotations({ description: 'Move the plank towards the start of the deck.' }),
|
|
108
|
-
S.Literal('increment-end').annotations({ description: 'Move the plank towards the end of the deck.' }),
|
|
109
|
-
);
|
|
110
|
-
export type PartAdjustment = S.Schema.Type<typeof PartAdjustmentSchema>;
|
|
111
|
-
export const Adjustment = S.mutable(S.Struct({ id: S.String, type: PartAdjustmentSchema }));
|
|
112
|
-
export type Adjustment = S.Schema.Type<typeof Adjustment>;
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* An atomic transaction to apply to the deck, describing which element to move to which location.
|
|
116
|
-
*/
|
|
117
|
-
export class Adjust extends S.TaggedClass<Adjust>()(`${DECK_ACTION}/adjust`, {
|
|
118
|
-
input: Adjustment,
|
|
119
|
-
output: S.Void,
|
|
120
|
-
}) {}
|
|
121
|
-
|
|
122
36
|
export class UpdatePlankSize extends S.TaggedClass<UpdatePlankSize>()(`${DECK_ACTION}/update-plank-size`, {
|
|
123
37
|
input: S.Struct({
|
|
124
38
|
id: S.String,
|
package/src/util/index.ts
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2024 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type LayoutMode, type LayoutPart } from '@dxos/app-framework';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* If in solo mode and the part is the main part, open it in solo mode.
|
|
9
|
+
* From the dispatch POV we refer to both 'solo' and 'main' as 'main'.
|
|
10
|
+
*/
|
|
11
|
+
export const getEffectivePart = (partName: LayoutPart, layoutMode: LayoutMode): LayoutPart =>
|
|
12
|
+
layoutMode === 'solo' && partName === 'main' ? 'solo' : partName;
|
|
@@ -2,23 +2,14 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
import { Capabilities, useCapability } from '@dxos/app-framework';
|
|
8
|
-
|
|
9
|
-
import { DECK_PLUGIN } from '../meta';
|
|
10
|
-
import type { DeckSettingsProps } from '../types';
|
|
5
|
+
import { useLayoutEffect, useState } from 'react';
|
|
11
6
|
|
|
12
7
|
export const useHoistStatusbar = (breakpoint: string) => {
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
// see that of composer-app for an example.
|
|
21
|
-
document.body.getAttribute('data-safe-area-bottom') === '0'
|
|
22
|
-
);
|
|
23
|
-
}, [enableIdeStyleStatusbar, breakpoint]);
|
|
8
|
+
const [safeAreaBottom, setSafeAreaBottom] = useState(Infinity);
|
|
9
|
+
useLayoutEffect(
|
|
10
|
+
() =>
|
|
11
|
+
setSafeAreaBottom(parseFloat(getComputedStyle(document.documentElement).getPropertyValue('--safe-area-bottom'))),
|
|
12
|
+
[],
|
|
13
|
+
);
|
|
14
|
+
return Number.isFinite(safeAreaBottom) && safeAreaBottom < 1 && breakpoint === 'desktop';
|
|
24
15
|
};
|
|
@@ -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 { Capabilities, contributes, createIntent, LayoutAction, type PluginsContext } from '@dxos/app-framework';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { createExtension, type Node, ROOT_ID } from '@dxos/plugin-graph';\n\nimport { DeckCapabilities } from './capabilities';\nimport { DECK_PLUGIN } from '../meta';\n\nexport default (context: PluginsContext) =>\n contributes(\n Capabilities.AppGraphBuilder,\n createExtension({\n id: DECK_PLUGIN,\n filter: (node): node is Node<null> => node.id === ROOT_ID,\n actions: () => {\n const state = context.requestCapability(DeckCapabilities.MutableDeckState);\n\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.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'fullscreen' } }));\n },\n properties: {\n label: ['toggle fullscreen label', { ns: DECK_PLUGIN }],\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: `${LayoutAction.Close._tag}/current`,\n data: async () => {\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const attended = attention.current.at(-1);\n if (attended) {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(\n createIntent(LayoutAction.Close, { part: 'main', subject: [attended], options: { state: false } }),\n );\n }\n },\n properties: {\n label: ['close current label', { ns: DECK_PLUGIN }],\n icon: 'ph--x--regular',\n },\n };\n\n const closeOthers = {\n id: `${LayoutAction.Close._tag}/others`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const attended = attention.current.at(-1);\n const ids = state.deck.active.filter((id) => id !== attended) ?? [];\n await dispatch(createIntent(LayoutAction.Close, { part: 'main', subject: ids, options: { state: false } }));\n },\n properties: {\n label: ['close others label', { ns: DECK_PLUGIN }],\n icon: 'ph--x-square--regular',\n },\n };\n\n const closeAll = {\n id: `${LayoutAction.Close._tag}/all`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n await dispatch(\n createIntent(LayoutAction.Close, {\n part: 'main',\n subject: state.deck.active,\n options: { state: false },\n }),\n );\n },\n properties: {\n label: ['close all label', { ns: DECK_PLUGIN }],\n icon: 'ph--x-circle--regular',\n },\n };\n\n const toggleSidebar = {\n id: `${LayoutAction.UpdateSidebar._tag}/nav`,\n data: async () => {\n state.sidebarState = state.sidebarState === 'expanded' ? 'collapsed' : 'expanded';\n },\n properties: {\n label: [\n state.sidebarState === 'expanded' ? 'collapse navigation sidebar label' : 'open navigation sidebar label',\n { ns: DECK_PLUGIN },\n ],\n icon: 'ph--sidebar--regular',\n disposition: 'pin-end',\n l0Breakpoint: 'lg',\n },\n };\n\n return !state.deck.solo ? [closeCurrent, closeOthers, closeAll, toggleSidebar] : [toggleSidebar];\n },\n }),\n );\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "AttentionCapabilities", "createExtension", "ROOT_ID", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "DECK_PLUGIN", "filter", "node", "ROOT_ID", "actions", "state", "requestCapability", "DeckCapabilities", "MutableDeckState", "_fullscreen", "LayoutAction", "UpdateLayout", "_tag", "data", "dispatchPromise", "dispatch", "IntentDispatcher", "createIntent", "SetLayoutMode", "part", "options", "mode", "properties", "label", "ns", "icon", "keyBinding", "macos", "windows", "closeCurrent", "Close", "attention", "AttentionCapabilities", "Attention", "attended", "current", "at", "subject", "closeOthers", "ids", "deck", "active", "closeAll", "toggleSidebar", "UpdateSidebar", "sidebarState", "disposition", "l0Breakpoint", "solo"]
|
|
7
|
-
}
|