@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
@@ -4,7 +4,7 @@ import {
4
4
  } from "./chunk-HSLMI22Q.mjs";
5
5
 
6
6
  // packages/sdk/shell/src/components/AgentConfig.tsx
7
- import { ArrowsClockwise, Database, Plus, Power } from "@phosphor-icons/react";
7
+ import { ArrowsClockwise, Plus, Power } from "@phosphor-icons/react";
8
8
  import React from "react";
9
9
  import { Avatar, Button, Link, Tooltip, Trans, useTranslation } from "@dxos/react-ui";
10
10
  import { descriptionText, getSize, mx, valenceColorText } from "@dxos/react-ui-theme";
@@ -22,21 +22,15 @@ var AgentConfig = ({ agentStatus, validationMessage, onAgentDestroy, onAgentCrea
22
22
  role: "group",
23
23
  className: "mlb-2 flex gap-2 items-center",
24
24
  "aria-describedby": "devices-panel.create-agent.description"
25
- }, /* @__PURE__ */ React.createElement(Avatar.Root, {
25
+ }, /* @__PURE__ */ React.createElement(Avatar.Root, null, /* @__PURE__ */ React.createElement(Avatar.Content, {
26
26
  status: agentStatus === "created" ? "warning" : "inactive",
27
- variant: "square"
28
- }, /* @__PURE__ */ React.createElement(Avatar.Frame, {
29
- classNames: "place-self-center"
30
- }, /* @__PURE__ */ React.createElement(Database, {
31
- weight: "duotone",
32
- width: 24,
33
- height: 24,
34
- x: 8,
35
- y: 8,
36
- ...agentStatus !== "created" && {
37
- className: "opacity-50"
38
- }
39
- })), /* @__PURE__ */ React.createElement(Avatar.Label, {
27
+ variant: "square",
28
+ classNames: [
29
+ "place-self-center",
30
+ agentStatus !== "created" && "opactiy-50"
31
+ ],
32
+ icon: "ph--database--duotone"
33
+ }), /* @__PURE__ */ React.createElement(Avatar.Label, {
40
34
  classNames: "flex-1 text-sm truncate"
41
35
  }, t(agentStatus === "created" ? "agent requested label" : agentStatus === "creating" ? "creating agent label" : agentStatus === "destroying" ? "destroying agent label" : "getting agent label"))), agentStatus === "created" && /* @__PURE__ */ React.createElement(Tooltip.Root, null, /* @__PURE__ */ React.createElement(Tooltip.Trigger, {
42
36
  asChild: true
@@ -155,14 +149,13 @@ var IdentityListItem = /* @__PURE__ */ forwardRef(({ identity, presence, onClick
155
149
  labelId,
156
150
  ref: forwardedRef
157
151
  }, /* @__PURE__ */ React3.createElement(Avatar2.Root, {
152
+ labelId
153
+ }, /* @__PURE__ */ React3.createElement(Avatar2.Content, {
158
154
  status: presence === SpaceMember.PresenceState.ONLINE ? "active" : "inactive",
159
- labelId,
160
- hue: identity.profile?.data?.hue || fallbackValue.hue
161
- }, /* @__PURE__ */ React3.createElement(Avatar2.Frame, {
155
+ hue: identity.profile?.data?.hue || fallbackValue.hue,
156
+ fallback: identity.profile?.data?.emoji || fallbackValue.emoji,
162
157
  classNames: "place-self-center"
163
- }, /* @__PURE__ */ React3.createElement(Avatar2.Fallback, {
164
- text: identity.profile?.data?.emoji || fallbackValue.emoji
165
- })), /* @__PURE__ */ React3.createElement(Avatar2.Label, {
158
+ }), /* @__PURE__ */ React3.createElement(Avatar2.Label, {
166
159
  classNames: "text-sm truncate pli-2"
167
160
  }, displayName)));
168
161
  });
@@ -212,7 +205,7 @@ import { Button as Button3, List as List2, useTranslation as useTranslation4 } f
212
205
  import { descriptionText as descriptionText4, getSize as getSize3, mx as mx5 } from "@dxos/react-ui-theme";
213
206
 
214
207
  // packages/sdk/shell/src/components/DeviceList/DeviceListItem.tsx
215
- import { Compass, Desktop, DeviceMobile, Devices, DotsThree, ShareFat, Power as Power2, Robot, Database as Database2, FirstAidKit } from "@phosphor-icons/react";
208
+ import { DotsThree, ShareFat, Power as Power2, FirstAidKit } from "@phosphor-icons/react";
216
209
  import React5, { forwardRef as forwardRef2 } from "react";
217
210
  import { generateName as generateName2 } from "@dxos/display-name";
218
211
  import { Device, DeviceType, DeviceKind } from "@dxos/react-client/halo";
@@ -220,13 +213,6 @@ import { ConnectionState } from "@dxos/react-client/mesh";
220
213
  import { ListItem as ListItem2, Avatar as Avatar3, useId as useId3, Tag, useTranslation as useTranslation3, DropdownMenu, Button as Button2 } from "@dxos/react-ui";
221
214
  import { getSize as getSize2 } from "@dxos/react-ui-theme";
222
215
  import { keyToFallback as keyToFallback2 } from "@dxos/util";
223
- var iconProps = {
224
- weight: "duotone",
225
- width: 24,
226
- height: 24,
227
- x: 8,
228
- y: 8
229
- };
230
216
  var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickEdit, onClickReset, onClickRecover, onClickJoinExisting, classNames, connectionState, onAgentDestroy: _, ...props }, forwardedRef) => {
231
217
  const { t } = useTranslation3("os");
232
218
  const fallbackValue = keyToFallback2(device.deviceKey);
@@ -246,22 +232,25 @@ var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickE
246
232
  labelId,
247
233
  ref: forwardedRef
248
234
  }, /* @__PURE__ */ React5.createElement(Avatar3.Root, {
235
+ labelId
236
+ }, /* @__PURE__ */ React5.createElement(Avatar3.Content, {
249
237
  status: isCurrent && connectionState === ConnectionState.OFFLINE ? "error" : device.presence === Device.PresenceState.ONLINE ? "active" : "inactive",
250
- labelId,
251
238
  hue: fallbackValue.hue,
252
- variant: "square"
253
- }, /* @__PURE__ */ React5.createElement(Avatar3.Frame, {
254
- classNames: "place-self-center"
255
- }, device.profile?.type ? device.profile.type === DeviceType.AGENT_MANAGED ? /* @__PURE__ */ React5.createElement(Database2, iconProps) : device.profile.type === DeviceType.BROWSER ? /* @__PURE__ */ React5.createElement(Compass, iconProps) : device.profile.type === DeviceType.NATIVE ? /* @__PURE__ */ React5.createElement(Desktop, iconProps) : [
256
- DeviceType.AGENT,
257
- DeviceType.AGENT_MANAGED
258
- ].includes(device.profile.type) ? /* @__PURE__ */ React5.createElement(Robot, iconProps) : device.profile.type === DeviceType.MOBILE ? /* @__PURE__ */ React5.createElement(DeviceMobile, iconProps) : /* @__PURE__ */ React5.createElement(Devices, iconProps) : /* @__PURE__ */ React5.createElement(Avatar3.Fallback, {
259
- text: fallbackValue.emoji
260
- })), /* @__PURE__ */ React5.createElement(Avatar3.Label, {
239
+ variant: "square",
240
+ classNames: "place-self-center",
241
+ ...device.profile?.type ? {
242
+ icon: device.profile.type === DeviceType.AGENT_MANAGED ? "ph--database--regular" : device.profile.type === DeviceType.BROWSER ? "ph--compass--regular" : device.profile.type === DeviceType.NATIVE ? "ph--desktop--regular" : [
243
+ DeviceType.AGENT,
244
+ DeviceType.AGENT_MANAGED
245
+ ].includes(device.profile.type) ? "ph--robot--regular" : device.profile.type === DeviceType.MOBILE ? "ph--device-mobile--regular" : "ph--devices--regular"
246
+ } : {
247
+ fallback: fallbackValue.emoji
248
+ }
249
+ }), /* @__PURE__ */ React5.createElement(Avatar3.Label, {
261
250
  classNames: "flex-1 text-sm truncate"
262
251
  }, displayName), isCurrent && /* @__PURE__ */ React5.createElement(Tag, {
263
252
  color: "primary"
264
- }, t("current device tag label")), device.kind === DeviceKind.CURRENT && /* @__PURE__ */ React5.createElement(DropdownMenu.Root, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Trigger, {
253
+ }, t("current device tag label")), device.kind === DeviceKind.CURRENT && (onClickJoinExisting || onClickRecover || onClickReset) && /* @__PURE__ */ React5.createElement(DropdownMenu.Root, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Trigger, {
265
254
  asChild: true
266
255
  }, /* @__PURE__ */ React5.createElement(Button2, {
267
256
  variant: "ghost",
@@ -271,7 +260,7 @@ var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickE
271
260
  className: "sr-only"
272
261
  }, t("more options label")), /* @__PURE__ */ React5.createElement(DotsThree, {
273
262
  className: getSize2(5)
274
- }))), /* @__PURE__ */ React5.createElement(DropdownMenu.Content, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
263
+ }))), /* @__PURE__ */ React5.createElement(DropdownMenu.Content, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Viewport, null, onClickJoinExisting && /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
275
264
  "data-testid": "device-list-item-current.join-existing",
276
265
  onClick: onClickJoinExisting
277
266
  }, /* @__PURE__ */ React5.createElement(ShareFat, {
@@ -281,7 +270,7 @@ var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickE
281
270
  onClick: onClickRecover
282
271
  }, /* @__PURE__ */ React5.createElement(FirstAidKit, {
283
272
  className: getSize2(5)
284
- }), t("choose recover identity label")), /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
273
+ }), t("choose recover identity label")), onClickReset && /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
285
274
  "data-testid": "device-list-item-current.reset",
286
275
  onClick: onClickReset
287
276
  }, /* @__PURE__ */ React5.createElement(Power2, {
@@ -463,21 +452,19 @@ var InvitationListItemImpl = ({ invitation, invitationStatus: propsInvitationSta
463
452
  status: avatarStatus,
464
453
  animation: avatarAnimation,
465
454
  reverseEffects
466
- }), /* @__PURE__ */ React8.createElement(Tooltip2.Root, null, /* @__PURE__ */ React8.createElement(Avatar4.Root, {
455
+ }), /* @__PURE__ */ React8.createElement(Tooltip2.Root, null, /* @__PURE__ */ React8.createElement(Avatar4.Root, null, /* @__PURE__ */ React8.createElement(Tooltip2.Trigger, {
456
+ asChild: true
457
+ }, /* @__PURE__ */ React8.createElement(Avatar4.Content, {
467
458
  ...avatarProps,
468
459
  animation: avatarAnimation,
469
- status: avatarStatus
470
- }, /* @__PURE__ */ React8.createElement(Tooltip2.Trigger, {
471
- asChild: true
472
- }, /* @__PURE__ */ React8.createElement(Avatar4.Frame, {
460
+ status: avatarStatus,
461
+ fallback: hexToEmoji(invitationId),
473
462
  tabIndex: 0,
474
463
  classNames: [
475
464
  focusRing,
476
465
  "relative rounded-full place-self-center"
477
466
  ]
478
- }, /* @__PURE__ */ React8.createElement(Avatar4.Fallback, {
479
- text: hexToEmoji(invitationId)
480
- })))), /* @__PURE__ */ React8.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React8.createElement(Tooltip2.Content, {
467
+ }))), /* @__PURE__ */ React8.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React8.createElement(Tooltip2.Content, {
481
468
  side: "left"
482
469
  }, t(multiUse ? "invite many qr label" : "invite one qr label"), /* @__PURE__ */ React8.createElement(Tooltip2.Arrow, null)))), showShare && invitationUrl ? /* @__PURE__ */ React8.createElement(Tooltip2.Root, null, /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(Tooltip2.Trigger, {
483
470
  asChild: true
@@ -863,9 +850,9 @@ var SpaceListItem = /* @__PURE__ */ forwardRef8(({ space, onClick }, ref) => {
863
850
  "data-testid": "space-list-item"
864
851
  }, /* @__PURE__ */ React20.createElement(Avatar5.Root, {
865
852
  labelId
866
- }, /* @__PURE__ */ React20.createElement(Avatar5.Frame, null, /* @__PURE__ */ React20.createElement(Avatar5.Fallback, {
867
- text: fallbackValue
868
- })), /* @__PURE__ */ React20.createElement(Avatar5.Label, {
853
+ }, /* @__PURE__ */ React20.createElement(Avatar5.Content, {
854
+ fallback: fallbackValue
855
+ }), /* @__PURE__ */ React20.createElement(Avatar5.Label, {
869
856
  classNames: "text-sm truncate"
870
857
  }, displayName)));
871
858
  });
@@ -1559,18 +1546,16 @@ var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, conn
1559
1546
  corner: /* @__PURE__ */ React25.createElement(CloseButton, {
1560
1547
  onDone
1561
1548
  })
1562
- }, /* @__PURE__ */ React25.createElement(Avatar6.Root, {
1549
+ }, /* @__PURE__ */ React25.createElement(Avatar6.Root, null, /* @__PURE__ */ React25.createElement(Toolbar.Root, {
1550
+ classNames: "flex justify-center"
1551
+ }, /* @__PURE__ */ React25.createElement(Avatar6.Content, {
1563
1552
  size: 16,
1564
1553
  variant: "circle",
1565
1554
  status: isConnected ? "active" : "error",
1566
- hue: hue || fallbackValue.hue
1567
- }, /* @__PURE__ */ React25.createElement(Toolbar.Root, {
1568
- classNames: "flex justify-center"
1569
- }, /* @__PURE__ */ React25.createElement(Avatar6.Frame, {
1555
+ hue: hue || fallbackValue.hue,
1556
+ fallback: emoji || fallbackValue.emoji,
1570
1557
  classNames: "relative z-[2] -mli-4 chromatic-ignore"
1571
- }, /* @__PURE__ */ React25.createElement(Avatar6.Fallback, {
1572
- text: emoji || fallbackValue.emoji
1573
- }))), /* @__PURE__ */ React25.createElement(Avatar6.Label, {
1558
+ })), /* @__PURE__ */ React25.createElement(Avatar6.Label, {
1574
1559
  classNames: "sr-only",
1575
1560
  "data-testid": "identityHeading.displayName"
1576
1561
  }, identity.profile?.displayName ?? generateName3(identity.identityKey.toHex())), /* @__PURE__ */ React25.createElement(Input2.Root, null, /* @__PURE__ */ React25.createElement(Input2.Label, {
@@ -1592,7 +1577,8 @@ var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, conn
1592
1577
  value: hue,
1593
1578
  onChange: setHue,
1594
1579
  onReset: () => setHue(void 0),
1595
- classNames: "bs-[--rail-action]"
1580
+ classNames: "bs-[--rail-action]",
1581
+ rootVariant: "toolbar-button"
1596
1582
  }), /* @__PURE__ */ React25.createElement(Clipboard3.IconButton, {
1597
1583
  classNames: "bs-[--rail-action]",
1598
1584
  "data-testid": "update-profile-form-copy-key",
@@ -1718,7 +1704,7 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
1718
1704
  if (!identity) {
1719
1705
  log7.error("IdentityPanel rendered with no active identity.", void 0, {
1720
1706
  F: __dxlog_file6,
1721
- L: 272,
1707
+ L: 283,
1722
1708
  S: void 0,
1723
1709
  C: (f, a) => f(...a)
1724
1710
  });
@@ -1735,7 +1721,7 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
1735
1721
  const subscription = identityService.subscribe((state) => {
1736
1722
  log7("[state]", state, {
1737
1723
  F: __dxlog_file6,
1738
- L: 285,
1724
+ L: 296,
1739
1725
  S: void 0,
1740
1726
  C: (f, a) => f(...a)
1741
1727
  });
@@ -2514,12 +2500,12 @@ var IdentityAdded = (props) => {
2514
2500
  role: "none",
2515
2501
  className: "grow flex flex-col items-center justify-center text-center gap-2"
2516
2502
  }, /* @__PURE__ */ React28.createElement(Avatar7.Root, {
2503
+ labelId
2504
+ }, /* @__PURE__ */ React28.createElement(Avatar7.Content, {
2517
2505
  status: "active",
2518
- labelId,
2519
- hue: addedIdentity?.profile?.data?.hue || fallbackValue.hue
2520
- }, /* @__PURE__ */ React28.createElement(Avatar7.Frame, null, /* @__PURE__ */ React28.createElement(Avatar7.Fallback, {
2521
- text: addedIdentity?.profile?.data?.emoji || fallbackValue.emoji
2522
- })), /* @__PURE__ */ React28.createElement(Avatar7.Label, {
2506
+ hue: addedIdentity?.profile?.data?.hue || fallbackValue.hue,
2507
+ fallback: addedIdentity?.profile?.data?.emoji || fallbackValue.emoji
2508
+ }), /* @__PURE__ */ React28.createElement(Avatar7.Label, {
2523
2509
  classNames: mx21("text-lg truncate", !addedIdentity?.profile?.displayName && "font-mono")
2524
2510
  }, displayName))), /* @__PURE__ */ React28.createElement(Actions, null, mode === "halo-only" ? doneActionParent ? /* @__PURE__ */ cloneElement2(doneActionParent, {}, doneAction) : doneAction : /* @__PURE__ */ React28.createElement(Action, {
2525
2511
  variant: "primary",
@@ -4084,15 +4070,15 @@ var os = {
4084
4070
  "device list heading": "Devices",
4085
4071
  "space member list heading": "Members",
4086
4072
  "space panel heading": "Space membership",
4087
- "auth code message": "Enter the following auth code on the joining device.",
4088
- "auth other device emoji message": "Be sure the other device shows the following symbol:",
4073
+ "auth code message": "Enter the following auth code on the joining device. Click the code to copy\xA0it.",
4074
+ "auth other device emoji message": "Be sure the other device shows the following\xA0emoji.",
4089
4075
  "display name input label": "Display name",
4090
4076
  "display name input placeholder": "Enter a display name",
4091
- "invite one label": "Single-use invitation",
4077
+ "invite one label": "Create single-use invitation",
4092
4078
  "invite one description": "Only one user may join.",
4093
4079
  "invite one qr label": "Single-use invitation",
4094
4080
  "invite one list item label": "Active single-use invitation",
4095
- "invite many label": "Multi-use invitation",
4081
+ "invite many label": "Create multi-use invitation",
4096
4082
  "invite many description": "Anyone with the link can join.",
4097
4083
  "invite many qr label": "Multi-use invitation",
4098
4084
  "invite many list item label": "Active multi-use invitation",
@@ -4106,7 +4092,7 @@ var os = {
4106
4092
  "confirmation placeholder": "Enter {{confirmationValue}} to continue.",
4107
4093
  "sign out chooser title": "Danger zone",
4108
4094
  "sign out chooser message": "Proceeding with the action below will erase all data on this device.",
4109
- "join new identity label": "Join a new identity",
4095
+ "join new identity label": "Join an existing identity",
4110
4096
  "reset device label": "Reset storage",
4111
4097
  "reset device confirm message": "Are you sure you want to reset your device? All data will be lost.",
4112
4098
  "emoji and color label": "Emoji and color",
@@ -4387,6 +4373,7 @@ export {
4387
4373
  ConfirmReset,
4388
4374
  ConfirmResetImpl,
4389
4375
  DeviceList,
4376
+ DeviceListItem,
4390
4377
  Emoji,
4391
4378
  Heading,
4392
4379
  IdentityDialog,