@dxos/plugin-deck 0.8.4-main.21d9917 → 0.8.4-main.2244d791bb

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 (158) hide show
  1. package/dist/lib/browser/{app-graph-builder-DTVCULQ4.mjs → app-graph-builder-X7LCO5KE.mjs} +13 -12
  2. package/dist/lib/browser/app-graph-builder-X7LCO5KE.mjs.map +7 -0
  3. package/dist/lib/browser/{check-app-scheme-JSRXXIYF.mjs → check-app-scheme-PGISDJX7.mjs} +8 -8
  4. package/dist/lib/browser/check-app-scheme-PGISDJX7.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-ATFPDN6J.mjs → chunk-DONG2FYU.mjs} +12 -9
  6. package/dist/lib/browser/chunk-DONG2FYU.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-EREEXCHO.mjs → chunk-JGC4ZLG3.mjs} +102 -81
  8. package/dist/lib/browser/chunk-JGC4ZLG3.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-UNG4CLLP.mjs → chunk-YT3AJVUU.mjs} +8 -8
  10. package/dist/lib/browser/chunk-YT3AJVUU.mjs.map +7 -0
  11. package/dist/lib/browser/index.mjs +36 -34
  12. package/dist/lib/browser/index.mjs.map +3 -3
  13. package/dist/lib/browser/meta.json +1 -1
  14. package/dist/lib/browser/{operation-resolver-CDYBLZJ4.mjs → operation-resolver-XJFR3PNQ.mjs} +86 -84
  15. package/dist/lib/browser/operation-resolver-XJFR3PNQ.mjs.map +7 -0
  16. package/dist/lib/browser/{react-root-LYNEKGHM.mjs → react-root-AJFHKHRL.mjs} +6 -6
  17. package/dist/lib/browser/react-root-AJFHKHRL.mjs.map +7 -0
  18. package/dist/lib/browser/{react-surface-RPKD7XUR.mjs → react-surface-KBRBGEXY.mjs} +11 -10
  19. package/dist/lib/browser/react-surface-KBRBGEXY.mjs.map +7 -0
  20. package/dist/lib/browser/{settings-OMHVGZ6V.mjs → settings-ES42FGLG.mjs} +5 -4
  21. package/dist/lib/browser/settings-ES42FGLG.mjs.map +7 -0
  22. package/dist/lib/browser/{state-OC3BSB6E.mjs → state-YMI6IDEL.mjs} +7 -6
  23. package/dist/lib/browser/state-YMI6IDEL.mjs.map +7 -0
  24. package/dist/lib/browser/{toolkit-R53LD3EA.mjs → toolkit-VRD54KY3.mjs} +8 -7
  25. package/dist/lib/browser/toolkit-VRD54KY3.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +1 -1
  27. package/dist/lib/browser/{url-handler-53TE6JZO.mjs → url-handler-37UPOB3U.mjs} +11 -10
  28. package/dist/lib/browser/url-handler-37UPOB3U.mjs.map +7 -0
  29. package/dist/lib/node-esm/{app-graph-builder-473BNZDJ.mjs → app-graph-builder-US54I64T.mjs} +13 -12
  30. package/dist/lib/node-esm/app-graph-builder-US54I64T.mjs.map +7 -0
  31. package/dist/lib/node-esm/{check-app-scheme-IVYRHKRH.mjs → check-app-scheme-CK6EVG5D.mjs} +8 -8
  32. package/dist/lib/node-esm/check-app-scheme-CK6EVG5D.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-V6VEXRD4.mjs → chunk-7NPS347C.mjs} +102 -81
  34. package/dist/lib/node-esm/chunk-7NPS347C.mjs.map +7 -0
  35. package/dist/lib/node-esm/{chunk-XAKTY3EB.mjs → chunk-CVYHPJIN.mjs} +12 -9
  36. package/dist/lib/node-esm/chunk-CVYHPJIN.mjs.map +7 -0
  37. package/dist/lib/node-esm/{chunk-SKEVPQ7E.mjs → chunk-ZMJPCZ3V.mjs} +8 -8
  38. package/dist/lib/node-esm/chunk-ZMJPCZ3V.mjs.map +7 -0
  39. package/dist/lib/node-esm/index.mjs +36 -34
  40. package/dist/lib/node-esm/index.mjs.map +3 -3
  41. package/dist/lib/node-esm/meta.json +1 -1
  42. package/dist/lib/node-esm/{operation-resolver-WUOE33ID.mjs → operation-resolver-ZQGNATPX.mjs} +86 -84
  43. package/dist/lib/node-esm/operation-resolver-ZQGNATPX.mjs.map +7 -0
  44. package/dist/lib/node-esm/{react-root-L7H43AS3.mjs → react-root-2S77ABBS.mjs} +6 -6
  45. package/dist/lib/node-esm/react-root-2S77ABBS.mjs.map +7 -0
  46. package/dist/lib/node-esm/{react-surface-77DKVMDV.mjs → react-surface-FIHMAFXH.mjs} +11 -10
  47. package/dist/lib/node-esm/react-surface-FIHMAFXH.mjs.map +7 -0
  48. package/dist/lib/node-esm/{settings-2HB6FKIK.mjs → settings-E3TH3FAW.mjs} +5 -4
  49. package/dist/lib/node-esm/settings-E3TH3FAW.mjs.map +7 -0
  50. package/dist/lib/node-esm/{state-JRQ45ACJ.mjs → state-WQEFBQMD.mjs} +7 -6
  51. package/dist/lib/node-esm/state-WQEFBQMD.mjs.map +7 -0
  52. package/dist/lib/node-esm/{toolkit-JLPZNNKB.mjs → toolkit-ME546G5T.mjs} +8 -7
  53. package/dist/lib/node-esm/toolkit-ME546G5T.mjs.map +7 -0
  54. package/dist/lib/node-esm/types/index.mjs +1 -1
  55. package/dist/lib/node-esm/{url-handler-QGF2R24T.mjs → url-handler-2KYHXINK.mjs} +11 -10
  56. package/dist/lib/node-esm/url-handler-2KYHXINK.mjs.map +7 -0
  57. package/dist/types/src/DeckPlugin.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -1
  59. package/dist/types/src/capabilities/check-app-scheme/check-app-scheme.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +2 -2
  61. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/react-root/react-root.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/react-surface/index.d.ts +1 -1
  64. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +2 -2
  66. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/settings/index.d.ts +1 -1
  68. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/settings/settings.d.ts +3 -2
  70. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/state/index.d.ts +2 -0
  72. package/dist/types/src/capabilities/state/index.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/state/state.d.ts +2 -0
  74. package/dist/types/src/capabilities/state/state.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/toolkit/index.d.ts +1 -1
  76. package/dist/types/src/capabilities/toolkit/index.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/toolkit/toolkit.d.ts +3 -2
  78. package/dist/types/src/capabilities/toolkit/toolkit.d.ts.map +1 -1
  79. package/dist/types/src/capabilities/url-handler/url-handler.d.ts.map +1 -1
  80. package/dist/types/src/components/DeckLayout/ActiveNode.d.ts.map +1 -1
  81. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts +1 -0
  82. package/dist/types/src/components/DeckLayout/DeckLayout.stories.d.ts.map +1 -1
  83. package/dist/types/src/components/DeckLayout/Dialog.d.ts.map +1 -1
  84. package/dist/types/src/components/DeckLayout/Popover.d.ts.map +1 -1
  85. package/dist/types/src/components/DeckLayout/Toast.d.ts +3 -3
  86. package/dist/types/src/components/DeckLayout/Toast.d.ts.map +1 -1
  87. package/dist/types/src/components/Plank/Plank.d.ts.map +1 -1
  88. package/dist/types/src/components/Plank/Plank.stories.d.ts +1 -0
  89. package/dist/types/src/components/Plank/Plank.stories.d.ts.map +1 -1
  90. package/dist/types/src/components/Plank/PlankHeading.d.ts.map +1 -1
  91. package/dist/types/src/translations.d.ts +1 -0
  92. package/dist/types/src/translations.d.ts.map +1 -1
  93. package/dist/types/src/types/capabilities.d.ts +2 -0
  94. package/dist/types/src/types/capabilities.d.ts.map +1 -1
  95. package/dist/types/src/types/events.d.ts.map +1 -1
  96. package/dist/types/src/types/schema.d.ts +2 -0
  97. package/dist/types/src/types/schema.d.ts.map +1 -1
  98. package/dist/types/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +43 -42
  100. package/src/DeckPlugin.ts +12 -11
  101. package/src/capabilities/app-graph-builder/app-graph-builder.ts +11 -10
  102. package/src/capabilities/check-app-scheme/check-app-scheme.ts +12 -8
  103. package/src/capabilities/operation-resolver/operation-resolver.ts +95 -80
  104. package/src/capabilities/react-root/react-root.tsx +2 -2
  105. package/src/capabilities/react-surface/react-surface.tsx +8 -7
  106. package/src/capabilities/settings/settings.ts +3 -2
  107. package/src/capabilities/state/state.ts +5 -4
  108. package/src/capabilities/toolkit/toolkit.ts +6 -5
  109. package/src/capabilities/url-handler/url-handler.ts +8 -7
  110. package/src/components/DeckLayout/ActiveNode.tsx +3 -2
  111. package/src/components/DeckLayout/Banner.tsx +4 -4
  112. package/src/components/DeckLayout/ContentEmpty.tsx +2 -2
  113. package/src/components/DeckLayout/DeckLayout.stories.tsx +5 -4
  114. package/src/components/DeckLayout/DeckMain.tsx +7 -7
  115. package/src/components/DeckLayout/Dialog.tsx +9 -3
  116. package/src/components/DeckLayout/Popover.tsx +21 -5
  117. package/src/components/DeckLayout/StatusBar.tsx +3 -3
  118. package/src/components/DeckLayout/Toast.tsx +3 -3
  119. package/src/components/DeckSettings/DeckSettings.tsx +21 -21
  120. package/src/components/Plank/Plank.stories.tsx +4 -3
  121. package/src/components/Plank/Plank.tsx +5 -4
  122. package/src/components/Plank/PlankControls.tsx +1 -1
  123. package/src/components/Plank/PlankHeading.tsx +7 -6
  124. package/src/components/Sidebar/ComplementarySidebar.tsx +19 -15
  125. package/src/components/Sidebar/Sidebar.tsx +2 -2
  126. package/src/components/Sidebar/SidebarButton.tsx +9 -9
  127. package/src/hooks/useCompanions.ts +1 -1
  128. package/src/hooks/useDeckCompanions.ts +1 -1
  129. package/src/hooks/useDeckState.ts +3 -3
  130. package/src/hooks/useHoistStatusbar.ts +1 -1
  131. package/src/translations.ts +1 -0
  132. package/src/types/capabilities.ts +2 -2
  133. package/src/types/events.ts +4 -3
  134. package/src/types/schema.ts +7 -3
  135. package/dist/lib/browser/app-graph-builder-DTVCULQ4.mjs.map +0 -7
  136. package/dist/lib/browser/check-app-scheme-JSRXXIYF.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-ATFPDN6J.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-EREEXCHO.mjs.map +0 -7
  139. package/dist/lib/browser/chunk-UNG4CLLP.mjs.map +0 -7
  140. package/dist/lib/browser/operation-resolver-CDYBLZJ4.mjs.map +0 -7
  141. package/dist/lib/browser/react-root-LYNEKGHM.mjs.map +0 -7
  142. package/dist/lib/browser/react-surface-RPKD7XUR.mjs.map +0 -7
  143. package/dist/lib/browser/settings-OMHVGZ6V.mjs.map +0 -7
  144. package/dist/lib/browser/state-OC3BSB6E.mjs.map +0 -7
  145. package/dist/lib/browser/toolkit-R53LD3EA.mjs.map +0 -7
  146. package/dist/lib/browser/url-handler-53TE6JZO.mjs.map +0 -7
  147. package/dist/lib/node-esm/app-graph-builder-473BNZDJ.mjs.map +0 -7
  148. package/dist/lib/node-esm/check-app-scheme-IVYRHKRH.mjs.map +0 -7
  149. package/dist/lib/node-esm/chunk-SKEVPQ7E.mjs.map +0 -7
  150. package/dist/lib/node-esm/chunk-V6VEXRD4.mjs.map +0 -7
  151. package/dist/lib/node-esm/chunk-XAKTY3EB.mjs.map +0 -7
  152. package/dist/lib/node-esm/operation-resolver-WUOE33ID.mjs.map +0 -7
  153. package/dist/lib/node-esm/react-root-L7H43AS3.mjs.map +0 -7
  154. package/dist/lib/node-esm/react-surface-77DKVMDV.mjs.map +0 -7
  155. package/dist/lib/node-esm/settings-2HB6FKIK.mjs.map +0 -7
  156. package/dist/lib/node-esm/state-JRQ45ACJ.mjs.map +0 -7
  157. package/dist/lib/node-esm/toolkit-JLPZNNKB.mjs.map +0 -7
  158. package/dist/lib/node-esm/url-handler-QGF2R24T.mjs.map +0 -7
@@ -13,13 +13,14 @@ import {
13
13
  getMode,
14
14
  isLayoutMode,
15
15
  meta
16
- } from "./chunk-ATFPDN6J.mjs";
16
+ } from "./chunk-DONG2FYU.mjs";
17
17
 
18
18
  // src/capabilities/operation-resolver/operation-resolver.ts
19
19
  import * as Effect from "effect/Effect";
20
20
  import * as Function from "effect/Function";
21
21
  import * as Option from "effect/Option";
22
- import { Capability, Common } from "@dxos/app-framework";
22
+ import { Capabilities, Capability, UndoOperation } from "@dxos/app-framework";
23
+ import { AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
23
24
  import { Obj } from "@dxos/echo";
24
25
  import { invariant } from "@dxos/invariant";
25
26
  import { log } from "@dxos/log";
@@ -34,7 +35,7 @@ var updateActiveDeck = (current, deckUpdates) => {
34
35
  const currentDeck = current.decks[current.activeDeck];
35
36
  invariant(currentDeck, `Deck not found: ${current.activeDeck}`, {
36
37
  F: __dxlog_file,
37
- L: 40,
38
+ L: 41,
38
39
  S: void 0,
39
40
  A: [
40
41
  "currentDeck",
@@ -53,18 +54,18 @@ var updateActiveDeck = (current, deckUpdates) => {
53
54
  };
54
55
  };
55
56
  var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(function* () {
56
- return Capability.contributes(Common.Capability.OperationResolver, [
57
+ return Capability.contributes(Capabilities.OperationResolver, [
57
58
  //
58
59
  // UpdateSidebar
59
60
  //
60
61
  OperationResolver.make({
61
- operation: Common.LayoutOperation.UpdateSidebar,
62
+ operation: LayoutOperation.UpdateSidebar,
62
63
  handler: Effect.fnUntraced(function* (input) {
63
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
64
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
64
65
  const next = input.state ?? state.sidebarState;
65
66
  if (next !== state.sidebarState) {
66
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({
67
- ...s,
67
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => ({
68
+ ...state2,
68
69
  sidebarState: next
69
70
  }));
70
71
  }
@@ -74,17 +75,17 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
74
75
  // UpdateComplementary
75
76
  //
76
77
  OperationResolver.make({
77
- operation: Common.LayoutOperation.UpdateComplementary,
78
+ operation: LayoutOperation.UpdateComplementary,
78
79
  handler: Effect.fnUntraced(function* (input) {
79
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
80
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
80
81
  const panelChanged = state.complementarySidebarPanel !== input.subject;
81
82
  const next = input.subject ? "expanded" : input.state ?? state.complementarySidebarState;
82
83
  const stateChanged = next !== state.complementarySidebarState;
83
84
  if (panelChanged || stateChanged) {
84
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({
85
- ...s,
86
- complementarySidebarPanel: panelChanged ? input.subject : s.complementarySidebarPanel,
87
- complementarySidebarState: stateChanged ? next : s.complementarySidebarState
85
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => ({
86
+ ...state2,
87
+ complementarySidebarPanel: panelChanged ? input.subject : state2.complementarySidebarPanel,
88
+ complementarySidebarState: stateChanged ? next : state2.complementarySidebarState
88
89
  }));
89
90
  }
90
91
  })
@@ -93,10 +94,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
93
94
  // UpdateDialog
94
95
  //
95
96
  OperationResolver.make({
96
- operation: Common.LayoutOperation.UpdateDialog,
97
+ operation: LayoutOperation.UpdateDialog,
97
98
  handler: Effect.fnUntraced(function* (input) {
98
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
99
- ...s,
99
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
100
+ ...state,
100
101
  dialogOpen: input.state ?? Boolean(input.subject),
101
102
  dialogType: input.type ?? "default",
102
103
  dialogBlockAlign: input.blockAlign ?? "center",
@@ -113,13 +114,14 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
113
114
  // UpdatePopover
114
115
  //
115
116
  OperationResolver.make({
116
- operation: Common.LayoutOperation.UpdatePopover,
117
+ operation: LayoutOperation.UpdatePopover,
117
118
  handler: Effect.fnUntraced(function* (input) {
118
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
119
- ...s,
119
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
120
+ ...state,
120
121
  popoverOpen: input.state ?? Boolean(input.subject),
121
122
  popoverKind: input.kind ?? "base",
122
123
  popoverTitle: input.kind === "card" ? input.title : void 0,
124
+ popoverContentRef: input.subjectRef,
123
125
  popoverContent: typeof input.subject === "string" ? {
124
126
  component: input.subject,
125
127
  props: input.props
@@ -127,8 +129,8 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
127
129
  subject: input.subject
128
130
  } : null,
129
131
  popoverSide: input.side,
130
- popoverAnchor: input.variant === "virtual" ? input.anchor : s.popoverAnchor,
131
- popoverAnchorId: input.variant !== "virtual" ? input.anchorId : s.popoverAnchorId
132
+ popoverAnchor: input.variant === "virtual" ? input.anchor : state.popoverAnchor,
133
+ popoverAnchorId: input.variant !== "virtual" ? input.anchorId : state.popoverAnchorId
132
134
  }));
133
135
  })
134
136
  }),
@@ -136,12 +138,12 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
136
138
  // AddToast
137
139
  //
138
140
  OperationResolver.make({
139
- operation: Common.LayoutOperation.AddToast,
141
+ operation: LayoutOperation.AddToast,
140
142
  handler: Effect.fnUntraced(function* (input) {
141
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
142
- ...s,
143
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
144
+ ...state,
143
145
  toasts: [
144
- ...s.toasts,
146
+ ...state.toasts,
145
147
  input
146
148
  ]
147
149
  }));
@@ -151,12 +153,12 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
151
153
  // ShowUndo
152
154
  //
153
155
  OperationResolver.make({
154
- operation: Common.UndoOperation.ShowUndo,
156
+ operation: UndoOperation.ShowUndo,
155
157
  handler: Effect.fnUntraced(function* (input) {
156
- const historyTracker = yield* Capability.get(Common.Capability.HistoryTracker);
158
+ const historyTracker = yield* Capability.get(Capabilities.HistoryTracker);
157
159
  const newUndoId = `show-undo-${Date.now()}`;
158
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => {
159
- const filteredToasts = s.currentUndoId ? s.toasts.filter((toast2) => toast2.id !== s.currentUndoId) : s.toasts;
160
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => {
161
+ const filteredToasts = state.currentUndoId ? state.toasts.filter((toast2) => toast2.id !== state.currentUndoId) : state.toasts;
160
162
  const toast = {
161
163
  id: newUndoId,
162
164
  title: input.message ?? [
@@ -187,7 +189,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
187
189
  onAction: () => historyTracker.undoPromise()
188
190
  };
189
191
  return {
190
- ...s,
192
+ ...state,
191
193
  currentUndoId: newUndoId,
192
194
  toasts: [
193
195
  ...filteredToasts,
@@ -201,7 +203,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
201
203
  // SetLayoutMode
202
204
  //
203
205
  OperationResolver.make({
204
- operation: Common.LayoutOperation.SetLayoutMode,
206
+ operation: LayoutOperation.SetLayoutMode,
205
207
  filter: (input) => {
206
208
  if ("mode" in input) {
207
209
  return isLayoutMode(input.mode);
@@ -209,7 +211,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
209
211
  return true;
210
212
  },
211
213
  handler: Effect.fnUntraced(function* (input) {
212
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
214
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
213
215
  const deck = yield* DeckCapabilities.getDeck();
214
216
  const computeModeUpdate = (mode, subject) => {
215
217
  const current = deck.solo ? [
@@ -244,24 +246,24 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
244
246
  if ("mode" in input) {
245
247
  const currentMode = getMode(deck);
246
248
  const deckUpdates = computeModeUpdate(input.mode, "subject" in input ? input.subject : void 0);
247
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {
249
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => {
248
250
  const newPreviousMode = currentMode !== input.mode ? {
249
- ...s.previousMode,
250
- [s.activeDeck]: currentMode
251
- } : s.previousMode;
251
+ ...state2.previousMode,
252
+ [state2.activeDeck]: currentMode
253
+ } : state2.previousMode;
252
254
  return {
253
- ...updateActiveDeck(s, deckUpdates),
255
+ ...updateActiveDeck(state2, deckUpdates),
254
256
  previousMode: newPreviousMode
255
257
  };
256
258
  });
257
259
  } else if ("revert" in input) {
258
260
  const last = state.previousMode[state.activeDeck];
259
261
  const deckUpdates = computeModeUpdate(last ?? "solo");
260
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
262
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => updateActiveDeck(state2, deckUpdates));
261
263
  } else {
262
264
  log.warn("Invalid layout mode", input, {
263
265
  F: __dxlog_file,
264
- L: 244,
266
+ L: 253,
265
267
  S: this,
266
268
  C: (f, a) => f(...a)
267
269
  });
@@ -272,33 +274,33 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
272
274
  // SwitchWorkspace
273
275
  //
274
276
  OperationResolver.make({
275
- operation: Common.LayoutOperation.SwitchWorkspace,
277
+ operation: LayoutOperation.SwitchWorkspace,
276
278
  handler: Effect.fnUntraced(function* (input) {
277
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
279
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
278
280
  {
279
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
281
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
280
282
  const shouldUpdatePrevious = !state.activeDeck.startsWith("!");
281
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {
282
- const newDecks = s.decks[input.subject] ? s.decks : {
283
- ...s.decks,
283
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => {
284
+ const newDecks = state2.decks[input.subject] ? state2.decks : {
285
+ ...state2.decks,
284
286
  [input.subject]: {
285
287
  ...defaultDeck
286
288
  }
287
289
  };
288
290
  return {
289
- ...s,
290
- previousDeck: shouldUpdatePrevious ? s.activeDeck : s.previousDeck,
291
+ ...state2,
292
+ previousDeck: shouldUpdatePrevious ? state2.activeDeck : state2.previousDeck,
291
293
  activeDeck: input.subject,
292
294
  decks: newDecks
293
295
  };
294
296
  });
295
297
  }
296
298
  {
297
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
299
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
298
300
  const deck = state.decks[input.subject];
299
301
  invariant(deck, `Deck not found: ${input.subject}`, {
300
302
  F: __dxlog_file,
301
- L: 277,
303
+ L: 288,
302
304
  S: this,
303
305
  A: [
304
306
  "deck",
@@ -307,13 +309,13 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
307
309
  });
308
310
  const first = deck.solo ? deck.solo : deck.active[0];
309
311
  if (first) {
310
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
312
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
311
313
  subject: first
312
314
  });
313
315
  } else {
314
316
  const [item] = Graph.getConnections(graph, input.subject).filter((node) => !Node.isActionLike(node) && !node.properties.disposition);
315
317
  if (item) {
316
- yield* Operation.schedule(Common.LayoutOperation.Open, {
318
+ yield* Operation.schedule(LayoutOperation.Open, {
317
319
  subject: [
318
320
  item.id
319
321
  ]
@@ -327,10 +329,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
327
329
  // RevertWorkspace
328
330
  //
329
331
  OperationResolver.make({
330
- operation: Common.LayoutOperation.RevertWorkspace,
332
+ operation: LayoutOperation.RevertWorkspace,
331
333
  handler: Effect.fnUntraced(function* () {
332
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
333
- yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, {
334
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
335
+ yield* Operation.invoke(LayoutOperation.SwitchWorkspace, {
334
336
  subject: state.previousDeck
335
337
  });
336
338
  })
@@ -339,15 +341,15 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
339
341
  // Open
340
342
  //
341
343
  OperationResolver.make({
342
- operation: Common.LayoutOperation.Open,
344
+ operation: LayoutOperation.Open,
343
345
  handler: Effect.fnUntraced(function* (input) {
344
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
346
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
345
347
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
346
- const settings = yield* Common.Capability.getAtomValue(DeckCapabilities.Settings);
348
+ const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);
347
349
  {
348
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
350
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
349
351
  if (input.workspace && state.activeDeck !== input.workspace) {
350
- yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, {
352
+ yield* Operation.invoke(LayoutOperation.SwitchWorkspace, {
351
353
  subject: input.workspace
352
354
  });
353
355
  }
@@ -369,7 +371,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
369
371
  deck,
370
372
  attention
371
373
  });
372
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
374
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
373
375
  }
374
376
  {
375
377
  const deck = yield* DeckCapabilities.getDeck();
@@ -378,12 +380,12 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
378
380
  ] : deck.active;
379
381
  const newlyOpen = ids.filter((i) => !previouslyOpenIds.has(i));
380
382
  if (input.scrollIntoView !== false && (newlyOpen[0] ?? input.subject[0])) {
381
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
383
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
382
384
  subject: newlyOpen[0] ?? input.subject[0]
383
385
  });
384
386
  }
385
387
  if (newlyOpen[0] ?? input.subject[0]) {
386
- yield* Operation.schedule(Common.LayoutOperation.Expose, {
388
+ yield* Operation.schedule(LayoutOperation.Expose, {
387
389
  subject: newlyOpen[0] ?? input.subject[0]
388
390
  });
389
391
  }
@@ -412,9 +414,9 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
412
414
  OperationResolver.make({
413
415
  operation: DeckOperation.UpdatePlankSize,
414
416
  handler: Effect.fnUntraced(function* (input) {
415
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, {
417
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, {
416
418
  plankSizing: {
417
- ...s.decks[s.activeDeck]?.plankSizing,
419
+ ...state.decks[state.activeDeck]?.plankSizing,
418
420
  [input.id]: input.size
419
421
  }
420
422
  }));
@@ -426,10 +428,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
426
428
  OperationResolver.make({
427
429
  operation: DeckOperation.Adjust,
428
430
  handler: Effect.fnUntraced(function* (input) {
429
- const _state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
431
+ const _state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
430
432
  const deck = yield* DeckCapabilities.getDeck();
431
433
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
432
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
434
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
433
435
  let soloOperation;
434
436
  if (input.type === "increment-end" || input.type === "increment-start") {
435
437
  const next = incrementPlank(deck.active, input);
@@ -438,7 +440,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
438
440
  deck,
439
441
  attention
440
442
  });
441
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
443
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
442
444
  }
443
445
  if (input.type.startsWith("solo")) {
444
446
  const entryId = input.id;
@@ -464,15 +466,15 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
464
466
  }
465
467
  }
466
468
  if (soloOperation?.type === "solo") {
467
- yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, {
469
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, {
468
470
  subject: soloOperation.entryId,
469
471
  mode: soloOperation.mode
470
472
  });
471
473
  } else if (soloOperation?.type === "unsolo") {
472
- yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, {
474
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, {
473
475
  mode: "deck"
474
476
  });
475
- yield* Operation.invoke(Common.LayoutOperation.Open, {
477
+ yield* Operation.invoke(LayoutOperation.Open, {
476
478
  subject: [
477
479
  soloOperation.entryId
478
480
  ]
@@ -498,21 +500,21 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
498
500
  const deck = yield* DeckCapabilities.getDeck();
499
501
  if (input.companion === null) {
500
502
  const { [input.primary]: _, ...nextActiveCompanions } = deck.activeCompanions ?? {};
501
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, {
503
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, {
502
504
  activeCompanions: nextActiveCompanions
503
505
  }));
504
506
  } else {
505
507
  const companion = input.companion;
506
508
  invariant(companion !== input.primary, void 0, {
507
509
  F: __dxlog_file,
508
- L: 479,
510
+ L: 494,
509
511
  S: this,
510
512
  A: [
511
513
  "companion !== input.primary",
512
514
  ""
513
515
  ]
514
516
  });
515
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, {
517
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, {
516
518
  activeCompanions: {
517
519
  ...deck.activeCompanions,
518
520
  [input.primary]: companion
@@ -525,7 +527,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
525
527
  // Close
526
528
  //
527
529
  OperationResolver.make({
528
- operation: Common.LayoutOperation.Close,
530
+ operation: LayoutOperation.Close,
529
531
  handler: Effect.fnUntraced(function* (input) {
530
532
  const deck = yield* DeckCapabilities.getDeck();
531
533
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
@@ -538,7 +540,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
538
540
  deck,
539
541
  attention
540
542
  });
541
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
543
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
542
544
  for (const id of input.subject) {
543
545
  if (deck.activeCompanions && id in deck.activeCompanions) {
544
546
  yield* Operation.invoke(DeckOperation.ChangeCompanion, {
@@ -548,7 +550,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
548
550
  }
549
551
  }
550
552
  if (toAttend) {
551
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
553
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
552
554
  subject: toAttend
553
555
  });
554
556
  }
@@ -558,7 +560,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
558
560
  // Set
559
561
  //
560
562
  OperationResolver.make({
561
- operation: Common.LayoutOperation.Set,
563
+ operation: LayoutOperation.Set,
562
564
  handler: Effect.fnUntraced(function* (input) {
563
565
  const deck = yield* DeckCapabilities.getDeck();
564
566
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
@@ -567,9 +569,9 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
567
569
  deck,
568
570
  attention
569
571
  });
570
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
572
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
571
573
  if (toAttend) {
572
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
574
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
573
575
  subject: toAttend
574
576
  });
575
577
  }
@@ -579,10 +581,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
579
581
  // ScrollIntoView
580
582
  //
581
583
  OperationResolver.make({
582
- operation: Common.LayoutOperation.ScrollIntoView,
584
+ operation: LayoutOperation.ScrollIntoView,
583
585
  handler: Effect.fnUntraced(function* (input) {
584
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
585
- ...s,
586
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
587
+ ...state,
586
588
  scrollIntoView: input.subject
587
589
  }));
588
590
  })
@@ -592,4 +594,4 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
592
594
  export {
593
595
  operation_resolver_default as default
594
596
  };
595
- //# sourceMappingURL=operation-resolver-CDYBLZJ4.mjs.map
597
+ //# sourceMappingURL=operation-resolver-XJFR3PNQ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/operation-resolver/operation-resolver.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\n\nimport { Capabilities, Capability, UndoOperation } from '@dxos/app-framework';\nimport { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\nimport { OperationResolver } from '@dxos/operation';\nimport { Operation } from '@dxos/operation';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { Graph, Node } from '@dxos/plugin-graph';\nimport { ObservabilityOperation } from '@dxos/plugin-observability/types';\nimport { byPosition, isNonNullable } from '@dxos/util';\n\nimport { closeEntry, createEntryId, incrementPlank, openEntry } from '../../layout';\nimport { meta } from '../../meta';\nimport {\n DeckCapabilities,\n DeckOperation,\n type DeckState,\n type DeckStateProps,\n type LayoutMode,\n PLANK_COMPANION_TYPE,\n defaultDeck,\n getMode,\n isLayoutMode,\n} from '../../types';\nimport { computeActiveUpdates } from '../../util';\n\n/**\n * Helper to update the active deck within the persisted state.\n */\nconst updateActiveDeck = (current: DeckStateProps, deckUpdates: Partial<DeckState>): DeckStateProps => {\n const currentDeck = current.decks[current.activeDeck];\n invariant(currentDeck, `Deck not found: ${current.activeDeck}`);\n return {\n ...current,\n decks: {\n ...current.decks,\n [current.activeDeck]: {\n ...currentDeck,\n ...deckUpdates,\n },\n },\n };\n};\n\nexport default Capability.makeModule(\n Effect.fnUntraced(function* () {\n return Capability.contributes(Capabilities.OperationResolver, [\n //\n // UpdateSidebar\n //\n OperationResolver.make({\n operation: LayoutOperation.UpdateSidebar,\n handler: Effect.fnUntraced(function* (input) {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const next = input.state ?? state.sidebarState;\n if (next !== state.sidebarState) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => ({\n ...state,\n sidebarState: next,\n }));\n }\n }),\n }),\n\n //\n // UpdateComplementary\n //\n OperationResolver.make({\n operation: LayoutOperation.UpdateComplementary,\n handler: Effect.fnUntraced(function* (input) {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const panelChanged = state.complementarySidebarPanel !== input.subject;\n const next = input.subject ? 'expanded' : (input.state ?? state.complementarySidebarState);\n const stateChanged = next !== state.complementarySidebarState;\n\n if (panelChanged || stateChanged) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => ({\n ...state,\n complementarySidebarPanel: panelChanged ? input.subject : state.complementarySidebarPanel,\n complementarySidebarState: stateChanged ? next : state.complementarySidebarState,\n }));\n }\n }),\n }),\n\n //\n // UpdateDialog\n //\n OperationResolver.make({\n operation: LayoutOperation.UpdateDialog,\n handler: Effect.fnUntraced(function* (input) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({\n ...state,\n dialogOpen: input.state ?? Boolean(input.subject),\n dialogType: input.type ?? 'default',\n dialogBlockAlign: input.blockAlign ?? 'center',\n dialogOverlayClasses: input.overlayClasses,\n dialogOverlayStyle: input.overlayStyle,\n dialogContent: input.subject ? { component: input.subject, props: input.props } : null,\n }));\n }),\n }),\n\n //\n // UpdatePopover\n //\n OperationResolver.make({\n operation: LayoutOperation.UpdatePopover,\n handler: Effect.fnUntraced(function* (input) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({\n ...state,\n popoverOpen: input.state ?? Boolean(input.subject),\n popoverKind: input.kind ?? 'base',\n popoverTitle: input.kind === 'card' ? input.title : undefined,\n popoverContentRef: input.subjectRef,\n popoverContent:\n typeof input.subject === 'string'\n ? { component: input.subject, props: input.props }\n : input.subject\n ? { subject: input.subject }\n : null,\n popoverSide: input.side,\n popoverAnchor: input.variant === 'virtual' ? input.anchor : state.popoverAnchor,\n popoverAnchorId: input.variant !== 'virtual' ? input.anchorId : state.popoverAnchorId,\n }));\n }),\n }),\n\n //\n // AddToast\n //\n OperationResolver.make({\n operation: LayoutOperation.AddToast,\n handler: Effect.fnUntraced(function* (input) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({\n ...state,\n toasts: [...state.toasts, input as LayoutOperation.Toast],\n }));\n }),\n }),\n\n //\n // ShowUndo\n //\n OperationResolver.make({\n operation: UndoOperation.ShowUndo,\n handler: Effect.fnUntraced(function* (input) {\n const historyTracker = yield* Capability.get(Capabilities.HistoryTracker);\n\n const newUndoId = `show-undo-${Date.now()}`;\n // TODO(wittjosiah): Support undoing further back than the last action.\n yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => {\n const filteredToasts = state.currentUndoId\n ? state.toasts.filter((toast) => toast.id !== state.currentUndoId)\n : state.toasts;\n\n const toast: LayoutOperation.Toast = {\n id: newUndoId,\n title: input.message ?? ['undo available label', { ns: meta.id }],\n duration: 10_000,\n actionLabel: ['undo action label', { ns: meta.id }],\n actionAlt: ['undo action alt', { ns: meta.id }],\n closeLabel: ['undo close label', { ns: meta.id }],\n onAction: () => historyTracker.undoPromise(),\n };\n\n return {\n ...state,\n currentUndoId: newUndoId,\n toasts: [...filteredToasts, toast],\n };\n });\n }),\n }),\n\n //\n // SetLayoutMode\n //\n OperationResolver.make({\n operation: LayoutOperation.SetLayoutMode,\n filter: (input) => {\n if ('mode' in input) {\n return isLayoutMode(input.mode);\n }\n return true;\n },\n handler: Effect.fnUntraced(function* (input) {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const deck = yield* DeckCapabilities.getDeck();\n\n const computeModeUpdate = (mode: LayoutMode, subject?: string): Partial<DeckState> => {\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: string) => !next.includes(id));\n const closed = Array.from(\n new Set([...deck.inactive.filter((id: string) => !next.includes(id)), ...removed]),\n );\n\n // Build deckUpdates object without mutating.\n const soloUpdate =\n mode !== 'deck' && next[0]\n ? { solo: next[0] }\n : mode === 'deck' && deck.solo\n ? { solo: undefined, initialized: true }\n : {};\n\n const fullscreenUpdate = mode === 'solo--fullscreen' ? { fullscreen: !deck.fullscreen } : {};\n\n return {\n inactive: closed,\n ...soloUpdate,\n ...fullscreenUpdate,\n };\n };\n\n if ('mode' in input) {\n const currentMode = getMode(deck);\n const deckUpdates = computeModeUpdate(\n input.mode as LayoutMode,\n 'subject' in input ? input.subject : undefined,\n );\n\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => {\n const newPreviousMode =\n currentMode !== input.mode\n ? { ...state.previousMode, [state.activeDeck]: currentMode }\n : state.previousMode;\n return {\n ...updateActiveDeck(state, deckUpdates),\n previousMode: newPreviousMode,\n };\n });\n } else if ('revert' in input) {\n const last = state.previousMode[state.activeDeck];\n const deckUpdates = computeModeUpdate(last ?? 'solo');\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>\n updateActiveDeck(state, deckUpdates),\n );\n } else {\n log.warn('Invalid layout mode', input);\n }\n }),\n }),\n\n //\n // SwitchWorkspace\n //\n OperationResolver.make({\n operation: LayoutOperation.SwitchWorkspace,\n handler: Effect.fnUntraced(function* (input) {\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n\n {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\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 const shouldUpdatePrevious = !state.activeDeck.startsWith('!');\n\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => {\n const newDecks = state.decks[input.subject]\n ? state.decks\n : { ...state.decks, [input.subject]: { ...defaultDeck } };\n return {\n ...state,\n previousDeck: shouldUpdatePrevious ? state.activeDeck : state.previousDeck,\n activeDeck: input.subject,\n decks: newDecks,\n };\n });\n }\n\n {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const deck = state.decks[input.subject];\n invariant(deck, `Deck not found: ${input.subject}`);\n\n const first = deck.solo ? deck.solo : deck.active[0];\n if (first) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: first });\n } else {\n const [item] = Graph.getConnections(graph, input.subject).filter(\n (node) => !Node.isActionLike(node) && !node.properties.disposition,\n );\n if (item) {\n yield* Operation.schedule(LayoutOperation.Open, { subject: [item.id] });\n }\n }\n }\n }),\n }),\n\n //\n // RevertWorkspace\n //\n OperationResolver.make({\n operation: LayoutOperation.RevertWorkspace,\n handler: Effect.fnUntraced(function* () {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n yield* Operation.invoke(LayoutOperation.SwitchWorkspace, { subject: state.previousDeck });\n }),\n }),\n\n //\n // Open\n //\n OperationResolver.make({\n operation: LayoutOperation.Open,\n handler: Effect.fnUntraced(function* (input) {\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);\n\n {\n const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n if (input.workspace && state.activeDeck !== input.workspace) {\n yield* Operation.invoke(LayoutOperation.SwitchWorkspace, { subject: input.workspace });\n }\n }\n\n let previouslyOpenIds: Set<string>;\n {\n const deck = yield* DeckCapabilities.getDeck();\n previouslyOpenIds = new Set<string>(deck.solo ? [deck.solo] : deck.active);\n const next = deck.solo\n ? input.subject.map((id) => createEntryId(id, input.variant))\n : input.subject.reduce(\n (acc, entryId) =>\n openEntry(acc, entryId, {\n key: input.key,\n positioning: input.positioning ?? settings?.newPlankPositioning,\n pivotId: input.pivotId,\n variant: input.variant,\n }),\n deck.active,\n );\n\n const { deckUpdates, toAttend: _toAttend } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>\n updateActiveDeck(state, deckUpdates),\n );\n }\n\n {\n const deck = yield* DeckCapabilities.getDeck();\n const ids = deck.solo ? [deck.solo] : deck.active;\n const newlyOpen = ids.filter((i: string) => !previouslyOpenIds.has(i));\n\n if (input.scrollIntoView !== false && (newlyOpen[0] ?? input.subject[0])) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, {\n subject: newlyOpen[0] ?? input.subject[0],\n });\n }\n\n if (newlyOpen[0] ?? input.subject[0]) {\n yield* Operation.schedule(LayoutOperation.Expose, { subject: newlyOpen[0] ?? input.subject[0] });\n }\n\n // Send analytics events for newly opened items.\n for (const subjectId of newlyOpen) {\n const typename = Option.match(Graph.getNode(graph, subjectId), {\n onNone: () => undefined,\n onSome: (node) => {\n const active = node.data;\n return Obj.isObject(active) ? Obj.getTypename(active) : undefined;\n },\n });\n yield* Operation.schedule(ObservabilityOperation.SendEvent, {\n name: 'navigation.activate',\n properties: { subjectId, typename },\n });\n }\n }\n }),\n }),\n\n //\n // UpdatePlankSize\n //\n OperationResolver.make({\n operation: DeckOperation.UpdatePlankSize,\n handler: Effect.fnUntraced(function* (input) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>\n updateActiveDeck(state, {\n plankSizing: {\n ...state.decks[state.activeDeck]?.plankSizing,\n [input.id]: input.size,\n },\n }),\n );\n }),\n }),\n\n //\n // Adjust\n //\n OperationResolver.make({\n operation: DeckOperation.Adjust,\n handler: Effect.fnUntraced(function* (input) {\n const _state = yield* Capabilities.getAtomValue(DeckCapabilities.State);\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n const { graph } = yield* Capability.get(AppCapabilities.AppGraph);\n\n // Collect layout operations to run after state updates.\n let soloOperation:\n | { type: 'solo'; entryId: string; mode: string }\n | { type: 'unsolo'; entryId: string }\n | undefined;\n\n if (input.type === 'increment-end' || input.type === 'increment-start') {\n const next = incrementPlank(deck.active, input);\n const { deckUpdates } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>\n updateActiveDeck(state, deckUpdates),\n );\n }\n\n if (input.type.startsWith('solo')) {\n const entryId = input.id;\n if (!deck.solo) {\n // Solo the entry.\n soloOperation = { type: 'solo', entryId, mode: input.type };\n } else {\n if (input.type === 'solo--fullscreen') {\n // Toggle fullscreen on the current entry.\n soloOperation = { type: 'solo', entryId, mode: 'solo--fullscreen' };\n } else if (input.type === 'solo') {\n // Un-solo the current entry and open it.\n soloOperation = { type: 'unsolo', entryId };\n }\n }\n }\n\n // Run collected solo operations.\n if (soloOperation?.type === 'solo') {\n yield* Operation.invoke(LayoutOperation.SetLayoutMode, {\n subject: soloOperation.entryId,\n mode: soloOperation.mode,\n });\n } else if (soloOperation?.type === 'unsolo') {\n yield* Operation.invoke(LayoutOperation.SetLayoutMode, { mode: 'deck' });\n yield* Operation.invoke(LayoutOperation.Open, { subject: [soloOperation.entryId] });\n }\n\n if (input.type === 'companion') {\n const companion = Function.pipe(\n Graph.getNode(graph, input.id),\n Option.map((node) =>\n Graph.getConnections(graph, node.id)\n .filter((n) => n.type === PLANK_COMPANION_TYPE)\n .toSorted((a, b) => byPosition(a.properties, b.properties)),\n ),\n Option.flatMap((companions) => (companions.length > 0 ? Option.some(companions[0]) : Option.none())),\n );\n\n if (Option.isSome(companion)) {\n // TODO(wittjosiah): This should remember the previously selected companion.\n yield* Operation.invoke(DeckOperation.ChangeCompanion, {\n primary: input.id,\n companion: companion.value.id,\n });\n }\n }\n }),\n }),\n\n //\n // ChangeCompanion\n //\n OperationResolver.make({\n operation: DeckOperation.ChangeCompanion,\n handler: Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n if (input.companion === null) {\n const { [input.primary]: _, ...nextActiveCompanions } = deck.activeCompanions ?? {};\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>\n updateActiveDeck(state, { activeCompanions: nextActiveCompanions }),\n );\n } else {\n const companion = input.companion;\n invariant(companion !== input.primary);\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>\n updateActiveDeck(state, {\n activeCompanions: {\n ...deck.activeCompanions,\n [input.primary]: companion,\n },\n }),\n );\n }\n }),\n }),\n\n //\n // Close\n //\n OperationResolver.make({\n operation: LayoutOperation.Close,\n handler: Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n\n const active = deck.solo ? [deck.solo] : deck.active;\n const next = input.subject.reduce((acc, id) => closeEntry(acc, id), active);\n const { deckUpdates, toAttend } = computeActiveUpdates({ next, deck, attention });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));\n\n // Clear companions for closed entries.\n for (const id of input.subject) {\n if (deck.activeCompanions && id in deck.activeCompanions) {\n yield* Operation.invoke(DeckOperation.ChangeCompanion, { primary: id, companion: null });\n }\n }\n\n if (toAttend) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: toAttend });\n }\n }),\n }),\n\n //\n // Set\n //\n OperationResolver.make({\n operation: LayoutOperation.Set,\n handler: Effect.fnUntraced(function* (input) {\n const deck = yield* DeckCapabilities.getDeck();\n const attention = yield* Capability.get(AttentionCapabilities.Attention);\n\n const { deckUpdates, toAttend } = computeActiveUpdates({\n next: input.subject as string[],\n deck,\n attention,\n });\n yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));\n\n if (toAttend) {\n yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: toAttend });\n }\n }),\n }),\n\n //\n // ScrollIntoView\n //\n OperationResolver.make({\n operation: LayoutOperation.ScrollIntoView,\n handler: Effect.fnUntraced(function* (input) {\n yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({\n ...state,\n scrollIntoView: input.subject,\n }));\n }),\n }),\n ]);\n }),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Function", "Option", "Capabilities", "Capability", "UndoOperation", "AppCapabilities", "LayoutOperation", "Obj", "invariant", "log", "OperationResolver", "Operation", "AttentionCapabilities", "Graph", "Node", "ObservabilityOperation", "byPosition", "isNonNullable", "updateActiveDeck", "current", "deckUpdates", "currentDeck", "decks", "activeDeck", "invariant", "Capability", "makeModule", "fnUntraced", "contributes", "Capabilities", "OperationResolver", "make", "operation", "LayoutOperation", "UpdateSidebar", "handler", "input", "state", "getAtomValue", "DeckCapabilities", "State", "next", "sidebarState", "updateAtomValue", "UpdateComplementary", "panelChanged", "complementarySidebarPanel", "subject", "complementarySidebarState", "stateChanged", "UpdateDialog", "EphemeralState", "dialogOpen", "Boolean", "dialogType", "type", "dialogBlockAlign", "blockAlign", "dialogOverlayClasses", "overlayClasses", "dialogOverlayStyle", "overlayStyle", "dialogContent", "component", "props", "UpdatePopover", "popoverOpen", "popoverKind", "kind", "popoverTitle", "title", "undefined", "popoverContentRef", "subjectRef", "popoverContent", "popoverSide", "side", "popoverAnchor", "variant", "anchor", "popoverAnchorId", "anchorId", "AddToast", "toasts", "UndoOperation", "ShowUndo", "historyTracker", "get", "HistoryTracker", "newUndoId", "Date", "now", "filteredToasts", "currentUndoId", "filter", "toast", "id", "message", "ns", "meta", "duration", "actionLabel", "actionAlt", "closeLabel", "onAction", "undoPromise", "SetLayoutMode", "isLayoutMode", "mode", "deck", "getDeck", "computeModeUpdate", "solo", "active", "isNonNullable", "removed", "includes", "closed", "Array", "from", "Set", "inactive", "soloUpdate", "initialized", "fullscreenUpdate", "fullscreen", "currentMode", "getMode", "newPreviousMode", "previousMode", "last", "log", "warn", "SwitchWorkspace", "graph", "AppCapabilities", "AppGraph", "shouldUpdatePrevious", "startsWith", "newDecks", "defaultDeck", "previousDeck", "first", "Operation", "schedule", "ScrollIntoView", "item", "Graph", "getConnections", "node", "Node", "isActionLike", "properties", "disposition", "Open", "RevertWorkspace", "invoke", "attention", "AttentionCapabilities", "Attention", "settings", "Settings", "workspace", "previouslyOpenIds", "map", "createEntryId", "reduce", "acc", "entryId", "openEntry", "key", "positioning", "newPlankPositioning", "pivotId", "toAttend", "_toAttend", "computeActiveUpdates", "ids", "newlyOpen", "i", "has", "scrollIntoView", "Expose", "subjectId", "typename", "match", "getNode", "onNone", "onSome", "data", "Obj", "isObject", "getTypename", "ObservabilityOperation", "SendEvent", "name", "DeckOperation", "UpdatePlankSize", "plankSizing", "size", "Adjust", "_state", "soloOperation", "incrementPlank", "companion", "pipe", "n", "PLANK_COMPANION_TYPE", "toSorted", "a", "b", "byPosition", "flatMap", "companions", "length", "some", "none", "isSome", "ChangeCompanion", "primary", "value", "_", "nextActiveCompanions", "activeCompanions", "Close", "closeEntry"]
7
+ }
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  DeckLayout
3
- } from "./chunk-EREEXCHO.mjs";
3
+ } from "./chunk-JGC4ZLG3.mjs";
4
4
  import {
5
5
  useDeckState
6
- } from "./chunk-UNG4CLLP.mjs";
6
+ } from "./chunk-YT3AJVUU.mjs";
7
7
  import "./chunk-NHABISX2.mjs";
8
8
  import {
9
9
  meta
10
- } from "./chunk-ATFPDN6J.mjs";
10
+ } from "./chunk-DONG2FYU.mjs";
11
11
 
12
12
  // src/capabilities/react-root/react-root.tsx
13
13
  import * as Effect from "effect/Effect";
14
14
  import React, { useCallback } from "react";
15
- import { Capability, Common } from "@dxos/app-framework";
16
- var react_root_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Common.Capability.ReactRoot, {
15
+ import { Capabilities, Capability } from "@dxos/app-framework";
16
+ var react_root_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactRoot, {
17
17
  id: meta.id,
18
18
  root: () => {
19
19
  const { state, updateEphemeral } = useDeckState();
@@ -44,4 +44,4 @@ var react_root_default = Capability.makeModule(() => Effect.succeed(Capability.c
44
44
  export {
45
45
  react_root_default as default
46
46
  };
47
- //# sourceMappingURL=react-root-LYNEKGHM.mjs.map
47
+ //# sourceMappingURL=react-root-AJFHKHRL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-root/react-root.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport React, { useCallback } from 'react';\n\nimport { Capabilities, Capability } from '@dxos/app-framework';\n\nimport { DeckLayout } from '../../components';\nimport { useDeckState } from '../../hooks';\nimport { meta } from '../../meta';\n\nexport default Capability.makeModule(() =>\n Effect.succeed(\n Capability.contributes(Capabilities.ReactRoot, {\n id: meta.id,\n root: () => {\n const { state, updateEphemeral } = useDeckState();\n\n const handleDismissToast = useCallback(\n (id: string) => {\n const index = state.toasts.findIndex((toast) => toast.id === id);\n if (index !== -1) {\n // Allow time for the toast to animate out.\n // TODO(burdon): Factor out and unregister timeout.\n setTimeout(() => {\n updateEphemeral((s) => {\n const toastToRemove = s.toasts[index];\n const newCurrentUndoId = toastToRemove?.id === s.currentUndoId ? undefined : s.currentUndoId;\n return {\n ...s,\n currentUndoId: newCurrentUndoId,\n toasts: s.toasts.filter((_, i) => i !== index),\n };\n });\n }, 1_000);\n }\n },\n [state.toasts, updateEphemeral],\n );\n\n return <DeckLayout onDismissToast={handleDismissToast} />;\n },\n }),\n ),\n);\n"],
5
+ "mappings": ";;;;;;;;;;;;AAIA,YAAYA,YAAY;AACxB,OAAOC,SAASC,mBAAmB;AAEnC,SAASC,cAAcC,kBAAkB;AAMzC,IAAA,qBAAeC,WAAWC,WAAW,MAC5BC,eACLF,WAAWG,YAAYC,aAAaC,WAAW;EAC7CC,IAAIC,KAAKD;EACTE,MAAM,MAAA;AACJ,UAAM,EAAEC,OAAOC,gBAAe,IAAKC,aAAAA;AAEnC,UAAMC,qBAAqBC,YACzB,CAACP,OAAAA;AACC,YAAMQ,QAAQL,MAAMM,OAAOC,UAAU,CAACC,UAAUA,MAAMX,OAAOA,EAAAA;AAC7D,UAAIQ,UAAU,IAAI;AAGhBI,mBAAW,MAAA;AACTR,0BAAgB,CAACS,MAAAA;AACf,kBAAMC,gBAAgBD,EAAEJ,OAAOD,KAAAA;AAC/B,kBAAMO,mBAAmBD,eAAed,OAAOa,EAAEG,gBAAgBC,SAAYJ,EAAEG;AAC/E,mBAAO;cACL,GAAGH;cACHG,eAAeD;cACfN,QAAQI,EAAEJ,OAAOS,OAAO,CAACC,GAAGC,MAAMA,MAAMZ,KAAAA;YAC1C;UACF,CAAA;QACF,GAAG,GAAA;MACL;IACF,GACA;MAACL,MAAMM;MAAQL;KAAgB;AAGjC,WAAO,sBAAA,cAACiB,YAAAA;MAAWC,gBAAgBhB;;EACrC;AACF,CAAA,CAAA,CAAA;",
6
+ "names": ["Effect", "React", "useCallback", "Capabilities", "Capability", "Capability", "makeModule", "succeed", "contributes", "Capabilities", "ReactRoot", "id", "meta", "root", "state", "updateEphemeral", "useDeckState", "handleDismissToast", "useCallback", "index", "toasts", "findIndex", "toast", "setTimeout", "s", "toastToRemove", "newCurrentUndoId", "currentUndoId", "undefined", "filter", "_", "i", "DeckLayout", "onDismissToast"]
7
+ }