@dxos/plugin-deck 0.7.5-main.9cb18ac → 0.7.5-main.9d2a38b

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.
Files changed (161) hide show
  1. package/dist/lib/browser/app-graph-builder-67VRUD5K.mjs +121 -0
  2. package/dist/lib/browser/app-graph-builder-67VRUD5K.mjs.map +7 -0
  3. package/dist/lib/browser/check-app-scheme-GEX6W2R5.mjs +33 -0
  4. package/dist/lib/browser/check-app-scheme-GEX6W2R5.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-2M4PXYNB.mjs +1052 -0
  6. package/dist/lib/browser/chunk-2M4PXYNB.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-2PJNBVCY.mjs +39 -0
  8. package/dist/lib/browser/chunk-2PJNBVCY.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-4C2AFTET.mjs +186 -0
  10. package/dist/lib/browser/chunk-4C2AFTET.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-5VFDMW5M.mjs +17 -0
  12. package/dist/lib/browser/chunk-5VFDMW5M.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-GVOGPULO.mjs → chunk-JQJ5UWVB.mjs} +3 -3
  14. package/dist/lib/browser/chunk-JQJ5UWVB.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-ZC3K6C2W.mjs → chunk-KY5WXIXY.mjs} +11 -4
  16. package/dist/lib/browser/chunk-KY5WXIXY.mjs.map +7 -0
  17. package/dist/lib/browser/deck-PLCSKPGL.mjs +26 -0
  18. package/dist/lib/browser/deck-PLCSKPGL.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +131 -1770
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/intent-resolver-FVOQSTBX.mjs +152 -0
  22. package/dist/lib/browser/intent-resolver-FVOQSTBX.mjs.map +7 -0
  23. package/dist/lib/browser/intent-resolver-K7GW4A2I.mjs +249 -0
  24. package/dist/lib/browser/intent-resolver-K7GW4A2I.mjs.map +7 -0
  25. package/dist/lib/browser/location-QHRBQBQN.mjs +35 -0
  26. package/dist/lib/browser/location-QHRBQBQN.mjs.map +7 -0
  27. package/dist/lib/browser/meta.json +1 -1
  28. package/dist/lib/browser/react-context-3BDW7W2N.mjs +32 -0
  29. package/dist/lib/browser/react-context-3BDW7W2N.mjs.map +7 -0
  30. package/dist/lib/browser/react-root-UL7ZDRVZ.mjs +50 -0
  31. package/dist/lib/browser/react-root-UL7ZDRVZ.mjs.map +7 -0
  32. package/dist/lib/browser/react-surface-VPNOGGNN.mjs +28 -0
  33. package/dist/lib/browser/react-surface-VPNOGGNN.mjs.map +7 -0
  34. package/dist/lib/browser/settings-FNWW6WIJ.mjs +29 -0
  35. package/dist/lib/browser/settings-FNWW6WIJ.mjs.map +7 -0
  36. package/dist/lib/browser/state-7I5BD7SE.mjs +34 -0
  37. package/dist/lib/browser/state-7I5BD7SE.mjs.map +7 -0
  38. package/dist/lib/browser/types.mjs +6 -6
  39. package/dist/lib/browser/url-handler-Z5B7LD3N.mjs +76 -0
  40. package/dist/lib/browser/url-handler-Z5B7LD3N.mjs.map +7 -0
  41. package/dist/types/src/DeckPlugin.d.ts +1 -5
  42. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  43. package/dist/types/src/capabilities/capabilities.d.ts +13 -0
  44. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  45. package/dist/types/src/capabilities/index.d.ts +5 -0
  46. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  47. package/dist/types/src/capabilities/layout/app-graph-builder.d.ts +181 -0
  48. package/dist/types/src/capabilities/layout/app-graph-builder.d.ts.map +1 -0
  49. package/dist/types/src/capabilities/layout/deck.d.ts +4 -0
  50. package/dist/types/src/capabilities/layout/deck.d.ts.map +1 -0
  51. package/dist/types/src/capabilities/layout/index.d.ts +229 -0
  52. package/dist/types/src/capabilities/layout/index.d.ts.map +1 -0
  53. package/dist/types/src/capabilities/layout/intent-resolver.d.ts +4 -0
  54. package/dist/types/src/capabilities/layout/intent-resolver.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/layout/react-context.d.ts +8 -0
  56. package/dist/types/src/capabilities/layout/react-context.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/layout/react-root.d.ts +7 -0
  58. package/dist/types/src/capabilities/layout/react-root.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/layout/state.d.ts +42 -0
  60. package/dist/types/src/capabilities/layout/state.d.ts.map +1 -0
  61. package/dist/types/src/capabilities/navigation/check-app-scheme.d.ts +4 -0
  62. package/dist/types/src/capabilities/navigation/check-app-scheme.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/navigation/index.d.ts +5 -0
  64. package/dist/types/src/capabilities/navigation/index.d.ts.map +1 -0
  65. package/dist/types/src/capabilities/navigation/intent-resolver.d.ts +4 -0
  66. package/dist/types/src/capabilities/navigation/intent-resolver.d.ts.map +1 -0
  67. package/dist/types/src/capabilities/navigation/location.d.ts +4 -0
  68. package/dist/types/src/capabilities/navigation/location.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/navigation/set-location.d.ts +10 -0
  70. package/dist/types/src/capabilities/navigation/set-location.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/navigation/url-handler.d.ts +4 -0
  72. package/dist/types/src/capabilities/navigation/url-handler.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  74. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/settings/react-surface.d.ts +4 -0
  76. package/dist/types/src/capabilities/settings/react-surface.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/settings/settings.d.ts +4 -0
  78. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  79. package/dist/types/src/components/DeckContext.d.ts +3 -0
  80. package/dist/types/src/components/DeckContext.d.ts.map +1 -1
  81. package/dist/types/src/components/DeckLayout/Banner.d.ts +6 -0
  82. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +1 -0
  83. package/dist/types/src/components/DeckLayout/ComplementarySidebar.d.ts.map +1 -1
  84. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
  85. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  86. package/dist/types/src/components/DeckLayout/NodePlankHeading.d.ts.map +1 -1
  87. package/dist/types/src/components/DeckLayout/Plank.d.ts +1 -1
  88. package/dist/types/src/components/DeckLayout/Plank.d.ts.map +1 -1
  89. package/dist/types/src/components/DeckLayout/Sidebar.d.ts +1 -5
  90. package/dist/types/src/components/DeckLayout/Sidebar.d.ts.map +1 -1
  91. package/dist/types/src/components/DeckLayout/SidebarButton.d.ts +6 -0
  92. package/dist/types/src/components/DeckLayout/SidebarButton.d.ts.map +1 -0
  93. package/dist/types/src/components/DeckLayout/Topbar.d.ts +3 -0
  94. package/dist/types/src/components/DeckLayout/Topbar.d.ts.map +1 -0
  95. package/dist/types/src/components/fragments.d.ts +2 -0
  96. package/dist/types/src/components/fragments.d.ts.map +1 -0
  97. package/dist/types/src/events.d.ts +4 -0
  98. package/dist/types/src/events.d.ts.map +1 -0
  99. package/dist/types/src/index.d.ts +3 -2
  100. package/dist/types/src/index.d.ts.map +1 -1
  101. package/dist/types/src/meta.d.ts +3 -4
  102. package/dist/types/src/meta.d.ts.map +1 -1
  103. package/dist/types/src/translations.d.ts +2 -0
  104. package/dist/types/src/translations.d.ts.map +1 -1
  105. package/dist/types/src/types.d.ts +12 -20
  106. package/dist/types/src/types.d.ts.map +1 -1
  107. package/dist/types/src/util/index.d.ts +1 -1
  108. package/dist/types/src/util/index.d.ts.map +1 -1
  109. package/dist/types/src/util/useBreakpoints.d.ts +2 -0
  110. package/dist/types/src/util/useBreakpoints.d.ts.map +1 -0
  111. package/dist/types/src/util/useHoistStatusbar.d.ts +2 -0
  112. package/dist/types/src/util/useHoistStatusbar.d.ts.map +1 -0
  113. package/dist/types/tsconfig.tsbuildinfo +1 -1
  114. package/package.json +29 -35
  115. package/src/DeckPlugin.ts +123 -0
  116. package/src/capabilities/capabilities.ts +17 -0
  117. package/src/capabilities/index.ts +8 -0
  118. package/src/capabilities/layout/app-graph-builder.ts +101 -0
  119. package/src/capabilities/layout/deck.ts +25 -0
  120. package/src/capabilities/layout/index.ts +12 -0
  121. package/src/capabilities/layout/intent-resolver.ts +128 -0
  122. package/src/capabilities/layout/react-context.tsx +26 -0
  123. package/src/capabilities/layout/react-root.tsx +52 -0
  124. package/src/capabilities/layout/state.ts +32 -0
  125. package/src/capabilities/navigation/check-app-scheme.ts +44 -0
  126. package/src/capabilities/navigation/index.ts +10 -0
  127. package/src/capabilities/navigation/intent-resolver.ts +216 -0
  128. package/src/capabilities/navigation/location.ts +28 -0
  129. package/src/capabilities/navigation/set-location.ts +38 -0
  130. package/src/capabilities/navigation/url-handler.ts +67 -0
  131. package/src/capabilities/settings/index.ts +8 -0
  132. package/src/capabilities/settings/react-surface.tsx +23 -0
  133. package/src/capabilities/settings/settings.ts +22 -0
  134. package/src/components/DeckContext.ts +6 -1
  135. package/src/components/DeckLayout/Banner.tsx +37 -0
  136. package/src/components/DeckLayout/ComplementarySidebar.tsx +74 -52
  137. package/src/components/DeckLayout/ContentEmpty.tsx +10 -2
  138. package/src/components/DeckLayout/DeckLayout.tsx +28 -33
  139. package/src/components/DeckLayout/NodePlankHeading.tsx +15 -20
  140. package/src/components/DeckLayout/Plank.tsx +7 -7
  141. package/src/components/DeckLayout/Sidebar.tsx +21 -8
  142. package/src/components/DeckLayout/SidebarButton.tsx +74 -0
  143. package/src/components/DeckLayout/StatusBar.tsx +2 -2
  144. package/src/components/DeckLayout/Topbar.tsx +11 -0
  145. package/src/components/fragments.ts +6 -0
  146. package/src/events.ts +11 -0
  147. package/src/index.ts +3 -4
  148. package/src/meta.ts +2 -2
  149. package/src/translations.ts +2 -0
  150. package/src/types.ts +12 -37
  151. package/src/util/index.ts +1 -1
  152. package/src/util/useBreakpoints.ts +11 -0
  153. package/src/util/useHoistStatusbar.ts +15 -0
  154. package/dist/lib/browser/chunk-GVOGPULO.mjs.map +0 -7
  155. package/dist/lib/browser/chunk-ZC3K6C2W.mjs.map +0 -7
  156. package/dist/lib/browser/meta.mjs +0 -9
  157. package/dist/lib/browser/meta.mjs.map +0 -7
  158. package/dist/types/src/util/check-app-scheme.d.ts +0 -2
  159. package/dist/types/src/util/check-app-scheme.d.ts.map +0 -1
  160. package/src/DeckPlugin.tsx +0 -623
  161. package/src/util/check-app-scheme.ts +0 -21
@@ -0,0 +1,249 @@
1
+ import {
2
+ closeEntry,
3
+ incrementPlank,
4
+ openEntry,
5
+ setLocation
6
+ } from "./chunk-4C2AFTET.mjs";
7
+ import {
8
+ getEffectivePart
9
+ } from "./chunk-2PJNBVCY.mjs";
10
+ import {
11
+ DECK_PLUGIN
12
+ } from "./chunk-JQJ5UWVB.mjs";
13
+
14
+ // packages/plugins/plugin-deck/src/capabilities/navigation/intent-resolver.ts
15
+ import { batch } from "@preact/signals-core";
16
+ import { pipe } from "effect";
17
+ import { Capabilities, chain, contributes, createIntent, createResolver, LayoutAction, NavigationAction, openIds, SLUG_PATH_SEPARATOR } from "@dxos/app-framework";
18
+ import { isReactiveObject, getTypename } from "@dxos/live-object";
19
+ import { AttentionCapabilities } from "@dxos/plugin-attention";
20
+ import { ObservabilityAction } from "@dxos/plugin-observability/types";
21
+ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolver, [
22
+ createResolver(NavigationAction.Open, (data) => {
23
+ const { graph } = context.requestCapability(Capabilities.AppGraph);
24
+ const location = context.requestCapability(Capabilities.MutableLocation);
25
+ const layout = context.requestCapability(Capabilities.MutableLayout);
26
+ const attention = context.requestCapability(AttentionCapabilities.Attention);
27
+ const settings = context.requestCapabilities(Capabilities.SettingsStore)[0]?.getStore(DECK_PLUGIN)?.value;
28
+ const previouslyOpenIds = new Set(openIds(location.active));
29
+ const layoutMode = layout.layoutMode;
30
+ const toAttend = batch(() => {
31
+ const processLayoutEntry = (partName, entryString, currentLayout) => {
32
+ const toggle = false;
33
+ const [id, path] = entryString.split(SLUG_PATH_SEPARATOR);
34
+ const layoutEntry = {
35
+ id,
36
+ ...path ? {
37
+ path
38
+ } : {}
39
+ };
40
+ const effectivePart = getEffectivePart(partName, layoutMode);
41
+ if (toggle && layoutMode === "deck" && effectivePart === "main" && currentLayout[effectivePart]?.some((entry) => entry.id === id) && !data?.noToggle) {
42
+ return closeEntry(currentLayout, {
43
+ part: effectivePart,
44
+ entryId: id
45
+ });
46
+ } else {
47
+ return openEntry(currentLayout, effectivePart, layoutEntry, {
48
+ positioning: settings?.newPlankPositioning
49
+ });
50
+ }
51
+ };
52
+ let newLayout = location.active;
53
+ Object.entries(data.activeParts).forEach(([partName, layoutEntries]) => {
54
+ if (Array.isArray(layoutEntries)) {
55
+ layoutEntries.forEach((activePartEntry) => {
56
+ newLayout = processLayoutEntry(partName, activePartEntry, newLayout);
57
+ });
58
+ } else if (typeof layoutEntries === "string") {
59
+ newLayout = processLayoutEntry(partName, layoutEntries, newLayout);
60
+ }
61
+ });
62
+ return setLocation({
63
+ next: newLayout,
64
+ layout,
65
+ location,
66
+ attention
67
+ });
68
+ });
69
+ const ids = openIds(location.active);
70
+ const newlyOpen = ids.filter((i) => !previouslyOpenIds.has(i));
71
+ return {
72
+ data: {
73
+ open: ids
74
+ },
75
+ intents: [
76
+ createIntent(LayoutAction.ScrollIntoView, {
77
+ id: newlyOpen[0] ?? toAttend
78
+ }),
79
+ ...toAttend ? [
80
+ createIntent(NavigationAction.Expose, {
81
+ id: toAttend
82
+ })
83
+ ] : [],
84
+ ...newlyOpen.map((id) => {
85
+ const active = graph?.findNode(id)?.data;
86
+ const typename = isReactiveObject(active) ? getTypename(active) : void 0;
87
+ return createIntent(ObservabilityAction.SendEvent, {
88
+ name: "navigation.activate",
89
+ properties: {
90
+ id,
91
+ typename
92
+ }
93
+ });
94
+ })
95
+ ]
96
+ };
97
+ }),
98
+ createResolver(NavigationAction.AddToActive, (data) => {
99
+ const location = context.requestCapability(Capabilities.MutableLocation);
100
+ const layout = context.requestCapability(Capabilities.MutableLayout);
101
+ const attention = context.requestCapability(AttentionCapabilities.Attention);
102
+ const settings = context.requestCapabilities(Capabilities.SettingsStore)[0]?.getStore(DECK_PLUGIN)?.value;
103
+ const layoutEntry = {
104
+ id: data.id
105
+ };
106
+ const effectivePart = getEffectivePart(data.part, layout.layoutMode);
107
+ setLocation({
108
+ next: openEntry(location.active, effectivePart, layoutEntry, {
109
+ positioning: data.positioning ?? settings?.newPlankPositioning,
110
+ pivotId: data.pivotId
111
+ }),
112
+ layout,
113
+ location,
114
+ attention
115
+ });
116
+ const intents = [];
117
+ if (data.scrollIntoView && layout.layoutMode === "deck") {
118
+ intents.push(createIntent(LayoutAction.ScrollIntoView, {
119
+ id: data.id
120
+ }));
121
+ }
122
+ return {
123
+ intents
124
+ };
125
+ }),
126
+ createResolver(NavigationAction.Close, (data) => {
127
+ const location = context.requestCapability(Capabilities.MutableLocation);
128
+ const layout = context.requestCapability(Capabilities.MutableLayout);
129
+ const attention = context.requestCapability(AttentionCapabilities.Attention);
130
+ let newLayout = location.active;
131
+ const layoutMode = layout.layoutMode;
132
+ const intentParts = data.activeParts;
133
+ Object.keys(intentParts).forEach((partName) => {
134
+ const effectivePart = getEffectivePart(partName, layoutMode);
135
+ const ids = intentParts[partName];
136
+ if (Array.isArray(ids)) {
137
+ ids.forEach((id) => {
138
+ newLayout = closeEntry(newLayout, {
139
+ part: effectivePart,
140
+ entryId: id
141
+ });
142
+ });
143
+ } else {
144
+ newLayout = closeEntry(newLayout, {
145
+ part: effectivePart,
146
+ entryId: ids
147
+ });
148
+ }
149
+ });
150
+ const toAttend = setLocation({
151
+ next: newLayout,
152
+ layout,
153
+ location,
154
+ attention
155
+ });
156
+ return {
157
+ intents: [
158
+ createIntent(LayoutAction.ScrollIntoView, {
159
+ id: toAttend
160
+ })
161
+ ]
162
+ };
163
+ }),
164
+ createResolver(NavigationAction.Set, (data) => {
165
+ const layout = context.requestCapability(Capabilities.MutableLayout);
166
+ const location = context.requestCapability(Capabilities.MutableLocation);
167
+ const attention = context.requestCapability(AttentionCapabilities.Attention);
168
+ return batch(() => {
169
+ const toAttend = setLocation({
170
+ next: data.activeParts,
171
+ layout,
172
+ location,
173
+ attention
174
+ });
175
+ return {
176
+ intents: [
177
+ createIntent(LayoutAction.ScrollIntoView, {
178
+ id: toAttend
179
+ })
180
+ ]
181
+ };
182
+ });
183
+ }),
184
+ createResolver(NavigationAction.Adjust, (adjustment) => {
185
+ const location = context.requestCapability(Capabilities.MutableLocation);
186
+ const layout = context.requestCapability(Capabilities.MutableLayout);
187
+ const attention = context.requestCapability(AttentionCapabilities.Attention);
188
+ return batch(() => {
189
+ if (adjustment.type === "increment-end" || adjustment.type === "increment-start") {
190
+ setLocation({
191
+ next: incrementPlank(location.active, {
192
+ type: adjustment.type,
193
+ layoutCoordinate: adjustment.layoutCoordinate
194
+ }),
195
+ layout,
196
+ location,
197
+ attention
198
+ });
199
+ }
200
+ if (adjustment.type === "solo") {
201
+ const entryId = adjustment.layoutCoordinate.entryId;
202
+ if (layout.layoutMode !== "solo") {
203
+ return {
204
+ intents: [
205
+ // NOTE: The order of these is important.
206
+ pipe(createIntent(NavigationAction.Open, {
207
+ activeParts: {
208
+ solo: [
209
+ entryId
210
+ ]
211
+ }
212
+ }), chain(LayoutAction.SetLayoutMode, {
213
+ layoutMode: "solo"
214
+ }))
215
+ ]
216
+ };
217
+ } else {
218
+ return {
219
+ intents: [
220
+ // NOTE: The order of these is important.
221
+ pipe(createIntent(LayoutAction.SetLayoutMode, {
222
+ layoutMode: "deck"
223
+ }), chain(NavigationAction.Close, {
224
+ activeParts: {
225
+ solo: [
226
+ entryId
227
+ ]
228
+ }
229
+ }), chain(NavigationAction.Open, {
230
+ activeParts: {
231
+ main: [
232
+ entryId
233
+ ]
234
+ },
235
+ noToggle: true
236
+ }), chain(LayoutAction.ScrollIntoView, {
237
+ id: entryId
238
+ }))
239
+ ]
240
+ };
241
+ }
242
+ }
243
+ });
244
+ })
245
+ ]);
246
+ export {
247
+ intent_resolver_default as default
248
+ };
249
+ //# sourceMappingURL=intent-resolver-K7GW4A2I.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/navigation/intent-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\nimport { pipe } from 'effect';\n\nimport {\n Capabilities,\n chain,\n contributes,\n createIntent,\n createResolver,\n LayoutAction,\n NavigationAction,\n openIds,\n SLUG_PATH_SEPARATOR,\n type LayoutEntry,\n type LayoutPart,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { isReactiveObject, getTypename } from '@dxos/live-object';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\n\nimport { setLocation } from './set-location';\nimport { closeEntry, incrementPlank, openEntry } from '../../layout';\nimport { DECK_PLUGIN } from '../../meta';\nimport { type DeckSettingsProps } from '../../types';\nimport { getEffectivePart } from '../../util';\n\n// TODO(wittjosiah): Factor out navgiation from deck plugin.\nexport default (context: PluginsContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver(NavigationAction.Open, (data) => {\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n const location = context.requestCapability(Capabilities.MutableLocation);\n const layout = context.requestCapability(Capabilities.MutableLayout);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<DeckSettingsProps>(DECK_PLUGIN)?.value;\n\n const previouslyOpenIds = new Set<string>(openIds(location.active));\n const layoutMode = layout.layoutMode;\n const toAttend = batch(() => {\n const processLayoutEntry = (partName: string, entryString: string, currentLayout: any) => {\n // TODO(burdon): Option to toggle?\n const toggle = false;\n const [id, path] = entryString.split(SLUG_PATH_SEPARATOR);\n const layoutEntry: LayoutEntry = { id, ...(path ? { path } : {}) };\n const effectivePart = getEffectivePart(partName as LayoutPart, layoutMode);\n if (\n toggle &&\n layoutMode === 'deck' &&\n effectivePart === 'main' &&\n currentLayout[effectivePart]?.some((entry: LayoutEntry) => entry.id === id) &&\n !data?.noToggle\n ) {\n // If we're in deck mode and the main part is already open, toggle it closed.\n return closeEntry(currentLayout, { part: effectivePart as LayoutPart, entryId: id });\n } else {\n return openEntry(currentLayout, effectivePart, layoutEntry, {\n positioning: settings?.newPlankPositioning,\n });\n }\n };\n\n let newLayout = location.active;\n Object.entries(data.activeParts).forEach(([partName, layoutEntries]) => {\n if (Array.isArray(layoutEntries)) {\n layoutEntries.forEach((activePartEntry: string) => {\n newLayout = processLayoutEntry(partName, activePartEntry, newLayout);\n });\n } else if (typeof layoutEntries === 'string') {\n // Legacy single string entry.\n newLayout = processLayoutEntry(partName, layoutEntries, newLayout);\n }\n });\n\n return setLocation({ next: newLayout, layout, location, attention });\n });\n\n const ids = openIds(location.active);\n const newlyOpen = ids.filter((i) => !previouslyOpenIds.has(i));\n\n return {\n data: { open: ids },\n intents: [\n createIntent(LayoutAction.ScrollIntoView, { id: newlyOpen[0] ?? toAttend }),\n ...(toAttend ? [createIntent(NavigationAction.Expose, { id: toAttend })] : []),\n ...newlyOpen.map((id) => {\n const active = graph?.findNode(id)?.data;\n const typename = isReactiveObject(active) ? getTypename(active) : undefined;\n return createIntent(ObservabilityAction.SendEvent, {\n name: 'navigation.activate',\n properties: {\n id,\n typename,\n },\n });\n }),\n ],\n };\n }),\n createResolver(NavigationAction.AddToActive, (data) => {\n const location = context.requestCapability(Capabilities.MutableLocation);\n const layout = context.requestCapability(Capabilities.MutableLayout);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const settings = context\n .requestCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<DeckSettingsProps>(DECK_PLUGIN)?.value;\n\n const layoutEntry = { id: data.id };\n const effectivePart = getEffectivePart(data.part, layout.layoutMode);\n\n setLocation({\n next: openEntry(location.active, effectivePart, layoutEntry, {\n positioning: data.positioning ?? settings?.newPlankPositioning,\n pivotId: data.pivotId,\n }),\n layout,\n location,\n attention,\n });\n\n const intents = [];\n if (data.scrollIntoView && layout.layoutMode === 'deck') {\n intents.push(createIntent(LayoutAction.ScrollIntoView, { id: data.id }));\n }\n\n return { intents };\n }),\n createResolver(NavigationAction.Close, (data) => {\n const location = context.requestCapability(Capabilities.MutableLocation);\n const layout = context.requestCapability(Capabilities.MutableLayout);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n\n let newLayout = location.active;\n const layoutMode = layout.layoutMode;\n const intentParts = data.activeParts;\n Object.keys(intentParts).forEach((partName: string) => {\n const effectivePart = getEffectivePart(partName as LayoutPart, layoutMode);\n const ids = intentParts[partName];\n if (Array.isArray(ids)) {\n ids.forEach((id: string) => {\n newLayout = closeEntry(newLayout, { part: effectivePart, entryId: id });\n });\n } else {\n // Legacy single string entry\n newLayout = closeEntry(newLayout, { part: effectivePart, entryId: ids });\n }\n });\n\n const toAttend = setLocation({ next: newLayout, layout, location, attention });\n return { intents: [createIntent(LayoutAction.ScrollIntoView, { id: toAttend })] };\n }),\n createResolver(NavigationAction.Set, (data) => {\n const layout = context.requestCapability(Capabilities.MutableLayout);\n const location = context.requestCapability(Capabilities.MutableLocation);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n\n return batch(() => {\n const toAttend = setLocation({ next: data.activeParts, layout, location, attention });\n return { intents: [createIntent(LayoutAction.ScrollIntoView, { id: toAttend })] };\n });\n }),\n createResolver(NavigationAction.Adjust, (adjustment) => {\n const location = context.requestCapability(Capabilities.MutableLocation);\n const layout = context.requestCapability(Capabilities.MutableLayout);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n\n return batch(() => {\n if (adjustment.type === 'increment-end' || adjustment.type === 'increment-start') {\n setLocation({\n next: incrementPlank(location.active, {\n type: adjustment.type,\n layoutCoordinate: adjustment.layoutCoordinate,\n }),\n layout,\n location,\n attention,\n });\n }\n\n if (adjustment.type === 'solo') {\n const entryId = adjustment.layoutCoordinate.entryId;\n if (layout.layoutMode !== 'solo') {\n // Solo the entry.\n return {\n intents: [\n // NOTE: The order of these is important.\n pipe(\n createIntent(NavigationAction.Open, { activeParts: { solo: [entryId] } }),\n chain(LayoutAction.SetLayoutMode, { layoutMode: 'solo' }),\n ),\n ],\n };\n } else {\n // Un-solo the current entry.\n return {\n intents: [\n // NOTE: The order of these is important.\n pipe(\n createIntent(LayoutAction.SetLayoutMode, { layoutMode: 'deck' }),\n chain(NavigationAction.Close, { activeParts: { solo: [entryId] } }),\n chain(NavigationAction.Open, { activeParts: { main: [entryId] }, noToggle: true }),\n chain(LayoutAction.ScrollIntoView, { id: entryId }),\n ),\n ],\n };\n }\n }\n });\n }),\n ]);\n"],
5
+ "mappings": "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",
6
+ "names": ["batch", "pipe", "Capabilities", "chain", "contributes", "createIntent", "createResolver", "LayoutAction", "NavigationAction", "openIds", "SLUG_PATH_SEPARATOR", "isReactiveObject", "getTypename", "AttentionCapabilities", "ObservabilityAction", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "NavigationAction", "Open", "data", "graph", "requestCapability", "AppGraph", "location", "MutableLocation", "layout", "MutableLayout", "attention", "AttentionCapabilities", "Attention", "settings", "requestCapabilities", "SettingsStore", "getStore", "DECK_PLUGIN", "value", "previouslyOpenIds", "Set", "openIds", "active", "layoutMode", "toAttend", "batch", "processLayoutEntry", "partName", "entryString", "currentLayout", "toggle", "id", "path", "split", "SLUG_PATH_SEPARATOR", "layoutEntry", "effectivePart", "getEffectivePart", "some", "entry", "noToggle", "closeEntry", "part", "entryId", "openEntry", "positioning", "newPlankPositioning", "newLayout", "Object", "entries", "activeParts", "forEach", "layoutEntries", "Array", "isArray", "activePartEntry", "setLocation", "next", "ids", "newlyOpen", "filter", "i", "has", "open", "intents", "createIntent", "LayoutAction", "ScrollIntoView", "Expose", "map", "findNode", "typename", "isReactiveObject", "getTypename", "undefined", "ObservabilityAction", "SendEvent", "name", "properties", "AddToActive", "pivotId", "scrollIntoView", "push", "Close", "intentParts", "keys", "Adjust", "adjustment", "type", "incrementPlank", "layoutCoordinate", "pipe", "solo", "chain", "SetLayoutMode", "main"]
7
+ }
@@ -0,0 +1,35 @@
1
+ import {
2
+ NAV_ID
3
+ } from "./chunk-2M4PXYNB.mjs";
4
+ import "./chunk-2PJNBVCY.mjs";
5
+ import "./chunk-KY5WXIXY.mjs";
6
+ import "./chunk-JQJ5UWVB.mjs";
7
+
8
+ // packages/plugins/plugin-deck/src/capabilities/navigation/location.ts
9
+ import { Capabilities, contributes } from "@dxos/app-framework";
10
+ import { LocalStorageStore } from "@dxos/local-storage";
11
+ var LOCATION_KEY = "dxos.org/settings/layout";
12
+ var location_default = () => {
13
+ const location = new LocalStorageStore(LOCATION_KEY, {
14
+ active: {
15
+ sidebar: [
16
+ {
17
+ id: NAV_ID
18
+ }
19
+ ]
20
+ },
21
+ closed: []
22
+ });
23
+ location.prop({
24
+ key: "active",
25
+ type: LocalStorageStore.json()
26
+ }).prop({
27
+ key: "closed",
28
+ type: LocalStorageStore.json()
29
+ });
30
+ return contributes(Capabilities.Location, location.values, () => location.close());
31
+ };
32
+ export {
33
+ location_default as default
34
+ };
35
+ //# sourceMappingURL=location-QHRBQBQN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/navigation/location.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, type LayoutParts } from '@dxos/app-framework';\nimport { LocalStorageStore } from '@dxos/local-storage';\n\nimport { NAV_ID } from '../../components';\n\n// NOTE: The key is this currently for backwards compatibility of storage.\nconst LOCATION_KEY = 'dxos.org/settings/layout';\n\nexport default () => {\n // TODO(wittjosiah): This active state is not a generic navigation state but quite deck specific.\n // It is also closely tied to the layout mode state (which also seems quite deck specific).\n // The layout and navigation interfaces need to be revisited and cleaned up.\n // Doing this cleanup should also help simplify some of the convoluted logic for managing it.\n const location = new LocalStorageStore<Capabilities.MutableLocation>(LOCATION_KEY, {\n active: { sidebar: [{ id: NAV_ID }] },\n closed: [],\n });\n\n location\n .prop({ key: 'active', type: LocalStorageStore.json<LayoutParts>() })\n .prop({ key: 'closed', type: LocalStorageStore.json<string[]>() });\n\n return contributes(Capabilities.Location, location.values, () => location.close());\n};\n"],
5
+ "mappings": ";;;;;;;;AAIA,SAASA,cAAcC,mBAAqC;AAC5D,SAASC,yBAAyB;AAKlC,IAAMC,eAAe;AAErB,IAAA,mBAAe,MAAA;AAKb,QAAMC,WAAW,IAAIC,kBAAgDF,cAAc;IACjFG,QAAQ;MAAEC,SAAS;QAAC;UAAEC,IAAIC;QAAO;;IAAG;IACpCC,QAAQ,CAAA;EACV,CAAA;AAEAN,WACGO,KAAK;IAAEC,KAAK;IAAUC,MAAMR,kBAAkBS,KAAI;EAAgB,CAAA,EAClEH,KAAK;IAAEC,KAAK;IAAUC,MAAMR,kBAAkBS,KAAI;EAAa,CAAA;AAElE,SAAOC,YAAYC,aAAaC,UAAUb,SAASc,QAAQ,MAAMd,SAASe,MAAK,CAAA;AACjF;",
6
+ "names": ["Capabilities", "contributes", "LocalStorageStore", "LOCATION_KEY", "location", "LocalStorageStore", "active", "sidebar", "id", "NAV_ID", "closed", "prop", "key", "type", "json", "contributes", "Capabilities", "Location", "values", "close"]
7
+ }