@dxos/shell 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

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 (56) hide show
  1. package/dist/bundle/shell.js +26012 -25121
  2. package/dist/bundle/shell.js.map +1 -1
  3. package/dist/bundle/shell.umd.cjs +260 -145
  4. package/dist/bundle/shell.umd.cjs.map +1 -1
  5. package/dist/bundle/style.css +1 -1
  6. package/dist/lib/browser/meta.json +1 -1
  7. package/dist/lib/browser/react.mjs +61 -74
  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 +60 -72
  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 +61 -74
  14. package/dist/lib/node-esm/react.mjs.map +3 -3
  15. package/dist/types/src/components/AgentConfig.d.ts.map +1 -1
  16. package/dist/types/src/components/AgentConfig.js +3 -4
  17. package/dist/types/src/components/AgentConfig.js.map +1 -1
  18. package/dist/types/src/components/DeviceList/DeviceList.d.ts +1 -1
  19. package/dist/types/src/components/DeviceList/DeviceList.d.ts.map +1 -1
  20. package/dist/types/src/components/DeviceList/DeviceList.js.map +1 -1
  21. package/dist/types/src/components/DeviceList/DeviceListItem.d.ts +1 -1
  22. package/dist/types/src/components/DeviceList/DeviceListItem.d.ts.map +1 -1
  23. package/dist/types/src/components/DeviceList/DeviceListItem.js +26 -19
  24. package/dist/types/src/components/DeviceList/DeviceListItem.js.map +1 -1
  25. package/dist/types/src/components/DeviceList/index.d.ts +1 -0
  26. package/dist/types/src/components/DeviceList/index.d.ts.map +1 -1
  27. package/dist/types/src/components/DeviceList/index.js +1 -0
  28. package/dist/types/src/components/DeviceList/index.js.map +1 -1
  29. package/dist/types/src/components/IdentityList/IdentityListItem.d.ts.map +1 -1
  30. package/dist/types/src/components/IdentityList/IdentityListItem.js +2 -3
  31. package/dist/types/src/components/IdentityList/IdentityListItem.js.map +1 -1
  32. package/dist/types/src/components/InvitationList/InvitationListItem.d.ts.map +1 -1
  33. package/dist/types/src/components/InvitationList/InvitationListItem.js +2 -3
  34. package/dist/types/src/components/InvitationList/InvitationListItem.js.map +1 -1
  35. package/dist/types/src/components/SpaceListItem.d.ts.map +1 -1
  36. package/dist/types/src/components/SpaceListItem.js +1 -2
  37. package/dist/types/src/components/SpaceListItem.js.map +1 -1
  38. package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
  39. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +3 -4
  40. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
  41. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.d.ts.map +1 -1
  42. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js +2 -3
  43. package/dist/types/src/panels/JoinPanel/steps/IdentityAdded.js.map +1 -1
  44. package/dist/types/src/translations/locales/en-US.js +5 -5
  45. package/dist/types/src/translations/locales/en-US.js.map +1 -1
  46. package/package.json +28 -28
  47. package/src/components/AgentConfig.tsx +8 -12
  48. package/src/components/DeviceList/DeviceList.tsx +1 -1
  49. package/src/components/DeviceList/DeviceListItem.tsx +49 -62
  50. package/src/components/DeviceList/index.ts +1 -0
  51. package/src/components/IdentityList/IdentityListItem.tsx +7 -8
  52. package/src/components/InvitationList/InvitationListItem.tsx +12 -7
  53. package/src/components/SpaceListItem.tsx +1 -3
  54. package/src/panels/IdentityPanel/IdentityPanel.tsx +16 -5
  55. package/src/panels/JoinPanel/steps/IdentityAdded.tsx +6 -4
  56. package/src/translations/locales/en-US.ts +5 -5
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/shell",
3
- "version": "0.8.1-staging.5be625a",
3
+ "version": "0.8.1-staging.97aedb1",
4
4
  "description": "DXOS’s OS experiences",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,8 +10,8 @@
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
- "default": "./dist/bundle/shell.js",
14
- "types": "./dist/types/src/index.d.ts"
13
+ "types": "./dist/types/src/index.d.ts",
14
+ "default": "./dist/bundle/shell.js"
15
15
  },
16
16
  "./style.css": "./dist/bundle/style.css",
17
17
  "./react": {
@@ -57,19 +57,19 @@
57
57
  "react-qr-rounded": "^1.0.0",
58
58
  "url-join": "^5.0.0",
59
59
  "xstate": "^4.37.0",
60
- "@dxos/debug": "0.8.1-staging.5be625a",
61
- "@dxos/client-protocol": "0.8.1-staging.5be625a",
62
- "@dxos/client-services": "0.8.1-staging.5be625a",
63
- "@dxos/display-name": "0.8.1-staging.5be625a",
64
- "@dxos/invariant": "0.8.1-staging.5be625a",
65
- "@dxos/async": "0.8.1-staging.5be625a",
66
- "@dxos/log": "0.8.1-staging.5be625a",
67
- "@dxos/protocols": "0.8.1-staging.5be625a",
68
- "@dxos/react-ui-types": "0.8.1-staging.5be625a",
69
- "@dxos/react-ui-pickers": "0.8.1-staging.5be625a",
70
- "@dxos/rpc": "0.8.1-staging.5be625a",
71
- "@dxos/rpc-tunnel": "0.8.1-staging.5be625a",
72
- "@dxos/util": "0.8.1-staging.5be625a"
60
+ "@dxos/async": "0.8.1-staging.97aedb1",
61
+ "@dxos/client-services": "0.8.1-staging.97aedb1",
62
+ "@dxos/debug": "0.8.1-staging.97aedb1",
63
+ "@dxos/display-name": "0.8.1-staging.97aedb1",
64
+ "@dxos/invariant": "0.8.1-staging.97aedb1",
65
+ "@dxos/protocols": "0.8.1-staging.97aedb1",
66
+ "@dxos/log": "0.8.1-staging.97aedb1",
67
+ "@dxos/client-protocol": "0.8.1-staging.97aedb1",
68
+ "@dxos/react-ui-pickers": "0.8.1-staging.97aedb1",
69
+ "@dxos/react-ui-types": "0.8.1-staging.97aedb1",
70
+ "@dxos/rpc-tunnel": "0.8.1-staging.97aedb1",
71
+ "@dxos/util": "0.8.1-staging.97aedb1",
72
+ "@dxos/rpc": "0.8.1-staging.97aedb1"
73
73
  },
74
74
  "devDependencies": {
75
75
  "@phosphor-icons/react": "^2.1.5",
@@ -79,25 +79,25 @@
79
79
  "react": "~18.2.0",
80
80
  "react-dom": "~18.2.0",
81
81
  "vite": "5.4.7",
82
- "@dxos/config": "0.8.1-staging.5be625a",
83
- "@dxos/protocols": "0.8.1-staging.5be625a",
84
- "@dxos/random": "0.8.1-staging.5be625a",
85
- "@dxos/react-client": "0.8.1-staging.5be625a",
86
- "@dxos/react-hooks": "0.8.1-staging.5be625a",
87
- "@dxos/react-ui": "0.8.1-staging.5be625a",
88
- "@dxos/react-ui-theme": "0.8.1-staging.5be625a",
89
- "@dxos/storybook-utils": "0.8.1-staging.5be625a",
90
- "@dxos/test-utils": "0.8.1-staging.5be625a"
82
+ "@dxos/config": "0.8.1-staging.97aedb1",
83
+ "@dxos/protocols": "0.8.1-staging.97aedb1",
84
+ "@dxos/react-hooks": "0.8.1-staging.97aedb1",
85
+ "@dxos/random": "0.8.1-staging.97aedb1",
86
+ "@dxos/react-client": "0.8.1-staging.97aedb1",
87
+ "@dxos/react-ui": "0.8.1-staging.97aedb1",
88
+ "@dxos/react-ui-theme": "0.8.1-staging.97aedb1",
89
+ "@dxos/test-utils": "0.8.1-staging.97aedb1",
90
+ "@dxos/storybook-utils": "0.8.1-staging.97aedb1"
91
91
  },
92
92
  "peerDependencies": {
93
93
  "react": "~18.2.0",
94
94
  "react-dom": "~18.2.0",
95
- "@dxos/react-client": "0.8.1-staging.5be625a"
95
+ "@dxos/react-client": "0.8.1-staging.97aedb1"
96
96
  },
97
97
  "optionalDependencies": {
98
98
  "@phosphor-icons/react": "^2.1.5",
99
- "@dxos/react-ui": "0.8.1-staging.5be625a",
100
- "@dxos/react-ui-theme": "0.8.1-staging.5be625a"
99
+ "@dxos/react-ui": "0.8.1-staging.97aedb1",
100
+ "@dxos/react-ui-theme": "0.8.1-staging.97aedb1"
101
101
  },
102
102
  "publishConfig": {
103
103
  "access": "public"
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { ArrowsClockwise, Database, Plus, Power } from '@phosphor-icons/react';
5
+ import { ArrowsClockwise, Plus, Power } from '@phosphor-icons/react';
6
6
  import React from 'react';
7
7
 
8
8
  import { Avatar, Button, Link, Tooltip, Trans, useTranslation } from '@dxos/react-ui';
@@ -36,17 +36,13 @@ export const AgentConfig = ({
36
36
  className='mlb-2 flex gap-2 items-center'
37
37
  aria-describedby='devices-panel.create-agent.description'
38
38
  >
39
- <Avatar.Root status={agentStatus === 'created' ? 'warning' : 'inactive'} variant='square'>
40
- <Avatar.Frame classNames='place-self-center'>
41
- <Database
42
- weight='duotone'
43
- width={24}
44
- height={24}
45
- x={8}
46
- y={8}
47
- {...(agentStatus !== 'created' && { className: 'opacity-50' })}
48
- />
49
- </Avatar.Frame>
39
+ <Avatar.Root>
40
+ <Avatar.Content
41
+ status={agentStatus === 'created' ? 'warning' : 'inactive'}
42
+ variant='square'
43
+ classNames={['place-self-center', agentStatus !== 'created' && 'opactiy-50']}
44
+ icon='ph--database--duotone'
45
+ />
50
46
  <Avatar.Label classNames='flex-1 text-sm truncate'>
51
47
  {t(
52
48
  agentStatus === 'created'
@@ -21,7 +21,7 @@ export const DeviceList = ({
21
21
  onClickRecover,
22
22
  onClickJoinExisting,
23
23
  onAgentDestroy,
24
- }: DeviceListProps & Pick<AgentFormProps, 'onAgentDestroy'>) => {
24
+ }: DeviceListProps & Partial<Pick<AgentFormProps, 'onAgentDestroy'>>) => {
25
25
  const { t } = useTranslation('os');
26
26
  return (
27
27
  <div role='none' className='p-1'>
@@ -2,19 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import {
6
- type IconProps,
7
- Compass,
8
- Desktop,
9
- DeviceMobile,
10
- Devices,
11
- DotsThree,
12
- ShareFat,
13
- Power,
14
- Robot,
15
- Database,
16
- FirstAidKit,
17
- } from '@phosphor-icons/react';
5
+ import { DotsThree, ShareFat, Power, FirstAidKit } from '@phosphor-icons/react';
18
6
  import React, { type ComponentPropsWithoutRef, forwardRef } from 'react';
19
7
 
20
8
  import { generateName } from '@dxos/display-name';
@@ -35,17 +23,11 @@ import { keyToFallback } from '@dxos/util';
35
23
 
36
24
  import { type AgentFormProps, type DeviceListItemProps } from './DeviceListProps';
37
25
 
38
- const iconProps: IconProps = {
39
- weight: 'duotone',
40
- width: 24,
41
- height: 24,
42
- x: 8,
43
- y: 8,
44
- };
45
-
46
26
  export const DeviceListItem = forwardRef<
47
27
  HTMLLIElement,
48
- ThemedClassName<ComponentPropsWithoutRef<'li'>> & DeviceListItemProps & Pick<AgentFormProps, 'onAgentDestroy'>
28
+ ThemedClassName<ComponentPropsWithoutRef<'li'>> &
29
+ DeviceListItemProps &
30
+ Partial<Pick<AgentFormProps, 'onAgentDestroy'>>
49
31
  >(
50
32
  (
51
33
  {
@@ -77,37 +59,35 @@ export const DeviceListItem = forwardRef<
77
59
  labelId={labelId}
78
60
  ref={forwardedRef}
79
61
  >
80
- <Avatar.Root
81
- status={
82
- isCurrent && connectionState === ConnectionState.OFFLINE
83
- ? 'error'
84
- : device.presence === Device.PresenceState.ONLINE
85
- ? 'active'
86
- : 'inactive'
87
- }
88
- labelId={labelId}
89
- hue={fallbackValue.hue}
90
- variant='square'
91
- >
92
- <Avatar.Frame classNames='place-self-center'>
93
- {device.profile?.type ? (
94
- device.profile.type === DeviceType.AGENT_MANAGED ? (
95
- <Database {...iconProps} />
96
- ) : device.profile.type === DeviceType.BROWSER ? (
97
- <Compass {...iconProps} />
98
- ) : device.profile.type === DeviceType.NATIVE ? (
99
- <Desktop {...iconProps} />
100
- ) : [DeviceType.AGENT, DeviceType.AGENT_MANAGED].includes(device.profile.type) ? (
101
- <Robot {...iconProps} />
102
- ) : device.profile.type === DeviceType.MOBILE ? (
103
- <DeviceMobile {...iconProps} />
104
- ) : (
105
- <Devices {...iconProps} />
106
- )
107
- ) : (
108
- <Avatar.Fallback text={fallbackValue.emoji} />
109
- )}
110
- </Avatar.Frame>
62
+ <Avatar.Root labelId={labelId}>
63
+ <Avatar.Content
64
+ status={
65
+ isCurrent && connectionState === ConnectionState.OFFLINE
66
+ ? 'error'
67
+ : device.presence === Device.PresenceState.ONLINE
68
+ ? 'active'
69
+ : 'inactive'
70
+ }
71
+ hue={fallbackValue.hue}
72
+ variant='square'
73
+ classNames='place-self-center'
74
+ {...(device.profile?.type
75
+ ? {
76
+ icon:
77
+ device.profile.type === DeviceType.AGENT_MANAGED
78
+ ? 'ph--database--regular'
79
+ : device.profile.type === DeviceType.BROWSER
80
+ ? 'ph--compass--regular'
81
+ : device.profile.type === DeviceType.NATIVE
82
+ ? 'ph--desktop--regular'
83
+ : [DeviceType.AGENT, DeviceType.AGENT_MANAGED].includes(device.profile.type)
84
+ ? 'ph--robot--regular'
85
+ : device.profile.type === DeviceType.MOBILE
86
+ ? 'ph--device-mobile--regular'
87
+ : 'ph--devices--regular',
88
+ }
89
+ : { fallback: fallbackValue.emoji })}
90
+ />
111
91
  <Avatar.Label classNames='flex-1 text-sm truncate'>{displayName}</Avatar.Label>
112
92
  {isCurrent && <Tag color='primary'>{t('current device tag label')}</Tag>}
113
93
  {/* TODO(wittjosiah): EDGE agents cannot current be turned off. */}
@@ -131,7 +111,7 @@ export const DeviceListItem = forwardRef<
131
111
  </Tooltip.Portal>
132
112
  </Tooltip.Root>
133
113
  )} */}
134
- {device.kind === DeviceKind.CURRENT && (
114
+ {device.kind === DeviceKind.CURRENT && (onClickJoinExisting || onClickRecover || onClickReset) && (
135
115
  <DropdownMenu.Root>
136
116
  <DropdownMenu.Trigger asChild>
137
117
  <Button
@@ -149,20 +129,27 @@ export const DeviceListItem = forwardRef<
149
129
  {/* <PencilSimpleLine className={getSize(5)} /> */}
150
130
  {/* {t('edit device label')} */}
151
131
  {/* </DropdownMenu.Item> */}
152
- <DropdownMenu.Item data-testid='device-list-item-current.join-existing' onClick={onClickJoinExisting}>
153
- <ShareFat className={getSize(5)} />
154
- {t('choose join new identity label')}
155
- </DropdownMenu.Item>
132
+ {onClickJoinExisting && (
133
+ <DropdownMenu.Item
134
+ data-testid='device-list-item-current.join-existing'
135
+ onClick={onClickJoinExisting}
136
+ >
137
+ <ShareFat className={getSize(5)} />
138
+ {t('choose join new identity label')}
139
+ </DropdownMenu.Item>
140
+ )}
156
141
  {onClickRecover && (
157
142
  <DropdownMenu.Item data-testid='device-list-item-current.recover' onClick={onClickRecover}>
158
143
  <FirstAidKit className={getSize(5)} />
159
144
  {t('choose recover identity label')}
160
145
  </DropdownMenu.Item>
161
146
  )}
162
- <DropdownMenu.Item data-testid='device-list-item-current.reset' onClick={onClickReset}>
163
- <Power className={getSize(5)} />
164
- {t('reset device label')}
165
- </DropdownMenu.Item>
147
+ {onClickReset && (
148
+ <DropdownMenu.Item data-testid='device-list-item-current.reset' onClick={onClickReset}>
149
+ <Power className={getSize(5)} />
150
+ {t('reset device label')}
151
+ </DropdownMenu.Item>
152
+ )}
166
153
  </DropdownMenu.Viewport>
167
154
  </DropdownMenu.Content>
168
155
  </DropdownMenu.Root>
@@ -3,4 +3,5 @@
3
3
  //
4
4
 
5
5
  export * from './DeviceList';
6
+ export * from './DeviceListItem';
6
7
  export * from './DeviceListProps';
@@ -33,14 +33,13 @@ export const IdentityListItem = forwardRef<
33
33
  labelId={labelId}
34
34
  ref={forwardedRef}
35
35
  >
36
- <Avatar.Root
37
- status={presence === SpaceMember.PresenceState.ONLINE ? 'active' : 'inactive'}
38
- labelId={labelId}
39
- hue={identity.profile?.data?.hue || fallbackValue.hue}
40
- >
41
- <Avatar.Frame classNames='place-self-center'>
42
- <Avatar.Fallback text={identity.profile?.data?.emoji || fallbackValue.emoji} />
43
- </Avatar.Frame>
36
+ <Avatar.Root labelId={labelId}>
37
+ <Avatar.Content
38
+ status={presence === SpaceMember.PresenceState.ONLINE ? 'active' : 'inactive'}
39
+ hue={identity.profile?.data?.hue || fallbackValue.hue}
40
+ fallback={identity.profile?.data?.emoji || fallbackValue.emoji}
41
+ classNames='place-self-center'
42
+ />
44
43
  <Avatar.Label classNames='text-sm truncate pli-2'>{displayName}</Avatar.Label>
45
44
  </Avatar.Root>
46
45
  </ListItem.Root>
@@ -18,9 +18,9 @@ import {
18
18
  useTranslation,
19
19
  Avatar,
20
20
  useThemeContext,
21
- type AvatarRootProps,
22
21
  Tooltip,
23
22
  type ThemedClassName,
23
+ type AvatarContentProps,
24
24
  } from '@dxos/react-ui';
25
25
  import { focusRing, getSize, mx } from '@dxos/react-ui-theme';
26
26
  import { hexToEmoji } from '@dxos/util';
@@ -44,13 +44,13 @@ export const InvitationListItem = (props: InvitationListItemProps) => {
44
44
  return <InvitationListItemImpl {...props} invitationStatus={invitationStatus} />;
45
45
  };
46
46
 
47
- const avatarProps: Pick<AvatarRootProps, 'size' | 'variant'> = { size: 10, variant: 'circle' };
47
+ const avatarProps: Pick<AvatarContentProps, 'size' | 'variant'> = { size: 10, variant: 'circle' };
48
48
 
49
49
  const AvatarStackEffect = ({
50
50
  animation,
51
51
  status,
52
52
  reverseEffects,
53
- }: Pick<AvatarRootProps, 'status' | 'animation'> & Pick<InvitationListItemProps, 'reverseEffects'>) => {
53
+ }: Pick<AvatarContentProps, 'status' | 'animation'> & Pick<InvitationListItemProps, 'reverseEffects'>) => {
54
54
  const { tx } = useThemeContext();
55
55
  return (
56
56
  <>
@@ -154,11 +154,16 @@ export const InvitationListItemImpl = ({
154
154
  <AvatarStackEffect status={avatarStatus} animation={avatarAnimation} reverseEffects={reverseEffects} />
155
155
  )}
156
156
  <Tooltip.Root>
157
- <Avatar.Root {...avatarProps} animation={avatarAnimation} status={avatarStatus}>
157
+ <Avatar.Root>
158
158
  <Tooltip.Trigger asChild>
159
- <Avatar.Frame tabIndex={0} classNames={[focusRing, 'relative rounded-full place-self-center']}>
160
- <Avatar.Fallback text={hexToEmoji(invitationId)} />
161
- </Avatar.Frame>
159
+ <Avatar.Content
160
+ {...avatarProps}
161
+ animation={avatarAnimation}
162
+ status={avatarStatus}
163
+ fallback={hexToEmoji(invitationId)}
164
+ tabIndex={0}
165
+ classNames={[focusRing, 'relative rounded-full place-self-center']}
166
+ />
162
167
  </Tooltip.Trigger>
163
168
  </Avatar.Root>
164
169
  <Tooltip.Portal>
@@ -23,9 +23,7 @@ export const SpaceListItem = forwardRef(
23
23
  data-testid='space-list-item'
24
24
  >
25
25
  <Avatar.Root labelId={labelId}>
26
- <Avatar.Frame>
27
- <Avatar.Fallback text={fallbackValue} />
28
- </Avatar.Frame>
26
+ <Avatar.Content fallback={fallbackValue} />
29
27
  <Avatar.Label classNames='text-sm truncate'>{displayName}</Avatar.Label>
30
28
  </Avatar.Root>
31
29
  </li>
@@ -81,11 +81,16 @@ const IdentityHeading = ({
81
81
 
82
82
  return (
83
83
  <Heading titleId={titleId} title={title} corner={<CloseButton onDone={onDone} />}>
84
- <Avatar.Root size={16} variant='circle' status={isConnected ? 'active' : 'error'} hue={hue || fallbackValue.hue}>
84
+ <Avatar.Root>
85
85
  <Toolbar.Root classNames='flex justify-center'>
86
- <Avatar.Frame classNames='relative z-[2] -mli-4 chromatic-ignore'>
87
- <Avatar.Fallback text={emoji || fallbackValue.emoji} />
88
- </Avatar.Frame>
86
+ <Avatar.Content
87
+ size={16}
88
+ variant='circle'
89
+ status={isConnected ? 'active' : 'error'}
90
+ hue={hue || fallbackValue.hue}
91
+ fallback={emoji || fallbackValue.emoji}
92
+ classNames='relative z-[2] -mli-4 chromatic-ignore'
93
+ />
89
94
  </Toolbar.Root>
90
95
 
91
96
  <Avatar.Label classNames='sr-only' data-testid='identityHeading.displayName'>
@@ -106,7 +111,13 @@ const IdentityHeading = ({
106
111
 
107
112
  <Toolbar.Root classNames='flex justify-center items-center gap-1 pt-3'>
108
113
  <EmojiPickerToolbarButton emoji={emoji} onChangeEmoji={setEmoji} classNames='bs-[--rail-action]' />
109
- <HuePicker value={hue} onChange={setHue} onReset={() => setHue(undefined)} classNames='bs-[--rail-action]' />
114
+ <HuePicker
115
+ value={hue}
116
+ onChange={setHue}
117
+ onReset={() => setHue(undefined)}
118
+ classNames='bs-[--rail-action]'
119
+ rootVariant='toolbar-button'
120
+ />
110
121
  <Clipboard.IconButton
111
122
  classNames='bs-[--rail-action]'
112
123
  data-testid='update-profile-form-copy-key'
@@ -43,10 +43,12 @@ export const IdentityAdded = (props: IdentityAddedProps) => {
43
43
  <>
44
44
  <StepHeading>{t('identity added label')}</StepHeading>
45
45
  <div role='none' className='grow flex flex-col items-center justify-center text-center gap-2'>
46
- <Avatar.Root status='active' labelId={labelId} hue={addedIdentity?.profile?.data?.hue || fallbackValue.hue}>
47
- <Avatar.Frame>
48
- <Avatar.Fallback text={addedIdentity?.profile?.data?.emoji || fallbackValue.emoji} />
49
- </Avatar.Frame>
46
+ <Avatar.Root labelId={labelId}>
47
+ <Avatar.Content
48
+ status='active'
49
+ hue={addedIdentity?.profile?.data?.hue || fallbackValue.hue}
50
+ fallback={addedIdentity?.profile?.data?.emoji || fallbackValue.emoji}
51
+ />
50
52
  <Avatar.Label classNames={mx('text-lg truncate', !addedIdentity?.profile?.displayName && 'font-mono')}>
51
53
  {displayName}
52
54
  </Avatar.Label>
@@ -87,15 +87,15 @@ export const os = {
87
87
  'device list heading': 'Devices',
88
88
  'space member list heading': 'Members',
89
89
  'space panel heading': 'Space membership',
90
- 'auth code message': 'Enter the following auth code on the joining device.',
91
- 'auth other device emoji message': 'Be sure the other device shows the following symbol:',
90
+ 'auth code message': 'Enter the following auth code on the joining device. Click the code to copy it.',
91
+ 'auth other device emoji message': 'Be sure the other device shows the following emoji.',
92
92
  'display name input label': 'Display name',
93
93
  'display name input placeholder': 'Enter a display name',
94
- 'invite one label': 'Single-use invitation',
94
+ 'invite one label': 'Create single-use invitation',
95
95
  'invite one description': 'Only one user may join.',
96
96
  'invite one qr label': 'Single-use invitation',
97
97
  'invite one list item label': 'Active single-use invitation',
98
- 'invite many label': 'Multi-use invitation',
98
+ 'invite many label': 'Create multi-use invitation',
99
99
  'invite many description': 'Anyone with the link can join.',
100
100
  'invite many qr label': 'Multi-use invitation',
101
101
  'invite many list item label': 'Active multi-use invitation',
@@ -111,7 +111,7 @@ export const os = {
111
111
  'confirmation placeholder': 'Enter {{confirmationValue}} to continue.',
112
112
  'sign out chooser title': 'Danger zone',
113
113
  'sign out chooser message': 'Proceeding with the action below will erase all data on this device.',
114
- 'join new identity label': 'Join a new identity',
114
+ 'join new identity label': 'Join an existing identity',
115
115
  'reset device label': 'Reset storage',
116
116
  'reset device confirm message': 'Are you sure you want to reset your device? All data will be lost.',
117
117
  'emoji and color label': 'Emoji and color',