@dxos/plugin-client 0.8.4-main.406dc2a → 0.8.4-main.52d7546f51

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 -45
  308. package/src/components/JoinDialog.tsx +13 -15
  309. package/src/components/ProfileContainer.stories.tsx +1 -1
  310. package/src/components/ProfileContainer.tsx +62 -56
  311. package/src/components/RecoveryCodeDialog.stories.tsx +1 -1
  312. package/src/components/RecoveryCodeDialog.tsx +3 -5
  313. package/src/components/RecoveryCredentialsContainer.stories.tsx +8 -6
  314. package/src/components/RecoveryCredentialsContainer.tsx +19 -21
  315. package/src/components/ResetDialog.stories.tsx +29 -9
  316. package/src/components/ResetDialog.tsx +24 -20
  317. package/src/constants.ts +9 -0
  318. package/src/index.ts +1 -2
  319. package/src/meta.ts +7 -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-LUY3BJGC.mjs +0 -124
  326. package/dist/lib/browser/app-graph-builder-LUY3BJGC.mjs.map +0 -7
  327. package/dist/lib/browser/chunk-C7B7NM2G.mjs +0 -686
  328. package/dist/lib/browser/chunk-C7B7NM2G.mjs.map +0 -7
  329. package/dist/lib/browser/chunk-PFY3EQPI.mjs +0 -18
  330. package/dist/lib/browser/chunk-PFY3EQPI.mjs.map +0 -7
  331. package/dist/lib/browser/chunk-QB3D2P4J.mjs +0 -10
  332. package/dist/lib/browser/chunk-QB3D2P4J.mjs.map +0 -7
  333. package/dist/lib/browser/chunk-TRA2GP4M.mjs +0 -110
  334. package/dist/lib/browser/chunk-TRA2GP4M.mjs.map +0 -7
  335. package/dist/lib/browser/chunk-VTC4GIND.mjs +0 -19
  336. package/dist/lib/browser/chunk-VTC4GIND.mjs.map +0 -7
  337. package/dist/lib/browser/client-5PWEJ3U6.mjs +0 -43
  338. package/dist/lib/browser/client-5PWEJ3U6.mjs.map +0 -7
  339. package/dist/lib/browser/intent-resolver-L5NVP2G3.mjs +0 -305
  340. package/dist/lib/browser/intent-resolver-L5NVP2G3.mjs.map +0 -7
  341. package/dist/lib/browser/migrations-MWQCO5KY.mjs +0 -23
  342. package/dist/lib/browser/migrations-MWQCO5KY.mjs.map +0 -7
  343. package/dist/lib/browser/react-context-S4SRYUVY.mjs +0 -24
  344. package/dist/lib/browser/react-context-S4SRYUVY.mjs.map +0 -7
  345. package/dist/lib/browser/react-surface-6PV7RVQN.mjs +0 -66
  346. package/dist/lib/browser/react-surface-6PV7RVQN.mjs.map +0 -7
  347. package/dist/lib/browser/schema-defs-E3USCMH3.mjs +0 -25
  348. package/dist/lib/browser/schema-defs-E3USCMH3.mjs.map +0 -7
  349. package/dist/lib/node-esm/app-graph-builder-S3BVB3IU.mjs +0 -125
  350. package/dist/lib/node-esm/app-graph-builder-S3BVB3IU.mjs.map +0 -7
  351. package/dist/lib/node-esm/chunk-4MPOOMDQ.mjs +0 -111
  352. package/dist/lib/node-esm/chunk-4MPOOMDQ.mjs.map +0 -7
  353. package/dist/lib/node-esm/chunk-H73VVAMA.mjs +0 -687
  354. package/dist/lib/node-esm/chunk-H73VVAMA.mjs.map +0 -7
  355. package/dist/lib/node-esm/chunk-K5IFPSCL.mjs +0 -20
  356. package/dist/lib/node-esm/chunk-K5IFPSCL.mjs.map +0 -7
  357. package/dist/lib/node-esm/chunk-QE4LPI2A.mjs +0 -12
  358. package/dist/lib/node-esm/chunk-QE4LPI2A.mjs.map +0 -7
  359. package/dist/lib/node-esm/chunk-UYDFBGYA.mjs +0 -19
  360. package/dist/lib/node-esm/chunk-UYDFBGYA.mjs.map +0 -7
  361. package/dist/lib/node-esm/client-ODN7EBTY.mjs +0 -44
  362. package/dist/lib/node-esm/client-ODN7EBTY.mjs.map +0 -7
  363. package/dist/lib/node-esm/intent-resolver-3JZIPI6F.mjs +0 -306
  364. package/dist/lib/node-esm/intent-resolver-3JZIPI6F.mjs.map +0 -7
  365. package/dist/lib/node-esm/migrations-ARXHGBH5.mjs +0 -24
  366. package/dist/lib/node-esm/migrations-ARXHGBH5.mjs.map +0 -7
  367. package/dist/lib/node-esm/react-context-4SZYNSIS.mjs +0 -25
  368. package/dist/lib/node-esm/react-context-4SZYNSIS.mjs.map +0 -7
  369. package/dist/lib/node-esm/react-surface-BOST4EH2.mjs +0 -67
  370. package/dist/lib/node-esm/react-surface-BOST4EH2.mjs.map +0 -7
  371. package/dist/lib/node-esm/schema-defs-ATH5YBDR.mjs +0 -26
  372. package/dist/lib/node-esm/schema-defs-ATH5YBDR.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 -18
  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 -21
  397. package/src/capabilities/react-surface.tsx +0 -67
  398. package/src/capabilities/schema-defs.ts +0 -29
  399. package/src/events.ts +0 -15
@@ -5,102 +5,94 @@
5
5
  import React, { useCallback, useEffect, useState } from 'react';
6
6
  import { QR } from 'react-qr-rounded';
7
7
 
8
- import { createIntent, useIntentDispatcher } from '@dxos/app-framework';
8
+ import { useOperationInvoker } from '@dxos/app-framework/ui';
9
9
  import { log } from '@dxos/log';
10
10
  import { useClient, useMulticastObservable } from '@dxos/react-client';
11
11
  import { type Device, useDevices } from '@dxos/react-client/halo';
12
12
  import { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';
13
13
  import { useNetworkStatus } from '@dxos/react-client/mesh';
14
14
  import { Button, Clipboard, Icon, IconButton, List, useId, useTranslation } from '@dxos/react-ui';
15
- import {
16
- ControlFrame,
17
- ControlFrameItem,
18
- ControlGroup,
19
- ControlItem,
20
- ControlPage,
21
- ControlSection,
22
- } from '@dxos/react-ui-form';
23
- 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';
24
18
  import { hexToEmoji } from '@dxos/util';
25
19
 
26
20
  import { meta } from '../meta';
27
- import { ClientAction } from '../types';
21
+ import { ClientOperation } from '../types';
28
22
 
29
23
  export type DevicesContainerProps = {
30
24
  createInvitationUrl?: (invitationCode: string) => string;
31
25
  };
32
26
 
33
27
  export const DevicesContainer = ({ createInvitationUrl }: DevicesContainerProps) => {
34
- const { t } = useTranslation('os');
35
- const { dispatchPromise: dispatch } = useIntentDispatcher();
28
+ const { t } = useTranslation(translationKey);
29
+ const { invokePromise } = useOperationInvoker();
36
30
  const devices = useDevices();
37
31
  const { swarm: connectionState } = useNetworkStatus();
38
32
 
39
- const handleResetStorage = useCallback(() => dispatch(createIntent(ClientAction.ResetStorage)), [dispatch]);
33
+ const handleResetStorage = useCallback(() => invokePromise(ClientOperation.ResetStorage, {}), [invokePromise]);
40
34
 
41
35
  const handleRecover = useCallback(
42
- () => dispatch(createIntent(ClientAction.ResetStorage, { mode: 'recover' })),
43
- [dispatch],
36
+ () => invokePromise(ClientOperation.ResetStorage, { mode: 'recover' }),
37
+ [invokePromise],
44
38
  );
45
39
 
46
40
  const handleJoinNewIdentity = useCallback(
47
- () => dispatch(createIntent(ClientAction.ResetStorage, { mode: 'join new identity' })),
48
- [dispatch],
41
+ () => invokePromise(ClientOperation.ResetStorage, { mode: 'join new identity' }),
42
+ [invokePromise],
49
43
  );
50
44
 
51
45
  return (
52
46
  <Clipboard.Provider>
53
- <ControlPage>
54
- <ControlSection
47
+ <Settings.Root>
48
+ <Settings.Section
55
49
  title={t('devices verbose label', { ns: meta.id })}
56
50
  description={t('devices description', { ns: meta.id })}
57
51
  >
58
- <ControlFrame>
59
- <ControlFrameItem title={t('devices label', { ns: meta.id })}>
52
+ <Settings.Frame>
53
+ <Settings.FrameItem title={t('devices label', { ns: meta.id })}>
60
54
  <List>
61
- {devices.map((device: Device) => {
62
- return (
63
- <DeviceListItem key={device.deviceKey.toHex()} device={device} connectionState={connectionState} />
64
- );
65
- })}
55
+ {devices.map((device: Device) => (
56
+ <DeviceListItem key={device.deviceKey.toHex()} device={device} connectionState={connectionState} />
57
+ ))}
66
58
  </List>
67
- </ControlFrameItem>
59
+ </Settings.FrameItem>
68
60
  {createInvitationUrl && (
69
- <ControlFrameItem title='Add device'>
61
+ <Settings.FrameItem title='Add device'>
70
62
  <DeviceInvitation createInvitationUrl={createInvitationUrl} />
71
- </ControlFrameItem>
63
+ </Settings.FrameItem>
72
64
  )}
73
- </ControlFrame>
74
- </ControlSection>
75
- <ControlSection
65
+ </Settings.Frame>
66
+ </Settings.Section>
67
+ <Settings.Section
76
68
  title={t('danger zone title', { ns: meta.id })}
77
69
  description={t('danger zone description', { ns: meta.id })}
78
70
  >
79
- <ControlGroup>
80
- <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 })}>
81
73
  <Button variant='destructive' onClick={handleResetStorage} data-testid='devicesContainer.reset'>
82
74
  {t('reset device label')}
83
75
  </Button>
84
- </ControlItem>
85
- <ControlItem
76
+ </Settings.Item>
77
+ <Settings.Item
86
78
  title={t('recover identity label')}
87
79
  description={t('recover identity description', { ns: meta.id })}
88
80
  >
89
81
  <Button variant='destructive' onClick={handleRecover} data-testid='devicesContainer.recover'>
90
82
  {t('recover identity label')}
91
83
  </Button>
92
- </ControlItem>
93
- <ControlItem
84
+ </Settings.Item>
85
+ <Settings.Item
94
86
  title={t('join new identity label')}
95
87
  description={t('join new identity description', { ns: meta.id })}
96
88
  >
97
89
  <Button variant='destructive' onClick={handleJoinNewIdentity} data-testid='devicesContainer.joinExisting'>
98
90
  {t('join new identity label')}
99
91
  </Button>
100
- </ControlItem>
101
- </ControlGroup>
102
- </ControlSection>
103
- </ControlPage>
92
+ </Settings.Item>
93
+ </Settings.Group>
94
+ </Settings.Section>
95
+ </Settings.Root>
104
96
  </Clipboard.Provider>
105
97
  );
106
98
  };
@@ -217,7 +209,7 @@ const InvitationSection = ({
217
209
  };
218
210
 
219
211
  const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel: () => void }) => {
220
- const { t } = useTranslation('os');
212
+ const { t } = useTranslation(osTranslations);
221
213
  const qrLabel = useId('devices-container__qr-code');
222
214
  const emoji = hexToEmoji(id);
223
215
  return (
@@ -257,7 +249,7 @@ const InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel
257
249
  };
258
250
 
259
251
  const InvitationAuthCode = ({ id, code, onCancel }: { id: string; code: string; onCancel: () => void }) => {
260
- const { t } = useTranslation('os');
252
+ const { t } = useTranslation(osTranslations);
261
253
  const emoji = hexToEmoji(id);
262
254
 
263
255
  return (
@@ -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 { useOperationInvoker } from '@dxos/app-framework/ui';
8
+ import { LayoutOperation } from '@dxos/app-toolkit';
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
15
  import { meta } from '../meta';
14
- import { ClientAction } from '../types';
15
-
16
- export const JOIN_DIALOG = `${meta.id}/JoinDialog`;
16
+ import { ClientOperation } from '../types';
17
17
 
18
18
  export const JoinDialog = (props: JoinPanelProps) => {
19
- const { dispatchPromise: dispatch } = useIntentDispatcher();
19
+ const { invokePromise } = useOperationInvoker();
20
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(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}
@@ -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,23 +9,27 @@ import { debounce } from '@dxos/async';
9
9
  import { useClient } from '@dxos/react-client';
10
10
  import { type Identity, useIdentity } from '@dxos/react-client/halo';
11
11
  import { ButtonGroup, Clipboard, Input, useTranslation } from '@dxos/react-ui';
12
- import {
13
- ControlItem,
14
- ControlItemInput,
15
- ControlPage,
16
- ControlSection,
17
- Form,
18
- type InputComponent,
19
- } from '@dxos/react-ui-form';
12
+ import { Form, type FormFieldMap, type FormUpdateMeta, Settings } from '@dxos/react-ui-form';
20
13
  import { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';
21
14
  import { hexToEmoji, hexToHue } from '@dxos/util';
22
15
 
23
16
  import { meta } from '../meta';
24
17
 
18
+ // TOOD(burdon): Factor out?
19
+ // TODO(wittjosiah): Integrate annotations with translations.
20
+ const UserProfile = Schema.Struct({
21
+ did: Schema.String.annotations({ title: 'DID' }),
22
+ displayName: Schema.String.annotations({ title: 'Display name' }),
23
+ emoji: Schema.String.annotations({ title: 'Avatar' }),
24
+ hue: Schema.String.annotations({ title: 'Color' }),
25
+ });
26
+
27
+ type UserProfile = Schema.Schema.Type<typeof UserProfile>;
28
+
25
29
  // TODO(thure): Factor out?
26
30
  const getDefaultHueValue = (identity: Identity | null) => hexToHue(identity?.identityKey.toHex() ?? '0');
27
- const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
28
31
  const getHueValue = (identity: Identity | null) => identity?.profile?.data?.hue || getDefaultHueValue(identity);
32
+ const getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');
29
33
  const getEmojiValue = (identity: Identity | null) => identity?.profile?.data?.emoji || getDefaultEmojiValue(identity);
30
34
 
31
35
  export const ProfileContainer = () => {
@@ -39,7 +43,7 @@ export const ProfileContainer = () => {
39
43
  const updateProfile = useMemo(
40
44
  () =>
41
45
  debounce(
42
- (profile: Partial<Profile>) =>
46
+ (profile: Partial<UserProfile>) =>
43
47
  client.halo.updateProfile({
44
48
  displayName: profile.displayName,
45
49
  data: {
@@ -52,11 +56,26 @@ export const ProfileContainer = () => {
52
56
  [],
53
57
  );
54
58
 
55
- const handleSave = useCallback(
56
- (profile: Profile) => {
57
- setDisplayNameDirectly(profile.displayName);
58
- setEmojiDirectly(profile.emoji);
59
- setHueDirectly(profile.hue);
59
+ const handleChange = useCallback(
60
+ (profile: Partial<UserProfile>, meta: FormUpdateMeta<UserProfile>) => {
61
+ for (const [path, changed] of Object.entries(meta.changed)) {
62
+ if (changed) {
63
+ switch (path) {
64
+ case 'displayName':
65
+ setDisplayNameDirectly(profile.displayName ?? '');
66
+ break;
67
+ case 'emoji':
68
+ setEmojiDirectly(profile.emoji ?? getDefaultEmojiValue(identity));
69
+ break;
70
+ case 'hue':
71
+ setHueDirectly(profile.hue ?? getDefaultHueValue(identity));
72
+ break;
73
+ default:
74
+ break;
75
+ }
76
+ }
77
+ }
78
+
60
79
  void updateProfile(profile);
61
80
  },
62
81
  [identity],
@@ -64,31 +83,32 @@ export const ProfileContainer = () => {
64
83
 
65
84
  const values = useMemo(
66
85
  () => ({
86
+ did: identity?.did,
67
87
  displayName,
68
88
  emoji,
69
89
  hue,
70
- did: identity?.did,
71
90
  }),
72
91
  [identity, displayName, emoji, hue],
73
92
  );
74
93
 
75
94
  // TODO(wittjosiah): Integrate descriptions with the form schema.
76
- const customElements: Partial<Record<string, InputComponent>> = useMemo(
95
+ const fieldMap = useMemo<FormFieldMap>(
77
96
  () => ({
78
97
  displayName: ({ type, label, getValue, onValueChange }) => {
79
98
  const handleChange = useCallback(
80
99
  ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),
81
100
  [onValueChange, type],
82
101
  );
102
+
83
103
  return (
84
- <ControlItemInput title={label} description={t('display name description')}>
104
+ <Settings.ItemInput title={label} description={t('display name description')}>
85
105
  <Input.TextInput
86
106
  value={getValue()}
87
107
  onChange={handleChange}
88
108
  placeholder={t('display name input placeholder')}
89
109
  classNames='min-is-64'
90
110
  />
91
- </ControlItemInput>
111
+ </Settings.ItemInput>
92
112
  );
93
113
  },
94
114
  emoji: ({ type, label, getValue, onValueChange }) => {
@@ -97,8 +117,9 @@ export const ProfileContainer = () => {
97
117
  () => onValueChange(type, getDefaultEmojiValue(identity)),
98
118
  [onValueChange, type],
99
119
  );
120
+
100
121
  return (
101
- <ControlItem title={label} description={t('icon description')}>
122
+ <Settings.Item title={label} description={t('icon description')}>
102
123
  <EmojiPickerBlock
103
124
  triggerVariant='default'
104
125
  emoji={getValue()}
@@ -106,7 +127,7 @@ export const ProfileContainer = () => {
106
127
  onClickClear={handleEmojiReset}
107
128
  classNames='justify-self-end'
108
129
  />
109
- </ControlItem>
130
+ </Settings.Item>
110
131
  );
111
132
  },
112
133
  hue: ({ type, label, getValue, onValueChange }) => {
@@ -115,26 +136,24 @@ export const ProfileContainer = () => {
115
136
  () => onValueChange(type, getDefaultHueValue(identity)),
116
137
  [onValueChange, type],
117
138
  );
139
+
118
140
  return (
119
- <ControlItem title={label} description={t('hue description')}>
120
- <HuePicker
121
- value={getValue()}
122
- onChange={handleChange}
123
- onReset={handleHueReset}
124
- classNames='[--hue-preview-size:1.5rem] justify-self-end'
125
- />
126
- </ControlItem>
141
+ <Settings.Item title={label} description={t('hue description')}>
142
+ <div role='none' className='flex justify-self-end'>
143
+ <HuePicker value={getValue()} onChange={handleChange} onReset={handleHueReset} />
144
+ </div>
145
+ </Settings.Item>
127
146
  );
128
147
  },
129
148
  // TODO(wittjosiah): We need text input annotations for disabled and copyable.
130
149
  did: ({ label, getValue }) => {
131
150
  return (
132
- <ControlItemInput title={label} description={t('did description')}>
133
- <ButtonGroup>
151
+ <Settings.ItemInput title={label} description={t('did description')}>
152
+ <ButtonGroup classNames='is-full'>
134
153
  <Input.TextInput value={getValue()} disabled classNames='min-is-64' />
135
154
  <Clipboard.IconButton value={getValue() ?? ''} />
136
155
  </ButtonGroup>
137
- </ControlItemInput>
156
+ </Settings.ItemInput>
138
157
  );
139
158
  },
140
159
  }),
@@ -142,29 +161,16 @@ export const ProfileContainer = () => {
142
161
  );
143
162
 
144
163
  return (
145
- <ControlPage>
146
- <Clipboard.Provider>
147
- <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
- />
157
- </ControlSection>
158
- </Clipboard.Provider>
159
- </ControlPage>
164
+ <Clipboard.Provider>
165
+ <Settings.Root>
166
+ <Settings.Section title={t('profile label')} description={t('profile description')}>
167
+ <Form.Root schema={UserProfile} values={values} fieldMap={fieldMap} onValuesChanged={handleChange}>
168
+ <Form.Content>
169
+ <Form.FieldSet classNames='space-y-trimMd' />
170
+ </Form.Content>
171
+ </Form.Root>
172
+ </Settings.Section>
173
+ </Settings.Root>
174
+ </Clipboard.Provider>
160
175
  );
161
176
  };
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>;
@@ -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
  };
@@ -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
  ))}
@@ -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,49 +4,47 @@
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/ui';
8
8
  import { useCredentials } from '@dxos/react-client/halo';
9
9
  import { Icon, IconButton, List, ListItem, Message, useTranslation } from '@dxos/react-ui';
10
- import { ControlGroup, ControlItem, ControlPage, ControlSection } from '@dxos/react-ui-form';
10
+ import { Settings } from '@dxos/react-ui-form';
11
11
 
12
12
  import { meta } from '../meta';
13
- import { ClientAction } from '../types';
13
+ import { ClientOperation } from '../types';
14
14
 
15
15
  export const MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;
16
16
 
17
17
  export const RecoveryCredentialsContainer = () => {
18
18
  const { t } = useTranslation(meta.id);
19
- const { dispatchPromise: dispatch } = useIntentDispatcher();
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',
23
23
  );
24
24
 
25
25
  return (
26
- <ControlPage>
27
- <ControlSection title={t('recovery setup dialog title')} description={t('recovery setup dialog description')}>
28
- <ControlGroup>
29
- <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')}>
30
30
  <IconButton
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
- </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
- size={5}
44
- onClick={() => dispatch(createIntent(ClientAction.CreateRecoveryCode))}
42
+ onClick={() => invokePromise(ClientOperation.CreateRecoveryCode)}
45
43
  />
46
- </ControlItem>
47
- </ControlGroup>
48
- </ControlSection>
49
- <ControlSection title={t('credentials list label')}>
44
+ </Settings.Item>
45
+ </Settings.Group>
46
+ </Settings.Section>
47
+ <Settings.Section title={t('credentials list label')}>
50
48
  {recoveryCredentials.length < 1 ? (
51
49
  <Message.Root valence='error' classNames='container-max-width'>
52
50
  <Message.Title icon='ph--shield-warning--duotone'>{t('no credentials title')}</Message.Title>
@@ -57,14 +55,14 @@ 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>
64
62
  ))}
65
63
  </List>
66
64
  )}
67
- </ControlSection>
68
- </ControlPage>
65
+ </Settings.Section>
66
+ </Settings.Root>
69
67
  );
70
68
  };