@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
@@ -6,7 +6,8 @@ import * as Effect from 'effect/Effect';
6
6
  import * as Function from 'effect/Function';
7
7
  import * as Option from 'effect/Option';
8
8
 
9
- import { Capability, Common } from '@dxos/app-framework';
9
+ import { Capabilities, Capability, UndoOperation } from '@dxos/app-framework';
10
+ import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
10
11
  import { Obj } from '@dxos/echo';
11
12
  import { invariant } from '@dxos/invariant';
12
13
  import { log } from '@dxos/log';
@@ -52,17 +53,20 @@ const updateActiveDeck = (current: DeckStateProps, deckUpdates: Partial<DeckStat
52
53
 
53
54
  export default Capability.makeModule(
54
55
  Effect.fnUntraced(function* () {
55
- return Capability.contributes(Common.Capability.OperationResolver, [
56
+ return Capability.contributes(Capabilities.OperationResolver, [
56
57
  //
57
58
  // UpdateSidebar
58
59
  //
59
60
  OperationResolver.make({
60
- operation: Common.LayoutOperation.UpdateSidebar,
61
+ operation: LayoutOperation.UpdateSidebar,
61
62
  handler: Effect.fnUntraced(function* (input) {
62
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
63
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
63
64
  const next = input.state ?? state.sidebarState;
64
65
  if (next !== state.sidebarState) {
65
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({ ...s, sidebarState: next }));
66
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => ({
67
+ ...state,
68
+ sidebarState: next,
69
+ }));
66
70
  }
67
71
  }),
68
72
  }),
@@ -71,18 +75,18 @@ export default Capability.makeModule(
71
75
  // UpdateComplementary
72
76
  //
73
77
  OperationResolver.make({
74
- operation: Common.LayoutOperation.UpdateComplementary,
78
+ operation: LayoutOperation.UpdateComplementary,
75
79
  handler: Effect.fnUntraced(function* (input) {
76
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
80
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
77
81
  const panelChanged = state.complementarySidebarPanel !== input.subject;
78
82
  const next = input.subject ? 'expanded' : (input.state ?? state.complementarySidebarState);
79
83
  const stateChanged = next !== state.complementarySidebarState;
80
84
 
81
85
  if (panelChanged || stateChanged) {
82
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => ({
83
- ...s,
84
- complementarySidebarPanel: panelChanged ? input.subject : s.complementarySidebarPanel,
85
- complementarySidebarState: stateChanged ? next : s.complementarySidebarState,
86
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => ({
87
+ ...state,
88
+ complementarySidebarPanel: panelChanged ? input.subject : state.complementarySidebarPanel,
89
+ complementarySidebarState: stateChanged ? next : state.complementarySidebarState,
86
90
  }));
87
91
  }
88
92
  }),
@@ -92,10 +96,10 @@ export default Capability.makeModule(
92
96
  // UpdateDialog
93
97
  //
94
98
  OperationResolver.make({
95
- operation: Common.LayoutOperation.UpdateDialog,
99
+ operation: LayoutOperation.UpdateDialog,
96
100
  handler: Effect.fnUntraced(function* (input) {
97
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
98
- ...s,
101
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
102
+ ...state,
99
103
  dialogOpen: input.state ?? Boolean(input.subject),
100
104
  dialogType: input.type ?? 'default',
101
105
  dialogBlockAlign: input.blockAlign ?? 'center',
@@ -110,13 +114,14 @@ export default Capability.makeModule(
110
114
  // UpdatePopover
111
115
  //
112
116
  OperationResolver.make({
113
- operation: Common.LayoutOperation.UpdatePopover,
117
+ operation: LayoutOperation.UpdatePopover,
114
118
  handler: Effect.fnUntraced(function* (input) {
115
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
116
- ...s,
119
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
120
+ ...state,
117
121
  popoverOpen: input.state ?? Boolean(input.subject),
118
122
  popoverKind: input.kind ?? 'base',
119
123
  popoverTitle: input.kind === 'card' ? input.title : undefined,
124
+ popoverContentRef: input.subjectRef,
120
125
  popoverContent:
121
126
  typeof input.subject === 'string'
122
127
  ? { component: input.subject, props: input.props }
@@ -124,8 +129,8 @@ export default Capability.makeModule(
124
129
  ? { subject: input.subject }
125
130
  : null,
126
131
  popoverSide: input.side,
127
- popoverAnchor: input.variant === 'virtual' ? input.anchor : s.popoverAnchor,
128
- 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,
129
134
  }));
130
135
  }),
131
136
  }),
@@ -134,11 +139,11 @@ export default Capability.makeModule(
134
139
  // AddToast
135
140
  //
136
141
  OperationResolver.make({
137
- operation: Common.LayoutOperation.AddToast,
142
+ operation: LayoutOperation.AddToast,
138
143
  handler: Effect.fnUntraced(function* (input) {
139
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
140
- ...s,
141
- toasts: [...s.toasts, input as Common.LayoutOperation.Toast],
144
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
145
+ ...state,
146
+ toasts: [...state.toasts, input as LayoutOperation.Toast],
142
147
  }));
143
148
  }),
144
149
  }),
@@ -147,18 +152,18 @@ export default Capability.makeModule(
147
152
  // ShowUndo
148
153
  //
149
154
  OperationResolver.make({
150
- operation: Common.UndoOperation.ShowUndo,
155
+ operation: UndoOperation.ShowUndo,
151
156
  handler: Effect.fnUntraced(function* (input) {
152
- const historyTracker = yield* Capability.get(Common.Capability.HistoryTracker);
157
+ const historyTracker = yield* Capability.get(Capabilities.HistoryTracker);
153
158
 
154
159
  const newUndoId = `show-undo-${Date.now()}`;
155
160
  // TODO(wittjosiah): Support undoing further back than the last action.
156
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => {
157
- const filteredToasts = s.currentUndoId
158
- ? s.toasts.filter((toast) => toast.id !== s.currentUndoId)
159
- : s.toasts;
161
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => {
162
+ const filteredToasts = state.currentUndoId
163
+ ? state.toasts.filter((toast) => toast.id !== state.currentUndoId)
164
+ : state.toasts;
160
165
 
161
- const toast: Common.LayoutOperation.Toast = {
166
+ const toast: LayoutOperation.Toast = {
162
167
  id: newUndoId,
163
168
  title: input.message ?? ['undo available label', { ns: meta.id }],
164
169
  duration: 10_000,
@@ -169,7 +174,7 @@ export default Capability.makeModule(
169
174
  };
170
175
 
171
176
  return {
172
- ...s,
177
+ ...state,
173
178
  currentUndoId: newUndoId,
174
179
  toasts: [...filteredToasts, toast],
175
180
  };
@@ -181,7 +186,7 @@ export default Capability.makeModule(
181
186
  // SetLayoutMode
182
187
  //
183
188
  OperationResolver.make({
184
- operation: Common.LayoutOperation.SetLayoutMode,
189
+ operation: LayoutOperation.SetLayoutMode,
185
190
  filter: (input) => {
186
191
  if ('mode' in input) {
187
192
  return isLayoutMode(input.mode);
@@ -189,7 +194,7 @@ export default Capability.makeModule(
189
194
  return true;
190
195
  },
191
196
  handler: Effect.fnUntraced(function* (input) {
192
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
197
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
193
198
  const deck = yield* DeckCapabilities.getDeck();
194
199
 
195
200
  const computeModeUpdate = (mode: LayoutMode, subject?: string): Partial<DeckState> => {
@@ -228,18 +233,22 @@ export default Capability.makeModule(
228
233
  'subject' in input ? input.subject : undefined,
229
234
  );
230
235
 
231
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {
236
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => {
232
237
  const newPreviousMode =
233
- currentMode !== input.mode ? { ...s.previousMode, [s.activeDeck]: currentMode } : s.previousMode;
238
+ currentMode !== input.mode
239
+ ? { ...state.previousMode, [state.activeDeck]: currentMode }
240
+ : state.previousMode;
234
241
  return {
235
- ...updateActiveDeck(s, deckUpdates),
242
+ ...updateActiveDeck(state, deckUpdates),
236
243
  previousMode: newPreviousMode,
237
244
  };
238
245
  });
239
246
  } else if ('revert' in input) {
240
247
  const last = state.previousMode[state.activeDeck];
241
248
  const deckUpdates = computeModeUpdate(last ?? 'solo');
242
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
249
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
250
+ updateActiveDeck(state, deckUpdates),
251
+ );
243
252
  } else {
244
253
  log.warn('Invalid layout mode', input);
245
254
  }
@@ -250,21 +259,23 @@ export default Capability.makeModule(
250
259
  // SwitchWorkspace
251
260
  //
252
261
  OperationResolver.make({
253
- operation: Common.LayoutOperation.SwitchWorkspace,
262
+ operation: LayoutOperation.SwitchWorkspace,
254
263
  handler: Effect.fnUntraced(function* (input) {
255
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
264
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
256
265
 
257
266
  {
258
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
267
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
259
268
  // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.
260
269
  // Ideally this should be worked into the data model in a generic way.
261
270
  const shouldUpdatePrevious = !state.activeDeck.startsWith('!');
262
271
 
263
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => {
264
- const newDecks = s.decks[input.subject] ? s.decks : { ...s.decks, [input.subject]: { ...defaultDeck } };
272
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => {
273
+ const newDecks = state.decks[input.subject]
274
+ ? state.decks
275
+ : { ...state.decks, [input.subject]: { ...defaultDeck } };
265
276
  return {
266
- ...s,
267
- previousDeck: shouldUpdatePrevious ? s.activeDeck : s.previousDeck,
277
+ ...state,
278
+ previousDeck: shouldUpdatePrevious ? state.activeDeck : state.previousDeck,
268
279
  activeDeck: input.subject,
269
280
  decks: newDecks,
270
281
  };
@@ -272,19 +283,19 @@ export default Capability.makeModule(
272
283
  }
273
284
 
274
285
  {
275
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
286
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
276
287
  const deck = state.decks[input.subject];
277
288
  invariant(deck, `Deck not found: ${input.subject}`);
278
289
 
279
290
  const first = deck.solo ? deck.solo : deck.active[0];
280
291
  if (first) {
281
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, { subject: first });
292
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: first });
282
293
  } else {
283
294
  const [item] = Graph.getConnections(graph, input.subject).filter(
284
295
  (node) => !Node.isActionLike(node) && !node.properties.disposition,
285
296
  );
286
297
  if (item) {
287
- yield* Operation.schedule(Common.LayoutOperation.Open, { subject: [item.id] });
298
+ yield* Operation.schedule(LayoutOperation.Open, { subject: [item.id] });
288
299
  }
289
300
  }
290
301
  }
@@ -295,10 +306,10 @@ export default Capability.makeModule(
295
306
  // RevertWorkspace
296
307
  //
297
308
  OperationResolver.make({
298
- operation: Common.LayoutOperation.RevertWorkspace,
309
+ operation: LayoutOperation.RevertWorkspace,
299
310
  handler: Effect.fnUntraced(function* () {
300
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
301
- yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, { subject: state.previousDeck });
311
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
312
+ yield* Operation.invoke(LayoutOperation.SwitchWorkspace, { subject: state.previousDeck });
302
313
  }),
303
314
  }),
304
315
 
@@ -306,16 +317,16 @@ export default Capability.makeModule(
306
317
  // Open
307
318
  //
308
319
  OperationResolver.make({
309
- operation: Common.LayoutOperation.Open,
320
+ operation: LayoutOperation.Open,
310
321
  handler: Effect.fnUntraced(function* (input) {
311
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
322
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
312
323
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
313
- const settings = yield* Common.Capability.getAtomValue(DeckCapabilities.Settings);
324
+ const settings = yield* Capabilities.getAtomValue(DeckCapabilities.Settings);
314
325
 
315
326
  {
316
- const state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
327
+ const state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
317
328
  if (input.workspace && state.activeDeck !== input.workspace) {
318
- yield* Operation.invoke(Common.LayoutOperation.SwitchWorkspace, { subject: input.workspace });
329
+ yield* Operation.invoke(LayoutOperation.SwitchWorkspace, { subject: input.workspace });
319
330
  }
320
331
  }
321
332
 
@@ -337,7 +348,9 @@ export default Capability.makeModule(
337
348
  );
338
349
 
339
350
  const { deckUpdates, toAttend: _toAttend } = computeActiveUpdates({ next, deck, attention });
340
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
351
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
352
+ updateActiveDeck(state, deckUpdates),
353
+ );
341
354
  }
342
355
 
343
356
  {
@@ -346,13 +359,13 @@ export default Capability.makeModule(
346
359
  const newlyOpen = ids.filter((i: string) => !previouslyOpenIds.has(i));
347
360
 
348
361
  if (input.scrollIntoView !== false && (newlyOpen[0] ?? input.subject[0])) {
349
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, {
362
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, {
350
363
  subject: newlyOpen[0] ?? input.subject[0],
351
364
  });
352
365
  }
353
366
 
354
367
  if (newlyOpen[0] ?? input.subject[0]) {
355
- yield* Operation.schedule(Common.LayoutOperation.Expose, { subject: newlyOpen[0] ?? input.subject[0] });
368
+ yield* Operation.schedule(LayoutOperation.Expose, { subject: newlyOpen[0] ?? input.subject[0] });
356
369
  }
357
370
 
358
371
  // Send analytics events for newly opened items.
@@ -379,10 +392,10 @@ export default Capability.makeModule(
379
392
  OperationResolver.make({
380
393
  operation: DeckOperation.UpdatePlankSize,
381
394
  handler: Effect.fnUntraced(function* (input) {
382
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) =>
383
- updateActiveDeck(s, {
395
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
396
+ updateActiveDeck(state, {
384
397
  plankSizing: {
385
- ...s.decks[s.activeDeck]?.plankSizing,
398
+ ...state.decks[state.activeDeck]?.plankSizing,
386
399
  [input.id]: input.size,
387
400
  },
388
401
  }),
@@ -396,10 +409,10 @@ export default Capability.makeModule(
396
409
  OperationResolver.make({
397
410
  operation: DeckOperation.Adjust,
398
411
  handler: Effect.fnUntraced(function* (input) {
399
- const _state = yield* Common.Capability.getAtomValue(DeckCapabilities.State);
412
+ const _state = yield* Capabilities.getAtomValue(DeckCapabilities.State);
400
413
  const deck = yield* DeckCapabilities.getDeck();
401
414
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
402
- const { graph } = yield* Capability.get(Common.Capability.AppGraph);
415
+ const { graph } = yield* Capability.get(AppCapabilities.AppGraph);
403
416
 
404
417
  // Collect layout operations to run after state updates.
405
418
  let soloOperation:
@@ -410,7 +423,9 @@ export default Capability.makeModule(
410
423
  if (input.type === 'increment-end' || input.type === 'increment-start') {
411
424
  const next = incrementPlank(deck.active, input);
412
425
  const { deckUpdates } = computeActiveUpdates({ next, deck, attention });
413
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
426
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
427
+ updateActiveDeck(state, deckUpdates),
428
+ );
414
429
  }
415
430
 
416
431
  if (input.type.startsWith('solo')) {
@@ -431,13 +446,13 @@ export default Capability.makeModule(
431
446
 
432
447
  // Run collected solo operations.
433
448
  if (soloOperation?.type === 'solo') {
434
- yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, {
449
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, {
435
450
  subject: soloOperation.entryId,
436
451
  mode: soloOperation.mode,
437
452
  });
438
453
  } else if (soloOperation?.type === 'unsolo') {
439
- yield* Operation.invoke(Common.LayoutOperation.SetLayoutMode, { mode: 'deck' });
440
- yield* Operation.invoke(Common.LayoutOperation.Open, { subject: [soloOperation.entryId] });
454
+ yield* Operation.invoke(LayoutOperation.SetLayoutMode, { mode: 'deck' });
455
+ yield* Operation.invoke(LayoutOperation.Open, { subject: [soloOperation.entryId] });
441
456
  }
442
457
 
443
458
  if (input.type === 'companion') {
@@ -471,14 +486,14 @@ export default Capability.makeModule(
471
486
  const deck = yield* DeckCapabilities.getDeck();
472
487
  if (input.companion === null) {
473
488
  const { [input.primary]: _, ...nextActiveCompanions } = deck.activeCompanions ?? {};
474
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) =>
475
- updateActiveDeck(s, { activeCompanions: nextActiveCompanions }),
489
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
490
+ updateActiveDeck(state, { activeCompanions: nextActiveCompanions }),
476
491
  );
477
492
  } else {
478
493
  const companion = input.companion;
479
494
  invariant(companion !== input.primary);
480
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) =>
481
- updateActiveDeck(s, {
495
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) =>
496
+ updateActiveDeck(state, {
482
497
  activeCompanions: {
483
498
  ...deck.activeCompanions,
484
499
  [input.primary]: companion,
@@ -493,7 +508,7 @@ export default Capability.makeModule(
493
508
  // Close
494
509
  //
495
510
  OperationResolver.make({
496
- operation: Common.LayoutOperation.Close,
511
+ operation: LayoutOperation.Close,
497
512
  handler: Effect.fnUntraced(function* (input) {
498
513
  const deck = yield* DeckCapabilities.getDeck();
499
514
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
@@ -501,7 +516,7 @@ export default Capability.makeModule(
501
516
  const active = deck.solo ? [deck.solo] : deck.active;
502
517
  const next = input.subject.reduce((acc, id) => closeEntry(acc, id), active);
503
518
  const { deckUpdates, toAttend } = computeActiveUpdates({ next, deck, attention });
504
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
519
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
505
520
 
506
521
  // Clear companions for closed entries.
507
522
  for (const id of input.subject) {
@@ -511,7 +526,7 @@ export default Capability.makeModule(
511
526
  }
512
527
 
513
528
  if (toAttend) {
514
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, { subject: toAttend });
529
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: toAttend });
515
530
  }
516
531
  }),
517
532
  }),
@@ -520,7 +535,7 @@ export default Capability.makeModule(
520
535
  // Set
521
536
  //
522
537
  OperationResolver.make({
523
- operation: Common.LayoutOperation.Set,
538
+ operation: LayoutOperation.Set,
524
539
  handler: Effect.fnUntraced(function* (input) {
525
540
  const deck = yield* DeckCapabilities.getDeck();
526
541
  const attention = yield* Capability.get(AttentionCapabilities.Attention);
@@ -530,10 +545,10 @@ export default Capability.makeModule(
530
545
  deck,
531
546
  attention,
532
547
  });
533
- yield* Common.Capability.updateAtomValue(DeckCapabilities.State, (s) => updateActiveDeck(s, deckUpdates));
548
+ yield* Capabilities.updateAtomValue(DeckCapabilities.State, (state) => updateActiveDeck(state, deckUpdates));
534
549
 
535
550
  if (toAttend) {
536
- yield* Operation.schedule(Common.LayoutOperation.ScrollIntoView, { subject: toAttend });
551
+ yield* Operation.schedule(LayoutOperation.ScrollIntoView, { subject: toAttend });
537
552
  }
538
553
  }),
539
554
  }),
@@ -542,10 +557,10 @@ export default Capability.makeModule(
542
557
  // ScrollIntoView
543
558
  //
544
559
  OperationResolver.make({
545
- operation: Common.LayoutOperation.ScrollIntoView,
560
+ operation: LayoutOperation.ScrollIntoView,
546
561
  handler: Effect.fnUntraced(function* (input) {
547
- yield* Common.Capability.updateAtomValue(DeckCapabilities.EphemeralState, (s) => ({
548
- ...s,
562
+ yield* Capabilities.updateAtomValue(DeckCapabilities.EphemeralState, (state) => ({
563
+ ...state,
549
564
  scrollIntoView: input.subject,
550
565
  }));
551
566
  }),
@@ -5,7 +5,7 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
  import React, { useCallback } from 'react';
7
7
 
8
- import { Capability, Common } from '@dxos/app-framework';
8
+ import { Capabilities, Capability } from '@dxos/app-framework';
9
9
 
10
10
  import { DeckLayout } from '../../components';
11
11
  import { useDeckState } from '../../hooks';
@@ -13,7 +13,7 @@ import { meta } from '../../meta';
13
13
 
14
14
  export default Capability.makeModule(() =>
15
15
  Effect.succeed(
16
- Capability.contributes(Common.Capability.ReactRoot, {
16
+ Capability.contributes(Capabilities.ReactRoot, {
17
17
  id: meta.id,
18
18
  root: () => {
19
19
  const { state, updateEphemeral } = useDeckState();
@@ -5,8 +5,9 @@
5
5
  import * as Effect from 'effect/Effect';
6
6
  import React from 'react';
7
7
 
8
- import { Capability, Common } from '@dxos/app-framework';
9
- import { useSettingsState } from '@dxos/app-framework/react';
8
+ import { Capabilities, Capability } from '@dxos/app-framework';
9
+ import { Surface, useSettingsState } from '@dxos/app-framework/ui';
10
+ import { AppCapabilities } from '@dxos/app-toolkit';
10
11
 
11
12
  import { Banner, DeckSettings } from '../../components';
12
13
  import { meta } from '../../meta';
@@ -14,18 +15,18 @@ import { type DeckSettingsProps } from '../../types';
14
15
 
15
16
  export default Capability.makeModule(() =>
16
17
  Effect.succeed(
17
- Capability.contributes(Common.Capability.ReactSurface, [
18
- Common.createSurface({
18
+ Capability.contributes(Capabilities.ReactSurface, [
19
+ Surface.create({
19
20
  id: `${meta.id}/plugin-settings`,
20
21
  role: 'article',
21
- filter: (data): data is { subject: Common.Capability.Settings } =>
22
- Common.Capability.isSettings(data.subject) && data.subject.prefix === meta.id,
22
+ filter: (data): data is { subject: AppCapabilities.Settings } =>
23
+ AppCapabilities.isSettings(data.subject) && data.subject.prefix === meta.id,
23
24
  component: ({ data: { subject } }) => {
24
25
  const { settings, updateSettings } = useSettingsState<DeckSettingsProps>(subject.atom);
25
26
  return <DeckSettings settings={settings} onSettingsChange={updateSettings} />;
26
27
  },
27
28
  }),
28
- Common.createSurface({
29
+ Surface.create({
29
30
  id: `${meta.id}/banner`,
30
31
  role: 'banner',
31
32
  component: ({ data }: { data: { variant?: 'topbar' | 'sidebar' } }) => {
@@ -4,7 +4,8 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Capability, Common } from '@dxos/app-framework';
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
8
9
  import { createKvsStore } from '@dxos/effect';
9
10
 
10
11
  import { meta } from '../../meta';
@@ -28,7 +29,7 @@ export default Capability.makeModule(() =>
28
29
 
29
30
  return [
30
31
  Capability.contributes(DeckCapabilities.Settings, settingsAtom),
31
- Capability.contributes(Common.Capability.Settings, {
32
+ Capability.contributes(AppCapabilities.Settings, {
32
33
  prefix: meta.id,
33
34
  schema: DeckSettingsSchema,
34
35
  atom: settingsAtom,
@@ -5,7 +5,8 @@
5
5
  import { Atom } from '@effect-atom/atom-react';
6
6
  import * as Effect from 'effect/Effect';
7
7
 
8
- import { Capability, Common } from '@dxos/app-framework';
8
+ import { Capabilities, Capability } from '@dxos/app-framework';
9
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
10
  import { createKvsStore } from '@dxos/effect';
10
11
  import { invariant } from '@dxos/invariant';
11
12
 
@@ -49,7 +50,7 @@ const defaultDeckEphemeralState: DeckEphemeralStateProps = {
49
50
 
50
51
  export default Capability.makeModule(
51
52
  Effect.fnUntraced(function* () {
52
- const registry = yield* Capability.get(Common.Capability.AtomRegistry);
53
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
53
54
 
54
55
  // Persisted state using KVS store.
55
56
  const stateAtom = createKvsStore({
@@ -92,13 +93,13 @@ export default Capability.makeModule(
92
93
  active: deck.solo ? [deck.solo] : deck.active,
93
94
  inactive: deck.inactive,
94
95
  scrollIntoView: ephemeral.scrollIntoView,
95
- } satisfies Common.Capability.Layout;
96
+ } satisfies AppCapabilities.Layout;
96
97
  }).pipe(Atom.keepAlive);
97
98
 
98
99
  return [
99
100
  Capability.contributes(DeckCapabilities.State, stateAtom),
100
101
  Capability.contributes(DeckCapabilities.EphemeralState, ephemeralAtom),
101
- Capability.contributes(Common.Capability.Layout, layoutAtom),
102
+ Capability.contributes(AppCapabilities.Layout, layoutAtom),
102
103
  ];
103
104
  }),
104
105
  );
@@ -7,7 +7,8 @@ import * as Toolkit from '@effect/ai/Toolkit';
7
7
  import * as Effect from 'effect/Effect';
8
8
  import * as Schema from 'effect/Schema';
9
9
 
10
- import { Capability, type CapabilityManager, Common } from '@dxos/app-framework';
10
+ import { Capabilities, Capability, type CapabilityManager } from '@dxos/app-framework';
11
+ import { AppCapabilities, LayoutOperation } from '@dxos/app-toolkit';
11
12
  import { GenericToolkit } from '@dxos/assistant';
12
13
  import { ArtifactId } from '@dxos/assistant';
13
14
  import { type SpaceId } from '@dxos/keys';
@@ -35,7 +36,7 @@ export namespace DeckToolkit {
35
36
  Toolkit$.toLayer({
36
37
  'open-item': ({ id }) =>
37
38
  Effect.gen(function* () {
38
- const registry = capabilityManager.get(Common.Capability.AtomRegistry);
39
+ const registry = capabilityManager.get(Capabilities.AtomRegistry);
39
40
  const stateAtom = capabilityManager.get(DeckCapabilities.State);
40
41
  const state = registry.get(stateAtom);
41
42
  const dxn = ArtifactId.toDXN(id, state.activeDeck as SpaceId).asEchoDXN();
@@ -45,8 +46,8 @@ export namespace DeckToolkit {
45
46
  }
46
47
 
47
48
  // TODO(wittjosiah): Get capabilities via layers.
48
- const { invoke } = capabilityManager.get(Common.Capability.OperationInvoker);
49
- yield* invoke(Common.LayoutOperation.Open, { subject: [`${dxn.spaceId!}:${dxn.echoId}`] });
49
+ const { invoke } = capabilityManager.get(Capabilities.OperationInvoker);
50
+ yield* invoke(LayoutOperation.Open, { subject: [`${dxn.spaceId!}:${dxn.echoId}`] });
50
51
  }).pipe(Effect.orDie),
51
52
  });
52
53
  }
@@ -56,7 +57,7 @@ export default Capability.makeModule(
56
57
  const capabilityManager = yield* Capability.Service;
57
58
 
58
59
  return Capability.contributes(
59
- Common.Capability.Toolkit,
60
+ AppCapabilities.Toolkit,
60
61
  GenericToolkit.make(DeckToolkit.Toolkit, DeckToolkit.createLayer(capabilityManager)),
61
62
  );
62
63
  }),
@@ -4,7 +4,8 @@
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
6
 
7
- import { Capability, Common } from '@dxos/app-framework';
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
8
9
  import { invariant } from '@dxos/invariant';
9
10
 
10
11
  import { DeckCapabilities, type DeckStateProps, defaultDeck } from '../../types';
@@ -12,8 +13,8 @@ import { DeckCapabilities, type DeckStateProps, defaultDeck } from '../../types'
12
13
  // TODO(wittjosiah): Cleanup the url handling. May justify introducing routing capabilities.
13
14
  export default Capability.makeModule(
14
15
  Effect.fnUntraced(function* () {
15
- const { invokeSync } = yield* Capability.get(Common.Capability.OperationInvoker);
16
- const registry = yield* Capability.get(Common.Capability.AtomRegistry);
16
+ const { invokeSync } = yield* Capability.get(Capabilities.OperationInvoker);
17
+ const registry = yield* Capability.get(Capabilities.AtomRegistry);
17
18
  const stateAtom = yield* Capability.get(DeckCapabilities.State);
18
19
 
19
20
  // Helper to get state.
@@ -49,14 +50,14 @@ export default Capability.makeModule(
49
50
 
50
51
  const [_, nextDeck, nextSolo] = pathname.split('/');
51
52
  if (nextDeck && nextDeck !== state.activeDeck) {
52
- invokeSync(Common.LayoutOperation.SwitchWorkspace, { subject: nextDeck });
53
+ invokeSync(LayoutOperation.SwitchWorkspace, { subject: nextDeck });
53
54
  }
54
55
 
55
56
  const deck = getDeck();
56
57
  if (nextSolo && nextSolo !== deck.solo) {
57
- invokeSync(Common.LayoutOperation.SetLayoutMode, { subject: nextSolo, mode: 'solo' });
58
+ invokeSync(LayoutOperation.SetLayoutMode, { subject: nextSolo, mode: 'solo' });
58
59
  } else if (!nextSolo && deck.solo) {
59
- invokeSync(Common.LayoutOperation.SetLayoutMode, { mode: 'deck' });
60
+ invokeSync(LayoutOperation.SetLayoutMode, { mode: 'deck' });
60
61
  }
61
62
  };
62
63
 
@@ -85,7 +86,7 @@ export default Capability.makeModule(
85
86
  }
86
87
  });
87
88
 
88
- return Capability.contributes(Common.Capability.Null, null, () =>
89
+ return Capability.contributes(Capabilities.Null, null, () =>
89
90
  Effect.sync(() => {
90
91
  window.removeEventListener('popstate', handleNavigation);
91
92
  unsubscribe();