@dxos/plugin-client 0.8.4-main.1da679c → 0.8.4-main.21d9917

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 (400) hide show
  1. package/dist/lib/browser/app-graph-builder-3FGBMLTF.mjs +118 -0
  2. package/dist/lib/browser/app-graph-builder-3FGBMLTF.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-4BZGRIFS.mjs +293 -0
  4. package/dist/lib/browser/chunk-4BZGRIFS.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-F7H2Y3Z2.mjs +18 -0
  6. package/dist/lib/browser/chunk-F7H2Y3Z2.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-G7C3S2BE.mjs +15 -0
  8. package/dist/lib/browser/chunk-G7C3S2BE.mjs.map +7 -0
  9. package/dist/lib/browser/cli/index.mjs +1048 -0
  10. package/dist/lib/browser/cli/index.mjs.map +7 -0
  11. package/dist/lib/browser/client-IX5LMWV4.mjs +86 -0
  12. package/dist/lib/browser/client-IX5LMWV4.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +75 -81
  14. package/dist/lib/browser/index.mjs.map +4 -4
  15. package/dist/lib/browser/meta.json +1 -1
  16. package/dist/lib/browser/migrations-3EBTAW3N.mjs +24 -0
  17. package/dist/lib/browser/migrations-3EBTAW3N.mjs.map +7 -0
  18. package/dist/lib/browser/operation-resolver-2NT3ISVP.mjs +298 -0
  19. package/dist/lib/browser/operation-resolver-2NT3ISVP.mjs.map +7 -0
  20. package/dist/lib/browser/react-context-4UABG3GP.mjs +24 -0
  21. package/dist/lib/browser/react-context-4UABG3GP.mjs.map +7 -0
  22. package/dist/lib/browser/react-surface-RSQ74XCT.mjs +675 -0
  23. package/dist/lib/browser/react-surface-RSQ74XCT.mjs.map +7 -0
  24. package/dist/lib/browser/schema-defs-O7VLP745.mjs +26 -0
  25. package/dist/lib/browser/schema-defs-O7VLP745.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +9 -4
  27. package/dist/lib/node-esm/app-graph-builder-2PIYVUNC.mjs +119 -0
  28. package/dist/lib/node-esm/app-graph-builder-2PIYVUNC.mjs.map +7 -0
  29. package/dist/lib/node-esm/chunk-BCELGXRI.mjs +20 -0
  30. package/dist/lib/node-esm/chunk-BCELGXRI.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-JAF64TFQ.mjs +295 -0
  32. package/dist/lib/node-esm/chunk-JAF64TFQ.mjs.map +7 -0
  33. package/dist/lib/node-esm/chunk-PRAFFO54.mjs +16 -0
  34. package/dist/lib/node-esm/chunk-PRAFFO54.mjs.map +7 -0
  35. package/dist/lib/node-esm/cli/index.mjs +1049 -0
  36. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  37. package/dist/lib/node-esm/client-FFPK5UFP.mjs +87 -0
  38. package/dist/lib/node-esm/client-FFPK5UFP.mjs.map +7 -0
  39. package/dist/lib/node-esm/index.mjs +75 -81
  40. package/dist/lib/node-esm/index.mjs.map +4 -4
  41. package/dist/lib/node-esm/meta.json +1 -1
  42. package/dist/lib/node-esm/migrations-WSZSFGDK.mjs +25 -0
  43. package/dist/lib/node-esm/migrations-WSZSFGDK.mjs.map +7 -0
  44. package/dist/lib/node-esm/operation-resolver-VW5R2BE4.mjs +299 -0
  45. package/dist/lib/node-esm/operation-resolver-VW5R2BE4.mjs.map +7 -0
  46. package/dist/lib/node-esm/react-context-UVXMGPW4.mjs +25 -0
  47. package/dist/lib/node-esm/react-context-UVXMGPW4.mjs.map +7 -0
  48. package/dist/lib/node-esm/react-surface-KBHANGGC.mjs +676 -0
  49. package/dist/lib/node-esm/react-surface-KBHANGGC.mjs.map +7 -0
  50. package/dist/lib/node-esm/schema-defs-QLRGBIKY.mjs +27 -0
  51. package/dist/lib/node-esm/schema-defs-QLRGBIKY.mjs.map +7 -0
  52. package/dist/lib/node-esm/types/index.mjs +9 -4
  53. package/dist/types/src/ClientPlugin.d.ts +2 -1
  54. package/dist/types/src/ClientPlugin.d.ts.map +1 -1
  55. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts +6 -0
  56. package/dist/types/src/capabilities/app-graph-builder/app-graph-builder.d.ts.map +1 -0
  57. package/dist/types/src/capabilities/app-graph-builder/index.d.ts +3 -0
  58. package/dist/types/src/capabilities/app-graph-builder/index.d.ts.map +1 -0
  59. package/dist/types/src/capabilities/client/client.d.ts +8 -0
  60. package/dist/types/src/capabilities/client/client.d.ts.map +1 -0
  61. package/dist/types/src/capabilities/client/index.d.ts +17 -0
  62. package/dist/types/src/capabilities/client/index.d.ts.map +1 -0
  63. package/dist/types/src/capabilities/index.d.ts +7 -19
  64. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/migrations/index.d.ts +3 -0
  66. package/dist/types/src/capabilities/migrations/index.d.ts.map +1 -0
  67. package/dist/types/src/capabilities/migrations/migrations.d.ts +5 -0
  68. package/dist/types/src/capabilities/migrations/migrations.d.ts.map +1 -0
  69. package/dist/types/src/capabilities/operation-resolver/index.d.ts +5 -0
  70. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  71. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +8 -0
  72. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  73. package/dist/types/src/capabilities/react-context/index.d.ts +7 -0
  74. package/dist/types/src/capabilities/react-context/index.d.ts.map +1 -0
  75. package/dist/types/src/capabilities/react-context/react-context.d.ts +10 -0
  76. package/dist/types/src/capabilities/react-context/react-context.d.ts.map +1 -0
  77. package/dist/types/src/capabilities/react-surface/index.d.ts +5 -0
  78. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  79. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +9 -0
  80. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  81. package/dist/types/src/capabilities/schema-defs/index.d.ts +3 -0
  82. package/dist/types/src/capabilities/schema-defs/index.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/schema-defs/schema-defs.d.ts +5 -0
  84. package/dist/types/src/capabilities/schema-defs/schema-defs.d.ts.map +1 -0
  85. package/dist/types/src/cli/commands/config/index.d.ts +5 -0
  86. package/dist/types/src/cli/commands/config/index.d.ts.map +1 -0
  87. package/dist/types/src/cli/commands/config/view.d.ts +5 -0
  88. package/dist/types/src/cli/commands/config/view.d.ts.map +1 -0
  89. package/dist/types/src/cli/commands/device/index.d.ts +7 -0
  90. package/dist/types/src/cli/commands/device/index.d.ts.map +1 -0
  91. package/dist/types/src/cli/commands/device/info/index.d.ts +2 -0
  92. package/dist/types/src/cli/commands/device/info/index.d.ts.map +1 -0
  93. package/dist/types/src/cli/commands/device/info/info.d.ts +7 -0
  94. package/dist/types/src/cli/commands/device/info/info.d.ts.map +1 -0
  95. package/dist/types/src/cli/commands/device/info/info.test.d.ts +2 -0
  96. package/dist/types/src/cli/commands/device/info/info.test.d.ts.map +1 -0
  97. package/dist/types/src/cli/commands/device/list/index.d.ts +2 -0
  98. package/dist/types/src/cli/commands/device/list/index.d.ts.map +1 -0
  99. package/dist/types/src/cli/commands/device/list/list.d.ts +7 -0
  100. package/dist/types/src/cli/commands/device/list/list.d.ts.map +1 -0
  101. package/dist/types/src/cli/commands/device/list/list.test.d.ts +2 -0
  102. package/dist/types/src/cli/commands/device/list/list.test.d.ts.map +1 -0
  103. package/dist/types/src/cli/commands/device/update/index.d.ts +2 -0
  104. package/dist/types/src/cli/commands/device/update/index.d.ts.map +1 -0
  105. package/dist/types/src/cli/commands/device/update/update.d.ts +11 -0
  106. package/dist/types/src/cli/commands/device/update/update.d.ts.map +1 -0
  107. package/dist/types/src/cli/commands/device/util.d.ts +16 -0
  108. package/dist/types/src/cli/commands/device/util.d.ts.map +1 -0
  109. package/dist/types/src/cli/commands/edge/index.d.ts +5 -0
  110. package/dist/types/src/cli/commands/edge/index.d.ts.map +1 -0
  111. package/dist/types/src/cli/commands/edge/status.d.ts +7 -0
  112. package/dist/types/src/cli/commands/edge/status.d.ts.map +1 -0
  113. package/dist/types/src/cli/commands/halo/create/create.d.ts +15 -0
  114. package/dist/types/src/cli/commands/halo/create/create.d.ts.map +1 -0
  115. package/dist/types/src/cli/commands/halo/create/create.test.d.ts +2 -0
  116. package/dist/types/src/cli/commands/halo/create/create.test.d.ts.map +1 -0
  117. package/dist/types/src/cli/commands/halo/create/index.d.ts +2 -0
  118. package/dist/types/src/cli/commands/halo/create/index.d.ts.map +1 -0
  119. package/dist/types/src/cli/commands/halo/credential/add/add.d.ts +13 -0
  120. package/dist/types/src/cli/commands/halo/credential/add/add.d.ts.map +1 -0
  121. package/dist/types/src/cli/commands/halo/credential/add/index.d.ts +2 -0
  122. package/dist/types/src/cli/commands/halo/credential/add/index.d.ts.map +1 -0
  123. package/dist/types/src/cli/commands/halo/credential/index.d.ts +12 -0
  124. package/dist/types/src/cli/commands/halo/credential/index.d.ts.map +1 -0
  125. package/dist/types/src/cli/commands/halo/credential/list/index.d.ts +2 -0
  126. package/dist/types/src/cli/commands/halo/credential/list/index.d.ts.map +1 -0
  127. package/dist/types/src/cli/commands/halo/credential/list/list.d.ts +19 -0
  128. package/dist/types/src/cli/commands/halo/credential/list/list.d.ts.map +1 -0
  129. package/dist/types/src/cli/commands/halo/credential/list/list.test.d.ts +2 -0
  130. package/dist/types/src/cli/commands/halo/credential/list/list.test.d.ts.map +1 -0
  131. package/dist/types/src/cli/commands/halo/identity/identity.d.ts +7 -0
  132. package/dist/types/src/cli/commands/halo/identity/identity.d.ts.map +1 -0
  133. package/dist/types/src/cli/commands/halo/identity/identity.test.d.ts +2 -0
  134. package/dist/types/src/cli/commands/halo/identity/identity.test.d.ts.map +1 -0
  135. package/dist/types/src/cli/commands/halo/identity/index.d.ts +2 -0
  136. package/dist/types/src/cli/commands/halo/identity/index.d.ts.map +1 -0
  137. package/dist/types/src/cli/commands/halo/index.d.ts +3 -0
  138. package/dist/types/src/cli/commands/halo/index.d.ts.map +1 -0
  139. package/dist/types/src/cli/commands/halo/join/index.d.ts +2 -0
  140. package/dist/types/src/cli/commands/halo/join/index.d.ts.map +1 -0
  141. package/dist/types/src/cli/commands/halo/join/join.d.ts +8 -0
  142. package/dist/types/src/cli/commands/halo/join/join.d.ts.map +1 -0
  143. package/dist/types/src/cli/commands/halo/join/join.test.d.ts +2 -0
  144. package/dist/types/src/cli/commands/halo/join/join.test.d.ts.map +1 -0
  145. package/dist/types/src/cli/commands/halo/keys/index.d.ts +2 -0
  146. package/dist/types/src/cli/commands/halo/keys/index.d.ts.map +1 -0
  147. package/dist/types/src/cli/commands/halo/keys/keys.d.ts +7 -0
  148. package/dist/types/src/cli/commands/halo/keys/keys.d.ts.map +1 -0
  149. package/dist/types/src/cli/commands/halo/keys/keys.test.d.ts +2 -0
  150. package/dist/types/src/cli/commands/halo/keys/keys.test.d.ts.map +1 -0
  151. package/dist/types/src/cli/commands/halo/recover/index.d.ts +2 -0
  152. package/dist/types/src/cli/commands/halo/recover/index.d.ts.map +1 -0
  153. package/dist/types/src/cli/commands/halo/recover/recover.d.ts +7 -0
  154. package/dist/types/src/cli/commands/halo/recover/recover.d.ts.map +1 -0
  155. package/dist/types/src/cli/commands/halo/recover/recover.test.d.ts +2 -0
  156. package/dist/types/src/cli/commands/halo/recover/recover.test.d.ts.map +1 -0
  157. package/dist/types/src/cli/commands/halo/seed/index.d.ts +2 -0
  158. package/dist/types/src/cli/commands/halo/seed/index.d.ts.map +1 -0
  159. package/dist/types/src/cli/commands/halo/seed/seed.d.ts +7 -0
  160. package/dist/types/src/cli/commands/halo/seed/seed.d.ts.map +1 -0
  161. package/dist/types/src/cli/commands/halo/share/index.d.ts +2 -0
  162. package/dist/types/src/cli/commands/halo/share/index.d.ts.map +1 -0
  163. package/dist/types/src/cli/commands/halo/share/share.d.ts +15 -0
  164. package/dist/types/src/cli/commands/halo/share/share.d.ts.map +1 -0
  165. package/dist/types/src/cli/commands/halo/update/index.d.ts +2 -0
  166. package/dist/types/src/cli/commands/halo/update/index.d.ts.map +1 -0
  167. package/dist/types/src/cli/commands/halo/update/update.d.ts +11 -0
  168. package/dist/types/src/cli/commands/halo/update/update.d.ts.map +1 -0
  169. package/dist/types/src/cli/commands/halo/update/update.test.d.ts +2 -0
  170. package/dist/types/src/cli/commands/halo/update/update.test.d.ts.map +1 -0
  171. package/dist/types/src/cli/commands/halo/util.d.ts +13 -0
  172. package/dist/types/src/cli/commands/halo/util.d.ts.map +1 -0
  173. package/dist/types/src/cli/commands/index.d.ts +6 -0
  174. package/dist/types/src/cli/commands/index.d.ts.map +1 -0
  175. package/dist/types/src/cli/commands/profile/create.d.ts +9 -0
  176. package/dist/types/src/cli/commands/profile/create.d.ts.map +1 -0
  177. package/dist/types/src/cli/commands/profile/delete.d.ts +8 -0
  178. package/dist/types/src/cli/commands/profile/delete.d.ts.map +1 -0
  179. package/dist/types/src/cli/commands/profile/import.d.ts +17 -0
  180. package/dist/types/src/cli/commands/profile/import.d.ts.map +1 -0
  181. package/dist/types/src/cli/commands/profile/index.d.ts +19 -0
  182. package/dist/types/src/cli/commands/profile/index.d.ts.map +1 -0
  183. package/dist/types/src/cli/commands/profile/inspect.d.ts +13 -0
  184. package/dist/types/src/cli/commands/profile/inspect.d.ts.map +1 -0
  185. package/dist/types/src/cli/commands/profile/list.d.ts +6 -0
  186. package/dist/types/src/cli/commands/profile/list.d.ts.map +1 -0
  187. package/dist/types/src/cli/commands/profile/reset.d.ts +8 -0
  188. package/dist/types/src/cli/commands/profile/reset.d.ts.map +1 -0
  189. package/dist/types/src/cli/commands/profile/util.d.ts +24 -0
  190. package/dist/types/src/cli/commands/profile/util.d.ts.map +1 -0
  191. package/dist/types/src/cli/index.d.ts +2 -0
  192. package/dist/types/src/cli/index.d.ts.map +1 -0
  193. package/dist/types/src/cli/plugin.d.ts +4 -0
  194. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  195. package/dist/types/src/cli/testing/test-console.d.ts +37 -0
  196. package/dist/types/src/cli/testing/test-console.d.ts.map +1 -0
  197. package/dist/types/src/components/DevicesContainer.d.ts.map +1 -1
  198. package/dist/types/src/components/DevicesContainer.stories.d.ts +2 -50
  199. package/dist/types/src/components/DevicesContainer.stories.d.ts.map +1 -1
  200. package/dist/types/src/components/JoinDialog.d.ts +0 -1
  201. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  202. package/dist/types/src/components/ProfileContainer.d.ts.map +1 -1
  203. package/dist/types/src/components/ProfileContainer.stories.d.ts +1 -48
  204. package/dist/types/src/components/ProfileContainer.stories.d.ts.map +1 -1
  205. package/dist/types/src/components/RecoveryCodeDialog.d.ts +0 -1
  206. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +1 -1
  207. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts +1 -48
  208. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts.map +1 -1
  209. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts +1 -1
  210. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +1 -1
  211. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts +1 -49
  212. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts.map +1 -1
  213. package/dist/types/src/components/ResetDialog.d.ts +5 -3
  214. package/dist/types/src/components/ResetDialog.d.ts.map +1 -1
  215. package/dist/types/src/components/ResetDialog.stories.d.ts +3 -50
  216. package/dist/types/src/components/ResetDialog.stories.d.ts.map +1 -1
  217. package/dist/types/src/constants.d.ts +4 -0
  218. package/dist/types/src/constants.d.ts.map +1 -0
  219. package/dist/types/src/index.d.ts +3 -3
  220. package/dist/types/src/index.d.ts.map +1 -1
  221. package/dist/types/src/meta.d.ts +2 -3
  222. package/dist/types/src/meta.d.ts.map +1 -1
  223. package/dist/types/src/translations.d.ts +2 -48
  224. package/dist/types/src/translations.d.ts.map +1 -1
  225. package/dist/types/src/types/capabilities.d.ts +10 -0
  226. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  227. package/dist/types/src/types/events.d.ts +9 -0
  228. package/dist/types/src/types/events.d.ts.map +1 -0
  229. package/dist/types/src/types/index.d.ts +2 -0
  230. package/dist/types/src/types/index.d.ts.map +1 -1
  231. package/dist/types/src/types/schema.d.ts +164 -10
  232. package/dist/types/src/types/schema.d.ts.map +1 -1
  233. package/dist/types/tsconfig.tsbuildinfo +1 -1
  234. package/package.json +53 -39
  235. package/src/ClientPlugin.ts +39 -59
  236. package/src/capabilities/app-graph-builder/app-graph-builder.ts +95 -0
  237. package/src/capabilities/app-graph-builder/index.ts +7 -0
  238. package/src/capabilities/client/client.ts +75 -0
  239. package/src/capabilities/client/index.ts +7 -0
  240. package/src/capabilities/index.ts +7 -11
  241. package/src/capabilities/migrations/index.ts +7 -0
  242. package/src/capabilities/migrations/migrations.ts +30 -0
  243. package/src/capabilities/operation-resolver/index.ts +7 -0
  244. package/src/capabilities/operation-resolver/operation-resolver.ts +248 -0
  245. package/src/capabilities/react-context/index.ts +7 -0
  246. package/src/capabilities/react-context/react-context.tsx +25 -0
  247. package/src/capabilities/react-surface/index.ts +7 -0
  248. package/src/capabilities/react-surface/react-surface.tsx +74 -0
  249. package/src/capabilities/schema-defs/index.ts +7 -0
  250. package/src/capabilities/schema-defs/schema-defs.ts +35 -0
  251. package/src/cli/commands/config/index.ts +12 -0
  252. package/src/cli/commands/config/view.ts +26 -0
  253. package/src/cli/commands/device/index.ts +14 -0
  254. package/src/cli/commands/device/info/index.ts +5 -0
  255. package/src/cli/commands/device/info/info.test.ts +29 -0
  256. package/src/cli/commands/device/info/info.ts +50 -0
  257. package/src/cli/commands/device/list/index.ts +5 -0
  258. package/src/cli/commands/device/list/list.test.ts +31 -0
  259. package/src/cli/commands/device/list/list.ts +30 -0
  260. package/src/cli/commands/device/update/index.ts +5 -0
  261. package/src/cli/commands/device/update/update.ts +70 -0
  262. package/src/cli/commands/device/util.ts +55 -0
  263. package/src/cli/commands/edge/index.ts +12 -0
  264. package/src/cli/commands/edge/status.ts +45 -0
  265. package/src/cli/commands/halo/create/create.test.ts +52 -0
  266. package/src/cli/commands/halo/create/create.ts +75 -0
  267. package/src/cli/commands/halo/create/index.ts +5 -0
  268. package/src/cli/commands/halo/credential/add/add.ts +97 -0
  269. package/src/cli/commands/halo/credential/add/index.ts +5 -0
  270. package/src/cli/commands/halo/credential/index.ts +13 -0
  271. package/src/cli/commands/halo/credential/list/index.ts +5 -0
  272. package/src/cli/commands/halo/credential/list/list.test.ts +28 -0
  273. package/src/cli/commands/halo/credential/list/list.ts +118 -0
  274. package/src/cli/commands/halo/identity/identity.test.ts +40 -0
  275. package/src/cli/commands/halo/identity/identity.ts +46 -0
  276. package/src/cli/commands/halo/identity/index.ts +5 -0
  277. package/src/cli/commands/halo/index.ts +21 -0
  278. package/src/cli/commands/halo/join/index.ts +5 -0
  279. package/src/cli/commands/halo/join/join.test.ts +10 -0
  280. package/src/cli/commands/halo/join/join.ts +87 -0
  281. package/src/cli/commands/halo/keys/index.ts +5 -0
  282. package/src/cli/commands/halo/keys/keys.test.ts +29 -0
  283. package/src/cli/commands/halo/keys/keys.ts +42 -0
  284. package/src/cli/commands/halo/recover/index.ts +5 -0
  285. package/src/cli/commands/halo/recover/recover.test.ts +10 -0
  286. package/src/cli/commands/halo/recover/recover.ts +44 -0
  287. package/src/cli/commands/halo/seed/index.ts +5 -0
  288. package/src/cli/commands/halo/seed/seed.ts +38 -0
  289. package/src/cli/commands/halo/share/index.ts +5 -0
  290. package/src/cli/commands/halo/share/share.ts +97 -0
  291. package/src/cli/commands/halo/update/index.ts +5 -0
  292. package/src/cli/commands/halo/update/update.test.ts +29 -0
  293. package/src/cli/commands/halo/update/update.ts +69 -0
  294. package/src/cli/commands/halo/util.ts +18 -0
  295. package/src/cli/commands/index.ts +9 -0
  296. package/src/cli/commands/profile/create.ts +87 -0
  297. package/src/cli/commands/profile/delete.ts +33 -0
  298. package/src/cli/commands/profile/import.ts +101 -0
  299. package/src/cli/commands/profile/index.ts +17 -0
  300. package/src/cli/commands/profile/inspect.ts +64 -0
  301. package/src/cli/commands/profile/list.ts +54 -0
  302. package/src/cli/commands/profile/reset.ts +45 -0
  303. package/src/cli/commands/profile/util.ts +48 -0
  304. package/src/cli/index.ts +5 -0
  305. package/src/cli/plugin.ts +33 -0
  306. package/src/cli/testing/test-console.ts +88 -0
  307. package/src/components/DevicesContainer.stories.tsx +9 -10
  308. package/src/components/DevicesContainer.tsx +24 -25
  309. package/src/components/JoinDialog.tsx +15 -17
  310. package/src/components/ProfileContainer.stories.tsx +2 -4
  311. package/src/components/ProfileContainer.tsx +51 -37
  312. package/src/components/RecoveryCodeDialog.stories.tsx +2 -4
  313. package/src/components/RecoveryCodeDialog.tsx +5 -7
  314. package/src/components/RecoveryCredentialsContainer.stories.tsx +9 -10
  315. package/src/components/RecoveryCredentialsContainer.tsx +9 -11
  316. package/src/components/ResetDialog.stories.tsx +19 -13
  317. package/src/components/ResetDialog.tsx +19 -18
  318. package/src/constants.ts +9 -0
  319. package/src/index.ts +3 -3
  320. package/src/meta.ts +8 -5
  321. package/src/translations.ts +5 -2
  322. package/src/types/capabilities.ts +16 -0
  323. package/src/types/events.ts +15 -0
  324. package/src/types/index.ts +2 -0
  325. package/src/types/schema.ts +121 -8
  326. package/dist/lib/browser/app-graph-builder-MCGM4PFO.mjs +0 -123
  327. package/dist/lib/browser/app-graph-builder-MCGM4PFO.mjs.map +0 -7
  328. package/dist/lib/browser/chunk-3F2Q2RKC.mjs +0 -18
  329. package/dist/lib/browser/chunk-3F2Q2RKC.mjs.map +0 -7
  330. package/dist/lib/browser/chunk-CAF2COXW.mjs +0 -19
  331. package/dist/lib/browser/chunk-CAF2COXW.mjs.map +0 -7
  332. package/dist/lib/browser/chunk-FOCQEA72.mjs +0 -686
  333. package/dist/lib/browser/chunk-FOCQEA72.mjs.map +0 -7
  334. package/dist/lib/browser/chunk-GS3LDHYD.mjs +0 -12
  335. package/dist/lib/browser/chunk-GS3LDHYD.mjs.map +0 -7
  336. package/dist/lib/browser/chunk-HLWIF3AW.mjs +0 -110
  337. package/dist/lib/browser/chunk-HLWIF3AW.mjs.map +0 -7
  338. package/dist/lib/browser/client-H2RZI6UX.mjs +0 -43
  339. package/dist/lib/browser/client-H2RZI6UX.mjs.map +0 -7
  340. package/dist/lib/browser/intent-resolver-IE7KHWIY.mjs +0 -305
  341. package/dist/lib/browser/intent-resolver-IE7KHWIY.mjs.map +0 -7
  342. package/dist/lib/browser/migrations-CJY2LQHD.mjs +0 -23
  343. package/dist/lib/browser/migrations-CJY2LQHD.mjs.map +0 -7
  344. package/dist/lib/browser/react-context-TSUCH5YS.mjs +0 -24
  345. package/dist/lib/browser/react-context-TSUCH5YS.mjs.map +0 -7
  346. package/dist/lib/browser/react-surface-WQD43JR7.mjs +0 -66
  347. package/dist/lib/browser/react-surface-WQD43JR7.mjs.map +0 -7
  348. package/dist/lib/browser/schema-defs-TLXADNLY.mjs +0 -25
  349. package/dist/lib/browser/schema-defs-TLXADNLY.mjs.map +0 -7
  350. package/dist/lib/node-esm/app-graph-builder-BJPS5RD7.mjs +0 -124
  351. package/dist/lib/node-esm/app-graph-builder-BJPS5RD7.mjs.map +0 -7
  352. package/dist/lib/node-esm/chunk-IOGTQFLM.mjs +0 -19
  353. package/dist/lib/node-esm/chunk-IOGTQFLM.mjs.map +0 -7
  354. package/dist/lib/node-esm/chunk-JG6AFSFU.mjs +0 -111
  355. package/dist/lib/node-esm/chunk-JG6AFSFU.mjs.map +0 -7
  356. package/dist/lib/node-esm/chunk-MUWDSQ65.mjs +0 -687
  357. package/dist/lib/node-esm/chunk-MUWDSQ65.mjs.map +0 -7
  358. package/dist/lib/node-esm/chunk-SZLX4BVJ.mjs +0 -14
  359. package/dist/lib/node-esm/chunk-SZLX4BVJ.mjs.map +0 -7
  360. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs +0 -20
  361. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs.map +0 -7
  362. package/dist/lib/node-esm/client-AWF6PE6V.mjs +0 -44
  363. package/dist/lib/node-esm/client-AWF6PE6V.mjs.map +0 -7
  364. package/dist/lib/node-esm/intent-resolver-ZJ4E3NNT.mjs +0 -306
  365. package/dist/lib/node-esm/intent-resolver-ZJ4E3NNT.mjs.map +0 -7
  366. package/dist/lib/node-esm/migrations-X6RLWYR2.mjs +0 -24
  367. package/dist/lib/node-esm/migrations-X6RLWYR2.mjs.map +0 -7
  368. package/dist/lib/node-esm/react-context-M6G62KT3.mjs +0 -25
  369. package/dist/lib/node-esm/react-context-M6G62KT3.mjs.map +0 -7
  370. package/dist/lib/node-esm/react-surface-TXSWRGX7.mjs +0 -67
  371. package/dist/lib/node-esm/react-surface-TXSWRGX7.mjs.map +0 -7
  372. package/dist/lib/node-esm/schema-defs-4PGAJ4RQ.mjs +0 -26
  373. package/dist/lib/node-esm/schema-defs-4PGAJ4RQ.mjs.map +0 -7
  374. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  375. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  376. package/dist/types/src/capabilities/capabilities.d.ts +0 -9
  377. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  378. package/dist/types/src/capabilities/client.d.ts +0 -9
  379. package/dist/types/src/capabilities/client.d.ts.map +0 -1
  380. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -8
  381. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  382. package/dist/types/src/capabilities/migrations.d.ts +0 -4
  383. package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
  384. package/dist/types/src/capabilities/react-context.d.ts +0 -8
  385. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  386. package/dist/types/src/capabilities/react-surface.d.ts +0 -8
  387. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  388. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  389. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  390. package/dist/types/src/events.d.ts +0 -8
  391. package/dist/types/src/events.d.ts.map +0 -1
  392. package/src/capabilities/app-graph-builder.ts +0 -114
  393. package/src/capabilities/capabilities.ts +0 -18
  394. package/src/capabilities/client.ts +0 -43
  395. package/src/capabilities/intent-resolver.ts +0 -251
  396. package/src/capabilities/migrations.ts +0 -25
  397. package/src/capabilities/react-context.tsx +0 -21
  398. package/src/capabilities/react-surface.tsx +0 -67
  399. package/src/capabilities/schema-defs.ts +0 -29
  400. package/src/events.ts +0 -15
@@ -4,42 +4,40 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
- import { ObservabilityAction } from '@dxos/plugin-observability/types';
7
+ import { Common } from '@dxos/app-framework';
8
+ import { useOperationInvoker } from '@dxos/app-framework/react';
9
+ import { ObservabilityOperation } from '@dxos/plugin-observability/types';
9
10
  import { type InvitationResult } from '@dxos/react-client/invitations';
10
11
  import { Dialog, useTranslation } from '@dxos/react-ui';
11
12
  import { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';
13
+ import { osTranslations } from '@dxos/ui-theme';
12
14
 
13
- import { CLIENT_PLUGIN } from '../meta';
14
- import { ClientAction } from '../types';
15
-
16
- export const JOIN_DIALOG = `${CLIENT_PLUGIN}/JoinDialog`;
15
+ import { meta } from '../meta';
16
+ import { ClientOperation } from '../types';
17
17
 
18
18
  export const JoinDialog = (props: JoinPanelProps) => {
19
- const { dispatchPromise: dispatch } = useIntentDispatcher();
20
- const { t } = useTranslation(CLIENT_PLUGIN);
19
+ const { invokePromise } = useOperationInvoker();
20
+ const { t } = useTranslation(meta.id);
21
21
 
22
- const handleCancelResetStorage = useCallback(() => dispatch(createIntent(ClientAction.ShareIdentity)), [dispatch]);
22
+ const handleCancelResetStorage = useCallback(() => invokePromise(ClientOperation.ShareIdentity), [invokePromise]);
23
23
 
24
24
  const handleDone = useCallback(
25
25
  async (result: InvitationResult | null) => {
26
26
  if (result?.identityKey) {
27
27
  await Promise.all([
28
- dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } })),
29
- dispatch(
30
- createIntent(ObservabilityAction.SendEvent, {
31
- name: props.initialDisposition === 'recover-identity' ? 'identity.recover' : 'identity.join',
32
- }),
33
- ),
28
+ invokePromise(Common.LayoutOperation.UpdateDialog, { state: false }),
29
+ invokePromise(ObservabilityOperation.SendEvent, {
30
+ name: props.initialDisposition === 'recover-identity' ? 'identity.recover' : 'identity.join',
31
+ }),
34
32
  ]);
35
33
  }
36
34
  },
37
- [dispatch],
35
+ [invokePromise],
38
36
  );
39
37
 
40
38
  return (
41
39
  <Dialog.Content>
42
- <Dialog.Title classNames='sr-only'>{t('join space label', { ns: 'os' })}</Dialog.Title>
40
+ <Dialog.Title classNames='sr-only'>{t('join space label', { ns: osTranslations })}</Dialog.Title>
43
41
  <JoinPanel
44
42
  mode='halo-only'
45
43
  {...props}
@@ -2,12 +2,10 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
 
9
7
  import { withClientProvider } from '@dxos/react-client/testing';
10
- import { withLayout, withTheme } from '@dxos/storybook-utils';
8
+ import { withTheme } from '@dxos/react-ui/testing';
11
9
 
12
10
  import { translations } from '../translations';
13
11
 
@@ -16,7 +14,7 @@ import { ProfileContainer } from './ProfileContainer';
16
14
  const meta = {
17
15
  title: 'plugins/plugin-client/ProfileContainer',
18
16
  component: ProfileContainer,
19
- decorators: [withClientProvider({ createIdentity: true }), withTheme, withLayout()],
17
+ decorators: [withTheme, withClientProvider({ createIdentity: true })],
20
18
  parameters: {
21
19
  layout: 'fullscreen',
22
20
  translations,
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
  import React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';
7
7
 
8
8
  import { debounce } from '@dxos/async';
@@ -15,21 +15,33 @@ import {
15
15
  ControlPage,
16
16
  ControlSection,
17
17
  Form,
18
- type InputComponent,
18
+ type FormFieldMap,
19
+ type FormUpdateMeta,
19
20
  } from '@dxos/react-ui-form';
20
21
  import { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';
21
22
  import { hexToEmoji, hexToHue } from '@dxos/util';
22
23
 
23
- import { CLIENT_PLUGIN } from '../meta';
24
+ import { meta } from '../meta';
25
+
26
+ // TOOD(burdon): Factor out?
27
+ // TODO(wittjosiah): Integrate annotations with translations.
28
+ const UserProfile = Schema.Struct({
29
+ did: Schema.String.annotations({ title: 'DID' }),
30
+ displayName: Schema.String.annotations({ title: 'Display name' }),
31
+ emoji: Schema.String.annotations({ title: 'Avatar' }),
32
+ hue: Schema.String.annotations({ title: 'Color' }),
33
+ });
34
+
35
+ type UserProfile = Schema.Schema.Type<typeof UserProfile>;
24
36
 
25
37
  // TODO(thure): Factor out?
26
38
  const getDefaultHueValue = (identity: Identity | null) => hexToHue(identity?.identityKey.toHex() ?? '0');
27
- const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
28
39
  const getHueValue = (identity: Identity | null) => identity?.profile?.data?.hue || getDefaultHueValue(identity);
40
+ const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
29
41
  const getEmojiValue = (identity: Identity | null) => identity?.profile?.data?.emoji || getDefaultEmojiValue(identity);
30
42
 
31
43
  export const ProfileContainer = () => {
32
- const { t } = useTranslation(CLIENT_PLUGIN);
44
+ const { t } = useTranslation(meta.id);
33
45
  const client = useClient();
34
46
  const identity = useIdentity();
35
47
  const [displayName, setDisplayNameDirectly] = useState(identity?.profile?.displayName ?? '');
@@ -39,7 +51,7 @@ export const ProfileContainer = () => {
39
51
  const updateProfile = useMemo(
40
52
  () =>
41
53
  debounce(
42
- (profile: Partial<Profile>) =>
54
+ (profile: Partial<UserProfile>) =>
43
55
  client.halo.updateProfile({
44
56
  displayName: profile.displayName,
45
57
  data: {
@@ -52,11 +64,26 @@ export const ProfileContainer = () => {
52
64
  [],
53
65
  );
54
66
 
55
- const handleSave = useCallback(
56
- (profile: Profile) => {
57
- setDisplayNameDirectly(profile.displayName);
58
- setEmojiDirectly(profile.emoji);
59
- setHueDirectly(profile.hue);
67
+ const handleChange = useCallback(
68
+ (profile: Partial<UserProfile>, meta: FormUpdateMeta<UserProfile>) => {
69
+ for (const [path, changed] of Object.entries(meta.changed)) {
70
+ if (changed) {
71
+ switch (path) {
72
+ case 'displayName':
73
+ setDisplayNameDirectly(profile.displayName ?? '');
74
+ break;
75
+ case 'emoji':
76
+ setEmojiDirectly(profile.emoji ?? getDefaultEmojiValue(identity));
77
+ break;
78
+ case 'hue':
79
+ setHueDirectly(profile.hue ?? getDefaultHueValue(identity));
80
+ break;
81
+ default:
82
+ break;
83
+ }
84
+ }
85
+ }
86
+
60
87
  void updateProfile(profile);
61
88
  },
62
89
  [identity],
@@ -64,22 +91,23 @@ export const ProfileContainer = () => {
64
91
 
65
92
  const values = useMemo(
66
93
  () => ({
94
+ did: identity?.did,
67
95
  displayName,
68
96
  emoji,
69
97
  hue,
70
- did: identity?.did,
71
98
  }),
72
99
  [identity, displayName, emoji, hue],
73
100
  );
74
101
 
75
102
  // TODO(wittjosiah): Integrate descriptions with the form schema.
76
- const customElements: Partial<Record<string, InputComponent>> = useMemo(
103
+ const fieldMap = useMemo<FormFieldMap>(
77
104
  () => ({
78
105
  displayName: ({ type, label, getValue, onValueChange }) => {
79
106
  const handleChange = useCallback(
80
107
  ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),
81
108
  [onValueChange, type],
82
109
  );
110
+
83
111
  return (
84
112
  <ControlItemInput title={label} description={t('display name description')}>
85
113
  <Input.TextInput
@@ -97,6 +125,7 @@ export const ProfileContainer = () => {
97
125
  () => onValueChange(type, getDefaultEmojiValue(identity)),
98
126
  [onValueChange, type],
99
127
  );
128
+
100
129
  return (
101
130
  <ControlItem title={label} description={t('icon description')}>
102
131
  <EmojiPickerBlock
@@ -115,14 +144,12 @@ export const ProfileContainer = () => {
115
144
  () => onValueChange(type, getDefaultHueValue(identity)),
116
145
  [onValueChange, type],
117
146
  );
147
+
118
148
  return (
119
149
  <ControlItem title={label} description={t('hue description')}>
120
- <HuePicker
121
- value={getValue()}
122
- onChange={handleChange}
123
- onReset={handleHueReset}
124
- classNames='[--hue-preview-size:1.5rem] justify-self-end'
125
- />
150
+ <div role='none' className='flex justify-self-end'>
151
+ <HuePicker value={getValue()} onChange={handleChange} onReset={handleHueReset} />
152
+ </div>
126
153
  </ControlItem>
127
154
  );
128
155
  },
@@ -145,26 +172,13 @@ export const ProfileContainer = () => {
145
172
  <ControlPage>
146
173
  <Clipboard.Provider>
147
174
  <ControlSection title={t('profile label')} description={t('profile description')}>
148
- <Form
149
- schema={ProfileSchema}
150
- values={values}
151
- autoSave
152
- onSave={handleSave}
153
- Custom={customElements}
154
- classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'
155
- outerSpacing={false}
156
- />
175
+ <Form.Root schema={UserProfile} values={values} fieldMap={fieldMap} onValuesChanged={handleChange}>
176
+ <Form.Content>
177
+ <Form.FieldSet classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]' />
178
+ </Form.Content>
179
+ </Form.Root>
157
180
  </ControlSection>
158
181
  </Clipboard.Provider>
159
182
  </ControlPage>
160
183
  );
161
184
  };
162
-
163
- // TODO(wittjosiah): Integrate annotations with translations.
164
- const ProfileSchema = Schema.Struct({
165
- displayName: Schema.String.annotations({ title: 'Display name' }),
166
- emoji: Schema.String.annotations({ title: 'Avatar' }),
167
- hue: Schema.String.annotations({ title: 'Color' }),
168
- did: Schema.String.annotations({ title: 'DID' }),
169
- });
170
- type Profile = Schema.Schema.Type<typeof ProfileSchema>;
@@ -2,15 +2,13 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useState } from 'react';
9
7
 
10
8
  import { useClient } from '@dxos/react-client';
11
9
  import { withClientProvider } from '@dxos/react-client/testing';
12
10
  import { AlertDialog, useAsyncEffect } from '@dxos/react-ui';
13
- import { withLayout, withTheme } from '@dxos/storybook-utils';
11
+ import { withTheme } from '@dxos/react-ui/testing';
14
12
 
15
13
  import { translations } from '../translations';
16
14
 
@@ -37,7 +35,7 @@ const meta = {
37
35
  title: 'plugins/plugin-client/RecoveryCodeDialog',
38
36
  component: RecoveryCodeDialog as any,
39
37
  render: DefaultStory,
40
- decorators: [withClientProvider({ createIdentity: true }), withTheme, withLayout()],
38
+ decorators: [withTheme, withClientProvider({ createIdentity: true })],
41
39
  parameters: {
42
40
  layout: 'fullscreen',
43
41
  translations,
@@ -6,16 +6,14 @@ import React, { useCallback, useState } from 'react';
6
6
 
7
7
  import { AlertDialog, Button, Clipboard, Input, useTranslation } from '@dxos/react-ui';
8
8
 
9
- import { CLIENT_PLUGIN } from '../meta';
10
-
11
- export const RECOVERY_CODE_DIALOG = `${CLIENT_PLUGIN}/RecoveryCodeDialog`;
9
+ import { meta } from '../meta';
12
10
 
13
11
  export type RecoveryCodeDialogProps = {
14
12
  code: string;
15
13
  };
16
14
 
17
15
  export const RecoveryCodeDialog = ({ code }: RecoveryCodeDialogProps) => {
18
- const { t } = useTranslation(CLIENT_PLUGIN);
16
+ const { t } = useTranslation(meta.id);
19
17
  const [confirmation, setConfirmation] = useState(false);
20
18
 
21
19
  const handleConfirmation = useCallback((checked: boolean) => setConfirmation(checked), []);
@@ -23,11 +21,11 @@ export const RecoveryCodeDialog = ({ code }: RecoveryCodeDialogProps) => {
23
21
  return (
24
22
  <AlertDialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>
25
23
  <AlertDialog.Title>{t('recovery code dialog title')}</AlertDialog.Title>
26
- <p className='py-4'>{t('recovery code dialog description')}</p>
24
+ <p className='plb-4'>{t('recovery code dialog description')}</p>
27
25
  <Clipboard.Provider>
28
26
  <Code code={code} />
29
27
  </Clipboard.Provider>
30
- <div className='flex flex-col py-4 gap-2'>
28
+ <div className='flex flex-col plb-4 gap-2'>
31
29
  <p>{t('recovery code dialog warning 1')}</p>
32
30
  <p>{t('recovery code dialog warning 2')}</p>
33
31
  </div>
@@ -60,7 +58,7 @@ const Code = ({ code }: { code: string }) => {
60
58
  <div className='grid grid-cols-4'>
61
59
  {words.map((word, i) => (
62
60
  <div key={i} className='flex items-center p-2 gap-2'>
63
- <div className='w-4 text-xs text-center text-subdued'>{i + 1}</div>
61
+ <div className='is-4 text-xs text-center text-subdued'>{i + 1}</div>
64
62
  <div className='text-sm'>{word}</div>
65
63
  </div>
66
64
  ))}
@@ -2,13 +2,12 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
8
7
 
9
- import { IntentPlugin } from '@dxos/app-framework';
8
+ import { OperationPlugin } from '@dxos/app-framework';
10
9
  import { withPluginManager } from '@dxos/app-framework/testing';
11
- import { withLayout, withTheme } from '@dxos/storybook-utils';
10
+ import { withTheme } from '@dxos/react-ui/testing';
12
11
 
13
12
  import { ClientPlugin } from '../ClientPlugin';
14
13
  import { translations } from '../translations';
@@ -19,18 +18,18 @@ const meta = {
19
18
  title: 'plugins/plugin-client/RecoveryCredentialsContainer',
20
19
  component: RecoveryCredentialsContainer,
21
20
  decorators: [
21
+ withTheme,
22
22
  withPluginManager({
23
23
  plugins: [
24
24
  ClientPlugin({
25
- onClientInitialized: async ({ client }) => {
26
- await client.halo.createIdentity();
27
- },
25
+ onClientInitialized: ({ client }) =>
26
+ Effect.gen(function* () {
27
+ yield* Effect.promise(() => client.halo.createIdentity());
28
+ }),
28
29
  }),
29
- IntentPlugin(),
30
+ OperationPlugin(),
30
31
  ],
31
32
  }),
32
- withTheme,
33
- withLayout(),
34
33
  ],
35
34
  parameters: {
36
35
  layout: 'fullscreen',
@@ -4,19 +4,19 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
7
+ import { useOperationInvoker } from '@dxos/app-framework/react';
8
8
  import { useCredentials } from '@dxos/react-client/halo';
9
9
  import { Icon, IconButton, List, ListItem, Message, useTranslation } from '@dxos/react-ui';
10
10
  import { ControlGroup, ControlItem, ControlPage, ControlSection } from '@dxos/react-ui-form';
11
11
 
12
- import { CLIENT_PLUGIN } from '../meta';
13
- import { ClientAction } from '../types';
12
+ import { meta } from '../meta';
13
+ import { ClientOperation } from '../types';
14
14
 
15
- export const MANAGE_CREDENTIALS_DIALOG = `${CLIENT_PLUGIN}/ManageCredentialsDialog`;
15
+ export const MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;
16
16
 
17
17
  export const RecoveryCredentialsContainer = () => {
18
- const { t } = useTranslation(CLIENT_PLUGIN);
19
- const { dispatchPromise: dispatch } = useIntentDispatcher();
18
+ const { t } = useTranslation(meta.id);
19
+ const { invokePromise } = useOperationInvoker();
20
20
  const credentials = useCredentials();
21
21
  const recoveryCredentials = credentials.filter(
22
22
  (credential) => credential.subject.assertion['@type'] === 'dxos.halo.credentials.IdentityRecovery',
@@ -31,8 +31,7 @@ export const RecoveryCredentialsContainer = () => {
31
31
  label={t('create passkey label')}
32
32
  icon='ph--key--duotone'
33
33
  variant='primary'
34
- size={5}
35
- onClick={() => dispatch(createIntent(ClientAction.CreatePasskey))}
34
+ onClick={() => invokePromise(ClientOperation.CreatePasskey)}
36
35
  />
37
36
  </ControlItem>
38
37
  <ControlItem title={t('create recovery code label')} description={t('create recovery code description')}>
@@ -40,8 +39,7 @@ export const RecoveryCredentialsContainer = () => {
40
39
  label={t('create recovery code label')}
41
40
  icon='ph--receipt--duotone'
42
41
  variant='default'
43
- size={5}
44
- onClick={() => dispatch(createIntent(ClientAction.CreateRecoveryCode))}
42
+ onClick={() => invokePromise(ClientOperation.CreateRecoveryCode)}
45
43
  />
46
44
  </ControlItem>
47
45
  </ControlGroup>
@@ -57,7 +55,7 @@ export const RecoveryCredentialsContainer = () => {
57
55
  {recoveryCredentials.map((credential) => (
58
56
  <ListItem.Root key={credential.id?.toHex()}>
59
57
  <ListItem.Endcap>
60
- <Icon icon='ph--key--regular' size={5} />
58
+ <Icon icon='ph--key--regular' />
61
59
  </ListItem.Endcap>
62
60
  <ListItem.Heading>{credential.issuanceDate.toLocaleString()}</ListItem.Heading>
63
61
  </ListItem.Root>
@@ -2,25 +2,32 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
8
7
  import React from 'react';
9
8
 
10
- import { IntentPlugin } from '@dxos/app-framework';
9
+ import { OperationPlugin } from '@dxos/app-framework';
10
+ import { usePluginManager } from '@dxos/app-framework/react';
11
11
  import { withPluginManager } from '@dxos/app-framework/testing';
12
12
  import { Dialog } from '@dxos/react-ui';
13
- import { withLayout, withTheme } from '@dxos/storybook-utils';
13
+ import { withTheme } from '@dxos/react-ui/testing';
14
14
 
15
+ import { ClientPlugin } from '../ClientPlugin';
15
16
  import { translations } from '../translations';
16
17
 
17
18
  import { ResetDialog, type ResetDialogProps } from './ResetDialog';
18
19
 
19
- const Render = (props: ResetDialogProps) => {
20
+ const Render = (props: Omit<ResetDialogProps, 'capabilityManager'>) => {
21
+ const manager = usePluginManager();
22
+
20
23
  return (
21
24
  <Dialog.Root open>
22
25
  <Dialog.Overlay>
23
- <ResetDialog onReset={() => console.log('reset')} {...props} />
26
+ <ResetDialog
27
+ onReset={() => Effect.sync(() => console.log('reset'))}
28
+ capabilityManager={manager.capabilities}
29
+ {...props}
30
+ />
24
31
  </Dialog.Overlay>
25
32
  </Dialog.Root>
26
33
  );
@@ -29,13 +36,12 @@ const Render = (props: ResetDialogProps) => {
29
36
  const meta = {
30
37
  title: 'plugins/plugin-client/ResetDialog',
31
38
  component: ResetDialog,
32
- render: Render,
39
+ render: Render as any,
33
40
  decorators: [
41
+ withTheme,
34
42
  withPluginManager({
35
- plugins: [IntentPlugin()],
43
+ plugins: [OperationPlugin(), ClientPlugin({})],
36
44
  }),
37
- withTheme,
38
- withLayout(),
39
45
  ],
40
46
  parameters: {
41
47
  layout: 'fullscreen',
@@ -47,8 +53,8 @@ export default meta;
47
53
 
48
54
  type Story = StoryObj<typeof meta>;
49
55
 
50
- export const Default: Story = { args: { mode: 'reset storage' } };
56
+ export const Default: Story = { args: { mode: 'reset storage' as const } as any };
51
57
 
52
- export const JoinNewIdentity: Story = { args: { mode: 'join new identity' } };
58
+ export const JoinNewIdentity: Story = { args: { mode: 'join new identity' as const } as any };
53
59
 
54
- export const Recover: Story = { args: { mode: 'recover' } };
60
+ export const Recover: Story = { args: { mode: 'recover' as const } as any };
@@ -2,45 +2,46 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import * as Effect from 'effect/Effect';
5
6
  import React, { useCallback } from 'react';
6
7
 
7
- import { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { Capability, type CapabilityManager, Common } from '@dxos/app-framework';
9
+ import { useOperationInvoker } from '@dxos/app-framework/react';
10
+ import { runAndForwardErrors } from '@dxos/effect';
8
11
  import { useClient } from '@dxos/react-client';
9
12
  import { Dialog, useTranslation } from '@dxos/react-ui';
10
13
  import { ConfirmReset, type ConfirmResetProps } from '@dxos/shell/react';
11
14
 
12
- import { CLIENT_PLUGIN } from '../meta';
15
+ import { meta } from '../meta';
13
16
  import { type ClientPluginOptions } from '../types';
14
17
 
15
- export const RESET_DIALOG = `${CLIENT_PLUGIN}/ResetDialog`;
18
+ export type ResetDialogProps = Pick<ConfirmResetProps, 'mode'> &
19
+ Pick<ClientPluginOptions, 'onReset'> & {
20
+ capabilityManager: CapabilityManager.CapabilityManager;
21
+ };
16
22
 
17
- export type ResetDialogProps = Pick<ConfirmResetProps, 'mode'> & Pick<ClientPluginOptions, 'onReset'>;
18
-
19
- export const ResetDialog = ({ mode, onReset }: ResetDialogProps) => {
20
- const { t } = useTranslation(CLIENT_PLUGIN);
21
- const { dispatchPromise: dispatch } = useIntentDispatcher();
23
+ export const ResetDialog = ({ mode, onReset, capabilityManager }: ResetDialogProps) => {
24
+ const { t } = useTranslation(meta.id);
25
+ const { invokePromise } = useOperationInvoker();
22
26
  const client = useClient();
23
27
 
24
28
  const handleReset = useCallback(async () => {
25
29
  await client.reset();
26
30
  const target =
27
31
  mode === 'join new identity' ? 'deviceInvitation' : mode === 'recover' ? 'recoverIdentity' : undefined;
28
- await onReset?.({ target });
29
- }, [dispatch, client, mode, onReset]);
32
+ if (onReset) {
33
+ await runAndForwardErrors(onReset({ target }).pipe(Effect.provideService(Capability.Service, capabilityManager)));
34
+ }
35
+ }, [client, mode, onReset, capabilityManager]);
30
36
 
31
37
  const handleCancel = useCallback(() => {
32
- void dispatch(
33
- createIntent(LayoutAction.UpdateDialog, {
34
- part: 'dialog',
35
- options: { state: false },
36
- }),
37
- );
38
- }, [dispatch]);
38
+ void invokePromise(Common.LayoutOperation.UpdateDialog, { state: false });
39
+ }, [invokePromise]);
39
40
 
40
41
  // TODO(wittjosiah): Add the sr-only translations.
41
42
  // TODO(wittjosiah): Add missing descriptions to other dialogs.
42
43
  return (
43
- <Dialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>
44
+ <Dialog.Content>
44
45
  <Dialog.Title classNames='sr-only'>{t('reset dialog title')}</Dialog.Title>
45
46
  <Dialog.Description classNames='sr-only'>{t('reset dialog description')}</Dialog.Description>
46
47
  <ConfirmReset active mode={mode} onConfirm={handleReset} onCancel={handleCancel} />
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { meta } from './meta';
6
+
7
+ export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
8
+ export const RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;
9
+ export const RESET_DIALOG = `${meta.id}/ResetDialog`;
package/src/index.ts CHANGED
@@ -2,8 +2,8 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export * from './ClientPlugin';
5
+ export { ClientCapabilities, ClientEvents } from './types';
6
6
  export * from './meta';
7
+ export * from './types';
7
8
 
8
- export { ClientCapabilities } from './capabilities';
9
- export { ClientEvents } from './events';
9
+ export * from './ClientPlugin';
package/src/meta.ts CHANGED
@@ -2,11 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { type Plugin } from '@dxos/app-framework';
6
+ import { trim } from '@dxos/util';
6
7
 
7
- export const CLIENT_PLUGIN = 'dxos.org/plugin/client';
8
-
9
- export const meta: PluginMeta = {
10
- id: CLIENT_PLUGIN,
8
+ export const meta: Plugin.Meta = {
9
+ id: 'dxos.org/plugin/client',
11
10
  name: 'Client',
11
+ description: trim`
12
+ Core client connectivity and peer-to-peer networking infrastructure.
13
+ Manages identity, authentication, and real-time synchronization across devices.
14
+ `,
12
15
  };
@@ -3,14 +3,15 @@
3
3
  //
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
+ import { translations as shellTranslations } from '@dxos/shell/react';
6
7
 
7
8
  import { meta } from './meta';
8
9
 
9
- export const translations = [
10
+ const pluginTranslations = [
10
11
  {
11
12
  'en-US': {
12
13
  [meta.id]: {
13
- 'account label': 'User Account',
14
+ 'account label': 'User profile',
14
15
  'profile label': 'Profile',
15
16
  'profile description': 'You can adjust how your user settings here.',
16
17
  'devices label': 'Devices',
@@ -68,3 +69,5 @@ export const translations = [
68
69
  },
69
70
  },
70
71
  ] as const satisfies Resource[];
72
+
73
+ export const translations: Resource[] = [...pluginTranslations, ...shellTranslations];
@@ -0,0 +1,16 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+ import { type Client } from '@dxos/client';
7
+ import { type ObjectMigration } from '@dxos/client/echo';
8
+ import { type Type } from '@dxos/echo';
9
+
10
+ import { meta } from '../meta';
11
+
12
+ export namespace ClientCapabilities {
13
+ export const Client = Capability.make<Client>(`${meta.id}/capability/client`);
14
+ export const Schema = Capability.make<Type.Entity.Any[]>(`${meta.id}/capability/schema`);
15
+ export const Migration = Capability.make<ObjectMigration[]>(`${meta.id}/capability/migration`);
16
+ }
@@ -0,0 +1,15 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { ActivationEvent } from '@dxos/app-framework';
6
+
7
+ import { meta } from '../meta';
8
+
9
+ export namespace ClientEvents {
10
+ export const ClientReady = ActivationEvent.make(`${meta.id}/event/client-ready`);
11
+ export const SetupSchema = ActivationEvent.make(`${meta.id}/event/setup-schema`);
12
+ export const SetupMigration = ActivationEvent.make(`${meta.id}/event/setup-migration`);
13
+ export const IdentityCreated = ActivationEvent.make(`${meta.id}/event/identity-created`);
14
+ export const SpacesReady = ActivationEvent.make(`${meta.id}/event/spaces-ready`);
15
+ }