@dxos/shell 0.7.5-main.e9bb01b → 0.7.5-staging.2ff1350

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 (241) hide show
  1. package/dist/bundle/{shell.mjs → shell.js} +8743 -8681
  2. package/dist/bundle/shell.js.map +1 -0
  3. package/dist/bundle/shell.umd.cjs +1045 -0
  4. package/dist/bundle/shell.umd.cjs.map +1 -0
  5. package/dist/bundle/style.css +1 -1
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/browser/react.mjs +36 -30
  8. package/dist/lib/browser/react.mjs.map +3 -3
  9. package/dist/lib/node/meta.json +1 -1
  10. package/dist/lib/node/react.cjs +25 -19
  11. package/dist/lib/node/react.cjs.map +3 -3
  12. package/dist/lib/node-esm/meta.json +1 -1
  13. package/dist/lib/node-esm/react.mjs +36 -30
  14. package/dist/lib/node-esm/react.mjs.map +3 -3
  15. package/dist/types/src/components/AgentConfig.d.ts +1 -2
  16. package/dist/types/src/components/AgentConfig.d.ts.map +1 -1
  17. package/dist/types/src/components/AgentConfig.js +17 -43
  18. package/dist/types/src/components/AgentConfig.js.map +1 -1
  19. package/dist/types/src/components/AuthCode.d.ts +2 -2
  20. package/dist/types/src/components/AuthCode.d.ts.map +1 -1
  21. package/dist/types/src/components/AuthCode.js +5 -39
  22. package/dist/types/src/components/AuthCode.js.map +1 -1
  23. package/dist/types/src/components/CompoundButton/CompoundButton.d.ts +2 -2
  24. package/dist/types/src/components/CompoundButton/CompoundButton.d.ts.map +1 -1
  25. package/dist/types/src/components/CompoundButton/CompoundButton.js +2 -13
  26. package/dist/types/src/components/CompoundButton/CompoundButton.js.map +1 -1
  27. package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts +7 -8
  28. package/dist/types/src/components/CompoundButton/CompoundButton.stories.d.ts.map +1 -1
  29. package/dist/types/src/components/CompoundButton/CompoundButton.stories.js +9 -14
  30. package/dist/types/src/components/CompoundButton/CompoundButton.stories.js.map +1 -1
  31. package/dist/types/src/components/DeviceList/DeviceList.d.ts +1 -2
  32. package/dist/types/src/components/DeviceList/DeviceList.d.ts.map +1 -1
  33. package/dist/types/src/components/DeviceList/DeviceList.js +6 -16
  34. package/dist/types/src/components/DeviceList/DeviceList.js.map +1 -1
  35. package/dist/types/src/components/DeviceList/DeviceListItem.js +6 -58
  36. package/dist/types/src/components/DeviceList/DeviceListItem.js.map +1 -1
  37. package/dist/types/src/components/IdentityList/IdentityListItem.js +5 -41
  38. package/dist/types/src/components/IdentityList/IdentityListItem.js.map +1 -1
  39. package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts +2 -3
  40. package/dist/types/src/components/IdentityList/SpaceMemberList.d.ts.map +1 -1
  41. package/dist/types/src/components/IdentityList/SpaceMemberList.js +8 -41
  42. package/dist/types/src/components/IdentityList/SpaceMemberList.js.map +1 -1
  43. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts +2 -3
  44. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts.map +1 -1
  45. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js +4 -7
  46. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js.map +1 -1
  47. package/dist/types/src/components/InvitationList/InvitationList.d.ts +2 -2
  48. package/dist/types/src/components/InvitationList/InvitationList.d.ts.map +1 -1
  49. package/dist/types/src/components/InvitationList/InvitationList.js +5 -11
  50. package/dist/types/src/components/InvitationList/InvitationList.js.map +1 -1
  51. package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts +2 -3
  52. package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts.map +1 -1
  53. package/dist/types/src/components/InvitationList/InvitationList.stories.js +4 -7
  54. package/dist/types/src/components/InvitationList/InvitationList.stories.js.map +1 -1
  55. package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts +1 -2
  56. package/dist/types/src/components/InvitationList/InvitationListContainer.d.ts.map +1 -1
  57. package/dist/types/src/components/InvitationList/InvitationListContainer.js +3 -35
  58. package/dist/types/src/components/InvitationList/InvitationListContainer.js.map +1 -1
  59. package/dist/types/src/components/InvitationList/InvitationListItem.d.ts +3 -3
  60. package/dist/types/src/components/InvitationList/InvitationListItem.d.ts.map +1 -1
  61. package/dist/types/src/components/InvitationList/InvitationListItem.js +5 -67
  62. package/dist/types/src/components/InvitationList/InvitationListItem.js.map +1 -1
  63. package/dist/types/src/components/Panel/Action.js +8 -58
  64. package/dist/types/src/components/Panel/Action.js.map +1 -1
  65. package/dist/types/src/components/Panel/Actions.js +5 -37
  66. package/dist/types/src/components/Panel/Actions.js.map +1 -1
  67. package/dist/types/src/components/Panel/CloseButton.d.ts +1 -2
  68. package/dist/types/src/components/Panel/CloseButton.d.ts.map +1 -1
  69. package/dist/types/src/components/Panel/CloseButton.js +4 -9
  70. package/dist/types/src/components/Panel/CloseButton.js.map +1 -1
  71. package/dist/types/src/components/Panel/Emoji.d.ts +3 -3
  72. package/dist/types/src/components/Panel/Emoji.d.ts.map +1 -1
  73. package/dist/types/src/components/Panel/Emoji.js +3 -11
  74. package/dist/types/src/components/Panel/Emoji.js.map +1 -1
  75. package/dist/types/src/components/Panel/Heading.js +5 -41
  76. package/dist/types/src/components/Panel/Heading.js.map +1 -1
  77. package/dist/types/src/components/Panel/Input.d.ts +2 -2
  78. package/dist/types/src/components/Panel/Input.d.ts.map +1 -1
  79. package/dist/types/src/components/Panel/Input.js +2 -11
  80. package/dist/types/src/components/Panel/Input.js.map +1 -1
  81. package/dist/types/src/components/Panel/Label.d.ts +2 -2
  82. package/dist/types/src/components/Panel/Label.d.ts.map +1 -1
  83. package/dist/types/src/components/Panel/Label.js +2 -8
  84. package/dist/types/src/components/Panel/Label.js.map +1 -1
  85. package/dist/types/src/components/Panel/Panel.stories.d.ts +3 -4
  86. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -1
  87. package/dist/types/src/components/Panel/Panel.stories.js +5 -20
  88. package/dist/types/src/components/Panel/Panel.stories.js.map +1 -1
  89. package/dist/types/src/components/Panel/StepHeading.js +5 -37
  90. package/dist/types/src/components/Panel/StepHeading.js.map +1 -1
  91. package/dist/types/src/components/SpaceListItem.js +5 -41
  92. package/dist/types/src/components/SpaceListItem.js.map +1 -1
  93. package/dist/types/src/components/StorybookDialog.d.ts +2 -2
  94. package/dist/types/src/components/StorybookDialog.d.ts.map +1 -1
  95. package/dist/types/src/components/StorybookDialog.js +2 -11
  96. package/dist/types/src/components/StorybookDialog.js.map +1 -1
  97. package/dist/types/src/components/Viewport/Viewport.d.ts +2 -2
  98. package/dist/types/src/components/Viewport/Viewport.js +7 -40
  99. package/dist/types/src/components/Viewport/Viewport.js.map +1 -1
  100. package/dist/types/src/components/Viewport/Viewport.stories.d.ts +1 -2
  101. package/dist/types/src/components/Viewport/Viewport.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/Viewport/Viewport.stories.js +5 -27
  103. package/dist/types/src/components/Viewport/Viewport.stories.js.map +1 -1
  104. package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts +1 -2
  105. package/dist/types/src/composites/IdentityDialog/IdentityDialog.d.ts.map +1 -1
  106. package/dist/types/src/composites/IdentityDialog/IdentityDialog.js +3 -14
  107. package/dist/types/src/composites/IdentityDialog/IdentityDialog.js.map +1 -1
  108. package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts +1 -2
  109. package/dist/types/src/composites/JoinDialog/JoinDialog.d.ts.map +1 -1
  110. package/dist/types/src/composites/JoinDialog/JoinDialog.js +4 -14
  111. package/dist/types/src/composites/JoinDialog/JoinDialog.js.map +1 -1
  112. package/dist/types/src/composites/Shell/Shell.d.ts +1 -2
  113. package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
  114. package/dist/types/src/composites/Shell/Shell.js +9 -41
  115. package/dist/types/src/composites/Shell/Shell.js.map +1 -1
  116. package/dist/types/src/composites/Shell/ShellContext.d.ts +2 -2
  117. package/dist/types/src/composites/Shell/ShellContext.d.ts.map +1 -1
  118. package/dist/types/src/composites/Shell/ShellContext.js +5 -40
  119. package/dist/types/src/composites/Shell/ShellContext.js.map +1 -1
  120. package/dist/types/src/composites/Shell/run-shell.js +7 -52
  121. package/dist/types/src/composites/Shell/run-shell.js.map +1 -1
  122. package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts +1 -2
  123. package/dist/types/src/composites/SpaceDialog/SpaceDialog.d.ts.map +1 -1
  124. package/dist/types/src/composites/SpaceDialog/SpaceDialog.js +3 -14
  125. package/dist/types/src/composites/SpaceDialog/SpaceDialog.js.map +1 -1
  126. package/dist/types/src/composites/StatusDialog/StatusDialog.d.ts +1 -2
  127. package/dist/types/src/composites/StatusDialog/StatusDialog.d.ts.map +1 -1
  128. package/dist/types/src/composites/StatusDialog/StatusDialog.js +2 -12
  129. package/dist/types/src/composites/StatusDialog/StatusDialog.js.map +1 -1
  130. package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts +2 -3
  131. package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
  132. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +18 -94
  133. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
  134. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts +10 -11
  135. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts.map +1 -1
  136. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js +8 -10
  137. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js.map +1 -1
  138. package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts +2 -1
  139. package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts.map +1 -1
  140. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts +2 -3
  141. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -1
  142. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +3 -11
  143. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
  144. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts +1 -2
  145. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts.map +1 -1
  146. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js +13 -55
  147. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js.map +1 -1
  148. package/dist/types/src/panels/JoinPanel/JoinHeading.js +6 -40
  149. package/dist/types/src/panels/JoinPanel/JoinHeading.js.map +1 -1
  150. package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts +2 -3
  151. package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts.map +1 -1
  152. package/dist/types/src/panels/JoinPanel/JoinPanel.js +6 -63
  153. package/dist/types/src/panels/JoinPanel/JoinPanel.js.map +1 -1
  154. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts +14 -15
  155. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts.map +1 -1
  156. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.js +17 -21
  157. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.js.map +1 -1
  158. package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts +1 -2
  159. package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.d.ts.map +1 -1
  160. package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.js +5 -13
  161. package/dist/types/src/panels/JoinPanel/steps/AdditionMethodChooser.js.map +1 -1
  162. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts +1 -2
  163. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts.map +1 -1
  164. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js +6 -46
  165. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js.map +1 -1
  166. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts +2 -3
  167. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.d.ts.map +1 -1
  168. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.js +7 -43
  169. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.js.map +1 -1
  170. package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.d.ts +2 -2
  171. package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.d.ts.map +1 -1
  172. package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.js +6 -41
  173. package/dist/types/src/panels/JoinPanel/steps/InvitationAccepted.js.map +1 -1
  174. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts +1 -2
  175. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts.map +1 -1
  176. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js +16 -63
  177. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js.map +1 -1
  178. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts +1 -2
  179. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts.map +1 -1
  180. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js +12 -49
  181. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js.map +1 -1
  182. package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts +1 -2
  183. package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.d.ts.map +1 -1
  184. package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.js +8 -27
  185. package/dist/types/src/panels/JoinPanel/steps/InvitationRescuer.js.map +1 -1
  186. package/dist/types/src/panels/Panels.stories.d.ts +3 -3
  187. package/dist/types/src/panels/Panels.stories.d.ts.map +1 -1
  188. package/dist/types/src/panels/Panels.stories.js +6 -14
  189. package/dist/types/src/panels/Panels.stories.js.map +1 -1
  190. package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts +2 -3
  191. package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -1
  192. package/dist/types/src/panels/SpacePanel/SpacePanel.js +8 -50
  193. package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
  194. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts +17 -18
  195. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts.map +1 -1
  196. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js +37 -43
  197. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js.map +1 -1
  198. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts +3 -3
  199. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
  200. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +6 -49
  201. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
  202. package/dist/types/src/panels/StatusPanel/StatusPanel.d.ts +1 -2
  203. package/dist/types/src/panels/StatusPanel/StatusPanel.d.ts.map +1 -1
  204. package/dist/types/src/panels/StatusPanel/StatusPanel.js +2 -10
  205. package/dist/types/src/panels/StatusPanel/StatusPanel.js.map +1 -1
  206. package/dist/types/src/steps/ConfirmReset.d.ts +2 -3
  207. package/dist/types/src/steps/ConfirmReset.d.ts.map +1 -1
  208. package/dist/types/src/steps/ConfirmReset.js +12 -54
  209. package/dist/types/src/steps/ConfirmReset.js.map +1 -1
  210. package/dist/types/src/steps/InvitationManager.d.ts +1 -2
  211. package/dist/types/src/steps/InvitationManager.d.ts.map +1 -1
  212. package/dist/types/src/steps/InvitationManager.js +6 -56
  213. package/dist/types/src/steps/InvitationManager.js.map +1 -1
  214. package/dist/types/src/stories/Invitations.e2e-stories.d.ts +1 -2
  215. package/dist/types/src/stories/Invitations.e2e-stories.d.ts.map +1 -1
  216. package/dist/types/src/stories/Invitations.e2e-stories.js +15 -75
  217. package/dist/types/src/stories/Invitations.e2e-stories.js.map +1 -1
  218. package/dist/types/src/testing/fixtures/identities.d.ts.map +1 -1
  219. package/dist/types/src/testing/fixtures/identities.js +2 -0
  220. package/dist/types/src/testing/fixtures/identities.js.map +1 -1
  221. package/dist/types/src/translations/locales/en-US.d.ts +4 -1
  222. package/dist/types/src/translations/locales/en-US.d.ts.map +1 -1
  223. package/dist/types/src/translations/locales/en-US.js +5 -1
  224. package/dist/types/src/translations/locales/en-US.js.map +1 -1
  225. package/package.json +28 -27
  226. package/src/panels/IdentityPanel/IdentityPanel.stories.tsx +3 -0
  227. package/src/panels/IdentityPanel/IdentityPanel.tsx +31 -29
  228. package/src/panels/IdentityPanel/IdentityPanelProps.ts +8 -1
  229. package/src/panels/IdentityPanel/steps/ProfileForm.tsx +2 -7
  230. package/src/panels/JoinPanel/steps/IdentityInput.tsx +1 -1
  231. package/src/panels/SpacePanel/SpacePanel.stories.tsx +6 -1
  232. package/src/testing/fixtures/identities.ts +2 -0
  233. package/src/translations/locales/en-US.ts +7 -1
  234. package/dist/bundle/shell.mjs.map +0 -1
  235. package/dist/bundle/shell.umd.js +0 -1045
  236. package/dist/bundle/shell.umd.js.map +0 -1
  237. package/dist/types/src/playwright/playwright.config.d.ts +0 -3
  238. package/dist/types/src/playwright/playwright.config.d.ts.map +0 -1
  239. package/dist/types/src/playwright/playwright.config.js +0 -18
  240. package/dist/types/src/playwright/playwright.config.js.map +0 -1
  241. /package/src/playwright/{playwright.config.ts → playwright.config.cts} +0 -0
@@ -2,7 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { Key, Plugs, PlugsConnected } from '@phosphor-icons/react';
5
+ import { IdentificationCard, Plugs, PlugsConnected } from '@phosphor-icons/react';
6
6
  import React, { useEffect, useMemo, useState } from 'react';
7
7
 
8
8
  import { generateName } from '@dxos/display-name';
@@ -12,9 +12,9 @@ import { type Identity, useIdentity, useDevices, useHaloInvitations } from '@dxo
12
12
  import { useInvitationStatus } from '@dxos/react-client/invitations';
13
13
  import { type CancellableInvitationObservable } from '@dxos/react-client/invitations';
14
14
  import { useNetworkStatus, ConnectionState } from '@dxos/react-client/mesh';
15
- import { Avatar, Input, Toolbar, Tooltip, useClipboard, useId, useTranslation } from '@dxos/react-ui';
16
- import { EmojiPickerToolbarButton, HuePickerToolbarButton } from '@dxos/react-ui-pickers';
17
- import { getSize } from '@dxos/react-ui-theme';
15
+ import { Avatar, Clipboard, Input, Toolbar, Tooltip, useId, useTranslation } from '@dxos/react-ui';
16
+ import { EmojiPickerToolbarButton, HuePicker } from '@dxos/react-ui-pickers';
17
+ import { errorText, getSize } from '@dxos/react-ui-theme';
18
18
  import { hexToEmoji, hexToHue, keyToFallback } from '@dxos/util';
19
19
 
20
20
  import {
@@ -44,15 +44,13 @@ const IdentityHeading = ({
44
44
  onUpdateProfile,
45
45
  connectionState,
46
46
  onChangeConnectionState,
47
+ onManageCredentials,
47
48
  }: IdentityPanelHeadingProps) => {
48
49
  const fallbackValue = keyToFallback(identity.identityKey);
49
50
  const { t } = useTranslation('os');
50
51
  const [displayName, setDisplayName] = useState(identity.profile?.displayName ?? '');
51
52
  const [emoji, setEmojiDirectly] = useState<string>(getEmojiValue(identity));
52
53
  const [hue, setHueDirectly] = useState<string>(getHueValue(identity));
53
- const { textValue, setTextValue } = useClipboard();
54
- const identityHex = identity.identityKey.toHex();
55
- const publicKeyCopied = textValue === identityHex;
56
54
 
57
55
  const setEmoji = (nextEmoji: string) => {
58
56
  setEmojiDirectly(nextEmoji);
@@ -94,31 +92,33 @@ const IdentityHeading = ({
94
92
 
95
93
  <Toolbar.Root classNames='flex justify-center items-center gap-1 pt-3'>
96
94
  <EmojiPickerToolbarButton emoji={emoji} onChangeEmoji={setEmoji} classNames='bs-[--rail-action]' />
97
- <HuePickerToolbarButton hue={hue} onChangeHue={setHue} classNames='bs-[--rail-action]' />
98
- <Tooltip.Root>
99
- <Tooltip.Trigger asChild>
100
- <Toolbar.Button
101
- classNames='bs-[--rail-action]'
102
- data-testid='update-profile-form-copy-key'
103
- onClick={() => setTextValue(identityHex)}
104
- >
105
- <span className='sr-only'>
106
- {t(publicKeyCopied ? 'copy success label' : 'copy self public key label')}
107
- </span>
108
- <Key className={getSize(5)} />
109
- </Toolbar.Button>
110
- </Tooltip.Trigger>
111
- <Tooltip.Portal>
112
- <Tooltip.Content side='bottom'>
113
- {t(publicKeyCopied ? 'copy success label' : 'copy self public key label')}
114
- <Tooltip.Arrow />
115
- </Tooltip.Content>
116
- </Tooltip.Portal>
117
- </Tooltip.Root>
95
+ <HuePicker value={hue} onChange={setHue} classNames='bs-[--rail-action]' />
96
+ <Clipboard.IconButton
97
+ classNames='bs-[--rail-action]'
98
+ data-testid='update-profile-form-copy-key'
99
+ label={t('copy self did label')}
100
+ value={identity.did}
101
+ />
102
+ {onManageCredentials && (
103
+ <Tooltip.Root>
104
+ <Tooltip.Trigger asChild>
105
+ <Toolbar.Button classNames='bs-[--rail-action]' onClick={onManageCredentials}>
106
+ <span className='sr-only'>{t('manage credentials label')}</span>
107
+ <IdentificationCard className={getSize(5)} />
108
+ </Toolbar.Button>
109
+ </Tooltip.Trigger>
110
+ <Tooltip.Portal>
111
+ <Tooltip.Content side='bottom'>
112
+ {t('manage credentials label')}
113
+ <Tooltip.Arrow />
114
+ </Tooltip.Content>
115
+ </Tooltip.Portal>
116
+ </Tooltip.Root>
117
+ )}
118
118
  <Tooltip.Root>
119
119
  <Tooltip.Trigger asChild>
120
120
  <Toolbar.Button
121
- classNames={['bs-[--rail-action]', !isConnected && 'text-error-500']}
121
+ classNames={['bs-[--rail-action]', !isConnected && errorText]}
122
122
  onClick={() =>
123
123
  onChangeConnectionState?.(isConnected ? ConnectionState.OFFLINE : ConnectionState.ONLINE)
124
124
  }
@@ -154,6 +154,7 @@ export const IdentityPanelImpl = (props: IdentityPanelImplProps) => {
154
154
  connectionState,
155
155
  onChangeConnectionState,
156
156
  onDone,
157
+ onManageCredentials,
157
158
  ...rest
158
159
  } = props;
159
160
  const { t } = useTranslation('os');
@@ -181,6 +182,7 @@ export const IdentityPanelImpl = (props: IdentityPanelImplProps) => {
181
182
  onUpdateProfile,
182
183
  connectionState,
183
184
  onChangeConnectionState,
185
+ onManageCredentials,
184
186
  }}
185
187
  />
186
188
  <Viewport.Root activeView={activeView}>
@@ -29,6 +29,7 @@ export type IdentityPanelImplProps = {
29
29
  connectionState?: ConnectionState;
30
30
  onChangeConnectionState?: (nextState: ConnectionState) => Promise<void>;
31
31
  onUpdateProfile?: (profile: NonNullable<Identity['profile']>) => Promise<void>;
32
+ onManageCredentials?: () => Promise<void>;
32
33
  onResetStorage?: () => Promise<void>;
33
34
  onRecover?: () => Promise<void>;
34
35
  onJoinNewIdentity?: () => Promise<void>;
@@ -46,7 +47,13 @@ export type IdentityPanelProps = Partial<Omit<IdentityPanelImplProps, 'send' | '
46
47
 
47
48
  export type IdentityPanelHeadingProps = Pick<
48
49
  IdentityPanelImplProps,
49
- 'titleId' | 'identity' | 'onDone' | 'onUpdateProfile' | 'connectionState' | 'onChangeConnectionState'
50
+ | 'titleId'
51
+ | 'identity'
52
+ | 'onDone'
53
+ | 'onUpdateProfile'
54
+ | 'connectionState'
55
+ | 'onChangeConnectionState'
56
+ | 'onManageCredentials'
50
57
  > & {
51
58
  title: string;
52
59
  };
@@ -8,7 +8,7 @@ import { type Event, type SingleOrArray } from 'xstate';
8
8
  import { log } from '@dxos/log';
9
9
  import { type Identity } from '@dxos/react-client/halo';
10
10
  import { useClipboard, useTranslation } from '@dxos/react-ui';
11
- import { EmojiPickerBlock, HuePickerBlock } from '@dxos/react-ui-pickers';
11
+ import { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';
12
12
  import { hexToEmoji, hexToHue } from '@dxos/util';
13
13
 
14
14
  import { Action, Actions, StepHeading, Input } from '../../../components';
@@ -75,12 +75,7 @@ const ProfileFormImpl = (props: ProfileFormImplProps) => {
75
75
  disabled={disabled}
76
76
  onClickClear={() => setEmoji(getEmojiValue(identity))}
77
77
  />
78
- <HuePickerBlock
79
- hue={hue}
80
- onChangeHue={setHue}
81
- disabled={disabled}
82
- onClickClear={() => setHue(getHueValue(identity))}
83
- />
78
+ <HuePicker disabled={disabled} value={hue} onChange={setHue} onReset={() => setHue(getHueValue(identity))} />
84
79
  </div>
85
80
  </div>
86
81
  <Actions>
@@ -31,7 +31,7 @@ export const IdentityInput = (props: IdentityInputProps) => {
31
31
  const [validationMessage, setValidationMessage] = useState('');
32
32
  const handleConfirm = async (value: string) => {
33
33
  if (isRecover) {
34
- await client.halo.recoverIdentity({ seedphrase: value }).then(
34
+ await client.halo.recoverIdentity({ recoveryCode: value }).then(
35
35
  (identity) => {
36
36
  send?.({ type: 'selectIdentity' as const, identity });
37
37
  },
@@ -6,7 +6,7 @@ import '@dxos-theme';
6
6
 
7
7
  import React from 'react';
8
8
 
9
- import { PublicKey } from '@dxos/keys';
9
+ import { IdentityDid, PublicKey } from '@dxos/keys';
10
10
  import { HaloSpaceMember, SpaceMember } from '@dxos/react-client/echo';
11
11
  import { Invitation } from '@dxos/react-client/invitations';
12
12
  import { withTheme } from '@dxos/storybook-utils';
@@ -179,6 +179,7 @@ export const SpaceManagerWithMember = () => {
179
179
  presence: SpaceMember.PresenceState.ONLINE,
180
180
  role: HaloSpaceMember.Role.ADMIN,
181
181
  identity: {
182
+ did: IdentityDid.random(),
182
183
  identityKey: PublicKey.random(),
183
184
  },
184
185
  },
@@ -212,6 +213,7 @@ export const SpaceManagerWithMembers = () => {
212
213
  presence: SpaceMember.PresenceState.ONLINE,
213
214
  role: HaloSpaceMember.Role.ADMIN,
214
215
  identity: {
216
+ did: IdentityDid.random(),
215
217
  identityKey: PublicKey.random(),
216
218
  profile: {
217
219
  displayName: 'John Doe',
@@ -252,6 +254,7 @@ export const SpaceManagerWithMoreMembers = () => {
252
254
  presence: SpaceMember.PresenceState.ONLINE,
253
255
  role: HaloSpaceMember.Role.ADMIN,
254
256
  identity: {
257
+ did: IdentityDid.random(),
255
258
  identityKey: PublicKey.random(),
256
259
  profile: {
257
260
  displayName: 'John Doe',
@@ -262,6 +265,7 @@ export const SpaceManagerWithMoreMembers = () => {
262
265
  presence: SpaceMember.PresenceState.OFFLINE,
263
266
  role: HaloSpaceMember.Role.ADMIN,
264
267
  identity: {
268
+ did: IdentityDid.random(),
265
269
  identityKey: PublicKey.random(),
266
270
  profile: {
267
271
  displayName: 'Alice Wong',
@@ -272,6 +276,7 @@ export const SpaceManagerWithMoreMembers = () => {
272
276
  presence: SpaceMember.PresenceState.OFFLINE,
273
277
  role: HaloSpaceMember.Role.ADMIN,
274
278
  identity: {
279
+ did: IdentityDid.random(),
275
280
  identityKey: PublicKey.random(),
276
281
  profile: {
277
282
  displayName: 'Steel Nickels',
@@ -2,12 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import { IdentityDid } from '@dxos/keys';
5
6
  import { PublicKey } from '@dxos/react-client';
6
7
  import { HaloSpaceMember, SpaceMember } from '@dxos/react-client/echo';
7
8
 
8
9
  export const alice: SpaceMember = {
9
10
  role: HaloSpaceMember.Role.ADMIN,
10
11
  identity: {
12
+ did: IdentityDid.random(),
11
13
  identityKey: PublicKey.random(),
12
14
  profile: {
13
15
  displayName: 'Alice',
@@ -8,7 +8,7 @@ export const os = {
8
8
  'sidebar label': 'DXOS sidebar',
9
9
  'copy invitation code label': 'Copy URL',
10
10
  'copy success label': 'Copied',
11
- 'copy self public key label': 'Copy public key',
11
+ 'copy self did label': 'Copy DID',
12
12
  'open share panel label': 'View QR code',
13
13
  'joining space heading': 'Joining space',
14
14
  'join space heading': 'Enter space invitation',
@@ -118,6 +118,8 @@ export const os = {
118
118
  'select emoji label': 'Avatar emoji',
119
119
  'select hue label': 'Avatar background color',
120
120
  'resetting message': 'One moment while the device is reset…',
121
+
122
+ // TODO(burdon): Factor out.
121
123
  'red label': 'Red',
122
124
  'orange label': 'Orange',
123
125
  'amber label': 'Amber',
@@ -135,6 +137,10 @@ export const os = {
135
137
  'fuchsia label': 'Fuchsia',
136
138
  'pink label': 'Pink',
137
139
  'rose label': 'Rose',
140
+
141
+ 'select a hue label': 'Select color',
142
+ 'hue label': 'Hue',
143
+ 'icon label': 'Icon',
138
144
  'current device tag label': 'This device',
139
145
  'device name placeholder': '{{platform}} on {{os}}',
140
146
  'more options label': 'More options',