@dxos/plugin-client 0.8.4-main.72ec0f3 → 0.8.4-main.8360d9e660

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 (471) hide show
  1. package/dist/lib/browser/DevicesContainer-3N7ANEJ7.mjs +268 -0
  2. package/dist/lib/browser/DevicesContainer-3N7ANEJ7.mjs.map +7 -0
  3. package/dist/lib/browser/JoinDialog-VTTK7NHO.mjs +59 -0
  4. package/dist/lib/browser/JoinDialog-VTTK7NHO.mjs.map +7 -0
  5. package/dist/lib/browser/ProfileContainer-XV7OXJC2.mjs +171 -0
  6. package/dist/lib/browser/ProfileContainer-XV7OXJC2.mjs.map +7 -0
  7. package/dist/lib/browser/RecoveryCodeDialog-WO34OZEJ.mjs +60 -0
  8. package/dist/lib/browser/RecoveryCodeDialog-WO34OZEJ.mjs.map +7 -0
  9. package/dist/lib/browser/RecoveryCredentialsContainer-G22FSTIX.mjs +57 -0
  10. package/dist/lib/browser/RecoveryCredentialsContainer-G22FSTIX.mjs.map +7 -0
  11. package/dist/lib/browser/ResetDialog-W24FOWBQ.mjs +52 -0
  12. package/dist/lib/browser/ResetDialog-W24FOWBQ.mjs.map +7 -0
  13. package/dist/lib/browser/app-graph-builder-GGJKFY3X.mjs +121 -0
  14. package/dist/lib/browser/app-graph-builder-GGJKFY3X.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-ESDYRACB.mjs +18 -0
  16. package/dist/lib/browser/chunk-ESDYRACB.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-FVEKZBM7.mjs +283 -0
  18. package/dist/lib/browser/chunk-FVEKZBM7.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-HSFDKP5D.mjs +15 -0
  20. package/dist/lib/browser/chunk-HSFDKP5D.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-ZRVMXLDR.mjs → chunk-JHSBBOCI.mjs} +2 -2
  22. package/dist/lib/browser/chunk-JHSBBOCI.mjs.map +7 -0
  23. package/dist/lib/browser/cli/index.mjs +1059 -0
  24. package/dist/lib/browser/cli/index.mjs.map +7 -0
  25. package/dist/lib/browser/client-MM3BHCWG.mjs +92 -0
  26. package/dist/lib/browser/client-MM3BHCWG.mjs.map +7 -0
  27. package/dist/lib/browser/index.mjs +77 -84
  28. package/dist/lib/browser/index.mjs.map +4 -4
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/migrations-GKUA2ARL.mjs +25 -0
  31. package/dist/lib/browser/migrations-GKUA2ARL.mjs.map +7 -0
  32. package/dist/lib/browser/operation-resolver-VSWA74RS.mjs +299 -0
  33. package/dist/lib/browser/operation-resolver-VSWA74RS.mjs.map +7 -0
  34. package/dist/lib/browser/react-context-GZ3T5UON.mjs +26 -0
  35. package/dist/lib/browser/react-context-GZ3T5UON.mjs.map +7 -0
  36. package/dist/lib/browser/react-surface-5VZP34X3.mjs +77 -0
  37. package/dist/lib/browser/react-surface-5VZP34X3.mjs.map +7 -0
  38. package/dist/lib/browser/schema-defs-KAG6HQMI.mjs +28 -0
  39. package/dist/lib/browser/schema-defs-KAG6HQMI.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +10 -4
  41. package/dist/lib/node-esm/DevicesContainer-V7HEUPO7.mjs +269 -0
  42. package/dist/lib/node-esm/DevicesContainer-V7HEUPO7.mjs.map +7 -0
  43. package/dist/lib/node-esm/JoinDialog-XVKW4SLT.mjs +60 -0
  44. package/dist/lib/node-esm/JoinDialog-XVKW4SLT.mjs.map +7 -0
  45. package/dist/lib/node-esm/ProfileContainer-B5LJ6TMU.mjs +172 -0
  46. package/dist/lib/node-esm/ProfileContainer-B5LJ6TMU.mjs.map +7 -0
  47. package/dist/lib/node-esm/RecoveryCodeDialog-YIRGXM7N.mjs +61 -0
  48. package/dist/lib/node-esm/RecoveryCodeDialog-YIRGXM7N.mjs.map +7 -0
  49. package/dist/lib/node-esm/RecoveryCredentialsContainer-MVJEFNXX.mjs +58 -0
  50. package/dist/lib/node-esm/RecoveryCredentialsContainer-MVJEFNXX.mjs.map +7 -0
  51. package/dist/lib/node-esm/ResetDialog-GGBWSQZO.mjs +54 -0
  52. package/dist/lib/node-esm/ResetDialog-GGBWSQZO.mjs.map +7 -0
  53. package/dist/lib/node-esm/app-graph-builder-PTNZ46NN.mjs +122 -0
  54. package/dist/lib/node-esm/app-graph-builder-PTNZ46NN.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-QT3EQXDU.mjs → chunk-BOTJSPCT.mjs} +2 -2
  56. package/dist/lib/node-esm/chunk-BOTJSPCT.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-DT2ZNOGU.mjs +284 -0
  58. package/dist/lib/node-esm/chunk-DT2ZNOGU.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-OIJ5QGFQ.mjs +20 -0
  60. package/dist/lib/node-esm/chunk-OIJ5QGFQ.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-VLNCZYIC.mjs +16 -0
  62. package/dist/lib/node-esm/chunk-VLNCZYIC.mjs.map +7 -0
  63. package/dist/lib/node-esm/cli/index.mjs +1060 -0
  64. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  65. package/dist/lib/node-esm/client-24L47Y2G.mjs +93 -0
  66. package/dist/lib/node-esm/client-24L47Y2G.mjs.map +7 -0
  67. package/dist/lib/node-esm/index.mjs +77 -84
  68. package/dist/lib/node-esm/index.mjs.map +4 -4
  69. package/dist/lib/node-esm/meta.json +1 -1
  70. package/dist/lib/node-esm/migrations-4NEKCBGU.mjs +26 -0
  71. package/dist/lib/node-esm/migrations-4NEKCBGU.mjs.map +7 -0
  72. package/dist/lib/node-esm/operation-resolver-4GWB3YZG.mjs +300 -0
  73. package/dist/lib/node-esm/operation-resolver-4GWB3YZG.mjs.map +7 -0
  74. package/dist/lib/node-esm/{react-context-F4QOBWSP.mjs → react-context-T2ORT5CC.mjs} +9 -8
  75. package/dist/lib/node-esm/react-context-T2ORT5CC.mjs.map +7 -0
  76. package/dist/lib/node-esm/react-surface-B65OUZYI.mjs +78 -0
  77. package/dist/lib/node-esm/react-surface-B65OUZYI.mjs.map +7 -0
  78. package/dist/lib/node-esm/schema-defs-GXQ47JZN.mjs +29 -0
  79. package/dist/lib/node-esm/schema-defs-GXQ47JZN.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +10 -4
  81. package/dist/types/src/ClientPlugin.d.ts +2 -1
  82. package/dist/types/src/ClientPlugin.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  84. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  85. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  86. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/client/client.d.ts +8 -0
  88. package/dist/types/src/capabilities/client/client.d.ts.map +1 -0
  89. package/dist/types/src/capabilities/client/index.d.ts +18 -0
  90. package/dist/types/src/capabilities/client/index.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/index.d.ts +7 -19
  92. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/migrations/index.d.ts +3 -0
  94. package/dist/types/src/capabilities/migrations/index.d.ts.map +1 -0
  95. package/dist/types/src/capabilities/migrations/migrations.d.ts +5 -0
  96. package/dist/types/src/capabilities/migrations/migrations.d.ts.map +1 -0
  97. package/dist/types/src/capabilities/operation-resolver/index.d.ts +5 -0
  98. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +8 -0
  100. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/react-context/index.d.ts +7 -0
  102. package/dist/types/src/capabilities/react-context/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/react-context/react-context.d.ts +10 -0
  104. package/dist/types/src/capabilities/react-context/react-context.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/react-surface/index.d.ts +5 -0
  106. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +9 -0
  108. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/schema-defs/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/schema-defs/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/schema-defs/schema-defs.d.ts +5 -0
  112. package/dist/types/src/capabilities/schema-defs/schema-defs.d.ts.map +1 -0
  113. package/dist/types/src/cli/commands/config/index.d.ts +5 -0
  114. package/dist/types/src/cli/commands/config/index.d.ts.map +1 -0
  115. package/dist/types/src/cli/commands/config/view.d.ts +5 -0
  116. package/dist/types/src/cli/commands/config/view.d.ts.map +1 -0
  117. package/dist/types/src/cli/commands/device/index.d.ts +7 -0
  118. package/dist/types/src/cli/commands/device/index.d.ts.map +1 -0
  119. package/dist/types/src/cli/commands/device/info/index.d.ts +2 -0
  120. package/dist/types/src/cli/commands/device/info/index.d.ts.map +1 -0
  121. package/dist/types/src/cli/commands/device/info/info.d.ts +7 -0
  122. package/dist/types/src/cli/commands/device/info/info.d.ts.map +1 -0
  123. package/dist/types/src/cli/commands/device/info/info.test.d.ts +2 -0
  124. package/dist/types/src/cli/commands/device/info/info.test.d.ts.map +1 -0
  125. package/dist/types/src/cli/commands/device/list/index.d.ts +2 -0
  126. package/dist/types/src/cli/commands/device/list/index.d.ts.map +1 -0
  127. package/dist/types/src/cli/commands/device/list/list.d.ts +7 -0
  128. package/dist/types/src/cli/commands/device/list/list.d.ts.map +1 -0
  129. package/dist/types/src/cli/commands/device/list/list.test.d.ts +2 -0
  130. package/dist/types/src/cli/commands/device/list/list.test.d.ts.map +1 -0
  131. package/dist/types/src/cli/commands/device/update/index.d.ts +2 -0
  132. package/dist/types/src/cli/commands/device/update/index.d.ts.map +1 -0
  133. package/dist/types/src/cli/commands/device/update/update.d.ts +11 -0
  134. package/dist/types/src/cli/commands/device/update/update.d.ts.map +1 -0
  135. package/dist/types/src/cli/commands/device/util.d.ts +16 -0
  136. package/dist/types/src/cli/commands/device/util.d.ts.map +1 -0
  137. package/dist/types/src/cli/commands/edge/index.d.ts +5 -0
  138. package/dist/types/src/cli/commands/edge/index.d.ts.map +1 -0
  139. package/dist/types/src/cli/commands/edge/status.d.ts +7 -0
  140. package/dist/types/src/cli/commands/edge/status.d.ts.map +1 -0
  141. package/dist/types/src/cli/commands/halo/create/create.d.ts +15 -0
  142. package/dist/types/src/cli/commands/halo/create/create.d.ts.map +1 -0
  143. package/dist/types/src/cli/commands/halo/create/create.test.d.ts +2 -0
  144. package/dist/types/src/cli/commands/halo/create/create.test.d.ts.map +1 -0
  145. package/dist/types/src/cli/commands/halo/create/index.d.ts +2 -0
  146. package/dist/types/src/cli/commands/halo/create/index.d.ts.map +1 -0
  147. package/dist/types/src/cli/commands/halo/credential/add/add.d.ts +13 -0
  148. package/dist/types/src/cli/commands/halo/credential/add/add.d.ts.map +1 -0
  149. package/dist/types/src/cli/commands/halo/credential/add/index.d.ts +2 -0
  150. package/dist/types/src/cli/commands/halo/credential/add/index.d.ts.map +1 -0
  151. package/dist/types/src/cli/commands/halo/credential/index.d.ts +12 -0
  152. package/dist/types/src/cli/commands/halo/credential/index.d.ts.map +1 -0
  153. package/dist/types/src/cli/commands/halo/credential/list/index.d.ts +2 -0
  154. package/dist/types/src/cli/commands/halo/credential/list/index.d.ts.map +1 -0
  155. package/dist/types/src/cli/commands/halo/credential/list/list.d.ts +19 -0
  156. package/dist/types/src/cli/commands/halo/credential/list/list.d.ts.map +1 -0
  157. package/dist/types/src/cli/commands/halo/credential/list/list.test.d.ts +2 -0
  158. package/dist/types/src/cli/commands/halo/credential/list/list.test.d.ts.map +1 -0
  159. package/dist/types/src/cli/commands/halo/identity/identity.d.ts +7 -0
  160. package/dist/types/src/cli/commands/halo/identity/identity.d.ts.map +1 -0
  161. package/dist/types/src/cli/commands/halo/identity/identity.test.d.ts +2 -0
  162. package/dist/types/src/cli/commands/halo/identity/identity.test.d.ts.map +1 -0
  163. package/dist/types/src/cli/commands/halo/identity/index.d.ts +2 -0
  164. package/dist/types/src/cli/commands/halo/identity/index.d.ts.map +1 -0
  165. package/dist/types/src/cli/commands/halo/index.d.ts +3 -0
  166. package/dist/types/src/cli/commands/halo/index.d.ts.map +1 -0
  167. package/dist/types/src/cli/commands/halo/join/index.d.ts +2 -0
  168. package/dist/types/src/cli/commands/halo/join/index.d.ts.map +1 -0
  169. package/dist/types/src/cli/commands/halo/join/join.d.ts +8 -0
  170. package/dist/types/src/cli/commands/halo/join/join.d.ts.map +1 -0
  171. package/dist/types/src/cli/commands/halo/join/join.test.d.ts +2 -0
  172. package/dist/types/src/cli/commands/halo/join/join.test.d.ts.map +1 -0
  173. package/dist/types/src/cli/commands/halo/keys/index.d.ts +2 -0
  174. package/dist/types/src/cli/commands/halo/keys/index.d.ts.map +1 -0
  175. package/dist/types/src/cli/commands/halo/keys/keys.d.ts +7 -0
  176. package/dist/types/src/cli/commands/halo/keys/keys.d.ts.map +1 -0
  177. package/dist/types/src/cli/commands/halo/keys/keys.test.d.ts +2 -0
  178. package/dist/types/src/cli/commands/halo/keys/keys.test.d.ts.map +1 -0
  179. package/dist/types/src/cli/commands/halo/recover/index.d.ts +2 -0
  180. package/dist/types/src/cli/commands/halo/recover/index.d.ts.map +1 -0
  181. package/dist/types/src/cli/commands/halo/recover/recover.d.ts +7 -0
  182. package/dist/types/src/cli/commands/halo/recover/recover.d.ts.map +1 -0
  183. package/dist/types/src/cli/commands/halo/recover/recover.test.d.ts +2 -0
  184. package/dist/types/src/cli/commands/halo/recover/recover.test.d.ts.map +1 -0
  185. package/dist/types/src/cli/commands/halo/seed/index.d.ts +2 -0
  186. package/dist/types/src/cli/commands/halo/seed/index.d.ts.map +1 -0
  187. package/dist/types/src/cli/commands/halo/seed/seed.d.ts +7 -0
  188. package/dist/types/src/cli/commands/halo/seed/seed.d.ts.map +1 -0
  189. package/dist/types/src/cli/commands/halo/share/index.d.ts +2 -0
  190. package/dist/types/src/cli/commands/halo/share/index.d.ts.map +1 -0
  191. package/dist/types/src/cli/commands/halo/share/share.d.ts +15 -0
  192. package/dist/types/src/cli/commands/halo/share/share.d.ts.map +1 -0
  193. package/dist/types/src/cli/commands/halo/update/index.d.ts +2 -0
  194. package/dist/types/src/cli/commands/halo/update/index.d.ts.map +1 -0
  195. package/dist/types/src/cli/commands/halo/update/update.d.ts +11 -0
  196. package/dist/types/src/cli/commands/halo/update/update.d.ts.map +1 -0
  197. package/dist/types/src/cli/commands/halo/update/update.test.d.ts +2 -0
  198. package/dist/types/src/cli/commands/halo/update/update.test.d.ts.map +1 -0
  199. package/dist/types/src/cli/commands/halo/util.d.ts +13 -0
  200. package/dist/types/src/cli/commands/halo/util.d.ts.map +1 -0
  201. package/dist/types/src/cli/commands/index.d.ts +6 -0
  202. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  203. package/dist/types/src/cli/commands/profile/create.d.ts +10 -0
  204. package/dist/types/src/cli/commands/profile/create.d.ts.map +1 -0
  205. package/dist/types/src/cli/commands/profile/delete.d.ts +8 -0
  206. package/dist/types/src/cli/commands/profile/delete.d.ts.map +1 -0
  207. package/dist/types/src/cli/commands/profile/import.d.ts +17 -0
  208. package/dist/types/src/cli/commands/profile/import.d.ts.map +1 -0
  209. package/dist/types/src/cli/commands/profile/index.d.ts +19 -0
  210. package/dist/types/src/cli/commands/profile/index.d.ts.map +1 -0
  211. package/dist/types/src/cli/commands/profile/inspect.d.ts +13 -0
  212. package/dist/types/src/cli/commands/profile/inspect.d.ts.map +1 -0
  213. package/dist/types/src/cli/commands/profile/list.d.ts +6 -0
  214. package/dist/types/src/cli/commands/profile/list.d.ts.map +1 -0
  215. package/dist/types/src/cli/commands/profile/reset.d.ts +8 -0
  216. package/dist/types/src/cli/commands/profile/reset.d.ts.map +1 -0
  217. package/dist/types/src/cli/commands/profile/util.d.ts +24 -0
  218. package/dist/types/src/cli/commands/profile/util.d.ts.map +1 -0
  219. package/dist/types/src/cli/index.d.ts +2 -0
  220. package/dist/types/src/cli/index.d.ts.map +1 -0
  221. package/dist/types/src/cli/plugin.d.ts +4 -0
  222. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  223. package/dist/types/src/cli/testing/test-console.d.ts +37 -0
  224. package/dist/types/src/cli/testing/test-console.d.ts.map +1 -0
  225. package/dist/types/src/components/index.d.ts +0 -6
  226. package/dist/types/src/components/index.d.ts.map +1 -1
  227. package/dist/types/src/constants.d.ts +4 -0
  228. package/dist/types/src/constants.d.ts.map +1 -0
  229. package/dist/types/src/containers/DevicesContainer/DevicesContainer.d.ts.map +1 -0
  230. package/dist/types/src/{components → containers/DevicesContainer}/DevicesContainer.stories.d.ts +10 -54
  231. package/dist/types/src/containers/DevicesContainer/DevicesContainer.stories.d.ts.map +1 -0
  232. package/dist/types/src/containers/DevicesContainer/index.d.ts +3 -0
  233. package/dist/types/src/containers/DevicesContainer/index.d.ts.map +1 -0
  234. package/dist/types/src/{components → containers/JoinDialog}/JoinDialog.d.ts +0 -1
  235. package/dist/types/src/containers/JoinDialog/JoinDialog.d.ts.map +1 -0
  236. package/dist/types/src/containers/JoinDialog/index.d.ts +3 -0
  237. package/dist/types/src/containers/JoinDialog/index.d.ts.map +1 -0
  238. package/dist/types/src/containers/ProfileContainer/ProfileContainer.d.ts.map +1 -0
  239. package/dist/types/src/containers/ProfileContainer/ProfileContainer.stories.d.ts +14 -0
  240. package/dist/types/src/containers/ProfileContainer/ProfileContainer.stories.d.ts.map +1 -0
  241. package/dist/types/src/containers/ProfileContainer/index.d.ts +3 -0
  242. package/dist/types/src/containers/ProfileContainer/index.d.ts.map +1 -0
  243. package/dist/types/src/{components → containers/RecoveryCodeDialog}/RecoveryCodeDialog.d.ts +0 -1
  244. package/dist/types/src/containers/RecoveryCodeDialog/RecoveryCodeDialog.d.ts.map +1 -0
  245. package/dist/types/src/containers/RecoveryCodeDialog/RecoveryCodeDialog.stories.d.ts +16 -0
  246. package/dist/types/src/containers/RecoveryCodeDialog/RecoveryCodeDialog.stories.d.ts.map +1 -0
  247. package/dist/types/src/containers/RecoveryCodeDialog/index.d.ts +4 -0
  248. package/dist/types/src/containers/RecoveryCodeDialog/index.d.ts.map +1 -0
  249. package/dist/types/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.d.ts.map +1 -0
  250. package/dist/types/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.stories.d.ts +14 -0
  251. package/dist/types/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.stories.d.ts.map +1 -0
  252. package/dist/types/src/containers/RecoveryCredentialsContainer/index.d.ts +3 -0
  253. package/dist/types/src/containers/RecoveryCredentialsContainer/index.d.ts.map +1 -0
  254. package/dist/types/src/containers/ResetDialog/ResetDialog.d.ts +9 -0
  255. package/dist/types/src/containers/ResetDialog/ResetDialog.d.ts.map +1 -0
  256. package/dist/types/src/containers/ResetDialog/ResetDialog.stories.d.ts +19 -0
  257. package/dist/types/src/containers/ResetDialog/ResetDialog.stories.d.ts.map +1 -0
  258. package/dist/types/src/containers/ResetDialog/index.d.ts +4 -0
  259. package/dist/types/src/containers/ResetDialog/index.d.ts.map +1 -0
  260. package/dist/types/src/containers/index.d.ts +10 -0
  261. package/dist/types/src/containers/index.d.ts.map +1 -0
  262. package/dist/types/src/index.d.ts +1 -2
  263. package/dist/types/src/index.d.ts.map +1 -1
  264. package/dist/types/src/meta.d.ts +2 -2
  265. package/dist/types/src/meta.d.ts.map +1 -1
  266. package/dist/types/src/translations.d.ts +2 -48
  267. package/dist/types/src/translations.d.ts.map +1 -1
  268. package/dist/types/src/types/capabilities.d.ts +10 -0
  269. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  270. package/dist/types/src/types/events.d.ts +9 -0
  271. package/dist/types/src/types/events.d.ts.map +1 -0
  272. package/dist/types/src/types/index.d.ts +2 -0
  273. package/dist/types/src/types/index.d.ts.map +1 -1
  274. package/dist/types/src/types/schema.d.ts +189 -31
  275. package/dist/types/src/types/schema.d.ts.map +1 -1
  276. package/dist/types/tsconfig.tsbuildinfo +1 -1
  277. package/package.json +54 -38
  278. package/src/ClientPlugin.ts +45 -55
  279. package/src/capabilities/app-graph-builder/app-graph-builder.ts +96 -0
  280. package/src/capabilities/app-graph-builder/index.ts +7 -0
  281. package/src/capabilities/client/client.ts +78 -0
  282. package/src/capabilities/client/index.ts +7 -0
  283. package/src/capabilities/index.ts +7 -11
  284. package/src/capabilities/migrations/index.ts +7 -0
  285. package/src/capabilities/migrations/migrations.ts +30 -0
  286. package/src/capabilities/operation-resolver/index.ts +7 -0
  287. package/src/capabilities/operation-resolver/operation-resolver.ts +249 -0
  288. package/src/capabilities/react-context/index.ts +7 -0
  289. package/src/capabilities/react-context/react-context.tsx +25 -0
  290. package/src/capabilities/react-surface/index.ts +7 -0
  291. package/src/capabilities/react-surface/react-surface.tsx +74 -0
  292. package/src/capabilities/schema-defs/index.ts +7 -0
  293. package/src/capabilities/schema-defs/schema-defs.ts +36 -0
  294. package/src/cli/commands/config/index.ts +12 -0
  295. package/src/cli/commands/config/view.ts +26 -0
  296. package/src/cli/commands/device/index.ts +14 -0
  297. package/src/cli/commands/device/info/index.ts +5 -0
  298. package/src/cli/commands/device/info/info.test.ts +29 -0
  299. package/src/cli/commands/device/info/info.ts +50 -0
  300. package/src/cli/commands/device/list/index.ts +5 -0
  301. package/src/cli/commands/device/list/list.test.ts +31 -0
  302. package/src/cli/commands/device/list/list.ts +30 -0
  303. package/src/cli/commands/device/update/index.ts +5 -0
  304. package/src/cli/commands/device/update/update.ts +70 -0
  305. package/src/cli/commands/device/util.ts +55 -0
  306. package/src/cli/commands/edge/index.ts +12 -0
  307. package/src/cli/commands/edge/status.ts +45 -0
  308. package/src/cli/commands/halo/create/create.test.ts +52 -0
  309. package/src/cli/commands/halo/create/create.ts +75 -0
  310. package/src/cli/commands/halo/create/index.ts +5 -0
  311. package/src/cli/commands/halo/credential/add/add.ts +97 -0
  312. package/src/cli/commands/halo/credential/add/index.ts +5 -0
  313. package/src/cli/commands/halo/credential/index.ts +13 -0
  314. package/src/cli/commands/halo/credential/list/index.ts +5 -0
  315. package/src/cli/commands/halo/credential/list/list.test.ts +28 -0
  316. package/src/cli/commands/halo/credential/list/list.ts +118 -0
  317. package/src/cli/commands/halo/identity/identity.test.ts +40 -0
  318. package/src/cli/commands/halo/identity/identity.ts +46 -0
  319. package/src/cli/commands/halo/identity/index.ts +5 -0
  320. package/src/cli/commands/halo/index.ts +21 -0
  321. package/src/cli/commands/halo/join/index.ts +5 -0
  322. package/src/cli/commands/halo/join/join.test.ts +10 -0
  323. package/src/cli/commands/halo/join/join.ts +87 -0
  324. package/src/cli/commands/halo/keys/index.ts +5 -0
  325. package/src/cli/commands/halo/keys/keys.test.ts +29 -0
  326. package/src/cli/commands/halo/keys/keys.ts +42 -0
  327. package/src/cli/commands/halo/recover/index.ts +5 -0
  328. package/src/cli/commands/halo/recover/recover.test.ts +10 -0
  329. package/src/cli/commands/halo/recover/recover.ts +44 -0
  330. package/src/cli/commands/halo/seed/index.ts +5 -0
  331. package/src/cli/commands/halo/seed/seed.ts +38 -0
  332. package/src/cli/commands/halo/share/index.ts +5 -0
  333. package/src/cli/commands/halo/share/share.ts +97 -0
  334. package/src/cli/commands/halo/update/index.ts +5 -0
  335. package/src/cli/commands/halo/update/update.test.ts +29 -0
  336. package/src/cli/commands/halo/update/update.ts +69 -0
  337. package/src/cli/commands/halo/util.ts +18 -0
  338. package/src/cli/commands/index.ts +9 -0
  339. package/src/cli/commands/profile/create.ts +90 -0
  340. package/src/cli/commands/profile/delete.ts +36 -0
  341. package/src/cli/commands/profile/import.ts +101 -0
  342. package/src/cli/commands/profile/index.ts +17 -0
  343. package/src/cli/commands/profile/inspect.ts +64 -0
  344. package/src/cli/commands/profile/list.ts +56 -0
  345. package/src/cli/commands/profile/reset.ts +45 -0
  346. package/src/cli/commands/profile/util.ts +48 -0
  347. package/src/cli/index.ts +5 -0
  348. package/src/cli/plugin.ts +34 -0
  349. package/src/cli/testing/test-console.ts +88 -0
  350. package/src/components/index.ts +0 -7
  351. package/src/constants.ts +9 -0
  352. package/src/{components → containers/DevicesContainer}/DevicesContainer.stories.tsx +14 -10
  353. package/src/{components → containers/DevicesContainer}/DevicesContainer.tsx +59 -66
  354. package/src/containers/DevicesContainer/index.ts +7 -0
  355. package/src/containers/JoinDialog/JoinDialog.tsx +53 -0
  356. package/src/containers/JoinDialog/index.ts +7 -0
  357. package/src/{components → containers/ProfileContainer}/ProfileContainer.stories.tsx +4 -4
  358. package/src/{components → containers/ProfileContainer}/ProfileContainer.tsx +65 -54
  359. package/src/containers/ProfileContainer/index.ts +7 -0
  360. package/src/{components → containers/RecoveryCodeDialog}/RecoveryCodeDialog.stories.tsx +4 -4
  361. package/src/{components → containers/RecoveryCodeDialog}/RecoveryCodeDialog.tsx +28 -27
  362. package/src/containers/RecoveryCodeDialog/index.ts +8 -0
  363. package/src/containers/RecoveryCredentialsContainer/RecoveryCredentialsContainer.stories.tsx +46 -0
  364. package/src/{components → containers/RecoveryCredentialsContainer}/RecoveryCredentialsContainer.tsx +22 -23
  365. package/src/containers/RecoveryCredentialsContainer/index.ts +7 -0
  366. package/src/containers/ResetDialog/ResetDialog.stories.tsx +73 -0
  367. package/src/containers/ResetDialog/ResetDialog.tsx +50 -0
  368. package/src/containers/ResetDialog/index.ts +8 -0
  369. package/src/containers/index.ts +15 -0
  370. package/src/index.ts +1 -2
  371. package/src/meta.ts +3 -3
  372. package/src/translations.ts +6 -3
  373. package/src/types/capabilities.ts +16 -0
  374. package/src/types/events.ts +15 -0
  375. package/src/types/index.ts +2 -0
  376. package/src/types/schema.ts +137 -19
  377. package/dist/lib/browser/app-graph-builder-ARY4H3VC.mjs +0 -124
  378. package/dist/lib/browser/app-graph-builder-ARY4H3VC.mjs.map +0 -7
  379. package/dist/lib/browser/chunk-4G4YWIUQ.mjs +0 -686
  380. package/dist/lib/browser/chunk-4G4YWIUQ.mjs.map +0 -7
  381. package/dist/lib/browser/chunk-4LRO3Y2O.mjs +0 -19
  382. package/dist/lib/browser/chunk-4LRO3Y2O.mjs.map +0 -7
  383. package/dist/lib/browser/chunk-N5UR2HOE.mjs +0 -18
  384. package/dist/lib/browser/chunk-N5UR2HOE.mjs.map +0 -7
  385. package/dist/lib/browser/chunk-RDIG75CA.mjs +0 -110
  386. package/dist/lib/browser/chunk-RDIG75CA.mjs.map +0 -7
  387. package/dist/lib/browser/chunk-ZRVMXLDR.mjs.map +0 -7
  388. package/dist/lib/browser/client-O7U3MQ6J.mjs +0 -43
  389. package/dist/lib/browser/client-O7U3MQ6J.mjs.map +0 -7
  390. package/dist/lib/browser/intent-resolver-KLK7PJZK.mjs +0 -305
  391. package/dist/lib/browser/intent-resolver-KLK7PJZK.mjs.map +0 -7
  392. package/dist/lib/browser/migrations-RUAKBBTF.mjs +0 -23
  393. package/dist/lib/browser/migrations-RUAKBBTF.mjs.map +0 -7
  394. package/dist/lib/browser/react-context-PCT5C3BN.mjs +0 -25
  395. package/dist/lib/browser/react-context-PCT5C3BN.mjs.map +0 -7
  396. package/dist/lib/browser/react-surface-RCXEA65V.mjs +0 -66
  397. package/dist/lib/browser/react-surface-RCXEA65V.mjs.map +0 -7
  398. package/dist/lib/browser/schema-defs-UNNBAEFW.mjs +0 -25
  399. package/dist/lib/browser/schema-defs-UNNBAEFW.mjs.map +0 -7
  400. package/dist/lib/node-esm/app-graph-builder-LLM25DRR.mjs +0 -125
  401. package/dist/lib/node-esm/app-graph-builder-LLM25DRR.mjs.map +0 -7
  402. package/dist/lib/node-esm/chunk-6ANOJ7ZM.mjs +0 -19
  403. package/dist/lib/node-esm/chunk-6ANOJ7ZM.mjs.map +0 -7
  404. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs +0 -20
  405. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs.map +0 -7
  406. package/dist/lib/node-esm/chunk-DJ6XKSE4.mjs +0 -687
  407. package/dist/lib/node-esm/chunk-DJ6XKSE4.mjs.map +0 -7
  408. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs.map +0 -7
  409. package/dist/lib/node-esm/chunk-VENKFPBC.mjs +0 -111
  410. package/dist/lib/node-esm/chunk-VENKFPBC.mjs.map +0 -7
  411. package/dist/lib/node-esm/client-6MTNT7M6.mjs +0 -44
  412. package/dist/lib/node-esm/client-6MTNT7M6.mjs.map +0 -7
  413. package/dist/lib/node-esm/intent-resolver-YR2C224X.mjs +0 -306
  414. package/dist/lib/node-esm/intent-resolver-YR2C224X.mjs.map +0 -7
  415. package/dist/lib/node-esm/migrations-ASF2SAUR.mjs +0 -24
  416. package/dist/lib/node-esm/migrations-ASF2SAUR.mjs.map +0 -7
  417. package/dist/lib/node-esm/react-context-F4QOBWSP.mjs.map +0 -7
  418. package/dist/lib/node-esm/react-surface-SQBRXVMZ.mjs +0 -67
  419. package/dist/lib/node-esm/react-surface-SQBRXVMZ.mjs.map +0 -7
  420. package/dist/lib/node-esm/schema-defs-MSIT2KK2.mjs +0 -26
  421. package/dist/lib/node-esm/schema-defs-MSIT2KK2.mjs.map +0 -7
  422. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  423. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  424. package/dist/types/src/capabilities/capabilities.d.ts +0 -9
  425. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  426. package/dist/types/src/capabilities/client.d.ts +0 -9
  427. package/dist/types/src/capabilities/client.d.ts.map +0 -1
  428. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -8
  429. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  430. package/dist/types/src/capabilities/migrations.d.ts +0 -4
  431. package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
  432. package/dist/types/src/capabilities/react-context.d.ts +0 -8
  433. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  434. package/dist/types/src/capabilities/react-surface.d.ts +0 -8
  435. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  436. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  437. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  438. package/dist/types/src/components/DevicesContainer.d.ts.map +0 -1
  439. package/dist/types/src/components/DevicesContainer.stories.d.ts.map +0 -1
  440. package/dist/types/src/components/JoinDialog.d.ts.map +0 -1
  441. package/dist/types/src/components/ProfileContainer.d.ts.map +0 -1
  442. package/dist/types/src/components/ProfileContainer.stories.d.ts +0 -60
  443. package/dist/types/src/components/ProfileContainer.stories.d.ts.map +0 -1
  444. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +0 -1
  445. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts +0 -62
  446. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts.map +0 -1
  447. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +0 -1
  448. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts +0 -60
  449. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts.map +0 -1
  450. package/dist/types/src/components/ResetDialog.d.ts +0 -7
  451. package/dist/types/src/components/ResetDialog.d.ts.map +0 -1
  452. package/dist/types/src/components/ResetDialog.stories.d.ts +0 -65
  453. package/dist/types/src/components/ResetDialog.stories.d.ts.map +0 -1
  454. package/dist/types/src/events.d.ts +0 -8
  455. package/dist/types/src/events.d.ts.map +0 -1
  456. package/src/capabilities/app-graph-builder.ts +0 -115
  457. package/src/capabilities/capabilities.ts +0 -18
  458. package/src/capabilities/client.ts +0 -43
  459. package/src/capabilities/intent-resolver.ts +0 -251
  460. package/src/capabilities/migrations.ts +0 -25
  461. package/src/capabilities/react-context.tsx +0 -22
  462. package/src/capabilities/react-surface.tsx +0 -67
  463. package/src/capabilities/schema-defs.ts +0 -29
  464. package/src/components/JoinDialog.tsx +0 -54
  465. package/src/components/RecoveryCredentialsContainer.stories.tsx +0 -42
  466. package/src/components/ResetDialog.stories.tsx +0 -52
  467. package/src/components/ResetDialog.tsx +0 -50
  468. package/src/events.ts +0 -15
  469. /package/dist/types/src/{components → containers/DevicesContainer}/DevicesContainer.d.ts +0 -0
  470. /package/dist/types/src/{components → containers/ProfileContainer}/ProfileContainer.d.ts +0 -0
  471. /package/dist/types/src/{components → containers/RecoveryCredentialsContainer}/RecoveryCredentialsContainer.d.ts +0 -0
@@ -5,103 +5,94 @@
5
5
  import React, { useCallback, useEffect, useState } from 'react';
6
6
  import { QR } from 'react-qr-rounded';
7
7
 
8
- import { createIntent } from '@dxos/app-framework';
9
- import { useIntentDispatcher } from '@dxos/app-framework/react';
8
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
10
9
  import { log } from '@dxos/log';
11
10
  import { useClient, useMulticastObservable } from '@dxos/react-client';
12
11
  import { type Device, useDevices } from '@dxos/react-client/halo';
13
12
  import { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
14
13
  import { useNetworkStatus } from '@dxos/react-client/mesh';
15
14
  import { Button, Clipboard, Icon, IconButton, List, useId, useTranslation } from '@dxos/react-ui';
16
- import {
17
- ControlFrame,
18
- ControlFrameItem,
19
- ControlGroup,
20
- ControlItem,
21
- ControlPage,
22
- ControlSection,
23
- } from '@dxos/react-ui-form';
24
- import { AuthCode, Centered, DeviceListItem, Emoji, Viewport } from '@dxos/shell/react';
15
+ import { Settings } from '@dxos/react-ui-form';
16
+ import { AuthCode, Centered, DeviceListItem, Emoji, Viewport, translationKey } from '@dxos/shell/react';
17
+ import { osTranslations } from '@dxos/ui-theme';
25
18
  import { hexToEmoji } from '@dxos/util';
26
19
 
27
- import { meta } from '../meta';
28
- import { ClientAction } from '../types';
20
+ import { meta } from '../../meta';
21
+ import { ClientOperation } from '../../types';
29
22
 
30
23
  export type DevicesContainerProps = {
31
24
  createInvitationUrl?: (invitationCode: string) => string;
32
25
  };
33
26
 
34
27
  export const DevicesContainer = ({ createInvitationUrl }: DevicesContainerProps) => {
35
- const { t } = useTranslation('os');
36
- const { dispatchPromise: dispatch } = useIntentDispatcher();
28
+ const { t } = useTranslation(translationKey);
29
+ const { invokePromise } = useOperationInvoker();
37
30
  const devices = useDevices();
38
31
  const { swarm: connectionState } = useNetworkStatus();
39
32
 
40
- const handleResetStorage = useCallback(() => dispatch(createIntent(ClientAction.ResetStorage)), [dispatch]);
33
+ const handleResetStorage = useCallback(() => invokePromise(ClientOperation.ResetStorage, {}), [invokePromise]);
41
34
 
42
35
  const handleRecover = useCallback(
43
- () => dispatch(createIntent(ClientAction.ResetStorage, { mode: 'recover' })),
44
- [dispatch],
36
+ () => invokePromise(ClientOperation.ResetStorage, { mode: 'recover' }),
37
+ [invokePromise],
45
38
  );
46
39
 
47
40
  const handleJoinNewIdentity = useCallback(
48
- () => dispatch(createIntent(ClientAction.ResetStorage, { mode: 'join new identity' })),
49
- [dispatch],
41
+ () => invokePromise(ClientOperation.ResetStorage, { mode: 'join new identity' }),
42
+ [invokePromise],
50
43
  );
51
44
 
52
45
  return (
53
46
  <Clipboard.Provider>
54
- <ControlPage>
55
- <ControlSection
47
+ <Settings.Root>
48
+ <Settings.Section
56
49
  title={t('devices verbose label', { ns: meta.id })}
57
50
  description={t('devices description', { ns: meta.id })}
58
51
  >
59
- <ControlFrame>
60
- <ControlFrameItem title={t('devices label', { ns: meta.id })}>
52
+ <Settings.Frame>
53
+ <Settings.FrameItem title={t('devices label', { ns: meta.id })}>
61
54
  <List>
62
- {devices.map((device: Device) => {
63
- return (
64
- <DeviceListItem key={device.deviceKey.toHex()} device={device} connectionState={connectionState} />
65
- );
66
- })}
55
+ {devices.map((device: Device) => (
56
+ <DeviceListItem key={device.deviceKey.toHex()} device={device} connectionState={connectionState} />
57
+ ))}
67
58
  </List>
68
- </ControlFrameItem>
59
+ </Settings.FrameItem>
69
60
  {createInvitationUrl && (
70
- <ControlFrameItem title='Add device'>
61
+ <Settings.FrameItem title='Add device'>
71
62
  <DeviceInvitation createInvitationUrl={createInvitationUrl} />
72
- </ControlFrameItem>
63
+ </Settings.FrameItem>
73
64
  )}
74
- </ControlFrame>
75
- </ControlSection>
76
- <ControlSection
65
+ </Settings.Frame>
66
+ </Settings.Section>
67
+ <Settings.Section
77
68
  title={t('danger zone title', { ns: meta.id })}
78
69
  description={t('danger zone description', { ns: meta.id })}
79
70
  >
80
- <ControlGroup>
81
- <ControlItem title={t('reset device label')} description={t('reset device description', { ns: meta.id })}>
71
+ <Settings.Group>
72
+ <Settings.Item title={t('reset device label')} description={t('reset device description', { ns: meta.id })}>
82
73
  <Button variant='destructive' onClick={handleResetStorage} data-testid='devicesContainer.reset'>
83
74
  {t('reset device label')}
84
75
  </Button>
85
- </ControlItem>
86
- <ControlItem
76
+ </Settings.Item>
77
+ <Settings.Item
87
78
  title={t('recover identity label')}
88
79
  description={t('recover identity description', { ns: meta.id })}
89
80
  >
90
81
  <Button variant='destructive' onClick={handleRecover} data-testid='devicesContainer.recover'>
91
82
  {t('recover identity label')}
92
83
  </Button>
93
- </ControlItem>
94
- <ControlItem
84
+ </Settings.Item>
85
+ <Settings.Item
95
86
  title={t('join new identity label')}
96
87
  description={t('join new identity description', { ns: meta.id })}
97
88
  >
98
89
  <Button variant='destructive' onClick={handleJoinNewIdentity} data-testid='devicesContainer.joinExisting'>
99
90
  {t('join new identity label')}
100
91
  </Button>
101
- </ControlItem>
102
- </ControlGroup>
103
- </ControlSection>
104
- </ControlPage>
92
+ </Settings.Item>
93
+ </Settings.Group>
94
+ </Settings.Section>
95
+ </Settings.Root>
105
96
  </Clipboard.Provider>
106
97
  );
107
98
  };
@@ -187,12 +178,12 @@ const InvitationSection = ({
187
178
  : 'qr-code';
188
179
  return activeView === 'init' ? (
189
180
  <>
190
- <p className='text-description mbe-2'>{t('add device description')}</p>
181
+ <p className='text-description mb-2'>{t('add device description')}</p>
191
182
  <IconButton
192
183
  icon='ph--plus--regular'
193
184
  label={t('create device invitation label')}
194
185
  disabled={state >= 0}
195
- classNames='is-full'
186
+ classNames='w-full'
196
187
  data-testid='devicesContainer.createInvitation'
197
188
  onClick={onInvitationCreate}
198
189
  />
@@ -218,27 +209,29 @@ const InvitationSection = ({
218
209
  };
219
210
 
220
211
  const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel: () => void }) => {
221
- const { t } = useTranslation('os');
212
+ const { t } = useTranslation(osTranslations);
222
213
  const qrLabel = useId('devices-container__qr-code');
223
214
  const emoji = hexToEmoji(id);
224
215
  return (
225
216
  <>
226
217
  <p className='text-description'>{t('qr code description', { ns: meta.id })}</p>
227
- <div role='group' className='grid grid-cols-[1fr_min-content] mlb-2 gap-2'>
228
- <div role='none' className='is-full aspect-square relative text-description'>
229
- <QR
230
- rounding={100}
231
- backgroundColor='transparent'
232
- color='currentColor'
233
- aria-labelledby={qrLabel}
234
- errorCorrectionLevel='Q'
235
- cutout={true}
236
- >
237
- {url ?? 'never'}
238
- </QR>
239
- <Centered>
240
- <Emoji text={emoji} />
241
- </Centered>
218
+ <div role='group' className='grid grid-cols-[1fr_min-content]'>
219
+ <div className='flex justify-center py-4'>
220
+ <div role='none' className='w-full md:max-w-80 aspect-square relative text-description'>
221
+ <QR
222
+ rounding={100}
223
+ backgroundColor='transparent'
224
+ color='currentColor'
225
+ aria-labelledby={qrLabel}
226
+ errorCorrectionLevel='Q'
227
+ cutout={true}
228
+ >
229
+ {url ?? 'never'}
230
+ </QR>
231
+ <Centered>
232
+ <Emoji text={emoji} />
233
+ </Centered>
234
+ </div>
242
235
  </div>
243
236
  <span id={qrLabel} className='sr-only'>
244
237
  {t('qr label')}
@@ -258,15 +251,15 @@ const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel
258
251
  };
259
252
 
260
253
  const InvitationAuthCode = ({ id, code, onCancel }: { id: string; code: string; onCancel: () => void }) => {
261
- const { t } = useTranslation('os');
254
+ const { t } = useTranslation(osTranslations);
262
255
  const emoji = hexToEmoji(id);
263
256
 
264
257
  return (
265
258
  <>
266
259
  <p className='text-description'>{t('auth other device emoji message')}</p>
267
- {emoji && <Emoji text={emoji} className='mli-auto mlb-2 text-center' />}
260
+ {emoji && <Emoji text={emoji} className='mx-auto my-2 text-center' />}
268
261
  <p className='text-description'>{t('auth code message')}</p>
269
- <AuthCode code={code} large classNames='mli-auto mlb-2 text-center grow' />
262
+ <AuthCode code={code} large classNames='mx-auto my-2 text-center grow' />
270
263
  <Button variant='ghost' onClick={onCancel}>
271
264
  {t('cancel label')}
272
265
  </Button>
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { DevicesContainer } from './DevicesContainer';
6
+
7
+ export default DevicesContainer;
@@ -0,0 +1,53 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import React, { useCallback } from 'react';
6
+
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
9
+ import { ObservabilityOperation } from '@dxos/plugin-observability/types';
10
+ import { type InvitationResult } from '@dxos/react-client/invitations';
11
+ import { Dialog, useTranslation } from '@dxos/react-ui';
12
+ import { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';
13
+ import { osTranslations } from '@dxos/ui-theme';
14
+
15
+ import { meta } from '../../meta';
16
+ import { ClientOperation } from '../../types';
17
+
18
+ export const JoinDialog = (props: JoinPanelProps) => {
19
+ const { invokePromise } = useOperationInvoker();
20
+ const { t } = useTranslation(meta.id);
21
+
22
+ const handleCancelResetStorage = useCallback(() => invokePromise(ClientOperation.ShareIdentity), [invokePromise]);
23
+
24
+ const handleDone = useCallback(
25
+ async (result: InvitationResult | null) => {
26
+ if (result?.identityKey) {
27
+ await Promise.all([
28
+ invokePromise(LayoutOperation.UpdateDialog, { state: false }),
29
+ invokePromise(ObservabilityOperation.SendEvent, {
30
+ name: props.initialDisposition === 'recover-identity' ? 'identity.recover' : 'identity.join',
31
+ }),
32
+ ]);
33
+ }
34
+ },
35
+ [invokePromise],
36
+ );
37
+
38
+ return (
39
+ <Dialog.Content>
40
+ <Dialog.Header>
41
+ <Dialog.Title classNames='sr-only'>{t('join space label', { ns: osTranslations })}</Dialog.Title>
42
+ </Dialog.Header>
43
+ <JoinPanel
44
+ mode='halo-only'
45
+ {...props}
46
+ exitActionParent={<Dialog.Close asChild />}
47
+ doneActionParent={<Dialog.Close asChild />}
48
+ onCancelResetStorage={handleCancelResetStorage}
49
+ onDone={handleDone}
50
+ />
51
+ </Dialog.Content>
52
+ );
53
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { JoinDialog } from './JoinDialog';
6
+
7
+ export default JoinDialog;
@@ -5,16 +5,16 @@
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
6
 
7
7
  import { withClientProvider } from '@dxos/react-client/testing';
8
- import { withTheme } from '@dxos/react-ui/testing';
8
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
9
9
 
10
- import { translations } from '../translations';
10
+ import { translations } from '../../translations';
11
11
 
12
12
  import { ProfileContainer } from './ProfileContainer';
13
13
 
14
14
  const meta = {
15
- title: 'plugins/plugin-client/ProfileContainer',
15
+ title: 'plugins/plugin-client/containers/ProfileContainer',
16
16
  component: ProfileContainer,
17
- decorators: [withTheme, withClientProvider({ createIdentity: true })],
17
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' }), withClientProvider({ createIdentity: true })],
18
18
  parameters: {
19
19
  layout: 'fullscreen',
20
20
  translations,
@@ -9,23 +9,27 @@ import { debounce } from '@dxos/async';
9
9
  import { useClient } from '@dxos/react-client';
10
10
  import { type Identity, useIdentity } from '@dxos/react-client/halo';
11
11
  import { ButtonGroup, Clipboard, Input, useTranslation } from '@dxos/react-ui';
12
- import {
13
- ControlItem,
14
- ControlItemInput,
15
- ControlPage,
16
- ControlSection,
17
- Form,
18
- type InputComponent,
19
- } from '@dxos/react-ui-form';
12
+ import { Form, type FormFieldMap, type FormUpdateMeta, Settings } from '@dxos/react-ui-form';
20
13
  import { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';
21
14
  import { hexToEmoji, hexToHue } from '@dxos/util';
22
15
 
23
- import { meta } from '../meta';
16
+ import { meta } from '../../meta';
17
+
18
+ // TOOD(burdon): Factor out?
19
+ // TODO(wittjosiah): Integrate annotations with translations.
20
+ const UserProfile = Schema.Struct({
21
+ did: Schema.String.annotations({ title: 'DID' }),
22
+ displayName: Schema.String.annotations({ title: 'Display name' }),
23
+ emoji: Schema.String.annotations({ title: 'Avatar' }),
24
+ hue: Schema.String.annotations({ title: 'Color' }),
25
+ });
26
+
27
+ type UserProfile = Schema.Schema.Type<typeof UserProfile>;
24
28
 
25
29
  // TODO(thure): Factor out?
26
30
  const getDefaultHueValue = (identity: Identity | null) => hexToHue(identity?.identityKey.toHex() ?? '0');
27
- const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
28
31
  const getHueValue = (identity: Identity | null) => identity?.profile?.data?.hue || getDefaultHueValue(identity);
32
+ const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
29
33
  const getEmojiValue = (identity: Identity | null) => identity?.profile?.data?.emoji || getDefaultEmojiValue(identity);
30
34
 
31
35
  export const ProfileContainer = () => {
@@ -39,7 +43,7 @@ export const ProfileContainer = () => {
39
43
  const updateProfile = useMemo(
40
44
  () =>
41
45
  debounce(
42
- (profile: Partial<Profile>) =>
46
+ (profile: Partial<UserProfile>) =>
43
47
  client.halo.updateProfile({
44
48
  displayName: profile.displayName,
45
49
  data: {
@@ -52,11 +56,26 @@ export const ProfileContainer = () => {
52
56
  [],
53
57
  );
54
58
 
55
- const handleSave = useCallback(
56
- (profile: Profile) => {
57
- setDisplayNameDirectly(profile.displayName);
58
- setEmojiDirectly(profile.emoji);
59
- setHueDirectly(profile.hue);
59
+ const handleChange = useCallback(
60
+ (profile: Partial<UserProfile>, meta: FormUpdateMeta<UserProfile>) => {
61
+ for (const [path, changed] of Object.entries(meta.changed)) {
62
+ if (changed) {
63
+ switch (path) {
64
+ case 'displayName':
65
+ setDisplayNameDirectly(profile.displayName ?? '');
66
+ break;
67
+ case 'emoji':
68
+ setEmojiDirectly(profile.emoji ?? getDefaultEmojiValue(identity));
69
+ break;
70
+ case 'hue':
71
+ setHueDirectly(profile.hue ?? getDefaultHueValue(identity));
72
+ break;
73
+ default:
74
+ break;
75
+ }
76
+ }
77
+ }
78
+
60
79
  void updateProfile(profile);
61
80
  },
62
81
  [identity],
@@ -64,31 +83,32 @@ export const ProfileContainer = () => {
64
83
 
65
84
  const values = useMemo(
66
85
  () => ({
86
+ did: identity?.did,
67
87
  displayName,
68
88
  emoji,
69
89
  hue,
70
- did: identity?.did,
71
90
  }),
72
91
  [identity, displayName, emoji, hue],
73
92
  );
74
93
 
75
94
  // TODO(wittjosiah): Integrate descriptions with the form schema.
76
- const customElements: Partial<Record<string, InputComponent>> = useMemo(
95
+ const fieldMap = useMemo<FormFieldMap>(
77
96
  () => ({
78
97
  displayName: ({ type, label, getValue, onValueChange }) => {
79
98
  const handleChange = useCallback(
80
99
  ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),
81
100
  [onValueChange, type],
82
101
  );
102
+
83
103
  return (
84
- <ControlItemInput title={label} description={t('display name description')}>
104
+ <Settings.ItemInput title={label} description={t('display name description')}>
85
105
  <Input.TextInput
86
106
  value={getValue()}
87
107
  onChange={handleChange}
88
108
  placeholder={t('display name input placeholder')}
89
- classNames='min-is-64'
109
+ classNames='min-w-64'
90
110
  />
91
- </ControlItemInput>
111
+ </Settings.ItemInput>
92
112
  );
93
113
  },
94
114
  emoji: ({ type, label, getValue, onValueChange }) => {
@@ -97,8 +117,9 @@ export const ProfileContainer = () => {
97
117
  () => onValueChange(type, getDefaultEmojiValue(identity)),
98
118
  [onValueChange, type],
99
119
  );
120
+
100
121
  return (
101
- <ControlItem title={label} description={t('icon description')}>
122
+ <Settings.Item title={label} description={t('icon description')}>
102
123
  <EmojiPickerBlock
103
124
  triggerVariant='default'
104
125
  emoji={getValue()}
@@ -106,7 +127,7 @@ export const ProfileContainer = () => {
106
127
  onClickClear={handleEmojiReset}
107
128
  classNames='justify-self-end'
108
129
  />
109
- </ControlItem>
130
+ </Settings.Item>
110
131
  );
111
132
  },
112
133
  hue: ({ type, label, getValue, onValueChange }) => {
@@ -115,21 +136,24 @@ export const ProfileContainer = () => {
115
136
  () => onValueChange(type, getDefaultHueValue(identity)),
116
137
  [onValueChange, type],
117
138
  );
139
+
118
140
  return (
119
- <ControlItem title={label} description={t('hue description')}>
120
- <HuePicker value={getValue()} onChange={handleChange} onReset={handleHueReset} />
121
- </ControlItem>
141
+ <Settings.Item title={label} description={t('hue description')}>
142
+ <div role='none' className='flex justify-self-end'>
143
+ <HuePicker value={getValue()} onChange={handleChange} onReset={handleHueReset} />
144
+ </div>
145
+ </Settings.Item>
122
146
  );
123
147
  },
124
148
  // TODO(wittjosiah): We need text input annotations for disabled and copyable.
125
149
  did: ({ label, getValue }) => {
126
150
  return (
127
- <ControlItemInput title={label} description={t('did description')}>
128
- <ButtonGroup>
129
- <Input.TextInput value={getValue()} disabled classNames='min-is-64' />
151
+ <Settings.ItemInput title={label} description={t('did description')}>
152
+ <ButtonGroup classNames='w-full'>
153
+ <Input.TextInput value={getValue()} disabled classNames='min-w-64' />
130
154
  <Clipboard.IconButton value={getValue() ?? ''} />
131
155
  </ButtonGroup>
132
- </ControlItemInput>
156
+ </Settings.ItemInput>
133
157
  );
134
158
  },
135
159
  }),
@@ -137,29 +161,16 @@ export const ProfileContainer = () => {
137
161
  );
138
162
 
139
163
  return (
140
- <ControlPage>
141
- <Clipboard.Provider>
142
- <ControlSection title={t('profile label')} description={t('profile description')}>
143
- <Form
144
- schema={ProfileSchema}
145
- values={values}
146
- autoSave
147
- onSave={handleSave}
148
- Custom={customElements}
149
- classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'
150
- outerSpacing={false}
151
- />
152
- </ControlSection>
153
- </Clipboard.Provider>
154
- </ControlPage>
164
+ <Clipboard.Provider>
165
+ <Settings.Root>
166
+ <Settings.Section title={t('profile label')} description={t('profile description')}>
167
+ <Form.Root schema={UserProfile} values={values} fieldMap={fieldMap} onValuesChanged={handleChange}>
168
+ <Form.Content>
169
+ <Form.FieldSet />
170
+ </Form.Content>
171
+ </Form.Root>
172
+ </Settings.Section>
173
+ </Settings.Root>
174
+ </Clipboard.Provider>
155
175
  );
156
176
  };
157
-
158
- // TODO(wittjosiah): Integrate annotations with translations.
159
- const ProfileSchema = Schema.Struct({
160
- displayName: Schema.String.annotations({ title: 'Display name' }),
161
- emoji: Schema.String.annotations({ title: 'Avatar' }),
162
- hue: Schema.String.annotations({ title: 'Color' }),
163
- did: Schema.String.annotations({ title: 'DID' }),
164
- });
165
- type Profile = Schema.Schema.Type<typeof ProfileSchema>;
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { ProfileContainer } from './ProfileContainer';
6
+
7
+ export default ProfileContainer;
@@ -8,9 +8,9 @@ import React, { useState } from 'react';
8
8
  import { useClient } from '@dxos/react-client';
9
9
  import { withClientProvider } from '@dxos/react-client/testing';
10
10
  import { AlertDialog, useAsyncEffect } from '@dxos/react-ui';
11
- import { withTheme } from '@dxos/react-ui/testing';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
12
 
13
- import { translations } from '../translations';
13
+ import { translations } from '../../translations';
14
14
 
15
15
  import { RecoveryCodeDialog } from './RecoveryCodeDialog';
16
16
 
@@ -32,10 +32,10 @@ const DefaultStory = () => {
32
32
  };
33
33
 
34
34
  const meta = {
35
- title: 'plugins/plugin-client/RecoveryCodeDialog',
35
+ title: 'plugins/plugin-client/containers/RecoveryCodeDialog',
36
36
  component: RecoveryCodeDialog as any,
37
37
  render: DefaultStory,
38
- decorators: [withTheme, withClientProvider({ createIdentity: true })],
38
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' }), withClientProvider({ createIdentity: true })],
39
39
  parameters: {
40
40
  layout: 'fullscreen',
41
41
  translations,
@@ -6,14 +6,13 @@ import React, { useCallback, useState } from 'react';
6
6
 
7
7
  import { AlertDialog, Button, Clipboard, Input, useTranslation } from '@dxos/react-ui';
8
8
 
9
- import { meta } from '../meta';
10
-
11
- export const RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;
9
+ import { meta } from '../../meta';
12
10
 
13
11
  export type RecoveryCodeDialogProps = {
14
12
  code: string;
15
13
  };
16
14
 
15
+ // TODO(burdon): Should have cancel button.
17
16
  export const RecoveryCodeDialog = ({ code }: RecoveryCodeDialogProps) => {
18
17
  const { t } = useTranslation(meta.id);
19
18
  const [confirmation, setConfirmation] = useState(false);
@@ -21,33 +20,35 @@ export const RecoveryCodeDialog = ({ code }: RecoveryCodeDialogProps) => {
21
20
  const handleConfirmation = useCallback((checked: boolean) => setConfirmation(checked), []);
22
21
 
23
22
  return (
24
- <AlertDialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>
25
- <AlertDialog.Title>{t('recovery code dialog title')}</AlertDialog.Title>
26
- <p className='plb-4'>{t('recovery code dialog description')}</p>
27
- <Clipboard.Provider>
28
- <Code code={code} />
29
- </Clipboard.Provider>
30
- <div className='flex flex-col plb-4 gap-2'>
31
- <p>{t('recovery code dialog warning 1')}</p>
32
- <p>{t('recovery code dialog warning 2')}</p>
33
- </div>
34
- <div className='flex items-center gap-2 pbe-4'>
35
- <Input.Root>
36
- <Input.Checkbox
37
- data-testid='recoveryCode.confirm'
38
- checked={confirmation}
39
- onCheckedChange={handleConfirmation}
40
- />
41
- <Input.Label>{t('recovery code confirmation label')}</Input.Label>
42
- </Input.Root>
43
- </div>
44
- <div className='flex justify-end'>
23
+ <AlertDialog.Content size='md' classNames='min-h-[15rem]'>
24
+ <AlertDialog.Body>
25
+ <AlertDialog.Title>{t('recovery code dialog title')}</AlertDialog.Title>
26
+ <p className='py-4'>{t('recovery code dialog description')}</p>
27
+ <Clipboard.Provider>
28
+ <Code code={code} />
29
+ </Clipboard.Provider>
30
+ <div className='flex flex-col py-4 gap-2'>
31
+ <p>{t('recovery code dialog warning 1')}</p>
32
+ <p>{t('recovery code dialog warning 2')}</p>
33
+ </div>
34
+ <div className='flex items-center gap-2 pb-4'>
35
+ <Input.Root>
36
+ <Input.Checkbox
37
+ data-testid='recoveryCode.confirm'
38
+ checked={confirmation}
39
+ onCheckedChange={handleConfirmation}
40
+ />
41
+ <Input.Label>{t('recovery code confirmation label')}</Input.Label>
42
+ </Input.Root>
43
+ </div>
44
+ </AlertDialog.Body>
45
+ <AlertDialog.ActionBar>
45
46
  <AlertDialog.Action asChild>
46
47
  <Button data-testid='recoveryCode.continue' variant='primary' disabled={!confirmation}>
47
48
  {t('continue label')}
48
49
  </Button>
49
50
  </AlertDialog.Action>
50
- </div>
51
+ </AlertDialog.ActionBar>
51
52
  </AlertDialog.Content>
52
53
  );
53
54
  };
@@ -55,12 +56,12 @@ export const RecoveryCodeDialog = ({ code }: RecoveryCodeDialogProps) => {
55
56
  const Code = ({ code }: { code: string }) => {
56
57
  const words = code.split(' ');
57
58
  return (
58
- <div className='relative p-2 border border-separator rounded group'>
59
+ <div className='relative p-2 border border-separator rounded-sm group'>
59
60
  <Clipboard.IconButton value={code} classNames='absolute top-2 right-2 invisible group-hover:visible' />
60
61
  <div className='grid grid-cols-4'>
61
62
  {words.map((word, i) => (
62
63
  <div key={i} className='flex items-center p-2 gap-2'>
63
- <div className='is-4 text-xs text-center text-subdued'>{i + 1}</div>
64
+ <div className='w-4 text-xs text-center text-subdued'>{i + 1}</div>
64
65
  <div className='text-sm'>{word}</div>
65
66
  </div>
66
67
  ))}
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { RecoveryCodeDialog } from './RecoveryCodeDialog';
6
+
7
+ export * from './RecoveryCodeDialog';
8
+ export default RecoveryCodeDialog;