@dxos/plugin-space 0.6.13 → 0.6.14-main.69511f5

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 (99) hide show
  1. package/dist/lib/browser/{chunk-LZEGRS7H.mjs → chunk-AVLRQF6L.mjs} +1 -1
  2. package/dist/lib/browser/chunk-AVLRQF6L.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-DTVUOG2C.mjs → chunk-FOI7DAUV.mjs} +24 -5
  4. package/dist/lib/browser/chunk-FOI7DAUV.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +757 -298
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/meta.mjs +1 -1
  9. package/dist/lib/browser/types/index.mjs +7 -3
  10. package/dist/lib/node/{chunk-CVZPI2P3.cjs → chunk-OTDRTHT4.cjs} +30 -9
  11. package/dist/lib/node/chunk-OTDRTHT4.cjs.map +7 -0
  12. package/dist/lib/node/{chunk-6CNYF6YU.cjs → chunk-P4XUXM7Y.cjs} +4 -4
  13. package/dist/lib/node/chunk-P4XUXM7Y.cjs.map +7 -0
  14. package/dist/lib/node/index.cjs +953 -498
  15. package/dist/lib/node/index.cjs.map +4 -4
  16. package/dist/lib/node/meta.cjs +5 -5
  17. package/dist/lib/node/meta.cjs.map +1 -1
  18. package/dist/lib/node/meta.json +1 -1
  19. package/dist/lib/node/types/index.cjs +14 -10
  20. package/dist/lib/node/types/index.cjs.map +2 -2
  21. package/dist/lib/node-esm/chunk-FYDGMPSC.mjs +116 -0
  22. package/dist/lib/node-esm/chunk-FYDGMPSC.mjs.map +7 -0
  23. package/dist/lib/node-esm/chunk-YPQGKWHJ.mjs +37 -0
  24. package/dist/lib/node-esm/chunk-YPQGKWHJ.mjs.map +7 -0
  25. package/dist/lib/node-esm/index.mjs +3100 -0
  26. package/dist/lib/node-esm/index.mjs.map +7 -0
  27. package/dist/lib/node-esm/meta.json +1 -0
  28. package/dist/lib/node-esm/meta.mjs +14 -0
  29. package/dist/lib/node-esm/meta.mjs.map +7 -0
  30. package/dist/lib/node-esm/types/index.mjs +26 -0
  31. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  32. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  33. package/dist/types/src/components/DefaultObjectSettings.d.ts +7 -0
  34. package/dist/types/src/components/DefaultObjectSettings.d.ts.map +1 -0
  35. package/dist/types/src/components/MenuFooter.d.ts +1 -1
  36. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  37. package/dist/types/src/components/SaveStatus.d.ts +3 -0
  38. package/dist/types/src/components/SaveStatus.d.ts.map +1 -0
  39. package/dist/types/src/components/ShareSpaceButton.stories.d.ts +3 -91
  40. package/dist/types/src/components/ShareSpaceButton.stories.d.ts.map +1 -1
  41. package/dist/types/src/components/SpaceMain/SpaceMain.d.ts.map +1 -1
  42. package/dist/types/src/components/SpacePresence.d.ts +4 -2
  43. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  44. package/dist/types/src/components/SpacePresence.stories.d.ts +4 -92
  45. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  46. package/dist/types/src/components/SpaceSettings.d.ts.map +1 -1
  47. package/dist/types/src/components/SpaceSettingsPanel.d.ts +7 -0
  48. package/dist/types/src/components/SpaceSettingsPanel.d.ts.map +1 -0
  49. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +13 -0
  50. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -0
  51. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +24 -0
  52. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -0
  53. package/dist/types/src/components/SyncStatus/index.d.ts +2 -0
  54. package/dist/types/src/components/SyncStatus/index.d.ts.map +1 -0
  55. package/dist/types/src/components/SyncStatus/types.d.ts +14 -0
  56. package/dist/types/src/components/SyncStatus/types.d.ts.map +1 -0
  57. package/dist/types/src/components/index.d.ts +4 -2
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/meta.d.ts.map +1 -1
  60. package/dist/types/src/translations.d.ts +8 -0
  61. package/dist/types/src/translations.d.ts.map +1 -1
  62. package/dist/types/src/types/thread.d.ts +15 -1
  63. package/dist/types/src/types/thread.d.ts.map +1 -1
  64. package/dist/types/src/types/types.d.ts +21 -1
  65. package/dist/types/src/types/types.d.ts.map +1 -1
  66. package/dist/types/src/util.d.ts +4 -7
  67. package/dist/types/src/util.d.ts.map +1 -1
  68. package/package.json +45 -45
  69. package/src/SpacePlugin.tsx +229 -116
  70. package/src/components/DefaultObjectSettings.tsx +33 -0
  71. package/src/components/MenuFooter.tsx +2 -2
  72. package/src/components/SaveStatus.tsx +95 -0
  73. package/src/components/ShareSpaceButton.stories.tsx +11 -7
  74. package/src/components/SpaceMain/SpaceMain.tsx +1 -22
  75. package/src/components/SpacePresence.stories.tsx +11 -9
  76. package/src/components/SpacePresence.tsx +34 -23
  77. package/src/components/SpaceSettings.tsx +35 -6
  78. package/src/components/SpaceSettingsPanel.tsx +59 -0
  79. package/src/components/SyncStatus/SyncStatus.stories.tsx +65 -0
  80. package/src/components/SyncStatus/SyncStatus.tsx +188 -0
  81. package/src/components/SyncStatus/index.ts +5 -0
  82. package/src/components/SyncStatus/types.ts +77 -0
  83. package/src/components/index.ts +4 -2
  84. package/src/meta.ts +3 -1
  85. package/src/translations.ts +10 -2
  86. package/src/types/collection.ts +1 -1
  87. package/src/types/thread.ts +12 -2
  88. package/src/types/types.ts +28 -2
  89. package/src/util.tsx +23 -58
  90. package/dist/lib/browser/chunk-DTVUOG2C.mjs.map +0 -7
  91. package/dist/lib/browser/chunk-LZEGRS7H.mjs.map +0 -7
  92. package/dist/lib/node/chunk-6CNYF6YU.cjs.map +0 -7
  93. package/dist/lib/node/chunk-CVZPI2P3.cjs.map +0 -7
  94. package/dist/types/src/components/EmptySpace.d.ts +0 -3
  95. package/dist/types/src/components/EmptySpace.d.ts.map +0 -1
  96. package/dist/types/src/components/EmptyTree.d.ts +0 -3
  97. package/dist/types/src/components/EmptyTree.d.ts.map +0 -1
  98. package/src/components/EmptySpace.tsx +0 -25
  99. package/src/components/EmptyTree.tsx +0 -25
@@ -28,40 +28,45 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var node_exports = {};
30
30
  __export(node_exports, {
31
- ActorSchema: () => import_chunk_CVZPI2P3.ActorSchema,
31
+ ActorSchema: () => import_chunk_OTDRTHT4.ActorSchema,
32
32
  AwaitingObject: () => AwaitingObject,
33
33
  COMPOSER_SPACE_LOCK: () => COMPOSER_SPACE_LOCK,
34
- ChannelType: () => import_chunk_CVZPI2P3.ChannelType,
34
+ ChannelType: () => import_chunk_OTDRTHT4.ChannelType,
35
35
  CollectionMain: () => CollectionMain,
36
36
  CollectionSection: () => CollectionSection,
37
- CollectionType: () => import_chunk_CVZPI2P3.CollectionType,
38
- ContactType: () => import_chunk_CVZPI2P3.ContactType,
39
- EmptySpace: () => EmptySpace,
40
- EmptyTree: () => EmptyTree,
37
+ CollectionType: () => import_chunk_OTDRTHT4.CollectionType,
38
+ ContactType: () => import_chunk_OTDRTHT4.ContactType,
39
+ DefaultObjectSettings: () => DefaultObjectSettings,
41
40
  FullPresence: () => FullPresence,
42
41
  MenuFooter: () => MenuFooter,
43
- MessageType: () => import_chunk_CVZPI2P3.MessageType,
42
+ MessageState: () => import_chunk_OTDRTHT4.MessageState,
43
+ MessageType: () => import_chunk_OTDRTHT4.MessageType,
44
44
  MissingObject: () => MissingObject,
45
45
  PersistenceStatus: () => PersistenceStatus,
46
46
  PopoverRenameObject: () => PopoverRenameObject,
47
47
  PopoverRenameSpace: () => PopoverRenameSpace,
48
48
  SHARED: () => SHARED,
49
49
  SPACES: () => SPACES,
50
- SPACE_DIRECTORY_HANDLE: () => import_chunk_CVZPI2P3.SPACE_DIRECTORY_HANDLE,
51
- SPACE_PLUGIN: () => import_chunk_6CNYF6YU.SPACE_PLUGIN,
52
- SPACE_PLUGIN_SHORT_ID: () => import_chunk_6CNYF6YU.SPACE_PLUGIN_SHORT_ID,
50
+ SPACE_DIRECTORY_HANDLE: () => import_chunk_OTDRTHT4.SPACE_DIRECTORY_HANDLE,
51
+ SPACE_PLUGIN: () => import_chunk_P4XUXM7Y.SPACE_PLUGIN,
52
+ SPACE_PLUGIN_SHORT_ID: () => import_chunk_P4XUXM7Y.SPACE_PLUGIN_SHORT_ID,
53
53
  SPACE_TYPE: () => SPACE_TYPE,
54
+ SaveStatus: () => SaveStatus,
54
55
  ShareSpaceButton: () => ShareSpaceButton,
55
56
  ShareSpaceButtonImpl: () => ShareSpaceButtonImpl,
56
57
  SmallPresence: () => SmallPresence,
57
58
  SmallPresenceLive: () => SmallPresenceLive,
58
- SpaceAction: () => import_chunk_6CNYF6YU.SpaceAction,
59
+ SpaceAction: () => import_chunk_P4XUXM7Y.SpaceAction,
59
60
  SpaceMain: () => SpaceMain,
60
61
  SpacePlugin: () => SpacePlugin,
61
62
  SpacePresence: () => SpacePresence,
62
63
  SpaceSettings: () => SpaceSettings,
63
- ThreadStatus: () => import_chunk_CVZPI2P3.ThreadStatus,
64
- ThreadType: () => import_chunk_CVZPI2P3.ThreadType,
64
+ SpaceSettingsPanel: () => SpaceSettingsPanel,
65
+ SyncStatus: () => SyncStatus,
66
+ SyncStatusDetail: () => SyncStatusDetail,
67
+ SyncStatusIndicator: () => SyncStatusIndicator,
68
+ ThreadStatus: () => import_chunk_OTDRTHT4.ThreadStatus,
69
+ ThreadType: () => import_chunk_OTDRTHT4.ThreadType,
65
70
  cloneObject: () => cloneObject,
66
71
  constructObjectActionGroups: () => constructObjectActionGroups,
67
72
  constructObjectActions: () => constructObjectActions,
@@ -74,18 +79,19 @@ __export(node_exports, {
74
79
  getNestedObjects: () => getNestedObjects,
75
80
  getSpaceDisplayName: () => getSpaceDisplayName,
76
81
  memoizeQuery: () => memoizeQuery,
82
+ parseSpaceInitPlugin: () => import_chunk_OTDRTHT4.parseSpaceInitPlugin,
77
83
  parseSpacePlugin: () => parseSpacePlugin,
78
84
  translations: () => translations_default
79
85
  });
80
86
  module.exports = __toCommonJS(node_exports);
81
- var import_chunk_6CNYF6YU = require("./chunk-6CNYF6YU.cjs");
82
- var import_chunk_CVZPI2P3 = require("./chunk-CVZPI2P3.cjs");
83
- var import_react = require("@phosphor-icons/react");
87
+ var import_chunk_P4XUXM7Y = require("./chunk-P4XUXM7Y.cjs");
88
+ var import_chunk_OTDRTHT4 = require("./chunk-OTDRTHT4.cjs");
84
89
  var import_signals_core = require("@preact/signals-core");
85
- var import_react2 = __toESM(require("react"));
90
+ var import_react = __toESM(require("react"));
86
91
  var import_app_framework = require("@dxos/app-framework");
87
92
  var import_async = require("@dxos/async");
88
93
  var import_echo_schema = require("@dxos/echo-schema");
94
+ var import_core = require("@dxos/echo-signals/core");
89
95
  var import_local_storage = require("@dxos/local-storage");
90
96
  var import_log = require("@dxos/log");
91
97
  var import_migrations = require("@dxos/migrations");
@@ -96,97 +102,109 @@ var import_meta = require("@dxos/plugin-observability/meta");
96
102
  var import_react_client = require("@dxos/react-client");
97
103
  var import_echo = require("@dxos/react-client/echo");
98
104
  var import_react_ui = require("@dxos/react-ui");
99
- var import_react3 = require("@dxos/shell/react");
105
+ var import_react2 = require("@dxos/shell/react");
100
106
  var import_util = require("@dxos/util");
101
- var import_react4 = require("@phosphor-icons/react");
102
- var import_react5 = __toESM(require("react"));
107
+ var import_react3 = require("@phosphor-icons/react");
108
+ var import_react4 = __toESM(require("react"));
103
109
  var import_app_framework2 = require("@dxos/app-framework");
104
110
  var import_react_client2 = require("@dxos/react-client");
105
111
  var import_echo2 = require("@dxos/react-client/echo");
106
112
  var import_react_ui2 = require("@dxos/react-ui");
107
113
  var import_react_ui_theme = require("@dxos/react-ui-theme");
108
- var import_react6 = __toESM(require("react"));
114
+ var import_react5 = __toESM(require("react"));
109
115
  var import_react_ui3 = require("@dxos/react-ui");
110
116
  var import_react_ui_theme2 = require("@dxos/react-ui-theme");
111
- var import_react7 = __toESM(require("react"));
117
+ var import_react6 = __toESM(require("react"));
112
118
  var import_react_ui4 = require("@dxos/react-ui");
113
- var import_react8 = __toESM(require("react"));
119
+ var import_react7 = __toESM(require("react"));
114
120
  var import_react_ui5 = require("@dxos/react-ui");
115
- var import_react_ui_theme3 = require("@dxos/react-ui-theme");
121
+ var import_react8 = require("@phosphor-icons/react");
116
122
  var import_react9 = __toESM(require("react"));
117
- var import_react_ui6 = require("@dxos/react-ui");
118
- var import_react_ui_theme4 = require("@dxos/react-ui-theme");
119
- var import_react10 = require("@phosphor-icons/react");
120
- var import_react11 = __toESM(require("react"));
121
123
  var import_echo3 = require("@dxos/client/echo");
122
124
  var import_react_client3 = require("@dxos/react-client");
123
- var import_react_ui7 = require("@dxos/react-ui");
124
- var import_react12 = require("@phosphor-icons/react");
125
- var import_react13 = __toESM(require("react"));
125
+ var import_react_ui6 = require("@dxos/react-ui");
126
126
  var import_app_framework3 = require("@dxos/app-framework");
127
127
  var import_echo_schema2 = require("@dxos/echo-schema");
128
128
  var import_invariant = require("@dxos/invariant");
129
129
  var import_migrations2 = require("@dxos/migrations");
130
130
  var import_plugin_graph2 = require("@dxos/plugin-graph");
131
131
  var import_echo4 = require("@dxos/react-client/echo");
132
- var import_react14 = __toESM(require("react"));
132
+ var import_react10 = __toESM(require("react"));
133
133
  var import_app_framework4 = require("@dxos/app-framework");
134
- var import_react_ui8 = require("@dxos/react-ui");
135
- var import_react_ui_theme5 = require("@dxos/react-ui-theme");
136
- var import_react15 = require("@phosphor-icons/react");
137
- var import_react16 = __toESM(require("react"));
134
+ var import_react_ui7 = require("@dxos/react-ui");
135
+ var import_react_ui_theme3 = require("@dxos/react-ui-theme");
136
+ var import_react11 = require("@phosphor-icons/react");
137
+ var import_react12 = __toESM(require("react"));
138
138
  var import_async2 = require("@dxos/async");
139
- var import_react_ui9 = require("@dxos/react-ui");
140
- var import_react_ui_theme6 = require("@dxos/react-ui-theme");
141
- var import_react17 = __toESM(require("react"));
139
+ var import_react_ui8 = require("@dxos/react-ui");
140
+ var import_react_ui_theme4 = require("@dxos/react-ui-theme");
141
+ var import_react13 = __toESM(require("react"));
142
142
  var import_log2 = require("@dxos/log");
143
+ var import_react_ui9 = require("@dxos/react-ui");
144
+ var import_react14 = __toESM(require("react"));
143
145
  var import_react_ui10 = require("@dxos/react-ui");
144
- var import_react18 = __toESM(require("react"));
145
- var import_react_ui11 = require("@dxos/react-ui");
146
- var import_react19 = __toESM(require("react"));
146
+ var import_react15 = __toESM(require("react"));
147
147
  var import_app_framework5 = require("@dxos/app-framework");
148
- var import_react_ui12 = require("@dxos/react-ui");
149
- var import_react20 = require("@phosphor-icons/react");
150
- var import_react21 = __toESM(require("react"));
148
+ var import_react_ui11 = require("@dxos/react-ui");
149
+ var import_react16 = require("@phosphor-icons/react");
150
+ var import_react17 = __toESM(require("react"));
151
151
  var import_app_framework6 = require("@dxos/app-framework");
152
152
  var import_echo5 = require("@dxos/react-client/echo");
153
- var import_react_ui13 = require("@dxos/react-ui");
154
- var import_react_ui_theme7 = require("@dxos/react-ui-theme");
155
- var import_react22 = require("@dxos/shell/react");
156
- var import_react23 = require("@phosphor-icons/react");
157
- var import_react24 = __toESM(require("react"));
153
+ var import_react_ui12 = require("@dxos/react-ui");
154
+ var import_react_ui_theme5 = require("@dxos/react-ui-theme");
155
+ var import_react18 = require("@dxos/shell/react");
156
+ var import_react19 = require("@phosphor-icons/react");
157
+ var import_react20 = __toESM(require("react"));
158
158
  var import_app_framework7 = require("@dxos/app-framework");
159
159
  var import_echo6 = require("@dxos/react-client/echo");
160
160
  var import_invitations = require("@dxos/react-client/invitations");
161
161
  var import_invitations2 = require("@dxos/react-client/invitations");
162
- var import_react_ui14 = require("@dxos/react-ui");
163
- var import_react_ui_theme8 = require("@dxos/react-ui-theme");
164
- var import_react25 = require("@dxos/shell/react");
165
- var import_react26 = __toESM(require("react"));
162
+ var import_react_ui13 = require("@dxos/react-ui");
163
+ var import_react_ui_theme6 = require("@dxos/react-ui-theme");
164
+ var import_react21 = require("@dxos/shell/react");
165
+ var import_react22 = __toESM(require("react"));
166
166
  var import_app_framework8 = require("@dxos/app-framework");
167
167
  var import_display_name = require("@dxos/display-name");
168
168
  var import_react_client4 = require("@dxos/react-client");
169
169
  var import_echo7 = require("@dxos/react-client/echo");
170
170
  var import_halo = require("@dxos/react-client/halo");
171
- var import_react_ui15 = require("@dxos/react-ui");
171
+ var import_react_ui14 = require("@dxos/react-ui");
172
172
  var import_react_ui_attention = require("@dxos/react-ui-attention");
173
173
  var import_util2 = require("@dxos/util");
174
- var import_react27 = __toESM(require("react"));
174
+ var import_react23 = __toESM(require("react"));
175
175
  var import_app_framework9 = require("@dxos/app-framework");
176
- var import_plugin_settings = require("@dxos/plugin-settings");
176
+ var import_react_ui15 = require("@dxos/react-ui");
177
+ var import_react_ui_data = require("@dxos/react-ui-data");
178
+ var import_react24 = __toESM(require("react"));
179
+ var import_log3 = require("@dxos/log");
180
+ var import_metadata = require("@dxos/protocols/proto/dxos/echo/metadata");
177
181
  var import_react_ui16 = require("@dxos/react-ui");
182
+ var import_react25 = __toESM(require("react"));
183
+ var import_context = require("@dxos/context");
184
+ var import_plugin_status_bar = require("@dxos/plugin-status-bar");
185
+ var import_react_client5 = require("@dxos/react-client");
186
+ var import_react_ui17 = require("@dxos/react-ui");
187
+ var import_react26 = __toESM(require("react"));
188
+ var import_plugin_status_bar2 = require("@dxos/plugin-status-bar");
189
+ var import_react_ui18 = require("@dxos/react-ui");
190
+ var import_react_ui_syntax_highlighter = require("@dxos/react-ui-syntax-highlighter");
191
+ var import_react_ui_theme7 = require("@dxos/react-ui-theme");
192
+ var import_react27 = require("react");
193
+ var import_context2 = require("@dxos/context");
194
+ var import_protocols = require("@dxos/protocols");
195
+ var import_react_client6 = require("@dxos/react-client");
178
196
  var WAIT_FOR_OBJECT_TIMEOUT = 18e4;
179
197
  var TOAST_TIMEOUT = 24e4;
180
198
  var AwaitingObject = ({ id }) => {
181
- const [open, setOpen] = (0, import_react5.useState)(true);
182
- const [waiting, setWaiting] = (0, import_react5.useState)(true);
183
- const [found, setFound] = (0, import_react5.useState)(false);
184
- const { t } = (0, import_react_ui2.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
199
+ const [open, setOpen] = (0, import_react4.useState)(true);
200
+ const [waiting, setWaiting] = (0, import_react4.useState)(true);
201
+ const [found, setFound] = (0, import_react4.useState)(false);
202
+ const { t } = (0, import_react_ui2.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
185
203
  const intentPlugin = (0, import_app_framework2.useResolvePlugin)(import_app_framework2.parseIntentPlugin);
186
204
  const navigationPlugin = (0, import_app_framework2.useResolvePlugin)(import_app_framework2.parseNavigationPlugin);
187
205
  const client = (0, import_react_client2.useClient)();
188
206
  const objects = (0, import_echo2.useQuery)(client.spaces);
189
- (0, import_react5.useEffect)(() => {
207
+ (0, import_react4.useEffect)(() => {
190
208
  if (!id) {
191
209
  return;
192
210
  }
@@ -197,7 +215,7 @@ var AwaitingObject = ({ id }) => {
197
215
  }, [
198
216
  id
199
217
  ]);
200
- (0, import_react5.useEffect)(() => {
218
+ (0, import_react4.useEffect)(() => {
201
219
  if (objects.findIndex((object) => (0, import_echo2.fullyQualifiedId)(object) === id) > -1) {
202
220
  setFound(true);
203
221
  if (navigationPlugin?.provides.location.active === id) {
@@ -210,8 +228,8 @@ var AwaitingObject = ({ id }) => {
210
228
  intentPlugin
211
229
  ]);
212
230
  const handleClose = async () => intentPlugin?.provides.intent.dispatch({
213
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
214
- action: import_chunk_6CNYF6YU.SpaceAction.WAIT_FOR_OBJECT,
231
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
232
+ action: import_chunk_P4XUXM7Y.SpaceAction.WAIT_FOR_OBJECT,
215
233
  data: {
216
234
  id: void 0
217
235
  }
@@ -229,73 +247,72 @@ var AwaitingObject = ({ id }) => {
229
247
  });
230
248
  void handleClose();
231
249
  };
232
- return /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Root, {
250
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Root, {
233
251
  open,
234
252
  duration: TOAST_TIMEOUT,
235
253
  onOpenChange: setOpen
236
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Body, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Title, {
254
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Body, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Title, {
237
255
  classNames: "flex items-center gap-2"
238
- }, found ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(import_react4.CheckCircle, {
256
+ }, found ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(import_react3.CheckCircle, {
239
257
  className: (0, import_react_ui_theme.getSize)(5)
240
- }), /* @__PURE__ */ import_react5.default.createElement("span", null, t("found object label"))) : waiting ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(import_react4.CircleNotch, {
258
+ }), /* @__PURE__ */ import_react4.default.createElement("span", null, t("found object label"))) : waiting ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(import_react3.CircleNotch, {
241
259
  className: (0, import_react_ui_theme.mx)((0, import_react_ui_theme.getSize)(5), "animate-spin")
242
- }), /* @__PURE__ */ import_react5.default.createElement("span", null, t("waiting for object label"))) : /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(import_react4.CircleDashed, {
260
+ }), /* @__PURE__ */ import_react4.default.createElement("span", null, t("waiting for object label"))) : /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(import_react3.CircleDashed, {
243
261
  className: (0, import_react_ui_theme.getSize)(5)
244
- }), /* @__PURE__ */ import_react5.default.createElement("span", null, t("object not found label")))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Description, null, t(found ? "found object description" : waiting ? "waiting for object description" : "object not found description"))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Actions, null, found ? /* @__PURE__ */ import_react5.default.createElement(import_react5.default.Fragment, null, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Action, {
262
+ }), /* @__PURE__ */ import_react4.default.createElement("span", null, t("object not found label")))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Description, null, t(found ? "found object description" : waiting ? "waiting for object description" : "object not found description"))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Actions, null, found ? /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Action, {
245
263
  altText: t("go to object alt"),
246
264
  asChild: true
247
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Button, {
265
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Button, {
248
266
  variant: "primary",
249
267
  onClick: handleNavigate
250
- }, t("go to object label"))), /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Close, {
268
+ }, t("go to object label"))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Close, {
251
269
  asChild: true
252
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Button, {
270
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Button, {
253
271
  onClick: handleClose
254
272
  }, t("close label", {
255
273
  ns: "appkit"
256
- })))) : /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Toast.Close, {
274
+ })))) : /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Toast.Close, {
257
275
  asChild: true
258
- }, /* @__PURE__ */ import_react5.default.createElement(import_react_ui2.Button, {
276
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui2.Button, {
259
277
  onClick: handleClose
260
278
  }, t(waiting ? "close label" : "confirm label", {
261
279
  ns: "appkit"
262
280
  })))));
263
281
  };
264
282
  var CollectionMain = ({ collection }) => {
265
- const { t } = (0, import_react_ui3.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
266
- return /* @__PURE__ */ import_react6.default.createElement("div", {
283
+ const { t } = (0, import_react_ui3.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
284
+ return /* @__PURE__ */ import_react5.default.createElement("div", {
267
285
  role: "none",
268
286
  className: (0, import_react_ui_theme2.mx)(import_react_ui_theme2.baseSurface, "min-bs-screen is-full flex items-center justify-center p-8"),
269
287
  "data-testid": "composer.firstRunMessage"
270
- }, /* @__PURE__ */ import_react6.default.createElement("p", {
288
+ }, /* @__PURE__ */ import_react5.default.createElement("p", {
271
289
  role: "alert",
272
290
  className: (0, import_react_ui_theme2.mx)(import_react_ui_theme2.descriptionText, "border border-dashed border-neutral-400/50 rounded-lg p-8 font-normal text-lg max-is-[24rem] break-words")
273
291
  }, collection.name ?? t("unnamed collection label")));
274
292
  };
275
293
  var CollectionSection = ({ collection }) => {
276
- const { t } = (0, import_react_ui4.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
277
- return /* @__PURE__ */ import_react7.default.createElement("div", {
294
+ const { t } = (0, import_react_ui4.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
295
+ return /* @__PURE__ */ import_react6.default.createElement("div", {
278
296
  className: "min-bs-[3.5rem] grid grid-rows-subgrid grid-cols-subgrid items-center"
279
- }, /* @__PURE__ */ import_react7.default.createElement("span", {
297
+ }, /* @__PURE__ */ import_react6.default.createElement("span", {
280
298
  className: "truncate"
281
299
  }, collection.name ?? t("unnamed collection label")));
282
300
  };
283
- var EmptySpace = () => {
284
- const { t } = (0, import_react_ui5.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
285
- return /* @__PURE__ */ import_react8.default.createElement("div", {
286
- role: "none",
287
- className: (0, import_react_ui_theme3.mx)("p-2 mli-2 mbe-2 text-center border border-dashed border-neutral-400/50 rounded-lg", import_react_ui_theme3.descriptionText)
288
- }, t("empty space message"));
289
- };
290
- var EmptyTree = () => {
291
- const { t } = (0, import_react_ui6.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
292
- return /* @__PURE__ */ import_react9.default.createElement("div", {
293
- role: "none",
294
- className: (0, import_react_ui_theme4.mx)("p-2 mli-2 mbe-2 text-center border border-dashed border-neutral-400/50 rounded-lg", import_react_ui_theme4.descriptionText)
295
- }, t("empty tree message"));
301
+ var DefaultObjectSettings = ({ object }) => {
302
+ const { t } = (0, import_react_ui5.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
303
+ return /* @__PURE__ */ import_react7.default.createElement("div", {
304
+ role: "form",
305
+ className: "flex flex-col w-full p-2 gap-1"
306
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui5.Input.Root, null, /* @__PURE__ */ import_react7.default.createElement(import_react_ui5.Input.Label, null, t("name label")), /* @__PURE__ */ import_react7.default.createElement(import_react_ui5.Input.TextInput, {
307
+ placeholder: t("name placeholder"),
308
+ value: object.name ?? "",
309
+ onChange: (event) => {
310
+ object.name = event.target.value;
311
+ }
312
+ })));
296
313
  };
297
314
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/util.tsx";
298
- var SPACES = `${import_chunk_6CNYF6YU.SPACE_PLUGIN}-spaces`;
315
+ var SPACES = `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}-spaces`;
299
316
  var SPACE_TYPE = "dxos.org/type/Space";
300
317
  var COMPOSER_SPACE_LOCK = "dxos.org/plugin/space/lock";
301
318
  var SHARED = "shared-spaces";
@@ -311,12 +328,12 @@ var getSpaceDisplayName = (space, { personal, namesCache = {} } = {}) => {
311
328
  return space.state.get() === import_echo4.SpaceState.SPACE_READY && (space.properties.name?.length ?? 0) > 0 ? space.properties.name : namesCache[space.id] ? namesCache[space.id] : personal ? [
312
329
  "personal space label",
313
330
  {
314
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
331
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
315
332
  }
316
333
  ] : [
317
334
  "unnamed space label",
318
335
  {
319
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
336
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
320
337
  }
321
338
  ];
322
339
  };
@@ -348,7 +365,7 @@ var getCollectionGraphNodePartials = ({ collection, space, resolve }) => {
348
365
  }
349
366
  },
350
367
  onCopy: async (child, index) => {
351
- const newObject = await cloneObject(child.data, resolve);
368
+ const newObject = await cloneObject(child.data, resolve, space);
352
369
  space.db.add(newObject);
353
370
  if (typeof index !== "undefined") {
354
371
  collection.objects.splice(index, 0, newObject);
@@ -363,8 +380,8 @@ var checkPendingMigration = (space) => {
363
380
  };
364
381
  var constructSpaceNode = ({ space, personal, namesCache, resolve }) => {
365
382
  const hasPendingMigration = checkPendingMigration(space);
366
- const collection = space.state.get() === import_echo4.SpaceState.SPACE_READY && space.properties[import_chunk_CVZPI2P3.CollectionType.typename];
367
- const partials = space.state.get() === import_echo4.SpaceState.SPACE_READY && collection instanceof import_chunk_CVZPI2P3.CollectionType ? getCollectionGraphNodePartials({
383
+ const collection = space.state.get() === import_echo4.SpaceState.SPACE_READY && space.properties[import_chunk_OTDRTHT4.CollectionType.typename];
384
+ const partials = space.state.get() === import_echo4.SpaceState.SPACE_READY && collection instanceof import_chunk_OTDRTHT4.CollectionType ? getCollectionGraphNodePartials({
368
385
  collection,
369
386
  space,
370
387
  resolve
@@ -380,8 +397,7 @@ var constructSpaceNode = ({ space, personal, namesCache, resolve }) => {
380
397
  namesCache
381
398
  }),
382
399
  description: space.state.get() === import_echo4.SpaceState.SPACE_READY && space.properties.description,
383
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.Planet, props),
384
- iconSymbol: "ph--planet--regular",
400
+ icon: "ph--planet--regular",
385
401
  disabled: space.state.get() !== import_echo4.SpaceState.SPACE_READY || hasPendingMigration,
386
402
  testId: "spacePlugin.space"
387
403
  }
@@ -394,21 +410,20 @@ var constructSpaceActionGroups = ({ space, dispatch }) => {
394
410
  if (state !== import_echo4.SpaceState.SPACE_READY || hasPendingMigration) {
395
411
  return [];
396
412
  }
397
- const collection = space.properties[import_chunk_CVZPI2P3.CollectionType.typename];
413
+ const collection = space.properties[import_chunk_OTDRTHT4.CollectionType.typename];
398
414
  const actions = [
399
415
  {
400
- id: getId(import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT),
416
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT),
401
417
  type: import_plugin_graph2.ACTION_GROUP_TYPE,
402
418
  data: import_plugin_graph2.actionGroupSymbol,
403
419
  properties: {
404
420
  label: [
405
421
  "create object in space label",
406
422
  {
407
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
423
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
408
424
  }
409
425
  ],
410
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.Plus, props),
411
- iconSymbol: "ph--plus--regular",
426
+ icon: "ph--plus--regular",
412
427
  disposition: "toolbar",
413
428
  // TODO(wittjosiah): This is currently a navtree feature. Address this with cmd+k integration.
414
429
  // mainAreaDisposition: 'in-flow',
@@ -417,15 +432,15 @@ var constructSpaceActionGroups = ({ space, dispatch }) => {
417
432
  },
418
433
  nodes: [
419
434
  {
420
- id: getId(import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT.replace("object", "collection")),
435
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT.replace("object", "collection")),
421
436
  type: import_plugin_graph2.ACTION_TYPE,
422
437
  data: () => dispatch([
423
438
  {
424
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
425
- action: import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT,
439
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
440
+ action: import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT,
426
441
  data: {
427
442
  target: collection,
428
- object: (0, import_echo_schema2.create)(import_chunk_CVZPI2P3.CollectionType, {
443
+ object: (0, import_echo_schema2.create)(import_chunk_OTDRTHT4.CollectionType, {
429
444
  objects: [],
430
445
  views: {}
431
446
  })
@@ -439,11 +454,10 @@ var constructSpaceActionGroups = ({ space, dispatch }) => {
439
454
  label: [
440
455
  "create collection label",
441
456
  {
442
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
457
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
443
458
  }
444
459
  ],
445
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.CardsThree, props),
446
- iconSymbol: "ph--cards-three--regular",
460
+ icon: "ph--cards-three--regular",
447
461
  testId: "spacePlugin.createCollection"
448
462
  }
449
463
  }
@@ -459,12 +473,12 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
459
473
  const actions = [];
460
474
  if (hasPendingMigration) {
461
475
  actions.push({
462
- id: getId(import_chunk_6CNYF6YU.SpaceAction.MIGRATE),
476
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.MIGRATE),
463
477
  type: import_plugin_graph2.ACTION_GROUP_TYPE,
464
478
  data: async () => {
465
479
  await dispatch({
466
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
467
- action: import_chunk_6CNYF6YU.SpaceAction.MIGRATE,
480
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
481
+ action: import_chunk_P4XUXM7Y.SpaceAction.MIGRATE,
468
482
  data: {
469
483
  space
470
484
  }
@@ -474,11 +488,10 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
474
488
  label: [
475
489
  "migrate space label",
476
490
  {
477
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
491
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
478
492
  }
479
493
  ],
480
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.Database, props),
481
- iconSymbol: "ph--database--regular",
494
+ icon: "ph--database--regular",
482
495
  disposition: "toolbar",
483
496
  mainAreaDisposition: "in-flow",
484
497
  disabled: migrating || import_migrations2.Migrations.running(space)
@@ -488,15 +501,15 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
488
501
  if (state === import_echo4.SpaceState.SPACE_READY && !hasPendingMigration) {
489
502
  const locked = space.properties[COMPOSER_SPACE_LOCK];
490
503
  actions.push({
491
- id: getId(import_chunk_6CNYF6YU.SpaceAction.SHARE),
504
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.SHARE),
492
505
  type: import_plugin_graph2.ACTION_TYPE,
493
506
  data: async () => {
494
507
  if (locked) {
495
508
  return;
496
509
  }
497
510
  await dispatch({
498
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
499
- action: import_chunk_6CNYF6YU.SpaceAction.SHARE,
511
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
512
+ action: import_chunk_P4XUXM7Y.SpaceAction.SHARE,
500
513
  data: {
501
514
  spaceId: space.id
502
515
  }
@@ -506,11 +519,10 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
506
519
  label: [
507
520
  "share space label",
508
521
  {
509
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
522
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
510
523
  }
511
524
  ],
512
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.Users, props),
513
- iconSymbol: "ph--users--regular",
525
+ icon: "ph--users--regular",
514
526
  disabled: locked,
515
527
  keyBinding: {
516
528
  macos: "meta+.",
@@ -519,12 +531,12 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
519
531
  mainAreaDisposition: "absent"
520
532
  }
521
533
  }, {
522
- id: locked ? getId(import_chunk_6CNYF6YU.SpaceAction.UNLOCK) : getId(import_chunk_6CNYF6YU.SpaceAction.LOCK),
534
+ id: locked ? getId(import_chunk_P4XUXM7Y.SpaceAction.UNLOCK) : getId(import_chunk_P4XUXM7Y.SpaceAction.LOCK),
523
535
  type: import_plugin_graph2.ACTION_TYPE,
524
536
  data: async () => {
525
537
  await dispatch({
526
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
527
- action: locked ? import_chunk_6CNYF6YU.SpaceAction.UNLOCK : import_chunk_6CNYF6YU.SpaceAction.LOCK,
538
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
539
+ action: locked ? import_chunk_P4XUXM7Y.SpaceAction.UNLOCK : import_chunk_P4XUXM7Y.SpaceAction.LOCK,
528
540
  data: {
529
541
  space
530
542
  }
@@ -534,19 +546,18 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
534
546
  label: [
535
547
  locked ? "unlock space label" : "lock space label",
536
548
  {
537
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
549
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
538
550
  }
539
551
  ],
540
- icon: locked ? (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.LockSimpleOpen, props) : (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.LockSimple, props),
541
- iconSymbol: locked ? "ph--lock-simple-open--regular" : "ph--lock-simple--regular"
552
+ icon: locked ? "ph--lock-simple-open--regular" : "ph--lock-simple--regular"
542
553
  }
543
554
  }, {
544
- id: getId(import_chunk_6CNYF6YU.SpaceAction.RENAME),
555
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.RENAME),
545
556
  type: import_plugin_graph2.ACTION_TYPE,
546
557
  data: async (params) => {
547
558
  await dispatch({
548
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
549
- action: import_chunk_6CNYF6YU.SpaceAction.RENAME,
559
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
560
+ action: import_chunk_P4XUXM7Y.SpaceAction.RENAME,
550
561
  data: {
551
562
  space,
552
563
  ...params
@@ -557,11 +568,10 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
557
568
  label: [
558
569
  "rename space label",
559
570
  {
560
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
571
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
561
572
  }
562
573
  ],
563
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.PencilSimpleLine, props),
564
- iconSymbol: "ph--pencil-simple-line--regular",
574
+ icon: "ph--pencil-simple-line--regular",
565
575
  keyBinding: {
566
576
  macos: "shift+F6",
567
577
  windows: "shift+F6"
@@ -572,12 +582,12 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
572
582
  }
573
583
  if (state !== import_echo4.SpaceState.SPACE_INACTIVE && !hasPendingMigration) {
574
584
  actions.push({
575
- id: getId(import_chunk_6CNYF6YU.SpaceAction.CLOSE),
585
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.CLOSE),
576
586
  type: import_plugin_graph2.ACTION_TYPE,
577
587
  data: async () => {
578
588
  await dispatch({
579
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
580
- action: import_chunk_6CNYF6YU.SpaceAction.CLOSE,
589
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
590
+ action: import_chunk_P4XUXM7Y.SpaceAction.CLOSE,
581
591
  data: {
582
592
  space
583
593
  }
@@ -587,11 +597,10 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
587
597
  label: [
588
598
  "close space label",
589
599
  {
590
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
600
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
591
601
  }
592
602
  ],
593
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.X, props),
594
- iconSymbol: "ph--x--regular",
603
+ icon: "ph--x--regular",
595
604
  mainAreaDisposition: "menu",
596
605
  disabled: personal
597
606
  }
@@ -599,12 +608,12 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
599
608
  }
600
609
  if (state === import_echo4.SpaceState.SPACE_INACTIVE) {
601
610
  actions.push({
602
- id: getId(import_chunk_6CNYF6YU.SpaceAction.OPEN),
611
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.OPEN),
603
612
  type: import_plugin_graph2.ACTION_TYPE,
604
613
  data: async () => {
605
614
  await dispatch({
606
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
607
- action: import_chunk_6CNYF6YU.SpaceAction.OPEN,
615
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
616
+ action: import_chunk_P4XUXM7Y.SpaceAction.OPEN,
608
617
  data: {
609
618
  space
610
619
  }
@@ -614,11 +623,10 @@ var constructSpaceActions = ({ space, dispatch, personal, migrating }) => {
614
623
  label: [
615
624
  "open space label",
616
625
  {
617
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
626
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
618
627
  }
619
628
  ],
620
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.ClockCounterClockwise, props),
621
- iconSymbol: "ph--clock-counter-clockwise--regular",
629
+ icon: "ph--clock-counter-clockwise--regular",
622
630
  disposition: "toolbar",
623
631
  mainAreaDisposition: "in-flow"
624
632
  }
@@ -635,7 +643,7 @@ var createObjectNode = ({ object, space, resolve }) => {
635
643
  if (Object.keys(metadata).length === 0) {
636
644
  return void 0;
637
645
  }
638
- const partials = object instanceof import_chunk_CVZPI2P3.CollectionType ? getCollectionGraphNodePartials({
646
+ const partials = object instanceof import_chunk_OTDRTHT4.CollectionType ? getCollectionGraphNodePartials({
639
647
  collection: object,
640
648
  space,
641
649
  resolve
@@ -649,11 +657,10 @@ var createObjectNode = ({ object, space, resolve }) => {
649
657
  label: metadata.label?.(object) || object.name || metadata.placeholder || [
650
658
  "unnamed object label",
651
659
  {
652
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
660
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
653
661
  }
654
662
  ],
655
- icon: metadata.icon ?? (() => /* @__PURE__ */ import_react13.default.createElement(import_react12.Placeholder, null)),
656
- iconSymbol: metadata.iconSymbol ?? "ph--placeholder--regular",
663
+ icon: metadata.icon ?? "ph--placeholder--regular",
657
664
  testId: "spacePlugin.object",
658
665
  persistenceClass: "echo",
659
666
  persistenceKey: space?.id
@@ -661,25 +668,24 @@ var createObjectNode = ({ object, space, resolve }) => {
661
668
  };
662
669
  };
663
670
  var constructObjectActionGroups = ({ object, dispatch }) => {
664
- if (!(object instanceof import_chunk_CVZPI2P3.CollectionType)) {
671
+ if (!(object instanceof import_chunk_OTDRTHT4.CollectionType)) {
665
672
  return [];
666
673
  }
667
674
  const collection = object;
668
675
  const getId = (id) => `${id}/${(0, import_echo4.fullyQualifiedId)(object)}`;
669
676
  const actions = [
670
677
  {
671
- id: getId(import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT),
678
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT),
672
679
  type: import_plugin_graph2.ACTION_GROUP_TYPE,
673
680
  data: import_plugin_graph2.actionGroupSymbol,
674
681
  properties: {
675
682
  label: [
676
683
  "create object in collection label",
677
684
  {
678
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
685
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
679
686
  }
680
687
  ],
681
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.Plus, props),
682
- iconSymbol: "ph--plus--regular",
688
+ icon: "ph--plus--regular",
683
689
  disposition: "toolbar",
684
690
  // TODO(wittjosiah): This is currently a navtree feature. Address this with cmd+k integration.
685
691
  // mainAreaDisposition: 'in-flow',
@@ -688,15 +694,15 @@ var constructObjectActionGroups = ({ object, dispatch }) => {
688
694
  },
689
695
  nodes: [
690
696
  {
691
- id: getId(import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT.replace("object", "collection")),
697
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT.replace("object", "collection")),
692
698
  type: import_plugin_graph2.ACTION_TYPE,
693
699
  data: () => dispatch([
694
700
  {
695
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
696
- action: import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT,
701
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
702
+ action: import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT,
697
703
  data: {
698
704
  target: collection,
699
- object: (0, import_echo_schema2.create)(import_chunk_CVZPI2P3.CollectionType, {
705
+ object: (0, import_echo_schema2.create)(import_chunk_OTDRTHT4.CollectionType, {
700
706
  objects: [],
701
707
  views: {}
702
708
  })
@@ -710,11 +716,10 @@ var constructObjectActionGroups = ({ object, dispatch }) => {
710
716
  label: [
711
717
  "create collection label",
712
718
  {
713
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
719
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
714
720
  }
715
721
  ],
716
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.CardsThree, props),
717
- iconSymbol: "ph--cards-three--regular",
722
+ icon: "ph--cards-three--regular",
718
723
  testId: "spacePlugin.createCollection"
719
724
  }
720
725
  }
@@ -728,11 +733,11 @@ var constructObjectActions = ({ node, dispatch }) => {
728
733
  const getId = (id) => `${id}/${(0, import_echo4.fullyQualifiedId)(object)}`;
729
734
  const actions = [
730
735
  {
731
- id: getId(import_chunk_6CNYF6YU.SpaceAction.RENAME_OBJECT),
736
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.RENAME_OBJECT),
732
737
  type: import_plugin_graph2.ACTION_TYPE,
733
738
  data: async (params) => {
734
739
  await dispatch({
735
- action: import_chunk_6CNYF6YU.SpaceAction.RENAME_OBJECT,
740
+ action: import_chunk_P4XUXM7Y.SpaceAction.RENAME_OBJECT,
736
741
  data: {
737
742
  object,
738
743
  ...params
@@ -741,29 +746,28 @@ var constructObjectActions = ({ node, dispatch }) => {
741
746
  },
742
747
  properties: {
743
748
  label: [
744
- object instanceof import_chunk_CVZPI2P3.CollectionType ? "rename collection label" : "rename object label",
749
+ object instanceof import_chunk_OTDRTHT4.CollectionType ? "rename collection label" : "rename object label",
745
750
  {
746
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
751
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
747
752
  }
748
753
  ],
749
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.PencilSimpleLine, props),
750
- iconSymbol: "ph--pencil-simple-line--regular",
754
+ icon: "ph--pencil-simple-line--regular",
751
755
  // TODO(wittjosiah): Doesn't work.
752
756
  // keyBinding: 'shift+F6',
753
757
  testId: "spacePlugin.renameObject"
754
758
  }
755
759
  },
756
760
  {
757
- id: getId(import_chunk_6CNYF6YU.SpaceAction.REMOVE_OBJECT),
761
+ id: getId(import_chunk_P4XUXM7Y.SpaceAction.REMOVE_OBJECT),
758
762
  type: import_plugin_graph2.ACTION_TYPE,
759
763
  data: async () => {
760
764
  const graph = (0, import_plugin_graph2.getGraph)(node);
761
765
  const collection = graph.nodes(node, {
762
766
  relation: "inbound"
763
- }).find(({ data }) => data instanceof import_chunk_CVZPI2P3.CollectionType)?.data;
767
+ }).find(({ data }) => data instanceof import_chunk_OTDRTHT4.CollectionType)?.data;
764
768
  await dispatch([
765
769
  {
766
- action: import_chunk_6CNYF6YU.SpaceAction.REMOVE_OBJECT,
770
+ action: import_chunk_P4XUXM7Y.SpaceAction.REMOVE_OBJECT,
767
771
  data: {
768
772
  object,
769
773
  collection
@@ -773,14 +777,13 @@ var constructObjectActions = ({ node, dispatch }) => {
773
777
  },
774
778
  properties: {
775
779
  label: [
776
- object instanceof import_chunk_CVZPI2P3.CollectionType ? "delete collection label" : "delete object label",
780
+ object instanceof import_chunk_OTDRTHT4.CollectionType ? "delete collection label" : "delete object label",
777
781
  {
778
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
782
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
779
783
  }
780
784
  ],
781
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.Trash, props),
782
- iconSymbol: "ph--trash--regular",
783
- keyBinding: object instanceof import_chunk_CVZPI2P3.CollectionType ? void 0 : "shift+meta+Backspace",
785
+ icon: "ph--trash--regular",
786
+ keyBinding: object instanceof import_chunk_OTDRTHT4.CollectionType ? void 0 : "shift+meta+Backspace",
784
787
  testId: "spacePlugin.deleteObject"
785
788
  }
786
789
  },
@@ -795,11 +798,10 @@ var constructObjectActions = ({ node, dispatch }) => {
795
798
  label: [
796
799
  "copy link label",
797
800
  {
798
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
801
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
799
802
  }
800
803
  ],
801
- icon: (props) => /* @__PURE__ */ import_react13.default.createElement(import_react12.Link, props),
802
- iconSymbol: "ph--link--regular",
804
+ icon: "ph--link--regular",
803
805
  testId: "spacePlugin.copyLink"
804
806
  }
805
807
  }
@@ -833,14 +835,14 @@ var getNestedObjects = async (object, resolve) => {
833
835
  ...nested.flat()
834
836
  ];
835
837
  };
836
- var cloneObject = async (object, resolve) => {
838
+ var cloneObject = async (object, resolve, newSpace) => {
837
839
  const schema = (0, import_echo_schema2.getSchema)(object);
838
- const typename = schema ? (0, import_echo_schema2.getEchoObjectAnnotation)(schema)?.typename ?? import_echo_schema2.EXPANDO_TYPENAME : import_echo_schema2.EXPANDO_TYPENAME;
840
+ const typename = schema ? (0, import_echo_schema2.getObjectAnnotation)(schema)?.typename ?? import_echo_schema2.EXPANDO_TYPENAME : import_echo_schema2.EXPANDO_TYPENAME;
839
841
  const metadata = resolve(typename);
840
842
  const serializer = metadata.serializer;
841
843
  (0, import_invariant.invariant)(serializer, `No serializer for type: ${typename}`, {
842
844
  F: __dxlog_file,
843
- L: 639,
845
+ L: 604,
844
846
  S: void 0,
845
847
  A: [
846
848
  "serializer",
@@ -852,40 +854,41 @@ var cloneObject = async (object, resolve) => {
852
854
  });
853
855
  return serializer.deserialize({
854
856
  content,
857
+ space: newSpace,
855
858
  newId: true
856
859
  });
857
860
  };
858
861
  var MenuFooter = ({ object }) => {
859
- const { t } = (0, import_react_ui7.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
862
+ const { t } = (0, import_react_ui6.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
860
863
  const client = (0, import_react_client3.useClient)();
861
864
  const space = (0, import_echo3.getSpace)(object);
862
865
  const spaceName = space ? getSpaceDisplayName(space, {
863
866
  personal: client.spaces.default === space
864
867
  }) : "";
865
- return space ? /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement(import_react_ui7.DropdownMenu.Separator, null), /* @__PURE__ */ import_react11.default.createElement(import_react_ui7.DropdownMenu.GroupLabel, null, t("menu footer label")), /* @__PURE__ */ import_react11.default.createElement("dl", {
868
+ return space ? /* @__PURE__ */ import_react9.default.createElement(import_react9.default.Fragment, null, /* @__PURE__ */ import_react9.default.createElement(import_react_ui6.DropdownMenu.Separator, null), /* @__PURE__ */ import_react9.default.createElement(import_react_ui6.DropdownMenu.GroupLabel, null, t("menu footer label")), /* @__PURE__ */ import_react9.default.createElement("dl", {
866
869
  className: "pis-2 mbe-2 text-xs grid grid-cols-[max-content_1fr] gap-2"
867
- }, /* @__PURE__ */ import_react11.default.createElement("dt", {
870
+ }, /* @__PURE__ */ import_react9.default.createElement("dt", {
868
871
  className: "uppercase text-[.75em] tracking-wide font-medium mbs-px self-start"
869
- }, t("location label")), /* @__PURE__ */ import_react11.default.createElement("dd", {
872
+ }, t("location label")), /* @__PURE__ */ import_react9.default.createElement("dd", {
870
873
  className: "line-clamp-3"
871
- }, /* @__PURE__ */ import_react11.default.createElement(import_react10.Planet, {
874
+ }, /* @__PURE__ */ import_react9.default.createElement(import_react8.Planet, {
872
875
  className: "inline-block mie-1"
873
- }), (0, import_react_ui7.toLocalizedString)(spaceName, t)))) : null;
876
+ }), (0, import_react_ui6.toLocalizedString)(spaceName, t)))) : null;
874
877
  };
875
878
  var WAIT_FOR_OBJECT_TIMEOUT2 = 1e3;
876
879
  var MissingObject = ({ id }) => {
877
- const { t } = (0, import_react_ui8.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
878
- const [waiting, setWaiting] = (0, import_react14.useState)(false);
880
+ const { t } = (0, import_react_ui7.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
881
+ const [waiting, setWaiting] = (0, import_react10.useState)(false);
879
882
  const intentPlugin = (0, import_app_framework4.useResolvePlugin)(import_app_framework4.parseIntentPlugin);
880
- (0, import_react14.useEffect)(() => {
883
+ (0, import_react10.useEffect)(() => {
881
884
  if (!intentPlugin) {
882
885
  return;
883
886
  }
884
887
  const timeout = setTimeout(async () => {
885
888
  setWaiting(true);
886
889
  await intentPlugin.provides.intent.dispatch({
887
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
888
- action: import_chunk_6CNYF6YU.SpaceAction.WAIT_FOR_OBJECT,
890
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
891
+ action: import_chunk_P4XUXM7Y.SpaceAction.WAIT_FOR_OBJECT,
889
892
  data: {
890
893
  id
891
894
  }
@@ -896,13 +899,13 @@ var MissingObject = ({ id }) => {
896
899
  intentPlugin,
897
900
  id
898
901
  ]);
899
- return /* @__PURE__ */ import_react14.default.createElement("div", {
902
+ return /* @__PURE__ */ import_react10.default.createElement("div", {
900
903
  role: "none",
901
- className: (0, import_react_ui_theme5.mx)(import_react_ui_theme5.baseSurface, "min-bs-screen is-full flex items-center justify-center p-8")
902
- }, waiting ? /* @__PURE__ */ import_react14.default.createElement("p", {
904
+ className: (0, import_react_ui_theme3.mx)(import_react_ui_theme3.baseSurface, "min-bs-screen is-full flex items-center justify-center p-8")
905
+ }, waiting ? /* @__PURE__ */ import_react10.default.createElement("p", {
903
906
  role: "alert",
904
- className: (0, import_react_ui_theme5.mx)(import_react_ui_theme5.descriptionText, "border border-dashed border-neutral-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg")
905
- }, t("missing object message")) : /* @__PURE__ */ import_react14.default.createElement(import_react_ui8.Status, {
907
+ className: (0, import_react_ui_theme3.mx)(import_react_ui_theme3.descriptionText, "border border-dashed border-neutral-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg")
908
+ }, t("missing object message")) : /* @__PURE__ */ import_react10.default.createElement(import_react_ui7.Status, {
906
909
  indeterminate: true,
907
910
  "aria-label": "Initializing"
908
911
  }));
@@ -914,12 +917,12 @@ var Status2;
914
917
  Status3[Status3["ERROR"] = 2] = "ERROR";
915
918
  })(Status2 || (Status2 = {}));
916
919
  var PersistenceStatus = ({ db }) => {
917
- const { t } = (0, import_react_ui9.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
918
- const [displayMessage, setDisplayMessage] = (0, import_react16.useState)(false);
919
- const [status, naturalSetStatus] = (0, import_react16.useState)(0);
920
- const [prevStatus, setPrevStatus] = (0, import_react16.useState)(0);
920
+ const { t } = (0, import_react_ui8.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
921
+ const [displayMessage, setDisplayMessage] = (0, import_react12.useState)(false);
922
+ const [status, naturalSetStatus] = (0, import_react12.useState)(0);
923
+ const [prevStatus, setPrevStatus] = (0, import_react12.useState)(0);
921
924
  const _setStatus = (0, import_async2.debounce)(naturalSetStatus, 500);
922
- (0, import_react16.useEffect)(() => {
925
+ (0, import_react12.useEffect)(() => {
923
926
  setPrevStatus(status);
924
927
  if (prevStatus !== status && status === 0) {
925
928
  setDisplayMessage(true);
@@ -931,44 +934,44 @@ var PersistenceStatus = ({ db }) => {
931
934
  ]);
932
935
  switch (status) {
933
936
  case 2:
934
- return /* @__PURE__ */ import_react16.default.createElement("div", {
937
+ return /* @__PURE__ */ import_react12.default.createElement("div", {
935
938
  className: "flex items-center"
936
- }, /* @__PURE__ */ import_react16.default.createElement(import_react15.Warning, {
937
- className: (0, import_react_ui_theme6.mx)((0, import_react_ui_theme6.getSize)(4), "me-1")
938
- }), /* @__PURE__ */ import_react16.default.createElement("span", {
939
- className: (0, import_react_ui_theme6.mx)("text-sm", import_react_ui_theme6.warningText)
939
+ }, /* @__PURE__ */ import_react12.default.createElement(import_react11.Warning, {
940
+ className: (0, import_react_ui_theme4.mx)((0, import_react_ui_theme4.getSize)(4), "me-1")
941
+ }), /* @__PURE__ */ import_react12.default.createElement("span", {
942
+ className: (0, import_react_ui_theme4.mx)("text-sm", import_react_ui_theme4.warningText)
940
943
  }, t("persistence error label")));
941
944
  case 1:
942
- return /* @__PURE__ */ import_react16.default.createElement("div", {
945
+ return /* @__PURE__ */ import_react12.default.createElement("div", {
943
946
  className: "flex items-center"
944
- }, /* @__PURE__ */ import_react16.default.createElement(import_react15.ArrowsCounterClockwise, {
945
- className: (0, import_react_ui_theme6.mx)((0, import_react_ui_theme6.getSize)(4), "me-1")
946
- }), /* @__PURE__ */ import_react16.default.createElement("span", {
947
- className: (0, import_react_ui_theme6.mx)("text-sm", import_react_ui_theme6.staticPlaceholderText)
947
+ }, /* @__PURE__ */ import_react12.default.createElement(import_react11.ArrowsCounterClockwise, {
948
+ className: (0, import_react_ui_theme4.mx)((0, import_react_ui_theme4.getSize)(4), "me-1")
949
+ }), /* @__PURE__ */ import_react12.default.createElement("span", {
950
+ className: (0, import_react_ui_theme4.mx)("text-sm", import_react_ui_theme4.staticPlaceholderText)
948
951
  }, t("persistence pending label")));
949
952
  case 0:
950
953
  default:
951
- return /* @__PURE__ */ import_react16.default.createElement(import_react_ui9.Tooltip.Root, {
954
+ return /* @__PURE__ */ import_react12.default.createElement(import_react_ui8.Tooltip.Root, {
952
955
  delayDuration: 400
953
- }, /* @__PURE__ */ import_react16.default.createElement(import_react_ui9.Tooltip.Trigger, {
956
+ }, /* @__PURE__ */ import_react12.default.createElement(import_react_ui8.Tooltip.Trigger, {
954
957
  role: "status",
955
958
  className: "flex items-center"
956
- }, /* @__PURE__ */ import_react16.default.createElement(import_react15.CheckCircle, {
957
- className: (0, import_react_ui_theme6.mx)((0, import_react_ui_theme6.getSize)(4), "me-1")
958
- }), displayMessage && /* @__PURE__ */ import_react16.default.createElement("span", {
959
- className: (0, import_react_ui_theme6.mx)("text-sm", import_react_ui_theme6.staticPlaceholderText)
960
- }, t("persisted locally label"))), /* @__PURE__ */ import_react16.default.createElement(import_react_ui9.Tooltip.Portal, null, /* @__PURE__ */ import_react16.default.createElement(import_react_ui9.Tooltip.Content, {
959
+ }, /* @__PURE__ */ import_react12.default.createElement(import_react11.CheckCircle, {
960
+ className: (0, import_react_ui_theme4.mx)((0, import_react_ui_theme4.getSize)(4), "me-1")
961
+ }), displayMessage && /* @__PURE__ */ import_react12.default.createElement("span", {
962
+ className: (0, import_react_ui_theme4.mx)("text-sm", import_react_ui_theme4.staticPlaceholderText)
963
+ }, t("persisted locally label"))), /* @__PURE__ */ import_react12.default.createElement(import_react_ui8.Tooltip.Portal, null, /* @__PURE__ */ import_react12.default.createElement(import_react_ui8.Tooltip.Content, {
961
964
  classNames: "z-10"
962
- }, t("persisted locally message"), /* @__PURE__ */ import_react16.default.createElement(import_react_ui9.Tooltip.Arrow, null))));
965
+ }, t("persisted locally message"), /* @__PURE__ */ import_react12.default.createElement(import_react_ui8.Tooltip.Arrow, null))));
963
966
  }
964
967
  };
965
968
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx";
966
969
  var PopoverRenameObject = ({ object: obj }) => {
967
- const { t } = (0, import_react_ui10.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
968
- const doneButton = (0, import_react17.useRef)(null);
970
+ const { t } = (0, import_react_ui9.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
971
+ const doneButton = (0, import_react13.useRef)(null);
969
972
  const object = obj;
970
- const [name, setName] = (0, import_react17.useState)(object.name || object.title || "");
971
- const handleDone = (0, import_react17.useCallback)(() => {
973
+ const [name, setName] = (0, import_react13.useState)(object.name || object.title || "");
974
+ const handleDone = (0, import_react13.useCallback)(() => {
972
975
  try {
973
976
  object.name = name;
974
977
  } catch {
@@ -989,23 +992,23 @@ var PopoverRenameObject = ({ object: obj }) => {
989
992
  object,
990
993
  name
991
994
  ]);
992
- return /* @__PURE__ */ import_react17.default.createElement("div", {
995
+ return /* @__PURE__ */ import_react13.default.createElement("div", {
993
996
  role: "none",
994
997
  className: "p-1 flex gap-2"
995
- }, /* @__PURE__ */ import_react17.default.createElement("div", {
998
+ }, /* @__PURE__ */ import_react13.default.createElement("div", {
996
999
  role: "none",
997
1000
  className: "flex-1"
998
- }, /* @__PURE__ */ import_react17.default.createElement(import_react_ui10.Input.Root, null, /* @__PURE__ */ import_react17.default.createElement(import_react_ui10.Input.Label, {
1001
+ }, /* @__PURE__ */ import_react13.default.createElement(import_react_ui9.Input.Root, null, /* @__PURE__ */ import_react13.default.createElement(import_react_ui9.Input.Label, {
999
1002
  srOnly: true
1000
- }, t("object name label")), /* @__PURE__ */ import_react17.default.createElement(import_react_ui10.Input.TextInput, {
1003
+ }, t("object name label")), /* @__PURE__ */ import_react13.default.createElement(import_react_ui9.Input.TextInput, {
1001
1004
  placeholder: t("object title placeholder"),
1002
1005
  value: name,
1003
1006
  "data-testid": "spacePlugin.renameObject.input",
1004
1007
  onChange: ({ target: { value } }) => setName(value),
1005
1008
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
1006
- }))), /* @__PURE__ */ import_react17.default.createElement(import_react_ui10.Popover.Close, {
1009
+ }))), /* @__PURE__ */ import_react13.default.createElement(import_react_ui9.Popover.Close, {
1007
1010
  asChild: true
1008
- }, /* @__PURE__ */ import_react17.default.createElement(import_react_ui10.Button, {
1011
+ }, /* @__PURE__ */ import_react13.default.createElement(import_react_ui9.Button, {
1009
1012
  ref: doneButton,
1010
1013
  classNames: "self-stretch",
1011
1014
  onClick: handleDone
@@ -1014,33 +1017,33 @@ var PopoverRenameObject = ({ object: obj }) => {
1014
1017
  }))));
1015
1018
  };
1016
1019
  var PopoverRenameSpace = ({ space }) => {
1017
- const { t } = (0, import_react_ui11.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1018
- const doneButton = (0, import_react18.useRef)(null);
1019
- const [name, setName] = (0, import_react18.useState)(space.properties.name ?? "");
1020
- const handleDone = (0, import_react18.useCallback)(() => {
1020
+ const { t } = (0, import_react_ui10.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1021
+ const doneButton = (0, import_react14.useRef)(null);
1022
+ const [name, setName] = (0, import_react14.useState)(space.properties.name ?? "");
1023
+ const handleDone = (0, import_react14.useCallback)(() => {
1021
1024
  space.properties.name = name;
1022
1025
  }, [
1023
1026
  space,
1024
1027
  name
1025
1028
  ]);
1026
- return /* @__PURE__ */ import_react18.default.createElement("div", {
1029
+ return /* @__PURE__ */ import_react14.default.createElement("div", {
1027
1030
  role: "none",
1028
1031
  className: "p-1 flex gap-2"
1029
- }, /* @__PURE__ */ import_react18.default.createElement("div", {
1032
+ }, /* @__PURE__ */ import_react14.default.createElement("div", {
1030
1033
  role: "none",
1031
1034
  className: "flex-1"
1032
- }, /* @__PURE__ */ import_react18.default.createElement(import_react_ui11.Input.Root, null, /* @__PURE__ */ import_react18.default.createElement(import_react_ui11.Input.Label, {
1035
+ }, /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.Input.Root, null, /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.Input.Label, {
1033
1036
  srOnly: true
1034
- }, t("space name label")), /* @__PURE__ */ import_react18.default.createElement(import_react_ui11.Input.TextInput, {
1037
+ }, t("space name label")), /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.Input.TextInput, {
1035
1038
  defaultValue: space.properties.name ?? "",
1036
1039
  placeholder: t("unnamed space label"),
1037
1040
  onChange: ({ target: { value } }) => setName(value),
1038
1041
  // TODO(wittjosiah): Ideally this should access the popover context to close the popover.
1039
1042
  // Currently this is not possible because Radix does not expose the popover context.
1040
1043
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
1041
- }))), /* @__PURE__ */ import_react18.default.createElement(import_react_ui11.Popover.Close, {
1044
+ }))), /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.Popover.Close, {
1042
1045
  asChild: true
1043
- }, /* @__PURE__ */ import_react18.default.createElement(import_react_ui11.Button, {
1046
+ }, /* @__PURE__ */ import_react14.default.createElement(import_react_ui10.Button, {
1044
1047
  ref: doneButton,
1045
1048
  classNames: "self-stretch",
1046
1049
  onClick: handleDone
@@ -1050,9 +1053,9 @@ var PopoverRenameSpace = ({ space }) => {
1050
1053
  };
1051
1054
  var ShareSpaceButton = ({ spaceId }) => {
1052
1055
  const dispatch = (0, import_app_framework5.useIntentDispatcher)();
1053
- return /* @__PURE__ */ import_react19.default.createElement(ShareSpaceButtonImpl, {
1056
+ return /* @__PURE__ */ import_react15.default.createElement(ShareSpaceButtonImpl, {
1054
1057
  onClick: () => dispatch({
1055
- action: import_chunk_6CNYF6YU.SpaceAction.SHARE,
1058
+ action: import_chunk_P4XUXM7Y.SpaceAction.SHARE,
1056
1059
  data: {
1057
1060
  spaceId
1058
1061
  }
@@ -1060,8 +1063,8 @@ var ShareSpaceButton = ({ spaceId }) => {
1060
1063
  });
1061
1064
  };
1062
1065
  var ShareSpaceButtonImpl = ({ onClick }) => {
1063
- const { t } = (0, import_react_ui12.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1064
- return /* @__PURE__ */ import_react19.default.createElement(import_react_ui12.Button, {
1066
+ const { t } = (0, import_react_ui11.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1067
+ return /* @__PURE__ */ import_react15.default.createElement(import_react_ui11.Button, {
1065
1068
  "data-testid": "spacePlugin.shareSpaceButton",
1066
1069
  onClick,
1067
1070
  classNames: "mli-1"
@@ -1071,9 +1074,9 @@ var activeActionKeyStorageKey = "dxos:react-shell/space-manager/active-action";
1071
1074
  var Presence = import_echo6.SpaceMember.PresenceState;
1072
1075
  var handleCreateInvitationUrl = (invitationCode) => `${origin}?spaceInvitationCode=${invitationCode}`;
1073
1076
  var SpaceMemberList = ({ members }) => {
1074
- return members.length > 0 ? /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.List, {
1077
+ return members.length > 0 ? /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.List, {
1075
1078
  classNames: "col-start-2 col-end-5 gap-y-1 grid grid-cols-subgrid items-center"
1076
- }, members.map((member) => /* @__PURE__ */ import_react24.default.createElement(import_react25.IdentityListItem, {
1079
+ }, members.map((member) => /* @__PURE__ */ import_react20.default.createElement(import_react21.IdentityListItem, {
1077
1080
  classNames: "contents",
1078
1081
  key: member.identity.identityKey.toHex(),
1079
1082
  identity: member.identity,
@@ -1081,7 +1084,7 @@ var SpaceMemberList = ({ members }) => {
1081
1084
  }))) : null;
1082
1085
  };
1083
1086
  var SpaceMembersSection = ({ space }) => {
1084
- const { t } = (0, import_react_ui14.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1087
+ const { t } = (0, import_react_ui13.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1085
1088
  const invitations = (0, import_echo6.useSpaceInvitations)(space.key);
1086
1089
  const { dispatch } = (0, import_app_framework7.useIntent)();
1087
1090
  const handleCloseDialog = () => dispatch({
@@ -1117,8 +1120,8 @@ var SpaceMembersSection = ({ space }) => {
1117
1120
  description: t("invite one description", {
1118
1121
  ns: "os"
1119
1122
  }),
1120
- icon: import_react23.UserPlus,
1121
- onClick: (0, import_react24.useCallback)(() => {
1123
+ icon: import_react19.UserPlus,
1124
+ onClick: (0, import_react20.useCallback)(() => {
1122
1125
  space.share?.({
1123
1126
  type: import_invitations2.Invitation.Type.INTERACTIVE,
1124
1127
  authMethod: import_invitations2.Invitation.AuthMethod.SHARED_SECRET
@@ -1134,8 +1137,8 @@ var SpaceMembersSection = ({ space }) => {
1134
1137
  description: t("invite many description", {
1135
1138
  ns: "os"
1136
1139
  }),
1137
- icon: import_react23.UsersThree,
1138
- onClick: (0, import_react24.useCallback)(() => {
1140
+ icon: import_react19.UsersThree,
1141
+ onClick: (0, import_react20.useCallback)(() => {
1139
1142
  space.share?.({
1140
1143
  type: import_invitations2.Invitation.Type.INTERACTIVE,
1141
1144
  authMethod: import_invitations2.Invitation.AuthMethod.NONE,
@@ -1146,7 +1149,7 @@ var SpaceMembersSection = ({ space }) => {
1146
1149
  ])
1147
1150
  }
1148
1151
  };
1149
- const [activeActionKey, setInternalActiveActionKey] = (0, import_react24.useState)(localStorage.getItem(activeActionKeyStorageKey) ?? "inviteOne");
1152
+ const [activeActionKey, setInternalActiveActionKey] = (0, import_react20.useState)(localStorage.getItem(activeActionKeyStorageKey) ?? "inviteOne");
1150
1153
  const setActiveActionKey = (nextKey) => {
1151
1154
  setInternalActiveActionKey(nextKey);
1152
1155
  localStorage.setItem(activeActionKeyStorageKey, nextKey);
@@ -1159,101 +1162,101 @@ var SpaceMembersSection = ({ space }) => {
1159
1162
  [Presence.ONLINE]: [],
1160
1163
  [Presence.OFFLINE]: []
1161
1164
  });
1162
- return /* @__PURE__ */ import_react24.default.createElement("section", {
1165
+ return /* @__PURE__ */ import_react20.default.createElement("section", {
1163
1166
  className: "mbe-4 col-span-3 grid gap-y-2 grid-cols-subgrid auto-rows-min"
1164
- }, /* @__PURE__ */ import_react24.default.createElement("h2", {
1167
+ }, /* @__PURE__ */ import_react20.default.createElement("h2", {
1165
1168
  className: "contents"
1166
- }, /* @__PURE__ */ import_react24.default.createElement(import_react23.UsersThree, {
1169
+ }, /* @__PURE__ */ import_react20.default.createElement(import_react19.UsersThree, {
1167
1170
  weight: "duotone",
1168
- className: (0, import_react_ui_theme8.mx)((0, import_react_ui_theme8.getSize)(5), "place-self-center")
1169
- }), /* @__PURE__ */ import_react24.default.createElement("span", {
1171
+ className: (0, import_react_ui_theme6.mx)((0, import_react_ui_theme6.getSize)(5), "place-self-center")
1172
+ }), /* @__PURE__ */ import_react20.default.createElement("span", {
1170
1173
  className: "text-lg col-span-2"
1171
- }, t("space members label"))), /* @__PURE__ */ import_react24.default.createElement("h3", {
1174
+ }, t("space members label"))), /* @__PURE__ */ import_react20.default.createElement("h3", {
1172
1175
  className: "col-start-2 col-span-3 text-sm italic text-description"
1173
- }, t("invitations heading")), invitations.length > 0 && /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.List, {
1176
+ }, t("invitations heading")), invitations.length > 0 && /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.List, {
1174
1177
  classNames: "col-start-2 col-span-2 gap-y-2 grid grid-cols-[var(--rail-size)_1fr_var(--rail-action)_var(--rail-action)]"
1175
- }, invitations.map((invitation) => /* @__PURE__ */ import_react24.default.createElement(import_react25.InvitationListItem, {
1178
+ }, invitations.map((invitation) => /* @__PURE__ */ import_react20.default.createElement(import_react21.InvitationListItem, {
1176
1179
  reverseEffects: true,
1177
1180
  classNames: "pis-0 pie-0 gap-0 col-span-4 grid grid-cols-subgrid",
1178
1181
  key: invitation.get().invitationId,
1179
1182
  invitation,
1180
1183
  send: handleInvitationSelect,
1181
1184
  createInvitationUrl: handleCreateInvitationUrl
1182
- }))), /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.ButtonGroup, {
1185
+ }))), /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.ButtonGroup, {
1183
1186
  classNames: "col-start-2 col-end-4 grid grid-cols-[1fr_var(--rail-action)] place-self-grow gap-px"
1184
- }, /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.Button, {
1187
+ }, /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.Button, {
1185
1188
  classNames: "gap-2",
1186
1189
  onClick: activeAction.onClick
1187
- }, /* @__PURE__ */ import_react24.default.createElement(activeAction.icon, {
1188
- className: (0, import_react_ui_theme8.getSize)(5)
1189
- }), /* @__PURE__ */ import_react24.default.createElement("span", null, t(activeAction.label, {
1190
+ }, /* @__PURE__ */ import_react20.default.createElement(activeAction.icon, {
1191
+ className: (0, import_react_ui_theme6.getSize)(5)
1192
+ }), /* @__PURE__ */ import_react20.default.createElement("span", null, t(activeAction.label, {
1190
1193
  ns: "os"
1191
- }))), /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.DropdownMenu.Root, null, /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.DropdownMenu.Trigger, {
1194
+ }))), /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.DropdownMenu.Root, null, /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.DropdownMenu.Trigger, {
1192
1195
  asChild: true
1193
- }, /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.Button, {
1196
+ }, /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.Button, {
1194
1197
  classNames: "pli-0"
1195
- }, /* @__PURE__ */ import_react24.default.createElement(import_react23.CaretDown, {
1196
- className: (0, import_react_ui_theme8.getSize)(4)
1197
- }))), /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.DropdownMenu.Content, null, /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.DropdownMenu.Viewport, null, Object.entries(inviteActions).map(([id, action]) => {
1198
- return /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.DropdownMenu.CheckboxItem, {
1198
+ }, /* @__PURE__ */ import_react20.default.createElement(import_react19.CaretDown, {
1199
+ className: (0, import_react_ui_theme6.getSize)(4)
1200
+ }))), /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.DropdownMenu.Content, null, /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.DropdownMenu.Viewport, null, Object.entries(inviteActions).map(([id, action]) => {
1201
+ return /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.DropdownMenu.CheckboxItem, {
1199
1202
  key: id,
1200
1203
  "aria-labelledby": `${id}__label`,
1201
1204
  "aria-describedby": `${id}__description`,
1202
1205
  checked: activeActionKey === id,
1203
1206
  onCheckedChange: (checked) => checked && setActiveActionKey(id),
1204
1207
  classNames: "gap-2"
1205
- }, action.icon && /* @__PURE__ */ import_react24.default.createElement(action.icon, {
1206
- className: (0, import_react_ui_theme8.getSize)(5)
1207
- }), /* @__PURE__ */ import_react24.default.createElement("div", {
1208
+ }, action.icon && /* @__PURE__ */ import_react20.default.createElement(action.icon, {
1209
+ className: (0, import_react_ui_theme6.getSize)(5)
1210
+ }), /* @__PURE__ */ import_react20.default.createElement("div", {
1208
1211
  role: "none",
1209
1212
  className: "flex-1 min-is-0 space-b-1"
1210
- }, /* @__PURE__ */ import_react24.default.createElement("p", {
1213
+ }, /* @__PURE__ */ import_react20.default.createElement("p", {
1211
1214
  id: `${id}__label`
1212
1215
  }, t(action.label, {
1213
1216
  ns: "os"
1214
- })), action.description && /* @__PURE__ */ import_react24.default.createElement("p", {
1217
+ })), action.description && /* @__PURE__ */ import_react20.default.createElement("p", {
1215
1218
  id: `${id}__description`,
1216
- className: import_react_ui_theme8.descriptionText
1219
+ className: import_react_ui_theme6.descriptionText
1217
1220
  }, t(action.description, {
1218
1221
  ns: "os"
1219
- }))), /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.DropdownMenu.ItemIndicator, {
1222
+ }))), /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.DropdownMenu.ItemIndicator, {
1220
1223
  asChild: true
1221
- }, /* @__PURE__ */ import_react24.default.createElement(import_react23.Check, {
1222
- className: (0, import_react_ui_theme8.getSize)(4)
1224
+ }, /* @__PURE__ */ import_react20.default.createElement(import_react19.Check, {
1225
+ className: (0, import_react_ui_theme6.getSize)(4)
1223
1226
  })));
1224
- })), /* @__PURE__ */ import_react24.default.createElement(import_react_ui14.DropdownMenu.Arrow, null)))), members[Presence.ONLINE].length + members[Presence.OFFLINE].length < 1 ? /* @__PURE__ */ import_react24.default.createElement("p", {
1225
- className: (0, import_react_ui_theme8.mx)(import_react_ui_theme8.descriptionText, "text-center is-full mlb-2")
1227
+ })), /* @__PURE__ */ import_react20.default.createElement(import_react_ui13.DropdownMenu.Arrow, null)))), members[Presence.ONLINE].length + members[Presence.OFFLINE].length < 1 ? /* @__PURE__ */ import_react20.default.createElement("p", {
1228
+ className: (0, import_react_ui_theme6.mx)(import_react_ui_theme6.descriptionText, "text-center is-full mlb-2")
1226
1229
  }, t("empty space members message", {
1227
1230
  ns: "os"
1228
- })) : /* @__PURE__ */ import_react24.default.createElement(import_react24.default.Fragment, null, /* @__PURE__ */ import_react24.default.createElement("h3", {
1231
+ })) : /* @__PURE__ */ import_react20.default.createElement(import_react20.default.Fragment, null, /* @__PURE__ */ import_react20.default.createElement("h3", {
1229
1232
  className: "col-start-2 col-end-5 text-sm italic text-description"
1230
1233
  }, t("active space members heading", {
1231
1234
  count: members[Presence.ONLINE].length
1232
- })), /* @__PURE__ */ import_react24.default.createElement(SpaceMemberList, {
1235
+ })), /* @__PURE__ */ import_react20.default.createElement(SpaceMemberList, {
1233
1236
  members: members[Presence.ONLINE]
1234
- }), /* @__PURE__ */ import_react24.default.createElement("h3", {
1237
+ }), /* @__PURE__ */ import_react20.default.createElement("h3", {
1235
1238
  className: "col-start-2 col-end-5 text-sm italic text-description"
1236
1239
  }, t("inactive space members heading", {
1237
1240
  count: members[Presence.OFFLINE].length
1238
- })), /* @__PURE__ */ import_react24.default.createElement(SpaceMemberList, {
1241
+ })), /* @__PURE__ */ import_react20.default.createElement(SpaceMemberList, {
1239
1242
  members: members[Presence.OFFLINE]
1240
1243
  })));
1241
1244
  };
1242
1245
  var KeyShortcuts = () => {
1243
- const { t } = (0, import_react_ui13.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1244
- return /* @__PURE__ */ import_react21.default.createElement("section", {
1246
+ const { t } = (0, import_react_ui12.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1247
+ return /* @__PURE__ */ import_react17.default.createElement("section", {
1245
1248
  className: "mbe-4 col-span-4 md:col-start-5 md:col-end-7 grid grid-cols-subgrid gap-y-2 auto-rows-min"
1246
- }, /* @__PURE__ */ import_react21.default.createElement("h2", {
1249
+ }, /* @__PURE__ */ import_react17.default.createElement("h2", {
1247
1250
  className: "contents"
1248
- }, /* @__PURE__ */ import_react21.default.createElement(import_react20.Command, {
1251
+ }, /* @__PURE__ */ import_react17.default.createElement(import_react16.Command, {
1249
1252
  weight: "duotone",
1250
- className: (0, import_react_ui_theme7.mx)((0, import_react_ui_theme7.getSize)(5), "place-self-center")
1251
- }), /* @__PURE__ */ import_react21.default.createElement("span", {
1253
+ className: (0, import_react_ui_theme5.mx)((0, import_react_ui_theme5.getSize)(5), "place-self-center")
1254
+ }), /* @__PURE__ */ import_react17.default.createElement("span", {
1252
1255
  className: "text-lg col-span-2 md:col-span-1"
1253
- }, t("keyshortcuts label"))), /* @__PURE__ */ import_react21.default.createElement("div", {
1256
+ }, t("keyshortcuts label"))), /* @__PURE__ */ import_react17.default.createElement("div", {
1254
1257
  role: "none",
1255
1258
  className: "col-start-2 col-end-4 md:col-end-5 pie-2"
1256
- }, /* @__PURE__ */ import_react21.default.createElement(import_app_framework6.Surface, {
1259
+ }, /* @__PURE__ */ import_react17.default.createElement(import_app_framework6.Surface, {
1257
1260
  role: "keyshortcuts"
1258
1261
  })));
1259
1262
  };
@@ -1261,42 +1264,41 @@ var spaceMainLayout = "grid gap-y-2 auto-rows-min before:bs-2 before:col-span-5
1261
1264
  var SpaceMain = ({ space, role }) => {
1262
1265
  const state = space.state.get();
1263
1266
  const ready = state === import_echo5.SpaceState.SPACE_READY;
1264
- const Root = role === "main" ? import_react_ui13.Main.Content : "div";
1265
- return /* @__PURE__ */ import_react21.default.createElement(import_react22.ClipboardProvider, null, /* @__PURE__ */ import_react21.default.createElement(Root, {
1267
+ const Root = role === "main" ? import_react_ui12.Main.Content : "div";
1268
+ return /* @__PURE__ */ import_react17.default.createElement(import_react18.ClipboardProvider, null, /* @__PURE__ */ import_react17.default.createElement(Root, {
1266
1269
  ...role === "main" ? {
1267
1270
  classNames: [
1268
- import_react_ui_theme7.topbarBlockPaddingStart,
1271
+ import_react_ui_theme5.topbarBlockPaddingStart,
1269
1272
  "min-bs-dvh",
1270
1273
  spaceMainLayout
1271
1274
  ]
1272
1275
  } : {
1273
1276
  role: "none",
1274
- className: (0, import_react_ui_theme7.mx)(import_react_ui_theme7.topbarBlockPaddingStart, "row-span-2", spaceMainLayout)
1277
+ className: (0, import_react_ui_theme5.mx)(import_react_ui_theme5.topbarBlockPaddingStart, "row-span-2", spaceMainLayout)
1275
1278
  },
1276
1279
  "data-testid": `spacePlugin.${role}`,
1277
1280
  "data-isready": ready ? "true" : "false"
1278
- }, ready && /* @__PURE__ */ import_react21.default.createElement(SpaceMembersSection, {
1281
+ }, ready && /* @__PURE__ */ import_react17.default.createElement(SpaceMembersSection, {
1279
1282
  space
1280
- }), /* @__PURE__ */ import_react21.default.createElement(KeyShortcuts, null)));
1283
+ }), /* @__PURE__ */ import_react17.default.createElement(KeyShortcuts, null)));
1281
1284
  };
1282
1285
  var REFRESH_INTERVAL = 5e3;
1283
1286
  var ACTIVITY_DURATION = 3e4;
1284
1287
  var noViewers = new import_util2.ComplexMap(import_react_client4.PublicKey.hash);
1285
1288
  var getName = (identity) => identity.profile?.displayName ?? (0, import_display_name.generateName)(identity.identityKey.toHex());
1286
1289
  var SpacePresence = ({ object, spaceKey }) => {
1287
- const density = (0, import_react_ui15.useDensityContext)();
1288
- const spacePlugin = (0, import_app_framework8.usePlugin)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1290
+ const spacePlugin = (0, import_app_framework8.usePlugin)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1289
1291
  const client = (0, import_react_client4.useClient)();
1290
1292
  const identity = (0, import_halo.useIdentity)();
1291
1293
  const space = spaceKey ? client.spaces.get(spaceKey) : (0, import_echo7.getSpace)(object);
1292
1294
  const spaceMembers = (0, import_echo7.useMembers)(space?.key);
1293
- const [_moment, setMoment] = (0, import_react26.useState)(Date.now());
1294
- (0, import_react26.useEffect)(() => {
1295
+ const [_moment, setMoment] = (0, import_react22.useState)(Date.now());
1296
+ (0, import_react22.useEffect)(() => {
1295
1297
  const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);
1296
1298
  return () => clearInterval(interval);
1297
1299
  }, []);
1298
- const memberOnline = (0, import_react26.useCallback)((member) => member.presence === 1, []);
1299
- const memberIsNotSelf = (0, import_react26.useCallback)((member) => !identity?.identityKey.equals(member.identity.identityKey), [
1300
+ const memberOnline = (0, import_react22.useCallback)((member) => member.presence === 1, []);
1301
+ const memberIsNotSelf = (0, import_react22.useCallback)((member) => !identity?.identityKey.equals(member.identity.identityKey), [
1300
1302
  identity?.identityKey
1301
1303
  ]);
1302
1304
  if (!identity || !spacePlugin || !space) {
@@ -1314,63 +1316,61 @@ var SpacePresence = ({ object, spaceKey }) => {
1314
1316
  lastSeen
1315
1317
  };
1316
1318
  }).toSorted((a, b) => a.lastSeen - b.lastSeen);
1317
- return density === "fine" ? /* @__PURE__ */ import_react26.default.createElement(SmallPresence, {
1318
- count: membersForObject.length
1319
- }) : /* @__PURE__ */ import_react26.default.createElement(FullPresence, {
1319
+ return /* @__PURE__ */ import_react22.default.createElement(FullPresence, {
1320
1320
  members: membersForObject
1321
1321
  });
1322
1322
  };
1323
1323
  var FullPresence = (props) => {
1324
1324
  const { size = 9, onMemberClick } = props;
1325
- const members = (0, import_react_ui15.useDefaultValue)(props.members, []);
1325
+ const members = (0, import_react_ui14.useDefaultValue)(props.members, () => []);
1326
1326
  if (members.length === 0) {
1327
1327
  return null;
1328
1328
  }
1329
- return /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.AvatarGroup.Root, {
1329
+ return /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.AvatarGroup.Root, {
1330
1330
  size,
1331
1331
  classNames: "mbs-2 mie-4",
1332
1332
  "data-testid": "spacePlugin.presence"
1333
- }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Root, {
1333
+ }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Root, {
1334
1334
  key: member.identity.identityKey.toHex()
1335
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Trigger, null, /* @__PURE__ */ import_react26.default.createElement(PrensenceAvatar, {
1335
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Trigger, null, /* @__PURE__ */ import_react22.default.createElement(PrensenceAvatar, {
1336
1336
  identity: member.identity,
1337
1337
  group: true,
1338
1338
  match: member.currentlyAttended,
1339
1339
  index: members.length - i,
1340
1340
  onClick: () => onMemberClick?.(member)
1341
- })), /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Portal, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Content, {
1341
+ })), /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Portal, null, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Content, {
1342
1342
  side: "bottom"
1343
- }, /* @__PURE__ */ import_react26.default.createElement("span", null, getName(member.identity)), /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Arrow, null))))), members.length > 3 && /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Root, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Trigger, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.AvatarGroupItem.Root, {
1343
+ }, /* @__PURE__ */ import_react22.default.createElement("span", null, getName(member.identity)), /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Arrow, null))))), members.length > 3 && /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Root, null, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Trigger, null, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.AvatarGroupItem.Root, {
1344
1344
  status: "inactive"
1345
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Avatar.Frame, {
1345
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Avatar.Frame, {
1346
1346
  style: {
1347
1347
  zIndex: members.length - 4
1348
1348
  }
1349
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Avatar.Fallback, {
1349
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Avatar.Fallback, {
1350
1350
  text: `+${members.length - 3}`
1351
- })))), /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Portal, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Content, {
1351
+ })))), /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Portal, null, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Content, {
1352
1352
  side: "bottom"
1353
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Arrow, null), /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.List, {
1353
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Arrow, null), /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.List, {
1354
1354
  classNames: "max-h-56 overflow-y-auto"
1355
- }, members.map((member) => /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.ListItem.Root, {
1355
+ }, members.map((member) => /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.ListItem.Root, {
1356
1356
  key: member.identity.identityKey.toHex(),
1357
1357
  classNames: "flex gap-2 items-center cursor-pointer mbe-2",
1358
1358
  onClick: () => onMemberClick?.(member),
1359
1359
  "data-testid": "identity-list-item"
1360
- }, /* @__PURE__ */ import_react26.default.createElement(PrensenceAvatar, {
1360
+ }, /* @__PURE__ */ import_react22.default.createElement(PrensenceAvatar, {
1361
1361
  identity: member.identity,
1362
1362
  showName: true,
1363
1363
  match: member.currentlyAttended
1364
1364
  }))))))));
1365
1365
  };
1366
1366
  var PrensenceAvatar = ({ identity, showName, match, group, index, onClick }) => {
1367
- const Root = group ? import_react_ui15.AvatarGroupItem.Root : import_react_ui15.Avatar.Root;
1367
+ const Root = group ? import_react_ui14.AvatarGroupItem.Root : import_react_ui14.Avatar.Root;
1368
1368
  const status = match ? "current" : "active";
1369
1369
  const fallbackValue = (0, import_util2.keyToFallback)(identity.identityKey);
1370
- return /* @__PURE__ */ import_react26.default.createElement(Root, {
1370
+ return /* @__PURE__ */ import_react22.default.createElement(Root, {
1371
1371
  status,
1372
1372
  hue: identity.profile?.data?.hue || fallbackValue.hue
1373
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Avatar.Frame, {
1373
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Avatar.Frame, {
1374
1374
  "data-testid": "spacePlugin.presence.member",
1375
1375
  "data-status": status,
1376
1376
  ...index ? {
@@ -1379,61 +1379,397 @@ var PrensenceAvatar = ({ identity, showName, match, group, index, onClick }) =>
1379
1379
  }
1380
1380
  } : {},
1381
1381
  onClick: () => onClick?.()
1382
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Avatar.Fallback, {
1382
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Avatar.Fallback, {
1383
1383
  text: identity.profile?.data?.emoji || fallbackValue.emoji
1384
- })), showName && /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Avatar.Label, {
1384
+ })), showName && /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Avatar.Label, {
1385
1385
  classNames: "text-sm truncate pli-2"
1386
1386
  }, getName(identity)));
1387
1387
  };
1388
- var SmallPresenceLive = ({ viewers }) => {
1389
- const [moment, setMoment] = (0, import_react26.useState)(Date.now());
1390
- (0, import_react26.useEffect)(() => {
1391
- const interval = setInterval(() => setMoment(Date.now()), REFRESH_INTERVAL);
1392
- return () => clearInterval(interval);
1393
- }, []);
1394
- const activeViewers = viewers ? Array.from(viewers.values()).filter(({ lastSeen }) => moment - lastSeen < ACTIVITY_DURATION) : [];
1395
- return /* @__PURE__ */ import_react26.default.createElement(SmallPresence, {
1388
+ var SmallPresenceLive = ({ id, viewers }) => {
1389
+ const getActiveViewers = (viewers2) => {
1390
+ const moment = Date.now();
1391
+ return Array.from(viewers2.values()).filter(({ lastSeen }) => moment - lastSeen < ACTIVITY_DURATION);
1392
+ };
1393
+ const [activeViewers, setActiveViewers] = (0, import_react22.useState)(viewers ? getActiveViewers(viewers) : []);
1394
+ (0, import_react22.useEffect)(() => {
1395
+ if (viewers) {
1396
+ setActiveViewers(getActiveViewers(viewers));
1397
+ const interval = setInterval(() => {
1398
+ setActiveViewers(getActiveViewers(viewers));
1399
+ }, REFRESH_INTERVAL);
1400
+ return () => clearInterval(interval);
1401
+ }
1402
+ }, [
1403
+ viewers
1404
+ ]);
1405
+ return /* @__PURE__ */ import_react22.default.createElement(SmallPresence, {
1406
+ id,
1396
1407
  count: activeViewers.length
1397
1408
  });
1398
1409
  };
1399
- var SmallPresence = ({ count }) => {
1400
- const { t } = (0, import_react_ui15.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1401
- return /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Root, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Trigger, {
1410
+ var SmallPresence = ({ id, count }) => {
1411
+ const { t } = (0, import_react_ui14.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1412
+ const { hasAttention, isAncestor, isRelated } = (0, import_react_ui_attention.useAttention)(id);
1413
+ const attention = hasAttention || isAncestor || isRelated;
1414
+ return /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Root, null, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Trigger, {
1402
1415
  asChild: true
1403
- }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui_attention.AttentionGlyph, {
1416
+ }, /* @__PURE__ */ import_react22.default.createElement("div", {
1417
+ role: "none",
1418
+ className: "flex",
1419
+ "data-attention": attention
1420
+ }, /* @__PURE__ */ import_react22.default.createElement(import_react_ui_attention.AttentionGlyph, {
1404
1421
  presence: count > 1 ? "many" : count === 1 ? "one" : "none",
1405
1422
  classNames: "self-center mie-1"
1406
- })), /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Portal, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Content, {
1423
+ }))), /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Portal, null, /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Content, {
1407
1424
  side: "bottom",
1408
1425
  classNames: "z-[70]"
1409
- }, /* @__PURE__ */ import_react26.default.createElement("span", null, t("presence label", {
1426
+ }, /* @__PURE__ */ import_react22.default.createElement("span", null, t("presence label", {
1410
1427
  count
1411
- })), /* @__PURE__ */ import_react26.default.createElement(import_react_ui15.Tooltip.Arrow, null))));
1428
+ })), /* @__PURE__ */ import_react22.default.createElement(import_react_ui14.Tooltip.Arrow, null))));
1412
1429
  };
1413
1430
  var SpaceSettings = ({ settings }) => {
1414
- const { t } = (0, import_react_ui16.useTranslation)(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1431
+ const { t } = (0, import_react_ui15.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1415
1432
  const dispatch = (0, import_app_framework9.useIntentDispatcher)();
1416
- return /* @__PURE__ */ import_react27.default.createElement(import_react27.default.Fragment, null, /* @__PURE__ */ import_react27.default.createElement(import_plugin_settings.SettingsValue, {
1433
+ const plugins = (0, import_app_framework9.useResolvePlugins)(import_chunk_OTDRTHT4.parseSpaceInitPlugin);
1434
+ return /* @__PURE__ */ import_react23.default.createElement(import_react23.default.Fragment, null, /* @__PURE__ */ import_react23.default.createElement(import_react_ui_data.FormInput, {
1417
1435
  label: t("show hidden spaces label")
1418
- }, /* @__PURE__ */ import_react27.default.createElement(import_react_ui16.Input.Switch, {
1436
+ }, /* @__PURE__ */ import_react23.default.createElement(import_react_ui15.Input.Switch, {
1419
1437
  checked: settings.showHidden,
1420
1438
  onCheckedChange: (checked) => dispatch({
1421
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
1422
- action: import_chunk_6CNYF6YU.SpaceAction.TOGGLE_HIDDEN,
1439
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
1440
+ action: import_chunk_P4XUXM7Y.SpaceAction.TOGGLE_HIDDEN,
1423
1441
  data: {
1424
1442
  state: !!checked
1425
1443
  }
1426
1444
  })
1427
- })));
1445
+ })), /* @__PURE__ */ import_react23.default.createElement(import_react_ui_data.FormInput, {
1446
+ label: t("default on space create label")
1447
+ }, /* @__PURE__ */ import_react23.default.createElement(import_react_ui15.Select.Root, {
1448
+ value: settings.onSpaceCreate,
1449
+ onValueChange: (value) => {
1450
+ settings.onSpaceCreate = value;
1451
+ }
1452
+ }, /* @__PURE__ */ import_react23.default.createElement(import_react_ui15.Select.TriggerButton, null), /* @__PURE__ */ import_react23.default.createElement(import_react_ui15.Select.Portal, null, /* @__PURE__ */ import_react23.default.createElement(import_react_ui15.Select.Content, null, /* @__PURE__ */ import_react23.default.createElement(import_react_ui15.Select.Viewport, null, plugins.map(({ provides: { space: { onSpaceCreate } } }) => /* @__PURE__ */ import_react23.default.createElement(import_react_ui15.Select.Option, {
1453
+ key: onSpaceCreate.action,
1454
+ value: onSpaceCreate.action
1455
+ }, (0, import_react_ui15.toLocalizedString)(onSpaceCreate.label, t)))))))));
1456
+ };
1457
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SpaceSettingsPanel.tsx";
1458
+ var SpaceSettingsPanel = ({ space }) => {
1459
+ const { t } = (0, import_react_ui16.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1460
+ const [edgeReplication, setEdgeReplication] = (0, import_react24.useState)(space.internal.data.edgeReplication === import_metadata.EdgeReplicationSetting.ENABLED);
1461
+ const toggleEdgeReplication = (0, import_react24.useCallback)(async (next) => {
1462
+ setEdgeReplication(next);
1463
+ await space?.internal.setEdgeReplicationPreference(next ? import_metadata.EdgeReplicationSetting.ENABLED : import_metadata.EdgeReplicationSetting.DISABLED).catch((err) => {
1464
+ import_log3.log.catch(err, void 0, {
1465
+ F: __dxlog_file3,
1466
+ L: 30,
1467
+ S: void 0,
1468
+ C: (f, a) => f(...a)
1469
+ });
1470
+ setEdgeReplication(!next);
1471
+ });
1472
+ }, [
1473
+ space
1474
+ ]);
1475
+ return /* @__PURE__ */ import_react24.default.createElement("div", {
1476
+ role: "form",
1477
+ className: "flex flex-col w-full p-2 gap-4"
1478
+ }, /* @__PURE__ */ import_react24.default.createElement(import_react_ui16.Input.Root, null, /* @__PURE__ */ import_react24.default.createElement("div", {
1479
+ role: "none",
1480
+ className: "flex flex-col gap-1"
1481
+ }, /* @__PURE__ */ import_react24.default.createElement(import_react_ui16.Input.Label, null, t("name label")), /* @__PURE__ */ import_react24.default.createElement(import_react_ui16.Input.TextInput, {
1482
+ placeholder: t("name placeholder"),
1483
+ value: space.properties.name,
1484
+ onChange: (event) => {
1485
+ space.properties.name = event.target.value;
1486
+ }
1487
+ }))), /* @__PURE__ */ import_react24.default.createElement(import_react_ui16.Input.Root, null, /* @__PURE__ */ import_react24.default.createElement("div", {
1488
+ role: "none",
1489
+ className: "flex justify-between"
1490
+ }, /* @__PURE__ */ import_react24.default.createElement(import_react_ui16.Input.Label, null, t("edge replication label")), /* @__PURE__ */ import_react24.default.createElement(import_react_ui16.Input.Switch, {
1491
+ checked: edgeReplication,
1492
+ onCheckedChange: toggleEdgeReplication
1493
+ }))));
1494
+ };
1495
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SaveStatus.tsx";
1496
+ var SaveStatus = () => {
1497
+ const { t } = (0, import_react_ui17.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1498
+ const client = (0, import_react_client5.useClient)();
1499
+ const [state, setState] = (0, import_react25.useState)("saved");
1500
+ (0, import_react25.useEffect)(() => {
1501
+ return createClientSaveTracker(client, (state2) => {
1502
+ setState(state2);
1503
+ });
1504
+ }, []);
1505
+ return /* @__PURE__ */ import_react25.default.createElement(import_plugin_status_bar.StatusBar.Item, {
1506
+ title: state === "saving" ? t("saving label") : t("saved label")
1507
+ }, /* @__PURE__ */ import_react25.default.createElement(import_react_ui17.Icon, {
1508
+ icon: state === "saving" ? "ph--arrows-clockwise--regular" : "ph--check-circle--regular",
1509
+ size: 4
1510
+ }));
1511
+ };
1512
+ var createClientSaveTracker = (client, cb) => {
1513
+ const unsubscribeCallbacks = {};
1514
+ const state = {};
1515
+ const install = (spaces) => {
1516
+ for (const space of spaces) {
1517
+ if (state[space.id]) {
1518
+ continue;
1519
+ }
1520
+ state[space.id] = "saved";
1521
+ unsubscribeCallbacks[space.id] = createSpaceSaveTracker(space, (s) => {
1522
+ state[space.id] = s;
1523
+ cb(Object.values(state).some((s2) => s2 === "saving") ? "saving" : "saved");
1524
+ });
1525
+ }
1526
+ };
1527
+ client.spaces.subscribe((spaces) => {
1528
+ install(spaces);
1529
+ });
1530
+ install(client.spaces.get());
1531
+ return () => {
1532
+ for (const unsubscribe of Object.values(unsubscribeCallbacks)) {
1533
+ unsubscribe();
1534
+ }
1535
+ };
1536
+ };
1537
+ var createSpaceSaveTracker = (space, cb) => {
1538
+ const ctx = new import_context.Context(void 0, {
1539
+ F: __dxlog_file4,
1540
+ L: 64
1541
+ });
1542
+ void space.waitUntilReady().then(() => {
1543
+ if (ctx.disposed) {
1544
+ return;
1545
+ }
1546
+ let hasUnsavedChanges = false;
1547
+ let lastFlushPromise;
1548
+ space.crud.saveStateChanged.on(ctx, ({ unsavedDocuments }) => {
1549
+ hasUnsavedChanges = unsavedDocuments.length > 0;
1550
+ });
1551
+ space.crud.saveStateChanged.debounce(500).on(ctx, () => {
1552
+ if (hasUnsavedChanges) {
1553
+ lastFlushPromise = void 0;
1554
+ cb("saving");
1555
+ } else {
1556
+ const flushPromise = space.crud.flush();
1557
+ lastFlushPromise = flushPromise;
1558
+ void flushPromise.then(() => {
1559
+ if (lastFlushPromise === flushPromise) {
1560
+ cb("saved");
1561
+ }
1562
+ });
1563
+ }
1564
+ });
1565
+ });
1566
+ return () => {
1567
+ void ctx.dispose();
1568
+ };
1569
+ };
1570
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/types.ts";
1571
+ var createEmptyEdgeSyncState = () => ({
1572
+ missingOnLocal: 0,
1573
+ missingOnRemote: 0,
1574
+ localDocumentCount: 0,
1575
+ remoteDocumentCount: 0,
1576
+ differentDocuments: 0
1577
+ });
1578
+ var getSyncSummary = (syncMap) => {
1579
+ return Object.entries(syncMap).reduce((summary, [_spaceId, peerState]) => {
1580
+ summary.missingOnLocal += peerState.missingOnLocal;
1581
+ summary.missingOnRemote += peerState.missingOnRemote;
1582
+ summary.localDocumentCount += peerState.localDocumentCount;
1583
+ summary.remoteDocumentCount += peerState.remoteDocumentCount;
1584
+ summary.differentDocuments += peerState.differentDocuments;
1585
+ return summary;
1586
+ }, createEmptyEdgeSyncState());
1587
+ };
1588
+ var isEdgePeerId = (peerId, spaceId) => peerId.startsWith(`${import_protocols.EdgeService.AUTOMERGE_REPLICATOR}:${spaceId}`);
1589
+ var useSyncState = () => {
1590
+ const client = (0, import_react_client6.useClient)();
1591
+ const [spaceState, setSpaceState] = (0, import_react27.useState)({});
1592
+ (0, import_react27.useEffect)(() => {
1593
+ const ctx = new import_context2.Context(void 0, {
1594
+ F: __dxlog_file5,
1595
+ L: 48
1596
+ });
1597
+ const createSubscriptions = (spaces) => {
1598
+ for (const space of spaces) {
1599
+ if (spaceState[space.id]) {
1600
+ continue;
1601
+ }
1602
+ ctx.onDispose(space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {
1603
+ const syncState = peers.find((state) => isEdgePeerId(state.peerId, space.id));
1604
+ if (syncState) {
1605
+ setSpaceState((spaceState2) => ({
1606
+ ...spaceState2,
1607
+ [space.id]: syncState
1608
+ }));
1609
+ }
1610
+ }));
1611
+ }
1612
+ };
1613
+ createSubscriptions(client.spaces.get());
1614
+ client.spaces.subscribe((spaces) => {
1615
+ createSubscriptions(spaces);
1616
+ });
1617
+ return () => {
1618
+ void ctx.dispose();
1619
+ };
1620
+ }, [
1621
+ client
1622
+ ]);
1623
+ return spaceState;
1624
+ };
1625
+ var SYNC_STALLED_TIMEOUT = 5e3;
1626
+ var styles = {
1627
+ barBg: "bg-neutral-50 dark:bg-green-900 text-black",
1628
+ barFg: "bg-neutral-100 bg-green-500",
1629
+ barHover: "dark:hover:bg-green-500"
1630
+ };
1631
+ var SyncStatus = () => {
1632
+ const state = useSyncState();
1633
+ return /* @__PURE__ */ import_react26.default.createElement(SyncStatusIndicator, {
1634
+ state
1635
+ });
1636
+ };
1637
+ var SyncStatusIndicator = ({ state }) => {
1638
+ const summary = getSyncSummary(state);
1639
+ const offline = false;
1640
+ const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
1641
+ const needsToDownload = summary.differentDocuments > 0 || summary.missingOnLocal > 0;
1642
+ const [classNames, setClassNames] = (0, import_react26.useState)();
1643
+ (0, import_react26.useEffect)(() => {
1644
+ setClassNames(void 0);
1645
+ if (!needsToUpload && !needsToDownload) {
1646
+ return;
1647
+ }
1648
+ const t = setTimeout(() => {
1649
+ setClassNames("text-orange-500");
1650
+ }, SYNC_STALLED_TIMEOUT);
1651
+ return () => clearTimeout(t);
1652
+ }, [
1653
+ needsToUpload,
1654
+ needsToDownload
1655
+ ]);
1656
+ return /* @__PURE__ */ import_react26.default.createElement(import_plugin_status_bar2.StatusBar.Item, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui18.Popover.Root, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui18.Popover.Trigger, null, /* @__PURE__ */ import_react26.default.createElement(import_react_ui18.Icon, {
1657
+ icon: offline ? "ph--cloud-x--regular" : needsToUpload ? "ph--cloud-arrow-up--regular" : needsToDownload ? "ph--cloud-arrow-down--regular" : "ph--cloud-check--regular",
1658
+ size: 4,
1659
+ classNames
1660
+ })), /* @__PURE__ */ import_react26.default.createElement(import_react_ui18.Popover.Content, {
1661
+ sideOffset: 16
1662
+ }, /* @__PURE__ */ import_react26.default.createElement(SyncStatusDetail, {
1663
+ state,
1664
+ summary,
1665
+ debug: false
1666
+ }))));
1667
+ };
1668
+ var SyncStatusDetail = ({ classNames, state, summary, debug }) => {
1669
+ const { t } = (0, import_react_ui18.useTranslation)(import_chunk_P4XUXM7Y.SPACE_PLUGIN);
1670
+ const entries = Object.entries(state).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
1671
+ return /* @__PURE__ */ import_react26.default.createElement("div", {
1672
+ className: (0, import_react_ui_theme7.mx)("flex flex-col text-xs min-w-[16rem]", classNames)
1673
+ }, /* @__PURE__ */ import_react26.default.createElement("h1", {
1674
+ className: "p-2"
1675
+ }, t("sync status title")), /* @__PURE__ */ import_react26.default.createElement("div", {
1676
+ className: "flex flex-col gap-[2px] my-[2px]"
1677
+ }, entries.map(([spaceId, state2]) => /* @__PURE__ */ import_react26.default.createElement(SpaceRow, {
1678
+ key: spaceId,
1679
+ spaceId,
1680
+ state: state2
1681
+ }))), debug && /* @__PURE__ */ import_react26.default.createElement(import_react_ui_syntax_highlighter.SyntaxHighlighter, {
1682
+ language: "json"
1683
+ }, JSON.stringify(summary, null, 2)));
1684
+ };
1685
+ var useActive = (count) => {
1686
+ const [current, setCurrent] = (0, import_react26.useState)(count);
1687
+ const [active, setActive] = (0, import_react26.useState)(false);
1688
+ (0, import_react26.useEffect)(() => {
1689
+ let t;
1690
+ if (count !== current) {
1691
+ setActive(true);
1692
+ setCurrent(count);
1693
+ t && clearTimeout(t);
1694
+ t = setTimeout(() => {
1695
+ setActive(false);
1696
+ }, SYNC_STALLED_TIMEOUT);
1697
+ }
1698
+ return () => {
1699
+ setActive(false);
1700
+ clearTimeout(t);
1701
+ };
1702
+ }, [
1703
+ count,
1704
+ current
1705
+ ]);
1706
+ return active;
1707
+ };
1708
+ var SpaceRow = ({ spaceId, state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote } }) => {
1709
+ const downActive = useActive(localDocumentCount);
1710
+ const upActive = useActive(remoteDocumentCount);
1711
+ return /* @__PURE__ */ import_react26.default.createElement("div", {
1712
+ className: (0, import_react_ui_theme7.mx)("flex items-center mx-[2px] gap-[2px] cursor-pointer", styles.barHover),
1713
+ title: spaceId,
1714
+ onClick: () => {
1715
+ void navigator.clipboard.writeText(spaceId);
1716
+ }
1717
+ }, /* @__PURE__ */ import_react26.default.createElement(import_react_ui18.Icon, {
1718
+ icon: "ph--arrow-fat-line-left--regular",
1719
+ size: 3,
1720
+ classNames: (0, import_react_ui_theme7.mx)(downActive && "animate-[pulse_1s_infinite]")
1721
+ }), /* @__PURE__ */ import_react26.default.createElement(Candle, {
1722
+ up: {
1723
+ count: remoteDocumentCount,
1724
+ total: remoteDocumentCount + missingOnRemote
1725
+ },
1726
+ down: {
1727
+ count: localDocumentCount,
1728
+ total: localDocumentCount + missingOnLocal
1729
+ },
1730
+ title: spaceId
1731
+ }), /* @__PURE__ */ import_react26.default.createElement(import_react_ui18.Icon, {
1732
+ icon: "ph--arrow-fat-line-right--regular",
1733
+ size: 3,
1734
+ classNames: (0, import_react_ui_theme7.mx)(upActive && "animate-[pulse_1s_step-start_infinite]")
1735
+ }));
1736
+ };
1737
+ var Candle = ({ classNames, up, down }) => {
1738
+ return /* @__PURE__ */ import_react26.default.createElement("div", {
1739
+ className: (0, import_react_ui_theme7.mx)("grid grid-cols-[1fr_2rem_1fr] w-full h-3", classNames)
1740
+ }, /* @__PURE__ */ import_react26.default.createElement(Bar, {
1741
+ classNames: "justify-end",
1742
+ ...up
1743
+ }), /* @__PURE__ */ import_react26.default.createElement("div", {
1744
+ className: "relative"
1745
+ }, /* @__PURE__ */ import_react26.default.createElement("div", {
1746
+ className: (0, import_react_ui_theme7.mx)("absolute inset-0 flex items-center justify-center text-xs", styles.barBg)
1747
+ }, up.total)), /* @__PURE__ */ import_react26.default.createElement(Bar, down));
1748
+ };
1749
+ var Bar = ({ classNames, count, total }) => {
1750
+ let p = count / total * 100;
1751
+ if (count < total) {
1752
+ p = Math.min(p, 95);
1753
+ }
1754
+ return /* @__PURE__ */ import_react26.default.createElement("div", {
1755
+ className: (0, import_react_ui_theme7.mx)("relative flex w-full", styles.barBg, classNames)
1756
+ }, /* @__PURE__ */ import_react26.default.createElement("div", {
1757
+ className: (0, import_react_ui_theme7.mx)("shrink-0", styles.barFg),
1758
+ style: {
1759
+ width: `${p}%`
1760
+ }
1761
+ }), count !== total && /* @__PURE__ */ import_react26.default.createElement("div", {
1762
+ className: "absolute top-0 bottom-0 flex items-center mx-0.5 text-black text-xs"
1763
+ }, count));
1428
1764
  };
1429
1765
  var translations_default = [
1430
1766
  {
1431
1767
  "en-US": {
1432
- [import_chunk_6CNYF6YU.SPACE_PLUGIN]: {
1768
+ [import_chunk_P4XUXM7Y.SPACE_PLUGIN]: {
1433
1769
  "plugin name": "Spaces",
1434
1770
  "first run message": "Nothing selected.",
1435
- "create space label": "Create a new space",
1436
- "join space label": "Join a space",
1771
+ "create space label": "Create space",
1772
+ "join space label": "Join space",
1437
1773
  "empty space message": "No documents",
1438
1774
  "empty tree message": "No spaces",
1439
1775
  "unnamed space label": "New space",
@@ -1504,23 +1840,34 @@ var translations_default = [
1504
1840
  "space limit close label": "Close",
1505
1841
  "remove deleted objects label": "Cleanup",
1506
1842
  "remove deleted objects alt": "Permanently remove deleted objects to free up space.",
1507
- "copy link label": "Copy link"
1843
+ "copy link label": "Copy link",
1844
+ "default on space create label": "On space create",
1845
+ "sync status title": "Sync status",
1846
+ "dismiss label": "Dismiss",
1847
+ "join success label": "Successfully joined space",
1848
+ "name label": "Name",
1849
+ "name placeholder": "Name",
1850
+ "unnamed object settings label": "Settings",
1851
+ "edge replication label": "Enable EDGE Replication"
1508
1852
  }
1509
1853
  }
1510
1854
  }
1511
1855
  ];
1512
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/SpacePlugin.tsx";
1856
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/SpacePlugin.tsx";
1513
1857
  var ACTIVE_NODE_BROADCAST_INTERVAL = 3e4;
1514
1858
  var OBJECT_ID_LENGTH = 60;
1515
1859
  var SPACE_MAX_OBJECTS = 500;
1516
1860
  var DIRECTORY_TYPE = "text/directory";
1517
1861
  var parseSpacePlugin = (plugin) => Array.isArray(plugin?.provides.space?.enabled) ? plugin : void 0;
1518
1862
  var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1519
- const settings = new import_local_storage.LocalStorageStore(import_chunk_6CNYF6YU.SPACE_PLUGIN);
1520
- const state = new import_local_storage.LocalStorageStore(import_chunk_6CNYF6YU.SPACE_PLUGIN, {
1863
+ const settings = new import_local_storage.LocalStorageStore(import_chunk_P4XUXM7Y.SPACE_PLUGIN, {
1864
+ onSpaceCreate: "dxos.org/plugin/markdown/action/create"
1865
+ });
1866
+ const state = new import_local_storage.LocalStorageStore(import_chunk_P4XUXM7Y.SPACE_PLUGIN, {
1521
1867
  awaiting: void 0,
1522
1868
  spaceNames: {},
1523
1869
  viewersByObject: {},
1870
+ // TODO(wittjosiah): Stop using (Complex)Map inside reactive object.
1524
1871
  viewersByIdentity: new import_util.ComplexMap(import_react_client.PublicKey.hash),
1525
1872
  sdkMigrationRunning: {}
1526
1873
  });
@@ -1556,17 +1903,21 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1556
1903
  await defaultSpace.internal.migrate();
1557
1904
  }
1558
1905
  spaces.filter((space) => space.state.get() === import_echo.SpaceState.SPACE_READY).forEach((space) => {
1559
- subscriptions.add((0, import_signals_core.effect)(() => {
1560
- state.values.spaceNames[space.id] = space.properties.name;
1561
- }));
1906
+ subscriptions.add((0, import_core.scheduledEffect)(() => ({
1907
+ name: space.properties.name
1908
+ }), ({ name }) => state.values.spaceNames[space.id] = name));
1562
1909
  });
1563
1910
  }).unsubscribe);
1564
- subscriptions.add((0, import_signals_core.effect)(() => {
1911
+ subscriptions.add((0, import_core.scheduledEffect)(() => ({
1912
+ ids: (0, import_app_framework.openIds)(location.active),
1913
+ removed: location.closed ? [
1914
+ location.closed
1915
+ ].flat() : []
1916
+ }), ({ ids, removed }) => {
1565
1917
  const send = () => {
1566
1918
  const spaces = client.spaces.get();
1567
1919
  const identity = client.halo.identity.get();
1568
1920
  if (identity && location.active) {
1569
- const ids = (0, import_app_framework.openIds)(location.active);
1570
1921
  const idsBySpace = (0, import_util.reduceGroupBy)(ids, (id) => {
1571
1922
  const [spaceId] = id.split(":");
1572
1923
  return spaceId;
@@ -1581,9 +1932,6 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1581
1932
  if (!space) {
1582
1933
  continue;
1583
1934
  }
1584
- const removed = location.closed ? [
1585
- location.closed
1586
- ].flat() : [];
1587
1935
  void space.postMessage("viewing", {
1588
1936
  identityKey: identity.identityKey.toHex(),
1589
1937
  attended: attention.attended ? [
@@ -1596,8 +1944,8 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1596
1944
  import_log.log.warn("Failed to broadcast active node for presence.", {
1597
1945
  err: err.message
1598
1946
  }, {
1599
- F: __dxlog_file3,
1600
- L: 222,
1947
+ F: __dxlog_file6,
1948
+ L: 231,
1601
1949
  S: void 0,
1602
1950
  C: (f, a) => f(...a)
1603
1951
  });
@@ -1643,18 +1991,16 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1643
1991
  }).unsubscribe);
1644
1992
  };
1645
1993
  return {
1646
- meta: import_chunk_6CNYF6YU.meta_default,
1994
+ meta: import_chunk_P4XUXM7Y.meta_default,
1647
1995
  ready: async (plugins) => {
1648
1996
  settings.prop({
1649
1997
  key: "showHidden",
1650
- storageKey: "show-hidden",
1651
1998
  type: import_local_storage.LocalStorageStore.bool({
1652
1999
  allowUndefined: true
1653
2000
  })
1654
2001
  });
1655
2002
  state.prop({
1656
2003
  key: "spaceNames",
1657
- storageKey: "space-names",
1658
2004
  type: import_local_storage.LocalStorageStore.json()
1659
2005
  });
1660
2006
  navigationPlugin = (0, import_app_framework.resolvePlugin)(plugins, import_app_framework.parseNavigationPlugin);
@@ -1668,7 +2014,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1668
2014
  const dispatch = intentPlugin.provides.intent.dispatch;
1669
2015
  const handleFirstRun = async () => {
1670
2016
  const defaultSpace = client.spaces.default;
1671
- defaultSpace.properties[import_chunk_CVZPI2P3.CollectionType.typename] = (0, import_echo.create)(import_chunk_CVZPI2P3.CollectionType, {
2017
+ defaultSpace.properties[import_chunk_OTDRTHT4.CollectionType.typename] = (0, import_echo.create)(import_chunk_OTDRTHT4.CollectionType, {
1672
2018
  objects: [],
1673
2019
  views: {}
1674
2020
  });
@@ -1704,22 +2050,21 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1704
2050
  settings: settings.values,
1705
2051
  translations: [
1706
2052
  ...translations_default,
1707
- import_react3.osTranslations
2053
+ import_react2.osTranslations
1708
2054
  ],
1709
- root: () => state.values.awaiting ? /* @__PURE__ */ import_react2.default.createElement(AwaitingObject, {
2055
+ root: () => state.values.awaiting ? /* @__PURE__ */ import_react.default.createElement(AwaitingObject, {
1710
2056
  id: state.values.awaiting
1711
2057
  }) : null,
1712
2058
  metadata: {
1713
2059
  records: {
1714
- [import_chunk_CVZPI2P3.CollectionType.typename]: {
2060
+ [import_chunk_OTDRTHT4.CollectionType.typename]: {
1715
2061
  placeholder: [
1716
2062
  "unnamed collection label",
1717
2063
  {
1718
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
2064
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
1719
2065
  }
1720
2066
  ],
1721
- icon: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.CardsThree, props),
1722
- iconSymbol: "ph--cards-three--regular",
2067
+ icon: "ph--cards-three--regular",
1723
2068
  // TODO(wittjosiah): Move out of metadata.
1724
2069
  loadReferences: (collection) => (0, import_echo.loadObjectReferences)(collection, (collection2) => [
1725
2070
  ...collection2.objects,
@@ -1730,7 +2075,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1730
2075
  },
1731
2076
  echo: {
1732
2077
  schema: [
1733
- import_chunk_CVZPI2P3.CollectionType
2078
+ import_chunk_OTDRTHT4.CollectionType
1734
2079
  ]
1735
2080
  },
1736
2081
  surface: {
@@ -1739,55 +2084,58 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1739
2084
  switch (role) {
1740
2085
  case "article":
1741
2086
  case "main":
1742
- return (0, import_echo.isSpace)(primary) && primary.state.get() === import_echo.SpaceState.SPACE_READY ? /* @__PURE__ */ import_react2.default.createElement(import_app_framework.Surface, {
2087
+ return (0, import_echo.isSpace)(primary) && primary.state.get() === import_echo.SpaceState.SPACE_READY ? /* @__PURE__ */ import_react.default.createElement(import_app_framework.Surface, {
1743
2088
  data: {
1744
- active: primary.properties[import_chunk_CVZPI2P3.CollectionType.typename]
2089
+ active: primary.properties[import_chunk_OTDRTHT4.CollectionType.typename],
2090
+ id: primary.id
1745
2091
  },
1746
2092
  role,
1747
2093
  ...rest
1748
- }) : primary instanceof import_chunk_CVZPI2P3.CollectionType ? {
1749
- node: /* @__PURE__ */ import_react2.default.createElement(CollectionMain, {
2094
+ }) : primary instanceof import_chunk_OTDRTHT4.CollectionType ? {
2095
+ node: /* @__PURE__ */ import_react.default.createElement(CollectionMain, {
1750
2096
  collection: primary
1751
2097
  }),
1752
2098
  disposition: "fallback"
1753
- } : typeof primary === "string" && primary.length === OBJECT_ID_LENGTH ? /* @__PURE__ */ import_react2.default.createElement(MissingObject, {
2099
+ } : typeof primary === "string" && primary.length === OBJECT_ID_LENGTH ? /* @__PURE__ */ import_react.default.createElement(MissingObject, {
1754
2100
  id: primary
1755
2101
  }) : null;
1756
- // TODO(burdon): Add role name syntax to minimal plugin docs.
1757
- case "tree--empty":
1758
- switch (true) {
1759
- case data.plugin === import_chunk_6CNYF6YU.SPACE_PLUGIN:
1760
- return /* @__PURE__ */ import_react2.default.createElement(EmptyTree, null);
1761
- case ((0, import_plugin_graph.isGraphNode)(data.activeNode) && (0, import_echo.isSpace)(data.activeNode.data)):
1762
- return /* @__PURE__ */ import_react2.default.createElement(EmptySpace, null);
1763
- default:
1764
- return null;
1765
- }
2102
+ case "complementary--settings":
2103
+ return (0, import_echo.isSpace)(data.subject) ? /* @__PURE__ */ import_react.default.createElement(SpaceSettingsPanel, {
2104
+ space: data.subject
2105
+ }) : (0, import_echo.isEchoObject)(data.subject) ? {
2106
+ node: /* @__PURE__ */ import_react.default.createElement(DefaultObjectSettings, {
2107
+ object: data.subject
2108
+ }),
2109
+ disposition: "fallback"
2110
+ } : null;
1766
2111
  case "dialog":
1767
2112
  if (data.component === "dxos.org/plugin/space/InvitationManagerDialog") {
1768
- return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.Dialog.Content, null, /* @__PURE__ */ import_react2.default.createElement(import_react3.ClipboardProvider, null, /* @__PURE__ */ import_react2.default.createElement(import_react3.InvitationManager, {
2113
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui.Dialog.Content, null, /* @__PURE__ */ import_react.default.createElement(import_react2.ClipboardProvider, null, /* @__PURE__ */ import_react.default.createElement(import_react2.InvitationManager, {
1769
2114
  active: true,
1770
2115
  ...data.subject
1771
2116
  })));
1772
- } else {
1773
- return null;
1774
2117
  }
1775
- case "popover":
2118
+ return null;
2119
+ case "popover": {
1776
2120
  if (data.component === "dxos.org/plugin/space/RenameSpacePopover" && (0, import_echo.isSpace)(data.subject)) {
1777
- return /* @__PURE__ */ import_react2.default.createElement(PopoverRenameSpace, {
2121
+ return /* @__PURE__ */ import_react.default.createElement(PopoverRenameSpace, {
1778
2122
  space: data.subject
1779
2123
  });
1780
2124
  }
1781
2125
  if (data.component === "dxos.org/plugin/space/RenameObjectPopover" && (0, import_echo_schema.isReactiveObject)(data.subject)) {
1782
- return /* @__PURE__ */ import_react2.default.createElement(PopoverRenameObject, {
2126
+ return /* @__PURE__ */ import_react.default.createElement(PopoverRenameObject, {
1783
2127
  object: data.subject
1784
2128
  });
1785
2129
  }
1786
2130
  return null;
2131
+ }
2132
+ // TODO(burdon): Add role name syntax to minimal plugin docs.
1787
2133
  case "presence--glyph": {
1788
- return (0, import_echo_schema.isReactiveObject)(data.object) ? /* @__PURE__ */ import_react2.default.createElement(SmallPresenceLive, {
2134
+ return (0, import_echo_schema.isReactiveObject)(data.object) ? /* @__PURE__ */ import_react.default.createElement(SmallPresenceLive, {
2135
+ id: data.id,
1789
2136
  viewers: state.values.viewersByObject[(0, import_echo.fullyQualifiedId)(data.object)]
1790
- }) : /* @__PURE__ */ import_react2.default.createElement(SmallPresence, {
2137
+ }) : /* @__PURE__ */ import_react.default.createElement(SmallPresence, {
2138
+ id: data.id,
1791
2139
  count: 0
1792
2140
  });
1793
2141
  }
@@ -1799,32 +2147,35 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1799
2147
  return null;
1800
2148
  }
1801
2149
  const space = (0, import_echo.isSpace)(data.object) ? data.object : (0, import_echo.getSpace)(data.object);
1802
- const object = (0, import_echo.isSpace)(data.object) ? data.object.state.get() === import_echo.SpaceState.SPACE_READY ? space?.properties[import_chunk_CVZPI2P3.CollectionType.typename] : void 0 : data.object;
2150
+ const object = (0, import_echo.isSpace)(data.object) ? data.object.state.get() === import_echo.SpaceState.SPACE_READY ? space?.properties[import_chunk_OTDRTHT4.CollectionType.typename] : void 0 : data.object;
1803
2151
  return space && object ? {
1804
- node: /* @__PURE__ */ import_react2.default.createElement(import_react2.default.Fragment, null, /* @__PURE__ */ import_react2.default.createElement(SpacePresence, {
2152
+ node: /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(SpacePresence, {
1805
2153
  object
1806
- }), space.properties[COMPOSER_SPACE_LOCK] ? null : /* @__PURE__ */ import_react2.default.createElement(ShareSpaceButton, {
2154
+ }), space.properties[COMPOSER_SPACE_LOCK] ? null : /* @__PURE__ */ import_react.default.createElement(ShareSpaceButton, {
1807
2155
  spaceId: space.id
1808
2156
  })),
1809
2157
  disposition: "hoist"
1810
2158
  } : null;
1811
2159
  }
1812
2160
  case "section":
1813
- return data.object instanceof import_chunk_CVZPI2P3.CollectionType ? /* @__PURE__ */ import_react2.default.createElement(CollectionSection, {
2161
+ return data.object instanceof import_chunk_OTDRTHT4.CollectionType ? /* @__PURE__ */ import_react.default.createElement(CollectionSection, {
1814
2162
  collection: data.object
1815
2163
  }) : null;
1816
2164
  case "settings":
1817
- return data.plugin === import_chunk_6CNYF6YU.meta_default.id ? /* @__PURE__ */ import_react2.default.createElement(SpaceSettings, {
2165
+ return data.plugin === import_chunk_P4XUXM7Y.meta_default.id ? /* @__PURE__ */ import_react.default.createElement(SpaceSettings, {
1818
2166
  settings: settings.values
1819
2167
  }) : null;
1820
2168
  case "menu-footer":
1821
- if (!(0, import_echo.isEchoObject)(data.object)) {
1822
- return null;
1823
- } else {
1824
- return /* @__PURE__ */ import_react2.default.createElement(MenuFooter, {
2169
+ if ((0, import_echo.isEchoObject)(data.object)) {
2170
+ return /* @__PURE__ */ import_react.default.createElement(MenuFooter, {
1825
2171
  object: data.object
1826
2172
  });
2173
+ } else {
2174
+ return null;
1827
2175
  }
2176
+ case "status": {
2177
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(SyncStatus, null), /* @__PURE__ */ import_react.default.createElement(SaveStatus, null));
2178
+ }
1828
2179
  default:
1829
2180
  return null;
1830
2181
  }
@@ -1839,13 +2190,13 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1839
2190
  const dispatch = intentPlugin?.provides.intent.dispatch;
1840
2191
  const resolve = metadataPlugin?.provides.metadata.resolver;
1841
2192
  const graph = graphPlugin?.provides.graph;
1842
- if (!graph || !dispatch || !resolve || !client) {
2193
+ if (!client || !dispatch || !resolve || !graph) {
1843
2194
  return [];
1844
2195
  }
1845
2196
  return [
1846
2197
  // Create spaces group node.
1847
2198
  (0, import_plugin_graph.createExtension)({
1848
- id: `${import_chunk_6CNYF6YU.SPACE_PLUGIN}/root`,
2199
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/root`,
1849
2200
  filter: (node) => node.id === "root",
1850
2201
  connector: () => {
1851
2202
  const isReady = (0, import_plugin_graph.toSignal)((onChange) => {
@@ -1868,10 +2219,9 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1868
2219
  label: [
1869
2220
  "spaces label",
1870
2221
  {
1871
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
2222
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
1872
2223
  }
1873
2224
  ],
1874
- palette: "teal",
1875
2225
  testId: "spacePlugin.spaces",
1876
2226
  role: "branch",
1877
2227
  childrenPersistenceClass: "echo",
@@ -1884,8 +2234,8 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1884
2234
  spacesOrder.order = nextOrder.map(({ id }) => id);
1885
2235
  } else {
1886
2236
  import_log.log.warn("spaces order object not found", void 0, {
1887
- F: __dxlog_file3,
1888
- L: 514,
2237
+ F: __dxlog_file6,
2238
+ L: 528,
1889
2239
  S: void 0,
1890
2240
  C: (f, a) => f(...a)
1891
2241
  });
@@ -1902,12 +2252,12 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1902
2252
  filter: (node) => node.id === SPACES,
1903
2253
  actions: () => [
1904
2254
  {
1905
- id: import_chunk_6CNYF6YU.SpaceAction.CREATE,
2255
+ id: import_chunk_P4XUXM7Y.SpaceAction.CREATE,
1906
2256
  data: async () => {
1907
2257
  await dispatch([
1908
2258
  {
1909
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
1910
- action: import_chunk_6CNYF6YU.SpaceAction.CREATE
2259
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
2260
+ action: import_chunk_P4XUXM7Y.SpaceAction.CREATE
1911
2261
  },
1912
2262
  {
1913
2263
  action: import_app_framework.NavigationAction.OPEN
@@ -1918,22 +2268,22 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1918
2268
  label: [
1919
2269
  "create space label",
1920
2270
  {
1921
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
2271
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
1922
2272
  }
1923
2273
  ],
1924
- icon: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.Plus, props),
1925
- iconSymbol: "ph--plus--regular",
1926
- disposition: "toolbar",
1927
- testId: "spacePlugin.createSpace"
2274
+ icon: "ph--plus--regular",
2275
+ disposition: "item",
2276
+ testId: "spacePlugin.createSpace",
2277
+ className: "pbs-4"
1928
2278
  }
1929
2279
  },
1930
2280
  {
1931
- id: import_chunk_6CNYF6YU.SpaceAction.JOIN,
2281
+ id: import_chunk_P4XUXM7Y.SpaceAction.JOIN,
1932
2282
  data: async () => {
1933
2283
  await dispatch([
1934
2284
  {
1935
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
1936
- action: import_chunk_6CNYF6YU.SpaceAction.JOIN
2285
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
2286
+ action: import_chunk_P4XUXM7Y.SpaceAction.JOIN
1937
2287
  },
1938
2288
  {
1939
2289
  action: import_app_framework.NavigationAction.OPEN
@@ -1944,12 +2294,13 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1944
2294
  label: [
1945
2295
  "join space label",
1946
2296
  {
1947
- ns: import_chunk_6CNYF6YU.SPACE_PLUGIN
2297
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
1948
2298
  }
1949
2299
  ],
1950
- icon: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.SignIn, props),
1951
- iconSymbol: "ph--sign-in--regular",
1952
- testId: "spacePlugin.joinSpace"
2300
+ icon: "ph--sign-in--regular",
2301
+ disposition: "item",
2302
+ testId: "spacePlugin.joinSpace",
2303
+ className: "pbe-4"
1953
2304
  }
1954
2305
  }
1955
2306
  ],
@@ -1980,7 +2331,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1980
2331
  }),
1981
2332
  // Find an object by its fully qualified id.
1982
2333
  (0, import_plugin_graph.createExtension)({
1983
- id: `${import_chunk_6CNYF6YU.SPACE_PLUGIN}/objects`,
2334
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/objects`,
1984
2335
  resolver: ({ id }) => {
1985
2336
  const [spaceId, objectId] = id.split(":");
1986
2337
  const space = client.spaces.get().find((space2) => space2.id === spaceId);
@@ -2010,7 +2361,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2010
2361
  }),
2011
2362
  // Create space actions and action groups.
2012
2363
  (0, import_plugin_graph.createExtension)({
2013
- id: `${import_chunk_6CNYF6YU.SPACE_PLUGIN}/actions`,
2364
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/actions`,
2014
2365
  filter: (node) => (0, import_echo.isSpace)(node.data),
2015
2366
  actionGroups: ({ node }) => constructSpaceActionGroups({
2016
2367
  space: node.data,
@@ -2028,7 +2379,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2028
2379
  }),
2029
2380
  // Create nodes for objects in the root collection of a space.
2030
2381
  (0, import_plugin_graph.createExtension)({
2031
- id: `${import_chunk_6CNYF6YU.SPACE_PLUGIN}/root-collection`,
2382
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/root-collection`,
2032
2383
  filter: (node) => (0, import_echo.isSpace)(node.data),
2033
2384
  connector: ({ node }) => {
2034
2385
  const space = node.data;
@@ -2036,7 +2387,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2036
2387
  if (state2 !== import_echo.SpaceState.SPACE_READY) {
2037
2388
  return;
2038
2389
  }
2039
- const collection = space.properties[import_chunk_CVZPI2P3.CollectionType.typename];
2390
+ const collection = space.properties[import_chunk_OTDRTHT4.CollectionType.typename];
2040
2391
  if (!collection) {
2041
2392
  return;
2042
2393
  }
@@ -2049,7 +2400,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2049
2400
  }),
2050
2401
  // Create collection actions and action groups.
2051
2402
  (0, import_plugin_graph.createExtension)({
2052
- id: `${import_chunk_6CNYF6YU.SPACE_PLUGIN}/object-actions`,
2403
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/object-actions`,
2053
2404
  filter: (node) => (0, import_echo.isEchoObject)(node.data),
2054
2405
  actionGroups: ({ node }) => constructObjectActionGroups({
2055
2406
  object: node.data,
@@ -2062,8 +2413,8 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2062
2413
  }),
2063
2414
  // Create nodes for objects in collections.
2064
2415
  (0, import_plugin_graph.createExtension)({
2065
- id: `${import_chunk_6CNYF6YU.SPACE_PLUGIN}/collection-objects`,
2066
- filter: (node) => node.data instanceof import_chunk_CVZPI2P3.CollectionType,
2416
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/collection-objects`,
2417
+ filter: (node) => node.data instanceof import_chunk_OTDRTHT4.CollectionType,
2067
2418
  connector: ({ node }) => {
2068
2419
  const collection = node.data;
2069
2420
  const space = (0, import_echo.getSpace)(collection);
@@ -2076,6 +2427,72 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2076
2427
  resolve
2077
2428
  })).filter(import_util.nonNullable);
2078
2429
  }
2430
+ }),
2431
+ // Create nodes for object settings.
2432
+ (0, import_plugin_graph.createExtension)({
2433
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/settings-for-subject`,
2434
+ resolver: ({ id }) => {
2435
+ if (!id.endsWith("~settings")) {
2436
+ return;
2437
+ }
2438
+ const type = "orphan-settings-for-subject";
2439
+ const icon = "ph--gear--regular";
2440
+ const [subjectId] = id.split("~");
2441
+ const { spaceId, objectId } = (0, import_echo.parseId)(subjectId);
2442
+ const space = client.spaces.get().find((space2) => space2.id === spaceId);
2443
+ if (!objectId) {
2444
+ const label2 = space ? space.properties.name || [
2445
+ "unnamed space label",
2446
+ {
2447
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
2448
+ }
2449
+ ] : [
2450
+ "unnamed object settings label",
2451
+ {
2452
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
2453
+ }
2454
+ ];
2455
+ return {
2456
+ id,
2457
+ type,
2458
+ data: null,
2459
+ properties: {
2460
+ icon,
2461
+ label: label2,
2462
+ showResolvedThreads: false,
2463
+ object: null,
2464
+ space
2465
+ }
2466
+ };
2467
+ }
2468
+ const object = (0, import_plugin_graph.toSignal)((onChange) => {
2469
+ const timeout = setTimeout(async () => {
2470
+ await space?.db.loadObjectById(objectId);
2471
+ onChange();
2472
+ });
2473
+ return () => clearTimeout(timeout);
2474
+ }, () => space?.db.getObjectById(objectId), subjectId);
2475
+ if (!object || !subjectId) {
2476
+ return;
2477
+ }
2478
+ const meta = resolve((0, import_echo.getTypename)(object) ?? "");
2479
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
2480
+ "unnamed object settings label",
2481
+ {
2482
+ ns: import_chunk_P4XUXM7Y.SPACE_PLUGIN
2483
+ }
2484
+ ];
2485
+ return {
2486
+ id,
2487
+ type,
2488
+ data: null,
2489
+ properties: {
2490
+ icon,
2491
+ label,
2492
+ object
2493
+ }
2494
+ };
2495
+ }
2079
2496
  })
2080
2497
  ];
2081
2498
  },
@@ -2089,8 +2506,8 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2089
2506
  inputType: SPACES,
2090
2507
  outputType: DIRECTORY_TYPE,
2091
2508
  serialize: (node) => ({
2092
- name: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["spaces label"],
2093
- data: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["spaces label"],
2509
+ name: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["spaces label"],
2510
+ data: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["spaces label"],
2094
2511
  type: DIRECTORY_TYPE
2095
2512
  }),
2096
2513
  deserialize: () => {
@@ -2100,14 +2517,14 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2100
2517
  inputType: SPACE_TYPE,
2101
2518
  outputType: DIRECTORY_TYPE,
2102
2519
  serialize: (node) => ({
2103
- name: node.data.properties.name ?? translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["unnamed space label"],
2104
- data: node.data.properties.name ?? translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["unnamed space label"],
2520
+ name: node.data.properties.name ?? translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["unnamed space label"],
2521
+ data: node.data.properties.name ?? translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["unnamed space label"],
2105
2522
  type: DIRECTORY_TYPE
2106
2523
  }),
2107
2524
  deserialize: async (data) => {
2108
2525
  const result = await dispatch({
2109
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
2110
- action: import_chunk_6CNYF6YU.SpaceAction.CREATE,
2526
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
2527
+ action: import_chunk_P4XUXM7Y.SpaceAction.CREATE,
2111
2528
  data: {
2112
2529
  name: data.name
2113
2530
  }
@@ -2116,25 +2533,25 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2116
2533
  }
2117
2534
  },
2118
2535
  {
2119
- inputType: import_chunk_CVZPI2P3.CollectionType.typename,
2536
+ inputType: import_chunk_OTDRTHT4.CollectionType.typename,
2120
2537
  outputType: DIRECTORY_TYPE,
2121
2538
  serialize: (node) => ({
2122
- name: node.data.name ?? translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["unnamed collection label"],
2123
- data: node.data.name ?? translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["unnamed collection label"],
2539
+ name: node.data.name ?? translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["unnamed collection label"],
2540
+ data: node.data.name ?? translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["unnamed collection label"],
2124
2541
  type: DIRECTORY_TYPE
2125
2542
  }),
2126
2543
  deserialize: async (data, ancestors) => {
2127
2544
  const space = ancestors.find(import_echo.isSpace);
2128
- const collection = ancestors.findLast((ancestor) => ancestor instanceof import_chunk_CVZPI2P3.CollectionType) ?? space?.properties[import_chunk_CVZPI2P3.CollectionType.typename];
2545
+ const collection = ancestors.findLast((ancestor) => ancestor instanceof import_chunk_OTDRTHT4.CollectionType) ?? space?.properties[import_chunk_OTDRTHT4.CollectionType.typename];
2129
2546
  if (!space || !collection) {
2130
2547
  return;
2131
2548
  }
2132
2549
  const result = await dispatch({
2133
- plugin: import_chunk_6CNYF6YU.SPACE_PLUGIN,
2134
- action: import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT,
2550
+ plugin: import_chunk_P4XUXM7Y.SPACE_PLUGIN,
2551
+ action: import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT,
2135
2552
  data: {
2136
2553
  target: collection,
2137
- object: (0, import_echo.create)(import_chunk_CVZPI2P3.CollectionType, {
2554
+ object: (0, import_echo.create)(import_chunk_OTDRTHT4.CollectionType, {
2138
2555
  name: data.name,
2139
2556
  objects: [],
2140
2557
  views: {}
@@ -2152,23 +2569,23 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2152
2569
  const clientPlugin2 = (0, import_app_framework.resolvePlugin)(plugins, import_plugin_client.parseClientPlugin);
2153
2570
  const client = clientPlugin2?.provides.client;
2154
2571
  switch (intent.action) {
2155
- case import_chunk_6CNYF6YU.SpaceAction.WAIT_FOR_OBJECT: {
2572
+ case import_chunk_P4XUXM7Y.SpaceAction.WAIT_FOR_OBJECT: {
2156
2573
  state.values.awaiting = intent.data?.id;
2157
2574
  return {
2158
2575
  data: true
2159
2576
  };
2160
2577
  }
2161
- case import_chunk_6CNYF6YU.SpaceAction.CREATE: {
2578
+ case import_chunk_P4XUXM7Y.SpaceAction.CREATE: {
2162
2579
  if (!client) {
2163
2580
  return;
2164
2581
  }
2165
2582
  const space = await client.spaces.create(intent.data);
2166
2583
  await space.waitUntilReady();
2167
- const collection = (0, import_echo.create)(import_chunk_CVZPI2P3.CollectionType, {
2584
+ const collection = (0, import_echo.create)(import_chunk_OTDRTHT4.CollectionType, {
2168
2585
  objects: [],
2169
2586
  views: {}
2170
2587
  });
2171
- space.properties[import_chunk_CVZPI2P3.CollectionType.typename] = collection;
2588
+ space.properties[import_chunk_OTDRTHT4.CollectionType.typename] = collection;
2172
2589
  if (import_migrations.Migrations.versionProperty) {
2173
2590
  space.properties[import_migrations.Migrations.versionProperty] = import_migrations.Migrations.targetVersion;
2174
2591
  }
@@ -2183,6 +2600,25 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2183
2600
  }
2184
2601
  },
2185
2602
  intents: [
2603
+ ...settings.values.onSpaceCreate ? [
2604
+ [
2605
+ {
2606
+ action: settings.values.onSpaceCreate,
2607
+ data: {
2608
+ space
2609
+ }
2610
+ },
2611
+ {
2612
+ action: import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT,
2613
+ data: {
2614
+ target: space
2615
+ }
2616
+ },
2617
+ {
2618
+ action: import_app_framework.NavigationAction.EXPOSE
2619
+ }
2620
+ ]
2621
+ ] : [],
2186
2622
  [
2187
2623
  {
2188
2624
  action: import_meta.ObservabilityAction.SEND_EVENT,
@@ -2197,7 +2633,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2197
2633
  ]
2198
2634
  };
2199
2635
  }
2200
- case import_chunk_6CNYF6YU.SpaceAction.JOIN: {
2636
+ case import_chunk_P4XUXM7Y.SpaceAction.JOIN: {
2201
2637
  if (client) {
2202
2638
  const { space } = await client.shell.joinSpace({
2203
2639
  invitationCode: intent.data?.invitationCode
@@ -2214,6 +2650,20 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2214
2650
  }
2215
2651
  },
2216
2652
  intents: [
2653
+ [
2654
+ {
2655
+ action: import_app_framework.LayoutAction.SET_LAYOUT,
2656
+ data: {
2657
+ element: "toast",
2658
+ subject: {
2659
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/join-success`,
2660
+ duration: 1e4,
2661
+ title: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["join success label"],
2662
+ closeLabel: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["dismiss label"]
2663
+ }
2664
+ }
2665
+ }
2666
+ ],
2217
2667
  [
2218
2668
  {
2219
2669
  action: import_meta.ObservabilityAction.SEND_EVENT,
@@ -2231,7 +2681,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2231
2681
  }
2232
2682
  break;
2233
2683
  }
2234
- case import_chunk_6CNYF6YU.SpaceAction.SHARE: {
2684
+ case import_chunk_P4XUXM7Y.SpaceAction.SHARE: {
2235
2685
  const spaceId = intent.data?.spaceId;
2236
2686
  if (clientPlugin2 && typeof spaceId === "string") {
2237
2687
  if (!navigationPlugin?.provides.location.active) {
@@ -2264,7 +2714,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2264
2714
  }
2265
2715
  break;
2266
2716
  }
2267
- case import_chunk_6CNYF6YU.SpaceAction.LOCK: {
2717
+ case import_chunk_P4XUXM7Y.SpaceAction.LOCK: {
2268
2718
  const space = intent.data?.space;
2269
2719
  if ((0, import_echo.isSpace)(space)) {
2270
2720
  space.properties[COMPOSER_SPACE_LOCK] = true;
@@ -2287,7 +2737,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2287
2737
  }
2288
2738
  break;
2289
2739
  }
2290
- case import_chunk_6CNYF6YU.SpaceAction.UNLOCK: {
2740
+ case import_chunk_P4XUXM7Y.SpaceAction.UNLOCK: {
2291
2741
  const space = intent.data?.space;
2292
2742
  if ((0, import_echo.isSpace)(space)) {
2293
2743
  space.properties[COMPOSER_SPACE_LOCK] = false;
@@ -2310,7 +2760,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2310
2760
  }
2311
2761
  break;
2312
2762
  }
2313
- case import_chunk_6CNYF6YU.SpaceAction.RENAME: {
2763
+ case import_chunk_P4XUXM7Y.SpaceAction.RENAME: {
2314
2764
  const { caller, space } = intent.data ?? {};
2315
2765
  if (typeof caller === "string" && (0, import_echo.isSpace)(space)) {
2316
2766
  return {
@@ -2331,7 +2781,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2331
2781
  }
2332
2782
  break;
2333
2783
  }
2334
- case import_chunk_6CNYF6YU.SpaceAction.OPEN: {
2784
+ case import_chunk_P4XUXM7Y.SpaceAction.OPEN: {
2335
2785
  const space = intent.data?.space;
2336
2786
  if ((0, import_echo.isSpace)(space)) {
2337
2787
  await space.open();
@@ -2341,7 +2791,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2341
2791
  }
2342
2792
  break;
2343
2793
  }
2344
- case import_chunk_6CNYF6YU.SpaceAction.CLOSE: {
2794
+ case import_chunk_P4XUXM7Y.SpaceAction.CLOSE: {
2345
2795
  const space = intent.data?.space;
2346
2796
  if ((0, import_echo.isSpace)(space)) {
2347
2797
  await space.close();
@@ -2351,7 +2801,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2351
2801
  }
2352
2802
  break;
2353
2803
  }
2354
- case import_chunk_6CNYF6YU.SpaceAction.MIGRATE: {
2804
+ case import_chunk_P4XUXM7Y.SpaceAction.MIGRATE: {
2355
2805
  const space = intent.data?.space;
2356
2806
  if ((0, import_echo.isSpace)(space)) {
2357
2807
  if (space.state.get() === import_echo.SpaceState.SPACE_REQUIRES_MIGRATION) {
@@ -2380,7 +2830,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2380
2830
  }
2381
2831
  break;
2382
2832
  }
2383
- case import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT: {
2833
+ case import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT: {
2384
2834
  const object = intent.data?.object ?? intent.data?.result;
2385
2835
  if (!(0, import_echo_schema.isReactiveObject)(object)) {
2386
2836
  return;
@@ -2399,16 +2849,15 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2399
2849
  data: {
2400
2850
  element: "toast",
2401
2851
  subject: {
2402
- id: `${import_chunk_6CNYF6YU.SPACE_PLUGIN}/space-limit`,
2403
- title: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["space limit label"],
2404
- description: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["space limit description"],
2852
+ id: `${import_chunk_P4XUXM7Y.SPACE_PLUGIN}/space-limit`,
2853
+ title: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["space limit label"],
2854
+ description: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["space limit description"],
2405
2855
  duration: 5e3,
2406
- icon: (props) => /* @__PURE__ */ import_react2.default.createElement(import_react.Warning, props),
2407
- iconSymbol: "ph--warning--regular",
2408
- actionLabel: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["remove deleted objects label"],
2409
- actionAlt: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["remove deleted objects alt"],
2856
+ icon: "ph--warning--regular",
2857
+ actionLabel: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["remove deleted objects label"],
2858
+ actionAlt: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["remove deleted objects alt"],
2410
2859
  // TODO(wittjosiah): Use OS namespace.
2411
- closeLabel: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN]["space limit close label"],
2860
+ closeLabel: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN]["space limit close label"],
2412
2861
  onAction: () => space.db.coreDatabase.unlinkDeletedObjects()
2413
2862
  }
2414
2863
  }
@@ -2428,25 +2877,25 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2428
2877
  ]
2429
2878
  };
2430
2879
  }
2431
- if (intent.data?.target instanceof import_chunk_CVZPI2P3.CollectionType) {
2880
+ if (intent.data?.target instanceof import_chunk_OTDRTHT4.CollectionType) {
2432
2881
  intent.data?.target.objects.push(object);
2433
2882
  } else if ((0, import_echo.isSpace)(intent.data?.target)) {
2434
- const collection = space.properties[import_chunk_CVZPI2P3.CollectionType.typename];
2435
- if (collection instanceof import_chunk_CVZPI2P3.CollectionType) {
2883
+ const collection = space.properties[import_chunk_OTDRTHT4.CollectionType.typename];
2884
+ if (collection instanceof import_chunk_OTDRTHT4.CollectionType) {
2436
2885
  collection.objects.push(object);
2437
2886
  } else {
2438
- const collection2 = (0, import_echo.create)(import_chunk_CVZPI2P3.CollectionType, {
2887
+ const collection2 = (0, import_echo.create)(import_chunk_OTDRTHT4.CollectionType, {
2439
2888
  objects: [
2440
2889
  object
2441
2890
  ],
2442
2891
  views: {}
2443
2892
  });
2444
- space.properties[import_chunk_CVZPI2P3.CollectionType.typename] = collection2;
2893
+ space.properties[import_chunk_OTDRTHT4.CollectionType.typename] = collection2;
2445
2894
  }
2446
2895
  }
2447
2896
  return {
2448
2897
  data: {
2449
- id: object.id,
2898
+ id: (0, import_echo.fullyQualifiedId)(object),
2450
2899
  object,
2451
2900
  activeParts: {
2452
2901
  main: [
@@ -2471,7 +2920,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2471
2920
  ]
2472
2921
  };
2473
2922
  }
2474
- case import_chunk_6CNYF6YU.SpaceAction.REMOVE_OBJECT: {
2923
+ case import_chunk_P4XUXM7Y.SpaceAction.REMOVE_OBJECT: {
2475
2924
  const object = intent.data?.object ?? intent.data?.result;
2476
2925
  const space = (0, import_echo.getSpace)(object);
2477
2926
  if (!((0, import_echo.isEchoObject)(object) && space)) {
@@ -2481,12 +2930,12 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2481
2930
  const activeParts = navigationPlugin?.provides.location.active;
2482
2931
  const openObjectIds = new Set((0, import_app_framework.openIds)(activeParts ?? {}));
2483
2932
  if (!intent.undo && resolve) {
2484
- const parentCollection = intent.data?.collection ?? space.properties[import_chunk_CVZPI2P3.CollectionType.typename];
2933
+ const parentCollection = intent.data?.collection ?? space.properties[import_chunk_OTDRTHT4.CollectionType.typename];
2485
2934
  const nestedObjects = await getNestedObjects(object, resolve);
2486
2935
  const deletionData = {
2487
2936
  object,
2488
2937
  parentCollection,
2489
- index: parentCollection instanceof import_chunk_CVZPI2P3.CollectionType ? parentCollection.objects.indexOf(object) : -1,
2938
+ index: parentCollection instanceof import_chunk_OTDRTHT4.CollectionType ? parentCollection.objects.indexOf(object) : -1,
2490
2939
  nestedObjects,
2491
2940
  wasActive: [
2492
2941
  object,
@@ -2499,13 +2948,12 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2499
2948
  data: {
2500
2949
  activeParts: {
2501
2950
  main: deletionData.wasActive,
2502
- sidebar: deletionData.wasActive,
2503
- complementary: deletionData.wasActive
2951
+ sidebar: deletionData.wasActive
2504
2952
  }
2505
2953
  }
2506
2954
  });
2507
2955
  }
2508
- if (parentCollection instanceof import_chunk_CVZPI2P3.CollectionType) {
2956
+ if (parentCollection instanceof import_chunk_OTDRTHT4.CollectionType) {
2509
2957
  const index = parentCollection.objects.indexOf(object);
2510
2958
  if (index !== -1) {
2511
2959
  parentCollection.objects.splice(index, 1);
@@ -2515,18 +2963,18 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2515
2963
  space.db.remove(obj);
2516
2964
  });
2517
2965
  space.db.remove(object);
2518
- const undoMessageKey = object instanceof import_chunk_CVZPI2P3.CollectionType ? "collection deleted label" : "object deleted label";
2966
+ const undoMessageKey = object instanceof import_chunk_OTDRTHT4.CollectionType ? "collection deleted label" : "object deleted label";
2519
2967
  return {
2520
2968
  data: true,
2521
2969
  undoable: {
2522
2970
  // Consider using a translation key here.
2523
- message: translations_default[0]["en-US"][import_chunk_6CNYF6YU.SPACE_PLUGIN][undoMessageKey],
2971
+ message: translations_default[0]["en-US"][import_chunk_P4XUXM7Y.SPACE_PLUGIN][undoMessageKey],
2524
2972
  data: deletionData
2525
2973
  }
2526
2974
  };
2527
2975
  } else {
2528
2976
  const undoData = intent.data;
2529
- if (undoData && (0, import_echo.isEchoObject)(undoData.object) && undoData.parentCollection instanceof import_chunk_CVZPI2P3.CollectionType) {
2977
+ if (undoData && (0, import_echo.isEchoObject)(undoData.object) && undoData.parentCollection instanceof import_chunk_OTDRTHT4.CollectionType) {
2530
2978
  const restoredObject = space.db.add(undoData.object);
2531
2979
  undoData.nestedObjects.forEach((obj) => {
2532
2980
  space.db.add(obj);
@@ -2553,7 +3001,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2553
3001
  };
2554
3002
  }
2555
3003
  }
2556
- case import_chunk_6CNYF6YU.SpaceAction.RENAME_OBJECT: {
3004
+ case import_chunk_P4XUXM7Y.SpaceAction.RENAME_OBJECT: {
2557
3005
  const object = intent.data?.object ?? intent.data?.result;
2558
3006
  const caller = intent.data?.caller;
2559
3007
  if ((0, import_echo_schema.isReactiveObject)(object) && caller) {
@@ -2575,18 +3023,19 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2575
3023
  }
2576
3024
  break;
2577
3025
  }
2578
- case import_chunk_6CNYF6YU.SpaceAction.DUPLICATE_OBJECT: {
3026
+ case import_chunk_P4XUXM7Y.SpaceAction.DUPLICATE_OBJECT: {
2579
3027
  const originalObject = intent.data?.object ?? intent.data?.result;
2580
3028
  const resolve = (0, import_app_framework.resolvePlugin)(plugins, import_app_framework.parseMetadataResolverPlugin)?.provides.metadata.resolver;
2581
- if (!(0, import_echo.isEchoObject)(originalObject) || !resolve) {
3029
+ const space = (0, import_echo.isSpace)(intent.data?.target) ? intent.data?.target : (0, import_echo.getSpace)(intent.data?.target);
3030
+ if (!(0, import_echo.isEchoObject)(originalObject) || !resolve || !space) {
2582
3031
  return;
2583
3032
  }
2584
- const newObject = await cloneObject(originalObject, resolve);
3033
+ const newObject = await cloneObject(originalObject, resolve, space);
2585
3034
  return {
2586
3035
  intents: [
2587
3036
  [
2588
3037
  {
2589
- action: import_chunk_6CNYF6YU.SpaceAction.ADD_OBJECT,
3038
+ action: import_chunk_P4XUXM7Y.SpaceAction.ADD_OBJECT,
2590
3039
  data: {
2591
3040
  object: newObject,
2592
3041
  target: intent.data?.target
@@ -2596,7 +3045,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2596
3045
  ]
2597
3046
  };
2598
3047
  }
2599
- case import_chunk_6CNYF6YU.SpaceAction.TOGGLE_HIDDEN: {
3048
+ case import_chunk_P4XUXM7Y.SpaceAction.TOGGLE_HIDDEN: {
2600
3049
  settings.values.showHidden = intent.data?.state ?? !settings.values.showHidden;
2601
3050
  return {
2602
3051
  data: true
@@ -2619,10 +3068,10 @@ var src_default = SpacePlugin;
2619
3068
  CollectionSection,
2620
3069
  CollectionType,
2621
3070
  ContactType,
2622
- EmptySpace,
2623
- EmptyTree,
3071
+ DefaultObjectSettings,
2624
3072
  FullPresence,
2625
3073
  MenuFooter,
3074
+ MessageState,
2626
3075
  MessageType,
2627
3076
  MissingObject,
2628
3077
  PersistenceStatus,
@@ -2634,6 +3083,7 @@ var src_default = SpacePlugin;
2634
3083
  SPACE_PLUGIN,
2635
3084
  SPACE_PLUGIN_SHORT_ID,
2636
3085
  SPACE_TYPE,
3086
+ SaveStatus,
2637
3087
  ShareSpaceButton,
2638
3088
  ShareSpaceButtonImpl,
2639
3089
  SmallPresence,
@@ -2643,6 +3093,10 @@ var src_default = SpacePlugin;
2643
3093
  SpacePlugin,
2644
3094
  SpacePresence,
2645
3095
  SpaceSettings,
3096
+ SpaceSettingsPanel,
3097
+ SyncStatus,
3098
+ SyncStatusDetail,
3099
+ SyncStatusIndicator,
2646
3100
  ThreadStatus,
2647
3101
  ThreadType,
2648
3102
  cloneObject,
@@ -2656,6 +3110,7 @@ var src_default = SpacePlugin;
2656
3110
  getNestedObjects,
2657
3111
  getSpaceDisplayName,
2658
3112
  memoizeQuery,
3113
+ parseSpaceInitPlugin,
2659
3114
  parseSpacePlugin,
2660
3115
  translations
2661
3116
  });