@dxos/react-client 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33

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 (397) hide show
  1. package/.storybook/main.mts +9 -0
  2. package/.storybook/preview.mts +8 -0
  3. package/dist/lib/browser/chunk-3LVU7RNK.mjs +16 -0
  4. package/dist/lib/browser/chunk-3LVU7RNK.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-CZMIVAGI.mjs +8 -0
  6. package/dist/lib/browser/chunk-CZMIVAGI.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-XT352YI6.mjs +134 -0
  8. package/dist/lib/browser/chunk-XT352YI6.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-O5SEVDJG.mjs → chunk-YHE6WD44.mjs} +5 -15
  10. package/dist/lib/browser/chunk-YHE6WD44.mjs.map +7 -0
  11. package/dist/lib/browser/devtools/index.mjs +4 -8
  12. package/dist/lib/browser/devtools/index.mjs.map +3 -3
  13. package/dist/lib/browser/echo/index.mjs +58 -127
  14. package/dist/lib/browser/echo/index.mjs.map +4 -4
  15. package/dist/lib/browser/halo/index.mjs +5 -3
  16. package/dist/lib/browser/halo/index.mjs.map +3 -3
  17. package/dist/lib/browser/index.mjs +99 -12
  18. package/dist/lib/browser/index.mjs.map +4 -4
  19. package/dist/lib/browser/invitations/index.mjs +1 -1
  20. package/dist/lib/browser/mesh/index.mjs +2 -1
  21. package/dist/lib/browser/mesh/index.mjs.map +1 -1
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/testing/index.mjs +112 -155
  24. package/dist/lib/browser/testing/index.mjs.map +3 -3
  25. package/dist/lib/node-esm/chunk-CUDKNAMV.mjs +17 -0
  26. package/dist/lib/node-esm/chunk-CUDKNAMV.mjs.map +7 -0
  27. package/dist/lib/node-esm/{chunk-TU2JJLZK.mjs → chunk-RQJPEHDY.mjs} +5 -15
  28. package/dist/lib/node-esm/chunk-RQJPEHDY.mjs.map +7 -0
  29. package/dist/lib/node-esm/chunk-WL3Z5HOH.mjs +135 -0
  30. package/dist/lib/node-esm/chunk-WL3Z5HOH.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-WUTK2IJF.mjs +10 -0
  32. package/dist/lib/node-esm/chunk-WUTK2IJF.mjs.map +7 -0
  33. package/dist/lib/node-esm/devtools/index.mjs +4 -8
  34. package/dist/lib/node-esm/devtools/index.mjs.map +3 -3
  35. package/dist/lib/node-esm/echo/index.mjs +58 -127
  36. package/dist/lib/node-esm/echo/index.mjs.map +4 -4
  37. package/dist/lib/node-esm/halo/index.mjs +5 -3
  38. package/dist/lib/node-esm/halo/index.mjs.map +3 -3
  39. package/dist/lib/node-esm/index.mjs +99 -12
  40. package/dist/lib/node-esm/index.mjs.map +4 -4
  41. package/dist/lib/node-esm/invitations/index.mjs +1 -1
  42. package/dist/lib/node-esm/mesh/index.mjs +2 -1
  43. package/dist/lib/node-esm/mesh/index.mjs.map +1 -1
  44. package/dist/lib/node-esm/meta.json +1 -1
  45. package/dist/lib/node-esm/testing/index.mjs +112 -155
  46. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  47. package/dist/types/src/banner.d.ts.map +1 -1
  48. package/dist/types/src/client/AgentHostingProvider.d.ts.map +1 -1
  49. package/dist/types/src/client/ClientProvider.d.ts +1 -11
  50. package/dist/types/src/client/ClientProvider.d.ts.map +1 -1
  51. package/dist/types/src/client/useClientStatus.d.ts.map +1 -1
  52. package/dist/types/src/devtools/useStream.d.ts.map +1 -1
  53. package/dist/types/src/echo/index.d.ts +2 -2
  54. package/dist/types/src/echo/index.d.ts.map +1 -1
  55. package/dist/types/src/echo/useMembers.d.ts +2 -2
  56. package/dist/types/src/echo/useMembers.d.ts.map +1 -1
  57. package/dist/types/src/echo/useQueue.d.ts +3 -2
  58. package/dist/types/src/echo/useQueue.d.ts.map +1 -1
  59. package/dist/types/src/echo/useSpaceInvitations.d.ts +3 -2
  60. package/dist/types/src/echo/useSpaceInvitations.d.ts.map +1 -1
  61. package/dist/types/src/echo/useSpaceProperties.d.ts +13 -0
  62. package/dist/types/src/echo/useSpaceProperties.d.ts.map +1 -0
  63. package/dist/types/src/echo/useSpaces.d.ts +19 -9
  64. package/dist/types/src/echo/useSpaces.d.ts.map +1 -1
  65. package/dist/types/src/echo/useSubscription.d.ts +1 -1
  66. package/dist/types/src/echo/useSubscription.d.ts.map +1 -1
  67. package/dist/types/src/echo/useSyncState.d.ts +1 -1
  68. package/dist/types/src/echo/useSyncState.d.ts.map +1 -1
  69. package/dist/types/src/halo/Passkey.stories.d.ts +5 -5
  70. package/dist/types/src/halo/Passkey.stories.d.ts.map +1 -1
  71. package/dist/types/src/halo/useHaloInvitations.d.ts.map +1 -1
  72. package/dist/types/src/halo/useKeyStore.d.ts.map +1 -1
  73. package/dist/types/src/invitations/useInvitationStatus.d.ts +1 -1
  74. package/dist/types/src/invitations/useInvitationStatus.d.ts.map +1 -1
  75. package/dist/types/src/testing/ClientRepeater.d.ts +6 -5
  76. package/dist/types/src/testing/ClientRepeater.d.ts.map +1 -1
  77. package/dist/types/src/testing/ClientRepeater.stories.d.ts +6 -10
  78. package/dist/types/src/testing/ClientRepeater.stories.d.ts.map +1 -1
  79. package/dist/types/src/testing/context.d.ts +4 -2
  80. package/dist/types/src/testing/context.d.ts.map +1 -1
  81. package/dist/types/src/testing/util.d.ts.map +1 -1
  82. package/dist/types/src/testing/withClientProvider.d.ts +6 -10
  83. package/dist/types/src/testing/withClientProvider.d.ts.map +1 -1
  84. package/dist/types/src/testing/withClientProvider.stories.d.ts +8 -9
  85. package/dist/types/src/testing/withClientProvider.stories.d.ts.map +1 -1
  86. package/dist/types/tsconfig.tsbuildinfo +1 -1
  87. package/docs/README.md +38 -38
  88. package/moon.yml +3 -2
  89. package/package.json +43 -58
  90. package/src/client/AgentHostingProvider.tsx +1 -1
  91. package/src/client/ClientProvider.test.tsx +2 -2
  92. package/src/client/ClientProvider.tsx +32 -50
  93. package/src/client/useConfig.test.tsx +1 -1
  94. package/src/devtools/useStream.ts +1 -1
  95. package/src/echo/index.ts +2 -2
  96. package/src/echo/useMembers.ts +5 -3
  97. package/src/echo/useQueue.ts +3 -4
  98. package/src/echo/useSpaceInvitations.ts +10 -5
  99. package/src/echo/useSpaceProperties.ts +28 -0
  100. package/src/echo/useSpaces.test.tsx +8 -14
  101. package/src/echo/useSpaces.ts +32 -30
  102. package/src/echo/useSubscription.ts +1 -1
  103. package/src/echo/useSyncState.ts +5 -4
  104. package/src/halo/Passkey.stories.tsx +20 -20
  105. package/src/halo/useDevices.test.tsx +1 -1
  106. package/src/halo/useHaloInvitations.ts +1 -1
  107. package/src/invitations/useInvitationStatus.ts +9 -8
  108. package/src/testing/ClientRepeater.stories.tsx +22 -16
  109. package/src/testing/ClientRepeater.tsx +29 -37
  110. package/src/testing/context.tsx +4 -3
  111. package/src/testing/util.tsx +0 -1
  112. package/src/testing/withClientProvider.stories.tsx +34 -20
  113. package/src/testing/withClientProvider.tsx +77 -94
  114. package/tsconfig.json +3 -6
  115. package/typedoc.json +1 -1
  116. package/vitest.config.ts +10 -16
  117. package/.eslintrc.cjs +0 -12
  118. package/.swc/plugins/v7_linux_x86_64_13.0.0/f45bdff002284d9e8f9ef3f0be909de12da36c049cbcf261ac78fc00abb09a2d +0 -0
  119. package/dist/lib/browser/chunk-AAR7V3KL.mjs +0 -312
  120. package/dist/lib/browser/chunk-AAR7V3KL.mjs.map +0 -7
  121. package/dist/lib/browser/chunk-O5SEVDJG.mjs.map +0 -7
  122. package/dist/lib/node-esm/chunk-TU2JJLZK.mjs.map +0 -7
  123. package/dist/lib/node-esm/chunk-ZTD6HPV2.mjs +0 -314
  124. package/dist/lib/node-esm/chunk-ZTD6HPV2.mjs.map +0 -7
  125. package/dist/types/src/echo/useQuery.d.ts +0 -11
  126. package/dist/types/src/echo/useQuery.d.ts.map +0 -1
  127. package/dist/types/src/echo/useQuery.test.d.ts +0 -2
  128. package/dist/types/src/echo/useQuery.test.d.ts.map +0 -1
  129. package/dist/types/src/echo/useSchema.d.ts +0 -8
  130. package/dist/types/src/echo/useSchema.d.ts.map +0 -1
  131. package/dist/types/src/playwright/playwright.config.d.ts +0 -3
  132. package/dist/types/src/playwright/playwright.config.d.ts.map +0 -1
  133. package/dist/types/src/playwright/smoke.spec.d.ts +0 -2
  134. package/dist/types/src/playwright/smoke.spec.d.ts.map +0 -1
  135. package/src/echo/useQuery.test.tsx +0 -128
  136. package/src/echo/useQuery.ts +0 -56
  137. package/src/echo/useSchema.ts +0 -54
  138. package/src/playwright/playwright.config.ts +0 -17
  139. package/src/playwright/smoke.spec.ts +0 -24
  140. package/typedoc/.nojekyll +0 -1
  141. package/typedoc/assets/hierarchy.js +0 -1
  142. package/typedoc/assets/highlight.css +0 -99
  143. package/typedoc/assets/icons.js +0 -18
  144. package/typedoc/assets/icons.svg +0 -1
  145. package/typedoc/assets/main.js +0 -60
  146. package/typedoc/assets/navigation.js +0 -1
  147. package/typedoc/assets/search.js +0 -1
  148. package/typedoc/assets/style.css +0 -1640
  149. package/typedoc/classes/echo.Hypergraph.html +0 -17
  150. package/typedoc/classes/echo.PropertiesType.html +0 -19
  151. package/typedoc/classes/echo.QueryResult.html +0 -18
  152. package/typedoc/classes/halo.KeyStore.html +0 -6
  153. package/typedoc/classes/index.AgentClientServiceProvider.html +0 -10
  154. package/typedoc/classes/index.AgentManagerClient.html +0 -22
  155. package/typedoc/classes/index.AlreadyJoinedError.html +0 -15
  156. package/typedoc/classes/index.ApiError.html +0 -16
  157. package/typedoc/classes/index.CancelledError.html +0 -16
  158. package/typedoc/classes/index.Client.html +0 -51
  159. package/typedoc/classes/index.ClientServicesProxy.html +0 -12
  160. package/typedoc/classes/index.Config.html +0 -17
  161. package/typedoc/classes/index.DataCorruptionError.html +0 -16
  162. package/typedoc/classes/index.DatabaseError.html +0 -15
  163. package/typedoc/classes/index.EntityNotFoundError.html +0 -15
  164. package/typedoc/classes/index.FakeAgentHostingProvider.html +0 -7
  165. package/typedoc/classes/index.IFrameManager.html +0 -6
  166. package/typedoc/classes/index.IdentityNotInitializedError.html +0 -15
  167. package/typedoc/classes/index.InvalidConfigError.html +0 -16
  168. package/typedoc/classes/index.InvalidInvitationError.html +0 -15
  169. package/typedoc/classes/index.InvalidInvitationExtensionRoleError.html +0 -16
  170. package/typedoc/classes/index.InvalidStorageVersionError.html +0 -15
  171. package/typedoc/classes/index.LocalClientServices.html +0 -12
  172. package/typedoc/classes/index.PublicKey.html +0 -55
  173. package/typedoc/classes/index.RemoteServiceConnectionError.html +0 -15
  174. package/typedoc/classes/index.RemoteServiceConnectionTimeout.html +0 -15
  175. package/typedoc/classes/index.RpcClosedError.html +0 -15
  176. package/typedoc/classes/index.RpcNotOpenError.html +0 -15
  177. package/typedoc/classes/index.SharedWorkerConnection.html +0 -5
  178. package/typedoc/classes/index.Shell.html +0 -35
  179. package/typedoc/classes/index.ShellManager.html +0 -9
  180. package/typedoc/classes/index.SystemError.html +0 -16
  181. package/typedoc/classes/index.UnknownModelError.html +0 -15
  182. package/typedoc/classes/index.WorkerClientServices.html +0 -12
  183. package/typedoc/classes/invitations.AuthenticatingInvitationObservable.html +0 -30
  184. package/typedoc/classes/invitations.CancellableInvitationObservable.html +0 -29
  185. package/typedoc/classes/invitations.InvitationEncoder.html +0 -5
  186. package/typedoc/classes/invitations.InvitationsProxy.html +0 -12
  187. package/typedoc/enums/devtools.KeyType.html +0 -9
  188. package/typedoc/enums/echo.HaloSpaceMember.Role.html +0 -9
  189. package/typedoc/enums/echo.IndexKind.Kind.html +0 -8
  190. package/typedoc/enums/echo.QueryOptions.DataLocation.html +0 -6
  191. package/typedoc/enums/echo.QueryOptions.ShowDeletedOption.html +0 -6
  192. package/typedoc/enums/echo.SpaceMember.PresenceState.html +0 -5
  193. package/typedoc/enums/echo.SpaceState.html +0 -13
  194. package/typedoc/enums/echo.TextKind.html +0 -5
  195. package/typedoc/enums/halo.Device.PresenceState.html +0 -6
  196. package/typedoc/enums/halo.DeviceKind.html +0 -5
  197. package/typedoc/enums/halo.DeviceType.html +0 -9
  198. package/typedoc/enums/index.ShellDisplay.html +0 -5
  199. package/typedoc/enums/index.ShellLayout.html +0 -13
  200. package/typedoc/enums/index.SystemStatus.html +0 -5
  201. package/typedoc/enums/invitations.Invitation.AuthMethod.html +0 -6
  202. package/typedoc/enums/invitations.Invitation.Kind.html +0 -5
  203. package/typedoc/enums/invitations.Invitation.State.html +0 -13
  204. package/typedoc/enums/invitations.Invitation.Type.html +0 -6
  205. package/typedoc/enums/mesh.ConnectionState.html +0 -5
  206. package/typedoc/functions/devtools.useDevtools.html +0 -1
  207. package/typedoc/functions/devtools.useStream.html +0 -2
  208. package/typedoc/functions/echo.useMembers.html +0 -1
  209. package/typedoc/functions/echo.useQueue.html +0 -2
  210. package/typedoc/functions/echo.useSchema.html +0 -2
  211. package/typedoc/functions/echo.useSpace.html +0 -6
  212. package/typedoc/functions/echo.useSpaceInvitation.html +0 -1
  213. package/typedoc/functions/echo.useSpaceInvitations.html +0 -1
  214. package/typedoc/functions/echo.useSpaceSyncState.html +0 -2
  215. package/typedoc/functions/echo.useSpaces.html +0 -5
  216. package/typedoc/functions/echo.useSubscription.html +0 -3
  217. package/typedoc/functions/echo.useSyncState.html +0 -2
  218. package/typedoc/functions/halo.useContacts.html +0 -4
  219. package/typedoc/functions/halo.useCredentials.html +0 -1
  220. package/typedoc/functions/halo.useDevices.html +0 -1
  221. package/typedoc/functions/halo.useHaloInvitation.html +0 -1
  222. package/typedoc/functions/halo.useHaloInvitations.html +0 -1
  223. package/typedoc/functions/halo.useIdentity.html +0 -3
  224. package/typedoc/functions/halo.useKeyStore.html +0 -3
  225. package/typedoc/functions/index.AgentHostingProvider.html +0 -2
  226. package/typedoc/functions/index.useAgentHostingClient.html +0 -1
  227. package/typedoc/functions/index.useClient.html +0 -3
  228. package/typedoc/functions/index.useClientStatus.html +0 -1
  229. package/typedoc/functions/index.useConfig.html +0 -3
  230. package/typedoc/functions/index.useShell.html +0 -2
  231. package/typedoc/functions/index.useShellDisplay.html +0 -2
  232. package/typedoc/functions/index.useStatus.html +0 -1
  233. package/typedoc/functions/invitations.useInvitationStatus.html +0 -1
  234. package/typedoc/functions/mesh.useNetworkStatus.html +0 -2
  235. package/typedoc/hierarchy.html +0 -1
  236. package/typedoc/index.html +0 -23
  237. package/typedoc/interfaces/devtools.DevtoolsHook.html +0 -22
  238. package/typedoc/interfaces/devtools.DevtoolsHost.html +0 -26
  239. package/typedoc/interfaces/echo.DocAccessor.html +0 -3
  240. package/typedoc/interfaces/echo.Echo.html +0 -39
  241. package/typedoc/interfaces/echo.EchoDatabase.html +0 -30
  242. package/typedoc/interfaces/echo.Expando.html +0 -3
  243. package/typedoc/interfaces/echo.Filter.html +0 -3
  244. package/typedoc/interfaces/echo.HaloSpaceMember.html +0 -18
  245. package/typedoc/interfaces/echo.IDocHandle.html +0 -6
  246. package/typedoc/interfaces/echo.IndexKind.html +0 -9
  247. package/typedoc/interfaces/echo.Query.html +0 -34
  248. package/typedoc/interfaces/echo.QueryOptions.html +0 -39
  249. package/typedoc/interfaces/echo.Queue.html +0 -17
  250. package/typedoc/interfaces/echo.Ref.html +0 -32
  251. package/typedoc/interfaces/echo.Space.html +0 -36
  252. package/typedoc/interfaces/echo.SpaceMember.html +0 -7
  253. package/typedoc/interfaces/echo.SpaceSyncState.PeerState.html +0 -14
  254. package/typedoc/interfaces/echo.SpaceSyncState.html +0 -4
  255. package/typedoc/interfaces/echo.SubscriptionHandle.html +0 -5
  256. package/typedoc/interfaces/echo.TypedObject.html +0 -16
  257. package/typedoc/interfaces/halo.Contact.html +0 -10
  258. package/typedoc/interfaces/halo.Credential.html +0 -27
  259. package/typedoc/interfaces/halo.Device.html +0 -11
  260. package/typedoc/interfaces/halo.Halo.html +0 -16
  261. package/typedoc/interfaces/halo.Identity.html +0 -15
  262. package/typedoc/interfaces/index.AgentHostingProviderClient.html +0 -6
  263. package/typedoc/interfaces/index.AppContextRequest.html +0 -33
  264. package/typedoc/interfaces/index.ClientServicesProvider.html +0 -9
  265. package/typedoc/interfaces/index.InvitationUrlRequest.html +0 -9
  266. package/typedoc/interfaces/index.LayoutRequest.html +0 -29
  267. package/typedoc/interfaces/index.ShellRuntime.html +0 -15
  268. package/typedoc/interfaces/invitations.Invitation.html +0 -92
  269. package/typedoc/interfaces/invitations.Invitations.html +0 -5
  270. package/typedoc/interfaces/mesh.GossipMessage.html +0 -10
  271. package/typedoc/interfaces/mesh.NetworkStatus.Signal.html +0 -5
  272. package/typedoc/interfaces/mesh.NetworkStatus.html +0 -6
  273. package/typedoc/media/LICENSE +0 -8
  274. package/typedoc/modules/devtools.html +0 -1
  275. package/typedoc/modules/echo.Filter.html +0 -1
  276. package/typedoc/modules/echo.HaloSpaceMember.html +0 -1
  277. package/typedoc/modules/echo.IndexKind.html +0 -1
  278. package/typedoc/modules/echo.Query.html +0 -1
  279. package/typedoc/modules/echo.QueryOptions.html +0 -1
  280. package/typedoc/modules/echo.Ref.html +0 -2
  281. package/typedoc/modules/echo.SpaceMember.html +0 -1
  282. package/typedoc/modules/echo.SpaceSyncState.html +0 -1
  283. package/typedoc/modules/echo.html +0 -1
  284. package/typedoc/modules/halo.Device.html +0 -1
  285. package/typedoc/modules/halo.html +0 -1
  286. package/typedoc/modules/index.html +0 -1
  287. package/typedoc/modules/invitations.Invitation.html +0 -1
  288. package/typedoc/modules/invitations.html +0 -1
  289. package/typedoc/modules/mesh.NetworkStatus.html +0 -1
  290. package/typedoc/modules/mesh.html +0 -1
  291. package/typedoc/modules/worker.html +0 -1
  292. package/typedoc/modules.html +0 -1
  293. package/typedoc/types/devtools.MountOptions.html +0 -3
  294. package/typedoc/types/echo.AnyLiveObject.html +0 -2
  295. package/typedoc/types/echo.Filter.And.html +0 -1
  296. package/typedoc/types/echo.Filter.Any.html +0 -1
  297. package/typedoc/types/echo.Filter.Or.html +0 -1
  298. package/typedoc/types/echo.Filter.Props.html +0 -1
  299. package/typedoc/types/echo.Filter.Type.html +0 -1
  300. package/typedoc/types/echo.Live.html +0 -5
  301. package/typedoc/types/echo.ObjectMeta.html +0 -1
  302. package/typedoc/types/echo.ObjectMigration.html +0 -7
  303. package/typedoc/types/echo.ObjectVersion.html +0 -2
  304. package/typedoc/types/echo.PeerSyncState.html +0 -1
  305. package/typedoc/types/echo.Progress.html +0 -3
  306. package/typedoc/types/echo.PropertiesTypeProps.html +0 -1
  307. package/typedoc/types/echo.Query.Any.html +0 -1
  308. package/typedoc/types/echo.Query.TextSearchOptions.html +0 -2
  309. package/typedoc/types/echo.Query.Type.html +0 -1
  310. package/typedoc/types/echo.Ref.Target.html +0 -2
  311. package/typedoc/types/echo.Selection.html +0 -1
  312. package/typedoc/types/echo.SpaceId.html +0 -6
  313. package/typedoc/types/echo.SpaceSyncStateMap.html +0 -1
  314. package/typedoc/types/echo.UseQueueOptions.html +0 -2
  315. package/typedoc/types/echo.UseSpacesParams.html +0 -3
  316. package/typedoc/types/index.AgentHostingProviderProps.html +0 -3
  317. package/typedoc/types/index.ClientContextProps.html +0 -3
  318. package/typedoc/types/index.ClientOptions.html +0 -12
  319. package/typedoc/types/index.ClientProviderProps.html +0 -2
  320. package/typedoc/types/index.ClientServices.html +0 -15
  321. package/typedoc/types/index.FromAgentOptions.html +0 -2
  322. package/typedoc/types/index.PublicKeyLike.html +0 -2
  323. package/typedoc/types/invitations.InvitationAction.html +0 -1
  324. package/typedoc/types/invitations.InvitationResult.html +0 -5
  325. package/typedoc/types/invitations.InvitationStatus.html +0 -15
  326. package/typedoc/variables/devtools.mountDevtoolsHooks.html +0 -1
  327. package/typedoc/variables/devtools.unmountDevtoolsHooks.html +0 -1
  328. package/typedoc/variables/echo.DocAccessor.html +0 -1
  329. package/typedoc/variables/echo.EchoObjectSchema.html +0 -1
  330. package/typedoc/variables/echo.Expando.html +0 -1
  331. package/typedoc/variables/echo.FQ_ID_LENGTH.html +0 -1
  332. package/typedoc/variables/echo.Filter.html +0 -1
  333. package/typedoc/variables/echo.OBJECT_ID_LENGTH.html +0 -1
  334. package/typedoc/variables/echo.ObjectVersion.html +0 -1
  335. package/typedoc/variables/echo.Query.html +0 -1
  336. package/typedoc/variables/echo.Queue.html +0 -1
  337. package/typedoc/variables/echo.ReactiveObjectSchema.html +0 -1
  338. package/typedoc/variables/echo.Ref.html +0 -2
  339. package/typedoc/variables/echo.RefArray.html +0 -2
  340. package/typedoc/variables/echo.SPACE_ID_LENGTH.html +0 -1
  341. package/typedoc/variables/echo.SpaceId.html +0 -1
  342. package/typedoc/variables/echo.SpaceSchema.html +0 -1
  343. package/typedoc/variables/echo.TypedObject.html +0 -3
  344. package/typedoc/variables/echo.compareForeignKeys.html +0 -1
  345. package/typedoc/variables/echo.createDocAccessor.html +0 -1
  346. package/typedoc/variables/echo.createEmptyEdgeSyncState.html +0 -1
  347. package/typedoc/variables/echo.createObject.html +0 -1
  348. package/typedoc/variables/echo.createQueueDXN.html +0 -2
  349. package/typedoc/variables/echo.createSubscription.html +0 -5
  350. package/typedoc/variables/echo.defineObjectMigration.html +0 -1
  351. package/typedoc/variables/echo.fromCursor.html +0 -1
  352. package/typedoc/variables/echo.fullyQualifiedId.html +0 -4
  353. package/typedoc/variables/echo.getMeta.html +0 -1
  354. package/typedoc/variables/echo.getObjectCore.html +0 -1
  355. package/typedoc/variables/echo.getRangeFromCursor.html +0 -1
  356. package/typedoc/variables/echo.getSchema.html +0 -2
  357. package/typedoc/variables/echo.getSource.html +0 -4
  358. package/typedoc/variables/echo.getSpace.html +0 -1
  359. package/typedoc/variables/echo.getSyncSummary.html +0 -1
  360. package/typedoc/variables/echo.getTarget.html +0 -4
  361. package/typedoc/variables/echo.getTextInRange.html +0 -2
  362. package/typedoc/variables/echo.getType.html +0 -5
  363. package/typedoc/variables/echo.getTypename.html +0 -6
  364. package/typedoc/variables/echo.getVersion.html +0 -3
  365. package/typedoc/variables/echo.importSpace.html +0 -1
  366. package/typedoc/variables/echo.internalDecodeReference.html +0 -2
  367. package/typedoc/variables/echo.isEchoObject.html +0 -2
  368. package/typedoc/variables/echo.isLiveObject.html +0 -3
  369. package/typedoc/variables/echo.isRelation.html +0 -2
  370. package/typedoc/variables/echo.isSpace.html +0 -1
  371. package/typedoc/variables/echo.live.html +0 -3
  372. package/typedoc/variables/echo.loadObjectReferences.html +0 -7
  373. package/typedoc/variables/echo.parseFullyQualifiedId.html +0 -2
  374. package/typedoc/variables/echo.parseId.html +0 -1
  375. package/typedoc/variables/echo.toCursor.html +0 -1
  376. package/typedoc/variables/echo.toCursorRange.html +0 -1
  377. package/typedoc/variables/echo.updateText.html +0 -6
  378. package/typedoc/variables/echo.useQuery.html +0 -2
  379. package/typedoc/variables/index.AgentHostingContext.html +0 -1
  380. package/typedoc/variables/index.ClientProvider.html +0 -3
  381. package/typedoc/variables/index.DXOS_VERSION.html +0 -1
  382. package/typedoc/variables/index.Defaults.html +0 -2
  383. package/typedoc/variables/index.Dynamics.html +0 -2
  384. package/typedoc/variables/index.Envs.html +0 -2
  385. package/typedoc/variables/index.Local.html +0 -2
  386. package/typedoc/variables/index.Remote.html +0 -1
  387. package/typedoc/variables/index.Storage.html +0 -2
  388. package/typedoc/variables/index.createClientServices.html +0 -4
  389. package/typedoc/variables/index.fromAgent.html +0 -2
  390. package/typedoc/variables/index.fromHost.html +0 -2
  391. package/typedoc/variables/index.fromSocket.html +0 -2
  392. package/typedoc/variables/index.fromWorker.html +0 -2
  393. package/typedoc/variables/index.getUnixSocket.html +0 -1
  394. package/typedoc/variables/index.resolveRef.html +0 -1
  395. package/typedoc/variables/index.useMulticastObservable.html +0 -3
  396. package/typedoc/variables/worker.getWorkerServiceHost.html +0 -1
  397. package/typedoc/variables/worker.onconnect.html +0 -1
@@ -2,33 +2,33 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React from 'react';
7
+ import { expect, within } from 'storybook/test';
8
8
 
9
9
  import { log } from '@dxos/log';
10
- import { SyntaxHighlighter } from '@dxos/react-ui-syntax-highlighter';
11
- import { withLayout, withTheme } from '@dxos/storybook-utils';
10
+ import { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';
11
+ import { withLayout, withTheme, Loading } from '@dxos/react-ui/testing';
12
12
 
13
- import { withClientProvider, type WithClientProviderProps, withMultiClientProvider } from './withClientProvider';
14
13
  import { useClient } from '../client';
15
14
  import { type Space, useSpaces } from '../echo';
15
+ import { type WithClientProviderProps, withClientProvider, withMultiClientProvider } from './withClientProvider';
16
16
 
17
17
  const SpaceInfo = ({ space }: { space: Space }) => {
18
18
  const name = space.isOpen ? space.properties.name : '';
19
- return <SyntaxHighlighter language='json'>{JSON.stringify({ id: space.id, name }, null, 2)}</SyntaxHighlighter>;
19
+ return <JsonHighlighter data={{ id: space.id, name }} />;
20
20
  };
21
21
 
22
- const Test = () => {
22
+ const DefaultStory = () => {
23
23
  const client = useClient();
24
24
  const spaces = useSpaces();
25
25
  if (!client) {
26
- return null;
26
+ return <Loading data={{ client: !!client }} />;
27
27
  }
28
28
 
29
29
  return (
30
- <div className='flex flex-col min-w-[28rem] divide-y divide-separator border border-separator rounded'>
31
- <SyntaxHighlighter language='json'>{JSON.stringify(client.toJSON(), null, 2)}</SyntaxHighlighter>
30
+ <div className='flex flex-col divide-y divide-separator border border-separator'>
31
+ <JsonHighlighter data={client.toJSON()} />
32
32
  {spaces.map((space) => (
33
33
  <SpaceInfo key={space.id} space={space} />
34
34
  ))}
@@ -36,10 +36,16 @@ const Test = () => {
36
36
  );
37
37
  };
38
38
 
39
- export default {
39
+ const meta = {
40
40
  title: 'sdk/react-client/withClientProvider',
41
- render: Test,
42
- };
41
+ render: DefaultStory,
42
+ decorators: [withTheme()],
43
+ tags: ['test'],
44
+ } satisfies Meta<typeof DefaultStory>;
45
+
46
+ export default meta;
47
+
48
+ type Story = StoryObj<typeof meta>;
43
49
 
44
50
  const clientProps: WithClientProviderProps = {
45
51
  createIdentity: true,
@@ -47,19 +53,27 @@ const clientProps: WithClientProviderProps = {
47
53
  onInitialized: async (client) => {
48
54
  log.info('onInitialized', { client });
49
55
  },
50
- onSpaceCreated: async ({ client, space }) => {
51
- log.info('onSpaceCreated', { client, space });
56
+ onCreateSpace: async ({ client, space }) => {
57
+ log.info('onCreateSpace', { client, space });
52
58
  },
53
59
  };
54
60
 
55
- export const Default = {
56
- decorators: [withClientProvider(clientProps), withTheme, withLayout({ classNames: ['flex gap-2'] })],
61
+ export const Default: Story = {
62
+ decorators: [withClientProvider(clientProps)],
63
+ parameters: {
64
+ layout: 'centered',
65
+ },
66
+ play: async ({ canvasElement }) => {
67
+ const canvas = within(canvasElement);
68
+ const initializedText = await canvas.findByText(/"initialized": true/i, {}, { timeout: 30_000 });
69
+ await expect(initializedText).toBeVisible();
70
+ },
57
71
  };
58
72
 
59
- export const Multiple = {
73
+ export const Multiple: Story = {
60
74
  decorators: [
75
+ withTheme(),
76
+ withLayout({ classNames: 'grid grid-cols-3' }),
61
77
  withMultiClientProvider({ ...clientProps, numClients: 3 }),
62
- withTheme,
63
- withLayout({ classNames: ['flex gap-2'] }),
64
78
  ],
65
79
  };
@@ -2,27 +2,27 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { type StoryContext, type Decorator } from '@storybook/react';
6
- import React, { createContext, type PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';
7
- import { type FallbackProps, ErrorBoundary as NativeErrorBoundary } from 'react-error-boundary';
5
+ import { type Decorator, type StoryContext } from '@storybook/react';
6
+ import React, { useCallback, useMemo, useRef, useState } from 'react';
8
7
 
9
8
  import { Trigger } from '@dxos/async';
10
9
  import { type Client } from '@dxos/client';
11
- import { type Space } from '@dxos/client/echo';
12
- import { performInvitation, TestBuilder } from '@dxos/client/testing';
10
+ import { type Space, type SpaceId } from '@dxos/client/echo';
11
+ import { TestBuilder, performInvitation } from '@dxos/client/testing';
13
12
  import { log } from '@dxos/log';
13
+ import { ErrorBoundary } from '@dxos/react-ui';
14
14
  import { type MaybePromise } from '@dxos/util';
15
15
 
16
- import { ClientStory } from './context';
17
16
  import { ClientProvider, type ClientProviderProps } from '../client';
17
+ import { ClientStory } from './context';
18
18
 
19
19
  type InitializeProps = {
20
20
  createIdentity?: boolean;
21
21
  createSpace?: boolean;
22
22
  onInitialized?: (client: Client) => MaybePromise<void>;
23
- onIdentityCreated?: (props: { client: Client }) => MaybePromise<void>;
23
+ onCreateIdentity?: (props: { client: Client }, context: StoryContext | any) => MaybePromise<void>;
24
24
  // NOTE: context must be untyped until ClientRepeater is removed.
25
- onSpaceCreated?: (props: { client: Client; space: Space }, context: StoryContext | any) => MaybePromise<void>;
25
+ onCreateSpace?: (props: { client: Client; space: Space }, context: StoryContext | any) => MaybePromise<void>;
26
26
  };
27
27
 
28
28
  /**
@@ -30,7 +30,7 @@ type InitializeProps = {
30
30
  */
31
31
  const initializeClient = async (
32
32
  client: Client,
33
- { createIdentity, createSpace, onSpaceCreated, onIdentityCreated, onInitialized }: InitializeProps,
33
+ { createIdentity, createSpace, onCreateIdentity, onCreateSpace, onInitialized }: InitializeProps,
34
34
  context: StoryContext,
35
35
  ): Promise<ClientStory> => {
36
36
  await onInitialized?.(client);
@@ -38,17 +38,18 @@ const initializeClient = async (
38
38
  if (createIdentity || createSpace) {
39
39
  if (!client.halo.identity.get()) {
40
40
  await client.halo.createIdentity();
41
- await onIdentityCreated?.({ client });
41
+ await onCreateIdentity?.({ client }, context);
42
42
  }
43
43
  }
44
44
 
45
45
  let space: Space | undefined;
46
46
  if (createSpace) {
47
47
  space = await client.spaces.create({ name: 'Test Space' });
48
- await onSpaceCreated?.({ client, space }, context);
48
+ await space.waitUntilReady(); // Is this required?
49
+ await onCreateSpace?.({ client, space }, context);
49
50
  }
50
51
 
51
- return { space };
52
+ return { space, spaceId: space?.id };
52
53
  };
53
54
 
54
55
  export type WithClientProviderProps = InitializeProps & Omit<ClientProviderProps, 'onInitialized'>;
@@ -59,8 +60,8 @@ export type WithClientProviderProps = InitializeProps & Omit<ClientProviderProps
59
60
  export const withClientProvider = ({
60
61
  createIdentity,
61
62
  createSpace,
62
- onSpaceCreated,
63
- onIdentityCreated,
63
+ onCreateSpace,
64
+ onCreateIdentity,
64
65
  onInitialized,
65
66
  ...props
66
67
  }: WithClientProviderProps = {}): Decorator => {
@@ -72,8 +73,8 @@ export const withClientProvider = ({
72
73
  {
73
74
  createIdentity,
74
75
  createSpace,
75
- onSpaceCreated,
76
- onIdentityCreated,
76
+ onCreateSpace,
77
+ onCreateIdentity,
77
78
  onInitialized,
78
79
  },
79
80
  context,
@@ -83,7 +84,7 @@ export const withClientProvider = ({
83
84
  };
84
85
 
85
86
  return (
86
- <ErrorBoundary>
87
+ <ErrorBoundary name='client-provider'>
87
88
  <ClientProvider onInitialized={handleInitialized} {...props}>
88
89
  <ClientStory.Provider value={data}>
89
90
  <Story />
@@ -100,105 +101,87 @@ export const withClientProvider = ({
100
101
  export type WithMultiClientProviderProps = InitializeProps &
101
102
  Omit<ClientProviderProps, 'onInitialized'> & { numClients?: number };
102
103
 
103
- const MultiClientContext = createContext<{ id: number }>({ id: 0 });
104
-
105
- export const useMultiClient = () => useContext(MultiClientContext);
106
-
107
104
  /**
108
105
  * Decorator that creates a scaffold for multiple clients.
109
106
  * Orchestrates invitations between a randomly selected host and the remaining clients.
110
- * NOTE: Should come before withLayout.
111
107
  */
112
108
  export const withMultiClientProvider = ({
113
109
  numClients = 2,
114
110
  createIdentity,
115
111
  createSpace,
116
- onSpaceCreated,
117
- onIdentityCreated,
112
+ onCreateSpace,
113
+ onCreateIdentity,
118
114
  onInitialized,
119
115
  ...props
120
116
  }: WithMultiClientProviderProps): Decorator => {
121
117
  return (Story, context) => {
122
- const builder = useRef(new TestBuilder());
123
- const hostRef = useRef<Client>();
124
118
  const spaceReady = useRef(new Trigger<Space | undefined>());
119
+ const [spaceId, setSpaceId] = useState<SpaceId>();
120
+
121
+ const clients = useMemo(() => {
122
+ const buidler = new TestBuilder();
123
+ return Array.from({ length: numClients }).map(() => {
124
+ return {
125
+ services: buidler.createLocalClientServices(),
126
+ };
127
+ });
128
+ }, [numClients]);
125
129
 
126
130
  // Handle invitations.
127
131
  // NOTE: The zeroth client isn't necessarily the first to be initialized.
128
- const handleInitialized = async (client: Client, index: number) => {
129
- log.info('initialized', { index });
130
- if (createSpace) {
131
- if (!hostRef.current) {
132
- hostRef.current = client;
133
- const { space } = await initializeClient(
134
- client,
135
- {
136
- createIdentity,
137
- createSpace,
138
- onSpaceCreated,
139
- onIdentityCreated,
140
- onInitialized,
141
- },
142
- context,
132
+ const handleInitialized = useCallback(async (client: Client, index: number) => {
133
+ if (index === 0) {
134
+ // Initialize host.
135
+ const { space } = await initializeClient(
136
+ client,
137
+ {
138
+ createIdentity,
139
+ createSpace,
140
+ onCreateSpace,
141
+ onCreateIdentity,
142
+ onInitialized,
143
+ },
144
+ context,
145
+ );
146
+
147
+ log.info('inviting', { index, spaceId: space?.id });
148
+ setSpaceId(space?.id);
149
+ spaceReady.current.wake(space);
150
+ } else {
151
+ // Initialize guest.
152
+ await initializeClient(client, { createIdentity, onInitialized }, context);
153
+
154
+ log.info('waiting', { index });
155
+ const space = await spaceReady.current.wait();
156
+ if (space) {
157
+ log.info('joining', { index, spaceId: space.id });
158
+ await Promise.all(
159
+ performInvitation({
160
+ host: space,
161
+ guest: client.spaces,
162
+ }),
143
163
  );
144
-
145
- spaceReady.current.wake(space);
146
- log.info('inviting', { index });
147
- } else {
148
- await initializeClient(client, { createIdentity, onInitialized }, context);
149
- const space = await spaceReady.current.wait();
150
- if (space) {
151
- log.info('joining', { index });
152
- await Promise.all(performInvitation({ host: space, guest: client.spaces }));
153
- }
154
164
  }
155
165
  }
156
- };
166
+ }, []);
157
167
 
158
168
  return (
159
- <ErrorBoundary>
160
- {Array.from({ length: numClients }).map((_, index) => (
161
- <MultiClientContext.Provider key={index} value={{ id: index }}>
162
- <ClientProvider
163
- services={builder.current.createLocalClientServices()}
164
- onInitialized={(client) => handleInitialized(client, index)}
165
- {...props}
166
- >
167
- <Story />
168
- </ClientProvider>
169
- </MultiClientContext.Provider>
169
+ <div className='absolute inset-0 grid grid-flow-col auto-cols-fr gap-4 overflow-hidden'>
170
+ {clients.map((client, index) => (
171
+ <ClientProvider
172
+ key={index}
173
+ services={client.services}
174
+ onInitialized={(client) => handleInitialized(client, index)}
175
+ {...props}
176
+ >
177
+ <ClientStory.Provider value={{ index, spaceId }}>
178
+ <ErrorBoundary name='client-provider'>
179
+ <Story />
180
+ </ErrorBoundary>
181
+ </ClientStory.Provider>
182
+ </ClientProvider>
170
183
  ))}
171
- </ErrorBoundary>
184
+ </div>
172
185
  );
173
186
  };
174
187
  };
175
-
176
- const ErrorBoundary = ({ children }: PropsWithChildren) => {
177
- const [error, setError] = useState<Error>();
178
- useEffect(() => {
179
- const handleError = (event: PromiseRejectionEvent) => {
180
- setError(event.reason);
181
- };
182
-
183
- window.addEventListener('unhandledrejection', handleError);
184
- return () => window.removeEventListener('unhandledrejection', handleError);
185
- }, []);
186
-
187
- if (error) {
188
- return <ErrorFallback error={error} resetErrorBoundary={() => setError(undefined)} />;
189
- }
190
-
191
- return <NativeErrorBoundary FallbackComponent={ErrorFallback}>{children}</NativeErrorBoundary>;
192
- };
193
-
194
- const ErrorFallback = ({ error }: FallbackProps) => {
195
- const { name, message, stack } =
196
- error instanceof Error ? error : { name: 'Error', message: String(error), stack: undefined };
197
- return (
198
- <div role='alert' className='flex flex-col p-4 gap-4 overflow-auto'>
199
- <h1 className='text-xl text-red-500'>{name}</h1>
200
- <div className='text-lg'>{message}</div>
201
- {stack && <pre className='whitespace-pre-wrap text-sm text-subdued'>{stack}</pre>}
202
- </div>
203
- );
204
- };
package/tsconfig.json CHANGED
@@ -45,16 +45,13 @@
45
45
  "path": "../../core/echo/echo"
46
46
  },
47
47
  {
48
- "path": "../../core/echo/echo-schema"
49
- },
50
- {
51
- "path": "../../core/echo/echo-signals"
48
+ "path": "../../core/echo/echo-react"
52
49
  },
53
50
  {
54
51
  "path": "../../core/protocols"
55
52
  },
56
53
  {
57
- "path": "../../ui/primitives/react-hooks"
54
+ "path": "../../ui/react-primitives/react-hooks"
58
55
  },
59
56
  {
60
57
  "path": "../../ui/react-ui"
@@ -63,7 +60,7 @@
63
60
  "path": "../../ui/react-ui-syntax-highlighter"
64
61
  },
65
62
  {
66
- "path": "../../ui/react-ui-theme"
63
+ "path": "../../ui/ui-theme"
67
64
  },
68
65
  {
69
66
  "path": "../client"
package/typedoc.json CHANGED
@@ -9,4 +9,4 @@
9
9
  "src/mesh/index.ts",
10
10
  "src/worker.ts"
11
11
  ]
12
- }
12
+ }
package/vitest.config.ts CHANGED
@@ -2,21 +2,15 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { defineConfig, mergeConfig } from 'vitest/config';
5
+ import path from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
6
7
 
7
- import { baseConfig } from '../../../vitest.base.config';
8
+ import { createConfig } from '../../../vitest.base.config';
8
9
 
9
- // TODO(wittjosiah): Factor out to shared config as an option.
10
- const specifiedEnv = (process.env.VITEST_ENV ?? 'node').toLowerCase();
11
- const environment = specifiedEnv === 'node' ? 'jsdom' : undefined;
12
-
13
- export default mergeConfig(
14
- baseConfig({ cwd: __dirname }),
15
- defineConfig({
16
- test: {
17
- environment,
18
- // TODO(dmaretskyi): Enabled because client tests were flaky. Remove when that's not the case.
19
- retry: 2,
20
- },
21
- }),
22
- );
10
+ export default createConfig({
11
+ dirname: typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url)),
12
+ node: {
13
+ environment: 'happy-dom',
14
+ },
15
+ storybook: true,
16
+ });
package/.eslintrc.cjs DELETED
@@ -1,12 +0,0 @@
1
- module.exports = {
2
- "extends": [
3
- "../../../.eslintrc.js"
4
- ],
5
- "parserOptions": {
6
- "project": "tsconfig.json",
7
- "tsconfigRootDir": __dirname,
8
- },
9
- "ignorePatterns": [
10
- "**/*.d.ts"
11
- ]
12
- }