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