@dxos/plugin-space 0.7.5-labs.a279d8c → 0.7.5-labs.c0e040f

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 (184) hide show
  1. package/dist/lib/browser/{app-graph-builder-5D2QB43K.mjs → app-graph-builder-GSS3V7IN.mjs} +15 -13
  2. package/dist/lib/browser/app-graph-builder-GSS3V7IN.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-VNWPLPDF.mjs → app-graph-serializer-QDXM5M6K.mjs} +5 -5
  4. package/dist/lib/browser/{chunk-PDJ4MLA4.mjs → chunk-DIBLC24B.mjs} +308 -251
  5. package/dist/lib/browser/chunk-DIBLC24B.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-SOXNANA6.mjs → chunk-PQXZCNAU.mjs} +3 -2
  7. package/dist/lib/browser/{chunk-SOXNANA6.mjs.map → chunk-PQXZCNAU.mjs.map} +3 -3
  8. package/dist/lib/browser/{chunk-UH5P4UL3.mjs → chunk-RLZQJD47.mjs} +3 -2
  9. package/dist/lib/browser/chunk-RLZQJD47.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-5TBRONF6.mjs → chunk-SDK7RZI3.mjs} +3 -3
  11. package/dist/lib/browser/{chunk-HCXWKGTE.mjs → chunk-XPZ6IIXF.mjs} +4 -9
  12. package/dist/lib/browser/chunk-XPZ6IIXF.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-ZBKFJNHH.mjs → chunk-ZL5ZFGBK.mjs} +15 -9
  14. package/dist/lib/browser/chunk-ZL5ZFGBK.mjs.map +7 -0
  15. package/dist/lib/browser/{identity-created-EC5FOCX2.mjs → identity-created-25TK5XNO.mjs} +3 -3
  16. package/dist/lib/browser/index.mjs +14 -13
  17. package/dist/lib/browser/index.mjs.map +3 -3
  18. package/dist/lib/browser/intent-resolver-LNTCXZ57.mjs +537 -0
  19. package/dist/lib/browser/intent-resolver-LNTCXZ57.mjs.map +7 -0
  20. package/dist/lib/browser/meta.json +1 -1
  21. package/dist/lib/browser/{react-root-4QQST3T2.mjs → react-root-Q7JJDCPB.mjs} +6 -6
  22. package/dist/lib/browser/{react-surface-JTNUNOJG.mjs → react-surface-BDMYLARO.mjs} +26 -33
  23. package/dist/lib/browser/react-surface-BDMYLARO.mjs.map +7 -0
  24. package/dist/lib/browser/{settings-ASFF5BZL.mjs → settings-K4JPYYEM.mjs} +3 -3
  25. package/dist/lib/browser/{spaces-ready-4SFNS5JQ.mjs → spaces-ready-THYJEJYZ.mjs} +31 -32
  26. package/dist/lib/browser/spaces-ready-THYJEJYZ.mjs.map +7 -0
  27. package/dist/lib/browser/{state-MS4KYJWI.mjs → state-6DCY5YJP.mjs} +3 -3
  28. package/dist/lib/browser/types/index.mjs +2 -4
  29. package/dist/lib/node/{app-graph-builder-ZQ5S62YR.cjs → app-graph-builder-V3RCGDV7.cjs} +60 -58
  30. package/dist/lib/node/app-graph-builder-V3RCGDV7.cjs.map +7 -0
  31. package/dist/lib/node/{app-graph-serializer-72S7P33H.cjs → app-graph-serializer-H4UACG57.cjs} +21 -21
  32. package/dist/lib/node/{chunk-VCPICVIE.cjs → chunk-4AZ2DD4G.cjs} +308 -251
  33. package/dist/lib/node/chunk-4AZ2DD4G.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-DDZYVNVP.cjs → chunk-6MEOP3DH.cjs} +8 -14
  35. package/dist/lib/node/chunk-6MEOP3DH.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-BQRNTKSQ.cjs → chunk-D6BFKOXY.cjs} +8 -8
  37. package/dist/lib/node/{chunk-Z34MTEU7.cjs → chunk-SYVPVU3K.cjs} +66 -60
  38. package/dist/lib/node/chunk-SYVPVU3K.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-56NGXG2A.cjs → chunk-UX3U4RU2.cjs} +9 -8
  40. package/dist/lib/node/chunk-UX3U4RU2.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-AO4EW2RX.cjs → chunk-WZR6OAN3.cjs} +6 -5
  42. package/dist/lib/node/{chunk-AO4EW2RX.cjs.map → chunk-WZR6OAN3.cjs.map} +3 -3
  43. package/dist/lib/node/{identity-created-IMDS4A6A.cjs → identity-created-7G5U7R36.cjs} +7 -7
  44. package/dist/lib/node/index.cjs +93 -92
  45. package/dist/lib/node/index.cjs.map +3 -3
  46. package/dist/lib/node/intent-resolver-CDE4M3TW.cjs +536 -0
  47. package/dist/lib/node/intent-resolver-CDE4M3TW.cjs.map +7 -0
  48. package/dist/lib/node/meta.json +1 -1
  49. package/dist/lib/node/{react-root-TCHYZQY3.cjs → react-root-JN6AIHMS.cjs} +12 -12
  50. package/dist/lib/node/{react-surface-TFPR6QAQ.cjs → react-surface-XSK2QEQV.cjs} +72 -76
  51. package/dist/lib/node/react-surface-XSK2QEQV.cjs.map +7 -0
  52. package/dist/lib/node/{settings-QLCKAUHK.cjs → settings-TEELGWS4.cjs} +8 -8
  53. package/dist/lib/node/{spaces-ready-RZTKEXOL.cjs → spaces-ready-L4MJTFQ6.cjs} +39 -40
  54. package/dist/lib/node/spaces-ready-L4MJTFQ6.cjs.map +7 -0
  55. package/dist/lib/node/{state-4UIOUKLJ.cjs → state-WPZC4JXB.cjs} +8 -8
  56. package/dist/lib/node/types/index.cjs +16 -18
  57. package/dist/lib/node/types/index.cjs.map +2 -2
  58. package/dist/lib/node-esm/{app-graph-builder-CD6IYPSS.mjs → app-graph-builder-VFHK7OQI.mjs} +15 -13
  59. package/dist/lib/node-esm/app-graph-builder-VFHK7OQI.mjs.map +7 -0
  60. package/dist/lib/node-esm/{app-graph-serializer-CFXS6ZE2.mjs → app-graph-serializer-PIPJVXYZ.mjs} +5 -5
  61. package/dist/lib/node-esm/{chunk-M4XTHK35.mjs → chunk-4UX5WGKJ.mjs} +3 -3
  62. package/dist/lib/node-esm/{chunk-CLGCKZ2D.mjs → chunk-AAQRELDK.mjs} +4 -9
  63. package/dist/lib/node-esm/chunk-AAQRELDK.mjs.map +7 -0
  64. package/dist/lib/node-esm/{chunk-I75ZN2YH.mjs → chunk-FTVEA5LO.mjs} +308 -251
  65. package/dist/lib/node-esm/chunk-FTVEA5LO.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-7FUVU45N.mjs → chunk-ICCM4YRJ.mjs} +3 -2
  67. package/dist/lib/node-esm/{chunk-7FUVU45N.mjs.map → chunk-ICCM4YRJ.mjs.map} +3 -3
  68. package/dist/lib/node-esm/{chunk-375RB3CZ.mjs → chunk-LGL4A5B5.mjs} +3 -2
  69. package/dist/lib/node-esm/chunk-LGL4A5B5.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-FUMGYUD3.mjs → chunk-RCZRYXI3.mjs} +15 -9
  71. package/dist/lib/node-esm/chunk-RCZRYXI3.mjs.map +7 -0
  72. package/dist/lib/node-esm/{identity-created-SJYZZ7Q3.mjs → identity-created-7THGZ7EW.mjs} +3 -3
  73. package/dist/lib/node-esm/index.mjs +14 -13
  74. package/dist/lib/node-esm/index.mjs.map +3 -3
  75. package/dist/lib/node-esm/intent-resolver-7L3GJAZE.mjs +538 -0
  76. package/dist/lib/node-esm/intent-resolver-7L3GJAZE.mjs.map +7 -0
  77. package/dist/lib/node-esm/meta.json +1 -1
  78. package/dist/lib/node-esm/{react-root-BEX2XFJK.mjs → react-root-BNA6PBFZ.mjs} +6 -6
  79. package/dist/lib/node-esm/{react-surface-TRLHCJZ3.mjs → react-surface-FTI2LQNL.mjs} +26 -33
  80. package/dist/lib/node-esm/react-surface-FTI2LQNL.mjs.map +7 -0
  81. package/dist/lib/node-esm/{settings-WLVEO4JM.mjs → settings-KXYUZBLN.mjs} +3 -3
  82. package/dist/lib/node-esm/{spaces-ready-ITGYYT5A.mjs → spaces-ready-ZC2R73H3.mjs} +31 -32
  83. package/dist/lib/node-esm/spaces-ready-ZC2R73H3.mjs.map +7 -0
  84. package/dist/lib/node-esm/{state-BMISGQ2O.mjs → state-5GH2D5U4.mjs} +3 -3
  85. package/dist/lib/node-esm/types/index.mjs +2 -4
  86. package/dist/types/src/SpacePlugin.d.ts +5 -1
  87. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/app-graph-builder.d.ts +22 -22
  89. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/capabilities.d.ts +6 -0
  91. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/index.d.ts +34 -33
  93. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -1
  95. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -1
  98. package/dist/types/src/components/BaseObjectSettings.d.ts.map +1 -1
  99. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +4 -3
  100. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  101. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  102. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  103. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  104. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +1 -1
  105. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts +3 -4
  106. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts.map +1 -1
  107. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts.map +1 -1
  108. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  109. package/dist/types/src/meta.d.ts +1 -0
  110. package/dist/types/src/meta.d.ts.map +1 -1
  111. package/dist/types/src/types/types.d.ts +2 -5
  112. package/dist/types/src/types/types.d.ts.map +1 -1
  113. package/dist/types/src/util.d.ts +1 -0
  114. package/dist/types/src/util.d.ts.map +1 -1
  115. package/dist/types/tsconfig.tsbuildinfo +1 -1
  116. package/package.json +39 -37
  117. package/src/SpacePlugin.tsx +11 -6
  118. package/src/capabilities/app-graph-builder.ts +9 -8
  119. package/src/capabilities/capabilities.ts +4 -1
  120. package/src/capabilities/intent-resolver.ts +410 -312
  121. package/src/capabilities/react-surface.tsx +22 -30
  122. package/src/capabilities/spaces-ready.ts +20 -21
  123. package/src/components/AwaitingObject.tsx +5 -5
  124. package/src/components/BaseObjectSettings.tsx +7 -0
  125. package/src/components/CreateDialog/CreateObjectDialog.tsx +15 -15
  126. package/src/components/CreateDialog/CreateObjectPanel.tsx +114 -115
  127. package/src/components/CreateDialog/CreateSpaceDialog.tsx +18 -9
  128. package/src/components/JoinDialog.tsx +27 -19
  129. package/src/components/SpacePluginSettings.tsx +3 -3
  130. package/src/components/SpacePresence.stories.tsx +2 -2
  131. package/src/components/SpacePresence.tsx +2 -3
  132. package/src/components/SpaceSettings/SpaceSettingsDialog.tsx +16 -1
  133. package/src/components/SpaceSettings/SpaceSettingsPanel.stories.tsx +5 -1
  134. package/src/components/SpaceSettings/SpaceSettingsPanel.tsx +15 -8
  135. package/src/components/SyncStatus/InlineSyncStatus.tsx +2 -2
  136. package/src/components/SyncStatus/SyncStatus.tsx +2 -1
  137. package/src/meta.ts +1 -0
  138. package/src/types/types.ts +2 -7
  139. package/src/util.tsx +9 -4
  140. package/dist/lib/browser/app-graph-builder-5D2QB43K.mjs.map +0 -7
  141. package/dist/lib/browser/chunk-HCXWKGTE.mjs.map +0 -7
  142. package/dist/lib/browser/chunk-PDJ4MLA4.mjs.map +0 -7
  143. package/dist/lib/browser/chunk-UH5P4UL3.mjs.map +0 -7
  144. package/dist/lib/browser/chunk-ZBKFJNHH.mjs.map +0 -7
  145. package/dist/lib/browser/intent-resolver-Y6AZTVRL.mjs +0 -459
  146. package/dist/lib/browser/intent-resolver-Y6AZTVRL.mjs.map +0 -7
  147. package/dist/lib/browser/react-surface-JTNUNOJG.mjs.map +0 -7
  148. package/dist/lib/browser/spaces-ready-4SFNS5JQ.mjs.map +0 -7
  149. package/dist/lib/node/app-graph-builder-ZQ5S62YR.cjs.map +0 -7
  150. package/dist/lib/node/chunk-56NGXG2A.cjs.map +0 -7
  151. package/dist/lib/node/chunk-DDZYVNVP.cjs.map +0 -7
  152. package/dist/lib/node/chunk-VCPICVIE.cjs.map +0 -7
  153. package/dist/lib/node/chunk-Z34MTEU7.cjs.map +0 -7
  154. package/dist/lib/node/intent-resolver-MUGCKZPN.cjs +0 -458
  155. package/dist/lib/node/intent-resolver-MUGCKZPN.cjs.map +0 -7
  156. package/dist/lib/node/react-surface-TFPR6QAQ.cjs.map +0 -7
  157. package/dist/lib/node/spaces-ready-RZTKEXOL.cjs.map +0 -7
  158. package/dist/lib/node-esm/app-graph-builder-CD6IYPSS.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-375RB3CZ.mjs.map +0 -7
  160. package/dist/lib/node-esm/chunk-CLGCKZ2D.mjs.map +0 -7
  161. package/dist/lib/node-esm/chunk-FUMGYUD3.mjs.map +0 -7
  162. package/dist/lib/node-esm/chunk-I75ZN2YH.mjs.map +0 -7
  163. package/dist/lib/node-esm/intent-resolver-6PNQKHDL.mjs +0 -460
  164. package/dist/lib/node-esm/intent-resolver-6PNQKHDL.mjs.map +0 -7
  165. package/dist/lib/node-esm/react-surface-TRLHCJZ3.mjs.map +0 -7
  166. package/dist/lib/node-esm/spaces-ready-ITGYYT5A.mjs.map +0 -7
  167. /package/dist/lib/browser/{app-graph-serializer-VNWPLPDF.mjs.map → app-graph-serializer-QDXM5M6K.mjs.map} +0 -0
  168. /package/dist/lib/browser/{chunk-5TBRONF6.mjs.map → chunk-SDK7RZI3.mjs.map} +0 -0
  169. /package/dist/lib/browser/{identity-created-EC5FOCX2.mjs.map → identity-created-25TK5XNO.mjs.map} +0 -0
  170. /package/dist/lib/browser/{react-root-4QQST3T2.mjs.map → react-root-Q7JJDCPB.mjs.map} +0 -0
  171. /package/dist/lib/browser/{settings-ASFF5BZL.mjs.map → settings-K4JPYYEM.mjs.map} +0 -0
  172. /package/dist/lib/browser/{state-MS4KYJWI.mjs.map → state-6DCY5YJP.mjs.map} +0 -0
  173. /package/dist/lib/node/{app-graph-serializer-72S7P33H.cjs.map → app-graph-serializer-H4UACG57.cjs.map} +0 -0
  174. /package/dist/lib/node/{chunk-BQRNTKSQ.cjs.map → chunk-D6BFKOXY.cjs.map} +0 -0
  175. /package/dist/lib/node/{identity-created-IMDS4A6A.cjs.map → identity-created-7G5U7R36.cjs.map} +0 -0
  176. /package/dist/lib/node/{react-root-TCHYZQY3.cjs.map → react-root-JN6AIHMS.cjs.map} +0 -0
  177. /package/dist/lib/node/{settings-QLCKAUHK.cjs.map → settings-TEELGWS4.cjs.map} +0 -0
  178. /package/dist/lib/node/{state-4UIOUKLJ.cjs.map → state-WPZC4JXB.cjs.map} +0 -0
  179. /package/dist/lib/node-esm/{app-graph-serializer-CFXS6ZE2.mjs.map → app-graph-serializer-PIPJVXYZ.mjs.map} +0 -0
  180. /package/dist/lib/node-esm/{chunk-M4XTHK35.mjs.map → chunk-4UX5WGKJ.mjs.map} +0 -0
  181. /package/dist/lib/node-esm/{identity-created-SJYZZ7Q3.mjs.map → identity-created-7THGZ7EW.mjs.map} +0 -0
  182. /package/dist/lib/node-esm/{react-root-BEX2XFJK.mjs.map → react-root-BNA6PBFZ.mjs.map} +0 -0
  183. /package/dist/lib/node-esm/{settings-WLVEO4JM.mjs.map → settings-KXYUZBLN.mjs.map} +0 -0
  184. /package/dist/lib/node-esm/{state-BMISGQ2O.mjs.map → state-5GH2D5U4.mjs.map} +0 -0
@@ -13,6 +13,7 @@ import {
13
13
  useCapabilities,
14
14
  usePluginManager,
15
15
  } from '@dxos/app-framework';
16
+ import { SettingsStore } from '@dxos/local-storage';
16
17
  import { ClientCapabilities } from '@dxos/plugin-client';
17
18
  import {
18
19
  getSpace,
@@ -43,7 +44,6 @@ import {
43
44
  POPOVER_RENAME_SPACE,
44
45
  PopoverRenameObject,
45
46
  PopoverRenameSpace,
46
- ShareSpaceButton,
47
47
  SmallPresenceLive,
48
48
  SPACE_SETTINGS_DIALOG,
49
49
  SpacePluginSettings,
@@ -56,7 +56,6 @@ import {
56
56
  } from '../components';
57
57
  import { SPACE_PLUGIN } from '../meta';
58
58
  import { CollectionType, type SpaceSettingsProps } from '../types';
59
- import { COMPOSER_SPACE_LOCK } from '../util';
60
59
 
61
60
  type ReactSurfaceOptions = {
62
61
  createInvitationUrl: (invitationCode: string) => string;
@@ -81,7 +80,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
81
80
  createSurface({
82
81
  id: `${SPACE_PLUGIN}/collection-fallback`,
83
82
  role: 'article',
84
- disposition: 'fallback',
83
+ position: 'fallback',
85
84
  filter: (data): data is { subject: CollectionType } => data.subject instanceof CollectionType,
86
85
  component: ({ data }) => <CollectionMain collection={data.subject} />,
87
86
  }),
@@ -95,28 +94,28 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
95
94
  createSurface({
96
95
  id: `${SPACE_PLUGIN}/object-settings-base-panel`,
97
96
  role: 'complementary--settings',
98
- disposition: 'hoist',
97
+ position: 'hoist',
99
98
  filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),
100
99
  component: ({ data }) => <BaseObjectSettings object={data.subject} />,
101
100
  }),
102
101
  createSurface({
103
102
  id: `${SPACE_PLUGIN}/object-settings-advanced-panel`,
104
103
  role: 'complementary--settings',
105
- disposition: 'fallback',
104
+ position: 'fallback',
106
105
  filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),
107
106
  component: ({ data }) => <AdvancedObjectSettings object={data.subject} />,
108
107
  }),
109
108
  createSurface({
110
109
  id: SPACE_SETTINGS_DIALOG,
111
110
  role: 'dialog',
112
- filter: (data): data is { subject: SpaceSettingsDialogProps } => data.component === SPACE_SETTINGS_DIALOG,
113
- component: ({ data }) => <SpaceSettingsDialog {...data.subject} createInvitationUrl={createInvitationUrl} />,
111
+ filter: (data): data is { props: SpaceSettingsDialogProps } => data.component === SPACE_SETTINGS_DIALOG,
112
+ component: ({ data }) => <SpaceSettingsDialog {...data.props} createInvitationUrl={createInvitationUrl} />,
114
113
  }),
115
114
  createSurface({
116
115
  id: JOIN_DIALOG,
117
116
  role: 'dialog',
118
- filter: (data): data is { subject: JoinPanelProps } => data.component === JOIN_DIALOG,
119
- component: ({ data }) => <JoinDialog {...data.subject} />,
117
+ filter: (data): data is { props: JoinPanelProps } => data.component === JOIN_DIALOG,
118
+ component: ({ data }) => <JoinDialog {...data.props} />,
120
119
  }),
121
120
  createSurface({
122
121
  id: CREATE_SPACE_DIALOG,
@@ -127,7 +126,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
127
126
  createSurface({
128
127
  id: CREATE_OBJECT_DIALOG,
129
128
  role: 'dialog',
130
- filter: (data): data is { subject: Partial<CreateObjectDialogProps> } => data.component === CREATE_OBJECT_DIALOG,
129
+ filter: (data): data is { props: Partial<CreateObjectDialogProps> } => data.component === CREATE_OBJECT_DIALOG,
131
130
  component: ({ data }) => {
132
131
  const schemas = useCapabilities(ClientCapabilities.Schema).flat();
133
132
  const manager = usePluginManager();
@@ -142,21 +141,21 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
142
141
  [manager],
143
142
  );
144
143
 
145
- return <CreateObjectDialog schemas={schemas} resolve={resolve} {...data.subject} />;
144
+ return <CreateObjectDialog schemas={schemas} resolve={resolve} {...data.props} />;
146
145
  },
147
146
  }),
148
147
  createSurface({
149
148
  id: POPOVER_RENAME_SPACE,
150
149
  role: 'popover',
151
- filter: (data): data is { subject: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.subject),
152
- component: ({ data }) => <PopoverRenameSpace space={data.subject} />,
150
+ filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),
151
+ component: ({ data }) => <PopoverRenameSpace space={data.props} />,
153
152
  }),
154
153
  createSurface({
155
154
  id: POPOVER_RENAME_OBJECT,
156
155
  role: 'popover',
157
- filter: (data): data is { subject: ReactiveEchoObject<any> } =>
158
- data.component === POPOVER_RENAME_OBJECT && isReactiveObject(data.subject),
159
- component: ({ data }) => <PopoverRenameObject object={data.subject} />,
156
+ filter: (data): data is { props: ReactiveEchoObject<any> } =>
157
+ data.component === POPOVER_RENAME_OBJECT && isReactiveObject(data.props),
158
+ component: ({ data }) => <PopoverRenameObject object={data.props} />,
160
159
  }),
161
160
  createSurface({
162
161
  id: `${SPACE_PLUGIN}/navtree-presence`,
@@ -173,7 +172,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
173
172
  // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
174
173
  id: `${SPACE_PLUGIN}/navtree-presence-fallback`,
175
174
  role: 'navtree-item-end',
176
- disposition: 'fallback',
175
+ position: 'fallback',
177
176
  filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',
178
177
  component: ({ data }) => <SmallPresenceLive id={data.id} open={data.open} />,
179
178
  }),
@@ -186,7 +185,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
186
185
  createSurface({
187
186
  id: `${SPACE_PLUGIN}/navbar-presence`,
188
187
  role: 'navbar-end',
189
- disposition: 'hoist',
188
+ position: 'hoist',
190
189
  filter: (data): data is { subject: Space | ReactiveEchoObject<any> } =>
191
190
  isSpace(data.subject) || isEchoObject(data.subject),
192
191
  component: ({ data }) => {
@@ -197,12 +196,7 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
197
196
  : undefined
198
197
  : data.subject;
199
198
 
200
- return space && object ? (
201
- <>
202
- <SpacePresence object={object} />
203
- {space.properties[COMPOSER_SPACE_LOCK] ? null : <ShareSpaceButton space={space} />}
204
- </>
205
- ) : null;
199
+ return object ? <SpacePresence object={object} /> : null;
206
200
  },
207
201
  }),
208
202
  createSurface({
@@ -213,12 +207,10 @@ export default ({ createInvitationUrl }: ReactSurfaceOptions) =>
213
207
  }),
214
208
  createSurface({
215
209
  id: `${SPACE_PLUGIN}/settings`,
216
- role: 'settings',
217
- filter: (data): data is any => data.subject === SPACE_PLUGIN,
218
- component: () => {
219
- const settings = useCapability(Capabilities.SettingsStore).getStore<SpaceSettingsProps>(SPACE_PLUGIN)!.value;
220
- return <SpacePluginSettings settings={settings} />;
221
- },
210
+ role: 'article',
211
+ filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>
212
+ data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,
213
+ component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,
222
214
  }),
223
215
  createSurface({
224
216
  id: `${SPACE_PLUGIN}/menu-footer`,
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { contributes, createIntent, openIds, type PluginsContext, Capabilities } from '@dxos/app-framework';
5
+ import { contributes, createIntent, type PluginsContext, Capabilities, LayoutAction } from '@dxos/app-framework';
6
6
  import { EventSubscriptions } from '@dxos/async';
7
7
  import { Expando } from '@dxos/echo-schema';
8
8
  import { scheduledEffect } from '@dxos/echo-signals/core';
@@ -10,6 +10,7 @@ import { create } from '@dxos/live-object';
10
10
  import { log } from '@dxos/log';
11
11
  import { AttentionCapabilities } from '@dxos/plugin-attention';
12
12
  import { ClientCapabilities } from '@dxos/plugin-client';
13
+ import { DeckCapabilities } from '@dxos/plugin-deck';
13
14
  import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
14
15
  import { PublicKey } from '@dxos/react-client';
15
16
  import { Filter, FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';
@@ -29,7 +30,7 @@ export default async (context: PluginsContext) => {
29
30
  const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);
30
31
  const { graph } = context.requestCapability(Capabilities.AppGraph);
31
32
  const layout = context.requestCapability(Capabilities.Layout);
32
- const location = context.requestCapability(Capabilities.Location);
33
+ const deck = context.requestCapability(DeckCapabilities.DeckState);
33
34
  const attention = context.requestCapability(AttentionCapabilities.Attention);
34
35
  const state = context.requestCapability(SpaceCapabilities.MutableState);
35
36
  const client = context.requestCapability(ClientCapabilities.Client);
@@ -37,6 +38,10 @@ export default async (context: PluginsContext) => {
37
38
  const defaultSpace = client.spaces.default;
38
39
  await defaultSpace.waitUntilReady();
39
40
 
41
+ if (deck.activeDeck === 'default') {
42
+ await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: defaultSpace.id }));
43
+ }
44
+
40
45
  // Initialize space sharing lock in default space.
41
46
  if (typeof defaultSpace.properties[COMPOSER_SPACE_LOCK] !== 'boolean') {
42
47
  defaultSpace.properties[COMPOSER_SPACE_LOCK] = true;
@@ -54,21 +59,18 @@ export default async (context: PluginsContext) => {
54
59
  // Await missing objects.
55
60
  subscriptions.add(
56
61
  scheduledEffect(
57
- () => ({
58
- layoutMode: layout.layoutMode,
59
- soloPart: location.active.solo?.[0],
60
- }),
61
- ({ layoutMode, soloPart }) => {
62
- if (layoutMode !== 'solo' || !soloPart) {
62
+ () => ({ active: layout.active }),
63
+ ({ active }) => {
64
+ if (active.length !== 1) {
63
65
  return;
64
66
  }
65
67
 
66
- const node = graph.findNode(soloPart.id);
67
- if (!node && soloPart.id.length === FQ_ID_LENGTH) {
68
+ const node = graph.findNode(active[0]);
69
+ if (!node && active[0].length === FQ_ID_LENGTH) {
68
70
  const timeout = setTimeout(async () => {
69
- const node = graph.findNode(soloPart.id);
71
+ const node = graph.findNode(active[0]);
70
72
  if (!node) {
71
- await dispatch(createIntent(SpaceAction.WaitForObject, { id: soloPart.id }));
73
+ await dispatch(createIntent(SpaceAction.WaitForObject, { id: active[0] }));
72
74
  }
73
75
  }, WAIT_FOR_OBJECT_TIMEOUT);
74
76
 
@@ -102,17 +104,14 @@ export default async (context: PluginsContext) => {
102
104
  // Broadcast active node to other peers in the space.
103
105
  subscriptions.add(
104
106
  scheduledEffect(
105
- () => ({
106
- open: openIds(location.active, layout.layoutMode === 'solo' ? ['solo'] : ['main']),
107
- closed: [...location.closed],
108
- }),
109
- ({ open, closed }) => {
107
+ () => ({ current: attention.current, active: layout.active, inactive: layout.inactive }),
108
+ ({ current, active, inactive }) => {
110
109
  const send = () => {
111
110
  const spaces = client.spaces.get();
112
111
  const identity = client.halo.identity.get();
113
- if (identity && location.active) {
112
+ if (identity) {
114
113
  // Group parts by space for efficient messaging.
115
- const idsBySpace = reduceGroupBy(open, (id) => {
114
+ const idsBySpace = reduceGroupBy(active, (id) => {
116
115
  try {
117
116
  const [spaceId] = parseFullyQualifiedId(id);
118
117
  return spaceId;
@@ -121,7 +120,7 @@ export default async (context: PluginsContext) => {
121
120
  }
122
121
  });
123
122
 
124
- const removedBySpace = reduceGroupBy(closed, (id) => {
123
+ const removedBySpace = reduceGroupBy(inactive, (id) => {
125
124
  try {
126
125
  const [spaceId] = parseFullyQualifiedId(id);
127
126
  return spaceId;
@@ -147,7 +146,7 @@ export default async (context: PluginsContext) => {
147
146
  void space
148
147
  .postMessage('viewing', {
149
148
  identityKey: identity.identityKey.toHex(),
150
- attended: attention.current ? [...attention.current] : [],
149
+ attended: current,
151
150
  added,
152
151
  removed,
153
152
  })
@@ -5,7 +5,7 @@
5
5
  import { CheckCircle, CircleDashed, CircleNotch } from '@phosphor-icons/react';
6
6
  import React, { useCallback, useEffect, useState } from 'react';
7
7
 
8
- import { NavigationAction, useIntentDispatcher, createIntent, useCapability, Capabilities } from '@dxos/app-framework';
8
+ import { createIntent, LayoutAction, useIntentDispatcher, useLayout } from '@dxos/app-framework';
9
9
  import { useClient } from '@dxos/react-client';
10
10
  import { Filter, fullyQualifiedId, useQuery } from '@dxos/react-client/echo';
11
11
  import { Button, Toast, useTranslation } from '@dxos/react-ui';
@@ -23,7 +23,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
23
23
  const [found, setFound] = useState(false);
24
24
  const { t } = useTranslation(SPACE_PLUGIN);
25
25
  const { dispatchPromise: dispatch } = useIntentDispatcher();
26
- const location = useCapability(Capabilities.Location);
26
+ const layout = useLayout();
27
27
 
28
28
  const client = useClient();
29
29
  const objects = useQuery(client.spaces, Filter.all());
@@ -44,11 +44,11 @@ export const AwaitingObject = ({ id }: { id: string }) => {
44
44
  if (objects.findIndex((object) => fullyQualifiedId(object) === id) > -1) {
45
45
  setFound(true);
46
46
 
47
- if (location.active.solo?.[0].id === id) {
47
+ if (layout.active.includes(id)) {
48
48
  setOpen(false);
49
49
  }
50
50
  }
51
- }, [id, objects, location]);
51
+ }, [id, objects, layout]);
52
52
 
53
53
  const handleClose = useCallback(
54
54
  async () => dispatch(createIntent(SpaceAction.WaitForObject, { id: undefined })),
@@ -56,7 +56,7 @@ export const AwaitingObject = ({ id }: { id: string }) => {
56
56
  );
57
57
 
58
58
  const handleNavigate = useCallback(() => {
59
- void dispatch(createIntent(NavigationAction.Open, { activeParts: { main: [id] } }));
59
+ void dispatch(createIntent(LayoutAction.Open, { part: 'main', subject: [id] }));
60
60
  void handleClose();
61
61
  }, [id, handleClose, dispatch]);
62
62
 
@@ -15,17 +15,24 @@ export type BaseObjectSettingsProps = {
15
15
 
16
16
  export const BaseObjectSettings = ({ object }: BaseObjectSettingsProps) => {
17
17
  const { t } = useTranslation(SPACE_PLUGIN);
18
+ const inputRef = React.useRef<HTMLInputElement>(null);
18
19
  // TODO(burdon): Standardize forms.
19
20
  return (
20
21
  <div role='form' className='flex flex-col w-full p-2 gap-1'>
21
22
  <Input.Root>
22
23
  <Input.Label>{t('name label')}</Input.Label>
23
24
  <Input.TextInput
25
+ ref={inputRef}
24
26
  placeholder={t('name placeholder')}
25
27
  value={object.name ?? ''}
26
28
  onChange={(event) => {
27
29
  object.name = event.target.value;
28
30
  }}
31
+ onKeyDown={(event) => {
32
+ if (event.key === 'Enter') {
33
+ inputRef.current?.blur();
34
+ }
35
+ }}
29
36
  />
30
37
  </Input.Root>
31
38
  </div>
@@ -5,7 +5,7 @@
5
5
  import { pipe } from 'effect';
6
6
  import React, { useCallback, useRef } from 'react';
7
7
 
8
- import { chain, createIntent, NavigationAction, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { chain, createIntent, LayoutAction, useIntentDispatcher } from '@dxos/app-framework';
9
9
  import { useClient } from '@dxos/react-client';
10
10
  import {
11
11
  getSpace,
@@ -71,7 +71,7 @@ export const CreateObjectDialog = ({
71
71
  const addObjectIntent = createIntent(SpaceAction.AddObject, { target, object });
72
72
  const shouldNavigate = _shouldNavigate ?? (() => true);
73
73
  if (shouldNavigate(object)) {
74
- await dispatch(pipe(addObjectIntent, chain(NavigationAction.Open, {})));
74
+ await dispatch(pipe(addObjectIntent, chain(LayoutAction.Open, { part: 'main' })));
75
75
  } else {
76
76
  await dispatch(addObjectIntent);
77
77
  }
@@ -83,7 +83,7 @@ export const CreateObjectDialog = ({
83
83
  return (
84
84
  // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
85
85
  // Consider factoring it out to the tabs package.
86
- <Dialog.Content classNames='p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>
86
+ <Dialog.Content classNames='p-0 bs-content max-bs-full md:max-is-[40rem] overflow-hidden'>
87
87
  <div role='none' className='flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4'>
88
88
  <Dialog.Title>{t('create object dialog title')}</Dialog.Title>
89
89
  <Dialog.Close asChild>
@@ -92,18 +92,18 @@ export const CreateObjectDialog = ({
92
92
  </Button>
93
93
  </Dialog.Close>
94
94
  </div>
95
- <div className='p-4'>
96
- <CreateObjectPanel
97
- schemas={schemas}
98
- spaces={spaces}
99
- target={target}
100
- typename={typename}
101
- name={name}
102
- defaultSpaceId={client.spaces.default.id}
103
- resolve={resolve}
104
- onCreateObject={handleCreateObject}
105
- />
106
- </div>
95
+
96
+ <CreateObjectPanel
97
+ classNames='p-4'
98
+ schemas={schemas}
99
+ spaces={spaces}
100
+ target={target}
101
+ typename={typename}
102
+ name={name}
103
+ defaultSpaceId={client.spaces.default.id}
104
+ resolve={resolve}
105
+ onCreateObject={handleCreateObject}
106
+ />
107
107
  </Dialog.Content>
108
108
  );
109
109
  };