@dxos/plugin-space 0.7.4 → 0.7.5-labs.071a3e2

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 (257) hide show
  1. package/dist/lib/browser/app-graph-builder-TTM2YZVS.mjs +367 -0
  2. package/dist/lib/browser/app-graph-builder-TTM2YZVS.mjs.map +7 -0
  3. package/dist/lib/browser/app-graph-serializer-ZGM5NDXE.mjs +80 -0
  4. package/dist/lib/browser/app-graph-serializer-ZGM5NDXE.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-2NMUVDMZ.mjs +1715 -0
  6. package/dist/lib/browser/chunk-2NMUVDMZ.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-ENRYFGYE.mjs +133 -0
  8. package/dist/lib/browser/chunk-ENRYFGYE.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-H2AR4OLP.mjs +316 -0
  10. package/dist/lib/browser/chunk-H2AR4OLP.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-PQXZCNAU.mjs +13 -0
  12. package/dist/lib/browser/chunk-PQXZCNAU.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-RLZQJD47.mjs +22 -0
  14. package/dist/lib/browser/chunk-RLZQJD47.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-S5IGZNXJ.mjs +528 -0
  16. package/dist/lib/browser/chunk-S5IGZNXJ.mjs.map +7 -0
  17. package/dist/lib/browser/identity-created-VICTPQX7.mjs +28 -0
  18. package/dist/lib/browser/identity-created-VICTPQX7.mjs.map +7 -0
  19. package/dist/lib/browser/index.mjs +193 -3521
  20. package/dist/lib/browser/index.mjs.map +4 -4
  21. package/dist/lib/browser/intent-resolver-A5274MUR.mjs +537 -0
  22. package/dist/lib/browser/intent-resolver-A5274MUR.mjs.map +7 -0
  23. package/dist/lib/browser/meta.json +1 -1
  24. package/dist/lib/browser/react-root-N6QTWYCV.mjs +28 -0
  25. package/dist/lib/browser/react-root-N6QTWYCV.mjs.map +7 -0
  26. package/dist/lib/browser/react-surface-STMNA7W7.mjs +231 -0
  27. package/dist/lib/browser/react-surface-STMNA7W7.mjs.map +7 -0
  28. package/dist/lib/browser/settings-HN5UIYQO.mjs +24 -0
  29. package/dist/lib/browser/settings-HN5UIYQO.mjs.map +7 -0
  30. package/dist/lib/browser/spaces-ready-F57ITJDR.mjs +199 -0
  31. package/dist/lib/browser/spaces-ready-F57ITJDR.mjs.map +7 -0
  32. package/dist/lib/browser/state-6DCY5YJP.mjs +47 -0
  33. package/dist/lib/browser/state-6DCY5YJP.mjs.map +7 -0
  34. package/dist/lib/browser/types/index.mjs +14 -5
  35. package/dist/lib/node/app-graph-builder-6N4TEVHH.cjs +370 -0
  36. package/dist/lib/node/app-graph-builder-6N4TEVHH.cjs.map +7 -0
  37. package/dist/lib/node/app-graph-serializer-AWKVTYAB.cjs +88 -0
  38. package/dist/lib/node/app-graph-serializer-AWKVTYAB.cjs.map +7 -0
  39. package/dist/lib/node/chunk-2RCJT3P2.cjs +1712 -0
  40. package/dist/lib/node/chunk-2RCJT3P2.cjs.map +7 -0
  41. package/dist/lib/node/chunk-I2LRRRMV.cjs +150 -0
  42. package/dist/lib/node/chunk-I2LRRRMV.cjs.map +7 -0
  43. package/dist/lib/node/chunk-MMXP2NHE.cjs +556 -0
  44. package/dist/lib/node/chunk-MMXP2NHE.cjs.map +7 -0
  45. package/dist/lib/node/chunk-SPCSJ2CY.cjs +345 -0
  46. package/dist/lib/node/chunk-SPCSJ2CY.cjs.map +7 -0
  47. package/dist/lib/node/chunk-UX3U4RU2.cjs +42 -0
  48. package/dist/lib/node/chunk-UX3U4RU2.cjs.map +7 -0
  49. package/dist/lib/node/{meta.cjs → chunk-WZR6OAN3.cjs} +13 -13
  50. package/dist/lib/node/chunk-WZR6OAN3.cjs.map +7 -0
  51. package/dist/lib/node/identity-created-JNDKMFKI.cjs +44 -0
  52. package/dist/lib/node/identity-created-JNDKMFKI.cjs.map +7 -0
  53. package/dist/lib/node/index.cjs +176 -3506
  54. package/dist/lib/node/index.cjs.map +4 -4
  55. package/dist/lib/node/intent-resolver-NVTAESKB.cjs +536 -0
  56. package/dist/lib/node/intent-resolver-NVTAESKB.cjs.map +7 -0
  57. package/dist/lib/node/meta.json +1 -1
  58. package/dist/lib/node/react-root-YCHSAYQE.cjs +50 -0
  59. package/dist/lib/node/react-root-YCHSAYQE.cjs.map +7 -0
  60. package/dist/lib/node/react-surface-ANSZ4FKK.cjs +229 -0
  61. package/dist/lib/node/react-surface-ANSZ4FKK.cjs.map +7 -0
  62. package/dist/lib/node/settings-RBBL22DJ.cjs +38 -0
  63. package/dist/lib/node/settings-RBBL22DJ.cjs.map +7 -0
  64. package/dist/lib/node/spaces-ready-WHU4J6E5.cjs +210 -0
  65. package/dist/lib/node/spaces-ready-WHU4J6E5.cjs.map +7 -0
  66. package/dist/lib/node/state-WPZC4JXB.cjs +61 -0
  67. package/dist/lib/node/state-WPZC4JXB.cjs.map +7 -0
  68. package/dist/lib/node/types/index.cjs +23 -14
  69. package/dist/lib/node/types/index.cjs.map +2 -2
  70. package/dist/lib/node-esm/app-graph-builder-MS6BI5EW.mjs +368 -0
  71. package/dist/lib/node-esm/app-graph-builder-MS6BI5EW.mjs.map +7 -0
  72. package/dist/lib/node-esm/app-graph-serializer-AWAWDSCM.mjs +81 -0
  73. package/dist/lib/node-esm/app-graph-serializer-AWAWDSCM.mjs.map +7 -0
  74. package/dist/lib/node-esm/chunk-4HICD7AU.mjs +1716 -0
  75. package/dist/lib/node-esm/chunk-4HICD7AU.mjs.map +7 -0
  76. package/dist/lib/node-esm/chunk-77RE7Y5J.mjs +529 -0
  77. package/dist/lib/node-esm/chunk-77RE7Y5J.mjs.map +7 -0
  78. package/dist/lib/node-esm/chunk-ESWV7ICX.mjs +134 -0
  79. package/dist/lib/node-esm/chunk-ESWV7ICX.mjs.map +7 -0
  80. package/dist/lib/node-esm/chunk-ICCM4YRJ.mjs +15 -0
  81. package/dist/lib/node-esm/chunk-ICCM4YRJ.mjs.map +7 -0
  82. package/dist/lib/node-esm/chunk-LGL4A5B5.mjs +23 -0
  83. package/dist/lib/node-esm/chunk-LGL4A5B5.mjs.map +7 -0
  84. package/dist/lib/node-esm/chunk-S6VAU6VJ.mjs +317 -0
  85. package/dist/lib/node-esm/chunk-S6VAU6VJ.mjs.map +7 -0
  86. package/dist/lib/node-esm/identity-created-3AUSSVEK.mjs +29 -0
  87. package/dist/lib/node-esm/identity-created-3AUSSVEK.mjs.map +7 -0
  88. package/dist/lib/node-esm/index.mjs +193 -3521
  89. package/dist/lib/node-esm/index.mjs.map +4 -4
  90. package/dist/lib/node-esm/intent-resolver-KJ67TU34.mjs +538 -0
  91. package/dist/lib/node-esm/intent-resolver-KJ67TU34.mjs.map +7 -0
  92. package/dist/lib/node-esm/meta.json +1 -1
  93. package/dist/lib/node-esm/react-root-NBQQKAZD.mjs +29 -0
  94. package/dist/lib/node-esm/react-root-NBQQKAZD.mjs.map +7 -0
  95. package/dist/lib/node-esm/react-surface-G2H5T2D2.mjs +232 -0
  96. package/dist/lib/node-esm/react-surface-G2H5T2D2.mjs.map +7 -0
  97. package/dist/lib/node-esm/settings-VBAUB37B.mjs +25 -0
  98. package/dist/lib/node-esm/settings-VBAUB37B.mjs.map +7 -0
  99. package/dist/lib/node-esm/spaces-ready-ABADUX2P.mjs +200 -0
  100. package/dist/lib/node-esm/spaces-ready-ABADUX2P.mjs.map +7 -0
  101. package/dist/lib/node-esm/state-5GH2D5U4.mjs +48 -0
  102. package/dist/lib/node-esm/state-5GH2D5U4.mjs.map +7 -0
  103. package/dist/lib/node-esm/types/index.mjs +14 -5
  104. package/dist/types/src/SpacePlugin.d.ts +3 -22
  105. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/app-graph-builder.d.ts +181 -0
  107. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  108. package/dist/types/src/capabilities/app-graph-serializer.d.ts +4 -0
  109. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/capabilities.d.ts +21 -0
  111. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/identity-created.d.ts +4 -0
  113. package/dist/types/src/capabilities/identity-created.d.ts.map +1 -0
  114. package/dist/types/src/capabilities/index.d.ts +196 -0
  115. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  116. package/dist/types/src/capabilities/intent-resolver.d.ts +9 -0
  117. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/react-root.d.ts +7 -0
  119. package/dist/types/src/capabilities/react-root.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/react-surface.d.ts +7 -0
  121. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/settings.d.ts +4 -0
  123. package/dist/types/src/capabilities/settings.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/spaces-ready.d.ts +4 -0
  125. package/dist/types/src/capabilities/spaces-ready.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/state.d.ts +5 -0
  127. package/dist/types/src/capabilities/state.d.ts.map +1 -0
  128. package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts +7 -0
  129. package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts.map +1 -0
  130. package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts +8 -0
  131. package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts.map +1 -0
  132. package/dist/types/src/components/AdvancedObjectSettings/index.d.ts +2 -0
  133. package/dist/types/src/components/AdvancedObjectSettings/index.d.ts.map +1 -0
  134. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  135. package/dist/types/src/components/BaseObjectSettings.d.ts +7 -0
  136. package/dist/types/src/components/BaseObjectSettings.d.ts.map +1 -0
  137. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +5 -4
  138. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  139. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +9 -9
  140. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  141. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -0
  142. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  143. package/dist/types/src/components/JoinDialog.d.ts +1 -0
  144. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  145. package/dist/types/src/components/PopoverRenameObject.d.ts +1 -0
  146. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  147. package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -0
  148. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  149. package/dist/types/src/components/ShareSpaceButton.d.ts.map +1 -1
  150. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  151. package/dist/types/src/components/SpacePresence.d.ts +9 -6
  152. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  153. package/dist/types/src/components/SpacePresence.stories.d.ts +1 -1
  154. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  155. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts +1 -0
  156. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +1 -1
  157. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts +4 -3
  159. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts.map +1 -1
  160. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts +3 -3
  162. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
  163. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  164. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts +2 -2
  165. package/dist/types/src/components/SyncStatus/SyncStatusDetail.stories.d.ts.map +1 -1
  166. package/dist/types/src/components/index.d.ts +2 -1
  167. package/dist/types/src/components/index.d.ts.map +1 -1
  168. package/dist/types/src/events.d.ts +5 -0
  169. package/dist/types/src/events.d.ts.map +1 -0
  170. package/dist/types/src/hooks/index.d.ts +2 -0
  171. package/dist/types/src/hooks/index.d.ts.map +1 -0
  172. package/dist/types/src/hooks/usePath.d.ts +11 -0
  173. package/dist/types/src/hooks/usePath.d.ts.map +1 -0
  174. package/dist/types/src/index.d.ts +3 -5
  175. package/dist/types/src/index.d.ts.map +1 -1
  176. package/dist/types/src/meta.d.ts +2 -27
  177. package/dist/types/src/meta.d.ts.map +1 -1
  178. package/dist/types/src/translations.d.ts +18 -3
  179. package/dist/types/src/translations.d.ts.map +1 -1
  180. package/dist/types/src/types/collection.d.ts +8 -12
  181. package/dist/types/src/types/collection.d.ts.map +1 -1
  182. package/dist/types/src/types/thread.d.ts +180 -186
  183. package/dist/types/src/types/thread.d.ts.map +1 -1
  184. package/dist/types/src/types/types.d.ts +228 -16
  185. package/dist/types/src/types/types.d.ts.map +1 -1
  186. package/dist/types/src/util.d.ts +9 -8
  187. package/dist/types/src/util.d.ts.map +1 -1
  188. package/dist/types/tsconfig.tsbuildinfo +1 -0
  189. package/package.json +39 -46
  190. package/src/SpacePlugin.tsx +121 -1538
  191. package/src/capabilities/app-graph-builder.ts +393 -0
  192. package/src/capabilities/app-graph-serializer.ts +73 -0
  193. package/src/capabilities/capabilities.ts +26 -0
  194. package/src/capabilities/identity-created.ts +26 -0
  195. package/src/capabilities/index.ts +17 -0
  196. package/src/capabilities/intent-resolver.ts +518 -0
  197. package/src/capabilities/react-root.tsx +20 -0
  198. package/src/capabilities/react-surface.tsx +226 -0
  199. package/src/capabilities/settings.ts +17 -0
  200. package/src/capabilities/spaces-ready.ts +230 -0
  201. package/src/capabilities/state.ts +45 -0
  202. package/src/components/AdvancedObjectSettings/AdvancedObjectSettings.tsx +72 -0
  203. package/src/components/AdvancedObjectSettings/ForeignKeys.tsx +51 -0
  204. package/src/components/AdvancedObjectSettings/index.ts +5 -0
  205. package/src/components/AwaitingObject.tsx +15 -19
  206. package/src/components/{DefaultObjectSettings.tsx → BaseObjectSettings.tsx} +2 -2
  207. package/src/components/CreateDialog/CreateObjectDialog.tsx +49 -38
  208. package/src/components/CreateDialog/CreateObjectPanel.tsx +137 -101
  209. package/src/components/CreateDialog/CreateSpaceDialog.tsx +22 -17
  210. package/src/components/JoinDialog.tsx +40 -48
  211. package/src/components/PersistenceStatus.tsx +1 -1
  212. package/src/components/PopoverRenameObject.tsx +2 -0
  213. package/src/components/PopoverRenameSpace.tsx +2 -0
  214. package/src/components/ShareSpaceButton.tsx +5 -4
  215. package/src/components/SpacePluginSettings.tsx +5 -16
  216. package/src/components/SpacePresence.stories.tsx +27 -19
  217. package/src/components/SpacePresence.tsx +41 -21
  218. package/src/components/SpaceSettings/SpaceSettingsDialog.stories.tsx +2 -3
  219. package/src/components/SpaceSettings/SpaceSettingsDialog.tsx +19 -2
  220. package/src/components/SpaceSettings/SpaceSettingsPanel.stories.tsx +7 -5
  221. package/src/components/SpaceSettings/SpaceSettingsPanel.tsx +7 -7
  222. package/src/components/SyncStatus/InlineSyncStatus.tsx +37 -27
  223. package/src/components/SyncStatus/SyncStatus.tsx +2 -1
  224. package/src/components/SyncStatus/SyncStatusDetail.stories.tsx +55 -51
  225. package/src/components/index.ts +2 -1
  226. package/src/events.ts +12 -0
  227. package/src/hooks/index.ts +5 -0
  228. package/src/hooks/usePath.ts +44 -0
  229. package/src/index.ts +3 -7
  230. package/src/meta.ts +2 -29
  231. package/src/translations.ts +7 -2
  232. package/src/types/collection.ts +3 -3
  233. package/src/types/thread.ts +6 -6
  234. package/src/types/types.ts +177 -42
  235. package/src/util.tsx +82 -65
  236. package/dist/lib/browser/chunk-FTKV32QZ.mjs +0 -43
  237. package/dist/lib/browser/chunk-FTKV32QZ.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-MWKXNS5S.mjs +0 -124
  239. package/dist/lib/browser/chunk-MWKXNS5S.mjs.map +0 -7
  240. package/dist/lib/browser/meta.mjs +0 -15
  241. package/dist/lib/browser/meta.mjs.map +0 -7
  242. package/dist/lib/node/chunk-6SNOZF7Y.cjs +0 -152
  243. package/dist/lib/node/chunk-6SNOZF7Y.cjs.map +0 -7
  244. package/dist/lib/node/chunk-QNVEU2UD.cjs +0 -69
  245. package/dist/lib/node/chunk-QNVEU2UD.cjs.map +0 -7
  246. package/dist/lib/node/meta.cjs.map +0 -7
  247. package/dist/lib/node-esm/chunk-OHEAWSCA.mjs +0 -126
  248. package/dist/lib/node-esm/chunk-OHEAWSCA.mjs.map +0 -7
  249. package/dist/lib/node-esm/chunk-UMV7XREB.mjs +0 -45
  250. package/dist/lib/node-esm/chunk-UMV7XREB.mjs.map +0 -7
  251. package/dist/lib/node-esm/meta.mjs +0 -16
  252. package/dist/lib/node-esm/meta.mjs.map +0 -7
  253. package/dist/types/src/components/DefaultObjectSettings.d.ts +0 -7
  254. package/dist/types/src/components/DefaultObjectSettings.d.ts.map +0 -1
  255. package/dist/types/src/components/SyncStatus/InlineSyncStatus.stories.d.ts +0 -6
  256. package/dist/types/src/components/SyncStatus/InlineSyncStatus.stories.d.ts.map +0 -1
  257. package/src/components/SyncStatus/InlineSyncStatus.stories.tsx +0 -57
@@ -0,0 +1,229 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var react_surface_ANSZ4FKK_exports = {};
30
+ __export(react_surface_ANSZ4FKK_exports, {
31
+ default: () => react_surface_default
32
+ });
33
+ module.exports = __toCommonJS(react_surface_ANSZ4FKK_exports);
34
+ var import_chunk_2RCJT3P2 = require("./chunk-2RCJT3P2.cjs");
35
+ var import_chunk_UX3U4RU2 = require("./chunk-UX3U4RU2.cjs");
36
+ var import_chunk_MMXP2NHE = require("./chunk-MMXP2NHE.cjs");
37
+ var import_chunk_SPCSJ2CY = require("./chunk-SPCSJ2CY.cjs");
38
+ var import_chunk_WZR6OAN3 = require("./chunk-WZR6OAN3.cjs");
39
+ var import_react = __toESM(require("react"));
40
+ var import_app_framework = require("@dxos/app-framework");
41
+ var import_local_storage = require("@dxos/local-storage");
42
+ var import_plugin_client = require("@dxos/plugin-client");
43
+ var import_echo = require("@dxos/react-client/echo");
44
+ var react_surface_default = ({ createInvitationUrl }) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.ReactSurface, [
45
+ (0, import_app_framework.createSurface)({
46
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/article`,
47
+ role: "article",
48
+ filter: (data) => (
49
+ // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.
50
+ (0, import_echo.isSpace)(data.subject) && data.subject.state.get() === import_echo.SpaceState.SPACE_READY
51
+ ),
52
+ component: ({ data, role, ...rest }) => /* @__PURE__ */ import_react.default.createElement(import_app_framework.Surface, {
53
+ data: {
54
+ id: data.subject.id,
55
+ subject: data.subject.properties[import_chunk_SPCSJ2CY.CollectionType.typename]?.target
56
+ },
57
+ role,
58
+ ...rest
59
+ })
60
+ }),
61
+ (0, import_app_framework.createSurface)({
62
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/collection-fallback`,
63
+ role: "article",
64
+ position: "fallback",
65
+ filter: (data) => data.subject instanceof import_chunk_SPCSJ2CY.CollectionType,
66
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.CollectionMain, {
67
+ collection: data.subject
68
+ })
69
+ }),
70
+ (0, import_app_framework.createSurface)({
71
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/settings-panel`,
72
+ // TODO(burdon): Add role name syntax to minimal plugin docs.
73
+ role: "complementary--settings",
74
+ filter: (data) => (0, import_echo.isSpace)(data.subject),
75
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.SpaceSettingsPanel, {
76
+ space: data.subject
77
+ })
78
+ }),
79
+ (0, import_app_framework.createSurface)({
80
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/object-settings-base-panel`,
81
+ role: "complementary--settings",
82
+ position: "hoist",
83
+ filter: (data) => (0, import_echo.isEchoObject)(data.subject),
84
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.BaseObjectSettings, {
85
+ object: data.subject
86
+ })
87
+ }),
88
+ (0, import_app_framework.createSurface)({
89
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/object-settings-advanced-panel`,
90
+ role: "complementary--settings",
91
+ position: "fallback",
92
+ filter: (data) => (0, import_echo.isEchoObject)(data.subject),
93
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.AdvancedObjectSettings, {
94
+ object: data.subject
95
+ })
96
+ }),
97
+ (0, import_app_framework.createSurface)({
98
+ id: import_chunk_2RCJT3P2.SPACE_SETTINGS_DIALOG,
99
+ role: "dialog",
100
+ filter: (data) => data.component === import_chunk_2RCJT3P2.SPACE_SETTINGS_DIALOG,
101
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.SpaceSettingsDialog, {
102
+ ...data.props,
103
+ createInvitationUrl
104
+ })
105
+ }),
106
+ (0, import_app_framework.createSurface)({
107
+ id: import_chunk_2RCJT3P2.JOIN_DIALOG,
108
+ role: "dialog",
109
+ filter: (data) => data.component === import_chunk_2RCJT3P2.JOIN_DIALOG,
110
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.JoinDialog, data.props)
111
+ }),
112
+ (0, import_app_framework.createSurface)({
113
+ id: import_chunk_2RCJT3P2.CREATE_SPACE_DIALOG,
114
+ role: "dialog",
115
+ filter: (data) => data.component === import_chunk_2RCJT3P2.CREATE_SPACE_DIALOG,
116
+ component: () => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.CreateSpaceDialog, null)
117
+ }),
118
+ (0, import_app_framework.createSurface)({
119
+ id: import_chunk_2RCJT3P2.CREATE_OBJECT_DIALOG,
120
+ role: "dialog",
121
+ filter: (data) => data.component === import_chunk_2RCJT3P2.CREATE_OBJECT_DIALOG,
122
+ component: ({ data }) => {
123
+ const schemas = (0, import_app_framework.useCapabilities)(import_plugin_client.ClientCapabilities.Schema).flat();
124
+ const manager = (0, import_app_framework.usePluginManager)();
125
+ const resolve = (0, import_react.useCallback)((typename) => {
126
+ return manager.context.requestCapabilities(import_app_framework.Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ?? {};
127
+ }, [
128
+ manager
129
+ ]);
130
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.CreateObjectDialog, {
131
+ schemas,
132
+ resolve,
133
+ ...data.props
134
+ });
135
+ }
136
+ }),
137
+ (0, import_app_framework.createSurface)({
138
+ id: import_chunk_2RCJT3P2.POPOVER_RENAME_SPACE,
139
+ role: "popover",
140
+ filter: (data) => data.component === import_chunk_2RCJT3P2.POPOVER_RENAME_SPACE && (0, import_echo.isSpace)(data.props),
141
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.PopoverRenameSpace, {
142
+ space: data.props
143
+ })
144
+ }),
145
+ (0, import_app_framework.createSurface)({
146
+ id: import_chunk_2RCJT3P2.POPOVER_RENAME_OBJECT,
147
+ role: "popover",
148
+ filter: (data) => data.component === import_chunk_2RCJT3P2.POPOVER_RENAME_OBJECT && (0, import_echo.isReactiveObject)(data.props),
149
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.PopoverRenameObject, {
150
+ object: data.props
151
+ })
152
+ }),
153
+ (0, import_app_framework.createSurface)({
154
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/navtree-presence`,
155
+ role: "navtree-item-end",
156
+ filter: (data) => typeof data.id === "string" && (0, import_echo.isEchoObject)(data.subject),
157
+ component: ({ data }) => {
158
+ const state = (0, import_app_framework.useCapability)(import_chunk_UX3U4RU2.SpaceCapabilities.MutableState);
159
+ return /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.SmallPresenceLive, {
160
+ id: data.id,
161
+ open: data.open,
162
+ viewers: state.viewersByObject[data.id]
163
+ });
164
+ }
165
+ }),
166
+ (0, import_app_framework.createSurface)({
167
+ // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.
168
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/navtree-presence-fallback`,
169
+ role: "navtree-item-end",
170
+ position: "fallback",
171
+ filter: (data) => typeof data.id === "string",
172
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.SmallPresenceLive, {
173
+ id: data.id,
174
+ open: data.open
175
+ })
176
+ }),
177
+ (0, import_app_framework.createSurface)({
178
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/navtree-sync-status`,
179
+ role: "navtree-item-end",
180
+ filter: (data) => (0, import_echo.isSpace)(data.subject),
181
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.InlineSyncStatus, {
182
+ space: data.subject,
183
+ open: data.open
184
+ })
185
+ }),
186
+ (0, import_app_framework.createSurface)({
187
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/navbar-presence`,
188
+ role: "navbar-end",
189
+ position: "hoist",
190
+ filter: (data) => (0, import_echo.isSpace)(data.subject) || (0, import_echo.isEchoObject)(data.subject),
191
+ component: ({ data }) => {
192
+ const space = (0, import_echo.isSpace)(data.subject) ? data.subject : (0, import_echo.getSpace)(data.subject);
193
+ const object = (0, import_echo.isSpace)(data.subject) ? data.subject.state.get() === import_echo.SpaceState.SPACE_READY ? space?.properties[import_chunk_SPCSJ2CY.CollectionType.typename]?.target : void 0 : data.subject;
194
+ return object ? /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.SpacePresence, {
195
+ object
196
+ }) : null;
197
+ }
198
+ }),
199
+ (0, import_app_framework.createSurface)({
200
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/collection-section`,
201
+ role: "section",
202
+ filter: (data) => data.subject instanceof import_chunk_SPCSJ2CY.CollectionType,
203
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.CollectionSection, {
204
+ collection: data.subject
205
+ })
206
+ }),
207
+ (0, import_app_framework.createSurface)({
208
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/settings`,
209
+ role: "article",
210
+ filter: (data) => data.subject instanceof import_local_storage.SettingsStore && data.subject.prefix === import_chunk_WZR6OAN3.SPACE_PLUGIN,
211
+ component: ({ data: { subject } }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.SpacePluginSettings, {
212
+ settings: subject.value
213
+ })
214
+ }),
215
+ (0, import_app_framework.createSurface)({
216
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/menu-footer`,
217
+ role: "menu-footer",
218
+ filter: (data) => (0, import_echo.isEchoObject)(data.subject),
219
+ component: ({ data }) => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.MenuFooter, {
220
+ object: data.subject
221
+ })
222
+ }),
223
+ (0, import_app_framework.createSurface)({
224
+ id: `${import_chunk_WZR6OAN3.SPACE_PLUGIN}/status`,
225
+ role: "status",
226
+ component: () => /* @__PURE__ */ import_react.default.createElement(import_chunk_2RCJT3P2.SyncStatus, null)
227
+ })
228
+ ]);
229
+ //# sourceMappingURL=react-surface-ANSZ4FKK.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport {\n Capabilities,\n contributes,\n createSurface,\n Surface,\n useCapability,\n useCapabilities,\n usePluginManager,\n} from '@dxos/app-framework';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport {\n getSpace,\n isEchoObject,\n isReactiveObject,\n isSpace,\n SpaceState,\n type ReactiveEchoObject,\n type Space,\n} from '@dxos/react-client/echo';\nimport { type JoinPanelProps } from '@dxos/shell/react';\n\nimport { SpaceCapabilities } from './capabilities';\nimport {\n AdvancedObjectSettings,\n BaseObjectSettings,\n CollectionMain,\n CollectionSection,\n CREATE_OBJECT_DIALOG,\n CREATE_SPACE_DIALOG,\n CreateObjectDialog,\n CreateSpaceDialog,\n InlineSyncStatus,\n JOIN_DIALOG,\n JoinDialog,\n MenuFooter,\n POPOVER_RENAME_OBJECT,\n POPOVER_RENAME_SPACE,\n PopoverRenameObject,\n PopoverRenameSpace,\n SmallPresenceLive,\n SPACE_SETTINGS_DIALOG,\n SpacePluginSettings,\n SpacePresence,\n SpaceSettingsDialog,\n SpaceSettingsPanel,\n SyncStatus,\n type CreateObjectDialogProps,\n type SpaceSettingsDialogProps,\n} from '../components';\nimport { SPACE_PLUGIN } from '../meta';\nimport { CollectionType, type SpaceSettingsProps } from '../types';\n\ntype ReactSurfaceOptions = {\n createInvitationUrl: (invitationCode: string) => string;\n};\n\nexport default ({ createInvitationUrl }: ReactSurfaceOptions) =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${SPACE_PLUGIN}/article`,\n role: 'article',\n filter: (data): data is { subject: Space } =>\n // TODO(wittjosiah): Need to avoid shotgun parsing space state everywhere.\n isSpace(data.subject) && data.subject.state.get() === SpaceState.SPACE_READY,\n component: ({ data, role, ...rest }) => (\n <Surface\n data={{ id: data.subject.id, subject: data.subject.properties[CollectionType.typename]?.target }}\n role={role}\n {...rest}\n />\n ),\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/collection-fallback`,\n role: 'article',\n position: 'fallback',\n filter: (data): data is { subject: CollectionType } => data.subject instanceof CollectionType,\n component: ({ data }) => <CollectionMain collection={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/settings-panel`,\n // TODO(burdon): Add role name syntax to minimal plugin docs.\n role: 'complementary--settings',\n filter: (data): data is { subject: Space } => isSpace(data.subject),\n component: ({ data }) => <SpaceSettingsPanel space={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/object-settings-base-panel`,\n role: 'complementary--settings',\n position: 'hoist',\n filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),\n component: ({ data }) => <BaseObjectSettings object={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/object-settings-advanced-panel`,\n role: 'complementary--settings',\n position: 'fallback',\n filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),\n component: ({ data }) => <AdvancedObjectSettings object={data.subject} />,\n }),\n createSurface({\n id: SPACE_SETTINGS_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: SpaceSettingsDialogProps } => data.component === SPACE_SETTINGS_DIALOG,\n component: ({ data }) => <SpaceSettingsDialog {...data.props} createInvitationUrl={createInvitationUrl} />,\n }),\n createSurface({\n id: JOIN_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: JoinPanelProps } => data.component === JOIN_DIALOG,\n component: ({ data }) => <JoinDialog {...data.props} />,\n }),\n createSurface({\n id: CREATE_SPACE_DIALOG,\n role: 'dialog',\n filter: (data): data is any => data.component === CREATE_SPACE_DIALOG,\n component: () => <CreateSpaceDialog />,\n }),\n createSurface({\n id: CREATE_OBJECT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: Partial<CreateObjectDialogProps> } => data.component === CREATE_OBJECT_DIALOG,\n component: ({ data }) => {\n const schemas = useCapabilities(ClientCapabilities.Schema).flat();\n const manager = usePluginManager();\n\n const resolve = useCallback(\n (typename: string) => {\n return (\n manager.context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename)?.metadata ??\n {}\n );\n },\n [manager],\n );\n\n return <CreateObjectDialog schemas={schemas} resolve={resolve} {...data.props} />;\n },\n }),\n createSurface({\n id: POPOVER_RENAME_SPACE,\n role: 'popover',\n filter: (data): data is { props: Space } => data.component === POPOVER_RENAME_SPACE && isSpace(data.props),\n component: ({ data }) => <PopoverRenameSpace space={data.props} />,\n }),\n createSurface({\n id: POPOVER_RENAME_OBJECT,\n role: 'popover',\n filter: (data): data is { props: ReactiveEchoObject<any> } =>\n data.component === POPOVER_RENAME_OBJECT && isReactiveObject(data.props),\n component: ({ data }) => <PopoverRenameObject object={data.props} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-presence`,\n role: 'navtree-item-end',\n filter: (data): data is { id: string; subject: ReactiveEchoObject<any>; open?: boolean } =>\n typeof data.id === 'string' && isEchoObject(data.subject),\n component: ({ data }) => {\n // TODO(wittjosiah): Doesn't need to be mutable but readonly type messes with ComplexMap.\n const state = useCapability(SpaceCapabilities.MutableState);\n return <SmallPresenceLive id={data.id} open={data.open} viewers={state.viewersByObject[data.id]} />;\n },\n }),\n createSurface({\n // TODO(wittjosiah): Attention glyph for non-echo items should be handled elsewhere.\n id: `${SPACE_PLUGIN}/navtree-presence-fallback`,\n role: 'navtree-item-end',\n position: 'fallback',\n filter: (data): data is { id: string; open?: boolean } => typeof data.id === 'string',\n component: ({ data }) => <SmallPresenceLive id={data.id} open={data.open} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/navtree-sync-status`,\n role: 'navtree-item-end',\n filter: (data): data is { subject: Space; open?: boolean } => isSpace(data.subject),\n component: ({ data }) => <InlineSyncStatus space={data.subject} open={data.open} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/navbar-presence`,\n role: 'navbar-end',\n position: 'hoist',\n filter: (data): data is { subject: Space | ReactiveEchoObject<any> } =>\n isSpace(data.subject) || isEchoObject(data.subject),\n component: ({ data }) => {\n const space = isSpace(data.subject) ? data.subject : getSpace(data.subject);\n const object = isSpace(data.subject)\n ? data.subject.state.get() === SpaceState.SPACE_READY\n ? (space?.properties[CollectionType.typename]?.target as CollectionType)\n : undefined\n : data.subject;\n\n return object ? <SpacePresence object={object} /> : null;\n },\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/collection-section`,\n role: 'section',\n filter: (data): data is { subject: CollectionType } => data.subject instanceof CollectionType,\n component: ({ data }) => <CollectionSection collection={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<SpaceSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === SPACE_PLUGIN,\n component: ({ data: { subject } }) => <SpacePluginSettings settings={subject.value} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/menu-footer`,\n role: 'menu-footer',\n filter: (data): data is { subject: ReactiveEchoObject<any> } => isEchoObject(data.subject),\n component: ({ data }) => <MenuFooter object={data.subject} />,\n }),\n createSurface({\n id: `${SPACE_PLUGIN}/status`,\n role: 'status',\n component: () => <SyncStatus />,\n }),\n ]);\n"],
5
+ "mappings": "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",
6
+ "names": ["createInvitationUrl", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "SPACE_PLUGIN", "role", "filter", "data", "isSpace", "subject", "state", "get", "SpaceState", "SPACE_READY", "component", "rest", "React", "Surface", "properties", "CollectionType", "typename", "target", "position", "CollectionMain", "collection", "SpaceSettingsPanel", "space", "isEchoObject", "BaseObjectSettings", "object", "AdvancedObjectSettings", "SPACE_SETTINGS_DIALOG", "SpaceSettingsDialog", "props", "JOIN_DIALOG", "JoinDialog", "CREATE_SPACE_DIALOG", "CreateSpaceDialog", "CREATE_OBJECT_DIALOG", "schemas", "useCapabilities", "ClientCapabilities", "Schema", "flat", "manager", "usePluginManager", "resolve", "useCallback", "context", "requestCapabilities", "Metadata", "find", "metadata", "CreateObjectDialog", "POPOVER_RENAME_SPACE", "PopoverRenameSpace", "POPOVER_RENAME_OBJECT", "isReactiveObject", "PopoverRenameObject", "useCapability", "SpaceCapabilities", "MutableState", "SmallPresenceLive", "open", "viewers", "viewersByObject", "InlineSyncStatus", "getSpace", "undefined", "SpacePresence", "CollectionSection", "SettingsStore", "prefix", "SpacePluginSettings", "settings", "value", "MenuFooter", "SyncStatus"]
7
+ }
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var settings_RBBL22DJ_exports = {};
20
+ __export(settings_RBBL22DJ_exports, {
21
+ default: () => settings_default
22
+ });
23
+ module.exports = __toCommonJS(settings_RBBL22DJ_exports);
24
+ var import_chunk_SPCSJ2CY = require("./chunk-SPCSJ2CY.cjs");
25
+ var import_chunk_WZR6OAN3 = require("./chunk-WZR6OAN3.cjs");
26
+ var import_app_framework = require("@dxos/app-framework");
27
+ var import_live_object = require("@dxos/live-object");
28
+ var settings_default = () => {
29
+ const settings = (0, import_live_object.create)({
30
+ showHidden: false
31
+ });
32
+ return (0, import_app_framework.contributes)(import_app_framework.Capabilities.Settings, {
33
+ schema: import_chunk_SPCSJ2CY.SpaceSettingsSchema,
34
+ prefix: import_chunk_WZR6OAN3.SPACE_PLUGIN,
35
+ value: settings
36
+ });
37
+ };
38
+ //# sourceMappingURL=settings-RBBL22DJ.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/settings.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes } from '@dxos/app-framework';\nimport { create } from '@dxos/live-object';\n\nimport { SPACE_PLUGIN } from '../meta';\nimport { type SpaceSettingsProps, SpaceSettingsSchema } from '../types';\n\nexport default () => {\n const settings = create<SpaceSettingsProps>({\n showHidden: false,\n });\n\n return contributes(Capabilities.Settings, { schema: SpaceSettingsSchema, prefix: SPACE_PLUGIN, value: settings });\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,2BAA0C;AAC1C,yBAAuB;AAKvB,IAAA,mBAAe,MAAA;AACb,QAAMA,eAAWC,2BAA2B;IAC1CC,YAAY;EACd,CAAA;AAEA,aAAOC,kCAAYC,kCAAaC,UAAU;IAAEC,QAAQC;IAAqBC,QAAQC;IAAcC,OAAOV;EAAS,CAAA;AACjH;",
6
+ "names": ["settings", "create", "showHidden", "contributes", "Capabilities", "Settings", "schema", "SpaceSettingsSchema", "prefix", "SPACE_PLUGIN", "value"]
7
+ }
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var spaces_ready_WHU4J6E5_exports = {};
20
+ __export(spaces_ready_WHU4J6E5_exports, {
21
+ default: () => spaces_ready_default
22
+ });
23
+ module.exports = __toCommonJS(spaces_ready_WHU4J6E5_exports);
24
+ var import_chunk_UX3U4RU2 = require("./chunk-UX3U4RU2.cjs");
25
+ var import_chunk_MMXP2NHE = require("./chunk-MMXP2NHE.cjs");
26
+ var import_chunk_SPCSJ2CY = require("./chunk-SPCSJ2CY.cjs");
27
+ var import_chunk_WZR6OAN3 = require("./chunk-WZR6OAN3.cjs");
28
+ var import_app_framework = require("@dxos/app-framework");
29
+ var import_async = require("@dxos/async");
30
+ var import_echo_schema = require("@dxos/echo-schema");
31
+ var import_core = require("@dxos/echo-signals/core");
32
+ var import_live_object = require("@dxos/live-object");
33
+ var import_log = require("@dxos/log");
34
+ var import_plugin_attention = require("@dxos/plugin-attention");
35
+ var import_plugin_client = require("@dxos/plugin-client");
36
+ var import_plugin_deck = require("@dxos/plugin-deck");
37
+ var import_metadata = require("@dxos/protocols/proto/dxos/echo/metadata");
38
+ var import_react_client = require("@dxos/react-client");
39
+ var import_echo = require("@dxos/react-client/echo");
40
+ var import_util = require("@dxos/util");
41
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/capabilities/spaces-ready.ts";
42
+ var ACTIVE_NODE_BROADCAST_INTERVAL = 3e4;
43
+ var WAIT_FOR_OBJECT_TIMEOUT = 1e3;
44
+ var spaces_ready_default = async (context) => {
45
+ const subscriptions = new import_async.EventSubscriptions();
46
+ const spaceSubscriptions = new import_async.EventSubscriptions();
47
+ const { dispatchPromise: dispatch } = context.requestCapability(import_app_framework.Capabilities.IntentDispatcher);
48
+ const { graph } = context.requestCapability(import_app_framework.Capabilities.AppGraph);
49
+ const layout = context.requestCapability(import_app_framework.Capabilities.Layout);
50
+ const deck = context.requestCapability(import_plugin_deck.DeckCapabilities.DeckState);
51
+ const attention = context.requestCapability(import_plugin_attention.AttentionCapabilities.Attention);
52
+ const state = context.requestCapability(import_chunk_UX3U4RU2.SpaceCapabilities.MutableState);
53
+ const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
54
+ const defaultSpace = client.spaces.default;
55
+ await defaultSpace.waitUntilReady();
56
+ if (deck.activeDeck === "default") {
57
+ await dispatch((0, import_app_framework.createIntent)(import_app_framework.LayoutAction.SwitchWorkspace, {
58
+ part: "workspace",
59
+ subject: defaultSpace.id
60
+ }));
61
+ }
62
+ if (typeof defaultSpace.properties[import_chunk_MMXP2NHE.COMPOSER_SPACE_LOCK] !== "boolean") {
63
+ defaultSpace.properties[import_chunk_MMXP2NHE.COMPOSER_SPACE_LOCK] = true;
64
+ }
65
+ const { objects: [spacesOrder] } = await defaultSpace.db.query(import_echo.Filter.schema(import_echo_schema.Expando, {
66
+ key: import_chunk_MMXP2NHE.SHARED
67
+ })).run();
68
+ if (!spacesOrder) {
69
+ defaultSpace.db.add((0, import_live_object.create)({
70
+ key: import_chunk_MMXP2NHE.SHARED,
71
+ order: []
72
+ }));
73
+ }
74
+ subscriptions.add((0, import_core.scheduledEffect)(() => ({
75
+ active: layout.active
76
+ }), ({ active }) => {
77
+ if (active.length !== 1) {
78
+ return;
79
+ }
80
+ const node = graph.findNode(active[0]);
81
+ if (!node && active[0].length === import_echo.FQ_ID_LENGTH) {
82
+ const timeout = setTimeout(async () => {
83
+ const node2 = graph.findNode(active[0]);
84
+ if (!node2) {
85
+ await dispatch((0, import_app_framework.createIntent)(import_chunk_SPCSJ2CY.SpaceAction.WaitForObject, {
86
+ id: active[0]
87
+ }));
88
+ }
89
+ }, WAIT_FOR_OBJECT_TIMEOUT);
90
+ return () => clearTimeout(timeout);
91
+ }
92
+ }));
93
+ subscriptions.add(client.spaces.subscribe(async (spaces) => {
94
+ if (defaultSpace.state.get() === import_echo.SpaceState.SPACE_REQUIRES_MIGRATION) {
95
+ await defaultSpace.internal.migrate();
96
+ }
97
+ spaces.filter((space) => space.state.get() === import_echo.SpaceState.SPACE_READY).forEach((space) => {
98
+ subscriptions.add((0, import_core.scheduledEffect)(() => ({
99
+ name: space.properties.name
100
+ }), ({ name }) => state.spaceNames[space.id] = name));
101
+ });
102
+ }).unsubscribe);
103
+ subscriptions.add((0, import_core.scheduledEffect)(() => ({
104
+ current: attention.current,
105
+ active: layout.active,
106
+ inactive: layout.inactive
107
+ }), ({ current, active, inactive }) => {
108
+ const send = () => {
109
+ const spaces = client.spaces.get();
110
+ const identity = client.halo.identity.get();
111
+ if (identity) {
112
+ const idsBySpace = (0, import_util.reduceGroupBy)(active, (id) => {
113
+ try {
114
+ const [spaceId] = (0, import_echo.parseFullyQualifiedId)(id);
115
+ return spaceId;
116
+ } catch {
117
+ return null;
118
+ }
119
+ });
120
+ const removedBySpace = (0, import_util.reduceGroupBy)(inactive, (id) => {
121
+ try {
122
+ const [spaceId] = (0, import_echo.parseFullyQualifiedId)(id);
123
+ return spaceId;
124
+ } catch {
125
+ return null;
126
+ }
127
+ });
128
+ for (const space of spaces) {
129
+ if (!idsBySpace.has(space.id)) {
130
+ idsBySpace.set(space.id, []);
131
+ }
132
+ }
133
+ for (const [spaceId, added] of idsBySpace) {
134
+ const removed = removedBySpace.get(spaceId) ?? [];
135
+ const space = spaces.find((space2) => space2.id === spaceId);
136
+ if (!space) {
137
+ continue;
138
+ }
139
+ void space.postMessage("viewing", {
140
+ identityKey: identity.identityKey.toHex(),
141
+ attended: current,
142
+ added,
143
+ removed
144
+ }).catch((err) => {
145
+ import_log.log.warn("Failed to broadcast active node for presence.", {
146
+ err: err.message
147
+ }, {
148
+ F: __dxlog_file,
149
+ L: 155,
150
+ S: void 0,
151
+ C: (f, a) => f(...a)
152
+ });
153
+ });
154
+ }
155
+ }
156
+ };
157
+ send();
158
+ const interval = setInterval(() => send(), ACTIVE_NODE_BROADCAST_INTERVAL);
159
+ return () => clearInterval(interval);
160
+ }));
161
+ subscriptions.add(client.spaces.subscribe((spaces) => {
162
+ spaceSubscriptions.clear();
163
+ spaces.forEach((space) => {
164
+ spaceSubscriptions.add(space.listen("viewing", (message) => {
165
+ const { added, removed, attended } = message.payload;
166
+ const identityKey = import_react_client.PublicKey.safeFrom(message.payload.identityKey);
167
+ const currentIdentity = client.halo.identity.get();
168
+ if (identityKey && !currentIdentity?.identityKey.equals(identityKey) && Array.isArray(added) && Array.isArray(removed)) {
169
+ added.forEach((id) => {
170
+ if (typeof id === "string") {
171
+ if (!(id in state.viewersByObject)) {
172
+ state.viewersByObject[id] = new import_util.ComplexMap(import_react_client.PublicKey.hash);
173
+ }
174
+ state.viewersByObject[id].set(identityKey, {
175
+ lastSeen: Date.now(),
176
+ currentlyAttended: new Set(attended).has(id)
177
+ });
178
+ if (!state.viewersByIdentity.has(identityKey)) {
179
+ state.viewersByIdentity.set(identityKey, /* @__PURE__ */ new Set());
180
+ }
181
+ state.viewersByIdentity.get(identityKey).add(id);
182
+ }
183
+ });
184
+ removed.forEach((id) => {
185
+ if (typeof id === "string") {
186
+ state.viewersByObject[id]?.delete(identityKey);
187
+ state.viewersByIdentity.get(identityKey)?.delete(id);
188
+ }
189
+ });
190
+ }
191
+ }));
192
+ });
193
+ }).unsubscribe);
194
+ try {
195
+ await Promise.all(client.spaces.get().map((space) => space.internal.setEdgeReplicationPreference(import_metadata.EdgeReplicationSetting.ENABLED)));
196
+ state.enabledEdgeReplication = true;
197
+ } catch (err) {
198
+ import_log.log.catch(err, void 0, {
199
+ F: __dxlog_file,
200
+ L: 223,
201
+ S: void 0,
202
+ C: (f, a) => f(...a)
203
+ });
204
+ }
205
+ return (0, import_app_framework.contributes)(import_app_framework.Capabilities.Null, null, () => {
206
+ spaceSubscriptions.clear();
207
+ subscriptions.clear();
208
+ });
209
+ };
210
+ //# sourceMappingURL=spaces-ready-WHU4J6E5.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/spaces-ready.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, createIntent, type PluginsContext, Capabilities, LayoutAction } from '@dxos/app-framework';\nimport { EventSubscriptions } from '@dxos/async';\nimport { Expando } from '@dxos/echo-schema';\nimport { scheduledEffect } from '@dxos/echo-signals/core';\nimport { create } from '@dxos/live-object';\nimport { log } from '@dxos/log';\nimport { AttentionCapabilities } from '@dxos/plugin-attention';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { DeckCapabilities } from '@dxos/plugin-deck';\nimport { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';\nimport { PublicKey } from '@dxos/react-client';\nimport { Filter, FQ_ID_LENGTH, parseFullyQualifiedId, SpaceState } from '@dxos/react-client/echo';\nimport { ComplexMap, reduceGroupBy } from '@dxos/util';\n\nimport { SpaceCapabilities } from './capabilities';\nimport { SpaceAction } from '../types';\nimport { COMPOSER_SPACE_LOCK, SHARED } from '../util';\n\nconst ACTIVE_NODE_BROADCAST_INTERVAL = 30_000;\nconst WAIT_FOR_OBJECT_TIMEOUT = 1000;\n\nexport default async (context: PluginsContext) => {\n const subscriptions = new EventSubscriptions();\n const spaceSubscriptions = new EventSubscriptions();\n\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n const layout = context.requestCapability(Capabilities.Layout);\n const deck = context.requestCapability(DeckCapabilities.DeckState);\n const attention = context.requestCapability(AttentionCapabilities.Attention);\n const state = context.requestCapability(SpaceCapabilities.MutableState);\n const client = context.requestCapability(ClientCapabilities.Client);\n\n const defaultSpace = client.spaces.default;\n await defaultSpace.waitUntilReady();\n\n if (deck.activeDeck === 'default') {\n await dispatch(createIntent(LayoutAction.SwitchWorkspace, { part: 'workspace', subject: defaultSpace.id }));\n }\n\n // Initialize space sharing lock in default space.\n if (typeof defaultSpace.properties[COMPOSER_SPACE_LOCK] !== 'boolean') {\n defaultSpace.properties[COMPOSER_SPACE_LOCK] = true;\n }\n\n const {\n objects: [spacesOrder],\n } = await defaultSpace.db.query(Filter.schema(Expando, { key: SHARED })).run();\n if (!spacesOrder) {\n // TODO(wittjosiah): Cannot be a Folder because Spaces are not TypedObjects so can't be saved in the database.\n // Instead, we store order as an array of space ids.\n defaultSpace.db.add(create({ key: SHARED, order: [] }));\n }\n\n // Await missing objects.\n subscriptions.add(\n scheduledEffect(\n () => ({ active: layout.active }),\n ({ active }) => {\n if (active.length !== 1) {\n return;\n }\n\n const node = graph.findNode(active[0]);\n if (!node && active[0].length === FQ_ID_LENGTH) {\n const timeout = setTimeout(async () => {\n const node = graph.findNode(active[0]);\n if (!node) {\n await dispatch(createIntent(SpaceAction.WaitForObject, { id: active[0] }));\n }\n }, WAIT_FOR_OBJECT_TIMEOUT);\n\n return () => clearTimeout(timeout);\n }\n },\n ),\n );\n\n // Cache space names.\n subscriptions.add(\n client.spaces.subscribe(async (spaces) => {\n // TODO(wittjosiah): Remove. This is a hack to be able to migrate the default space properties.\n if (defaultSpace.state.get() === SpaceState.SPACE_REQUIRES_MIGRATION) {\n await defaultSpace.internal.migrate();\n }\n\n spaces\n .filter((space) => space.state.get() === SpaceState.SPACE_READY)\n .forEach((space) => {\n subscriptions.add(\n scheduledEffect(\n () => ({ name: space.properties.name }),\n ({ name }) => (state.spaceNames[space.id] = name),\n ),\n );\n });\n }).unsubscribe,\n );\n\n // Broadcast active node to other peers in the space.\n subscriptions.add(\n scheduledEffect(\n () => ({ current: attention.current, active: layout.active, inactive: layout.inactive }),\n ({ current, active, inactive }) => {\n const send = () => {\n const spaces = client.spaces.get();\n const identity = client.halo.identity.get();\n if (identity) {\n // Group parts by space for efficient messaging.\n const idsBySpace = reduceGroupBy(active, (id) => {\n try {\n const [spaceId] = parseFullyQualifiedId(id);\n return spaceId;\n } catch {\n return null;\n }\n });\n\n const removedBySpace = reduceGroupBy(inactive, (id) => {\n try {\n const [spaceId] = parseFullyQualifiedId(id);\n return spaceId;\n } catch {\n return null;\n }\n });\n\n // NOTE: Ensure all spaces are included so that we send the correct `removed` object arrays.\n for (const space of spaces) {\n if (!idsBySpace.has(space.id)) {\n idsBySpace.set(space.id, []);\n }\n }\n\n for (const [spaceId, added] of idsBySpace) {\n const removed = removedBySpace.get(spaceId) ?? [];\n const space = spaces.find((space) => space.id === spaceId);\n if (!space) {\n continue;\n }\n\n void space\n .postMessage('viewing', {\n identityKey: identity.identityKey.toHex(),\n attended: current,\n added,\n removed,\n })\n // TODO(burdon): This seems defensive; why would this fail? Backoff interval.\n .catch((err) => {\n log.warn('Failed to broadcast active node for presence.', { err: err.message });\n });\n }\n }\n };\n\n send();\n // Send at interval to allow peers to expire entries if they become disconnected.\n const interval = setInterval(() => send(), ACTIVE_NODE_BROADCAST_INTERVAL);\n return () => clearInterval(interval);\n },\n ),\n );\n\n // Listen for active nodes from other peers in the space.\n subscriptions.add(\n client.spaces.subscribe((spaces) => {\n spaceSubscriptions.clear();\n spaces.forEach((space) => {\n spaceSubscriptions.add(\n space.listen('viewing', (message) => {\n const { added, removed, attended } = message.payload;\n\n const identityKey = PublicKey.safeFrom(message.payload.identityKey);\n const currentIdentity = client.halo.identity.get();\n if (\n identityKey &&\n !currentIdentity?.identityKey.equals(identityKey) &&\n Array.isArray(added) &&\n Array.isArray(removed)\n ) {\n added.forEach((id) => {\n if (typeof id === 'string') {\n if (!(id in state.viewersByObject)) {\n state.viewersByObject[id] = new ComplexMap(PublicKey.hash);\n }\n state.viewersByObject[id]!.set(identityKey, {\n lastSeen: Date.now(),\n currentlyAttended: new Set(attended).has(id),\n });\n if (!state.viewersByIdentity.has(identityKey)) {\n state.viewersByIdentity.set(identityKey, new Set());\n }\n state.viewersByIdentity.get(identityKey)!.add(id);\n }\n });\n\n removed.forEach((id) => {\n if (typeof id === 'string') {\n state.viewersByObject[id]?.delete(identityKey);\n state.viewersByIdentity.get(identityKey)?.delete(id);\n // It’s okay for these to be empty sets/maps, reduces churn.\n }\n });\n }\n }),\n );\n });\n }).unsubscribe,\n );\n\n // Enable edge replication for all spaces.\n try {\n await Promise.all(\n client.spaces.get().map((space) => space.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED)),\n );\n state.enabledEdgeReplication = true;\n } catch (err) {\n log.catch(err);\n }\n\n return contributes(Capabilities.Null, null, () => {\n spaceSubscriptions.clear();\n subscriptions.clear();\n });\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["ACTIVE_NODE_BROADCAST_INTERVAL", "WAIT_FOR_OBJECT_TIMEOUT", "context", "subscriptions", "EventSubscriptions", "spaceSubscriptions", "dispatchPromise", "dispatch", "requestCapability", "Capabilities", "IntentDispatcher", "graph", "AppGraph", "layout", "Layout", "deck", "DeckCapabilities", "DeckState", "attention", "AttentionCapabilities", "Attention", "state", "SpaceCapabilities", "MutableState", "client", "ClientCapabilities", "Client", "defaultSpace", "spaces", "default", "waitUntilReady", "activeDeck", "createIntent", "LayoutAction", "SwitchWorkspace", "part", "subject", "id", "properties", "COMPOSER_SPACE_LOCK", "objects", "spacesOrder", "db", "query", "Filter", "schema", "Expando", "key", "SHARED", "run", "add", "create", "order", "scheduledEffect", "active", "length", "node", "findNode", "FQ_ID_LENGTH", "timeout", "setTimeout", "SpaceAction", "WaitForObject", "clearTimeout", "subscribe", "get", "SpaceState", "SPACE_REQUIRES_MIGRATION", "internal", "migrate", "filter", "space", "SPACE_READY", "forEach", "name", "spaceNames", "unsubscribe", "current", "inactive", "send", "identity", "halo", "idsBySpace", "reduceGroupBy", "spaceId", "parseFullyQualifiedId", "removedBySpace", "has", "set", "added", "removed", "find", "postMessage", "identityKey", "toHex", "attended", "catch", "err", "log", "warn", "message", "interval", "setInterval", "clearInterval", "clear", "listen", "payload", "PublicKey", "safeFrom", "currentIdentity", "equals", "Array", "isArray", "viewersByObject", "ComplexMap", "hash", "lastSeen", "Date", "now", "currentlyAttended", "Set", "viewersByIdentity", "delete", "Promise", "all", "map", "setEdgeReplicationPreference", "EdgeReplicationSetting", "ENABLED", "enabledEdgeReplication", "contributes", "Null"]
7
+ }
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var state_WPZC4JXB_exports = {};
20
+ __export(state_WPZC4JXB_exports, {
21
+ default: () => state_default
22
+ });
23
+ module.exports = __toCommonJS(state_WPZC4JXB_exports);
24
+ var import_chunk_UX3U4RU2 = require("./chunk-UX3U4RU2.cjs");
25
+ var import_chunk_WZR6OAN3 = require("./chunk-WZR6OAN3.cjs");
26
+ var import_signals_core = require("@preact/signals-core");
27
+ var import_app_framework = require("@dxos/app-framework");
28
+ var import_keys = require("@dxos/keys");
29
+ var import_local_storage = require("@dxos/local-storage");
30
+ var import_util = require("@dxos/util");
31
+ var state_default = (context) => {
32
+ const state = new import_local_storage.LocalStorageStore(import_chunk_WZR6OAN3.SPACE_PLUGIN, {
33
+ awaiting: void 0,
34
+ spaceNames: {},
35
+ viewersByObject: {},
36
+ // TODO(wittjosiah): Stop using (Complex)Map inside reactive object.
37
+ viewersByIdentity: new import_util.ComplexMap(import_keys.PublicKey.hash),
38
+ sdkMigrationRunning: {},
39
+ navigableCollections: false,
40
+ enabledEdgeReplication: false
41
+ });
42
+ state.prop({
43
+ key: "spaceNames",
44
+ type: import_local_storage.LocalStorageStore.json()
45
+ }).prop({
46
+ key: "enabledEdgeReplication",
47
+ type: import_local_storage.LocalStorageStore.bool()
48
+ });
49
+ const manager = context.requestCapability(import_app_framework.Capabilities.PluginManager);
50
+ const unsubscribe = (0, import_signals_core.effect)(() => {
51
+ const enabled = manager.enabled.includes("dxos.org/plugin/stack");
52
+ if (enabled !== state.values.navigableCollections) {
53
+ state.values.navigableCollections = enabled;
54
+ }
55
+ });
56
+ return (0, import_app_framework.contributes)(import_chunk_UX3U4RU2.SpaceCapabilities.State, state.values, () => {
57
+ unsubscribe();
58
+ state.close();
59
+ });
60
+ };
61
+ //# sourceMappingURL=state-WPZC4JXB.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/state.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect } from '@preact/signals-core';\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { PublicKey } from '@dxos/keys';\nimport { LocalStorageStore } from '@dxos/local-storage';\nimport { ComplexMap } from '@dxos/util';\n\nimport { SpaceCapabilities } from './capabilities';\nimport { SPACE_PLUGIN } from '../meta';\nimport { type PluginState } from '../types';\n\nexport default (context: PluginsContext) => {\n const state = new LocalStorageStore<PluginState>(SPACE_PLUGIN, {\n awaiting: undefined,\n spaceNames: {},\n viewersByObject: {},\n // TODO(wittjosiah): Stop using (Complex)Map inside reactive object.\n viewersByIdentity: new ComplexMap(PublicKey.hash),\n sdkMigrationRunning: {},\n navigableCollections: false,\n enabledEdgeReplication: false,\n });\n\n state\n .prop({ key: 'spaceNames', type: LocalStorageStore.json<Record<string, string>>() })\n .prop({ key: 'enabledEdgeReplication', type: LocalStorageStore.bool() });\n\n const manager = context.requestCapability(Capabilities.PluginManager);\n const unsubscribe = effect(() => {\n // TODO(wittjosiah): Find a way to make this capability-based.\n const enabled = manager.enabled.includes('dxos.org/plugin/stack');\n if (enabled !== state.values.navigableCollections) {\n state.values.navigableCollections = enabled;\n }\n });\n\n return contributes(SpaceCapabilities.State, state.values, () => {\n unsubscribe();\n state.close();\n });\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0BAAuB;AAEvB,2BAA+D;AAC/D,kBAA0B;AAC1B,2BAAkC;AAClC,kBAA2B;AAM3B,IAAA,gBAAe,CAACA,YAAAA;AACd,QAAMC,QAAQ,IAAIC,uCAA+BC,oCAAc;IAC7DC,UAAUC;IACVC,YAAY,CAAC;IACbC,iBAAiB,CAAC;;IAElBC,mBAAmB,IAAIC,uBAAWC,sBAAUC,IAAI;IAChDC,qBAAqB,CAAC;IACtBC,sBAAsB;IACtBC,wBAAwB;EAC1B,CAAA;AAEAb,QACGc,KAAK;IAAEC,KAAK;IAAcC,MAAMf,uCAAkBgB,KAAI;EAA2B,CAAA,EACjFH,KAAK;IAAEC,KAAK;IAA0BC,MAAMf,uCAAkBiB,KAAI;EAAG,CAAA;AAExE,QAAMC,UAAUpB,QAAQqB,kBAAkBC,kCAAaC,aAAa;AACpE,QAAMC,kBAAcC,4BAAO,MAAA;AAEzB,UAAMC,UAAUN,QAAQM,QAAQC,SAAS,uBAAA;AACzC,QAAID,YAAYzB,MAAM2B,OAAOf,sBAAsB;AACjDZ,YAAM2B,OAAOf,uBAAuBa;IACtC;EACF,CAAA;AAEA,aAAOG,kCAAYC,wCAAkBC,OAAO9B,MAAM2B,QAAQ,MAAA;AACxDJ,gBAAAA;AACAvB,UAAM+B,MAAK;EACb,CAAA;AACF;",
6
+ "names": ["context", "state", "LocalStorageStore", "SPACE_PLUGIN", "awaiting", "undefined", "spaceNames", "viewersByObject", "viewersByIdentity", "ComplexMap", "PublicKey", "hash", "sdkMigrationRunning", "navigableCollections", "enabledEdgeReplication", "prop", "key", "type", "json", "bool", "manager", "requestCapability", "Capabilities", "PluginManager", "unsubscribe", "effect", "enabled", "includes", "values", "contributes", "SpaceCapabilities", "State", "close"]
7
+ }