@dxos/plugin-deck 0.8.2-staging.7ac8446 → 0.8.2

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 (155) hide show
  1. package/dist/lib/browser/{app-graph-builder-VYZ4IWI3.mjs → app-graph-builder-M5BT34YG.mjs} +17 -16
  2. package/dist/lib/browser/app-graph-builder-M5BT34YG.mjs.map +7 -0
  3. package/dist/lib/browser/{check-app-scheme-SEYECDHI.mjs → check-app-scheme-7AXGR6UT.mjs} +2 -3
  4. package/dist/lib/browser/check-app-scheme-7AXGR6UT.mjs.map +7 -0
  5. package/dist/lib/browser/{state-7TN26M42.mjs → chunk-FX44YX3G.mjs} +11 -8
  6. package/dist/lib/browser/chunk-FX44YX3G.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-JE2ARGEB.mjs +1487 -0
  8. package/dist/lib/browser/chunk-JE2ARGEB.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-XMCG42ID.mjs → chunk-KLN73CM3.mjs} +2 -2
  10. package/dist/lib/browser/{chunk-XMCG42ID.mjs.map → chunk-KLN73CM3.mjs.map} +1 -1
  11. package/dist/lib/browser/chunk-SLQNOATN.mjs +127 -0
  12. package/dist/lib/browser/chunk-SLQNOATN.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-TRFYUEBA.mjs +145 -0
  14. package/dist/lib/browser/chunk-TRFYUEBA.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-YN5OZEGS.mjs +162 -0
  16. package/dist/lib/browser/chunk-YN5OZEGS.mjs.map +7 -0
  17. package/dist/lib/browser/index.mjs +8 -8
  18. package/dist/lib/browser/index.mjs.map +2 -2
  19. package/dist/lib/browser/{intent-resolver-UDYKO2QW.mjs → intent-resolver-3GAC57UA.mjs} +135 -92
  20. package/dist/lib/browser/intent-resolver-3GAC57UA.mjs.map +7 -0
  21. package/dist/lib/browser/meta.json +1 -1
  22. package/dist/lib/browser/{react-root-XLXN2VEW.mjs → react-root-ISFFOJZX.mjs} +7 -7
  23. package/dist/lib/browser/{react-surface-WNGMZL7I.mjs → react-surface-A63RQB5N.mjs} +7 -7
  24. package/dist/lib/browser/{settings-HMDGSBGO.mjs → settings-X7GDEXU3.mjs} +6 -6
  25. package/dist/lib/browser/settings-X7GDEXU3.mjs.map +7 -0
  26. package/dist/lib/browser/state-VJ6E3ADY.mjs +10 -0
  27. package/dist/lib/browser/state-VJ6E3ADY.mjs.map +7 -0
  28. package/dist/lib/browser/{tools-SC6QEN7R.mjs → tools-N57NQ2LH.mjs} +28 -18
  29. package/dist/lib/browser/tools-N57NQ2LH.mjs.map +7 -0
  30. package/dist/lib/browser/types.mjs +1 -1
  31. package/dist/lib/browser/{url-handler-ODG4B6NX.mjs → url-handler-BUGI6XRE.mjs} +5 -5
  32. package/dist/lib/browser/url-handler-BUGI6XRE.mjs.map +7 -0
  33. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  34. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  35. package/dist/types/src/capabilities/capabilities.d.ts +18 -8
  36. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  37. package/dist/types/src/capabilities/check-app-scheme.d.ts +2 -2
  38. package/dist/types/src/capabilities/check-app-scheme.d.ts.map +1 -1
  39. package/dist/types/src/capabilities/index.d.ts +8 -183
  40. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  41. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  42. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  43. package/dist/types/src/capabilities/state.d.ts +12 -7
  44. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  45. package/dist/types/src/capabilities/tools.d.ts +1 -1
  46. package/dist/types/src/capabilities/tools.d.ts.map +1 -1
  47. package/dist/types/src/capabilities/url-handler.d.ts +2 -2
  48. package/dist/types/src/capabilities/url-handler.d.ts.map +1 -1
  49. package/dist/types/src/components/DeckLayout/Banner.d.ts.map +1 -1
  50. package/dist/types/src/components/DeckLayout/ContentEmpty.d.ts.map +1 -1
  51. package/dist/types/src/components/DeckLayout/DeckLayout.d.ts.map +1 -1
  52. package/dist/types/src/components/DeckLayout/Dialog.d.ts +3 -0
  53. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -0
  54. package/dist/types/src/components/DeckLayout/Popover.d.ts +5 -0
  55. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -0
  56. package/dist/types/src/components/DeckLayout/StatusBar.d.ts.map +1 -1
  57. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  58. package/dist/types/src/components/DeckSettings/DeckSettings.d.ts.map +1 -1
  59. package/dist/types/src/components/Plank/Plank.d.ts +18 -5
  60. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  61. package/dist/types/src/components/Plank/Plank.stories.d.ts +3 -3
  62. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  63. package/dist/types/src/components/Plank/PlankControls.d.ts +3 -2
  64. package/dist/types/src/components/Plank/PlankControls.d.ts.map +1 -1
  65. package/dist/types/src/components/Plank/PlankError.d.ts.map +1 -1
  66. package/dist/types/src/components/Plank/PlankHeading.d.ts +3 -2
  67. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  68. package/dist/types/src/components/Sidebar/ComplementarySidebar.d.ts.map +1 -1
  69. package/dist/types/src/components/Sidebar/Sidebar.d.ts.map +1 -1
  70. package/dist/types/src/components/Sidebar/SidebarButton.d.ts +2 -1
  71. package/dist/types/src/components/Sidebar/SidebarButton.d.ts.map +1 -1
  72. package/dist/types/src/hooks/index.d.ts +5 -1
  73. package/dist/types/src/hooks/index.d.ts.map +1 -1
  74. package/dist/types/src/hooks/useBreakpoints.d.ts.map +1 -0
  75. package/dist/types/src/hooks/useCompanions.d.ts.map +1 -0
  76. package/dist/types/src/hooks/useDeckCompanions.d.ts +13 -0
  77. package/dist/types/src/hooks/useDeckCompanions.d.ts.map +1 -0
  78. package/dist/types/src/hooks/useHoistStatusbar.d.ts +3 -0
  79. package/dist/types/src/hooks/useHoistStatusbar.d.ts.map +1 -0
  80. package/dist/types/src/hooks/useNodeActionExpander.d.ts.map +1 -1
  81. package/dist/types/src/index.d.ts +1 -1
  82. package/dist/types/src/index.d.ts.map +1 -1
  83. package/dist/types/src/layout.d.ts.map +1 -1
  84. package/dist/types/src/translations.d.ts +2 -1
  85. package/dist/types/src/translations.d.ts.map +1 -1
  86. package/dist/types/src/types.d.ts +108 -104
  87. package/dist/types/src/types.d.ts.map +1 -1
  88. package/dist/types/src/util/index.d.ts +1 -4
  89. package/dist/types/src/util/index.d.ts.map +1 -1
  90. package/dist/types/src/util/layoutAppliesTopbar.d.ts +2 -1
  91. package/dist/types/src/util/layoutAppliesTopbar.d.ts.map +1 -1
  92. package/dist/types/src/util/overscroll.d.ts.map +1 -1
  93. package/dist/types/src/util/set-active.d.ts.map +1 -1
  94. package/dist/types/tsconfig.tsbuildinfo +1 -1
  95. package/package.json +39 -30
  96. package/src/capabilities/app-graph-builder.ts +120 -92
  97. package/src/capabilities/check-app-scheme.ts +3 -7
  98. package/src/capabilities/index.ts +3 -2
  99. package/src/capabilities/intent-resolver.ts +181 -135
  100. package/src/capabilities/settings.ts +4 -4
  101. package/src/capabilities/state.ts +7 -4
  102. package/src/capabilities/tools.ts +15 -12
  103. package/src/capabilities/url-handler.ts +4 -4
  104. package/src/components/DeckLayout/ContentEmpty.tsx +9 -4
  105. package/src/components/DeckLayout/DeckLayout.tsx +123 -188
  106. package/src/components/DeckLayout/Dialog.tsx +36 -0
  107. package/src/components/DeckLayout/Popover.tsx +104 -0
  108. package/src/components/Plank/Plank.stories.tsx +20 -8
  109. package/src/components/Plank/Plank.tsx +105 -69
  110. package/src/components/Plank/PlankControls.tsx +53 -57
  111. package/src/components/Plank/PlankError.tsx +2 -6
  112. package/src/components/Plank/PlankHeading.tsx +31 -12
  113. package/src/components/Sidebar/ComplementarySidebar.tsx +36 -57
  114. package/src/components/Sidebar/Sidebar.tsx +7 -4
  115. package/src/components/Sidebar/SidebarButton.tsx +26 -7
  116. package/src/components/fragments.ts +1 -1
  117. package/src/hooks/index.ts +5 -1
  118. package/src/{util → hooks}/useCompanions.ts +3 -3
  119. package/src/hooks/useDeckCompanions.ts +33 -0
  120. package/src/{util → hooks}/useHoistStatusbar.ts +9 -4
  121. package/src/hooks/useNodeActionExpander.ts +3 -8
  122. package/src/index.ts +1 -1
  123. package/src/translations.ts +2 -1
  124. package/src/types.ts +77 -71
  125. package/src/util/index.ts +1 -4
  126. package/src/util/layoutAppliesTopbar.ts +8 -2
  127. package/dist/lib/browser/app-graph-builder-VYZ4IWI3.mjs.map +0 -7
  128. package/dist/lib/browser/check-app-scheme-SEYECDHI.mjs.map +0 -7
  129. package/dist/lib/browser/chunk-6ZSOFCPP.mjs +0 -117
  130. package/dist/lib/browser/chunk-6ZSOFCPP.mjs.map +0 -7
  131. package/dist/lib/browser/chunk-B4LOJUWW.mjs +0 -24
  132. package/dist/lib/browser/chunk-B4LOJUWW.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-FJBMNSUC.mjs +0 -1289
  134. package/dist/lib/browser/chunk-FJBMNSUC.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-FLOVGNYB.mjs +0 -81
  136. package/dist/lib/browser/chunk-FLOVGNYB.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-RJNCG4ND.mjs +0 -154
  138. package/dist/lib/browser/chunk-RJNCG4ND.mjs.map +0 -7
  139. package/dist/lib/browser/intent-resolver-UDYKO2QW.mjs.map +0 -7
  140. package/dist/lib/browser/settings-HMDGSBGO.mjs.map +0 -7
  141. package/dist/lib/browser/state-7TN26M42.mjs.map +0 -7
  142. package/dist/lib/browser/tools-SC6QEN7R.mjs.map +0 -7
  143. package/dist/lib/browser/url-handler-ODG4B6NX.mjs.map +0 -7
  144. package/dist/types/src/components/DeckLayout/Fullscreen.d.ts +0 -5
  145. package/dist/types/src/components/DeckLayout/Fullscreen.d.ts.map +0 -1
  146. package/dist/types/src/util/useBreakpoints.d.ts.map +0 -1
  147. package/dist/types/src/util/useCompanions.d.ts.map +0 -1
  148. package/dist/types/src/util/useHoistStatusbar.d.ts +0 -2
  149. package/dist/types/src/util/useHoistStatusbar.d.ts.map +0 -1
  150. package/src/components/DeckLayout/Fullscreen.tsx +0 -31
  151. /package/dist/lib/browser/{react-root-XLXN2VEW.mjs.map → react-root-ISFFOJZX.mjs.map} +0 -0
  152. /package/dist/lib/browser/{react-surface-WNGMZL7I.mjs.map → react-surface-A63RQB5N.mjs.map} +0 -0
  153. /package/dist/types/src/{util → hooks}/useBreakpoints.d.ts +0 -0
  154. /package/dist/types/src/{util → hooks}/useCompanions.d.ts +0 -0
  155. /package/src/{util → hooks}/useBreakpoints.ts +0 -0
@@ -2,34 +2,33 @@ import {
2
2
  closeEntry,
3
3
  createEntryId,
4
4
  incrementPlank,
5
- openEntry
6
- } from "./chunk-FLOVGNYB.mjs";
7
- import {
5
+ openEntry,
8
6
  setActive
9
- } from "./chunk-6ZSOFCPP.mjs";
7
+ } from "./chunk-TRFYUEBA.mjs";
10
8
  import {
11
9
  DeckCapabilities
12
- } from "./chunk-XMCG42ID.mjs";
10
+ } from "./chunk-KLN73CM3.mjs";
13
11
  import {
14
12
  DeckAction,
15
13
  PLANK_COMPANION_TYPE,
16
14
  defaultDeck,
17
15
  getMode,
18
16
  isLayoutMode
19
- } from "./chunk-RJNCG4ND.mjs";
17
+ } from "./chunk-YN5OZEGS.mjs";
20
18
  import {
21
19
  DECK_PLUGIN
22
20
  } from "./chunk-NSATFAEE.mjs";
23
21
 
24
22
  // packages/plugins/plugin-deck/src/capabilities/intent-resolver.ts
25
23
  import { batch } from "@preact/signals-core";
26
- import { pipe } from "effect";
24
+ import { Schema, Effect, pipe, Option } from "effect";
27
25
  import { Capabilities, createResolver, contributes, IntentAction, LayoutAction, createIntent, chain } from "@dxos/app-framework";
28
- import { getTypename, S } from "@dxos/echo-schema";
26
+ import { getTypename } from "@dxos/echo-schema";
29
27
  import { invariant } from "@dxos/invariant";
30
- import { isReactiveObject } from "@dxos/live-object";
28
+ import { isLiveObject } from "@dxos/live-object";
31
29
  import { log } from "@dxos/log";
32
30
  import { AttentionCapabilities } from "@dxos/plugin-attention";
31
+ import { isActionLike } from "@dxos/plugin-graph";
33
32
  import { ObservabilityAction } from "@dxos/plugin-observability/types";
34
33
  import { byPosition, isNonNullable } from "@dxos/util";
35
34
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-deck/src/capabilities/intent-resolver.ts";
@@ -37,8 +36,8 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
37
36
  createResolver({
38
37
  intent: IntentAction.ShowUndo,
39
38
  resolve: (data) => {
40
- const layout = context.requestCapability(DeckCapabilities.MutableDeckState);
41
- const { undoPromise: undo } = context.requestCapability(Capabilities.IntentDispatcher);
39
+ const layout = context.getCapability(DeckCapabilities.MutableDeckState);
40
+ const { undoPromise: undo } = context.getCapability(Capabilities.IntentDispatcher);
42
41
  if (layout.currentUndoId) {
43
42
  layout.toasts = layout.toasts.filter((toast) => toast.id !== layout.currentUndoId);
44
43
  }
@@ -79,11 +78,11 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
79
78
  }),
80
79
  createResolver({
81
80
  intent: LayoutAction.UpdateLayout,
82
- // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdateSidebar.fields.input)`
81
+ // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdateSidebar.fields.input)`
83
82
  // but the filter is not being applied correctly.
84
- filter: (data) => S.is(LayoutAction.UpdateSidebar.fields.input)(data),
83
+ filter: (data) => Schema.is(LayoutAction.UpdateSidebar.fields.input)(data),
85
84
  resolve: ({ options }) => {
86
- const layout = context.requestCapability(DeckCapabilities.MutableDeckState);
85
+ const layout = context.getCapability(DeckCapabilities.MutableDeckState);
87
86
  const next = options?.state ?? layout.sidebarState;
88
87
  if (next !== layout.sidebarState) {
89
88
  layout.sidebarState = next;
@@ -92,11 +91,11 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
92
91
  }),
93
92
  createResolver({
94
93
  intent: LayoutAction.UpdateLayout,
95
- // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdateComplementary.fields.input)`
94
+ // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdateComplementary.fields.input)`
96
95
  // but the filter is not being applied correctly.
97
- filter: (data) => S.is(LayoutAction.UpdateComplementary.fields.input)(data),
96
+ filter: (data) => Schema.is(LayoutAction.UpdateComplementary.fields.input)(data),
98
97
  resolve: ({ subject, options }) => {
99
- const layout = context.requestCapability(DeckCapabilities.MutableDeckState);
98
+ const layout = context.getCapability(DeckCapabilities.MutableDeckState);
100
99
  if (layout.complementarySidebarPanel !== subject) {
101
100
  layout.complementarySidebarPanel = subject;
102
101
  }
@@ -108,52 +107,60 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
108
107
  }),
109
108
  createResolver({
110
109
  intent: LayoutAction.UpdateLayout,
111
- // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdateDialog.fields.input)`
110
+ // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdateDialog.fields.input)`
112
111
  // but the filter is not being applied correctly.
113
- filter: (data) => S.is(LayoutAction.UpdateDialog.fields.input)(data),
112
+ filter: (data) => Schema.is(LayoutAction.UpdateDialog.fields.input)(data),
114
113
  resolve: ({ subject, options }) => {
115
- const layout = context.requestCapability(DeckCapabilities.MutableDeckState);
114
+ const layout = context.getCapability(DeckCapabilities.MutableDeckState);
116
115
  layout.dialogOpen = options.state ?? Boolean(subject);
116
+ layout.dialogType = options.type ?? "default";
117
+ layout.dialogBlockAlign = options.blockAlign ?? "center";
118
+ layout.dialogOverlayClasses = options.overlayClasses;
119
+ layout.dialogOverlayStyle = options.overlayStyle;
117
120
  layout.dialogContent = subject ? {
118
121
  component: subject,
119
122
  props: options.props
120
123
  } : null;
121
- layout.dialogBlockAlign = options.blockAlign ?? "center";
122
- layout.dialogType = options.type ?? "default";
123
124
  }
124
125
  }),
125
126
  createResolver({
126
127
  intent: LayoutAction.UpdateLayout,
127
- // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.UpdatePopover.fields.input)`
128
+ // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdatePopover.fields.input)`
128
129
  // but the filter is not being applied correctly.
129
- filter: (data) => S.is(LayoutAction.UpdatePopover.fields.input)(data),
130
+ filter: (data) => Schema.is(LayoutAction.UpdatePopover.fields.input)(data),
130
131
  resolve: ({ subject, options }) => {
131
- const layout = context.requestCapability(DeckCapabilities.MutableDeckState);
132
+ const layout = context.getCapability(DeckCapabilities.MutableDeckState);
132
133
  layout.popoverOpen = options.state ?? Boolean(subject);
133
- layout.popoverContent = subject ? {
134
+ layout.popoverContent = typeof subject === "string" ? {
134
135
  component: subject,
135
136
  props: options.props
137
+ } : subject ? {
138
+ subject
136
139
  } : null;
137
- layout.popoverAnchorId = options.anchorId;
138
140
  layout.popoverSide = options.side;
141
+ if (options.variant === "virtual") {
142
+ layout.popoverAnchor = options.anchor;
143
+ } else {
144
+ layout.popoverAnchorId = options.anchorId;
145
+ }
139
146
  }
140
147
  }),
141
148
  createResolver({
142
149
  intent: LayoutAction.UpdateLayout,
143
- // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.AddToast.fields.input)`
150
+ // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.AddToast.fields.input)`
144
151
  // but the filter is not being applied correctly.
145
- filter: (data) => S.is(LayoutAction.AddToast.fields.input)(data),
152
+ filter: (data) => Schema.is(LayoutAction.AddToast.fields.input)(data),
146
153
  resolve: ({ subject }) => {
147
- const layout = context.requestCapability(DeckCapabilities.MutableDeckState);
154
+ const layout = context.getCapability(DeckCapabilities.MutableDeckState);
148
155
  layout.toasts.push(subject);
149
156
  }
150
157
  }),
151
158
  createResolver({
152
159
  intent: LayoutAction.UpdateLayout,
153
- // TODO(wittjosiah): This should be able to just be `S.is(LayoutAction.SetLayoutMode.fields.input)`
160
+ // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.SetLayoutMode.fields.input)`
154
161
  // but the filter is not being applied correctly.
155
162
  filter: (data) => {
156
- if (!S.is(LayoutAction.SetLayoutMode.fields.input)(data)) {
163
+ if (!Schema.is(LayoutAction.SetLayoutMode.fields.input)(data)) {
157
164
  return false;
158
165
  }
159
166
  if ("mode" in data.options) {
@@ -162,7 +169,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
162
169
  return true;
163
170
  },
164
171
  resolve: ({ subject, options }) => {
165
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
172
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
166
173
  const setMode = (mode) => {
167
174
  const deck = state.deck;
168
175
  const current = deck.solo ? [
@@ -186,10 +193,8 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
186
193
  deck.solo = void 0;
187
194
  deck.initialized = true;
188
195
  }
189
- if (mode === "fullscreen" && !deck.fullscreen) {
190
- deck.fullscreen = true;
191
- } else if (mode !== "fullscreen" && deck.fullscreen) {
192
- deck.fullscreen = false;
196
+ if (mode === "solo--fullscreen") {
197
+ deck.fullscreen = !deck.fullscreen;
193
198
  }
194
199
  };
195
200
  return batch(() => {
@@ -205,7 +210,7 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
205
210
  } else {
206
211
  log.warn("Invalid layout mode", options, {
207
212
  F: __dxlog_file,
208
- L: 195,
213
+ L: 200,
209
214
  S: void 0,
210
215
  C: (f, a) => f(...a)
211
216
  });
@@ -215,9 +220,10 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
215
220
  }),
216
221
  createResolver({
217
222
  intent: LayoutAction.UpdateLayout,
218
- filter: (data) => S.is(LayoutAction.SwitchWorkspace.fields.input)(data),
223
+ filter: (data) => Schema.is(LayoutAction.SwitchWorkspace.fields.input)(data),
219
224
  resolve: ({ subject }) => {
220
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
225
+ const { graph } = context.getCapability(Capabilities.AppGraph);
226
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
221
227
  batch(() => {
222
228
  if (!state.activeDeck.startsWith("!")) {
223
229
  state.previousDeck = state.activeDeck;
@@ -239,14 +245,28 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
239
245
  })
240
246
  ]
241
247
  };
248
+ } else {
249
+ const [item] = graph.getConnections(subject).filter((node) => !isActionLike(node) && node.properties.disposition !== "hidden");
250
+ if (item) {
251
+ return {
252
+ intents: [
253
+ createIntent(LayoutAction.Open, {
254
+ part: "main",
255
+ subject: [
256
+ item.id
257
+ ]
258
+ })
259
+ ]
260
+ };
261
+ }
242
262
  }
243
263
  }
244
264
  }),
245
265
  createResolver({
246
266
  intent: LayoutAction.UpdateLayout,
247
- filter: (data) => S.is(LayoutAction.RevertWorkspace.fields.input)(data),
267
+ filter: (data) => Schema.is(LayoutAction.RevertWorkspace.fields.input)(data),
248
268
  resolve: () => {
249
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
269
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
250
270
  return {
251
271
  intents: [
252
272
  createIntent(LayoutAction.SwitchWorkspace, {
@@ -259,12 +279,19 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
259
279
  }),
260
280
  createResolver({
261
281
  intent: LayoutAction.UpdateLayout,
262
- filter: (data) => S.is(LayoutAction.Open.fields.input)(data),
263
- resolve: ({ subject, options }) => {
264
- const { graph } = context.requestCapability(Capabilities.AppGraph);
265
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
266
- const attention = context.requestCapability(AttentionCapabilities.Attention);
267
- const settings = context.requestCapabilities(Capabilities.SettingsStore)[0]?.getStore(DECK_PLUGIN)?.value;
282
+ filter: (data) => Schema.is(LayoutAction.Open.fields.input)(data),
283
+ resolve: ({ subject, options }) => Effect.gen(function* () {
284
+ const { graph } = context.getCapability(Capabilities.AppGraph);
285
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
286
+ const attention = context.getCapability(AttentionCapabilities.Attention);
287
+ const settings = context.getCapabilities(Capabilities.SettingsStore)[0]?.getStore(DECK_PLUGIN)?.value;
288
+ if (options?.workspace && state.activeDeck !== options?.workspace) {
289
+ const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
290
+ yield* dispatch(createIntent(LayoutAction.SwitchWorkspace, {
291
+ part: "workspace",
292
+ subject: options.workspace
293
+ }));
294
+ }
268
295
  const previouslyOpenIds = new Set(state.deck.solo ? [
269
296
  state.deck.solo
270
297
  ] : state.deck.active);
@@ -298,8 +325,13 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
298
325
  subject: newlyOpen[0] ?? subject[0]
299
326
  }),
300
327
  ...newlyOpen.map((subjectId) => {
301
- const active = graph?.findNode(subjectId)?.data;
302
- const typename = isReactiveObject(active) ? getTypename(active) : void 0;
328
+ const typename = Option.match(graph.getNode(subjectId), {
329
+ onNone: () => void 0,
330
+ onSome: (node) => {
331
+ const active = node.data;
332
+ return isLiveObject(active) ? getTypename(active) : void 0;
333
+ }
334
+ });
303
335
  return createIntent(ObservabilityAction.SendEvent, {
304
336
  name: "navigation.activate",
305
337
  properties: {
@@ -310,14 +342,14 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
310
342
  })
311
343
  ]
312
344
  };
313
- }
345
+ })
314
346
  }),
315
347
  createResolver({
316
348
  intent: LayoutAction.UpdateLayout,
317
- filter: (data) => S.is(LayoutAction.Close.fields.input)(data),
349
+ filter: (data) => Schema.is(LayoutAction.Close.fields.input)(data),
318
350
  resolve: ({ subject }) => {
319
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
320
- const attention = context.requestCapability(AttentionCapabilities.Attention);
351
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
352
+ const attention = context.getCapability(AttentionCapabilities.Attention);
321
353
  const active = state.deck.solo ? [
322
354
  state.deck.solo
323
355
  ] : state.deck.active;
@@ -346,10 +378,10 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
346
378
  }),
347
379
  createResolver({
348
380
  intent: LayoutAction.UpdateLayout,
349
- filter: (data) => S.is(LayoutAction.Set.fields.input)(data),
381
+ filter: (data) => Schema.is(LayoutAction.Set.fields.input)(data),
350
382
  resolve: ({ subject }) => {
351
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
352
- const attention = context.requestCapability(AttentionCapabilities.Attention);
383
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
384
+ const attention = context.getCapability(AttentionCapabilities.Attention);
353
385
  const toAttend = setActive({
354
386
  next: subject,
355
387
  state,
@@ -367,30 +399,30 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
367
399
  }),
368
400
  createResolver({
369
401
  intent: LayoutAction.UpdateLayout,
370
- filter: (data) => S.is(LayoutAction.ScrollIntoView.fields.input)(data),
402
+ filter: (data) => Schema.is(LayoutAction.ScrollIntoView.fields.input)(data),
371
403
  resolve: ({ subject }) => {
372
- const layout = context.requestCapability(DeckCapabilities.MutableDeckState);
404
+ const layout = context.getCapability(DeckCapabilities.MutableDeckState);
373
405
  layout.scrollIntoView = subject;
374
406
  }
375
407
  }),
376
408
  createResolver({
377
409
  intent: DeckAction.UpdatePlankSize,
378
410
  resolve: (data) => {
379
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
411
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
380
412
  state.deck.plankSizing[data.id] = data.size;
381
413
  }
382
414
  }),
383
415
  createResolver({
384
416
  intent: DeckAction.ChangeCompanion,
385
417
  resolve: (data) => {
386
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
418
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
387
419
  if (data.companion === null) {
388
420
  const { [data.primary]: _, ...nextActiveCompanions } = state.deck.activeCompanions ?? {};
389
421
  state.deck.activeCompanions = nextActiveCompanions;
390
422
  } else {
391
423
  invariant(data.companion !== data.primary, void 0, {
392
424
  F: __dxlog_file,
393
- L: 352,
425
+ L: 380,
394
426
  S: void 0,
395
427
  A: [
396
428
  "data.companion !== data.primary",
@@ -407,9 +439,9 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
407
439
  createResolver({
408
440
  intent: DeckAction.Adjust,
409
441
  resolve: (adjustment) => {
410
- const state = context.requestCapability(DeckCapabilities.MutableDeckState);
411
- const attention = context.requestCapability(AttentionCapabilities.Attention);
412
- const { graph } = context.requestCapability(Capabilities.AppGraph);
442
+ const state = context.getCapability(DeckCapabilities.MutableDeckState);
443
+ const attention = context.getCapability(AttentionCapabilities.Attention);
444
+ const { graph } = context.getCapability(Capabilities.AppGraph);
413
445
  return batch(() => {
414
446
  if (adjustment.type === "increment-end" || adjustment.type === "increment-start") {
415
447
  setActive({
@@ -419,12 +451,9 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
419
451
  });
420
452
  }
421
453
  if (adjustment.type === "companion") {
422
- const node = graph.findNode(adjustment.id);
423
- const [companion] = node ? graph.nodes(node, {
424
- filter: (n) => n.type === PLANK_COMPANION_TYPE
425
- }).toSorted((a, b) => byPosition(a.properties, b.properties)) : [];
426
- if (companion) {
427
- return {
454
+ return pipe(graph.getNode(adjustment.id), Option.map((node) => graph.getConnections(node.id).filter((n) => n.type === PLANK_COMPANION_TYPE).toSorted((a, b) => byPosition(a.properties, b.properties))), Option.flatMap((companions) => companions.length > 0 ? Option.some(companions[0]) : Option.none()), Option.match({
455
+ onNone: () => ({}),
456
+ onSome: (companion) => ({
428
457
  intents: [
429
458
  // TODO(wittjosiah): This should remember the previously selected companion.
430
459
  createIntent(DeckAction.ChangeCompanion, {
@@ -432,10 +461,10 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
432
461
  companion: companion.id
433
462
  })
434
463
  ]
435
- };
436
- }
464
+ })
465
+ }));
437
466
  }
438
- if (adjustment.type === "solo") {
467
+ if (adjustment.type.startsWith("solo")) {
439
468
  const entryId = adjustment.id;
440
469
  if (!state.deck.solo) {
441
470
  return {
@@ -444,28 +473,42 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
444
473
  part: "mode",
445
474
  subject: entryId,
446
475
  options: {
447
- mode: "solo"
476
+ mode: adjustment.type
448
477
  }
449
478
  })
450
479
  ]
451
480
  };
452
481
  } else {
453
- return {
454
- intents: [
455
- // NOTE: The order of these is important.
456
- pipe(createIntent(LayoutAction.SetLayoutMode, {
457
- part: "mode",
458
- options: {
459
- mode: "deck"
460
- }
461
- }), chain(LayoutAction.Open, {
462
- part: "main",
463
- subject: [
464
- entryId
465
- ]
466
- }))
467
- ]
468
- };
482
+ if (adjustment.type === "solo--fullscreen") {
483
+ return {
484
+ intents: [
485
+ createIntent(LayoutAction.SetLayoutMode, {
486
+ part: "mode",
487
+ subject: entryId,
488
+ options: {
489
+ mode: "solo--fullscreen"
490
+ }
491
+ })
492
+ ]
493
+ };
494
+ } else if (adjustment.type === "solo") {
495
+ return {
496
+ intents: [
497
+ // NOTE: The order of these is important.
498
+ pipe(createIntent(LayoutAction.SetLayoutMode, {
499
+ part: "mode",
500
+ options: {
501
+ mode: "deck"
502
+ }
503
+ }), chain(LayoutAction.Open, {
504
+ part: "main",
505
+ subject: [
506
+ entryId
507
+ ]
508
+ }))
509
+ ]
510
+ };
511
+ }
469
512
  }
470
513
  }
471
514
  });
@@ -475,4 +518,4 @@ var intent_resolver_default = (context) => contributes(Capabilities.IntentResolv
475
518
  export {
476
519
  intent_resolver_default as default
477
520
  };
478
- //# sourceMappingURL=intent-resolver-UDYKO2QW.mjs.map
521
+ //# sourceMappingURL=intent-resolver-3GAC57UA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/intent-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { batch } from '@preact/signals-core';\nimport { Schema, Effect, pipe, Option } from 'effect';\n\nimport {\n Capabilities,\n createResolver,\n contributes,\n IntentAction,\n LayoutAction,\n type PluginContext,\n createIntent,\n chain,\n} from '@dxos/app-framework';\nimport { getTypename } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { isLiveObject } from '@dxos/live-object';\nimport { log } from '@dxos/log';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { isActionLike } from '@dxos/plugin-graph';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { byPosition, isNonNullable } from '@dxos/util';\n\nimport { DeckCapabilities } from './capabilities';\nimport { closeEntry, createEntryId, incrementPlank, openEntry } from '../layout';\nimport { DECK_PLUGIN } from '../meta';\nimport {\n DeckAction,\n type LayoutMode,\n type DeckSettingsProps,\n isLayoutMode,\n getMode,\n defaultDeck,\n PLANK_COMPANION_TYPE,\n} from '../types';\nimport { setActive } from '../util';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.IntentResolver, [\n createResolver({\n intent: IntentAction.ShowUndo,\n resolve: (data) => {\n const layout = context.getCapability(DeckCapabilities.MutableDeckState);\n const { undoPromise: undo } = context.getCapability(Capabilities.IntentDispatcher);\n\n // TODO(wittjosiah): Support undoing further back than the last action.\n if (layout.currentUndoId) {\n layout.toasts = layout.toasts.filter((toast) => toast.id !== layout.currentUndoId);\n }\n layout.currentUndoId = `${IntentAction.ShowUndo._tag}-${Date.now()}`;\n layout.toasts = [\n ...layout.toasts,\n {\n id: layout.currentUndoId,\n title: data.message ?? ['undo available label', { ns: DECK_PLUGIN }],\n duration: 10_000,\n actionLabel: ['undo action label', { ns: DECK_PLUGIN }],\n actionAlt: ['undo action alt', { ns: DECK_PLUGIN }],\n closeLabel: ['undo close label', { ns: DECK_PLUGIN }],\n onAction: () => undo(),\n },\n ];\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdateSidebar.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.UpdateSidebar.fields.input> =>\n Schema.is(LayoutAction.UpdateSidebar.fields.input)(data),\n resolve: ({ options }) => {\n const layout = context.getCapability(DeckCapabilities.MutableDeckState);\n const next = options?.state ?? layout.sidebarState;\n if (next !== layout.sidebarState) {\n layout.sidebarState = next;\n }\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdateComplementary.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.UpdateComplementary.fields.input> =>\n Schema.is(LayoutAction.UpdateComplementary.fields.input)(data),\n resolve: ({ subject, options }) => {\n const layout = context.getCapability(DeckCapabilities.MutableDeckState);\n\n if (layout.complementarySidebarPanel !== subject) {\n layout.complementarySidebarPanel = subject;\n }\n\n const next = subject ? 'expanded' : options?.state ?? layout.complementarySidebarState;\n if (next !== layout.complementarySidebarState) {\n layout.complementarySidebarState = next;\n }\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdateDialog.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.UpdateDialog.fields.input> =>\n Schema.is(LayoutAction.UpdateDialog.fields.input)(data),\n resolve: ({ subject, options }) => {\n const layout = context.getCapability(DeckCapabilities.MutableDeckState);\n layout.dialogOpen = options.state ?? Boolean(subject);\n layout.dialogType = options.type ?? 'default';\n layout.dialogBlockAlign = options.blockAlign ?? 'center';\n layout.dialogOverlayClasses = options.overlayClasses;\n layout.dialogOverlayStyle = options.overlayStyle;\n layout.dialogContent = subject ? { component: subject, props: options.props } : null;\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.UpdatePopover.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.UpdatePopover.fields.input> =>\n Schema.is(LayoutAction.UpdatePopover.fields.input)(data),\n resolve: ({ subject, options }) => {\n const layout = context.getCapability(DeckCapabilities.MutableDeckState);\n layout.popoverOpen = options.state ?? Boolean(subject);\n layout.popoverContent =\n typeof subject === 'string' ? { component: subject, props: options.props } : subject ? { subject } : null;\n layout.popoverSide = options.side;\n if (options.variant === 'virtual') {\n layout.popoverAnchor = options.anchor;\n } else {\n layout.popoverAnchorId = options.anchorId;\n }\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.AddToast.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.AddToast.fields.input> =>\n Schema.is(LayoutAction.AddToast.fields.input)(data),\n resolve: ({ subject }) => {\n const layout = context.getCapability(DeckCapabilities.MutableDeckState);\n layout.toasts.push(subject);\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n // TODO(wittjosiah): This should be able to just be `Schema.is(LayoutAction.SetLayoutMode.fields.input)`\n // but the filter is not being applied correctly.\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.SetLayoutMode.fields.input> => {\n if (!Schema.is(LayoutAction.SetLayoutMode.fields.input)(data)) {\n return false;\n }\n\n if ('mode' in data.options) {\n return isLayoutMode(data.options.mode);\n }\n\n return true;\n },\n resolve: ({ subject, options }) => {\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n\n const setMode = (mode: LayoutMode) => {\n const deck = state.deck;\n const current = deck.solo ? [deck.solo] : deck.active;\n // When un-soloing, the solo entry is added to the deck.\n const next = (\n mode !== 'deck' ? [subject ?? deck.solo ?? deck.active[0]] : [...deck.active, deck.solo]\n ).filter(isNonNullable);\n\n const removed = current.filter((id) => !next.includes(id));\n const closed = Array.from(new Set([...deck.inactive.filter((id) => !next.includes(id)), ...removed]));\n deck.inactive = closed;\n\n if (mode !== 'deck' && next[0]) {\n deck.solo = next[0];\n } else if (mode === 'deck' && deck.solo) {\n deck.solo = undefined;\n deck.initialized = true;\n }\n\n if (mode === 'solo--fullscreen') {\n deck.fullscreen = !deck.fullscreen;\n }\n };\n\n return batch(() => {\n if ('mode' in options) {\n const current = getMode(state.deck);\n if (current !== options.mode) {\n state.previousMode[state.activeDeck] = current;\n }\n setMode(options.mode as LayoutMode);\n } else if ('revert' in options) {\n const last = state.previousMode[state.activeDeck];\n setMode(last ?? 'solo');\n } else {\n log.warn('Invalid layout mode', options);\n }\n });\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.SwitchWorkspace.fields.input> =>\n Schema.is(LayoutAction.SwitchWorkspace.fields.input)(data),\n resolve: ({ subject }) => {\n const { graph } = context.getCapability(Capabilities.AppGraph);\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n batch(() => {\n // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.\n // Ideally this should be worked into the data model in a generic way.\n if (!state.activeDeck.startsWith('!')) {\n state.previousDeck = state.activeDeck;\n }\n state.activeDeck = subject;\n if (!state.decks[subject]) {\n state.decks[subject] = { ...defaultDeck };\n }\n });\n\n const first = state.deck.solo ? state.deck.solo : state.deck.active[0];\n if (first) {\n return {\n intents: [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: first })],\n };\n } else {\n const [item] = graph\n .getConnections(subject)\n .filter((node) => !isActionLike(node) && node.properties.disposition !== 'hidden');\n if (item) {\n return {\n intents: [createIntent(LayoutAction.Open, { part: 'main', subject: [item.id] })],\n };\n }\n }\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.RevertWorkspace.fields.input> =>\n Schema.is(LayoutAction.RevertWorkspace.fields.input)(data),\n resolve: () => {\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n return {\n intents: [createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: state.previousDeck })],\n };\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.Open.fields.input> =>\n Schema.is(LayoutAction.Open.fields.input)(data),\n resolve: ({ subject, options }) =>\n Effect.gen(function* () {\n const { graph } = context.getCapability(Capabilities.AppGraph);\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n const attention = context.getCapability(AttentionCapabilities.Attention);\n const settings = context\n .getCapabilities(Capabilities.SettingsStore)[0]\n ?.getStore<DeckSettingsProps>(DECK_PLUGIN)?.value;\n\n if (options?.workspace && state.activeDeck !== options?.workspace) {\n const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n yield* dispatch(\n createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: options.workspace }),\n );\n }\n\n const previouslyOpenIds = new Set<string>(state.deck.solo ? [state.deck.solo] : state.deck.active);\n batch(() => {\n const next = state.deck.solo\n ? (subject as string[]).map((id) => createEntryId(id, options?.variant))\n : subject.reduce(\n (acc, entryId) =>\n openEntry(acc, entryId, {\n key: options?.key,\n positioning: options?.positioning ?? settings?.newPlankPositioning,\n pivotId: options?.pivotId,\n variant: options?.variant,\n }),\n state.deck.active,\n );\n\n return setActive({ next, state, attention });\n });\n\n const ids = state.deck.solo ? [state.deck.solo] : state.deck.active;\n const newlyOpen = ids.filter((i) => !previouslyOpenIds.has(i));\n\n return {\n intents: [\n ...(options?.scrollIntoView !== false\n ? [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: newlyOpen[0] ?? subject[0] })]\n : []),\n createIntent(LayoutAction.Expose, { part: 'navigation', subject: newlyOpen[0] ?? subject[0] }),\n ...newlyOpen.map((subjectId) => {\n const typename = Option.match(graph.getNode(subjectId), {\n onNone: () => undefined,\n onSome: (node) => {\n const active = node.data;\n return isLiveObject(active) ? getTypename(active) : undefined;\n },\n });\n return createIntent(ObservabilityAction.SendEvent, {\n name: 'navigation.activate',\n properties: {\n subjectId,\n typename,\n },\n });\n }),\n ],\n };\n }),\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.Close.fields.input> =>\n Schema.is(LayoutAction.Close.fields.input)(data),\n resolve: ({ subject }) => {\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n const attention = context.getCapability(AttentionCapabilities.Attention);\n const active = state.deck.solo ? [state.deck.solo] : state.deck.active;\n const next = subject.reduce((acc, id) => closeEntry(acc, id), active);\n const toAttend = setActive({ next, state, attention });\n\n const clearCompanionIntents = subject\n .filter((id) => state.deck.activeCompanions && id in state.deck.activeCompanions)\n .map((primary) => createIntent(DeckAction.ChangeCompanion, { primary, companion: null }));\n\n return {\n intents: [\n ...clearCompanionIntents,\n ...(toAttend ? [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: toAttend })] : []),\n ],\n };\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.Set.fields.input> =>\n Schema.is(LayoutAction.Set.fields.input)(data),\n resolve: ({ subject }) => {\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n const attention = context.getCapability(AttentionCapabilities.Attention);\n const toAttend = setActive({ next: subject as string[], state, attention });\n return {\n intents: toAttend ? [createIntent(LayoutAction.ScrollIntoView, { part: 'current', subject: toAttend })] : [],\n };\n },\n }),\n createResolver({\n intent: LayoutAction.UpdateLayout,\n filter: (data): data is Schema.Schema.Type<typeof LayoutAction.ScrollIntoView.fields.input> =>\n Schema.is(LayoutAction.ScrollIntoView.fields.input)(data),\n resolve: ({ subject }) => {\n const layout = context.getCapability(DeckCapabilities.MutableDeckState);\n layout.scrollIntoView = subject;\n },\n }),\n createResolver({\n intent: DeckAction.UpdatePlankSize,\n resolve: (data) => {\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n state.deck.plankSizing[data.id] = data.size;\n },\n }),\n createResolver({\n intent: DeckAction.ChangeCompanion,\n resolve: (data) => {\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n // TODO(thure): Reactivity only works when creating a lexically new `activeCompanions`… Are these not proxy objects?\n if (data.companion === null) {\n const { [data.primary]: _, ...nextActiveCompanions } = state.deck.activeCompanions ?? {};\n state.deck.activeCompanions = nextActiveCompanions;\n } else {\n invariant(data.companion !== data.primary);\n state.deck.activeCompanions = {\n ...state.deck.activeCompanions,\n [data.primary]: data.companion,\n };\n }\n },\n }),\n createResolver({\n intent: DeckAction.Adjust,\n resolve: (adjustment) => {\n const state = context.getCapability(DeckCapabilities.MutableDeckState);\n const attention = context.getCapability(AttentionCapabilities.Attention);\n const { graph } = context.getCapability(Capabilities.AppGraph);\n\n return batch(() => {\n if (adjustment.type === 'increment-end' || adjustment.type === 'increment-start') {\n setActive({\n next: incrementPlank(state.deck.active, adjustment),\n state,\n attention,\n });\n }\n\n if (adjustment.type === 'companion') {\n return pipe(\n graph.getNode(adjustment.id),\n Option.map((node) =>\n graph\n .getConnections(node.id)\n .filter((n) => n.type === PLANK_COMPANION_TYPE)\n .toSorted((a, b) => byPosition(a.properties, b.properties)),\n ),\n Option.flatMap((companions) => (companions.length > 0 ? Option.some(companions[0]) : Option.none())),\n Option.match({\n onNone: () => ({}),\n onSome: (companion) => ({\n intents: [\n // TODO(wittjosiah): This should remember the previously selected companion.\n createIntent(DeckAction.ChangeCompanion, { primary: adjustment.id, companion: companion.id }),\n ],\n }),\n }),\n );\n }\n\n if (adjustment.type.startsWith('solo')) {\n const entryId = adjustment.id;\n if (!state.deck.solo) {\n // Solo the entry.\n return {\n intents: [\n createIntent(LayoutAction.SetLayoutMode, {\n part: 'mode',\n subject: entryId,\n options: { mode: adjustment.type },\n }),\n ],\n };\n } else {\n if (adjustment.type === 'solo--fullscreen') {\n // Toggle fullscreen on the current entry.\n return {\n intents: [\n createIntent(LayoutAction.SetLayoutMode, {\n part: 'mode',\n subject: entryId,\n options: { mode: 'solo--fullscreen' },\n }),\n ],\n };\n } else if (adjustment.type === 'solo') {\n // Un-solo the current entry.\n return {\n intents: [\n // NOTE: The order of these is important.\n pipe(\n createIntent(LayoutAction.SetLayoutMode, { part: 'mode', options: { mode: 'deck' } }),\n chain(LayoutAction.Open, { part: 'main', subject: [entryId] }),\n ),\n ],\n };\n }\n }\n }\n });\n },\n }),\n ]);\n"],
5
+ "mappings": "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",
6
+ "names": ["batch", "Schema", "Effect", "pipe", "Option", "Capabilities", "createResolver", "contributes", "IntentAction", "LayoutAction", "createIntent", "chain", "getTypename", "invariant", "isLiveObject", "log", "AttentionCapabilities", "isActionLike", "ObservabilityAction", "byPosition", "isNonNullable", "context", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "IntentAction", "ShowUndo", "resolve", "data", "layout", "getCapability", "DeckCapabilities", "MutableDeckState", "undoPromise", "undo", "IntentDispatcher", "currentUndoId", "toasts", "filter", "toast", "id", "_tag", "Date", "now", "title", "message", "ns", "DECK_PLUGIN", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "LayoutAction", "UpdateLayout", "Schema", "is", "UpdateSidebar", "fields", "input", "options", "next", "state", "sidebarState", "UpdateComplementary", "subject", "complementarySidebarPanel", "complementarySidebarState", "UpdateDialog", "dialogOpen", "Boolean", "dialogType", "type", "dialogBlockAlign", "blockAlign", "dialogOverlayClasses", "overlayClasses", "dialogOverlayStyle", "overlayStyle", "dialogContent", "component", "props", "UpdatePopover", "popoverOpen", "popoverContent", "popoverSide", "side", "variant", "popoverAnchor", "anchor", "popoverAnchorId", "anchorId", "AddToast", "push", "SetLayoutMode", "isLayoutMode", "mode", "setMode", "deck", "current", "solo", "active", "isNonNullable", "removed", "includes", "closed", "Array", "from", "Set", "inactive", "undefined", "initialized", "fullscreen", "batch", "getMode", "previousMode", "activeDeck", "last", "log", "warn", "SwitchWorkspace", "graph", "AppGraph", "startsWith", "previousDeck", "decks", "defaultDeck", "first", "intents", "createIntent", "ScrollIntoView", "part", "item", "getConnections", "node", "isActionLike", "properties", "disposition", "Open", "RevertWorkspace", "Effect", "gen", "attention", "AttentionCapabilities", "Attention", "settings", "getCapabilities", "SettingsStore", "getStore", "value", "workspace", "dispatch", "previouslyOpenIds", "map", "createEntryId", "reduce", "acc", "entryId", "openEntry", "key", "positioning", "newPlankPositioning", "pivotId", "setActive", "ids", "newlyOpen", "i", "has", "scrollIntoView", "Expose", "subjectId", "typename", "Option", "match", "getNode", "onNone", "onSome", "isLiveObject", "getTypename", "ObservabilityAction", "SendEvent", "name", "Close", "closeEntry", "toAttend", "clearCompanionIntents", "activeCompanions", "primary", "DeckAction", "ChangeCompanion", "companion", "UpdatePlankSize", "plankSizing", "size", "_", "nextActiveCompanions", "invariant", "Adjust", "adjustment", "incrementPlank", "pipe", "n", "PLANK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "flatMap", "companions", "length", "some", "none", "chain"]
7
+ }