@dxos/plugin-space 0.7.5-labs.ea4b4c2 → 0.7.5-labs.f400bbc

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 (223) hide show
  1. package/dist/lib/browser/{app-graph-builder-TTM2YZVS.mjs → app-graph-builder-MGK5HWPZ.mjs} +21 -100
  2. package/dist/lib/browser/app-graph-builder-MGK5HWPZ.mjs.map +7 -0
  3. package/dist/lib/browser/{app-graph-serializer-ZGM5NDXE.mjs → app-graph-serializer-FOWFLYGU.mjs} +4 -4
  4. package/dist/lib/browser/{chunk-S5IGZNXJ.mjs → chunk-23RVI5FZ.mjs} +16 -5
  5. package/dist/lib/browser/chunk-23RVI5FZ.mjs.map +7 -0
  6. package/dist/lib/browser/{chunk-RLZQJD47.mjs → chunk-NU7WDVGN.mjs} +2 -1
  7. package/dist/lib/browser/chunk-NU7WDVGN.mjs.map +7 -0
  8. package/dist/lib/browser/{chunk-2NMUVDMZ.mjs → chunk-S6B7627U.mjs} +304 -210
  9. package/dist/lib/browser/chunk-S6B7627U.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-ENRYFGYE.mjs → chunk-UDWHTKB5.mjs} +6 -3
  11. package/dist/lib/browser/chunk-UDWHTKB5.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-H2AR4OLP.mjs → chunk-ULA2UQJ4.mjs} +15 -6
  13. package/dist/lib/browser/chunk-ULA2UQJ4.mjs.map +7 -0
  14. package/dist/lib/browser/{identity-created-VICTPQX7.mjs → identity-created-FYGS6TBH.mjs} +2 -2
  15. package/dist/lib/browser/index.mjs +53 -19
  16. package/dist/lib/browser/index.mjs.map +3 -3
  17. package/dist/lib/browser/{intent-resolver-A5274MUR.mjs → intent-resolver-QVR4MSJV.mjs} +26 -8
  18. package/dist/lib/browser/intent-resolver-QVR4MSJV.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{react-root-N6QTWYCV.mjs → react-root-IP2ZB245.mjs} +5 -5
  21. package/dist/lib/browser/{react-surface-STMNA7W7.mjs → react-surface-BT3EHB6V.mjs} +16 -22
  22. package/dist/lib/browser/react-surface-BT3EHB6V.mjs.map +7 -0
  23. package/dist/lib/browser/schema-5W3DSY2E.mjs +24 -0
  24. package/dist/lib/browser/schema-5W3DSY2E.mjs.map +7 -0
  25. package/dist/lib/browser/{settings-HN5UIYQO.mjs → settings-PHPCXX33.mjs} +2 -2
  26. package/dist/lib/browser/{spaces-ready-F57ITJDR.mjs → spaces-ready-K47RR7N2.mjs} +4 -4
  27. package/dist/lib/browser/{state-6DCY5YJP.mjs → state-INJ63O57.mjs} +2 -2
  28. package/dist/lib/browser/types/index.mjs +5 -5
  29. package/dist/lib/node/{app-graph-builder-6N4TEVHH.cjs → app-graph-builder-ZIUBXRPA.cjs} +45 -124
  30. package/dist/lib/node/app-graph-builder-ZIUBXRPA.cjs.map +7 -0
  31. package/dist/lib/node/{app-graph-serializer-AWKVTYAB.cjs → app-graph-serializer-VQOGHKXL.cjs} +20 -20
  32. package/dist/lib/node/{chunk-2RCJT3P2.cjs → chunk-N2FS7PRA.cjs} +365 -270
  33. package/dist/lib/node/chunk-N2FS7PRA.cjs.map +7 -0
  34. package/dist/lib/node/{chunk-MMXP2NHE.cjs → chunk-OVGKWJOC.cjs} +51 -40
  35. package/dist/lib/node/chunk-OVGKWJOC.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-I2LRRRMV.cjs → chunk-U6DYXAR3.cjs} +10 -7
  37. package/dist/lib/node/chunk-U6DYXAR3.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-SPCSJ2CY.cjs → chunk-WAJKBO3J.cjs} +21 -12
  39. package/dist/lib/node/chunk-WAJKBO3J.cjs.map +7 -0
  40. package/dist/lib/node/{chunk-UX3U4RU2.cjs → chunk-YZKNRFHU.cjs} +5 -4
  41. package/dist/lib/node/chunk-YZKNRFHU.cjs.map +7 -0
  42. package/dist/lib/node/{identity-created-JNDKMFKI.cjs → identity-created-AXI64BLE.cjs} +6 -6
  43. package/dist/lib/node/index.cjs +106 -73
  44. package/dist/lib/node/index.cjs.map +3 -3
  45. package/dist/lib/node/{intent-resolver-NVTAESKB.cjs → intent-resolver-MLENGECT.cjs} +76 -59
  46. package/dist/lib/node/intent-resolver-MLENGECT.cjs.map +7 -0
  47. package/dist/lib/node/meta.json +1 -1
  48. package/dist/lib/node/{react-root-YCHSAYQE.cjs → react-root-3OX5Z5CX.cjs} +10 -10
  49. package/dist/lib/node/{react-surface-ANSZ4FKK.cjs → react-surface-5NYCMXSM.cjs} +49 -57
  50. package/dist/lib/node/react-surface-5NYCMXSM.cjs.map +7 -0
  51. package/dist/lib/node/schema-YN7WVFRX.cjs +40 -0
  52. package/dist/lib/node/schema-YN7WVFRX.cjs.map +7 -0
  53. package/dist/lib/node/{settings-RBBL22DJ.cjs → settings-5QYFWNH7.cjs} +6 -6
  54. package/dist/lib/node/{spaces-ready-WHU4J6E5.cjs → spaces-ready-FQNAKR7G.cjs} +13 -13
  55. package/dist/lib/node/{state-WPZC4JXB.cjs → state-57UE3DYE.cjs} +6 -6
  56. package/dist/lib/node/types/index.cjs +18 -18
  57. package/dist/lib/node/types/index.cjs.map +1 -1
  58. package/dist/lib/node-esm/{app-graph-builder-MS6BI5EW.mjs → app-graph-builder-TERVM2SL.mjs} +21 -100
  59. package/dist/lib/node-esm/app-graph-builder-TERVM2SL.mjs.map +7 -0
  60. package/dist/lib/node-esm/{app-graph-serializer-AWAWDSCM.mjs → app-graph-serializer-GZRSWHEN.mjs} +4 -4
  61. package/dist/lib/node-esm/{chunk-ESWV7ICX.mjs → chunk-2TQ2AJEZ.mjs} +6 -3
  62. package/dist/lib/node-esm/chunk-2TQ2AJEZ.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-LGL4A5B5.mjs → chunk-6RSVVEPS.mjs} +2 -1
  64. package/dist/lib/node-esm/chunk-6RSVVEPS.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-4HICD7AU.mjs → chunk-DIKRH2IK.mjs} +304 -210
  66. package/dist/lib/node-esm/chunk-DIKRH2IK.mjs.map +7 -0
  67. package/dist/lib/node-esm/{chunk-77RE7Y5J.mjs → chunk-PGH5L7MV.mjs} +16 -5
  68. package/dist/lib/node-esm/chunk-PGH5L7MV.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-S6VAU6VJ.mjs → chunk-TRNZQEEN.mjs} +15 -6
  70. package/dist/lib/node-esm/chunk-TRNZQEEN.mjs.map +7 -0
  71. package/dist/lib/node-esm/{identity-created-3AUSSVEK.mjs → identity-created-3CGEXNPO.mjs} +2 -2
  72. package/dist/lib/node-esm/index.mjs +53 -19
  73. package/dist/lib/node-esm/index.mjs.map +3 -3
  74. package/dist/lib/node-esm/{intent-resolver-KJ67TU34.mjs → intent-resolver-BLW4RM6X.mjs} +26 -8
  75. package/dist/lib/node-esm/intent-resolver-BLW4RM6X.mjs.map +7 -0
  76. package/dist/lib/node-esm/meta.json +1 -1
  77. package/dist/lib/node-esm/{react-root-NBQQKAZD.mjs → react-root-7XXGP56B.mjs} +5 -5
  78. package/dist/lib/node-esm/{react-surface-G2H5T2D2.mjs → react-surface-R2ECJSFB.mjs} +16 -22
  79. package/dist/lib/node-esm/react-surface-R2ECJSFB.mjs.map +7 -0
  80. package/dist/lib/node-esm/schema-LOR2EVGY.mjs +25 -0
  81. package/dist/lib/node-esm/schema-LOR2EVGY.mjs.map +7 -0
  82. package/dist/lib/node-esm/{settings-VBAUB37B.mjs → settings-H6MXTEQM.mjs} +2 -2
  83. package/dist/lib/node-esm/{spaces-ready-ABADUX2P.mjs → spaces-ready-HKAQG5SA.mjs} +4 -4
  84. package/dist/lib/node-esm/{state-5GH2D5U4.mjs → state-VYA6OFHD.mjs} +2 -2
  85. package/dist/lib/node-esm/types/index.mjs +5 -5
  86. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/app-graph-builder.d.ts +88 -88
  88. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/capabilities.d.ts +2 -1
  90. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/index.d.ts +112 -111
  92. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  94. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/schema.d.ts +4 -0
  96. package/dist/types/src/capabilities/schema.d.ts.map +1 -0
  97. package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts +1 -2
  98. package/dist/types/src/components/AdvancedObjectSettings/AdvancedObjectSettings.d.ts.map +1 -1
  99. package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts +1 -2
  100. package/dist/types/src/components/AdvancedObjectSettings/ForeignKeys.d.ts.map +1 -1
  101. package/dist/types/src/components/AwaitingObject.d.ts +1 -2
  102. package/dist/types/src/components/AwaitingObject.d.ts.map +1 -1
  103. package/dist/types/src/components/BaseObjectSettings.d.ts +1 -2
  104. package/dist/types/src/components/BaseObjectSettings.d.ts.map +1 -1
  105. package/dist/types/src/components/CollectionMain.d.ts +1 -2
  106. package/dist/types/src/components/CollectionMain.d.ts.map +1 -1
  107. package/dist/types/src/components/CollectionSection.d.ts +1 -2
  108. package/dist/types/src/components/CollectionSection.d.ts.map +1 -1
  109. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts +2 -4
  110. package/dist/types/src/components/CreateDialog/CreateObjectDialog.d.ts.map +1 -1
  111. package/dist/types/src/components/CreateDialog/CreateObjectDialog.stories.d.ts.map +1 -1
  112. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts +5 -7
  113. package/dist/types/src/components/CreateDialog/CreateObjectPanel.d.ts.map +1 -1
  114. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts +1 -2
  115. package/dist/types/src/components/CreateDialog/CreateSpaceDialog.d.ts.map +1 -1
  116. package/dist/types/src/components/JoinDialog.d.ts +1 -2
  117. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  118. package/dist/types/src/components/MenuFooter.d.ts +1 -2
  119. package/dist/types/src/components/MenuFooter.d.ts.map +1 -1
  120. package/dist/types/src/components/PersistenceStatus.d.ts +1 -2
  121. package/dist/types/src/components/PersistenceStatus.d.ts.map +1 -1
  122. package/dist/types/src/components/PopoverAddSpace.d.ts +3 -0
  123. package/dist/types/src/components/PopoverAddSpace.d.ts.map +1 -0
  124. package/dist/types/src/components/PopoverRenameObject.d.ts +1 -2
  125. package/dist/types/src/components/PopoverRenameObject.d.ts.map +1 -1
  126. package/dist/types/src/components/PopoverRenameSpace.d.ts +1 -2
  127. package/dist/types/src/components/PopoverRenameSpace.d.ts.map +1 -1
  128. package/dist/types/src/components/ShareSpaceButton.d.ts +2 -3
  129. package/dist/types/src/components/ShareSpaceButton.d.ts.map +1 -1
  130. package/dist/types/src/components/SpacePluginSettings.d.ts +1 -2
  131. package/dist/types/src/components/SpacePluginSettings.d.ts.map +1 -1
  132. package/dist/types/src/components/SpacePresence.d.ts +4 -5
  133. package/dist/types/src/components/SpacePresence.d.ts.map +1 -1
  134. package/dist/types/src/components/SpacePresence.stories.d.ts +2 -3
  135. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts +1 -2
  137. package/dist/types/src/components/SpaceSettings/SpaceSettingsDialog.d.ts.map +1 -1
  138. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts +3 -5
  139. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.d.ts.map +1 -1
  140. package/dist/types/src/components/SpaceSettings/SpaceSettingsPanel.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts +1 -2
  142. package/dist/types/src/components/SyncStatus/InlineSyncStatus.d.ts.map +1 -1
  143. package/dist/types/src/components/SyncStatus/Space.d.ts +2 -3
  144. package/dist/types/src/components/SyncStatus/Space.d.ts.map +1 -1
  145. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts +3 -4
  146. package/dist/types/src/components/SyncStatus/SyncStatus.d.ts.map +1 -1
  147. package/dist/types/src/components/index.d.ts +1 -0
  148. package/dist/types/src/components/index.d.ts.map +1 -1
  149. package/dist/types/src/events.d.ts +4 -0
  150. package/dist/types/src/events.d.ts.map +1 -1
  151. package/dist/types/src/index.d.ts +1 -1
  152. package/dist/types/src/index.d.ts.map +1 -1
  153. package/dist/types/src/translations.d.ts +9 -0
  154. package/dist/types/src/translations.d.ts.map +1 -1
  155. package/dist/types/src/types/collection.d.ts +2 -2
  156. package/dist/types/src/types/thread.d.ts +34 -34
  157. package/dist/types/src/types/types.d.ts +35 -13
  158. package/dist/types/src/types/types.d.ts.map +1 -1
  159. package/dist/types/src/util.d.ts +3 -2
  160. package/dist/types/src/util.d.ts.map +1 -1
  161. package/package.json +40 -38
  162. package/src/SpacePlugin.tsx +35 -11
  163. package/src/capabilities/app-graph-builder.ts +15 -89
  164. package/src/capabilities/capabilities.ts +3 -1
  165. package/src/capabilities/index.ts +1 -0
  166. package/src/capabilities/intent-resolver.ts +18 -0
  167. package/src/capabilities/react-surface.tsx +12 -28
  168. package/src/capabilities/schema.ts +27 -0
  169. package/src/components/BaseObjectSettings.tsx +7 -0
  170. package/src/components/CreateDialog/CreateObjectDialog.stories.tsx +1 -3
  171. package/src/components/CreateDialog/CreateObjectDialog.tsx +29 -21
  172. package/src/components/CreateDialog/CreateObjectPanel.tsx +41 -43
  173. package/src/components/PopoverAddSpace.tsx +46 -0
  174. package/src/components/SpaceSettings/SpaceSettingsPanel.stories.tsx +5 -1
  175. package/src/components/SpaceSettings/SpaceSettingsPanel.tsx +27 -4
  176. package/src/components/index.ts +1 -0
  177. package/src/events.ts +6 -0
  178. package/src/index.ts +1 -1
  179. package/src/translations.ts +3 -0
  180. package/src/types/types.ts +21 -6
  181. package/src/util.tsx +8 -2
  182. package/dist/lib/browser/app-graph-builder-TTM2YZVS.mjs.map +0 -7
  183. package/dist/lib/browser/chunk-2NMUVDMZ.mjs.map +0 -7
  184. package/dist/lib/browser/chunk-ENRYFGYE.mjs.map +0 -7
  185. package/dist/lib/browser/chunk-H2AR4OLP.mjs.map +0 -7
  186. package/dist/lib/browser/chunk-RLZQJD47.mjs.map +0 -7
  187. package/dist/lib/browser/chunk-S5IGZNXJ.mjs.map +0 -7
  188. package/dist/lib/browser/intent-resolver-A5274MUR.mjs.map +0 -7
  189. package/dist/lib/browser/react-surface-STMNA7W7.mjs.map +0 -7
  190. package/dist/lib/node/app-graph-builder-6N4TEVHH.cjs.map +0 -7
  191. package/dist/lib/node/chunk-2RCJT3P2.cjs.map +0 -7
  192. package/dist/lib/node/chunk-I2LRRRMV.cjs.map +0 -7
  193. package/dist/lib/node/chunk-MMXP2NHE.cjs.map +0 -7
  194. package/dist/lib/node/chunk-SPCSJ2CY.cjs.map +0 -7
  195. package/dist/lib/node/chunk-UX3U4RU2.cjs.map +0 -7
  196. package/dist/lib/node/intent-resolver-NVTAESKB.cjs.map +0 -7
  197. package/dist/lib/node/react-surface-ANSZ4FKK.cjs.map +0 -7
  198. package/dist/lib/node-esm/app-graph-builder-MS6BI5EW.mjs.map +0 -7
  199. package/dist/lib/node-esm/chunk-4HICD7AU.mjs.map +0 -7
  200. package/dist/lib/node-esm/chunk-77RE7Y5J.mjs.map +0 -7
  201. package/dist/lib/node-esm/chunk-ESWV7ICX.mjs.map +0 -7
  202. package/dist/lib/node-esm/chunk-LGL4A5B5.mjs.map +0 -7
  203. package/dist/lib/node-esm/chunk-S6VAU6VJ.mjs.map +0 -7
  204. package/dist/lib/node-esm/intent-resolver-KJ67TU34.mjs.map +0 -7
  205. package/dist/lib/node-esm/react-surface-G2H5T2D2.mjs.map +0 -7
  206. /package/dist/lib/browser/{app-graph-serializer-ZGM5NDXE.mjs.map → app-graph-serializer-FOWFLYGU.mjs.map} +0 -0
  207. /package/dist/lib/browser/{identity-created-VICTPQX7.mjs.map → identity-created-FYGS6TBH.mjs.map} +0 -0
  208. /package/dist/lib/browser/{react-root-N6QTWYCV.mjs.map → react-root-IP2ZB245.mjs.map} +0 -0
  209. /package/dist/lib/browser/{settings-HN5UIYQO.mjs.map → settings-PHPCXX33.mjs.map} +0 -0
  210. /package/dist/lib/browser/{spaces-ready-F57ITJDR.mjs.map → spaces-ready-K47RR7N2.mjs.map} +0 -0
  211. /package/dist/lib/browser/{state-6DCY5YJP.mjs.map → state-INJ63O57.mjs.map} +0 -0
  212. /package/dist/lib/node/{app-graph-serializer-AWKVTYAB.cjs.map → app-graph-serializer-VQOGHKXL.cjs.map} +0 -0
  213. /package/dist/lib/node/{identity-created-JNDKMFKI.cjs.map → identity-created-AXI64BLE.cjs.map} +0 -0
  214. /package/dist/lib/node/{react-root-YCHSAYQE.cjs.map → react-root-3OX5Z5CX.cjs.map} +0 -0
  215. /package/dist/lib/node/{settings-RBBL22DJ.cjs.map → settings-5QYFWNH7.cjs.map} +0 -0
  216. /package/dist/lib/node/{spaces-ready-WHU4J6E5.cjs.map → spaces-ready-FQNAKR7G.cjs.map} +0 -0
  217. /package/dist/lib/node/{state-WPZC4JXB.cjs.map → state-57UE3DYE.cjs.map} +0 -0
  218. /package/dist/lib/node-esm/{app-graph-serializer-AWAWDSCM.mjs.map → app-graph-serializer-GZRSWHEN.mjs.map} +0 -0
  219. /package/dist/lib/node-esm/{identity-created-3AUSSVEK.mjs.map → identity-created-3CGEXNPO.mjs.map} +0 -0
  220. /package/dist/lib/node-esm/{react-root-NBQQKAZD.mjs.map → react-root-7XXGP56B.mjs.map} +0 -0
  221. /package/dist/lib/node-esm/{settings-VBAUB37B.mjs.map → settings-H6MXTEQM.mjs.map} +0 -0
  222. /package/dist/lib/node-esm/{spaces-ready-ABADUX2P.mjs.map → spaces-ready-HKAQG5SA.mjs.map} +0 -0
  223. /package/dist/lib/node-esm/{state-5GH2D5U4.mjs.map → state-VYA6OFHD.mjs.map} +0 -0
@@ -1,16 +1,16 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  SpaceCapabilities
4
- } from "./chunk-LGL4A5B5.mjs";
4
+ } from "./chunk-6RSVVEPS.mjs";
5
5
  import {
6
6
  COMPOSER_SPACE_LOCK,
7
7
  getSpaceDisplayName
8
- } from "./chunk-77RE7Y5J.mjs";
8
+ } from "./chunk-PGH5L7MV.mjs";
9
9
  import {
10
10
  CollectionType,
11
11
  SpaceAction,
12
12
  SpaceForm
13
- } from "./chunk-S6VAU6VJ.mjs";
13
+ } from "./chunk-TRNZQEEN.mjs";
14
14
  import {
15
15
  SPACE_PLUGIN
16
16
  } from "./chunk-ICCM4YRJ.mjs";
@@ -207,14 +207,21 @@ import React4 from "react";
207
207
  import { Input, useTranslation as useTranslation4 } from "@dxos/react-ui";
208
208
  var BaseObjectSettings = ({ object }) => {
209
209
  const { t } = useTranslation4(SPACE_PLUGIN);
210
+ const inputRef = React4.useRef(null);
210
211
  return /* @__PURE__ */ React4.createElement("div", {
211
212
  role: "form",
212
213
  className: "flex flex-col w-full p-2 gap-1"
213
214
  }, /* @__PURE__ */ React4.createElement(Input.Root, null, /* @__PURE__ */ React4.createElement(Input.Label, null, t("name label")), /* @__PURE__ */ React4.createElement(Input.TextInput, {
215
+ ref: inputRef,
214
216
  placeholder: t("name placeholder"),
215
217
  value: object.name ?? "",
216
218
  onChange: (event) => {
217
219
  object.name = event.target.value;
220
+ },
221
+ onKeyDown: (event) => {
222
+ if (event.key === "Enter") {
223
+ inputRef.current?.blur();
224
+ }
218
225
  }
219
226
  })));
220
227
  };
@@ -222,20 +229,23 @@ var BaseObjectSettings = ({ object }) => {
222
229
  // packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx
223
230
  import { pipe } from "effect";
224
231
  import React6, { useCallback as useCallback5, useRef } from "react";
225
- import { chain, createIntent as createIntent2, LayoutAction as LayoutAction2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
232
+ import { Capabilities, chain, createIntent as createIntent2, LayoutAction as LayoutAction2, useCapabilities, useIntentDispatcher as useIntentDispatcher2, usePluginManager as usePluginManager2 } from "@dxos/app-framework";
233
+ import { invariant as invariant2 } from "@dxos/invariant";
226
234
  import { useClient as useClient2 } from "@dxos/react-client";
227
235
  import { getSpace, isReactiveObject, isSpace, useSpaces } from "@dxos/react-client/echo";
228
236
  import { Button as Button2, Dialog, Icon as Icon2, useTranslation as useTranslation6 } from "@dxos/react-ui";
229
237
 
230
238
  // packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectPanel.tsx
231
- import React5, { useCallback as useCallback4, useMemo, useState as useState3 } from "react";
239
+ import React5, { useCallback as useCallback4, useState as useState3 } from "react";
232
240
  import { Surface, isSurfaceAvailable, usePluginManager } from "@dxos/app-framework";
233
- import { getObjectAnnotation, S } from "@dxos/echo-schema";
241
+ import { getObjectAnnotation } from "@dxos/echo-schema";
242
+ import { invariant } from "@dxos/invariant";
234
243
  import { Icon, toLocalizedString, useTranslation as useTranslation5 } from "@dxos/react-ui";
235
244
  import { Form as Form2 } from "@dxos/react-ui-form";
236
245
  import { SearchList } from "@dxos/react-ui-searchlist";
237
246
  import { mx as mx2 } from "@dxos/react-ui-theme";
238
- import { nonNullable } from "@dxos/util";
247
+ import { isNonNullable } from "@dxos/util";
248
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectPanel.tsx";
239
249
  var useInputSurfaceLookup = (baseData) => {
240
250
  const pluginManager = usePluginManager();
241
251
  return useCallback4(({ prop, schema, inputProps }) => {
@@ -260,12 +270,12 @@ var useInputSurfaceLookup = (baseData) => {
260
270
  baseData
261
271
  ]);
262
272
  };
263
- var CreateObjectPanel = ({ classNames, schemas, spaces, typename: initialTypename, target: initialTarget, name: initialName, defaultSpaceId, resolve, onCreateObject }) => {
273
+ var CreateObjectPanel = ({ classNames, forms, spaces, typename: initialTypename, target: initialTarget, name: initialName, defaultSpaceId, resolve, onCreateObject }) => {
264
274
  const { t } = useTranslation5(SPACE_PLUGIN);
265
275
  const [typename, setTypename] = useState3(initialTypename);
266
276
  const [target, setTarget] = useState3(initialTarget);
267
- const schema = schemas.find((schema2) => getObjectAnnotation(schema2)?.typename === typename);
268
- const options = schemas.map(getObjectAnnotation).filter(nonNullable).sort((a, b) => {
277
+ const form = forms.find((form2) => getObjectAnnotation(form2.objectSchema)?.typename === typename);
278
+ const options = forms.map((form2) => getObjectAnnotation(form2.objectSchema)).filter(isNonNullable).sort((a, b) => {
269
279
  const nameA = t("typename label", {
270
280
  ns: a.typename,
271
281
  defaultValue: a.typename
@@ -277,63 +287,68 @@ var CreateObjectPanel = ({ classNames, schemas, spaces, typename: initialTypenam
277
287
  return nameA.localeCompare(nameB);
278
288
  });
279
289
  const handleCreateObject = useCallback4(async (props) => {
280
- if (!schema || !target) {
290
+ if (!form || !target) {
281
291
  return;
282
292
  }
283
293
  await onCreateObject?.({
284
- schema,
294
+ form,
285
295
  target,
286
296
  data: props
287
297
  });
288
298
  }, [
289
299
  onCreateObject,
290
- schema,
300
+ form,
291
301
  target
292
302
  ]);
293
- const metadata = useMemo(() => {
294
- if (!typename) {
295
- return;
303
+ const handleSetTypename = useCallback4(async (typename2) => {
304
+ invariant(target, "target is required", {
305
+ F: __dxlog_file,
306
+ L: 94,
307
+ S: void 0,
308
+ A: [
309
+ "target",
310
+ "'target is required'"
311
+ ]
312
+ });
313
+ const form2 = forms.find((form3) => getObjectAnnotation(form3.objectSchema)?.typename === typename2);
314
+ if (form2 && !form2.formSchema) {
315
+ await onCreateObject?.({
316
+ form: form2,
317
+ target
318
+ });
319
+ } else {
320
+ setTypename(typename2);
296
321
  }
297
- return resolve?.(typename);
298
322
  }, [
299
- resolve,
300
- typename
323
+ forms,
324
+ onCreateObject,
325
+ target
301
326
  ]);
302
327
  const inputSurfaceLookup = useInputSurfaceLookup({
303
328
  target
304
329
  });
305
- const form = useMemo(() => {
306
- const schema2 = metadata?.creationSchema ?? S.Struct({
307
- name: S.optional(S.String)
308
- });
309
- return /* @__PURE__ */ React5.createElement(Form2, {
310
- classNames: "!p-0",
311
- autoFocus: true,
312
- values: {
313
- name: initialName
314
- },
315
- schema: schema2,
316
- testId: "create-object-form",
317
- onSave: handleCreateObject,
318
- lookupComponent: inputSurfaceLookup
319
- });
320
- }, [
321
- initialName,
322
- handleCreateObject,
323
- metadata
324
- ]);
325
330
  return /* @__PURE__ */ React5.createElement("div", {
326
331
  role: "form",
327
332
  className: mx2("flex flex-col gap-2", classNames)
328
- }, !schema ? /* @__PURE__ */ React5.createElement(SelectSchema, {
333
+ }, !form ? /* @__PURE__ */ React5.createElement(SelectSchema, {
329
334
  options,
330
335
  resolve,
331
- onChange: setTypename
336
+ onChange: handleSetTypename
332
337
  }) : !target ? /* @__PURE__ */ React5.createElement(SelectSpace, {
333
338
  spaces,
334
339
  defaultSpaceId,
335
340
  onChange: setTarget
336
- }) : form);
341
+ }) : form.formSchema ? /* @__PURE__ */ React5.createElement(Form2, {
342
+ classNames: "!p-0",
343
+ autoFocus: true,
344
+ values: {
345
+ name: initialName
346
+ },
347
+ schema: form.formSchema,
348
+ testId: "create-object-form",
349
+ onSave: handleCreateObject,
350
+ lookupComponent: inputSurfaceLookup
351
+ }) : void 0);
337
352
  };
338
353
  var SelectSpace = ({ spaces, defaultSpaceId, onChange }) => {
339
354
  const { t } = useTranslation5(SPACE_PLUGIN);
@@ -399,23 +414,50 @@ var SelectSchema = ({ options, resolve, onChange }) => {
399
414
  }))))));
400
415
  };
401
416
 
417
+ // packages/plugins/plugin-space/src/capabilities/index.ts
418
+ import { lazy } from "@dxos/app-framework";
419
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-TERVM2SL.mjs"));
420
+ var AppGraphSerializer = lazy(() => import("./app-graph-serializer-GZRSWHEN.mjs"));
421
+ var IdentityCreated = lazy(() => import("./identity-created-3CGEXNPO.mjs"));
422
+ var IntentResolver = lazy(() => import("./intent-resolver-BLW4RM6X.mjs"));
423
+ var ReactRoot = lazy(() => import("./react-root-7XXGP56B.mjs"));
424
+ var ReactSurface = lazy(() => import("./react-surface-R2ECJSFB.mjs"));
425
+ var Schema = lazy(() => import("./schema-LOR2EVGY.mjs"));
426
+ var SpaceSettings = lazy(() => import("./settings-H6MXTEQM.mjs"));
427
+ var SpaceState = lazy(() => import("./state-VYA6OFHD.mjs"));
428
+ var SpacesReady = lazy(() => import("./spaces-ready-HKAQG5SA.mjs"));
429
+
402
430
  // packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx
431
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/CreateDialog/CreateObjectDialog.tsx";
403
432
  var CREATE_OBJECT_DIALOG = `${SPACE_PLUGIN}/CreateObjectDialog`;
404
- var CreateObjectDialog = ({ schemas, target, typename, name, shouldNavigate: _shouldNavigate, resolve }) => {
433
+ var CreateObjectDialog = ({ target, typename, name, shouldNavigate: _shouldNavigate }) => {
405
434
  const closeRef = useRef(null);
435
+ const manager = usePluginManager2();
406
436
  const { t } = useTranslation6(SPACE_PLUGIN);
407
437
  const client = useClient2();
408
438
  const spaces = useSpaces();
409
439
  const { dispatchPromise: dispatch } = useIntentDispatcher2();
410
- const handleCreateObject = useCallback5(async ({ schema, target: _target, data }) => {
440
+ const forms = useCapabilities(SpaceCapabilities.ObjectForm);
441
+ const resolve = useCallback5((typename2) => manager.context.requestCapabilities(Capabilities.Metadata).find(({ id }) => id === typename2)?.metadata ?? {}, [
442
+ manager
443
+ ]);
444
+ const handleCreateObject = useCallback5(async ({ form, target: _target, data = {} }) => {
411
445
  const target2 = isSpace(_target) ? _target.properties[CollectionType.typename]?.target : _target;
412
- const createObjectIntent = resolve?.(schema.typename)?.createObject;
413
- if (!createObjectIntent || !target2) {
446
+ if (!target2) {
414
447
  return;
415
448
  }
416
449
  closeRef.current?.click();
417
450
  const space = isSpace(target2) ? target2 : getSpace(target2);
418
- const result = await dispatch(createObjectIntent(data, {
451
+ invariant2(space, "Missing space", {
452
+ F: __dxlog_file2,
453
+ L: 75,
454
+ S: void 0,
455
+ A: [
456
+ "space",
457
+ "'Missing space'"
458
+ ]
459
+ });
460
+ const result = await dispatch(form.getIntent(data, {
419
461
  space
420
462
  }));
421
463
  const object = result.data?.object;
@@ -457,7 +499,7 @@ var CreateObjectDialog = ({ schemas, target, typename, name, shouldNavigate: _sh
457
499
  size: 4
458
500
  })))), /* @__PURE__ */ React6.createElement(CreateObjectPanel, {
459
501
  classNames: "p-4",
460
- schemas,
502
+ forms,
461
503
  spaces,
462
504
  target,
463
505
  typename,
@@ -565,7 +607,7 @@ import { ObservabilityAction } from "@dxos/plugin-observability/types";
565
607
  import { useClient as useClient3 } from "@dxos/react-client";
566
608
  import { Dialog as Dialog3 } from "@dxos/react-ui";
567
609
  import { JoinPanel } from "@dxos/shell/react";
568
- var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/JoinDialog.tsx";
610
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/JoinDialog.tsx";
569
611
  var JOIN_DIALOG = `${SPACE_PLUGIN}/JoinDialog`;
570
612
  var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
571
613
  const { dispatchPromise: dispatch } = useIntentDispatcher4();
@@ -604,7 +646,7 @@ var JoinDialog = ({ navigableCollections, onDone, ...props }) => {
604
646
  const space = result?.spaceKey ? client.spaces.get(result.spaceKey) : void 0;
605
647
  if (!space) {
606
648
  log.warn("Space not found", result?.spaceKey, {
607
- F: __dxlog_file,
649
+ F: __dxlog_file3,
608
650
  L: 56,
609
651
  S: void 0,
610
652
  C: (f, a) => f(...a)
@@ -744,14 +786,58 @@ var PersistenceStatus = ({ db }) => {
744
786
  }
745
787
  };
746
788
 
789
+ // packages/plugins/plugin-space/src/components/PopoverAddSpace.tsx
790
+ import React13 from "react";
791
+ import { createIntent as createIntent5, LayoutAction as LayoutAction5, useIntentDispatcher as useIntentDispatcher5 } from "@dxos/app-framework";
792
+ import { IconButton as IconButton3, useTranslation as useTranslation12 } from "@dxos/react-ui";
793
+ var POPOVER_ADD_SPACE = `${SPACE_PLUGIN}/PopoverRenameSpace`;
794
+ var PopoverAddSpace = () => {
795
+ const { t } = useTranslation12(SPACE_PLUGIN);
796
+ const { dispatchPromise: dispatch } = useIntentDispatcher5();
797
+ return /* @__PURE__ */ React13.createElement("div", {
798
+ role: "none",
799
+ className: "grid grid-cols-1 gap-1 [&>button]:justify-start"
800
+ }, /* @__PURE__ */ React13.createElement(IconButton3, {
801
+ variant: "ghost",
802
+ label: t("create space label"),
803
+ icon: "ph--plus--regular",
804
+ onClick: () => {
805
+ void dispatch(createIntent5(SpaceAction.OpenCreateSpace));
806
+ void dispatch(createIntent5(LayoutAction5.UpdatePopover, {
807
+ part: "popover",
808
+ options: {
809
+ anchorId: "",
810
+ state: false
811
+ }
812
+ }));
813
+ },
814
+ "data-testid": "spacePlugin.createSpace"
815
+ }), /* @__PURE__ */ React13.createElement(IconButton3, {
816
+ variant: "ghost",
817
+ label: t("join space label"),
818
+ icon: "ph--sign-in--regular",
819
+ onClick: () => {
820
+ void dispatch(createIntent5(SpaceAction.Join));
821
+ void dispatch(createIntent5(LayoutAction5.UpdatePopover, {
822
+ part: "popover",
823
+ options: {
824
+ anchorId: "",
825
+ state: false
826
+ }
827
+ }));
828
+ },
829
+ "data-testid": "spacePlugin.joinSpace"
830
+ }));
831
+ };
832
+
747
833
  // packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx
748
- import React13, { useCallback as useCallback8, useRef as useRef3, useState as useState5 } from "react";
834
+ import React14, { useCallback as useCallback8, useRef as useRef3, useState as useState5 } from "react";
749
835
  import { log as log2 } from "@dxos/log";
750
- import { Button as Button4, Input as Input2, Popover, useTranslation as useTranslation12 } from "@dxos/react-ui";
751
- var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx";
836
+ import { Button as Button4, Input as Input2, Popover, useTranslation as useTranslation13 } from "@dxos/react-ui";
837
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx";
752
838
  var POPOVER_RENAME_OBJECT = `${SPACE_PLUGIN}/PopoverRenameObject`;
753
839
  var PopoverRenameObject = ({ object: obj }) => {
754
- const { t } = useTranslation12(SPACE_PLUGIN);
840
+ const { t } = useTranslation13(SPACE_PLUGIN);
755
841
  const doneButton = useRef3(null);
756
842
  const object = obj;
757
843
  const [name, setName] = useState5(object.name || object.title || "");
@@ -765,7 +851,7 @@ var PopoverRenameObject = ({ object: obj }) => {
765
851
  log2.error("Failed to rename object", {
766
852
  err
767
853
  }, {
768
- F: __dxlog_file2,
854
+ F: __dxlog_file4,
769
855
  L: 30,
770
856
  S: void 0,
771
857
  C: (f, a) => f(...a)
@@ -776,23 +862,23 @@ var PopoverRenameObject = ({ object: obj }) => {
776
862
  object,
777
863
  name
778
864
  ]);
779
- return /* @__PURE__ */ React13.createElement("div", {
865
+ return /* @__PURE__ */ React14.createElement("div", {
780
866
  role: "none",
781
867
  className: "p-1 flex gap-2"
782
- }, /* @__PURE__ */ React13.createElement("div", {
868
+ }, /* @__PURE__ */ React14.createElement("div", {
783
869
  role: "none",
784
870
  className: "flex-1"
785
- }, /* @__PURE__ */ React13.createElement(Input2.Root, null, /* @__PURE__ */ React13.createElement(Input2.Label, {
871
+ }, /* @__PURE__ */ React14.createElement(Input2.Root, null, /* @__PURE__ */ React14.createElement(Input2.Label, {
786
872
  srOnly: true
787
- }, t("object name label")), /* @__PURE__ */ React13.createElement(Input2.TextInput, {
873
+ }, t("object name label")), /* @__PURE__ */ React14.createElement(Input2.TextInput, {
788
874
  placeholder: t("object title placeholder"),
789
875
  value: name,
790
876
  "data-testid": "spacePlugin.renameObject.input",
791
877
  onChange: ({ target: { value } }) => setName(value),
792
878
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
793
- }))), /* @__PURE__ */ React13.createElement(Popover.Close, {
879
+ }))), /* @__PURE__ */ React14.createElement(Popover.Close, {
794
880
  asChild: true
795
- }, /* @__PURE__ */ React13.createElement(Button4, {
881
+ }, /* @__PURE__ */ React14.createElement(Button4, {
796
882
  ref: doneButton,
797
883
  classNames: "self-stretch",
798
884
  onClick: handleDone
@@ -802,11 +888,11 @@ var PopoverRenameObject = ({ object: obj }) => {
802
888
  };
803
889
 
804
890
  // packages/plugins/plugin-space/src/components/PopoverRenameSpace.tsx
805
- import React14, { useCallback as useCallback9, useRef as useRef4, useState as useState6 } from "react";
806
- import { Button as Button5, Input as Input3, Popover as Popover2, useTranslation as useTranslation13 } from "@dxos/react-ui";
891
+ import React15, { useCallback as useCallback9, useRef as useRef4, useState as useState6 } from "react";
892
+ import { Button as Button5, Input as Input3, Popover as Popover2, useTranslation as useTranslation14 } from "@dxos/react-ui";
807
893
  var POPOVER_RENAME_SPACE = `${SPACE_PLUGIN}/PopoverRenameSpace`;
808
894
  var PopoverRenameSpace = ({ space }) => {
809
- const { t } = useTranslation13(SPACE_PLUGIN);
895
+ const { t } = useTranslation14(SPACE_PLUGIN);
810
896
  const doneButton = useRef4(null);
811
897
  const [name, setName] = useState6(space.properties.name ?? "");
812
898
  const handleDone = useCallback9(() => {
@@ -815,24 +901,24 @@ var PopoverRenameSpace = ({ space }) => {
815
901
  space,
816
902
  name
817
903
  ]);
818
- return /* @__PURE__ */ React14.createElement("div", {
904
+ return /* @__PURE__ */ React15.createElement("div", {
819
905
  role: "none",
820
906
  className: "p-1 flex gap-2"
821
- }, /* @__PURE__ */ React14.createElement("div", {
907
+ }, /* @__PURE__ */ React15.createElement("div", {
822
908
  role: "none",
823
909
  className: "flex-1"
824
- }, /* @__PURE__ */ React14.createElement(Input3.Root, null, /* @__PURE__ */ React14.createElement(Input3.Label, {
910
+ }, /* @__PURE__ */ React15.createElement(Input3.Root, null, /* @__PURE__ */ React15.createElement(Input3.Label, {
825
911
  srOnly: true
826
- }, t("space name label")), /* @__PURE__ */ React14.createElement(Input3.TextInput, {
912
+ }, t("space name label")), /* @__PURE__ */ React15.createElement(Input3.TextInput, {
827
913
  defaultValue: space.properties.name ?? "",
828
914
  placeholder: t("unnamed space label"),
829
915
  onChange: ({ target: { value } }) => setName(value),
830
916
  // TODO(wittjosiah): Ideally this should access the popover context to close the popover.
831
917
  // Currently this is not possible because Radix does not expose the popover context.
832
918
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
833
- }))), /* @__PURE__ */ React14.createElement(Popover2.Close, {
919
+ }))), /* @__PURE__ */ React15.createElement(Popover2.Close, {
834
920
  asChild: true
835
- }, /* @__PURE__ */ React14.createElement(Button5, {
921
+ }, /* @__PURE__ */ React15.createElement(Button5, {
836
922
  ref: doneButton,
837
923
  classNames: "self-stretch",
838
924
  onClick: handleDone
@@ -842,20 +928,20 @@ var PopoverRenameSpace = ({ space }) => {
842
928
  };
843
929
 
844
930
  // packages/plugins/plugin-space/src/components/ShareSpaceButton.tsx
845
- import React15 from "react";
846
- import { createIntent as createIntent5, useIntentDispatcher as useIntentDispatcher5 } from "@dxos/app-framework";
847
- import { IconButton as IconButton3, useTranslation as useTranslation14 } from "@dxos/react-ui";
931
+ import React16 from "react";
932
+ import { createIntent as createIntent6, useIntentDispatcher as useIntentDispatcher6 } from "@dxos/app-framework";
933
+ import { IconButton as IconButton4, useTranslation as useTranslation15 } from "@dxos/react-ui";
848
934
  var ShareSpaceButton = ({ space }) => {
849
- const { dispatchPromise: dispatch } = useIntentDispatcher5();
850
- return /* @__PURE__ */ React15.createElement(ShareSpaceButtonImpl, {
851
- onClick: () => dispatch(createIntent5(SpaceAction.Share, {
935
+ const { dispatchPromise: dispatch } = useIntentDispatcher6();
936
+ return /* @__PURE__ */ React16.createElement(ShareSpaceButtonImpl, {
937
+ onClick: () => dispatch(createIntent6(SpaceAction.Share, {
852
938
  space
853
939
  }))
854
940
  });
855
941
  };
856
942
  var ShareSpaceButtonImpl = ({ onClick }) => {
857
- const { t } = useTranslation14(SPACE_PLUGIN);
858
- return /* @__PURE__ */ React15.createElement(IconButton3, {
943
+ const { t } = useTranslation15(SPACE_PLUGIN);
944
+ return /* @__PURE__ */ React16.createElement(IconButton4, {
859
945
  "data-testid": "spacePlugin.shareSpaceButton",
860
946
  icon: "ph--users--regular",
861
947
  label: t("share space label"),
@@ -864,28 +950,16 @@ var ShareSpaceButtonImpl = ({ onClick }) => {
864
950
  };
865
951
 
866
952
  // packages/plugins/plugin-space/src/components/SpacePresence.tsx
867
- import React16, { useCallback as useCallback10, useEffect as useEffect4, useState as useState8 } from "react";
953
+ import React17, { useCallback as useCallback10, useEffect as useEffect4, useState as useState8 } from "react";
868
954
  import { useAppGraph as useAppGraph2, useCapability } from "@dxos/app-framework";
869
955
  import { generateName } from "@dxos/display-name";
870
956
  import { PublicKey, useClient as useClient5 } from "@dxos/react-client";
871
957
  import { getSpace as getSpace3, useMembers, fullyQualifiedId as fullyQualifiedId2 } from "@dxos/react-client/echo";
872
958
  import { useIdentity } from "@dxos/react-client/halo";
873
- import { Avatar, AvatarGroup, AvatarGroupItem, Tooltip as Tooltip2, useTranslation as useTranslation15, List as List2, ListItem as ListItem2, useDefaultValue } from "@dxos/react-ui";
959
+ import { Avatar, AvatarGroup, AvatarGroupItem, Tooltip as Tooltip2, useTranslation as useTranslation16, List as List2, ListItem as ListItem2, useDefaultValue } from "@dxos/react-ui";
874
960
  import { AttentionGlyph, useAttended, useAttention } from "@dxos/react-ui-attention";
875
961
  import { ComplexMap, keyToFallback } from "@dxos/util";
876
962
 
877
- // packages/plugins/plugin-space/src/capabilities/index.ts
878
- import { lazy } from "@dxos/app-framework";
879
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-MS6BI5EW.mjs"));
880
- var AppGraphSerializer = lazy(() => import("./app-graph-serializer-AWAWDSCM.mjs"));
881
- var IdentityCreated = lazy(() => import("./identity-created-3AUSSVEK.mjs"));
882
- var IntentResolver = lazy(() => import("./intent-resolver-KJ67TU34.mjs"));
883
- var ReactRoot = lazy(() => import("./react-root-NBQQKAZD.mjs"));
884
- var ReactSurface = lazy(() => import("./react-surface-G2H5T2D2.mjs"));
885
- var SpaceSettings = lazy(() => import("./settings-VBAUB37B.mjs"));
886
- var SpaceState = lazy(() => import("./state-5GH2D5U4.mjs"));
887
- var SpacesReady = lazy(() => import("./spaces-ready-ABADUX2P.mjs"));
888
-
889
963
  // packages/plugins/plugin-space/src/hooks/usePath.ts
890
964
  import { useEffect as useEffect3, useState as useState7 } from "react";
891
965
  var usePath = (graph, id, timeout) => {
@@ -956,7 +1030,7 @@ var SpacePresence = ({ object, spaceKey }) => {
956
1030
  lastSeen
957
1031
  };
958
1032
  }).toSorted((a, b) => a.lastSeen - b.lastSeen);
959
- return /* @__PURE__ */ React16.createElement(FullPresence, {
1033
+ return /* @__PURE__ */ React17.createElement(FullPresence, {
960
1034
  members: membersForObject
961
1035
  });
962
1036
  };
@@ -966,38 +1040,38 @@ var FullPresence = (props) => {
966
1040
  if (members.length === 0) {
967
1041
  return null;
968
1042
  }
969
- return /* @__PURE__ */ React16.createElement(AvatarGroup.Root, {
1043
+ return /* @__PURE__ */ React17.createElement(AvatarGroup.Root, {
970
1044
  size,
971
1045
  classNames: "mbs-2 mie-4",
972
1046
  "data-testid": "spacePlugin.presence"
973
- }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ React16.createElement(Tooltip2.Root, {
1047
+ }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ React17.createElement(Tooltip2.Root, {
974
1048
  key: member.identity.identityKey.toHex()
975
- }, /* @__PURE__ */ React16.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React16.createElement(PrensenceAvatar, {
1049
+ }, /* @__PURE__ */ React17.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React17.createElement(PrensenceAvatar, {
976
1050
  identity: member.identity,
977
1051
  group: true,
978
1052
  match: member.currentlyAttended,
979
1053
  index: members.length - i,
980
1054
  onClick: () => onMemberClick?.(member)
981
- })), /* @__PURE__ */ React16.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React16.createElement(Tooltip2.Content, {
1055
+ })), /* @__PURE__ */ React17.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React17.createElement(Tooltip2.Content, {
982
1056
  side: "bottom"
983
- }, /* @__PURE__ */ React16.createElement("span", null, getName(member.identity)), /* @__PURE__ */ React16.createElement(Tooltip2.Arrow, null))))), members.length > 3 && /* @__PURE__ */ React16.createElement(Tooltip2.Root, null, /* @__PURE__ */ React16.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React16.createElement(AvatarGroupItem.Root, {
1057
+ }, /* @__PURE__ */ React17.createElement("span", null, getName(member.identity)), /* @__PURE__ */ React17.createElement(Tooltip2.Arrow, null))))), members.length > 3 && /* @__PURE__ */ React17.createElement(Tooltip2.Root, null, /* @__PURE__ */ React17.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React17.createElement(AvatarGroupItem.Root, {
984
1058
  status: "inactive"
985
- }, /* @__PURE__ */ React16.createElement(Avatar.Frame, {
1059
+ }, /* @__PURE__ */ React17.createElement(Avatar.Frame, {
986
1060
  style: {
987
1061
  zIndex: members.length - 4
988
1062
  }
989
- }, /* @__PURE__ */ React16.createElement(Avatar.Fallback, {
1063
+ }, /* @__PURE__ */ React17.createElement(Avatar.Fallback, {
990
1064
  text: `+${members.length - 3}`
991
- })))), /* @__PURE__ */ React16.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React16.createElement(Tooltip2.Content, {
1065
+ })))), /* @__PURE__ */ React17.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React17.createElement(Tooltip2.Content, {
992
1066
  side: "bottom"
993
- }, /* @__PURE__ */ React16.createElement(Tooltip2.Arrow, null), /* @__PURE__ */ React16.createElement(List2, {
1067
+ }, /* @__PURE__ */ React17.createElement(Tooltip2.Arrow, null), /* @__PURE__ */ React17.createElement(List2, {
994
1068
  classNames: "max-h-56 overflow-y-auto"
995
- }, members.map((member) => /* @__PURE__ */ React16.createElement(ListItem2.Root, {
1069
+ }, members.map((member) => /* @__PURE__ */ React17.createElement(ListItem2.Root, {
996
1070
  key: member.identity.identityKey.toHex(),
997
1071
  classNames: "flex gap-2 items-center cursor-pointer mbe-2",
998
1072
  onClick: () => onMemberClick?.(member),
999
1073
  "data-testid": "identity-list-item"
1000
- }, /* @__PURE__ */ React16.createElement(PrensenceAvatar, {
1074
+ }, /* @__PURE__ */ React17.createElement(PrensenceAvatar, {
1001
1075
  identity: member.identity,
1002
1076
  showName: true,
1003
1077
  match: member.currentlyAttended
@@ -1007,10 +1081,10 @@ var PrensenceAvatar = ({ identity, showName, match, group, index, onClick }) =>
1007
1081
  const Root = group ? AvatarGroupItem.Root : Avatar.Root;
1008
1082
  const status = match ? "current" : "active";
1009
1083
  const fallbackValue = keyToFallback(identity.identityKey);
1010
- return /* @__PURE__ */ React16.createElement(Root, {
1084
+ return /* @__PURE__ */ React17.createElement(Root, {
1011
1085
  status,
1012
1086
  hue: identity.profile?.data?.hue || fallbackValue.hue
1013
- }, /* @__PURE__ */ React16.createElement(Avatar.Frame, {
1087
+ }, /* @__PURE__ */ React17.createElement(Avatar.Frame, {
1014
1088
  "data-testid": "spacePlugin.presence.member",
1015
1089
  "data-status": status,
1016
1090
  ...index ? {
@@ -1019,9 +1093,9 @@ var PrensenceAvatar = ({ identity, showName, match, group, index, onClick }) =>
1019
1093
  }
1020
1094
  } : {},
1021
1095
  onClick: () => onClick?.()
1022
- }, /* @__PURE__ */ React16.createElement(Avatar.Fallback, {
1096
+ }, /* @__PURE__ */ React17.createElement(Avatar.Fallback, {
1023
1097
  text: identity.profile?.data?.emoji || fallbackValue.emoji
1024
- })), showName && /* @__PURE__ */ React16.createElement(Avatar.Label, {
1098
+ })), showName && /* @__PURE__ */ React17.createElement(Avatar.Label, {
1025
1099
  classNames: "text-sm truncate pli-2"
1026
1100
  }, getName(identity)));
1027
1101
  };
@@ -1049,52 +1123,53 @@ var SmallPresenceLive = ({ id, open, viewers }) => {
1049
1123
  }, [
1050
1124
  viewers
1051
1125
  ]);
1052
- return /* @__PURE__ */ React16.createElement(SmallPresence, {
1126
+ return /* @__PURE__ */ React17.createElement(SmallPresence, {
1053
1127
  count: activeViewers.length,
1054
1128
  attended: isAttended,
1055
1129
  containsAttended
1056
1130
  });
1057
1131
  };
1058
1132
  var SmallPresence = ({ count = 0, attended, containsAttended }) => {
1059
- const { t } = useTranslation15(SPACE_PLUGIN);
1060
- return /* @__PURE__ */ React16.createElement(Tooltip2.Root, null, /* @__PURE__ */ React16.createElement(Tooltip2.Trigger, {
1133
+ const { t } = useTranslation16(SPACE_PLUGIN);
1134
+ return /* @__PURE__ */ React17.createElement(Tooltip2.Root, null, /* @__PURE__ */ React17.createElement(Tooltip2.Trigger, {
1061
1135
  asChild: true
1062
- }, /* @__PURE__ */ React16.createElement(AttentionGlyph, {
1136
+ }, /* @__PURE__ */ React17.createElement(AttentionGlyph, {
1063
1137
  attended,
1064
1138
  containsAttended,
1065
1139
  presence: count > 1 ? "many" : count === 1 ? "one" : "none",
1066
1140
  classNames: "self-center mie-1"
1067
- })), /* @__PURE__ */ React16.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React16.createElement(Tooltip2.Content, {
1141
+ })), /* @__PURE__ */ React17.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React17.createElement(Tooltip2.Content, {
1068
1142
  side: "bottom"
1069
- }, /* @__PURE__ */ React16.createElement("span", null, t("presence label", {
1143
+ }, /* @__PURE__ */ React17.createElement("span", null, t("presence label", {
1070
1144
  count
1071
- })), /* @__PURE__ */ React16.createElement(Tooltip2.Arrow, null))));
1145
+ })), /* @__PURE__ */ React17.createElement(Tooltip2.Arrow, null))));
1072
1146
  };
1073
1147
 
1074
1148
  // packages/plugins/plugin-space/src/components/SpacePluginSettings.tsx
1075
- import React17 from "react";
1076
- import { Input as Input4, useTranslation as useTranslation16 } from "@dxos/react-ui";
1149
+ import React18 from "react";
1150
+ import { Input as Input4, useTranslation as useTranslation17 } from "@dxos/react-ui";
1077
1151
  import { DeprecatedFormContainer, DeprecatedFormInput } from "@dxos/react-ui-form";
1078
1152
  var SpacePluginSettings = ({ settings }) => {
1079
- const { t } = useTranslation16(SPACE_PLUGIN);
1080
- return /* @__PURE__ */ React17.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React17.createElement(DeprecatedFormInput, {
1153
+ const { t } = useTranslation17(SPACE_PLUGIN);
1154
+ return /* @__PURE__ */ React18.createElement(DeprecatedFormContainer, null, /* @__PURE__ */ React18.createElement(DeprecatedFormInput, {
1081
1155
  label: t("show hidden spaces label")
1082
- }, /* @__PURE__ */ React17.createElement(Input4.Switch, {
1156
+ }, /* @__PURE__ */ React18.createElement(Input4.Switch, {
1083
1157
  checked: settings.showHidden,
1084
1158
  onCheckedChange: (checked) => settings.showHidden = !!checked
1085
1159
  })));
1086
1160
  };
1087
1161
 
1088
1162
  // packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsPanel.tsx
1089
- import React18, { useCallback as useCallback11, useState as useState9 } from "react";
1163
+ import React19, { useCallback as useCallback11, useState as useState9 } from "react";
1090
1164
  import { log as log3 } from "@dxos/log";
1091
1165
  import { EdgeReplicationSetting } from "@dxos/protocols/proto/dxos/echo/metadata";
1092
1166
  import { useClient as useClient6 } from "@dxos/react-client";
1093
- import { Input as Input5, useTranslation as useTranslation17 } from "@dxos/react-ui";
1167
+ import { Input as Input5, Toolbar, useTranslation as useTranslation18 } from "@dxos/react-ui";
1094
1168
  import { DeprecatedFormContainer as DeprecatedFormContainer2, DeprecatedFormInput as DeprecatedFormInput2 } from "@dxos/react-ui-form";
1095
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsPanel.tsx";
1096
- var SpaceSettingsPanel = ({ classNames, space }) => {
1097
- const { t } = useTranslation17(SPACE_PLUGIN);
1169
+ import { HuePicker, IconPicker } from "@dxos/react-ui-pickers";
1170
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsPanel.tsx";
1171
+ var SpaceSettingsPanel = ({ space }) => {
1172
+ const { t } = useTranslation18(SPACE_PLUGIN);
1098
1173
  const client = useClient6();
1099
1174
  const edgeEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.echoReplicator);
1100
1175
  const [edgeReplication, setEdgeReplication] = useState9(space.internal.data.edgeReplication === EdgeReplicationSetting.ENABLED);
@@ -1102,8 +1177,8 @@ var SpaceSettingsPanel = ({ classNames, space }) => {
1102
1177
  setEdgeReplication(next);
1103
1178
  await space?.internal.setEdgeReplicationPreference(next ? EdgeReplicationSetting.ENABLED : EdgeReplicationSetting.DISABLED).catch((err) => {
1104
1179
  log3.catch(err, void 0, {
1105
- F: __dxlog_file3,
1106
- L: 35,
1180
+ F: __dxlog_file5,
1181
+ L: 36,
1107
1182
  S: void 0,
1108
1183
  C: (f, a) => f(...a)
1109
1184
  });
@@ -1112,32 +1187,48 @@ var SpaceSettingsPanel = ({ classNames, space }) => {
1112
1187
  }, [
1113
1188
  space
1114
1189
  ]);
1115
- return /* @__PURE__ */ React18.createElement(DeprecatedFormContainer2, null, /* @__PURE__ */ React18.createElement(DeprecatedFormInput2, {
1190
+ return /* @__PURE__ */ React19.createElement(DeprecatedFormContainer2, null, /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1116
1191
  label: t("name label")
1117
- }, /* @__PURE__ */ React18.createElement(Input5.TextInput, {
1192
+ }, /* @__PURE__ */ React19.createElement(Input5.TextInput, {
1118
1193
  placeholder: t("unnamed space label"),
1119
1194
  value: space.properties.name ?? "",
1120
1195
  onChange: (event) => {
1121
1196
  space.properties.name = event.target.value;
1122
1197
  }
1123
- })), edgeEnabled && /* @__PURE__ */ React18.createElement(DeprecatedFormInput2, {
1198
+ })), /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1199
+ label: t("icon label")
1200
+ }, /* @__PURE__ */ React19.createElement(Toolbar.Root, null, /* @__PURE__ */ React19.createElement(IconPicker, {
1201
+ value: space.properties.icon,
1202
+ onChange: (nextIcon) => space.properties.icon = nextIcon,
1203
+ onReset: () => {
1204
+ space.properties.icon = void 0;
1205
+ }
1206
+ }))), /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1207
+ label: t("hue label")
1208
+ }, /* @__PURE__ */ React19.createElement(Toolbar.Root, null, /* @__PURE__ */ React19.createElement(HuePicker, {
1209
+ value: space.properties.hue,
1210
+ onChange: (nextHue) => space.properties.hue = nextHue,
1211
+ onReset: () => {
1212
+ space.properties.hue = void 0;
1213
+ }
1214
+ }))), edgeEnabled && /* @__PURE__ */ React19.createElement(DeprecatedFormInput2, {
1124
1215
  label: t("edge replication label")
1125
- }, /* @__PURE__ */ React18.createElement(Input5.Switch, {
1216
+ }, /* @__PURE__ */ React19.createElement(Input5.Switch, {
1126
1217
  checked: edgeReplication,
1127
1218
  onCheckedChange: toggleEdgeReplication
1128
1219
  })));
1129
1220
  };
1130
1221
 
1131
1222
  // packages/plugins/plugin-space/src/components/SpaceSettings/SpaceSettingsDialog.tsx
1132
- import React19, { useMemo as useMemo2, useState as useState10 } from "react";
1133
- import { Surface as Surface2, useCapabilities } from "@dxos/app-framework";
1223
+ import React20, { useMemo, useState as useState10 } from "react";
1224
+ import { Surface as Surface2, useCapabilities as useCapabilities2 } from "@dxos/app-framework";
1134
1225
  import { useClient as useClient7 } from "@dxos/react-client";
1135
- import { Button as Button6, Clipboard, Dialog as Dialog4, Icon as Icon4, toLocalizedString as toLocalizedString3, useTranslation as useTranslation18 } from "@dxos/react-ui";
1226
+ import { Button as Button6, Clipboard, Dialog as Dialog4, Icon as Icon4, toLocalizedString as toLocalizedString3, useTranslation as useTranslation19 } from "@dxos/react-ui";
1136
1227
  import { Tabs } from "@dxos/react-ui-tabs";
1137
1228
  import { SpacePanel } from "@dxos/shell/react";
1138
1229
  var SPACE_SETTINGS_DIALOG = `${SPACE_PLUGIN}/SpaceSettingsDialog`;
1139
1230
  var SpaceSettingsDialog = ({ space, target, createInvitationUrl, initialTab = "members", namesCache }) => {
1140
- const { t } = useTranslation18(SPACE_PLUGIN);
1231
+ const { t } = useTranslation19(SPACE_PLUGIN);
1141
1232
  const client = useClient7();
1142
1233
  const [tabsActivePart, setTabsActivePart] = useState10("list");
1143
1234
  const [selected, setSelected] = useState10(initialTab);
@@ -1146,8 +1237,8 @@ var SpaceSettingsDialog = ({ space, target, createInvitationUrl, initialTab = "m
1146
1237
  personal: client.spaces.default === space,
1147
1238
  namesCache
1148
1239
  });
1149
- const panels = useCapabilities(SpaceCapabilities.SettingsPanel);
1150
- const data = useMemo2(() => ({
1240
+ const panels = useCapabilities2(SpaceCapabilities.SettingsPanel);
1241
+ const data = useMemo(() => ({
1151
1242
  subject: space
1152
1243
  }), [
1153
1244
  space
@@ -1155,76 +1246,76 @@ var SpaceSettingsDialog = ({ space, target, createInvitationUrl, initialTab = "m
1155
1246
  return (
1156
1247
  // TODO(wittjosiah): The tablist dialog pattern is copied from @dxos/plugin-manager.
1157
1248
  // Consider factoring it out to the tabs package.
1158
- /* @__PURE__ */ React19.createElement(Dialog4.Content, {
1249
+ /* @__PURE__ */ React20.createElement(Dialog4.Content, {
1159
1250
  classNames: "p-0 bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden"
1160
- }, /* @__PURE__ */ React19.createElement("div", {
1251
+ }, /* @__PURE__ */ React20.createElement("div", {
1161
1252
  role: "none",
1162
1253
  className: "flex justify-between pbs-2 pis-2 pie-2 @md:pbs-4 @md:pis-4 @md:pie-4"
1163
- }, /* @__PURE__ */ React19.createElement(Dialog4.Title, {
1254
+ }, /* @__PURE__ */ React20.createElement(Dialog4.Title, {
1164
1255
  onClick: () => setTabsActivePart("list"),
1165
1256
  "aria-description": t("click to return to tablist description"),
1166
1257
  classNames: "flex cursor-pointer items-center group/title"
1167
- }, /* @__PURE__ */ React19.createElement(Icon4, {
1258
+ }, /* @__PURE__ */ React20.createElement(Icon4, {
1168
1259
  icon: "ph--caret-left--regular",
1169
1260
  size: 4,
1170
1261
  classNames: [
1171
1262
  "@md:hidden",
1172
1263
  tabsActivePart === "list" && "invisible"
1173
1264
  ]
1174
- }), /* @__PURE__ */ React19.createElement("span", {
1265
+ }), /* @__PURE__ */ React20.createElement("span", {
1175
1266
  className: tabsActivePart !== "list" ? "group-hover/title:underline @md:group-hover/title:no-underline underline-offset-4 decoration-1" : ""
1176
- }, toLocalizedString3(name, t))), /* @__PURE__ */ React19.createElement(Dialog4.Close, {
1267
+ }, toLocalizedString3(name, t))), /* @__PURE__ */ React20.createElement(Dialog4.Close, {
1177
1268
  asChild: true
1178
- }, /* @__PURE__ */ React19.createElement(Button6, {
1269
+ }, /* @__PURE__ */ React20.createElement(Button6, {
1179
1270
  density: "fine",
1180
1271
  variant: "ghost",
1181
1272
  autoFocus: true
1182
- }, /* @__PURE__ */ React19.createElement(Icon4, {
1273
+ }, /* @__PURE__ */ React20.createElement(Icon4, {
1183
1274
  icon: "ph--x--regular",
1184
1275
  size: 4
1185
- })))), /* @__PURE__ */ React19.createElement(Tabs.Root, {
1276
+ })))), /* @__PURE__ */ React20.createElement(Tabs.Root, {
1186
1277
  orientation: "vertical",
1187
1278
  value: selected,
1188
1279
  onValueChange: setSelected,
1189
1280
  activePart: tabsActivePart,
1190
1281
  onActivePartChange: setTabsActivePart,
1191
1282
  classNames: "flex flex-col flex-1 mbs-2"
1192
- }, /* @__PURE__ */ React19.createElement(Tabs.Viewport, {
1283
+ }, /* @__PURE__ */ React20.createElement(Tabs.Viewport, {
1193
1284
  classNames: "flex-1 min-bs-0"
1194
- }, /* @__PURE__ */ React19.createElement("div", {
1285
+ }, /* @__PURE__ */ React20.createElement("div", {
1195
1286
  role: "none",
1196
1287
  className: "overflow-y-auto pli-3 @md:pis-2 @md:pie-0 mbe-4 border-r border-separator"
1197
- }, /* @__PURE__ */ React19.createElement(Tabs.Tablist, {
1288
+ }, /* @__PURE__ */ React20.createElement(Tabs.Tablist, {
1198
1289
  classNames: "flex flex-col max-bs-none min-is-[200px] gap-4 overflow-y-auto"
1199
- }, /* @__PURE__ */ React19.createElement("div", {
1290
+ }, /* @__PURE__ */ React20.createElement("div", {
1200
1291
  role: "none",
1201
1292
  className: "flex flex-col ml-1"
1202
- }, /* @__PURE__ */ React19.createElement(Tabs.Tab, {
1293
+ }, /* @__PURE__ */ React20.createElement(Tabs.Tab, {
1203
1294
  value: "settings"
1204
- }, t("settings tab label")), /* @__PURE__ */ React19.createElement(Tabs.Tab, {
1295
+ }, t("settings tab label")), /* @__PURE__ */ React20.createElement(Tabs.Tab, {
1205
1296
  value: "members",
1206
1297
  disabled: locked
1207
- }, t("members tab label")), panels.map((panel) => /* @__PURE__ */ React19.createElement(Tabs.Tab, {
1298
+ }, t("members tab label")), panels.map((panel) => /* @__PURE__ */ React20.createElement(Tabs.Tab, {
1208
1299
  key: panel.id,
1209
1300
  value: panel.id
1210
- }, toLocalizedString3(panel.label, t)))))), /* @__PURE__ */ React19.createElement(Tabs.Tabpanel, {
1301
+ }, toLocalizedString3(panel.label, t)))))), /* @__PURE__ */ React20.createElement(Tabs.Tabpanel, {
1211
1302
  value: "settings",
1212
1303
  classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
1213
- }, /* @__PURE__ */ React19.createElement(SpaceSettingsPanel, {
1304
+ }, /* @__PURE__ */ React20.createElement(SpaceSettingsPanel, {
1214
1305
  space
1215
- })), /* @__PURE__ */ React19.createElement(Tabs.Tabpanel, {
1306
+ })), /* @__PURE__ */ React20.createElement(Tabs.Tabpanel, {
1216
1307
  value: "members",
1217
1308
  classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
1218
- }, /* @__PURE__ */ React19.createElement(Clipboard.Provider, null, /* @__PURE__ */ React19.createElement(SpacePanel, {
1309
+ }, /* @__PURE__ */ React20.createElement(Clipboard.Provider, null, /* @__PURE__ */ React20.createElement(SpacePanel, {
1219
1310
  space,
1220
1311
  hideHeading: true,
1221
1312
  target,
1222
1313
  createInvitationUrl
1223
- }))), panels.map((panel) => /* @__PURE__ */ React19.createElement(Tabs.Tabpanel, {
1314
+ }))), panels.map((panel) => /* @__PURE__ */ React20.createElement(Tabs.Tabpanel, {
1224
1315
  key: panel.id,
1225
1316
  value: panel.id,
1226
1317
  classNames: "pli-3 @md:pli-5 max-bs-dvh overflow-y-auto"
1227
- }, /* @__PURE__ */ React19.createElement(Surface2, {
1318
+ }, /* @__PURE__ */ React20.createElement(Surface2, {
1228
1319
  role: `space-settings--${panel.id}`,
1229
1320
  data
1230
1321
  }))))))
@@ -1232,12 +1323,12 @@ var SpaceSettingsDialog = ({ space, target, createInvitationUrl, initialTab = "m
1232
1323
  };
1233
1324
 
1234
1325
  // packages/plugins/plugin-space/src/components/SyncStatus/InlineSyncStatus.tsx
1235
- import React20, { useEffect as useEffect6, useState as useState12 } from "react";
1326
+ import React21, { useEffect as useEffect6, useState as useState12 } from "react";
1236
1327
  import { useAppGraph as useAppGraph3 } from "@dxos/app-framework";
1237
1328
  import { QueryEdgeStatusResponse } from "@dxos/protocols/proto/dxos/client/services";
1238
1329
  import { EdgeReplicationSetting as EdgeReplicationSetting2 } from "@dxos/protocols/proto/dxos/echo/metadata";
1239
1330
  import { useClient as useClient9 } from "@dxos/react-client";
1240
- import { Tooltip as Tooltip3, useTranslation as useTranslation19 } from "@dxos/react-ui";
1331
+ import { Tooltip as Tooltip3, useTranslation as useTranslation20 } from "@dxos/react-ui";
1241
1332
  import { AttentionGlyph as AttentionGlyph2, useAttended as useAttended2, useAttention as useAttention2 } from "@dxos/react-ui-attention";
1242
1333
 
1243
1334
  // packages/plugins/plugin-space/src/components/SyncStatus/sync-state.ts
@@ -1245,7 +1336,7 @@ import { useEffect as useEffect5, useState as useState11 } from "react";
1245
1336
  import { Context } from "@dxos/context";
1246
1337
  import { EdgeService } from "@dxos/protocols";
1247
1338
  import { useClient as useClient8 } from "@dxos/react-client";
1248
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/sync-state.ts";
1339
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/sync-state.ts";
1249
1340
  var createEmptyEdgeSyncState = () => ({
1250
1341
  missingOnLocal: 0,
1251
1342
  missingOnRemote: 0,
@@ -1269,7 +1360,7 @@ var useSyncState = () => {
1269
1360
  const [spaceState, setSpaceState] = useState11({});
1270
1361
  useEffect5(() => {
1271
1362
  const ctx = new Context(void 0, {
1272
- F: __dxlog_file4,
1363
+ F: __dxlog_file6,
1273
1364
  L: 48
1274
1365
  });
1275
1366
  const createSubscriptions = (spaces) => {
@@ -1304,7 +1395,7 @@ var useSpaceSyncState = (space) => {
1304
1395
  const [spaceState, setSpaceState] = useState11();
1305
1396
  useEffect5(() => {
1306
1397
  const ctx = new Context(void 0, {
1307
- F: __dxlog_file4,
1398
+ F: __dxlog_file6,
1308
1399
  L: 87
1309
1400
  });
1310
1401
  space.crud.subscribeToSyncState(ctx, ({ peers = [] }) => {
@@ -1336,7 +1427,7 @@ var useEdgeStatus = () => {
1336
1427
  return status;
1337
1428
  };
1338
1429
  var InlineSyncStatus = ({ space, open }) => {
1339
- const { t } = useTranslation19(SPACE_PLUGIN);
1430
+ const { t } = useTranslation20(SPACE_PLUGIN);
1340
1431
  const id = space.id;
1341
1432
  const { hasAttention, isAncestor, isRelated } = useAttention2(id);
1342
1433
  const isAttended = hasAttention || isAncestor || isRelated;
@@ -1349,32 +1440,32 @@ var InlineSyncStatus = ({ space, open }) => {
1349
1440
  const edgeSyncEnabled = space.internal.data.edgeReplication === EdgeReplicationSetting2.ENABLED;
1350
1441
  const syncState = useSpaceSyncState(space);
1351
1442
  const syncing = connectedToEdge && edgeSyncEnabled && syncState && syncState.missingOnLocal > 0;
1352
- return /* @__PURE__ */ React20.createElement(Tooltip3.Root, null, /* @__PURE__ */ React20.createElement(Tooltip3.Trigger, {
1443
+ return /* @__PURE__ */ React21.createElement(Tooltip3.Root, null, /* @__PURE__ */ React21.createElement(Tooltip3.Trigger, {
1353
1444
  asChild: true
1354
- }, /* @__PURE__ */ React20.createElement(AttentionGlyph2, {
1445
+ }, /* @__PURE__ */ React21.createElement(AttentionGlyph2, {
1355
1446
  syncing,
1356
1447
  attended: isAttended,
1357
1448
  containsAttended,
1358
1449
  classNames: "self-center mie-1"
1359
- })), /* @__PURE__ */ React20.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React20.createElement(Tooltip3.Content, {
1450
+ })), /* @__PURE__ */ React21.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React21.createElement(Tooltip3.Content, {
1360
1451
  side: "bottom",
1361
1452
  classNames: "z-[70]"
1362
- }, /* @__PURE__ */ React20.createElement("span", null, t("syncing label")), /* @__PURE__ */ React20.createElement(Tooltip3.Arrow, null))));
1453
+ }, /* @__PURE__ */ React21.createElement("span", null, t("syncing label")), /* @__PURE__ */ React21.createElement(Tooltip3.Arrow, null))));
1363
1454
  };
1364
1455
 
1365
1456
  // packages/plugins/plugin-space/src/components/SyncStatus/SyncStatus.tsx
1366
- import React22, { useCallback as useCallback12, useEffect as useEffect8, useState as useState14 } from "react";
1457
+ import React23, { useCallback as useCallback12, useEffect as useEffect8, useState as useState14 } from "react";
1367
1458
  import { StatusBar } from "@dxos/plugin-status-bar";
1368
1459
  import { useClient as useClient11 } from "@dxos/react-client";
1369
- import { Icon as Icon6, Input as Input6, Popover as Popover3, useTranslation as useTranslation21 } from "@dxos/react-ui";
1460
+ import { Icon as Icon6, Input as Input6, Popover as Popover3, useTranslation as useTranslation22 } from "@dxos/react-ui";
1370
1461
  import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
1371
1462
  import { mx as mx6 } from "@dxos/react-ui-theme";
1372
1463
 
1373
1464
  // packages/plugins/plugin-space/src/components/SyncStatus/Space.tsx
1374
- import React21, { useEffect as useEffect7, useState as useState13 } from "react";
1465
+ import React22, { useEffect as useEffect7, useState as useState13 } from "react";
1375
1466
  import { useClient as useClient10 } from "@dxos/react-client";
1376
1467
  import { useSpace } from "@dxos/react-client/echo";
1377
- import { Icon as Icon5, toLocalizedString as toLocalizedString4, useTranslation as useTranslation20 } from "@dxos/react-ui";
1468
+ import { Icon as Icon5, toLocalizedString as toLocalizedString4, useTranslation as useTranslation21 } from "@dxos/react-ui";
1378
1469
  import { mx as mx5 } from "@dxos/react-ui-theme";
1379
1470
  var SYNC_STALLED_TIMEOUT = 5e3;
1380
1471
  var styles = {
@@ -1406,7 +1497,7 @@ var useActive = (count) => {
1406
1497
  return active;
1407
1498
  };
1408
1499
  var SpaceRowContainer = ({ spaceId, state }) => {
1409
- const { t } = useTranslation20(SPACE_PLUGIN);
1500
+ const { t } = useTranslation21(SPACE_PLUGIN);
1410
1501
  const client = useClient10();
1411
1502
  const space = useSpace(spaceId);
1412
1503
  if (!space) {
@@ -1415,7 +1506,7 @@ var SpaceRowContainer = ({ spaceId, state }) => {
1415
1506
  const spaceName = toLocalizedString4(getSpaceDisplayName(space, {
1416
1507
  personal: space === client.spaces.default
1417
1508
  }), t);
1418
- return /* @__PURE__ */ React21.createElement(SpaceRow, {
1509
+ return /* @__PURE__ */ React22.createElement(SpaceRow, {
1419
1510
  spaceId,
1420
1511
  spaceName,
1421
1512
  state
@@ -1424,19 +1515,19 @@ var SpaceRowContainer = ({ spaceId, state }) => {
1424
1515
  var SpaceRow = ({ spaceId, spaceName, state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote } }) => {
1425
1516
  const downActive = useActive(localDocumentCount);
1426
1517
  const upActive = useActive(remoteDocumentCount);
1427
- return /* @__PURE__ */ React21.createElement("div", {
1518
+ return /* @__PURE__ */ React22.createElement("div", {
1428
1519
  className: "flex items-center mx-0.5 gap-0.5 cursor-pointer",
1429
1520
  title: spaceId,
1430
1521
  onClick: () => {
1431
1522
  void navigator.clipboard.writeText(spaceId);
1432
1523
  }
1433
- }, /* @__PURE__ */ React21.createElement("span", {
1524
+ }, /* @__PURE__ */ React22.createElement("span", {
1434
1525
  className: "is-1/2 truncate"
1435
- }, spaceName), /* @__PURE__ */ React21.createElement(Icon5, {
1526
+ }, spaceName), /* @__PURE__ */ React22.createElement(Icon5, {
1436
1527
  icon: "ph--arrow-fat-line-left--regular",
1437
1528
  size: 3,
1438
1529
  classNames: mx5(downActive && "animate-[pulse_1s_infinite]")
1439
- }), /* @__PURE__ */ React21.createElement(Candle, {
1530
+ }), /* @__PURE__ */ React22.createElement(Candle, {
1440
1531
  up: {
1441
1532
  count: remoteDocumentCount,
1442
1533
  total: remoteDocumentCount + missingOnRemote
@@ -1446,44 +1537,44 @@ var SpaceRow = ({ spaceId, spaceName, state: { localDocumentCount, remoteDocumen
1446
1537
  total: localDocumentCount + missingOnLocal
1447
1538
  },
1448
1539
  title: spaceId
1449
- }), /* @__PURE__ */ React21.createElement(Icon5, {
1540
+ }), /* @__PURE__ */ React22.createElement(Icon5, {
1450
1541
  icon: "ph--arrow-fat-line-right--regular",
1451
1542
  size: 3,
1452
1543
  classNames: mx5(upActive && "animate-[pulse_1s_step-start_infinite]")
1453
1544
  }));
1454
1545
  };
1455
1546
  var Candle = ({ classNames, up, down }) => {
1456
- return /* @__PURE__ */ React21.createElement("div", {
1547
+ return /* @__PURE__ */ React22.createElement("div", {
1457
1548
  className: mx5("grid grid-cols-[1fr_2rem_1fr] w-full h-3", classNames)
1458
- }, /* @__PURE__ */ React21.createElement(Bar, {
1549
+ }, /* @__PURE__ */ React22.createElement(Bar, {
1459
1550
  classNames: "justify-end",
1460
1551
  ...up
1461
- }), /* @__PURE__ */ React21.createElement("div", {
1552
+ }), /* @__PURE__ */ React22.createElement("div", {
1462
1553
  className: "relative"
1463
- }, /* @__PURE__ */ React21.createElement("div", {
1554
+ }, /* @__PURE__ */ React22.createElement("div", {
1464
1555
  className: mx5("absolute inset-0 flex items-center justify-center text-xs", styles.barBg)
1465
- }, up.total)), /* @__PURE__ */ React21.createElement(Bar, down));
1556
+ }, up.total)), /* @__PURE__ */ React22.createElement(Bar, down));
1466
1557
  };
1467
1558
  var Bar = ({ classNames, count, total }) => {
1468
1559
  let p = count / total * 100;
1469
1560
  if (count < total) {
1470
1561
  p = Math.min(p, 95);
1471
1562
  }
1472
- return /* @__PURE__ */ React21.createElement("div", {
1563
+ return /* @__PURE__ */ React22.createElement("div", {
1473
1564
  className: mx5("relative flex w-full", styles.barBg, classNames)
1474
- }, /* @__PURE__ */ React21.createElement("div", {
1565
+ }, /* @__PURE__ */ React22.createElement("div", {
1475
1566
  className: mx5("shrink-0", styles.barFg),
1476
1567
  style: {
1477
1568
  width: `${p}%`
1478
1569
  }
1479
- }), count !== total && /* @__PURE__ */ React21.createElement("div", {
1570
+ }), count !== total && /* @__PURE__ */ React22.createElement("div", {
1480
1571
  className: "absolute top-0 bottom-0 flex items-center mx-0.5 text-black text-xs"
1481
1572
  }, count));
1482
1573
  };
1483
1574
 
1484
1575
  // packages/plugins/plugin-space/src/components/SyncStatus/save-tracker.ts
1485
1576
  import { Context as Context2 } from "@dxos/context";
1486
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/save-tracker.ts";
1577
+ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SyncStatus/save-tracker.ts";
1487
1578
  var createClientSaveTracker = (client, cb) => {
1488
1579
  const unsubscribeCallbacks = {};
1489
1580
  const state = {};
@@ -1511,7 +1602,7 @@ var createClientSaveTracker = (client, cb) => {
1511
1602
  };
1512
1603
  var createSpaceSaveTracker = (space, cb) => {
1513
1604
  const ctx = new Context2(void 0, {
1514
- F: __dxlog_file5,
1605
+ F: __dxlog_file7,
1515
1606
  L: 40
1516
1607
  });
1517
1608
  void space.waitUntilReady().then(() => {
@@ -1582,13 +1673,13 @@ var SyncStatus = () => {
1582
1673
  setSaved(state2 === "saved");
1583
1674
  });
1584
1675
  }, []);
1585
- return /* @__PURE__ */ React22.createElement(SyncStatusIndicator, {
1676
+ return /* @__PURE__ */ React23.createElement(SyncStatusIndicator, {
1586
1677
  state,
1587
1678
  saved
1588
1679
  });
1589
1680
  };
1590
1681
  var SyncStatusIndicator = ({ state, saved }) => {
1591
- const { t } = useTranslation21(SPACE_PLUGIN);
1682
+ const { t } = useTranslation22(SPACE_PLUGIN);
1592
1683
  const summary = getSyncSummary(state);
1593
1684
  const offline = Object.values(state).length === 0;
1594
1685
  const needsToUpload = summary.differentDocuments > 0 || summary.missingOnRemote > 0;
@@ -1615,58 +1706,58 @@ var SyncStatusIndicator = ({ state, saved }) => {
1615
1706
  needsToDownload
1616
1707
  ]);
1617
1708
  const title = t(`${status} label`);
1618
- const icon = /* @__PURE__ */ React22.createElement(Icon6, {
1709
+ const icon = /* @__PURE__ */ React23.createElement(Icon6, {
1619
1710
  icon: getIcon(status),
1620
1711
  size: 4,
1621
1712
  classNames
1622
1713
  });
1623
1714
  if (offline) {
1624
- return /* @__PURE__ */ React22.createElement(StatusBar.Item, {
1715
+ return /* @__PURE__ */ React23.createElement(StatusBar.Item, {
1625
1716
  title
1626
1717
  }, icon);
1627
1718
  } else {
1628
- return /* @__PURE__ */ React22.createElement(Popover3.Root, null, /* @__PURE__ */ React22.createElement(Popover3.Trigger, {
1719
+ return /* @__PURE__ */ React23.createElement(Popover3.Root, null, /* @__PURE__ */ React23.createElement(Popover3.Trigger, {
1629
1720
  asChild: true
1630
- }, /* @__PURE__ */ React22.createElement(StatusBar.Button, {
1721
+ }, /* @__PURE__ */ React23.createElement(StatusBar.Button, {
1631
1722
  title
1632
- }, icon)), /* @__PURE__ */ React22.createElement(Popover3.Portal, null, /* @__PURE__ */ React22.createElement(Popover3.Content, null, /* @__PURE__ */ React22.createElement(SyncStatusDetail, {
1723
+ }, icon)), /* @__PURE__ */ React23.createElement(Popover3.Portal, null, /* @__PURE__ */ React23.createElement(Popover3.Content, null, /* @__PURE__ */ React23.createElement(SyncStatusDetail, {
1633
1724
  state,
1634
1725
  summary,
1635
1726
  debug: false
1636
- }), /* @__PURE__ */ React22.createElement(Popover3.Arrow, null))));
1727
+ }), /* @__PURE__ */ React23.createElement(Popover3.Arrow, null))));
1637
1728
  }
1638
1729
  };
1639
1730
  var SyncStatusDetail = ({ classNames, state, summary, debug }) => {
1640
1731
  const [showAll, setShowAll] = useState14(false);
1641
- const { t } = useTranslation21(SPACE_PLUGIN);
1732
+ const { t } = useTranslation22(SPACE_PLUGIN);
1642
1733
  const entries = Object.entries(state).filter(([_, value]) => showAll || value.missingOnLocal + value.missingOnRemote > 0).toSorted(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
1643
1734
  const handleCheckedChange = useCallback12((state2) => setShowAll(state2), [
1644
1735
  setShowAll
1645
1736
  ]);
1646
- return /* @__PURE__ */ React22.createElement("div", {
1737
+ return /* @__PURE__ */ React23.createElement("div", {
1647
1738
  className: mx6("flex flex-col gap-3 p-2 text-xs min-w-96", classNames)
1648
- }, /* @__PURE__ */ React22.createElement("div", {
1739
+ }, /* @__PURE__ */ React23.createElement("div", {
1649
1740
  role: "none",
1650
1741
  className: "flex items-center"
1651
- }, /* @__PURE__ */ React22.createElement("h1", {
1742
+ }, /* @__PURE__ */ React23.createElement("h1", {
1652
1743
  className: "flex-1"
1653
- }, t("sync status title")), /* @__PURE__ */ React22.createElement("div", {
1744
+ }, t("sync status title")), /* @__PURE__ */ React23.createElement("div", {
1654
1745
  className: "flex items-center gap-2"
1655
- }, /* @__PURE__ */ React22.createElement(Input6.Root, null, /* @__PURE__ */ React22.createElement(Input6.Label, {
1746
+ }, /* @__PURE__ */ React23.createElement(Input6.Root, null, /* @__PURE__ */ React23.createElement(Input6.Label, {
1656
1747
  classNames: "text-xs"
1657
- }, t("show all label")), /* @__PURE__ */ React22.createElement(Input6.Checkbox, {
1748
+ }, t("show all label")), /* @__PURE__ */ React23.createElement(Input6.Checkbox, {
1658
1749
  checked: showAll,
1659
1750
  onCheckedChange: handleCheckedChange
1660
- })))), /* @__PURE__ */ React22.createElement("div", {
1751
+ })))), /* @__PURE__ */ React23.createElement("div", {
1661
1752
  className: "flex flex-col gap-2"
1662
- }, entries.length === 0 && /* @__PURE__ */ React22.createElement("div", {
1753
+ }, entries.length === 0 && /* @__PURE__ */ React23.createElement("div", {
1663
1754
  role: "none",
1664
1755
  className: "flex justify-center"
1665
- }, t("no sync status label")), entries.map(([spaceId, state2]) => /* @__PURE__ */ React22.createElement(SpaceRowContainer, {
1756
+ }, t("no sync status label")), entries.map(([spaceId, state2]) => /* @__PURE__ */ React23.createElement(SpaceRowContainer, {
1666
1757
  key: spaceId,
1667
1758
  spaceId,
1668
1759
  state: state2
1669
- }))), debug && /* @__PURE__ */ React22.createElement(SyntaxHighlighter, {
1760
+ }))), debug && /* @__PURE__ */ React23.createElement(SyntaxHighlighter, {
1670
1761
  language: "json"
1671
1762
  }, JSON.stringify(summary, null, 2)));
1672
1763
  };
@@ -1685,6 +1776,8 @@ export {
1685
1776
  JoinDialog,
1686
1777
  MenuFooter,
1687
1778
  PersistenceStatus,
1779
+ POPOVER_ADD_SPACE,
1780
+ PopoverAddSpace,
1688
1781
  POPOVER_RENAME_OBJECT,
1689
1782
  PopoverRenameObject,
1690
1783
  POPOVER_RENAME_SPACE,
@@ -1709,8 +1802,9 @@ export {
1709
1802
  IntentResolver,
1710
1803
  ReactRoot,
1711
1804
  ReactSurface,
1805
+ Schema,
1712
1806
  SpaceSettings,
1713
1807
  SpaceState,
1714
1808
  SpacesReady
1715
1809
  };
1716
- //# sourceMappingURL=chunk-4HICD7AU.mjs.map
1810
+ //# sourceMappingURL=chunk-DIKRH2IK.mjs.map