@dxos/plugin-client 0.8.4-main.3c1ae3b → 0.8.4-main.3eb6e50203

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 (399) hide show
  1. package/dist/lib/browser/app-graph-builder-DTETNB5U.mjs +119 -0
  2. package/dist/lib/browser/app-graph-builder-DTETNB5U.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-G7C3S2BE.mjs +15 -0
  6. package/dist/lib/browser/chunk-G7C3S2BE.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-MY6BJCB6.mjs +18 -0
  8. package/dist/lib/browser/chunk-MY6BJCB6.mjs.map +7 -0
  9. package/dist/lib/browser/cli/index.mjs +1049 -0
  10. package/dist/lib/browser/cli/index.mjs.map +7 -0
  11. package/dist/lib/browser/client-XOQQ5POJ.mjs +86 -0
  12. package/dist/lib/browser/client-XOQQ5POJ.mjs.map +7 -0
  13. package/dist/lib/browser/index.mjs +75 -84
  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-YNQ7L5GT.mjs +24 -0
  17. package/dist/lib/browser/migrations-YNQ7L5GT.mjs.map +7 -0
  18. package/dist/lib/browser/operation-resolver-N4YCJ4KS.mjs +299 -0
  19. package/dist/lib/browser/operation-resolver-N4YCJ4KS.mjs.map +7 -0
  20. package/dist/lib/browser/react-context-FDXHIBZL.mjs +24 -0
  21. package/dist/lib/browser/react-context-FDXHIBZL.mjs.map +7 -0
  22. package/dist/lib/browser/react-surface-ZP3FLVRS.mjs +676 -0
  23. package/dist/lib/browser/react-surface-ZP3FLVRS.mjs.map +7 -0
  24. package/dist/lib/browser/schema-defs-AYXOYD2M.mjs +27 -0
  25. package/dist/lib/browser/schema-defs-AYXOYD2M.mjs.map +7 -0
  26. package/dist/lib/browser/types/index.mjs +9 -4
  27. package/dist/lib/node-esm/app-graph-builder-PFKVFRXI.mjs +120 -0
  28. package/dist/lib/node-esm/app-graph-builder-PFKVFRXI.mjs.map +7 -0
  29. package/dist/lib/node-esm/chunk-JAF64TFQ.mjs +295 -0
  30. package/dist/lib/node-esm/chunk-JAF64TFQ.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-MUOMX53G.mjs +20 -0
  32. package/dist/lib/node-esm/chunk-MUOMX53G.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 +1050 -0
  36. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  37. package/dist/lib/node-esm/client-3YIMWKR7.mjs +87 -0
  38. package/dist/lib/node-esm/client-3YIMWKR7.mjs.map +7 -0
  39. package/dist/lib/node-esm/index.mjs +75 -84
  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-ZH5GNG4U.mjs +25 -0
  43. package/dist/lib/node-esm/migrations-ZH5GNG4U.mjs.map +7 -0
  44. package/dist/lib/node-esm/operation-resolver-CHGWI5P2.mjs +300 -0
  45. package/dist/lib/node-esm/operation-resolver-CHGWI5P2.mjs.map +7 -0
  46. package/dist/lib/node-esm/react-context-7Z2TVUTV.mjs +25 -0
  47. package/dist/lib/node-esm/react-context-7Z2TVUTV.mjs.map +7 -0
  48. package/dist/lib/node-esm/react-surface-BHJMHIMH.mjs +677 -0
  49. package/dist/lib/node-esm/react-surface-BHJMHIMH.mjs.map +7 -0
  50. package/dist/lib/node-esm/schema-defs-TV2SCKSH.mjs +28 -0
  51. package/dist/lib/node-esm/schema-defs-TV2SCKSH.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 +18 -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 +3 -49
  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 -47
  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 -47
  208. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts.map +1 -1
  209. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +1 -1
  210. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts +1 -47
  211. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts.map +1 -1
  212. package/dist/types/src/components/ResetDialog.d.ts +5 -3
  213. package/dist/types/src/components/ResetDialog.d.ts.map +1 -1
  214. package/dist/types/src/components/ResetDialog.stories.d.ts +3 -49
  215. package/dist/types/src/components/ResetDialog.stories.d.ts.map +1 -1
  216. package/dist/types/src/constants.d.ts +4 -0
  217. package/dist/types/src/constants.d.ts.map +1 -0
  218. package/dist/types/src/index.d.ts +1 -2
  219. package/dist/types/src/index.d.ts.map +1 -1
  220. package/dist/types/src/meta.d.ts +2 -2
  221. package/dist/types/src/meta.d.ts.map +1 -1
  222. package/dist/types/src/translations.d.ts +2 -48
  223. package/dist/types/src/translations.d.ts.map +1 -1
  224. package/dist/types/src/types/capabilities.d.ts +10 -0
  225. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  226. package/dist/types/src/types/events.d.ts +9 -0
  227. package/dist/types/src/types/events.d.ts.map +1 -0
  228. package/dist/types/src/types/index.d.ts +2 -0
  229. package/dist/types/src/types/index.d.ts.map +1 -1
  230. package/dist/types/src/types/schema.d.ts +163 -9
  231. package/dist/types/src/types/schema.d.ts.map +1 -1
  232. package/dist/types/tsconfig.tsbuildinfo +1 -1
  233. package/package.json +53 -37
  234. package/src/ClientPlugin.ts +36 -53
  235. package/src/capabilities/app-graph-builder/app-graph-builder.ts +96 -0
  236. package/src/capabilities/app-graph-builder/index.ts +7 -0
  237. package/src/capabilities/client/client.ts +75 -0
  238. package/src/capabilities/client/index.ts +7 -0
  239. package/src/capabilities/index.ts +7 -11
  240. package/src/capabilities/migrations/index.ts +7 -0
  241. package/src/capabilities/migrations/migrations.ts +30 -0
  242. package/src/capabilities/operation-resolver/index.ts +7 -0
  243. package/src/capabilities/operation-resolver/operation-resolver.ts +249 -0
  244. package/src/capabilities/react-context/index.ts +7 -0
  245. package/src/capabilities/react-context/react-context.tsx +25 -0
  246. package/src/capabilities/react-surface/index.ts +7 -0
  247. package/src/capabilities/react-surface/react-surface.tsx +75 -0
  248. package/src/capabilities/schema-defs/index.ts +7 -0
  249. package/src/capabilities/schema-defs/schema-defs.ts +36 -0
  250. package/src/cli/commands/config/index.ts +12 -0
  251. package/src/cli/commands/config/view.ts +26 -0
  252. package/src/cli/commands/device/index.ts +14 -0
  253. package/src/cli/commands/device/info/index.ts +5 -0
  254. package/src/cli/commands/device/info/info.test.ts +29 -0
  255. package/src/cli/commands/device/info/info.ts +50 -0
  256. package/src/cli/commands/device/list/index.ts +5 -0
  257. package/src/cli/commands/device/list/list.test.ts +31 -0
  258. package/src/cli/commands/device/list/list.ts +30 -0
  259. package/src/cli/commands/device/update/index.ts +5 -0
  260. package/src/cli/commands/device/update/update.ts +70 -0
  261. package/src/cli/commands/device/util.ts +55 -0
  262. package/src/cli/commands/edge/index.ts +12 -0
  263. package/src/cli/commands/edge/status.ts +45 -0
  264. package/src/cli/commands/halo/create/create.test.ts +52 -0
  265. package/src/cli/commands/halo/create/create.ts +75 -0
  266. package/src/cli/commands/halo/create/index.ts +5 -0
  267. package/src/cli/commands/halo/credential/add/add.ts +97 -0
  268. package/src/cli/commands/halo/credential/add/index.ts +5 -0
  269. package/src/cli/commands/halo/credential/index.ts +13 -0
  270. package/src/cli/commands/halo/credential/list/index.ts +5 -0
  271. package/src/cli/commands/halo/credential/list/list.test.ts +28 -0
  272. package/src/cli/commands/halo/credential/list/list.ts +118 -0
  273. package/src/cli/commands/halo/identity/identity.test.ts +40 -0
  274. package/src/cli/commands/halo/identity/identity.ts +46 -0
  275. package/src/cli/commands/halo/identity/index.ts +5 -0
  276. package/src/cli/commands/halo/index.ts +21 -0
  277. package/src/cli/commands/halo/join/index.ts +5 -0
  278. package/src/cli/commands/halo/join/join.test.ts +10 -0
  279. package/src/cli/commands/halo/join/join.ts +87 -0
  280. package/src/cli/commands/halo/keys/index.ts +5 -0
  281. package/src/cli/commands/halo/keys/keys.test.ts +29 -0
  282. package/src/cli/commands/halo/keys/keys.ts +42 -0
  283. package/src/cli/commands/halo/recover/index.ts +5 -0
  284. package/src/cli/commands/halo/recover/recover.test.ts +10 -0
  285. package/src/cli/commands/halo/recover/recover.ts +44 -0
  286. package/src/cli/commands/halo/seed/index.ts +5 -0
  287. package/src/cli/commands/halo/seed/seed.ts +38 -0
  288. package/src/cli/commands/halo/share/index.ts +5 -0
  289. package/src/cli/commands/halo/share/share.ts +97 -0
  290. package/src/cli/commands/halo/update/index.ts +5 -0
  291. package/src/cli/commands/halo/update/update.test.ts +29 -0
  292. package/src/cli/commands/halo/update/update.ts +69 -0
  293. package/src/cli/commands/halo/util.ts +18 -0
  294. package/src/cli/commands/index.ts +9 -0
  295. package/src/cli/commands/profile/create.ts +87 -0
  296. package/src/cli/commands/profile/delete.ts +33 -0
  297. package/src/cli/commands/profile/import.ts +101 -0
  298. package/src/cli/commands/profile/index.ts +17 -0
  299. package/src/cli/commands/profile/inspect.ts +64 -0
  300. package/src/cli/commands/profile/list.ts +54 -0
  301. package/src/cli/commands/profile/reset.ts +45 -0
  302. package/src/cli/commands/profile/util.ts +48 -0
  303. package/src/cli/index.ts +5 -0
  304. package/src/cli/plugin.ts +34 -0
  305. package/src/cli/testing/test-console.ts +88 -0
  306. package/src/components/DevicesContainer.stories.tsx +9 -6
  307. package/src/components/DevicesContainer.tsx +37 -46
  308. package/src/components/JoinDialog.tsx +13 -16
  309. package/src/components/ProfileContainer.stories.tsx +1 -1
  310. package/src/components/ProfileContainer.tsx +38 -30
  311. package/src/components/RecoveryCodeDialog.stories.tsx +1 -1
  312. package/src/components/RecoveryCodeDialog.tsx +0 -2
  313. package/src/components/RecoveryCredentialsContainer.stories.tsx +8 -6
  314. package/src/components/RecoveryCredentialsContainer.tsx +18 -19
  315. package/src/components/ResetDialog.stories.tsx +29 -9
  316. package/src/components/ResetDialog.tsx +24 -21
  317. package/src/constants.ts +9 -0
  318. package/src/index.ts +1 -2
  319. package/src/meta.ts +2 -2
  320. package/src/translations.ts +6 -3
  321. package/src/types/capabilities.ts +16 -0
  322. package/src/types/events.ts +15 -0
  323. package/src/types/index.ts +2 -0
  324. package/src/types/schema.ts +120 -7
  325. package/dist/lib/browser/app-graph-builder-7LBCMPIW.mjs +0 -124
  326. package/dist/lib/browser/app-graph-builder-7LBCMPIW.mjs.map +0 -7
  327. package/dist/lib/browser/chunk-4LRO3Y2O.mjs +0 -19
  328. package/dist/lib/browser/chunk-4LRO3Y2O.mjs.map +0 -7
  329. package/dist/lib/browser/chunk-HZSIIWH5.mjs +0 -689
  330. package/dist/lib/browser/chunk-HZSIIWH5.mjs.map +0 -7
  331. package/dist/lib/browser/chunk-RDIG75CA.mjs +0 -110
  332. package/dist/lib/browser/chunk-RDIG75CA.mjs.map +0 -7
  333. package/dist/lib/browser/chunk-UZTC5O5A.mjs +0 -17
  334. package/dist/lib/browser/chunk-UZTC5O5A.mjs.map +0 -7
  335. package/dist/lib/browser/chunk-ZRVMXLDR.mjs +0 -15
  336. package/dist/lib/browser/chunk-ZRVMXLDR.mjs.map +0 -7
  337. package/dist/lib/browser/client-KIPUUVWJ.mjs +0 -43
  338. package/dist/lib/browser/client-KIPUUVWJ.mjs.map +0 -7
  339. package/dist/lib/browser/intent-resolver-N4J2B5KF.mjs +0 -305
  340. package/dist/lib/browser/intent-resolver-N4J2B5KF.mjs.map +0 -7
  341. package/dist/lib/browser/migrations-RCNZRP3I.mjs +0 -23
  342. package/dist/lib/browser/migrations-RCNZRP3I.mjs.map +0 -7
  343. package/dist/lib/browser/react-context-JYJ63L5S.mjs +0 -25
  344. package/dist/lib/browser/react-context-JYJ63L5S.mjs.map +0 -7
  345. package/dist/lib/browser/react-surface-X6YMVGZZ.mjs +0 -66
  346. package/dist/lib/browser/react-surface-X6YMVGZZ.mjs.map +0 -7
  347. package/dist/lib/browser/schema-defs-DKGLMWWM.mjs +0 -25
  348. package/dist/lib/browser/schema-defs-DKGLMWWM.mjs.map +0 -7
  349. package/dist/lib/node-esm/app-graph-builder-4CVWKYZ6.mjs +0 -125
  350. package/dist/lib/node-esm/app-graph-builder-4CVWKYZ6.mjs.map +0 -7
  351. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs +0 -20
  352. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs.map +0 -7
  353. package/dist/lib/node-esm/chunk-DQDFIOXV.mjs +0 -18
  354. package/dist/lib/node-esm/chunk-DQDFIOXV.mjs.map +0 -7
  355. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs +0 -17
  356. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs.map +0 -7
  357. package/dist/lib/node-esm/chunk-RGCZX67B.mjs +0 -690
  358. package/dist/lib/node-esm/chunk-RGCZX67B.mjs.map +0 -7
  359. package/dist/lib/node-esm/chunk-VENKFPBC.mjs +0 -111
  360. package/dist/lib/node-esm/chunk-VENKFPBC.mjs.map +0 -7
  361. package/dist/lib/node-esm/client-W5DQW2E7.mjs +0 -44
  362. package/dist/lib/node-esm/client-W5DQW2E7.mjs.map +0 -7
  363. package/dist/lib/node-esm/intent-resolver-F2ZP2UQJ.mjs +0 -306
  364. package/dist/lib/node-esm/intent-resolver-F2ZP2UQJ.mjs.map +0 -7
  365. package/dist/lib/node-esm/migrations-TZFOPRPE.mjs +0 -24
  366. package/dist/lib/node-esm/migrations-TZFOPRPE.mjs.map +0 -7
  367. package/dist/lib/node-esm/react-context-7BJGZI5D.mjs +0 -26
  368. package/dist/lib/node-esm/react-context-7BJGZI5D.mjs.map +0 -7
  369. package/dist/lib/node-esm/react-surface-BWX37JGM.mjs +0 -67
  370. package/dist/lib/node-esm/react-surface-BWX37JGM.mjs.map +0 -7
  371. package/dist/lib/node-esm/schema-defs-SLSDRMGM.mjs +0 -26
  372. package/dist/lib/node-esm/schema-defs-SLSDRMGM.mjs.map +0 -7
  373. package/dist/types/src/capabilities/app-graph-builder.d.ts +0 -4
  374. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +0 -1
  375. package/dist/types/src/capabilities/capabilities.d.ts +0 -9
  376. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  377. package/dist/types/src/capabilities/client.d.ts +0 -9
  378. package/dist/types/src/capabilities/client.d.ts.map +0 -1
  379. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -8
  380. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  381. package/dist/types/src/capabilities/migrations.d.ts +0 -4
  382. package/dist/types/src/capabilities/migrations.d.ts.map +0 -1
  383. package/dist/types/src/capabilities/react-context.d.ts +0 -8
  384. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  385. package/dist/types/src/capabilities/react-surface.d.ts +0 -8
  386. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  387. package/dist/types/src/capabilities/schema-defs.d.ts +0 -4
  388. package/dist/types/src/capabilities/schema-defs.d.ts.map +0 -1
  389. package/dist/types/src/events.d.ts +0 -8
  390. package/dist/types/src/events.d.ts.map +0 -1
  391. package/src/capabilities/app-graph-builder.ts +0 -115
  392. package/src/capabilities/capabilities.ts +0 -16
  393. package/src/capabilities/client.ts +0 -43
  394. package/src/capabilities/intent-resolver.ts +0 -251
  395. package/src/capabilities/migrations.ts +0 -25
  396. package/src/capabilities/react-context.tsx +0 -22
  397. package/src/capabilities/react-surface.tsx +0 -67
  398. package/src/capabilities/schema-defs.ts +0 -30
  399. package/src/events.ts +0 -15
@@ -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
20
  import { meta } from '../meta';
28
- import { ClientAction } from '../types';
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
  };
@@ -218,7 +209,7 @@ 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 (
@@ -258,7 +249,7 @@ const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel
258
249
  };
259
250
 
260
251
  const InvitationAuthCode = ({ id, code, onCancel }: { id: string; code: string; onCancel: () => void }) => {
261
- const { t } = useTranslation('os');
252
+ const { t } = useTranslation(osTranslations);
262
253
  const emoji = hexToEmoji(id);
263
254
 
264
255
  return (
@@ -4,43 +4,40 @@
4
4
 
5
5
  import React, { useCallback } from 'react';
6
6
 
7
- import { LayoutAction, createIntent } from '@dxos/app-framework';
8
- import { useIntentDispatcher } from '@dxos/app-framework/react';
9
- import { ObservabilityAction } from '@dxos/plugin-observability/types';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
9
+ import { ObservabilityOperation } from '@dxos/plugin-observability/types';
10
10
  import { type InvitationResult } from '@dxos/react-client/invitations';
11
11
  import { Dialog, useTranslation } from '@dxos/react-ui';
12
12
  import { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';
13
+ import { osTranslations } from '@dxos/ui-theme';
13
14
 
14
15
  import { meta } from '../meta';
15
- import { ClientAction } from '../types';
16
-
17
- export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
16
+ import { ClientOperation } from '../types';
18
17
 
19
18
  export const JoinDialog = (props: JoinPanelProps) => {
20
- const { dispatchPromise: dispatch } = useIntentDispatcher();
19
+ const { invokePromise } = useOperationInvoker();
21
20
  const { t } = useTranslation(meta.id);
22
21
 
23
- const handleCancelResetStorage = useCallback(() => dispatch(createIntent(ClientAction.ShareIdentity)), [dispatch]);
22
+ const handleCancelResetStorage = useCallback(() => invokePromise(ClientOperation.ShareIdentity), [invokePromise]);
24
23
 
25
24
  const handleDone = useCallback(
26
25
  async (result: InvitationResult | null) => {
27
26
  if (result?.identityKey) {
28
27
  await Promise.all([
29
- dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } })),
30
- dispatch(
31
- createIntent(ObservabilityAction.SendEvent, {
32
- name: props.initialDisposition === 'recover-identity' ? 'identity.recover' : 'identity.join',
33
- }),
34
- ),
28
+ invokePromise(LayoutOperation.UpdateDialog, { state: false }),
29
+ invokePromise(ObservabilityOperation.SendEvent, {
30
+ name: props.initialDisposition === 'recover-identity' ? 'identity.recover' : 'identity.join',
31
+ }),
35
32
  ]);
36
33
  }
37
34
  },
38
- [dispatch],
35
+ [invokePromise],
39
36
  );
40
37
 
41
38
  return (
42
39
  <Dialog.Content>
43
- <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>
44
41
  <JoinPanel
45
42
  mode='halo-only'
46
43
  {...props}
@@ -14,7 +14,7 @@ import { ProfileContainer } from './ProfileContainer';
14
14
  const meta = {
15
15
  title: 'plugins/plugin-client/ProfileContainer',
16
16
  component: ProfileContainer,
17
- decorators: [withTheme, withClientProvider({ createIdentity: true })],
17
+ decorators: [withTheme(), withClientProvider({ createIdentity: true })],
18
18
  parameters: {
19
19
  layout: 'fullscreen',
20
20
  translations,
@@ -9,14 +9,7 @@ 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 FormFieldMap,
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
 
@@ -63,11 +56,26 @@ export const ProfileContainer = () => {
63
56
  [],
64
57
  );
65
58
 
66
- const handleSave = useCallback(
67
- (profile: UserProfile) => {
68
- setDisplayNameDirectly(profile.displayName);
69
- setEmojiDirectly(profile.emoji);
70
- 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
+
71
79
  void updateProfile(profile);
72
80
  },
73
81
  [identity],
@@ -93,14 +101,14 @@ export const ProfileContainer = () => {
93
101
  );
94
102
 
95
103
  return (
96
- <ControlItemInput title={label} description={t('display name description')}>
104
+ <Settings.ItemInput title={label} description={t('display name description')}>
97
105
  <Input.TextInput
98
106
  value={getValue()}
99
107
  onChange={handleChange}
100
108
  placeholder={t('display name input placeholder')}
101
109
  classNames='min-is-64'
102
110
  />
103
- </ControlItemInput>
111
+ </Settings.ItemInput>
104
112
  );
105
113
  },
106
114
  emoji: ({ type, label, getValue, onValueChange }) => {
@@ -111,7 +119,7 @@ export const ProfileContainer = () => {
111
119
  );
112
120
 
113
121
  return (
114
- <ControlItem title={label} description={t('icon description')}>
122
+ <Settings.Item title={label} description={t('icon description')}>
115
123
  <EmojiPickerBlock
116
124
  triggerVariant='default'
117
125
  emoji={getValue()}
@@ -119,7 +127,7 @@ export const ProfileContainer = () => {
119
127
  onClickClear={handleEmojiReset}
120
128
  classNames='justify-self-end'
121
129
  />
122
- </ControlItem>
130
+ </Settings.Item>
123
131
  );
124
132
  },
125
133
  hue: ({ type, label, getValue, onValueChange }) => {
@@ -130,22 +138,22 @@ export const ProfileContainer = () => {
130
138
  );
131
139
 
132
140
  return (
133
- <ControlItem title={label} description={t('hue description')}>
141
+ <Settings.Item title={label} description={t('hue description')}>
134
142
  <div role='none' className='flex justify-self-end'>
135
143
  <HuePicker value={getValue()} onChange={handleChange} onReset={handleHueReset} />
136
144
  </div>
137
- </ControlItem>
145
+ </Settings.Item>
138
146
  );
139
147
  },
140
148
  // TODO(wittjosiah): We need text input annotations for disabled and copyable.
141
149
  did: ({ label, getValue }) => {
142
150
  return (
143
- <ControlItemInput title={label} description={t('did description')}>
144
- <ButtonGroup>
151
+ <Settings.ItemInput title={label} description={t('did description')}>
152
+ <ButtonGroup classNames='is-full'>
145
153
  <Input.TextInput value={getValue()} disabled classNames='min-is-64' />
146
154
  <Clipboard.IconButton value={getValue() ?? ''} />
147
155
  </ButtonGroup>
148
- </ControlItemInput>
156
+ </Settings.ItemInput>
149
157
  );
150
158
  },
151
159
  }),
@@ -153,16 +161,16 @@ export const ProfileContainer = () => {
153
161
  );
154
162
 
155
163
  return (
156
- <ControlPage>
157
- <Clipboard.Provider>
158
- <ControlSection title={t('profile label')} description={t('profile description')}>
159
- <Form.Root schema={UserProfile} values={values} fieldMap={fieldMap} autoSave onSave={handleSave}>
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}>
160
168
  <Form.Content>
161
- <Form.FieldSet classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]' />
169
+ <Form.FieldSet classNames='space-y-trimMd' />
162
170
  </Form.Content>
163
171
  </Form.Root>
164
- </ControlSection>
165
- </Clipboard.Provider>
166
- </ControlPage>
172
+ </Settings.Section>
173
+ </Settings.Root>
174
+ </Clipboard.Provider>
167
175
  );
168
176
  };
@@ -35,7 +35,7 @@ const meta = {
35
35
  title: 'plugins/plugin-client/RecoveryCodeDialog',
36
36
  component: RecoveryCodeDialog as any,
37
37
  render: DefaultStory,
38
- decorators: [withTheme, withClientProvider({ createIdentity: true })],
38
+ decorators: [withTheme(), withClientProvider({ createIdentity: true })],
39
39
  parameters: {
40
40
  layout: 'fullscreen',
41
41
  translations,
@@ -8,8 +8,6 @@ import { AlertDialog, Button, Clipboard, Input, useTranslation } from '@dxos/rea
8
8
 
9
9
  import { meta } from '../meta';
10
10
 
11
- export const RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;
12
-
13
11
  export type RecoveryCodeDialogProps = {
14
12
  code: string;
15
13
  };
@@ -3,8 +3,9 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
6
7
 
7
- import { IntentPlugin } from '@dxos/app-framework';
8
+ import { OperationPlugin } from '@dxos/app-framework';
8
9
  import { withPluginManager } from '@dxos/app-framework/testing';
9
10
  import { withTheme } from '@dxos/react-ui/testing';
10
11
 
@@ -17,15 +18,16 @@ const meta = {
17
18
  title: 'plugins/plugin-client/RecoveryCredentialsContainer',
18
19
  component: RecoveryCredentialsContainer,
19
20
  decorators: [
20
- withTheme,
21
+ withTheme(),
21
22
  withPluginManager({
22
23
  plugins: [
23
24
  ClientPlugin({
24
- onClientInitialized: async ({ client }) => {
25
- await client.halo.createIdentity();
26
- },
25
+ onClientInitialized: ({ client }) =>
26
+ Effect.gen(function* () {
27
+ yield* Effect.promise(() => client.halo.createIdentity());
28
+ }),
27
29
  }),
28
- IntentPlugin(),
30
+ OperationPlugin(),
29
31
  ],
30
32
  }),
31
33
  ],
@@ -4,48 +4,47 @@
4
4
 
5
5
  import React from 'react';
6
6
 
7
- import { createIntent } from '@dxos/app-framework';
8
- import { useIntentDispatcher } from '@dxos/app-framework/react';
7
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
9
8
  import { useCredentials } from '@dxos/react-client/halo';
10
9
  import { Icon, IconButton, List, ListItem, Message, useTranslation } from '@dxos/react-ui';
11
- import { ControlGroup, ControlItem, ControlPage, ControlSection } from '@dxos/react-ui-form';
10
+ import { Settings } from '@dxos/react-ui-form';
12
11
 
13
12
  import { meta } from '../meta';
14
- import { ClientAction } from '../types';
13
+ import { ClientOperation } from '../types';
15
14
 
16
15
  export const MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;
17
16
 
18
17
  export const RecoveryCredentialsContainer = () => {
19
18
  const { t } = useTranslation(meta.id);
20
- const { dispatchPromise: dispatch } = useIntentDispatcher();
19
+ const { invokePromise } = useOperationInvoker();
21
20
  const credentials = useCredentials();
22
21
  const recoveryCredentials = credentials.filter(
23
22
  (credential) => credential.subject.assertion['@type'] === 'dxos.halo.credentials.IdentityRecovery',
24
23
  );
25
24
 
26
25
  return (
27
- <ControlPage>
28
- <ControlSection title={t('recovery setup dialog title')} description={t('recovery setup dialog description')}>
29
- <ControlGroup>
30
- <ControlItem title={t('create passkey label')} description={t('create passkey description')}>
26
+ <Settings.Root>
27
+ <Settings.Section title={t('recovery setup dialog title')} description={t('recovery setup dialog description')}>
28
+ <Settings.Group>
29
+ <Settings.Item title={t('create passkey label')} description={t('create passkey description')}>
31
30
  <IconButton
32
31
  label={t('create passkey label')}
33
32
  icon='ph--key--duotone'
34
33
  variant='primary'
35
- onClick={() => dispatch(createIntent(ClientAction.CreatePasskey))}
34
+ onClick={() => invokePromise(ClientOperation.CreatePasskey)}
36
35
  />
37
- </ControlItem>
38
- <ControlItem title={t('create recovery code label')} description={t('create recovery code description')}>
36
+ </Settings.Item>
37
+ <Settings.Item title={t('create recovery code label')} description={t('create recovery code description')}>
39
38
  <IconButton
40
39
  label={t('create recovery code label')}
41
40
  icon='ph--receipt--duotone'
42
41
  variant='default'
43
- onClick={() => dispatch(createIntent(ClientAction.CreateRecoveryCode))}
42
+ onClick={() => invokePromise(ClientOperation.CreateRecoveryCode)}
44
43
  />
45
- </ControlItem>
46
- </ControlGroup>
47
- </ControlSection>
48
- <ControlSection title={t('credentials list label')}>
44
+ </Settings.Item>
45
+ </Settings.Group>
46
+ </Settings.Section>
47
+ <Settings.Section title={t('credentials list label')}>
49
48
  {recoveryCredentials.length < 1 ? (
50
49
  <Message.Root valence='error' classNames='container-max-width'>
51
50
  <Message.Title icon='ph--shield-warning--duotone'>{t('no credentials title')}</Message.Title>
@@ -63,7 +62,7 @@ export const RecoveryCredentialsContainer = () => {
63
62
  ))}
64
63
  </List>
65
64
  )}
66
- </ControlSection>
67
- </ControlPage>
65
+ </Settings.Section>
66
+ </Settings.Root>
68
67
  );
69
68
  };
@@ -3,10 +3,12 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import * as Effect from 'effect/Effect';
6
7
  import React from 'react';
7
8
 
8
- import { IntentPlugin } from '@dxos/app-framework';
9
+ import { OperationPlugin, RuntimePlugin } from '@dxos/app-framework';
9
10
  import { withPluginManager } from '@dxos/app-framework/testing';
11
+ import { usePluginManager } from '@dxos/app-framework/ui';
10
12
  import { Dialog } from '@dxos/react-ui';
11
13
  import { withTheme } from '@dxos/react-ui/testing';
12
14
 
@@ -15,11 +17,17 @@ import { translations } from '../translations';
15
17
 
16
18
  import { ResetDialog, type ResetDialogProps } from './ResetDialog';
17
19
 
18
- const Render = (props: ResetDialogProps) => {
20
+ const DefaultStory = (props: Omit<ResetDialogProps, 'capabilityManager'>) => {
21
+ const manager = usePluginManager();
22
+
19
23
  return (
20
24
  <Dialog.Root open>
21
25
  <Dialog.Overlay>
22
- <ResetDialog onReset={() => console.log('reset')} {...props} />
26
+ <ResetDialog
27
+ capabilityManager={manager.capabilities}
28
+ onReset={() => Effect.sync(() => console.log('reset'))}
29
+ {...props}
30
+ />
23
31
  </Dialog.Overlay>
24
32
  </Dialog.Root>
25
33
  );
@@ -28,11 +36,11 @@ const Render = (props: ResetDialogProps) => {
28
36
  const meta = {
29
37
  title: 'plugins/plugin-client/ResetDialog',
30
38
  component: ResetDialog,
31
- render: Render,
39
+ render: DefaultStory,
32
40
  decorators: [
33
- withTheme, // TODO(wittjosiah): Try to write story which does not depend on plugin manager.
41
+ withTheme(),
34
42
  withPluginManager({
35
- plugins: [IntentPlugin(), ClientPlugin({})],
43
+ plugins: [RuntimePlugin(), OperationPlugin(), ClientPlugin({})],
36
44
  }),
37
45
  ],
38
46
  parameters: {
@@ -45,8 +53,20 @@ export default meta;
45
53
 
46
54
  type Story = StoryObj<typeof meta>;
47
55
 
48
- export const Default: Story = { args: { mode: 'reset storage' } };
56
+ export const Default: Story = {
57
+ args: {
58
+ mode: 'reset storage' as const,
59
+ } as any,
60
+ };
49
61
 
50
- export const JoinNewIdentity: Story = { args: { mode: 'join new identity' } };
62
+ export const JoinNewIdentity: Story = {
63
+ args: {
64
+ mode: 'join new identity' as const,
65
+ } as any,
66
+ };
51
67
 
52
- export const Recover: Story = { args: { mode: 'recover' } };
68
+ export const Recover: Story = {
69
+ args: {
70
+ mode: 'recover' as const,
71
+ } as any,
72
+ };
@@ -2,10 +2,13 @@
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 } from '@dxos/app-framework';
8
- import { useIntentDispatcher } from '@dxos/app-framework/react';
8
+ import { Capability, type CapabilityManager } from '@dxos/app-framework';
9
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
10
+ import { LayoutOperation } from '@dxos/app-toolkit';
11
+ import { runAndForwardErrors } from '@dxos/effect';
9
12
  import { useClient } from '@dxos/react-client';
10
13
  import { Dialog, useTranslation } from '@dxos/react-ui';
11
14
  import { ConfirmReset, type ConfirmResetProps } from '@dxos/shell/react';
@@ -13,38 +16,38 @@ import { ConfirmReset, type ConfirmResetProps } from '@dxos/shell/react';
13
16
  import { meta } from '../meta';
14
17
  import { type ClientPluginOptions } from '../types';
15
18
 
16
- export const RESET_DIALOG = `${meta.id}/ResetDialog`;
19
+ export type ResetDialogProps = Pick<ConfirmResetProps, 'mode'> &
20
+ Pick<ClientPluginOptions, 'onReset'> & {
21
+ capabilityManager: CapabilityManager.CapabilityManager;
22
+ };
17
23
 
18
- export type ResetDialogProps = Pick<ConfirmResetProps, 'mode'> & Pick<ClientPluginOptions, 'onReset'>;
19
-
20
- export const ResetDialog = ({ mode, onReset }: ResetDialogProps) => {
24
+ export const ResetDialog = ({ mode, onReset, capabilityManager }: ResetDialogProps) => {
21
25
  const { t } = useTranslation(meta.id);
22
- const { dispatchPromise: dispatch } = useIntentDispatcher();
26
+ const { invokePromise } = useOperationInvoker();
23
27
  const client = useClient();
24
28
 
25
29
  const handleReset = useCallback(async () => {
26
30
  await client.reset();
27
31
  const target =
28
32
  mode === 'join new identity' ? 'deviceInvitation' : mode === 'recover' ? 'recoverIdentity' : undefined;
29
- await onReset?.({ target });
30
- }, [dispatch, client, mode, onReset]);
33
+ if (onReset) {
34
+ await runAndForwardErrors(onReset({ target }).pipe(Effect.provideService(Capability.Service, capabilityManager)));
35
+ }
36
+ }, [client, mode, onReset, capabilityManager]);
31
37
 
32
38
  const handleCancel = useCallback(() => {
33
- void dispatch(
34
- createIntent(LayoutAction.UpdateDialog, {
35
- part: 'dialog',
36
- options: { state: false },
37
- }),
38
- );
39
- }, [dispatch]);
39
+ void invokePromise(LayoutOperation.UpdateDialog, { state: false });
40
+ }, [invokePromise]);
40
41
 
41
42
  // TODO(wittjosiah): Add the sr-only translations.
42
43
  // TODO(wittjosiah): Add missing descriptions to other dialogs.
43
44
  return (
44
- <Dialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>
45
- <Dialog.Title classNames='sr-only'>{t('reset dialog title')}</Dialog.Title>
46
- <Dialog.Description classNames='sr-only'>{t('reset dialog description')}</Dialog.Description>
47
- <ConfirmReset active mode={mode} onConfirm={handleReset} onCancel={handleCancel} />
48
- </Dialog.Content>
45
+ <>
46
+ <Dialog.Content>
47
+ <Dialog.Title classNames='sr-only'>{t('reset dialog title')}</Dialog.Title>
48
+ <Dialog.Description classNames='sr-only'>{t('reset dialog description')}</Dialog.Description>
49
+ <ConfirmReset active mode={mode} onConfirm={handleReset} onCancel={handleCancel} />
50
+ </Dialog.Content>
51
+ </>
49
52
  );
50
53
  };
@@ -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,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { ClientCapabilities } from './capabilities';
6
- export { ClientEvents } from './events';
5
+ export { ClientCapabilities, ClientEvents } from './types';
7
6
  export * from './meta';
8
7
  export * from './types';
9
8