@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
@@ -14,13 +14,14 @@ import {
14
14
  getMode,
15
15
  isLayoutMode,
16
16
  meta
17
- } from "./chunk-XAKTY3EB.mjs";
17
+ } from "./chunk-CVYHPJIN.mjs";
18
18
 
19
19
  // src/capabilities/operation-resolver/operation-resolver.ts
20
20
  import * as Effect from "effect/Effect";
21
21
  import * as Function from "effect/Function";
22
22
  import * as Option from "effect/Option";
23
- import { Capability, Common } from "@dxos/app-framework";
23
+ import { Capabilities, Capability, UndoOperation } from "@dxos/app-framework";
24
+ import { AppCapabilities, LayoutOperation } from "@dxos/app-toolkit";
24
25
  import { Obj } from "@dxos/echo";
25
26
  import { invariant } from "@dxos/invariant";
26
27
  import { log } from "@dxos/log";
@@ -35,7 +36,7 @@ var updateActiveDeck = (current, deckUpdates) => {
35
36
  const currentDeck = current.decks[current.activeDeck];
36
37
  invariant(currentDeck, `Deck not found: ${current.activeDeck}`, {
37
38
  F: __dxlog_file,
38
- L: 40,
39
+ L: 41,
39
40
  S: void 0,
40
41
  A: [
41
42
  "currentDeck",
@@ -54,18 +55,18 @@ var updateActiveDeck = (current, deckUpdates) => {
54
55
  };
55
56
  };
56
57
  var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(function* () {
57
- return Capability.contributes(Common.Capability.OperationResolver, [
58
+ return Capability.contributes(Capabilities.OperationResolver, [
58
59
  //
59
60
  // UpdateSidebar
60
61
  //
61
62
  OperationResolver.make({
62
- operation: Common.LayoutOperation.UpdateSidebar,
63
+ operation: LayoutOperation.UpdateSidebar,
63
64
  handler: Effect.fnUntraced(function* (input) {
64
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
65
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
65
66
  const next = input.state ?? state.sidebarState;
66
67
  if (next !== state.sidebarState) {
67
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({
68
- ...s,
68
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => ({
69
+ ...state2,
69
70
  sidebarState: next
70
71
  }));
71
72
  }
@@ -75,17 +76,17 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
75
76
  // UpdateComplementary
76
77
  //
77
78
  OperationResolver.make({
78
- operation: Common.LayoutOperation.UpdateComplementary,
79
+ operation: LayoutOperation.UpdateComplementary,
79
80
  handler: Effect.fnUntraced(function* (input) {
80
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
81
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
81
82
  const panelChanged = state.complementarySidebarPanel !== input.subject;
82
83
  const next = input.subject ? "expanded" : input.state ?? state.complementarySidebarState;
83
84
  const stateChanged = next !== state.complementarySidebarState;
84
85
  if (panelChanged || stateChanged) {
85
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({
86
- ...s,
87
- complementarySidebarPanel: panelChanged ? input.subject : s.complementarySidebarPanel,
88
- complementarySidebarState: stateChanged ? next : s.complementarySidebarState
86
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => ({
87
+ ...state2,
88
+ complementarySidebarPanel: panelChanged ? input.subject : state2.complementarySidebarPanel,
89
+ complementarySidebarState: stateChanged ? next : state2.complementarySidebarState
89
90
  }));
90
91
  }
91
92
  })
@@ -94,10 +95,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
94
95
  // UpdateDialog
95
96
  //
96
97
  OperationResolver.make({
97
- operation: Common.LayoutOperation.UpdateDialog,
98
+ operation: LayoutOperation.UpdateDialog,
98
99
  handler: Effect.fnUntraced(function* (input) {
99
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
100
- ...s,
100
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
101
+ ...state,
101
102
  dialogOpen: input.state ?? Boolean(input.subject),
102
103
  dialogType: input.type ?? "default",
103
104
  dialogBlockAlign: input.blockAlign ?? "center",
@@ -114,13 +115,14 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
114
115
  // UpdatePopover
115
116
  //
116
117
  OperationResolver.make({
117
- operation: Common.LayoutOperation.UpdatePopover,
118
+ operation: LayoutOperation.UpdatePopover,
118
119
  handler: Effect.fnUntraced(function* (input) {
119
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
120
- ...s,
120
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
121
+ ...state,
121
122
  popoverOpen: input.state ?? Boolean(input.subject),
122
123
  popoverKind: input.kind ?? "base",
123
124
  popoverTitle: input.kind === "card" ? input.title : void 0,
125
+ popoverContentRef: input.subjectRef,
124
126
  popoverContent: typeof input.subject === "string" ? {
125
127
  component: input.subject,
126
128
  props: input.props
@@ -128,8 +130,8 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
128
130
  subject: input.subject
129
131
  } : null,
130
132
  popoverSide: input.side,
131
- popoverAnchor: input.variant === "virtual" ? input.anchor : s.popoverAnchor,
132
- popoverAnchorId: input.variant !== "virtual" ? input.anchorId : s.popoverAnchorId
133
+ popoverAnchor: input.variant === "virtual" ? input.anchor : state.popoverAnchor,
134
+ popoverAnchorId: input.variant !== "virtual" ? input.anchorId : state.popoverAnchorId
133
135
  }));
134
136
  })
135
137
  }),
@@ -137,12 +139,12 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
137
139
  // AddToast
138
140
  //
139
141
  OperationResolver.make({
140
- operation: Common.LayoutOperation.AddToast,
142
+ operation: LayoutOperation.AddToast,
141
143
  handler: Effect.fnUntraced(function* (input) {
142
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
143
- ...s,
144
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
145
+ ...state,
144
146
  toasts: [
145
- ...s.toasts,
147
+ ...state.toasts,
146
148
  input
147
149
  ]
148
150
  }));
@@ -152,12 +154,12 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
152
154
  // ShowUndo
153
155
  //
154
156
  OperationResolver.make({
155
- operation: Common.UndoOperation.ShowUndo,
157
+ operation: UndoOperation.ShowUndo,
156
158
  handler: Effect.fnUntraced(function* (input) {
157
- const historyTracker = yield* Capability.get(Common.Capability.HistoryTracker);
159
+ const historyTracker = yield* Capability.get(Capabilities.HistoryTracker);
158
160
  const newUndoId = `show-undo-${Date.now()}`;
159
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => {
160
- const filteredToasts = s.currentUndoId ? s.toasts.filter((toast2) => toast2.id !== s.currentUndoId) : s.toasts;
161
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => {
162
+ const filteredToasts = state.currentUndoId ? state.toasts.filter((toast2) => toast2.id !== state.currentUndoId) : state.toasts;
161
163
  const toast = {
162
164
  id: newUndoId,
163
165
  title: input.message ?? [
@@ -188,7 +190,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
188
190
  onAction: () => historyTracker.undoPromise()
189
191
  };
190
192
  return {
191
- ...s,
193
+ ...state,
192
194
  currentUndoId: newUndoId,
193
195
  toasts: [
194
196
  ...filteredToasts,
@@ -202,7 +204,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
202
204
  // SetLayoutMode
203
205
  //
204
206
  OperationResolver.make({
205
- operation: Common.LayoutOperation.SetLayoutMode,
207
+ operation: LayoutOperation.SetLayoutMode,
206
208
  filter: (input) => {
207
209
  if ("mode" in input) {
208
210
  return isLayoutMode(input.mode);
@@ -210,7 +212,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
210
212
  return true;
211
213
  },
212
214
  handler: Effect.fnUntraced(function* (input) {
213
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
215
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
214
216
  const deck = yield* DeckCapabilities.getDeck();
215
217
  const computeModeUpdate = (mode, subject) => {
216
218
  const current = deck.solo ? [
@@ -245,24 +247,24 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
245
247
  if ("mode" in input) {
246
248
  const currentMode = getMode(deck);
247
249
  const deckUpdates = computeModeUpdate(input.mode, "subject" in input ? input.subject : void 0);
248
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {
250
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => {
249
251
  const newPreviousMode = currentMode !== input.mode ? {
250
- ...s.previousMode,
251
- [s.activeDeck]: currentMode
252
- } : s.previousMode;
252
+ ...state2.previousMode,
253
+ [state2.activeDeck]: currentMode
254
+ } : state2.previousMode;
253
255
  return {
254
- ...updateActiveDeck(s, deckUpdates),
256
+ ...updateActiveDeck(state2, deckUpdates),
255
257
  previousMode: newPreviousMode
256
258
  };
257
259
  });
258
260
  } else if ("revert" in input) {
259
261
  const last = state.previousMode[state.activeDeck];
260
262
  const deckUpdates = computeModeUpdate(last ?? "solo");
261
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
263
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => updateActiveDeck(state2, deckUpdates));
262
264
  } else {
263
265
  log.warn("Invalid layout mode", input, {
264
266
  F: __dxlog_file,
265
- L: 244,
267
+ L: 253,
266
268
  S: this,
267
269
  C: (f, a) => f(...a)
268
270
  });
@@ -273,33 +275,33 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
273
275
  // SwitchWorkspace
274
276
  //
275
277
  OperationResolver.make({
276
- operation: Common.LayoutOperation.SwitchWorkspace,
278
+ operation: LayoutOperation.SwitchWorkspace,
277
279
  handler: Effect.fnUntraced(function* (input) {
278
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
280
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
279
281
  {
280
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
282
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
281
283
  const shouldUpdatePrevious = !state.activeDeck.startsWith("!");
282
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {
283
- const newDecks = s.decks[input.subject] ? s.decks : {
284
- ...s.decks,
284
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state2) => {
285
+ const newDecks = state2.decks[input.subject] ? state2.decks : {
286
+ ...state2.decks,
285
287
  [input.subject]: {
286
288
  ...defaultDeck
287
289
  }
288
290
  };
289
291
  return {
290
- ...s,
291
- previousDeck: shouldUpdatePrevious ? s.activeDeck : s.previousDeck,
292
+ ...state2,
293
+ previousDeck: shouldUpdatePrevious ? state2.activeDeck : state2.previousDeck,
292
294
  activeDeck: input.subject,
293
295
  decks: newDecks
294
296
  };
295
297
  });
296
298
  }
297
299
  {
298
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
300
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
299
301
  const deck = state.decks[input.subject];
300
302
  invariant(deck, `Deck not found: ${input.subject}`, {
301
303
  F: __dxlog_file,
302
- L: 277,
304
+ L: 288,
303
305
  S: this,
304
306
  A: [
305
307
  "deck",
@@ -308,13 +310,13 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
308
310
  });
309
311
  const first = deck.solo ? deck.solo : deck.active[0];
310
312
  if (first) {
311
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
313
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
312
314
  subject: first
313
315
  });
314
316
  } else {
315
317
  const [item] = Graph.getConnections(graph, input.subject).filter((node) => !Node.isActionLike(node) && !node.properties.disposition);
316
318
  if (item) {
317
- yield* Operation.schedule(Common.LayoutOperation.Open, {
319
+ yield* Operation.schedule(LayoutOperation.Open, {
318
320
  subject: [
319
321
  item.id
320
322
  ]
@@ -328,10 +330,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
328
330
  // RevertWorkspace
329
331
  //
330
332
  OperationResolver.make({
331
- operation: Common.LayoutOperation.RevertWorkspace,
333
+ operation: LayoutOperation.RevertWorkspace,
332
334
  handler: Effect.fnUntraced(function* () {
333
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
334
- yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, {
335
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
336
+ yield* Operation.invoke(LayoutOperation.SwitchWorkspace, {
335
337
  subject: state.previousDeck
336
338
  });
337
339
  })
@@ -340,15 +342,15 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
340
342
  // Open
341
343
  //
342
344
  OperationResolver.make({
343
- operation: Common.LayoutOperation.Open,
345
+ operation: LayoutOperation.Open,
344
346
  handler: Effect.fnUntraced(function* (input) {
345
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
347
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
346
348
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
347
- const settings = yield* Common.Capability.getAtomValue(DeckCapabilities.Settings);
349
+ const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);
348
350
  {
349
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
351
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
350
352
  if (input.workspace && state.activeDeck !== input.workspace) {
351
- yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, {
353
+ yield* Operation.invoke(LayoutOperation.SwitchWorkspace, {
352
354
  subject: input.workspace
353
355
  });
354
356
  }
@@ -370,7 +372,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
370
372
  deck,
371
373
  attention
372
374
  });
373
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
375
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
374
376
  }
375
377
  {
376
378
  const deck = yield* DeckCapabilities.getDeck();
@@ -379,12 +381,12 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
379
381
  ] : deck.active;
380
382
  const newlyOpen = ids.filter((i) => !previouslyOpenIds.has(i));
381
383
  if (input.scrollIntoView !== false && (newlyOpen[0] ?? input.subject[0])) {
382
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
384
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
383
385
  subject: newlyOpen[0] ?? input.subject[0]
384
386
  });
385
387
  }
386
388
  if (newlyOpen[0] ?? input.subject[0]) {
387
- yield* Operation.schedule(Common.LayoutOperation.Expose, {
389
+ yield* Operation.schedule(LayoutOperation.Expose, {
388
390
  subject: newlyOpen[0] ?? input.subject[0]
389
391
  });
390
392
  }
@@ -413,9 +415,9 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
413
415
  OperationResolver.make({
414
416
  operation: DeckOperation.UpdatePlankSize,
415
417
  handler: Effect.fnUntraced(function* (input) {
416
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, {
418
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, {
417
419
  plankSizing: {
418
- ...s.decks[s.activeDeck]?.plankSizing,
420
+ ...state.decks[state.activeDeck]?.plankSizing,
419
421
  [input.id]: input.size
420
422
  }
421
423
  }));
@@ -427,10 +429,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
427
429
  OperationResolver.make({
428
430
  operation: DeckOperation.Adjust,
429
431
  handler: Effect.fnUntraced(function* (input) {
430
- const _state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
432
+ const _state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
431
433
  const deck = yield* DeckCapabilities.getDeck();
432
434
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
433
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
435
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
434
436
  let soloOperation;
435
437
  if (input.type === "increment-end" || input.type === "increment-start") {
436
438
  const next = incrementPlank(deck.active, input);
@@ -439,7 +441,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
439
441
  deck,
440
442
  attention
441
443
  });
442
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
444
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
443
445
  }
444
446
  if (input.type.startsWith("solo")) {
445
447
  const entryId = input.id;
@@ -465,15 +467,15 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
465
467
  }
466
468
  }
467
469
  if (soloOperation?.type === "solo") {
468
- yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, {
470
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, {
469
471
  subject: soloOperation.entryId,
470
472
  mode: soloOperation.mode
471
473
  });
472
474
  } else if (soloOperation?.type === "unsolo") {
473
- yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, {
475
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, {
474
476
  mode: "deck"
475
477
  });
476
- yield* Operation.invoke(Common.LayoutOperation.Open, {
478
+ yield* Operation.invoke(LayoutOperation.Open, {
477
479
  subject: [
478
480
  soloOperation.entryId
479
481
  ]
@@ -499,21 +501,21 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
499
501
  const deck = yield* DeckCapabilities.getDeck();
500
502
  if (input.companion === null) {
501
503
  const { [input.primary]: _, ...nextActiveCompanions } = deck.activeCompanions ?? {};
502
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, {
504
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, {
503
505
  activeCompanions: nextActiveCompanions
504
506
  }));
505
507
  } else {
506
508
  const companion = input.companion;
507
509
  invariant(companion !== input.primary, void 0, {
508
510
  F: __dxlog_file,
509
- L: 479,
511
+ L: 494,
510
512
  S: this,
511
513
  A: [
512
514
  "companion !== input.primary",
513
515
  ""
514
516
  ]
515
517
  });
516
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, {
518
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, {
517
519
  activeCompanions: {
518
520
  ...deck.activeCompanions,
519
521
  [input.primary]: companion
@@ -526,7 +528,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
526
528
  // Close
527
529
  //
528
530
  OperationResolver.make({
529
- operation: Common.LayoutOperation.Close,
531
+ operation: LayoutOperation.Close,
530
532
  handler: Effect.fnUntraced(function* (input) {
531
533
  const deck = yield* DeckCapabilities.getDeck();
532
534
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
@@ -539,7 +541,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
539
541
  deck,
540
542
  attention
541
543
  });
542
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
544
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
543
545
  for (const id of input.subject) {
544
546
  if (deck.activeCompanions && id in deck.activeCompanions) {
545
547
  yield* Operation.invoke(DeckOperation.ChangeCompanion, {
@@ -549,7 +551,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
549
551
  }
550
552
  }
551
553
  if (toAttend) {
552
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
554
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
553
555
  subject: toAttend
554
556
  });
555
557
  }
@@ -559,7 +561,7 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
559
561
  // Set
560
562
  //
561
563
  OperationResolver.make({
562
- operation: Common.LayoutOperation.Set,
564
+ operation: LayoutOperation.Set,
563
565
  handler: Effect.fnUntraced(function* (input) {
564
566
  const deck = yield* DeckCapabilities.getDeck();
565
567
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
@@ -568,9 +570,9 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
568
570
  deck,
569
571
  attention
570
572
  });
571
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
573
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
572
574
  if (toAttend) {
573
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
575
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
574
576
  subject: toAttend
575
577
  });
576
578
  }
@@ -580,10 +582,10 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
580
582
  // ScrollIntoView
581
583
  //
582
584
  OperationResolver.make({
583
- operation: Common.LayoutOperation.ScrollIntoView,
585
+ operation: LayoutOperation.ScrollIntoView,
584
586
  handler: Effect.fnUntraced(function* (input) {
585
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
586
- ...s,
587
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
588
+ ...state,
587
589
  scrollIntoView: input.subject
588
590
  }));
589
591
  })
@@ -593,4 +595,4 @@ var operation_resolver_default = Capability.makeModule(Effect.fnUntraced(functio
593
595
  export {
594
596
  operation_resolver_default as default
595
597
  };
596
- //# sourceMappingURL=operation-resolver-WUOE33ID.mjs.map
598
+ //# sourceMappingURL=operation-resolver-ZQGNATPX.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,20 +1,20 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  DeckLayout
4
- } from "./chunk-V6VEXRD4.mjs";
4
+ } from "./chunk-7NPS347C.mjs";
5
5
  import {
6
6
  useDeckState
7
- } from "./chunk-SKEVPQ7E.mjs";
7
+ } from "./chunk-ZMJPCZ3V.mjs";
8
8
  import "./chunk-ADPMWKLL.mjs";
9
9
  import {
10
10
  meta
11
- } from "./chunk-XAKTY3EB.mjs";
11
+ } from "./chunk-CVYHPJIN.mjs";
12
12
 
13
13
  // src/capabilities/react-root/react-root.tsx
14
14
  import * as Effect from "effect/Effect";
15
15
  import React, { useCallback } from "react";
16
- import { Capability, Common } from "@dxos/app-framework";
17
- var react_root_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Common.Capability.ReactRoot, {
16
+ import { Capabilities, Capability } from "@dxos/app-framework";
17
+ var react_root_default = Capability.makeModule(() => Effect.succeed(Capability.contributes(Capabilities.ReactRoot, {
18
18
  id: meta.id,
19
19
  root: () => {
20
20
  const { state, updateEphemeral } = useDeckState();
@@ -45,4 +45,4 @@ var react_root_default = Capability.makeModule(() => Effect.succeed(Capability.c
45
45
  export {
46
46
  react_root_default as default
47
47
  };
48
- //# sourceMappingURL=react-root-L7H43AS3.mjs.map
48
+ //# sourceMappingURL=react-root-2S77ABBS.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
+ }