@dxos/shell 0.6.13-staging.1e988a3 → 0.6.14-main.2b6a0f3

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 (124) hide show
  1. package/dist/bundle/shell.mjs +12070 -15401
  2. package/dist/bundle/shell.mjs.map +1 -1
  3. package/dist/bundle/shell.umd.js +87 -94
  4. package/dist/bundle/shell.umd.js.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 +551 -453
  8. package/dist/lib/browser/react.mjs.map +4 -4
  9. package/dist/lib/browser/testing/index.mjs +2 -7
  10. package/dist/lib/browser/testing/index.mjs.map +3 -3
  11. package/dist/types/src/components/CompoundButton/CompoundButton.stories.js +1 -1
  12. package/dist/types/src/components/CompoundButton/CompoundButton.stories.js.map +1 -1
  13. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts +0 -3
  14. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.d.ts.map +1 -1
  15. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js +1 -2
  16. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js.map +1 -1
  17. package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts +0 -3
  18. package/dist/types/src/components/InvitationList/InvitationList.stories.d.ts.map +1 -1
  19. package/dist/types/src/components/InvitationList/InvitationList.stories.js +1 -2
  20. package/dist/types/src/components/InvitationList/InvitationList.stories.js.map +1 -1
  21. package/dist/types/src/components/Panel/Panel.stories.d.ts +0 -3
  22. package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -1
  23. package/dist/types/src/components/Panel/Panel.stories.js +1 -2
  24. package/dist/types/src/components/Panel/Panel.stories.js.map +1 -1
  25. package/dist/types/src/components/Viewport/Viewport.stories.js +1 -1
  26. package/dist/types/src/components/Viewport/Viewport.stories.js.map +1 -1
  27. package/dist/types/src/composites/Shell/Shell.d.ts.map +1 -1
  28. package/dist/types/src/composites/Shell/Shell.js +4 -3
  29. package/dist/types/src/composites/Shell/Shell.js.map +1 -1
  30. package/dist/types/src/composites/Shell/run-shell.js +1 -1
  31. package/dist/types/src/composites/Shell/run-shell.js.map +1 -1
  32. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +1 -1
  33. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
  34. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts.map +1 -1
  35. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js +7 -2
  36. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js.map +1 -1
  37. package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts +4 -4
  38. package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts.map +1 -1
  39. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts +1 -1
  40. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.d.ts.map +1 -1
  41. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js +10 -108
  42. package/dist/types/src/panels/IdentityPanel/useAgentHandlers.js.map +1 -1
  43. package/dist/types/src/panels/IdentityPanel/useEdgeAgentsHandlers.d.ts +8 -0
  44. package/dist/types/src/panels/IdentityPanel/useEdgeAgentsHandlers.d.ts.map +1 -0
  45. package/dist/types/src/panels/IdentityPanel/useEdgeAgentsHandlers.js +84 -0
  46. package/dist/types/src/panels/IdentityPanel/useEdgeAgentsHandlers.js.map +1 -0
  47. package/dist/types/src/panels/IdentityPanel/useKubeAgentHandlers.d.ts +8 -0
  48. package/dist/types/src/panels/IdentityPanel/useKubeAgentHandlers.d.ts.map +1 -0
  49. package/dist/types/src/panels/IdentityPanel/useKubeAgentHandlers.js +119 -0
  50. package/dist/types/src/panels/IdentityPanel/useKubeAgentHandlers.js.map +1 -0
  51. package/dist/types/src/panels/JoinPanel/JoinPanel.d.ts.map +1 -1
  52. package/dist/types/src/panels/JoinPanel/JoinPanel.js +24 -16
  53. package/dist/types/src/panels/JoinPanel/JoinPanel.js.map +1 -1
  54. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts +3 -0
  55. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.d.ts.map +1 -1
  56. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.js +3 -2
  57. package/dist/types/src/panels/JoinPanel/JoinPanel.stories.js.map +1 -1
  58. package/dist/types/src/panels/JoinPanel/JoinPanelProps.d.ts +7 -3
  59. package/dist/types/src/panels/JoinPanel/JoinPanelProps.d.ts.map +1 -1
  60. package/dist/types/src/panels/JoinPanel/joinMachine.d.ts.map +1 -1
  61. package/dist/types/src/panels/JoinPanel/joinMachine.js +2 -0
  62. package/dist/types/src/panels/JoinPanel/joinMachine.js.map +1 -1
  63. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts +3 -1
  64. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.d.ts.map +1 -1
  65. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js +9 -6
  66. package/dist/types/src/panels/JoinPanel/steps/InvitationAuthenticator.js.map +1 -1
  67. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.d.ts.map +1 -1
  68. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js +8 -2
  69. package/dist/types/src/panels/JoinPanel/steps/InvitationInput.js.map +1 -1
  70. package/dist/types/src/panels/Panels.stories.js +1 -1
  71. package/dist/types/src/panels/Panels.stories.js.map +1 -1
  72. package/dist/types/src/panels/SpacePanel/SpacePanel.js +1 -1
  73. package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
  74. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js +1 -1
  75. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js.map +1 -1
  76. package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts +4 -4
  77. package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts.map +1 -1
  78. package/dist/types/src/playwright/invitations-manager.d.ts +1 -1
  79. package/dist/types/src/playwright/invitations-manager.d.ts.map +1 -1
  80. package/dist/types/src/playwright/invitations-manager.js +4 -10
  81. package/dist/types/src/playwright/invitations-manager.js.map +1 -1
  82. package/dist/types/src/playwright/invitations.spec.js +31 -32
  83. package/dist/types/src/playwright/invitations.spec.js.map +1 -1
  84. package/dist/types/src/playwright/playwright.config.d.ts +2 -2
  85. package/dist/types/src/playwright/playwright.config.d.ts.map +1 -1
  86. package/dist/types/src/playwright/playwright.config.js +12 -2
  87. package/dist/types/src/playwright/playwright.config.js.map +1 -1
  88. package/dist/types/src/testing/shell-manager.d.ts +1 -0
  89. package/dist/types/src/testing/shell-manager.d.ts.map +1 -1
  90. package/dist/types/src/testing/shell-manager.js +2 -7
  91. package/dist/types/src/testing/shell-manager.js.map +1 -1
  92. package/dist/types/src/translations/locales/en-US.d.ts +1 -0
  93. package/dist/types/src/translations/locales/en-US.d.ts.map +1 -1
  94. package/dist/types/src/translations/locales/en-US.js +4 -3
  95. package/dist/types/src/translations/locales/en-US.js.map +1 -1
  96. package/package.json +29 -27
  97. package/src/components/CompoundButton/CompoundButton.stories.tsx +1 -1
  98. package/src/components/IdentityList/SpaceMemberList.stories.tsx +1 -2
  99. package/src/components/InvitationList/InvitationList.stories.tsx +1 -2
  100. package/src/components/Panel/Panel.stories.tsx +1 -2
  101. package/src/components/Viewport/Viewport.stories.tsx +1 -1
  102. package/src/composites/Shell/Shell.tsx +4 -3
  103. package/src/composites/Shell/run-shell.tsx +1 -1
  104. package/src/panels/IdentityPanel/IdentityPanel.stories.tsx +7 -2
  105. package/src/panels/IdentityPanel/IdentityPanel.tsx +3 -3
  106. package/src/panels/IdentityPanel/IdentityPanelProps.ts +4 -4
  107. package/src/panels/IdentityPanel/useAgentHandlers.ts +9 -114
  108. package/src/panels/IdentityPanel/useEdgeAgentsHandlers.ts +96 -0
  109. package/src/panels/IdentityPanel/useKubeAgentHandlers.ts +128 -0
  110. package/src/panels/JoinPanel/JoinPanel.stories.tsx +3 -2
  111. package/src/panels/JoinPanel/JoinPanel.tsx +31 -9
  112. package/src/panels/JoinPanel/JoinPanelProps.ts +7 -3
  113. package/src/panels/JoinPanel/joinMachine.ts +2 -0
  114. package/src/panels/JoinPanel/steps/InvitationAuthenticator.tsx +29 -16
  115. package/src/panels/JoinPanel/steps/InvitationInput.tsx +9 -17
  116. package/src/panels/Panels.stories.tsx +1 -1
  117. package/src/panels/SpacePanel/SpacePanel.stories.tsx +1 -1
  118. package/src/panels/SpacePanel/SpacePanel.tsx +3 -3
  119. package/src/panels/SpacePanel/SpacePanelProps.ts +4 -4
  120. package/src/playwright/invitations-manager.ts +4 -8
  121. package/src/playwright/invitations.spec.ts +32 -33
  122. package/src/playwright/playwright.config.ts +13 -2
  123. package/src/testing/shell-manager.ts +4 -9
  124. package/src/translations/locales/en-US.ts +4 -3
@@ -1233,21 +1233,21 @@ var SpaceListItem = /* @__PURE__ */ forwardRef8(({ space, onClick }, ref) => {
1233
1233
  });
1234
1234
 
1235
1235
  // packages/sdk/shell/src/composites/IdentityDialog/IdentityDialog.tsx
1236
- import React42 from "react";
1236
+ import React40 from "react";
1237
1237
  import { Dialog, useId as useId10 } from "@dxos/react-ui";
1238
1238
 
1239
1239
  // packages/sdk/shell/src/panels/IdentityPanel/IdentityPanel.tsx
1240
1240
  import { Key, Plugs, PlugsConnected } from "@phosphor-icons/react";
1241
- import React29, { useEffect as useEffect3, useMemo as useMemo3, useState as useState8 } from "react";
1241
+ import React28, { useEffect as useEffect4, useMemo as useMemo3, useState as useState8 } from "react";
1242
1242
  import { generateName as generateName3 } from "@dxos/display-name";
1243
- import { log as log6 } from "@dxos/log";
1244
- import { useClient as useClient4 } from "@dxos/react-client";
1243
+ import { log as log5 } from "@dxos/log";
1244
+ import { useClient as useClient6 } from "@dxos/react-client";
1245
1245
  import { useIdentity, useDevices, useHaloInvitations as useHaloInvitations2 } from "@dxos/react-client/halo";
1246
1246
  import { useInvitationStatus as useInvitationStatus2 } from "@dxos/react-client/invitations";
1247
1247
  import { useNetworkStatus, ConnectionState as ConnectionState2 } from "@dxos/react-client/mesh";
1248
- import { Avatar as Avatar6, DensityProvider, Input as Input2, Toolbar as Toolbar3, Tooltip as Tooltip7, useId as useId6, useTranslation as useTranslation14 } from "@dxos/react-ui";
1248
+ import { Avatar as Avatar6, Input as Input2, Toolbar as Toolbar3, Tooltip as Tooltip7, useId as useId6, useTranslation as useTranslation13 } from "@dxos/react-ui";
1249
1249
  import { getSize as getSize13 } from "@dxos/react-ui-theme";
1250
- import { hexToEmoji as hexToEmoji4, hexToHue as hexToHue2, keyToFallback as keyToFallback3 } from "@dxos/util";
1250
+ import { hexToEmoji as hexToEmoji3, hexToHue, keyToFallback as keyToFallback3 } from "@dxos/util";
1251
1251
 
1252
1252
  // packages/sdk/shell/src/panels/IdentityPanel/identityMachine.ts
1253
1253
  import { useMachine } from "@xstate/react";
@@ -1416,24 +1416,106 @@ var IdentityActionChooserImpl = ({ send, onCreateInvitationClick, devices, conne
1416
1416
  }), !managedDeviceAvailable && agentHostingEnabled && /* @__PURE__ */ React25.createElement(AgentConfig, agentProps));
1417
1417
  };
1418
1418
 
1419
- // packages/sdk/shell/src/panels/IdentityPanel/steps/ProfileForm.tsx
1420
- import React26, { useState as useState5 } from "react";
1421
- import { log as log3 } from "@dxos/log";
1422
- import { useTranslation as useTranslation11 } from "@dxos/react-ui";
1423
- import { hexToEmoji as hexToEmoji2, hexToHue } from "@dxos/util";
1424
-
1425
1419
  // packages/sdk/shell/src/panels/IdentityPanel/useAgentHandlers.ts
1426
- import { useCallback as useCallback4, useEffect as useEffect2, useState as useState6 } from "react";
1420
+ import { useClient as useClient5 } from "@dxos/react-client";
1421
+
1422
+ // packages/sdk/shell/src/panels/IdentityPanel/useEdgeAgentsHandlers.ts
1423
+ import { useEffect as useEffect2, useState as useState5 } from "react";
1427
1424
  import { invariant } from "@dxos/invariant";
1428
- import { log as log4 } from "@dxos/log";
1429
- import { useClient as useClient3, useAgentHostingClient } from "@dxos/react-client";
1425
+ import { QueryAgentStatusResponse } from "@dxos/protocols/proto/dxos/client/services";
1426
+ import { useClient as useClient3 } from "@dxos/react-client";
1427
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/IdentityPanel/useEdgeAgentsHandlers.ts";
1428
+ var useEdgeAgentHandlers = ({ identity }) => {
1429
+ const [validationMessage, setValidationMessage] = useState5("");
1430
+ const [lastReceivedStatus, setLastReceivedStatus] = useState5(QueryAgentStatusResponse.AgentStatus.UNKNOWN);
1431
+ const [agentStatus, setAgentStatus] = useState5("getting");
1432
+ const client = useClient3();
1433
+ const agentHostingEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.agents);
1434
+ const handleStatus = (status) => {
1435
+ switch (status) {
1436
+ case QueryAgentStatusResponse.AgentStatus.ACTIVE:
1437
+ case QueryAgentStatusResponse.AgentStatus.INACTIVE:
1438
+ setAgentStatus("created");
1439
+ break;
1440
+ case QueryAgentStatusResponse.AgentStatus.NOT_FOUND:
1441
+ setAgentStatus("creatable");
1442
+ break;
1443
+ case QueryAgentStatusResponse.AgentStatus.UNKNOWN:
1444
+ setAgentStatus("getting");
1445
+ break;
1446
+ }
1447
+ };
1448
+ useEffect2(() => {
1449
+ const stream = client.services.services.EdgeAgentService?.queryAgentStatus();
1450
+ stream?.subscribe(({ status }) => {
1451
+ setLastReceivedStatus(status);
1452
+ handleStatus(status);
1453
+ });
1454
+ return () => {
1455
+ void stream?.close().catch(() => {
1456
+ });
1457
+ };
1458
+ }, []);
1459
+ const onAgentCreate = async () => {
1460
+ invariant(identity, "Identity not found", {
1461
+ F: __dxlog_file3,
1462
+ L: 56,
1463
+ S: void 0,
1464
+ A: [
1465
+ "identity",
1466
+ "'Identity not found'"
1467
+ ]
1468
+ });
1469
+ const service = client.services.services.EdgeAgentService;
1470
+ if (!service) {
1471
+ setAgentStatus("error");
1472
+ setValidationMessage("Agent service not initialized.");
1473
+ return;
1474
+ }
1475
+ if (!agentHostingEnabled) {
1476
+ setAgentStatus("error");
1477
+ setValidationMessage("Edge agents are disabled in config.");
1478
+ return;
1479
+ }
1480
+ setAgentStatus("creating");
1481
+ setValidationMessage("");
1482
+ try {
1483
+ await service.createAgent();
1484
+ setAgentStatus("created");
1485
+ } catch (err) {
1486
+ setAgentStatus("error");
1487
+ setValidationMessage(`Error creating an agent: ${err.message}`);
1488
+ }
1489
+ };
1490
+ const onAgentDestroy = async () => {
1491
+ setValidationMessage("Agents are non-destructible.");
1492
+ };
1493
+ const onAgentRefresh = async () => {
1494
+ setValidationMessage("");
1495
+ handleStatus(lastReceivedStatus);
1496
+ };
1497
+ return {
1498
+ onAgentCreate,
1499
+ onAgentDestroy,
1500
+ onAgentRefresh,
1501
+ validationMessage,
1502
+ agentStatus,
1503
+ agentHostingEnabled
1504
+ };
1505
+ };
1506
+
1507
+ // packages/sdk/shell/src/panels/IdentityPanel/useKubeAgentHandlers.ts
1508
+ import { useCallback as useCallback4, useEffect as useEffect3, useState as useState6 } from "react";
1509
+ import { invariant as invariant2 } from "@dxos/invariant";
1510
+ import { log as log3 } from "@dxos/log";
1511
+ import { useClient as useClient4, useAgentHostingClient } from "@dxos/react-client";
1430
1512
  import { Invitation as Invitation3, InvitationEncoder as InvitationEncoder2 } from "@dxos/react-client/invitations";
1431
- var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/IdentityPanel/useAgentHandlers.ts";
1432
- var useAgentHandlers = ({ invitations, identity }) => {
1513
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/IdentityPanel/useKubeAgentHandlers.ts";
1514
+ var useKubeAgentHandlers = ({ invitations, identity }) => {
1433
1515
  const [validationMessage, setValidationMessage] = useState6("");
1434
1516
  const [agentStatus, setAgentStatus] = useState6("getting");
1435
1517
  const agentHostingProviderClient = useAgentHostingClient();
1436
- const client = useClient3();
1518
+ const client = useClient4();
1437
1519
  const updateAgentStatus = async () => {
1438
1520
  if (agentHostingProviderClient) {
1439
1521
  setAgentStatus("getting");
@@ -1454,8 +1536,8 @@ var useAgentHandlers = ({ invitations, identity }) => {
1454
1536
  }
1455
1537
  };
1456
1538
  const createAgent = async (invitationCode) => {
1457
- invariant(identity, "Identity not found", {
1458
- F: __dxlog_file3,
1539
+ invariant2(identity, "Identity not found", {
1540
+ F: __dxlog_file4,
1459
1541
  L: 50,
1460
1542
  S: void 0,
1461
1543
  A: [
@@ -1484,8 +1566,8 @@ var useAgentHandlers = ({ invitations, identity }) => {
1484
1566
  }
1485
1567
  };
1486
1568
  const destroyAgent = async () => {
1487
- invariant(identity, "Identity not found", {
1488
- F: __dxlog_file3,
1569
+ invariant2(identity, "Identity not found", {
1570
+ F: __dxlog_file4,
1489
1571
  L: 73,
1490
1572
  S: void 0,
1491
1573
  A: [
@@ -1508,17 +1590,17 @@ var useAgentHandlers = ({ invitations, identity }) => {
1508
1590
  setValidationMessage("No agent provider configured.");
1509
1591
  }
1510
1592
  };
1511
- useEffect2(() => {
1593
+ useEffect3(() => {
1512
1594
  void updateAgentStatus();
1513
1595
  }, []);
1514
1596
  const handleAgentCreate = useCallback4(async (invitation) => {
1515
1597
  const invitationCode = InvitationEncoder2.encode(invitation);
1516
1598
  if (invitation.state === Invitation3.State.CONNECTING) {
1517
- log4.info(JSON.stringify({
1599
+ log3.info(JSON.stringify({
1518
1600
  invitationCode,
1519
1601
  authCode: invitation.authCode
1520
1602
  }), void 0, {
1521
- F: __dxlog_file3,
1603
+ F: __dxlog_file4,
1522
1604
  L: 97,
1523
1605
  S: void 0,
1524
1606
  C: (f, a) => f(...a)
@@ -1549,13 +1631,23 @@ var useAgentHandlers = ({ invitations, identity }) => {
1549
1631
  };
1550
1632
  };
1551
1633
 
1634
+ // packages/sdk/shell/src/panels/IdentityPanel/useAgentHandlers.ts
1635
+ var useAgentHandlers = (params) => {
1636
+ const client = useClient5();
1637
+ if (client.config.values?.runtime?.client?.edgeFeatures?.agents) {
1638
+ return useEdgeAgentHandlers(params);
1639
+ } else {
1640
+ return useKubeAgentHandlers(params);
1641
+ }
1642
+ };
1643
+
1552
1644
  // packages/sdk/shell/src/steps/InvitationManager.tsx
1553
1645
  import { Check as Check4, X as X3 } from "@phosphor-icons/react";
1554
- import React27, { useMemo as useMemo2 } from "react";
1646
+ import React26, { useMemo as useMemo2 } from "react";
1555
1647
  import { QR } from "react-qr-rounded";
1556
- import { useId as useId5, useTranslation as useTranslation12 } from "@dxos/react-ui";
1648
+ import { useId as useId5, useTranslation as useTranslation11 } from "@dxos/react-ui";
1557
1649
  import { descriptionText as descriptionText8, getSize as getSize11, mx as mx20 } from "@dxos/react-ui-theme";
1558
- import { hexToEmoji as hexToEmoji3 } from "@dxos/util";
1650
+ import { hexToEmoji as hexToEmoji2 } from "@dxos/util";
1559
1651
 
1560
1652
  // packages/sdk/shell/src/util/invitationStatusValue.ts
1561
1653
  import { Invitation as Invitation4 } from "@dxos/react-client/invitations";
@@ -1600,17 +1692,17 @@ var invitationStatusValue = /* @__PURE__ */ new Map([
1600
1692
 
1601
1693
  // packages/sdk/shell/src/steps/InvitationManager.tsx
1602
1694
  var InvitationManagerView = ({ children, ...props }) => {
1603
- return /* @__PURE__ */ React27.createElement(Viewport.View, {
1695
+ return /* @__PURE__ */ React26.createElement(Viewport.View, {
1604
1696
  ...props,
1605
1697
  classNames: "grow flex flex-col justify-around items-center"
1606
1698
  }, children);
1607
1699
  };
1608
1700
  var InvitationManager = ({ invitationUrl, active, send, status, multiUse, authCode, id = "0" }) => {
1609
- const { t } = useTranslation12("os");
1701
+ const { t } = useTranslation11("os");
1610
1702
  const qrLabel = useId5("invitation-manager__qr-code");
1611
1703
  const statusValue = multiUse ? 0 : invitationStatusValue.get(status) ?? 0;
1612
1704
  const showAuthCode = statusValue === 3;
1613
- const emoji = hexToEmoji3(id);
1705
+ const emoji = hexToEmoji2(id);
1614
1706
  const activeView = useMemo2(() => {
1615
1707
  if (multiUse) {
1616
1708
  return "showing qr";
@@ -1627,18 +1719,18 @@ var InvitationManager = ({ invitationUrl, active, send, status, multiUse, authCo
1627
1719
  }, [
1628
1720
  statusValue
1629
1721
  ]);
1630
- return /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement(Viewport.Root, {
1722
+ return /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement(Viewport.Root, {
1631
1723
  activeView,
1632
1724
  classNames: "grow plb-1"
1633
- }, /* @__PURE__ */ React27.createElement(Viewport.Views, null, /* @__PURE__ */ React27.createElement(InvitationManagerView, {
1725
+ }, /* @__PURE__ */ React26.createElement(Viewport.Views, null, /* @__PURE__ */ React26.createElement(InvitationManagerView, {
1634
1726
  id: "showing qr",
1635
1727
  emoji
1636
- }, /* @__PURE__ */ React27.createElement("p", {
1728
+ }, /* @__PURE__ */ React26.createElement("p", {
1637
1729
  className: "text-sm mlb-1 font-normal text-center"
1638
- }, t(multiUse ? "invite many qr label" : "invite one qr label")), /* @__PURE__ */ React27.createElement("div", {
1730
+ }, t(multiUse ? "invite many qr label" : "invite one qr label")), /* @__PURE__ */ React26.createElement("div", {
1639
1731
  role: "none",
1640
1732
  className: mx20(descriptionText8, "is-full max-is-[14rem] relative")
1641
- }, /* @__PURE__ */ React27.createElement(QR, {
1733
+ }, /* @__PURE__ */ React26.createElement(QR, {
1642
1734
  rounding: 100,
1643
1735
  backgroundColor: "transparent",
1644
1736
  color: "currentColor",
@@ -1646,31 +1738,31 @@ var InvitationManager = ({ invitationUrl, active, send, status, multiUse, authCo
1646
1738
  "aria-labelledby": qrLabel,
1647
1739
  errorCorrectionLevel: "Q",
1648
1740
  cutout: true
1649
- }, invitationUrl ?? "never"), /* @__PURE__ */ React27.createElement(Centered, null, /* @__PURE__ */ React27.createElement(Emoji, {
1741
+ }, invitationUrl ?? "never"), /* @__PURE__ */ React26.createElement(Centered, null, /* @__PURE__ */ React26.createElement(Emoji, {
1650
1742
  text: emoji
1651
- }))), /* @__PURE__ */ React27.createElement("span", {
1743
+ }))), /* @__PURE__ */ React26.createElement("span", {
1652
1744
  id: qrLabel,
1653
1745
  className: "sr-only"
1654
- }, t("qr label")), /* @__PURE__ */ React27.createElement(CopyButton, {
1746
+ }, t("qr label")), /* @__PURE__ */ React26.createElement(CopyButton, {
1655
1747
  variant: "ghost",
1656
1748
  value: invitationUrl ?? "never"
1657
- })), /* @__PURE__ */ React27.createElement(InvitationManagerView, {
1749
+ })), /* @__PURE__ */ React26.createElement(InvitationManagerView, {
1658
1750
  id: "showing auth code"
1659
- }, /* @__PURE__ */ React27.createElement(Label, null, t("auth code message")), /* @__PURE__ */ React27.createElement(AuthCode, {
1751
+ }, /* @__PURE__ */ React26.createElement(Label, null, t("auth code message")), /* @__PURE__ */ React26.createElement(AuthCode, {
1660
1752
  code: authCode,
1661
1753
  large: true,
1662
1754
  classNames: "text-black dark:text-white"
1663
- }), /* @__PURE__ */ React27.createElement(Label, null, t("auth other device emoji message")), emoji && /* @__PURE__ */ React27.createElement(Emoji, {
1755
+ }), /* @__PURE__ */ React26.createElement(Label, null, t("auth other device emoji message")), emoji && /* @__PURE__ */ React26.createElement(Emoji, {
1664
1756
  text: emoji
1665
- })), /* @__PURE__ */ React27.createElement(InvitationManagerView, {
1757
+ })), /* @__PURE__ */ React26.createElement(InvitationManagerView, {
1666
1758
  id: "showing final"
1667
- }, statusValue > 0 ? /* @__PURE__ */ React27.createElement(Check4, {
1759
+ }, statusValue > 0 ? /* @__PURE__ */ React26.createElement(Check4, {
1668
1760
  className: mx20("m-1.5", getSize11(6))
1669
- }) : /* @__PURE__ */ React27.createElement(X3, {
1761
+ }) : /* @__PURE__ */ React26.createElement(X3, {
1670
1762
  className: mx20("m-1.5", getSize11(6))
1671
- })))), /* @__PURE__ */ React27.createElement(Actions, {
1763
+ })))), /* @__PURE__ */ React26.createElement(Actions, {
1672
1764
  classNames: "mbs-4"
1673
- }, /* @__PURE__ */ React27.createElement(Action, {
1765
+ }, /* @__PURE__ */ React26.createElement(Action, {
1674
1766
  disabled: !active,
1675
1767
  onClick: () => send?.({
1676
1768
  type: "deselectInvitation"
@@ -1680,20 +1772,20 @@ var InvitationManager = ({ invitationUrl, active, send, status, multiUse, authCo
1680
1772
 
1681
1773
  // packages/sdk/shell/src/steps/ConfirmReset.tsx
1682
1774
  import { Warning } from "@phosphor-icons/react";
1683
- import React28, { useState as useState7 } from "react";
1684
- import { log as log5 } from "@dxos/log";
1685
- import { Message, useTranslation as useTranslation13 } from "@dxos/react-ui";
1775
+ import React27, { useState as useState7 } from "react";
1776
+ import { log as log4 } from "@dxos/log";
1777
+ import { Message, useTranslation as useTranslation12 } from "@dxos/react-ui";
1686
1778
  import { getSize as getSize12, mx as mx21 } from "@dxos/react-ui-theme";
1687
- var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/steps/ConfirmReset.tsx";
1779
+ var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/steps/ConfirmReset.tsx";
1688
1780
  var ConfirmReset = ({ active, onCancel, onConfirm, mode }) => {
1689
- const { t } = useTranslation13("os");
1781
+ const { t } = useTranslation12("os");
1690
1782
  const [validationMessage, setValidationMessage] = useState7("");
1691
1783
  const [pending, setPending] = useState7(false);
1692
1784
  const processReset = async () => {
1693
1785
  setPending(true);
1694
1786
  return onConfirm?.().then(() => setPending(false), (error) => {
1695
- log5.catch(error, void 0, {
1696
- F: __dxlog_file4,
1787
+ log4.catch(error, void 0, {
1788
+ F: __dxlog_file5,
1697
1789
  L: 38,
1698
1790
  S: void 0,
1699
1791
  C: (f, a) => f(...a)
@@ -1702,7 +1794,7 @@ var ConfirmReset = ({ active, onCancel, onConfirm, mode }) => {
1702
1794
  setPending(false);
1703
1795
  });
1704
1796
  };
1705
- return /* @__PURE__ */ React28.createElement(ConfirmResetImpl, {
1797
+ return /* @__PURE__ */ React27.createElement(ConfirmResetImpl, {
1706
1798
  disabled: !active,
1707
1799
  pending,
1708
1800
  validationMessage,
@@ -1712,20 +1804,20 @@ var ConfirmReset = ({ active, onCancel, onConfirm, mode }) => {
1712
1804
  });
1713
1805
  };
1714
1806
  var ConfirmResetImpl = ({ disabled, pending, validationMessage, onConfirm, onCancel, mode }) => {
1715
- const { t } = useTranslation13("os");
1807
+ const { t } = useTranslation12("os");
1716
1808
  const confirmationValue = t("confirmation value");
1717
1809
  const [inputValue, setInputValue] = useState7("");
1718
1810
  const testIdAffix = mode === "join new identity" ? "join-new-identity" : "reset-storage";
1719
- return /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement("div", {
1811
+ return /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement("div", {
1720
1812
  role: "none",
1721
1813
  className: "grow flex flex-col gap-2 justify-center"
1722
- }, /* @__PURE__ */ React28.createElement(Message.Root, {
1814
+ }, /* @__PURE__ */ React27.createElement(Message.Root, {
1723
1815
  valence: "error"
1724
- }, /* @__PURE__ */ React28.createElement(Message.Title, null, /* @__PURE__ */ React28.createElement(Warning, {
1816
+ }, /* @__PURE__ */ React27.createElement(Message.Title, null, /* @__PURE__ */ React27.createElement(Warning, {
1725
1817
  className: mx21(getSize12(6), "inline mie-2")
1726
- }), t("sign out chooser title")), /* @__PURE__ */ React28.createElement(Message.Body, null, t("sign out chooser message"))), /* @__PURE__ */ React28.createElement(Input, {
1818
+ }), t("sign out chooser title")), /* @__PURE__ */ React27.createElement(Message.Body, null, t("sign out chooser message"))), /* @__PURE__ */ React27.createElement(Input, {
1727
1819
  validationMessage,
1728
- label: /* @__PURE__ */ React28.createElement(StepHeading, {
1820
+ label: /* @__PURE__ */ React27.createElement(StepHeading, {
1729
1821
  className: "text-start mlb-2"
1730
1822
  }, t(mode === "join new identity" ? "join new identity input label" : "reset storage input label", {
1731
1823
  confirmationValue
@@ -1736,11 +1828,11 @@ var ConfirmResetImpl = ({ disabled, pending, validationMessage, onConfirm, onCan
1736
1828
  confirmationValue
1737
1829
  }),
1738
1830
  onChange: ({ target: { value } }) => setInputValue(value)
1739
- })), /* @__PURE__ */ React28.createElement(Actions, null, onCancel && /* @__PURE__ */ React28.createElement(Action, {
1831
+ })), /* @__PURE__ */ React27.createElement(Actions, null, onCancel && /* @__PURE__ */ React27.createElement(Action, {
1740
1832
  disabled,
1741
1833
  onClick: onCancel,
1742
1834
  "data-testid": `${testIdAffix}.reset-identity-cancel`
1743
- }, t("cancel label")), onConfirm && /* @__PURE__ */ React28.createElement(Action, {
1835
+ }, t("cancel label")), onConfirm && /* @__PURE__ */ React27.createElement(Action, {
1744
1836
  variant: "destructive",
1745
1837
  disabled: disabled || pending || inputValue !== confirmationValue,
1746
1838
  onClick: onConfirm,
@@ -1749,13 +1841,13 @@ var ConfirmResetImpl = ({ disabled, pending, validationMessage, onConfirm, onCan
1749
1841
  };
1750
1842
 
1751
1843
  // packages/sdk/shell/src/panels/IdentityPanel/IdentityPanel.tsx
1752
- var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/IdentityPanel/IdentityPanel.tsx";
1844
+ var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/IdentityPanel/IdentityPanel.tsx";
1753
1845
  var viewStyles = "pbs-1 pbe-3 pli-3";
1754
- var getHueValue = (identity) => identity?.profile?.data?.hue || hexToHue2(identity?.identityKey.toHex() ?? "0");
1755
- var getEmojiValue = (identity) => identity?.profile?.data?.emoji || hexToEmoji4(identity?.identityKey.toHex() ?? "0");
1846
+ var getHueValue = (identity) => identity?.profile?.data?.hue || hexToHue(identity?.identityKey.toHex() ?? "0");
1847
+ var getEmojiValue = (identity) => identity?.profile?.data?.emoji || hexToEmoji3(identity?.identityKey.toHex() ?? "0");
1756
1848
  var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, connectionState, onChangeConnectionState }) => {
1757
1849
  const fallbackValue = keyToFallback3(identity.identityKey);
1758
- const { t } = useTranslation14("os");
1850
+ const { t } = useTranslation13("os");
1759
1851
  const [displayName, setDisplayName] = useState8(identity.profile?.displayName ?? "");
1760
1852
  const [emoji, setEmojiDirectly] = useState8(getEmojiValue(identity));
1761
1853
  const [hue, setHueDirectly] = useState8(getHueValue(identity));
@@ -1784,29 +1876,29 @@ var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, conn
1784
1876
  };
1785
1877
  const isConnected = connectionState === ConnectionState2.ONLINE;
1786
1878
  const debug = true;
1787
- return /* @__PURE__ */ React29.createElement(Heading, {
1879
+ return /* @__PURE__ */ React28.createElement(Heading, {
1788
1880
  titleId,
1789
1881
  title,
1790
- corner: /* @__PURE__ */ React29.createElement(CloseButton, {
1882
+ corner: /* @__PURE__ */ React28.createElement(CloseButton, {
1791
1883
  onDone
1792
1884
  })
1793
- }, /* @__PURE__ */ React29.createElement(Avatar6.Root, {
1885
+ }, /* @__PURE__ */ React28.createElement(Avatar6.Root, {
1794
1886
  size: 16,
1795
1887
  variant: "circle",
1796
1888
  status: isConnected ? "active" : "error",
1797
1889
  hue: hue || fallbackValue.hue
1798
- }, /* @__PURE__ */ React29.createElement(Toolbar3.Root, {
1890
+ }, /* @__PURE__ */ React28.createElement(Toolbar3.Root, {
1799
1891
  classNames: "flex justify-center"
1800
- }, /* @__PURE__ */ React29.createElement(Avatar6.Frame, {
1892
+ }, /* @__PURE__ */ React28.createElement(Avatar6.Frame, {
1801
1893
  classNames: "relative z-[2] -mli-4 chromatic-ignore"
1802
- }, /* @__PURE__ */ React29.createElement(Avatar6.Fallback, {
1894
+ }, /* @__PURE__ */ React28.createElement(Avatar6.Fallback, {
1803
1895
  text: emoji || fallbackValue.emoji
1804
- }))), /* @__PURE__ */ React29.createElement(Avatar6.Label, {
1896
+ }))), /* @__PURE__ */ React28.createElement(Avatar6.Label, {
1805
1897
  classNames: "sr-only",
1806
1898
  "data-testid": "identityHeading.displayName"
1807
- }, identity.profile?.displayName ?? generateName3(identity.identityKey.toHex())), /* @__PURE__ */ React29.createElement(Input2.Root, null, /* @__PURE__ */ React29.createElement(Input2.Label, {
1899
+ }, identity.profile?.displayName ?? generateName3(identity.identityKey.toHex())), /* @__PURE__ */ React28.createElement(Input2.Root, null, /* @__PURE__ */ React28.createElement(Input2.Label, {
1808
1900
  srOnly: true
1809
- }, t("display name input label")), /* @__PURE__ */ React29.createElement(Input2.TextInput, {
1901
+ }, t("display name input label")), /* @__PURE__ */ React28.createElement(Input2.TextInput, {
1810
1902
  variant: "subdued",
1811
1903
  "data-testid": "display-name-input",
1812
1904
  placeholder: t("display name input placeholder"),
@@ -1817,51 +1909,51 @@ var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, conn
1817
1909
  ...identity.profile,
1818
1910
  displayName: value
1819
1911
  })
1820
- })), /* @__PURE__ */ React29.createElement(Toolbar3.Root, {
1912
+ })), /* @__PURE__ */ React28.createElement(Toolbar3.Root, {
1821
1913
  classNames: "flex justify-center items-center gap-1 pt-3"
1822
- }, /* @__PURE__ */ React29.createElement(EmojiPickerToolbarButton, {
1914
+ }, /* @__PURE__ */ React28.createElement(EmojiPickerToolbarButton, {
1823
1915
  emoji,
1824
1916
  onChangeEmoji: setEmoji,
1825
1917
  classNames: "bs-[--rail-action]"
1826
- }), /* @__PURE__ */ React29.createElement(HuePickerToolbarButton, {
1918
+ }), /* @__PURE__ */ React28.createElement(HuePickerToolbarButton, {
1827
1919
  hue,
1828
1920
  onChangeHue: setHue,
1829
1921
  classNames: "bs-[--rail-action]"
1830
- }), debug && /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(Tooltip7.Root, null, /* @__PURE__ */ React29.createElement(Tooltip7.Trigger, {
1922
+ }), debug && /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement(Tooltip7.Root, null, /* @__PURE__ */ React28.createElement(Tooltip7.Trigger, {
1831
1923
  asChild: true
1832
- }, /* @__PURE__ */ React29.createElement(Toolbar3.Button, {
1924
+ }, /* @__PURE__ */ React28.createElement(Toolbar3.Button, {
1833
1925
  classNames: "bs-[--rail-action]",
1834
1926
  "data-testid": "update-profile-form-copy-key",
1835
1927
  onClick: () => setTextValue(identityHex)
1836
- }, /* @__PURE__ */ React29.createElement("span", {
1928
+ }, /* @__PURE__ */ React28.createElement("span", {
1837
1929
  className: "sr-only"
1838
- }, t(copied ? "copy success label" : "copy self public key label")), /* @__PURE__ */ React29.createElement(Key, {
1930
+ }, t(copied ? "copy success label" : "copy self public key label")), /* @__PURE__ */ React28.createElement(Key, {
1839
1931
  className: getSize13(5)
1840
- }))), /* @__PURE__ */ React29.createElement(Tooltip7.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip7.Content, {
1932
+ }))), /* @__PURE__ */ React28.createElement(Tooltip7.Portal, null, /* @__PURE__ */ React28.createElement(Tooltip7.Content, {
1841
1933
  side: "bottom",
1842
1934
  classNames: "z-50"
1843
- }, t(copied ? "copy success label" : "copy self public key label"), /* @__PURE__ */ React29.createElement(Tooltip7.Arrow, null))), /* @__PURE__ */ React29.createElement(Tooltip7.Root, null, /* @__PURE__ */ React29.createElement(Tooltip7.Trigger, {
1935
+ }, t(copied ? "copy success label" : "copy self public key label"), /* @__PURE__ */ React28.createElement(Tooltip7.Arrow, null))), /* @__PURE__ */ React28.createElement(Tooltip7.Root, null, /* @__PURE__ */ React28.createElement(Tooltip7.Trigger, {
1844
1936
  asChild: true
1845
- }, /* @__PURE__ */ React29.createElement(Toolbar3.Button, {
1937
+ }, /* @__PURE__ */ React28.createElement(Toolbar3.Button, {
1846
1938
  classNames: [
1847
1939
  "bs-[--rail-action]",
1848
1940
  !isConnected && "text-error-500"
1849
1941
  ],
1850
1942
  onClick: () => onChangeConnectionState?.(isConnected ? ConnectionState2.OFFLINE : ConnectionState2.ONLINE)
1851
- }, /* @__PURE__ */ React29.createElement("span", {
1943
+ }, /* @__PURE__ */ React28.createElement("span", {
1852
1944
  className: "sr-only"
1853
- }, t(isConnected ? "disconnect label" : "connect label")), isConnected ? /* @__PURE__ */ React29.createElement(PlugsConnected, {
1945
+ }, t(isConnected ? "disconnect label" : "connect label")), isConnected ? /* @__PURE__ */ React28.createElement(PlugsConnected, {
1854
1946
  className: getSize13(5)
1855
- }) : /* @__PURE__ */ React29.createElement(Plugs, {
1947
+ }) : /* @__PURE__ */ React28.createElement(Plugs, {
1856
1948
  className: getSize13(5)
1857
- }))), /* @__PURE__ */ React29.createElement(Tooltip7.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip7.Content, {
1949
+ }))), /* @__PURE__ */ React28.createElement(Tooltip7.Portal, null, /* @__PURE__ */ React28.createElement(Tooltip7.Content, {
1858
1950
  side: "bottom",
1859
1951
  classNames: "z-50"
1860
- }, t(isConnected ? "disconnect label" : "connect label"), /* @__PURE__ */ React29.createElement(Tooltip7.Arrow, null)))))))));
1952
+ }, t(isConnected ? "disconnect label" : "connect label"), /* @__PURE__ */ React28.createElement(Tooltip7.Arrow, null)))))))));
1861
1953
  };
1862
1954
  var IdentityPanelImpl = (props) => {
1863
1955
  const { identity, titleId, activeView, onUpdateProfile, onResetStorage, onJoinNewIdentity, IdentityActionChooser: IdentityActionChooserComponent = IdentityActionChooser, InvitationManager: InvitationManagerComponent = InvitationManager, connectionState, onChangeConnectionState, onDone, ...rest } = props;
1864
- const { t } = useTranslation14("os");
1956
+ const { t } = useTranslation13("os");
1865
1957
  const title = useMemo3(() => {
1866
1958
  switch (activeView) {
1867
1959
  case "device invitation manager":
@@ -1874,9 +1966,7 @@ var IdentityPanelImpl = (props) => {
1874
1966
  t
1875
1967
  ]);
1876
1968
  const onCancelReset = () => rest.send?.("unchooseAction");
1877
- return /* @__PURE__ */ React29.createElement(DensityProvider, {
1878
- density: "fine"
1879
- }, /* @__PURE__ */ React29.createElement(IdentityHeading, {
1969
+ return /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement(IdentityHeading, {
1880
1970
  identity,
1881
1971
  titleId,
1882
1972
  title,
@@ -1884,35 +1974,35 @@ var IdentityPanelImpl = (props) => {
1884
1974
  onUpdateProfile,
1885
1975
  connectionState,
1886
1976
  onChangeConnectionState
1887
- }), /* @__PURE__ */ React29.createElement(Viewport.Root, {
1977
+ }), /* @__PURE__ */ React28.createElement(Viewport.Root, {
1888
1978
  activeView
1889
- }, /* @__PURE__ */ React29.createElement(Viewport.Views, null, /* @__PURE__ */ React29.createElement(Viewport.View, {
1979
+ }, /* @__PURE__ */ React28.createElement(Viewport.Views, null, /* @__PURE__ */ React28.createElement(Viewport.View, {
1890
1980
  id: "identity action chooser",
1891
1981
  classNames: viewStyles
1892
- }, /* @__PURE__ */ React29.createElement(IdentityActionChooserComponent, {
1982
+ }, /* @__PURE__ */ React28.createElement(IdentityActionChooserComponent, {
1893
1983
  active: activeView === "identity action chooser",
1894
1984
  ...rest,
1895
1985
  connectionState
1896
- })), /* @__PURE__ */ React29.createElement(Viewport.View, {
1986
+ })), /* @__PURE__ */ React28.createElement(Viewport.View, {
1897
1987
  id: "device invitation manager",
1898
1988
  classNames: viewStyles
1899
- }, /* @__PURE__ */ React29.createElement(InvitationManagerComponent, {
1989
+ }, /* @__PURE__ */ React28.createElement(InvitationManagerComponent, {
1900
1990
  active: activeView === "device invitation manager",
1901
1991
  ...rest,
1902
1992
  invitationUrl: rest.createInvitationUrl(rest.invitationCode)
1903
- })), /* @__PURE__ */ React29.createElement(Viewport.View, {
1993
+ })), /* @__PURE__ */ React28.createElement(Viewport.View, {
1904
1994
  classNames: viewStyles,
1905
1995
  id: "confirm join new identity"
1906
- }, /* @__PURE__ */ React29.createElement(ConfirmReset, {
1996
+ }, /* @__PURE__ */ React28.createElement(ConfirmReset, {
1907
1997
  active: activeView === "confirm join new identity",
1908
1998
  ...rest,
1909
1999
  mode: "join new identity",
1910
2000
  onConfirm: onJoinNewIdentity,
1911
2001
  onCancel: onCancelReset
1912
- })), /* @__PURE__ */ React29.createElement(Viewport.View, {
2002
+ })), /* @__PURE__ */ React28.createElement(Viewport.View, {
1913
2003
  classNames: viewStyles,
1914
2004
  id: "confirm reset storage"
1915
- }, /* @__PURE__ */ React29.createElement(ConfirmReset, {
2005
+ }, /* @__PURE__ */ React28.createElement(ConfirmReset, {
1916
2006
  active: activeView === "confirm reset storage",
1917
2007
  ...rest,
1918
2008
  mode: "reset storage",
@@ -1922,14 +2012,14 @@ var IdentityPanelImpl = (props) => {
1922
2012
  };
1923
2013
  var IdentityPanelWithInvitationImpl = ({ invitation, ...props }) => {
1924
2014
  const invitationStatus = useInvitationStatus2(invitation);
1925
- return /* @__PURE__ */ React29.createElement(IdentityPanelImpl, {
2015
+ return /* @__PURE__ */ React28.createElement(IdentityPanelImpl, {
1926
2016
  ...props,
1927
2017
  ...invitationStatus
1928
2018
  });
1929
2019
  };
1930
2020
  var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => code, initialDisposition = "default", ...props }) => {
1931
2021
  const titleId = useId6("identityPanel__heading", propsTitleId);
1932
- const client = useClient4();
2022
+ const client = useClient6();
1933
2023
  const devices = useDevices();
1934
2024
  const identity = useIdentity();
1935
2025
  const invitations = useHaloInvitations2();
@@ -1938,8 +2028,8 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
1938
2028
  invitations
1939
2029
  });
1940
2030
  if (!identity) {
1941
- log6.error("IdentityPanel rendered with no active identity.", void 0, {
1942
- F: __dxlog_file5,
2031
+ log5.error("IdentityPanel rendered with no active identity.", void 0, {
2032
+ F: __dxlog_file6,
1943
2033
  L: 246,
1944
2034
  S: void 0,
1945
2035
  C: (f, a) => f(...a)
@@ -1953,10 +2043,10 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
1953
2043
  });
1954
2044
  const { swarm: connectionState } = useNetworkStatus();
1955
2045
  const handleChangeConnectionState = async (nextState) => client?.mesh.updateConfig(nextState);
1956
- useEffect3(() => {
2046
+ useEffect4(() => {
1957
2047
  const subscription = identityService.subscribe((state) => {
1958
- log6("[state]", state, {
1959
- F: __dxlog_file5,
2048
+ log5("[state]", state, {
2049
+ F: __dxlog_file6,
1960
2050
  L: 259,
1961
2051
  S: void 0,
1962
2052
  C: (f, a) => f(...a)
@@ -2001,40 +2091,40 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
2001
2091
  onChangeConnectionState: handleChangeConnectionState,
2002
2092
  ...agentProps
2003
2093
  };
2004
- return identityState.context.invitation ? /* @__PURE__ */ React29.createElement(IdentityPanelWithInvitationImpl, {
2094
+ return identityState.context.invitation ? /* @__PURE__ */ React28.createElement(IdentityPanelWithInvitationImpl, {
2005
2095
  ...implProps,
2006
2096
  invitation: identityState.context.invitation
2007
- }) : /* @__PURE__ */ React29.createElement(IdentityPanelImpl, implProps);
2097
+ }) : /* @__PURE__ */ React28.createElement(IdentityPanelImpl, implProps);
2008
2098
  };
2009
2099
 
2010
2100
  // packages/sdk/shell/src/panels/JoinPanel/JoinPanel.tsx
2011
- import React38, { useCallback as useCallback6, useEffect as useEffect5, useMemo as useMemo4 } from "react";
2012
- import { log as log10 } from "@dxos/log";
2013
- import { useClient as useClient6, useMulticastObservable } from "@dxos/react-client";
2101
+ import React36, { useCallback as useCallback6, useEffect as useEffect6, useMemo as useMemo4 } from "react";
2102
+ import { log as log9 } from "@dxos/log";
2103
+ import { useClient as useClient8, useMulticastObservable } from "@dxos/react-client";
2014
2104
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
2015
- import { DensityProvider as DensityProvider2, useId as useId8, useThemeContext as useThemeContext5 } from "@dxos/react-ui";
2105
+ import { useId as useId8, useThemeContext as useThemeContext5 } from "@dxos/react-ui";
2016
2106
 
2017
2107
  // packages/sdk/shell/src/panels/JoinPanel/JoinHeading.tsx
2018
2108
  import { X as X4 } from "@phosphor-icons/react";
2019
- import React30, { cloneElement, forwardRef as forwardRef9 } from "react";
2020
- import { Button as Button10, useTranslation as useTranslation15 } from "@dxos/react-ui";
2109
+ import React29, { cloneElement, forwardRef as forwardRef9 } from "react";
2110
+ import { Button as Button10, useTranslation as useTranslation14 } from "@dxos/react-ui";
2021
2111
  import { descriptionText as descriptionText9, getSize as getSize14, mx as mx22 } from "@dxos/react-ui-theme";
2022
2112
  var JoinHeading = /* @__PURE__ */ forwardRef9(({ mode, titleId, exitActionParent, onExit }, forwardedRef) => {
2023
- const { t } = useTranslation15("os");
2024
- const exitButton = /* @__PURE__ */ React30.createElement(Button10, {
2113
+ const { t } = useTranslation14("os");
2114
+ const exitButton = /* @__PURE__ */ React29.createElement(Button10, {
2025
2115
  variant: "ghost",
2026
2116
  ...onExit && {
2027
2117
  onClick: onExit
2028
2118
  },
2029
2119
  classNames: mx22(descriptionText9, "plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]"),
2030
2120
  "data-testid": "join-exit"
2031
- }, /* @__PURE__ */ React30.createElement(X4, {
2121
+ }, /* @__PURE__ */ React29.createElement(X4, {
2032
2122
  weight: "bold",
2033
2123
  className: getSize14(4)
2034
- }), /* @__PURE__ */ React30.createElement("span", {
2124
+ }), /* @__PURE__ */ React29.createElement("span", {
2035
2125
  className: "sr-only"
2036
2126
  }, t("exit label")));
2037
- return /* @__PURE__ */ React30.createElement(Heading, {
2127
+ return /* @__PURE__ */ React29.createElement(Heading, {
2038
2128
  ref: forwardedRef,
2039
2129
  titleId,
2040
2130
  title: t(mode === "halo-only" ? "selecting identity heading" : "joining space heading"),
@@ -2051,13 +2141,13 @@ var JoinHeading = /* @__PURE__ */ forwardRef9(({ mode, titleId, exitActionParent
2051
2141
  import { useMachine as useMachine2 } from "@xstate/react";
2052
2142
  import { useCallback as useCallback5 } from "react";
2053
2143
  import { assign as assign2, createMachine as createMachine2 } from "xstate";
2054
- import { log as log7 } from "@dxos/log";
2144
+ import { log as log6 } from "@dxos/log";
2055
2145
  import { AlreadyJoinedError } from "@dxos/react-client";
2056
2146
  import { Invitation as Invitation5, InvitationEncoder as InvitationEncoder3 } from "@dxos/react-client/invitations";
2057
- var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/joinMachine.ts";
2147
+ var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/joinMachine.ts";
2058
2148
  var getInvitationSubscribable = (Kind, invitation) => {
2059
- log7("[subscribing to invitation]", invitation, {
2060
- F: __dxlog_file6,
2149
+ log6("[subscribing to invitation]", invitation, {
2150
+ F: __dxlog_file7,
2061
2151
  L: 90,
2062
2152
  S: void 0,
2063
2153
  C: (f, a) => f(...a)
@@ -2066,11 +2156,11 @@ var getInvitationSubscribable = (Kind, invitation) => {
2066
2156
  subscribe: (next, onError, complete) => invitation.subscribe((invitation2) => {
2067
2157
  switch (invitation2.state) {
2068
2158
  case Invitation5.State.CONNECTING: {
2069
- log7("[invitation connecting]", {
2159
+ log6("[invitation connecting]", {
2070
2160
  Kind,
2071
2161
  invitation: invitation2
2072
2162
  }, {
2073
- F: __dxlog_file6,
2163
+ F: __dxlog_file7,
2074
2164
  L: 101,
2075
2165
  S: void 0,
2076
2166
  C: (f, a) => f(...a)
@@ -2081,11 +2171,11 @@ var getInvitationSubscribable = (Kind, invitation) => {
2081
2171
  });
2082
2172
  }
2083
2173
  case Invitation5.State.CONNECTED: {
2084
- log7("[invitation connected]", {
2174
+ log6("[invitation connected]", {
2085
2175
  Kind,
2086
2176
  invitation: invitation2
2087
2177
  }, {
2088
- F: __dxlog_file6,
2178
+ F: __dxlog_file7,
2089
2179
  L: 106,
2090
2180
  S: void 0,
2091
2181
  C: (f, a) => f(...a)
@@ -2096,11 +2186,11 @@ var getInvitationSubscribable = (Kind, invitation) => {
2096
2186
  });
2097
2187
  }
2098
2188
  case Invitation5.State.READY_FOR_AUTHENTICATION: {
2099
- log7("[invitation ready for authentication]", {
2189
+ log6("[invitation ready for authentication]", {
2100
2190
  Kind,
2101
2191
  invitation: invitation2
2102
2192
  }, {
2103
- F: __dxlog_file6,
2193
+ F: __dxlog_file7,
2104
2194
  L: 111,
2105
2195
  S: void 0,
2106
2196
  C: (f, a) => f(...a)
@@ -2111,11 +2201,11 @@ var getInvitationSubscribable = (Kind, invitation) => {
2111
2201
  });
2112
2202
  }
2113
2203
  case Invitation5.State.AUTHENTICATING: {
2114
- log7("[invitation authenticating]", {
2204
+ log6("[invitation authenticating]", {
2115
2205
  Kind,
2116
2206
  invitation: invitation2
2117
2207
  }, {
2118
- F: __dxlog_file6,
2208
+ F: __dxlog_file7,
2119
2209
  L: 116,
2120
2210
  S: void 0,
2121
2211
  C: (f, a) => f(...a)
@@ -2126,11 +2216,11 @@ var getInvitationSubscribable = (Kind, invitation) => {
2126
2216
  });
2127
2217
  }
2128
2218
  case Invitation5.State.SUCCESS: {
2129
- log7("[invitation success]", {
2219
+ log6("[invitation success]", {
2130
2220
  Kind,
2131
2221
  invitation: invitation2
2132
2222
  }, {
2133
- F: __dxlog_file6,
2223
+ F: __dxlog_file7,
2134
2224
  L: 121,
2135
2225
  S: void 0,
2136
2226
  C: (f, a) => f(...a)
@@ -2142,10 +2232,10 @@ var getInvitationSubscribable = (Kind, invitation) => {
2142
2232
  return complete?.();
2143
2233
  }
2144
2234
  case Invitation5.State.CANCELLED: {
2145
- log7.warn("[invitation cancelled]", {
2235
+ log6.warn("[invitation cancelled]", {
2146
2236
  Kind
2147
2237
  }, {
2148
- F: __dxlog_file6,
2238
+ F: __dxlog_file7,
2149
2239
  L: 127,
2150
2240
  S: void 0,
2151
2241
  C: (f, a) => f(...a)
@@ -2156,10 +2246,10 @@ var getInvitationSubscribable = (Kind, invitation) => {
2156
2246
  });
2157
2247
  }
2158
2248
  case Invitation5.State.TIMEOUT: {
2159
- log7.error("[invitation timeout]", {
2249
+ log6.error("[invitation timeout]", {
2160
2250
  Kind
2161
2251
  }, {
2162
- F: __dxlog_file6,
2252
+ F: __dxlog_file7,
2163
2253
  L: 132,
2164
2254
  S: void 0,
2165
2255
  C: (f, a) => f(...a)
@@ -2172,11 +2262,11 @@ var getInvitationSubscribable = (Kind, invitation) => {
2172
2262
  }
2173
2263
  }, (error) => {
2174
2264
  if (error instanceof AlreadyJoinedError) {
2175
- log7("[already joined]", {
2265
+ log6("[already joined]", {
2176
2266
  Kind,
2177
2267
  error
2178
2268
  }, {
2179
- F: __dxlog_file6,
2269
+ F: __dxlog_file7,
2180
2270
  L: 139,
2181
2271
  S: void 0,
2182
2272
  C: (f, a) => f(...a)
@@ -2187,11 +2277,11 @@ var getInvitationSubscribable = (Kind, invitation) => {
2187
2277
  });
2188
2278
  return complete?.();
2189
2279
  }
2190
- log7.error("[invitation errored]", {
2280
+ log6.error("[invitation errored]", {
2191
2281
  Kind,
2192
2282
  error
2193
2283
  }, {
2194
- F: __dxlog_file6,
2284
+ F: __dxlog_file7,
2195
2285
  L: 144,
2196
2286
  S: void 0,
2197
2287
  C: (f, a) => f(...a)
@@ -2395,6 +2485,7 @@ var joinMachine = createMachine2({
2395
2485
  }
2396
2486
  ]
2397
2487
  },
2488
+ // TODO(wittjosiah): Remove.
2398
2489
  choosingIdentity: {
2399
2490
  initial: "unknownAuthMethod",
2400
2491
  states: {
@@ -2447,6 +2538,7 @@ var joinMachine = createMachine2({
2447
2538
  }
2448
2539
  }
2449
2540
  },
2541
+ // TODO(wittjosiah): Factor out to a machine handling recovery and device invitations.
2450
2542
  resettingIdentity: {},
2451
2543
  acceptingSpaceInvitation: acceptingInvitationTemplate("Space", "#join.finishingJoiningSpace"),
2452
2544
  finishingJoiningSpace: {
@@ -2518,13 +2610,13 @@ var joinMachine = createMachine2({
2518
2610
  } : context.space
2519
2611
  }),
2520
2612
  log: (context, event) => {
2521
- log7("[transition]", {
2613
+ log6("[transition]", {
2522
2614
  event,
2523
2615
  haloInvitation: context.halo.invitation,
2524
2616
  spaceInvitation: context.space.invitation
2525
2617
  }, {
2526
- F: __dxlog_file6,
2527
- L: 416,
2618
+ F: __dxlog_file7,
2619
+ L: 418,
2528
2620
  S: void 0,
2529
2621
  C: (f, a) => f(...a)
2530
2622
  });
@@ -2536,9 +2628,9 @@ var defaultCodeFromUrl = (invitationType, text) => {
2536
2628
  const searchParams = new URLSearchParams(text.substring(text.lastIndexOf("?")));
2537
2629
  return searchParams.get(`${invitationType}InvitationCode`) ?? searchParams.get(`${invitationType}Invitation`) ?? searchParams.get("invitationCode") ?? searchParams.get("invitation") ?? text;
2538
2630
  } catch (err) {
2539
- log7.catch(err, void 0, {
2540
- F: __dxlog_file6,
2541
- L: 443,
2631
+ log6.catch(err, void 0, {
2632
+ F: __dxlog_file7,
2633
+ L: 445,
2542
2634
  S: void 0,
2543
2635
  C: (f, a) => f(...a)
2544
2636
  });
@@ -2557,9 +2649,9 @@ var useJoinMachine = (client, options) => {
2557
2649
  invitationSubscribable: getInvitationSubscribable("Halo", invitationObservable)
2558
2650
  };
2559
2651
  } catch (err) {
2560
- log7.error("Could not redeem device invitation code", err, {
2561
- F: __dxlog_file6,
2562
- L: 464,
2652
+ log6.error("Could not redeem device invitation code", err, {
2653
+ F: __dxlog_file7,
2654
+ L: 466,
2563
2655
  S: void 0,
2564
2656
  C: (f, a) => f(...a)
2565
2657
  });
@@ -2582,9 +2674,9 @@ var useJoinMachine = (client, options) => {
2582
2674
  invitationSubscribable: getInvitationSubscribable("Space", invitationObservable)
2583
2675
  };
2584
2676
  } catch (err) {
2585
- log7.error("Could not redeem space invitation code", err, {
2586
- F: __dxlog_file6,
2587
- L: 486,
2677
+ log6.error("Could not redeem space invitation code", err, {
2678
+ F: __dxlog_file7,
2679
+ L: 488,
2588
2680
  S: void 0,
2589
2681
  C: (f, a) => f(...a)
2590
2682
  });
@@ -2644,16 +2736,16 @@ var useJoinMachine = (client, options) => {
2644
2736
 
2645
2737
  // packages/sdk/shell/src/panels/JoinPanel/steps/AdditionMethodChooser.tsx
2646
2738
  import { CaretRight as CaretRight2, Plus as Plus3, QrCode, Textbox } from "@phosphor-icons/react";
2647
- import React31 from "react";
2648
- import { useTranslation as useTranslation16 } from "@dxos/react-ui";
2739
+ import React30 from "react";
2740
+ import { useTranslation as useTranslation15 } from "@dxos/react-ui";
2649
2741
  import { getSize as getSize15 } from "@dxos/react-ui-theme";
2650
2742
  var AdditionMethodChooser = (viewStateProps) => {
2651
2743
  const disabled = !viewStateProps.active;
2652
2744
  const { send } = viewStateProps;
2653
- const { t } = useTranslation16("os");
2745
+ const { t } = useTranslation15("os");
2654
2746
  const sharedButtonProps = {
2655
2747
  disabled,
2656
- after: /* @__PURE__ */ React31.createElement(CaretRight2, {
2748
+ after: /* @__PURE__ */ React30.createElement(CaretRight2, {
2657
2749
  className: getSize15(4),
2658
2750
  weight: "bold"
2659
2751
  }),
@@ -2663,13 +2755,13 @@ var AdditionMethodChooser = (viewStateProps) => {
2663
2755
  }
2664
2756
  }
2665
2757
  };
2666
- return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(StepHeading, null, t("addition method chooser title")), /* @__PURE__ */ React31.createElement("div", {
2758
+ return /* @__PURE__ */ React30.createElement(React30.Fragment, null, /* @__PURE__ */ React30.createElement(StepHeading, null, t("addition method chooser title")), /* @__PURE__ */ React30.createElement("div", {
2667
2759
  role: "none",
2668
2760
  className: "flex flex-col gap-1 grow"
2669
- }, /* @__PURE__ */ React31.createElement(CompoundButton, {
2761
+ }, /* @__PURE__ */ React30.createElement(CompoundButton, {
2670
2762
  ...sharedButtonProps,
2671
2763
  description: t("create identity description"),
2672
- before: /* @__PURE__ */ React31.createElement(Plus3, {
2764
+ before: /* @__PURE__ */ React30.createElement(Plus3, {
2673
2765
  className: getSize15(6)
2674
2766
  }),
2675
2767
  onClick: () => send({
@@ -2677,22 +2769,22 @@ var AdditionMethodChooser = (viewStateProps) => {
2677
2769
  }),
2678
2770
  "data-autofocus": "choosingAuthMethod",
2679
2771
  "data-testid": "identity-chooser.create-identity"
2680
- }, t("create identity label")), /* @__PURE__ */ React31.createElement(CompoundButton, {
2772
+ }, t("create identity label")), /* @__PURE__ */ React30.createElement(CompoundButton, {
2681
2773
  ...sharedButtonProps,
2682
2774
  description: t("join identity description"),
2683
- before: /* @__PURE__ */ React31.createElement(QrCode, {
2775
+ before: /* @__PURE__ */ React30.createElement(QrCode, {
2684
2776
  className: getSize15(6)
2685
2777
  }),
2686
2778
  onClick: () => send({
2687
2779
  type: "acceptHaloInvitation"
2688
2780
  }),
2689
2781
  "data-testid": "identity-chooser.join-identity"
2690
- }, t("join identity label")), /* @__PURE__ */ React31.createElement(CompoundButton, {
2782
+ }, t("join identity label")), /* @__PURE__ */ React30.createElement(CompoundButton, {
2691
2783
  ...sharedButtonProps,
2692
2784
  // TODO(mykola): Implement recover.
2693
2785
  disabled: true,
2694
2786
  description: t("recover identity description"),
2695
- before: /* @__PURE__ */ React31.createElement(Textbox, {
2787
+ before: /* @__PURE__ */ React30.createElement(Textbox, {
2696
2788
  className: getSize15(6)
2697
2789
  }),
2698
2790
  onClick: () => send({
@@ -2703,39 +2795,39 @@ var AdditionMethodChooser = (viewStateProps) => {
2703
2795
  };
2704
2796
 
2705
2797
  // packages/sdk/shell/src/panels/JoinPanel/steps/IdentityAdded.tsx
2706
- import React32, { cloneElement as cloneElement2 } from "react";
2798
+ import React31, { cloneElement as cloneElement2 } from "react";
2707
2799
  import { generateName as generateName4 } from "@dxos/display-name";
2708
- import { Avatar as Avatar7, useId as useId7, useTranslation as useTranslation17 } from "@dxos/react-ui";
2800
+ import { Avatar as Avatar7, useId as useId7, useTranslation as useTranslation16 } from "@dxos/react-ui";
2709
2801
  import { mx as mx23 } from "@dxos/react-ui-theme";
2710
2802
  import { hexToFallback } from "@dxos/util";
2711
2803
  var IdentityAdded = (props) => {
2712
2804
  const { mode, addedIdentity, active, send, onDone, doneActionParent } = props;
2713
2805
  const disabled = !active;
2714
- const { t } = useTranslation17("os");
2806
+ const { t } = useTranslation16("os");
2715
2807
  const addedIdentityHex = addedIdentity?.identityKey.toHex() ?? "0";
2716
2808
  const fallbackValue = hexToFallback(addedIdentityHex);
2717
2809
  const labelId = useId7("identityListItem__label");
2718
2810
  const displayName = addedIdentity?.profile?.displayName ?? (addedIdentity && generateName4(addedIdentityHex));
2719
- const doneAction = /* @__PURE__ */ React32.createElement(Action, {
2811
+ const doneAction = /* @__PURE__ */ React31.createElement(Action, {
2720
2812
  ...onDone && {
2721
2813
  onClick: () => onDone(null)
2722
2814
  },
2723
2815
  disabled,
2724
2816
  "data-autofocus": "confirmingAddedIdentity",
2725
2817
  "data-testid": "identity-added-done"
2726
- }, /* @__PURE__ */ React32.createElement("span", null, t("done label")));
2727
- return /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement(StepHeading, null, t("identity added label")), /* @__PURE__ */ React32.createElement("div", {
2818
+ }, /* @__PURE__ */ React31.createElement("span", null, t("done label")));
2819
+ return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement(StepHeading, null, t("identity added label")), /* @__PURE__ */ React31.createElement("div", {
2728
2820
  role: "none",
2729
2821
  className: "grow flex flex-col items-center justify-center text-center gap-2"
2730
- }, /* @__PURE__ */ React32.createElement(Avatar7.Root, {
2822
+ }, /* @__PURE__ */ React31.createElement(Avatar7.Root, {
2731
2823
  status: "active",
2732
2824
  labelId,
2733
2825
  hue: addedIdentity?.profile?.data?.hue || fallbackValue.hue
2734
- }, /* @__PURE__ */ React32.createElement(Avatar7.Frame, null, /* @__PURE__ */ React32.createElement(Avatar7.Fallback, {
2826
+ }, /* @__PURE__ */ React31.createElement(Avatar7.Frame, null, /* @__PURE__ */ React31.createElement(Avatar7.Fallback, {
2735
2827
  text: addedIdentity?.profile?.data?.emoji || fallbackValue.emoji
2736
- })), /* @__PURE__ */ React32.createElement(Avatar7.Label, {
2828
+ })), /* @__PURE__ */ React31.createElement(Avatar7.Label, {
2737
2829
  classNames: mx23("text-lg truncate", !addedIdentity?.profile?.displayName && "font-mono")
2738
- }, displayName))), /* @__PURE__ */ React32.createElement(Actions, null, mode === "halo-only" ? doneActionParent ? /* @__PURE__ */ cloneElement2(doneActionParent, {}, doneAction) : doneAction : /* @__PURE__ */ React32.createElement(Action, {
2830
+ }, displayName))), /* @__PURE__ */ React31.createElement(Actions, null, mode === "halo-only" ? doneActionParent ? /* @__PURE__ */ cloneElement2(doneActionParent, {}, doneAction) : doneAction : /* @__PURE__ */ React31.createElement(Action, {
2739
2831
  variant: "primary",
2740
2832
  disabled: disabled || !addedIdentity,
2741
2833
  onClick: () => addedIdentity && send({
@@ -2747,16 +2839,16 @@ var IdentityAdded = (props) => {
2747
2839
  };
2748
2840
 
2749
2841
  // packages/sdk/shell/src/panels/JoinPanel/steps/IdentityInput.tsx
2750
- import React33, { useState as useState9 } from "react";
2751
- import { log as log8 } from "@dxos/log";
2752
- import { useClient as useClient5 } from "@dxos/react-client";
2753
- import { useTranslation as useTranslation18 } from "@dxos/react-ui";
2754
- var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/steps/IdentityInput.tsx";
2842
+ import React32, { useState as useState9 } from "react";
2843
+ import { log as log7 } from "@dxos/log";
2844
+ import { useClient as useClient7 } from "@dxos/react-client";
2845
+ import { useTranslation as useTranslation17 } from "@dxos/react-ui";
2846
+ var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/steps/IdentityInput.tsx";
2755
2847
  var IdentityInput = (props) => {
2756
2848
  const { send, method } = props;
2757
2849
  const isRecover = method === "recover identity";
2758
- const client = useClient5();
2759
- const { t } = useTranslation18("os");
2850
+ const client = useClient7();
2851
+ const { t } = useTranslation17("os");
2760
2852
  const [validationMessage, setValidationMessage] = useState9("");
2761
2853
  const createIdentity = (displayName) => {
2762
2854
  void client.halo.createIdentity({
@@ -2767,8 +2859,8 @@ var IdentityInput = (props) => {
2767
2859
  identity
2768
2860
  });
2769
2861
  }, (error) => {
2770
- log8.catch(error, void 0, {
2771
- F: __dxlog_file7,
2862
+ log7.catch(error, void 0, {
2863
+ F: __dxlog_file8,
2772
2864
  L: 37,
2773
2865
  S: void 0,
2774
2866
  C: (f, a) => f(...a)
@@ -2776,7 +2868,7 @@ var IdentityInput = (props) => {
2776
2868
  setValidationMessage(t(isRecover ? "failed to recover identity message" : "failed to create identity message"));
2777
2869
  });
2778
2870
  };
2779
- return /* @__PURE__ */ React33.createElement(IdentityInputImpl, {
2871
+ return /* @__PURE__ */ React32.createElement(IdentityInputImpl, {
2780
2872
  ...props,
2781
2873
  onDisplayNameConfirm: createIdentity,
2782
2874
  validationMessage
@@ -2785,27 +2877,27 @@ var IdentityInput = (props) => {
2785
2877
  var IdentityInputImpl = (props) => {
2786
2878
  const { method, send, active, onDisplayNameConfirm, validationMessage } = props;
2787
2879
  const disabled = !active;
2788
- const { t } = useTranslation18("os");
2880
+ const { t } = useTranslation17("os");
2789
2881
  const [inputValue, setInputValue] = useState9("");
2790
2882
  const isRecover = method === "recover identity";
2791
- return /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", {
2883
+ return /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement("div", {
2792
2884
  role: "none",
2793
2885
  className: "grow flex flex-col justify-center"
2794
- }, /* @__PURE__ */ React33.createElement(Input, {
2886
+ }, /* @__PURE__ */ React32.createElement(Input, {
2795
2887
  validationMessage,
2796
- label: /* @__PURE__ */ React33.createElement(StepHeading, null, t(isRecover ? "recover identity input label" : "new identity input label")),
2888
+ label: /* @__PURE__ */ React32.createElement(StepHeading, null, t(isRecover ? "recover identity input label" : "new identity input label")),
2797
2889
  disabled,
2798
2890
  "data-testid": "identity-input",
2799
2891
  placeholder: isRecover ? "Type your recovery phrase" : "Type a display name",
2800
2892
  onChange: ({ target: { value } }) => setInputValue(value)
2801
- })), /* @__PURE__ */ React33.createElement(Actions, null, /* @__PURE__ */ React33.createElement(Action, {
2893
+ })), /* @__PURE__ */ React32.createElement(Actions, null, /* @__PURE__ */ React32.createElement(Action, {
2802
2894
  variant: "ghost",
2803
2895
  disabled,
2804
2896
  onClick: () => send?.({
2805
2897
  type: "deselectAuthMethod"
2806
2898
  }),
2807
2899
  "data-testid": `${method === "recover identity" ? "recover" : "create"}-identity-input-back`
2808
- }, t("back label")), /* @__PURE__ */ React33.createElement(Action, {
2900
+ }, t("back label")), /* @__PURE__ */ React32.createElement(Action, {
2809
2901
  variant: "primary",
2810
2902
  disabled,
2811
2903
  onClick: () => onDisplayNameConfirm?.(inputValue),
@@ -2813,41 +2905,19 @@ var IdentityInputImpl = (props) => {
2813
2905
  }, t("continue label"))));
2814
2906
  };
2815
2907
 
2816
- // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationAccepted.tsx
2817
- import React34, { cloneElement as cloneElement3 } from "react";
2818
- import { useTranslation as useTranslation19 } from "@dxos/react-ui";
2819
- var InvitationAccepted = (props) => {
2820
- const { active, Kind, doneActionParent, onDone } = props;
2821
- const disabled = !active;
2822
- const { t } = useTranslation19("os");
2823
- const doneAction = /* @__PURE__ */ React34.createElement(Action, {
2824
- variant: "primary",
2825
- onClick: onDone,
2826
- disabled,
2827
- "data-autofocus": `success${Kind}Invitation finishingJoining${Kind}`,
2828
- "data-testid": `${Kind.toLowerCase()}-invitation-accepted-done`
2829
- }, t("done label"));
2830
- return /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement("div", {
2831
- role: "none",
2832
- className: "grow flex flex-col justify-center"
2833
- }, /* @__PURE__ */ React34.createElement("p", {
2834
- className: "text-center text-sm font-normal"
2835
- }, t("welcome message"))), /* @__PURE__ */ React34.createElement(Actions, null, doneActionParent ? /* @__PURE__ */ cloneElement3(doneActionParent, {}, doneAction) : doneAction));
2836
- };
2837
-
2838
2908
  // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationInput.tsx
2839
- import React35, { useState as useState10, useEffect as useEffect4, cloneElement as cloneElement4 } from "react";
2840
- import { log as log9 } from "@dxos/log";
2841
- import { useTranslation as useTranslation20 } from "@dxos/react-ui";
2842
- var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/steps/InvitationInput.tsx";
2909
+ import React33, { useState as useState10, useEffect as useEffect5, cloneElement as cloneElement3 } from "react";
2910
+ import { log as log8 } from "@dxos/log";
2911
+ import { useTranslation as useTranslation18 } from "@dxos/react-ui";
2912
+ var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/steps/InvitationInput.tsx";
2843
2913
  var invitationCodeFromUrl = (text) => {
2844
2914
  try {
2845
2915
  const searchParams = new URLSearchParams(text.substring(text.lastIndexOf("?")));
2846
2916
  const invitation = searchParams.get("spaceInvitationCode") ?? searchParams.get("deviceInvitationCode");
2847
2917
  return invitation ?? text;
2848
2918
  } catch (err) {
2849
- log9.catch(err, void 0, {
2850
- F: __dxlog_file8,
2919
+ log8.catch(err, void 0, {
2920
+ F: __dxlog_file9,
2851
2921
  L: 25,
2852
2922
  S: void 0,
2853
2923
  C: (f, a) => f(...a)
@@ -2858,9 +2928,9 @@ var invitationCodeFromUrl = (text) => {
2858
2928
  var InvitationInput = (props) => {
2859
2929
  const { Kind, active, send, unredeemedCode, onExit, exitActionParent, onDone, doneActionParent, succeededKeys } = props;
2860
2930
  const disabled = !active;
2861
- const { t } = useTranslation20("os");
2931
+ const { t } = useTranslation18("os");
2862
2932
  const [inputValue, setInputValue] = useState10(unredeemedCode ?? "");
2863
- useEffect4(() => {
2933
+ useEffect5(() => {
2864
2934
  unredeemedCode && setInputValue(unredeemedCode ?? "");
2865
2935
  }, [
2866
2936
  unredeemedCode
@@ -2877,7 +2947,7 @@ var InvitationInput = (props) => {
2877
2947
  }
2878
2948
  });
2879
2949
  };
2880
- const exitAction = /* @__PURE__ */ React35.createElement(Action, {
2950
+ const exitAction = /* @__PURE__ */ React33.createElement(Action, {
2881
2951
  variant: "ghost",
2882
2952
  disabled,
2883
2953
  ...onExit ? {
@@ -2887,11 +2957,11 @@ var InvitationInput = (props) => {
2887
2957
  },
2888
2958
  "data-testid": "join-exit"
2889
2959
  }, t("cancel label"));
2890
- return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement("div", {
2960
+ return /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", {
2891
2961
  role: "none",
2892
2962
  className: "grow flex flex-col justify-center"
2893
- }, /* @__PURE__ */ React35.createElement(Input, {
2894
- label: /* @__PURE__ */ React35.createElement(StepHeading, null, t("invitation input label")),
2963
+ }, /* @__PURE__ */ React33.createElement(Input, {
2964
+ label: /* @__PURE__ */ React33.createElement(StepHeading, null, t("invitation input label")),
2895
2965
  // TODO(burdon): Translation.
2896
2966
  placeholder: "Type an invitation code",
2897
2967
  disabled,
@@ -2900,24 +2970,17 @@ var InvitationInput = (props) => {
2900
2970
  "data-autofocus": `inputting${Kind}InvitationCode`,
2901
2971
  "data-testid": `${Kind.toLowerCase()}-invitation-input`,
2902
2972
  onKeyUp: ({ key }) => key === "Enter" && handleNext()
2903
- })), /* @__PURE__ */ React35.createElement(Actions, null, Kind === "Halo" ? /* @__PURE__ */ React35.createElement(Action, {
2904
- variant: "ghost",
2905
- disabled,
2906
- onClick: () => send({
2907
- type: "deselectAuthMethod"
2908
- }),
2909
- "data-testid": `${Kind.toLowerCase()}-invitation-input-back`
2910
- }, t("back label")) : exitActionParent ? /* @__PURE__ */ cloneElement4(exitActionParent, {}, exitAction) : doneActionParent ? /* @__PURE__ */ cloneElement4(doneActionParent, {}, exitAction) : exitAction, /* @__PURE__ */ React35.createElement(Action, {
2973
+ })), /* @__PURE__ */ React33.createElement(Actions, null, Kind === "Halo" ? null : exitActionParent ? /* @__PURE__ */ cloneElement3(exitActionParent, {}, exitAction) : doneActionParent ? /* @__PURE__ */ cloneElement3(doneActionParent, {}, exitAction) : exitAction, /* @__PURE__ */ React33.createElement(Action, {
2911
2974
  variant: "primary",
2912
- disabled,
2975
+ disabled: disabled || inputValue.trim().length === 0,
2913
2976
  onClick: handleNext,
2914
2977
  "data-testid": `${Kind.toLowerCase()}-invitation-input-continue`
2915
2978
  }, t("continue label"))));
2916
2979
  };
2917
2980
 
2918
2981
  // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationRescuer.tsx
2919
- import React36 from "react";
2920
- import { useTranslation as useTranslation21 } from "@dxos/react-ui";
2982
+ import React34 from "react";
2983
+ import { useTranslation as useTranslation19 } from "@dxos/react-ui";
2921
2984
  import { descriptionText as descriptionText10 } from "@dxos/react-ui-theme";
2922
2985
  var InvitationActions = ({
2923
2986
  // `invitationState` does report correct state, but here we evaluate whether `failReason` is a better source of truth
@@ -2929,14 +2992,14 @@ var InvitationActions = ({
2929
2992
  Kind,
2930
2993
  failReason
2931
2994
  }) => {
2932
- const { t } = useTranslation21("os");
2995
+ const { t } = useTranslation19("os");
2933
2996
  if (failReason) {
2934
- return /* @__PURE__ */ React36.createElement(React36.Fragment, null, /* @__PURE__ */ React36.createElement(StepHeading, {
2997
+ return /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement(StepHeading, {
2935
2998
  className: descriptionText10
2936
- }, t(failReason === "timeout" ? "timeout status label" : failReason === "cancelled" ? "cancelled status label" : "error status label")), /* @__PURE__ */ React36.createElement("div", {
2999
+ }, t(failReason === "timeout" ? "timeout status label" : failReason === "cancelled" ? "cancelled status label" : "error status label")), /* @__PURE__ */ React34.createElement("div", {
2937
3000
  role: "none",
2938
3001
  className: "grow"
2939
- }), /* @__PURE__ */ React36.createElement(Actions, null, /* @__PURE__ */ React36.createElement(Action, {
3002
+ }), /* @__PURE__ */ React34.createElement(Actions, null, /* @__PURE__ */ React34.createElement(Action, {
2940
3003
  disabled: !active,
2941
3004
  onClick: () => send({
2942
3005
  type: `reset${Kind}Invitation`
@@ -2944,16 +3007,16 @@ var InvitationActions = ({
2944
3007
  "data-testid": "invitation-rescuer-reset"
2945
3008
  }, t("reset label"))));
2946
3009
  } else {
2947
- return /* @__PURE__ */ React36.createElement(React36.Fragment, null, /* @__PURE__ */ React36.createElement(StepHeading, {
3010
+ return /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement(StepHeading, {
2948
3011
  className: descriptionText10
2949
- }, t("connecting status label")), /* @__PURE__ */ React36.createElement("div", {
3012
+ }, t("connecting status label")), /* @__PURE__ */ React34.createElement("div", {
2950
3013
  role: "none",
2951
3014
  className: "grow"
2952
- }), /* @__PURE__ */ React36.createElement(Actions, null, /* @__PURE__ */ React36.createElement(Action, {
3015
+ }), /* @__PURE__ */ React34.createElement(Actions, null, /* @__PURE__ */ React34.createElement(Action, {
2953
3016
  disabled: true,
2954
3017
  classNames: "order-2",
2955
3018
  "data-testid": "next"
2956
- }, t("next label")), /* @__PURE__ */ React36.createElement(Action, {
3019
+ }, t("next label")), /* @__PURE__ */ React34.createElement(Action, {
2957
3020
  disabled: !active,
2958
3021
  onClick: onInvitationCancel,
2959
3022
  "data-testid": "invitation-rescuer-cancel"
@@ -2962,29 +3025,31 @@ var InvitationActions = ({
2962
3025
  };
2963
3026
  var InvitationRescuer = (props) => {
2964
3027
  const { Kind, invitationState, active, send } = props;
2965
- const { t } = useTranslation21("os");
2966
- return /* @__PURE__ */ React36.createElement(React36.Fragment, null, typeof invitationState === "undefined" ? /* @__PURE__ */ React36.createElement(React36.Fragment, null, /* @__PURE__ */ React36.createElement("div", {
3028
+ const { t } = useTranslation19("os");
3029
+ return /* @__PURE__ */ React34.createElement(React34.Fragment, null, typeof invitationState === "undefined" ? /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement("div", {
2967
3030
  role: "none",
2968
3031
  className: "grow flex flex-col justify-center"
2969
- }, /* @__PURE__ */ React36.createElement(StepHeading, {
3032
+ }, /* @__PURE__ */ React34.createElement(StepHeading, {
2970
3033
  className: descriptionText10
2971
- }, "There was a problem joining the space")), /* @__PURE__ */ React36.createElement(Actions, null, /* @__PURE__ */ React36.createElement(Action, {
3034
+ }, "There was a problem joining the space")), /* @__PURE__ */ React34.createElement(Actions, null, /* @__PURE__ */ React34.createElement(Action, {
2972
3035
  disabled: !active,
2973
3036
  "data-testid": "invitation-rescuer-blank-reset",
2974
3037
  onClick: () => send({
2975
3038
  type: `reset${Kind}Invitation`
2976
3039
  })
2977
- }, t("reset label")))) : /* @__PURE__ */ React36.createElement(InvitationActions, props));
3040
+ }, t("reset label")))) : /* @__PURE__ */ React34.createElement(InvitationActions, props));
2978
3041
  };
2979
3042
 
2980
3043
  // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationAuthenticator.tsx
2981
- import React37, { useState as useState11 } from "react";
2982
- import { Input as Input3, useTranslation as useTranslation22 } from "@dxos/react-ui";
2983
- import { hexToEmoji as hexToEmoji5 } from "@dxos/util";
3044
+ import React35, { useState as useState11 } from "react";
3045
+ import { Invitation as Invitation6 } from "@dxos/react-client/invitations";
3046
+ import { Input as Input3, useTranslation as useTranslation20 } from "@dxos/react-ui";
3047
+ import { descriptionText as descriptionText11 } from "@dxos/react-ui-theme";
3048
+ import { hexToEmoji as hexToEmoji4 } from "@dxos/util";
2984
3049
  var pinLength = 6;
2985
- var InvitationAuthenticator = ({ failed, Kind, active, pending, invitationId, onInvitationAuthenticate, onInvitationCancel }) => {
3050
+ var InvitationAuthenticator = ({ failed, Kind, authMethod, active, pending, invitationId, onInvitationAuthenticate, onInvitationCancel }) => {
2986
3051
  const disabled = !active || pending;
2987
- const { t } = useTranslation22("os");
3052
+ const { t } = useTranslation20("os");
2988
3053
  const invitationType = Kind.toLowerCase();
2989
3054
  const [authCode, setAuthCode] = useState11("");
2990
3055
  const onChange = ({ target: { value } }) => {
@@ -2993,14 +3058,19 @@ var InvitationAuthenticator = ({ failed, Kind, active, pending, invitationId, on
2993
3058
  document.querySelector(`[data-autofocus-pinlength="${invitationType}"]`)?.focus();
2994
3059
  }
2995
3060
  };
2996
- return /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement("div", {
3061
+ return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement("div", {
2997
3062
  role: "none",
2998
3063
  className: "grow flex flex-col justify-center gap-4"
2999
- }, /* @__PURE__ */ React37.createElement(Input3.Root, failed && {
3064
+ }, /* @__PURE__ */ React35.createElement(Input3.Root, failed && {
3000
3065
  validationValence: "error"
3001
- }, /* @__PURE__ */ React37.createElement(Input3.Label, {
3066
+ }, /* @__PURE__ */ React35.createElement(Input3.Label, {
3002
3067
  asChild: true
3003
- }, /* @__PURE__ */ React37.createElement(StepHeading, null, t("auth code input label"))), /* @__PURE__ */ React37.createElement(Input3.PinInput, {
3068
+ }, authMethod === Invitation6.AuthMethod.SHARED_SECRET ? /* @__PURE__ */ React35.createElement(StepHeading, null, t("auth code input label")) : /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(StepHeading, {
3069
+ className: descriptionText11
3070
+ }, t("authenticating label")), /* @__PURE__ */ React35.createElement("div", {
3071
+ role: "none",
3072
+ className: "grow"
3073
+ }))), authMethod === Invitation6.AuthMethod.SHARED_SECRET && /* @__PURE__ */ React35.createElement(Input3.PinInput, {
3004
3074
  disabled,
3005
3075
  length: pinLength,
3006
3076
  onChange,
@@ -3011,18 +3081,18 @@ var InvitationAuthenticator = ({ failed, Kind, active, pending, invitationId, on
3011
3081
  "data-prevent-ios-autofocus": true,
3012
3082
  "data-testid": `${invitationType}-auth-code-input`,
3013
3083
  "data-1p-ignore": true
3014
- }), failed && /* @__PURE__ */ React37.createElement(Input3.DescriptionAndValidation, {
3084
+ }), failed && /* @__PURE__ */ React35.createElement(Input3.DescriptionAndValidation, {
3015
3085
  classNames: "text-center"
3016
- }, /* @__PURE__ */ React37.createElement(Input3.Validation, null, t("failed to authenticate message")))), invitationId && /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement(Label, null, t("auth other device emoji message")), /* @__PURE__ */ React37.createElement("div", {
3086
+ }, /* @__PURE__ */ React35.createElement(Input3.Validation, null, t("failed to authenticate message")))), invitationId && authMethod === Invitation6.AuthMethod.SHARED_SECRET && /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(Label, null, t("auth other device emoji message")), /* @__PURE__ */ React35.createElement("div", {
3017
3087
  className: "flex justify-center"
3018
- }, /* @__PURE__ */ React37.createElement(Emoji, {
3019
- text: hexToEmoji5(invitationId)
3020
- })))), /* @__PURE__ */ React37.createElement(Actions, null, /* @__PURE__ */ React37.createElement(Action, {
3088
+ }, /* @__PURE__ */ React35.createElement(Emoji, {
3089
+ text: hexToEmoji4(invitationId)
3090
+ })))), /* @__PURE__ */ React35.createElement(Actions, null, /* @__PURE__ */ React35.createElement(Action, {
3021
3091
  variant: "ghost",
3022
3092
  disabled,
3023
3093
  onClick: () => onInvitationCancel?.(),
3024
3094
  "data-testid": `${invitationType}-invitation-authenticator-cancel`
3025
- }, t("cancel label")), /* @__PURE__ */ React37.createElement(Action, {
3095
+ }, t("cancel label")), /* @__PURE__ */ React35.createElement(Action, {
3026
3096
  variant: "primary",
3027
3097
  disabled,
3028
3098
  onClick: () => onInvitationAuthenticate?.(authCode),
@@ -3035,7 +3105,7 @@ var InvitationAuthenticator = ({ failed, Kind, active, pending, invitationId, on
3035
3105
  var stepStyles = "pbs-1 pbe-3 pli-3";
3036
3106
 
3037
3107
  // packages/sdk/shell/src/styles/invitationStatusStyles.ts
3038
- import { Invitation as Invitation6 } from "@dxos/react-client/invitations";
3108
+ import { Invitation as Invitation7 } from "@dxos/react-client/invitations";
3039
3109
  var inactiveBgColor = "bg-neutral-100 dark:bg-neutral-600";
3040
3110
  var activeBgColor = "bg-primary-500 dark:bg-primary-400";
3041
3111
  var successBgColor = "bg-success-500 dark:bg-success-400";
@@ -3051,56 +3121,79 @@ var activeStrokeColor = "stroke-primary-400 dark:stroke-primary-150";
3051
3121
  var successStrokeColor = "stroke-success-300 dark:stroke-primary-400";
3052
3122
  var errorStrokeColor = "stroke-error-300 dark:stroke-error-500";
3053
3123
  var cancelledStrokeColor = "stroke-warning-300 dark:stroke-warning-500";
3054
- var resolvedStrokeColor = (status) => status === Invitation6.State.ERROR ? errorStrokeColor : status === Invitation6.State.CANCELLED || status === Invitation6.State.TIMEOUT ? cancelledStrokeColor : successStrokeColor;
3055
- var resolvedBgColor = (status) => status === Invitation6.State.ERROR ? errorBgColor : status === Invitation6.State.CANCELLED || status === Invitation6.State.TIMEOUT ? cancelledBgColor : successBgColor;
3056
- var resolvedTextColor = (status) => status === Invitation6.State.ERROR ? errorTextColor : status === Invitation6.State.CANCELLED || status === Invitation6.State.TIMEOUT ? cancelledTextColor : successTextColor;
3124
+ var resolvedStrokeColor = (status) => status === Invitation7.State.ERROR ? errorStrokeColor : status === Invitation7.State.CANCELLED || status === Invitation7.State.TIMEOUT ? cancelledStrokeColor : successStrokeColor;
3125
+ var resolvedBgColor = (status) => status === Invitation7.State.ERROR ? errorBgColor : status === Invitation7.State.CANCELLED || status === Invitation7.State.TIMEOUT ? cancelledBgColor : successBgColor;
3126
+ var resolvedTextColor = (status) => status === Invitation7.State.ERROR ? errorTextColor : status === Invitation7.State.CANCELLED || status === Invitation7.State.TIMEOUT ? cancelledTextColor : successTextColor;
3057
3127
 
3058
3128
  // packages/sdk/shell/src/panels/JoinPanel/JoinPanel.tsx
3059
- var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/JoinPanel.tsx";
3129
+ var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/JoinPanel.tsx";
3060
3130
  var JoinPanelImpl = (props) => {
3061
- const { titleId, send, activeView, failed, mode, unredeemedCodes, invitationIds, invitationStates, succeededKeys, failReasons, onExit, onHaloDone, onSpaceDone, exitActionParent, doneActionParent, onHaloInvitationCancel, onSpaceInvitationCancel, onHaloInvitationAuthenticate, onSpaceInvitationAuthenticate, onCancelResetStorage, onConfirmResetStorage, IdentityInput: IdentityInputComponent = IdentityInput, ConfirmReset: ConfirmResetComponent = ConfirmReset } = props;
3062
- return /* @__PURE__ */ React38.createElement(DensityProvider2, {
3063
- density: "fine"
3064
- }, mode !== "halo-only" && /* @__PURE__ */ React38.createElement(JoinHeading, {
3131
+ const {
3132
+ titleId,
3133
+ send,
3134
+ activeView,
3135
+ failed,
3136
+ mode,
3137
+ unredeemedCodes,
3138
+ invitationIds,
3139
+ invitationStates,
3140
+ invitationAuthMethods,
3141
+ succeededKeys,
3142
+ failReasons,
3143
+ onExit,
3144
+ onHaloDone,
3145
+ // onSpaceDone,
3146
+ exitActionParent,
3147
+ doneActionParent,
3148
+ onHaloInvitationCancel,
3149
+ onSpaceInvitationCancel,
3150
+ onHaloInvitationAuthenticate,
3151
+ onSpaceInvitationAuthenticate,
3152
+ onCancelResetStorage,
3153
+ onConfirmResetStorage,
3154
+ IdentityInput: IdentityInputComponent = IdentityInput,
3155
+ ConfirmReset: ConfirmResetComponent = ConfirmReset
3156
+ } = props;
3157
+ return /* @__PURE__ */ React36.createElement(React36.Fragment, null, mode !== "halo-only" && /* @__PURE__ */ React36.createElement(JoinHeading, {
3065
3158
  titleId,
3066
3159
  mode,
3067
3160
  onExit,
3068
3161
  exitActionParent
3069
- }), /* @__PURE__ */ React38.createElement(Viewport.Root, {
3162
+ }), /* @__PURE__ */ React36.createElement(Viewport.Root, {
3070
3163
  focusManaged: true,
3071
3164
  activeView
3072
- }, /* @__PURE__ */ React38.createElement(Viewport.Views, null, /* @__PURE__ */ React38.createElement(Viewport.View, {
3165
+ }, /* @__PURE__ */ React36.createElement(Viewport.Views, null, /* @__PURE__ */ React36.createElement(Viewport.View, {
3073
3166
  classNames: stepStyles,
3074
3167
  id: "addition method chooser"
3075
- }, /* @__PURE__ */ React38.createElement(AdditionMethodChooser, {
3168
+ }, /* @__PURE__ */ React36.createElement(AdditionMethodChooser, {
3076
3169
  send,
3077
3170
  active: activeView === "addition method chooser"
3078
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3171
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3079
3172
  classNames: stepStyles,
3080
3173
  id: "reset storage confirmation"
3081
- }, /* @__PURE__ */ React38.createElement(ConfirmResetComponent, {
3174
+ }, /* @__PURE__ */ React36.createElement(ConfirmResetComponent, {
3082
3175
  send,
3083
3176
  active: activeView === "reset storage confirmation",
3084
3177
  onCancel: onCancelResetStorage,
3085
3178
  onConfirm: onConfirmResetStorage
3086
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3179
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3087
3180
  classNames: stepStyles,
3088
3181
  id: "create identity input"
3089
- }, /* @__PURE__ */ React38.createElement(IdentityInputComponent, {
3182
+ }, /* @__PURE__ */ React36.createElement(IdentityInputComponent, {
3090
3183
  send,
3091
3184
  method: "create identity",
3092
3185
  active: activeView === "create identity input"
3093
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3186
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3094
3187
  classNames: stepStyles,
3095
3188
  id: "recover identity input"
3096
- }, /* @__PURE__ */ React38.createElement(IdentityInputComponent, {
3189
+ }, /* @__PURE__ */ React36.createElement(IdentityInputComponent, {
3097
3190
  send,
3098
3191
  method: "recover identity",
3099
3192
  active: activeView === "recover identity input"
3100
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3193
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3101
3194
  classNames: stepStyles,
3102
3195
  id: "halo invitation input"
3103
- }, /* @__PURE__ */ React38.createElement(InvitationInput, {
3196
+ }, /* @__PURE__ */ React36.createElement(InvitationInput, {
3104
3197
  send,
3105
3198
  Kind: "Halo",
3106
3199
  active: activeView === "halo invitation input",
@@ -3110,51 +3203,43 @@ var JoinPanelImpl = (props) => {
3110
3203
  ...succeededKeys?.Halo && {
3111
3204
  succeededKeys: succeededKeys.Halo
3112
3205
  }
3113
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3206
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3114
3207
  classNames: stepStyles,
3115
3208
  id: "halo invitation rescuer"
3116
- }, /* @__PURE__ */ React38.createElement(InvitationRescuer, {
3209
+ }, /* @__PURE__ */ React36.createElement(InvitationRescuer, {
3117
3210
  send,
3118
3211
  Kind: "Halo",
3119
3212
  active: activeView === "halo invitation rescuer",
3120
3213
  invitationState: invitationStates?.Halo,
3121
3214
  onInvitationCancel: onHaloInvitationCancel,
3122
3215
  failReason: failReasons?.Halo
3123
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3216
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3124
3217
  classNames: stepStyles,
3125
3218
  id: "halo invitation authenticator"
3126
- }, /* @__PURE__ */ React38.createElement(InvitationAuthenticator, {
3219
+ }, /* @__PURE__ */ React36.createElement(InvitationAuthenticator, {
3127
3220
  send,
3128
3221
  Kind: "Halo",
3129
3222
  invitationId: invitationIds?.Halo,
3223
+ authMethod: invitationAuthMethods?.Halo,
3130
3224
  active: activeView === "halo invitation authenticator",
3131
3225
  onInvitationCancel: onHaloInvitationCancel,
3132
3226
  onInvitationAuthenticate: onHaloInvitationAuthenticate,
3133
3227
  ...failed.has("Halo") && {
3134
3228
  failed: true
3135
3229
  }
3136
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3137
- classNames: stepStyles,
3138
- id: "halo invitation accepted"
3139
- }, /* @__PURE__ */ React38.createElement(InvitationAccepted, {
3140
- send,
3141
- Kind: "Halo",
3142
- active: activeView === "halo invitation accepted",
3143
- doneActionParent,
3144
- onDone: onHaloDone
3145
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3230
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3146
3231
  classNames: stepStyles,
3147
3232
  id: "identity added"
3148
- }, /* @__PURE__ */ React38.createElement(IdentityAdded, {
3233
+ }, /* @__PURE__ */ React36.createElement(IdentityAdded, {
3149
3234
  send,
3150
3235
  mode,
3151
3236
  active: activeView === "identity added",
3152
3237
  doneActionParent,
3153
3238
  onDone: onHaloDone
3154
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3239
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3155
3240
  classNames: stepStyles,
3156
3241
  id: "space invitation input"
3157
- }, /* @__PURE__ */ React38.createElement(InvitationInput, {
3242
+ }, /* @__PURE__ */ React36.createElement(InvitationInput, {
3158
3243
  send,
3159
3244
  Kind: "Space",
3160
3245
  active: activeView === "space invitation input",
@@ -3166,42 +3251,34 @@ var JoinPanelImpl = (props) => {
3166
3251
  },
3167
3252
  onExit,
3168
3253
  exitActionParent
3169
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3254
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3170
3255
  classNames: stepStyles,
3171
3256
  id: "space invitation rescuer"
3172
- }, /* @__PURE__ */ React38.createElement(InvitationRescuer, {
3257
+ }, /* @__PURE__ */ React36.createElement(InvitationRescuer, {
3173
3258
  send,
3174
3259
  Kind: "Space",
3175
3260
  active: activeView === "space invitation rescuer",
3176
3261
  invitationState: invitationStates?.Space,
3177
3262
  onInvitationCancel: onSpaceInvitationCancel,
3178
3263
  failReason: failReasons?.Space
3179
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3264
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3180
3265
  classNames: stepStyles,
3181
3266
  id: "space invitation authenticator"
3182
- }, /* @__PURE__ */ React38.createElement(InvitationAuthenticator, {
3267
+ }, /* @__PURE__ */ React36.createElement(InvitationAuthenticator, {
3183
3268
  send,
3184
3269
  Kind: "Space",
3185
3270
  invitationId: invitationIds?.Space,
3271
+ authMethod: invitationAuthMethods?.Space,
3186
3272
  active: activeView === "space invitation authenticator",
3187
3273
  onInvitationCancel: onSpaceInvitationCancel,
3188
3274
  onInvitationAuthenticate: onSpaceInvitationAuthenticate,
3189
3275
  ...failed.has("Space") && {
3190
3276
  failed: true
3191
3277
  }
3192
- })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3193
- classNames: stepStyles,
3194
- id: "space invitation accepted"
3195
- }, /* @__PURE__ */ React38.createElement(InvitationAccepted, {
3196
- send,
3197
- Kind: "Space",
3198
- active: activeView === "space invitation accepted",
3199
- doneActionParent,
3200
- onDone: onSpaceDone
3201
3278
  })))));
3202
3279
  };
3203
3280
  var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition = "default", initialInvitationCode, exitActionParent, onExit, doneActionParent, onDone: propsOnDone, onCancelResetStorage }) => {
3204
- const client = useClient6();
3281
+ const client = useClient8();
3205
3282
  const identity = useIdentity2();
3206
3283
  const { hasIosKeyboard } = useThemeContext5();
3207
3284
  const titleId = useId8("joinPanel__heading", propsTitleId);
@@ -3217,11 +3294,11 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3217
3294
  }
3218
3295
  }
3219
3296
  });
3220
- useEffect5(() => {
3297
+ useEffect6(() => {
3221
3298
  const subscription = joinService.subscribe((state) => {
3222
- log10("[state]", state, {
3223
- F: __dxlog_file9,
3224
- L: 208,
3299
+ log9("[state]", state, {
3300
+ F: __dxlog_file10,
3301
+ L: 210,
3225
3302
  S: void 0,
3226
3303
  C: (f, a) => f(...a)
3227
3304
  });
@@ -3230,7 +3307,7 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3230
3307
  }, [
3231
3308
  joinService
3232
3309
  ]);
3233
- useEffect5(() => {
3310
+ useEffect6(() => {
3234
3311
  const stateStack = joinState.configuration[0].id.split(".");
3235
3312
  const innermostState = stateStack[stateStack.length - 1];
3236
3313
  const autoFocusValue = innermostState === "finishingJoining" ? "successSpaceInvitation" : innermostState;
@@ -3363,6 +3440,18 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3363
3440
  }, [
3364
3441
  joinState
3365
3442
  ]);
3443
+ useEffect6(() => {
3444
+ switch (activeView) {
3445
+ case "halo invitation accepted":
3446
+ onHaloDone();
3447
+ break;
3448
+ case "space invitation accepted":
3449
+ onSpaceDone();
3450
+ break;
3451
+ }
3452
+ }, [
3453
+ activeView
3454
+ ]);
3366
3455
  const failed = useMemo4(() => {
3367
3456
  const result = /* @__PURE__ */ new Set();
3368
3457
  switch (true) {
@@ -3405,6 +3494,12 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3405
3494
  }), [
3406
3495
  joinState
3407
3496
  ]);
3497
+ const invitationAuthMethods = useMemo4(() => ({
3498
+ Halo: joinState.context.halo.invitationObservable?.get().authMethod,
3499
+ Space: joinState.context.space.invitationObservable?.get().authMethod
3500
+ }), [
3501
+ joinState
3502
+ ]);
3408
3503
  const invitationIds = useMemo4(() => ({
3409
3504
  Halo: joinState.context.halo.invitationObservable?.get().invitationId,
3410
3505
  Space: joinState.context.space.invitationObservable?.get().invitationId
@@ -3447,7 +3542,7 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3447
3542
  client,
3448
3543
  joinSend
3449
3544
  ]);
3450
- return /* @__PURE__ */ React38.createElement(JoinPanelImpl, {
3545
+ return /* @__PURE__ */ React36.createElement(JoinPanelImpl, {
3451
3546
  titleId,
3452
3547
  mode,
3453
3548
  send: joinSend,
@@ -3461,6 +3556,7 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3461
3556
  unredeemedCodes,
3462
3557
  invitationIds,
3463
3558
  invitationStates,
3559
+ invitationAuthMethods,
3464
3560
  succeededKeys,
3465
3561
  identity,
3466
3562
  onExit,
@@ -3489,16 +3585,16 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3489
3585
 
3490
3586
  // packages/sdk/shell/src/panels/SpacePanel/SpacePanel.tsx
3491
3587
  import { Planet } from "@phosphor-icons/react";
3492
- import React40, { useEffect as useEffect6, useMemo as useMemo5 } from "react";
3493
- import { log as log13 } from "@dxos/log";
3588
+ import React38, { useEffect as useEffect7, useMemo as useMemo5 } from "react";
3589
+ import { log as log12 } from "@dxos/log";
3494
3590
  import { useInvitationStatus as useInvitationStatus3 } from "@dxos/react-client/invitations";
3495
- import { DensityProvider as DensityProvider3, useId as useId9, useTranslation as useTranslation24 } from "@dxos/react-ui";
3591
+ import { useId as useId9, useTranslation as useTranslation22 } from "@dxos/react-ui";
3496
3592
 
3497
3593
  // packages/sdk/shell/src/panels/SpacePanel/spaceMachine.ts
3498
3594
  import { useMachine as useMachine3 } from "@xstate/react";
3499
3595
  import { assign as assign3, createMachine as createMachine3 } from "xstate";
3500
- import { log as log11 } from "@dxos/log";
3501
- var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/spaceMachine.ts";
3596
+ import { log as log10 } from "@dxos/log";
3597
+ var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/spaceMachine.ts";
3502
3598
  var spaceMachine = createMachine3({
3503
3599
  id: "space",
3504
3600
  predictableActionArguments: true,
@@ -3535,11 +3631,11 @@ var spaceMachine = createMachine3({
3535
3631
  invitation: () => void 0
3536
3632
  }),
3537
3633
  log: (context, event) => {
3538
- log11("[transition]", {
3634
+ log10("[transition]", {
3539
3635
  event,
3540
3636
  context
3541
3637
  }, {
3542
- F: __dxlog_file10,
3638
+ F: __dxlog_file11,
3543
3639
  L: 53,
3544
3640
  S: void 0,
3545
3641
  C: (f, a) => f(...a)
@@ -3558,23 +3654,23 @@ var useSpaceMachine = (options) => {
3558
3654
 
3559
3655
  // packages/sdk/shell/src/panels/SpacePanel/steps/SpaceManager.tsx
3560
3656
  import { Placeholder as Placeholder2, UserPlus, UsersThree } from "@phosphor-icons/react";
3561
- import React39, { useCallback as useCallback7, useState as useState12 } from "react";
3562
- import { log as log12 } from "@dxos/log";
3657
+ import React37, { useCallback as useCallback7, useState as useState12 } from "react";
3658
+ import { log as log11 } from "@dxos/log";
3563
3659
  import { useConfig } from "@dxos/react-client";
3564
3660
  import { useSpaceInvitations as useSpaceInvitations2 } from "@dxos/react-client/echo";
3565
- import { Invitation as Invitation7, InvitationEncoder as InvitationEncoder4 } from "@dxos/react-client/invitations";
3566
- import { ScrollArea, useTranslation as useTranslation23 } from "@dxos/react-ui";
3567
- import { descriptionText as descriptionText11, mx as mx24 } from "@dxos/react-ui-theme";
3568
- var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/steps/SpaceManager.tsx";
3661
+ import { Invitation as Invitation8, InvitationEncoder as InvitationEncoder4 } from "@dxos/react-client/invitations";
3662
+ import { ScrollArea, useTranslation as useTranslation21 } from "@dxos/react-ui";
3663
+ import { descriptionText as descriptionText12, mx as mx24 } from "@dxos/react-ui-theme";
3664
+ var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/steps/SpaceManager.tsx";
3569
3665
  var activeActionKey = "dxos:react-shell/space-manager/active-action";
3570
3666
  var handleInvitationEvent = (invitation, subscription) => {
3571
3667
  const invitationCode = InvitationEncoder4.encode(invitation);
3572
- if (invitation.state === Invitation7.State.CONNECTING) {
3573
- log12.info(JSON.stringify({
3668
+ if (invitation.state === Invitation8.State.CONNECTING) {
3669
+ log11.info(JSON.stringify({
3574
3670
  invitationCode,
3575
3671
  authCode: invitation.authCode
3576
3672
  }), void 0, {
3577
- F: __dxlog_file11,
3673
+ F: __dxlog_file12,
3578
3674
  L: 40,
3579
3675
  S: void 0,
3580
3676
  C: (f, a) => f(...a)
@@ -3584,7 +3680,7 @@ var handleInvitationEvent = (invitation, subscription) => {
3584
3680
  };
3585
3681
  var SpaceManager = (props) => {
3586
3682
  const { space, target } = props;
3587
- const { t } = useTranslation23("os");
3683
+ const { t } = useTranslation21("os");
3588
3684
  const config = useConfig();
3589
3685
  const invitations = useSpaceInvitations2(space?.key);
3590
3686
  const inviteActions = {
@@ -3594,8 +3690,8 @@ var SpaceManager = (props) => {
3594
3690
  icon: UserPlus,
3595
3691
  onClick: useCallback7(() => {
3596
3692
  const invitation = space.share?.({
3597
- type: Invitation7.Type.INTERACTIVE,
3598
- authMethod: Invitation7.AuthMethod.SHARED_SECRET,
3693
+ type: Invitation8.Type.INTERACTIVE,
3694
+ authMethod: Invitation8.AuthMethod.SHARED_SECRET,
3599
3695
  multiUse: false,
3600
3696
  target
3601
3697
  });
@@ -3612,8 +3708,8 @@ var SpaceManager = (props) => {
3612
3708
  icon: UsersThree,
3613
3709
  onClick: useCallback7(() => {
3614
3710
  const invitation = space.share?.({
3615
- type: Invitation7.Type.DELEGATED,
3616
- authMethod: Invitation7.AuthMethod.KNOWN_PUBLIC_KEY,
3711
+ type: Invitation8.Type.DELEGATED,
3712
+ authMethod: Invitation8.AuthMethod.KNOWN_PUBLIC_KEY,
3617
3713
  multiUse: true,
3618
3714
  target
3619
3715
  });
@@ -3625,7 +3721,7 @@ var SpaceManager = (props) => {
3625
3721
  ])
3626
3722
  }
3627
3723
  };
3628
- return /* @__PURE__ */ React39.createElement(SpaceManagerImpl, {
3724
+ return /* @__PURE__ */ React37.createElement(SpaceManagerImpl, {
3629
3725
  ...props,
3630
3726
  invitations,
3631
3727
  inviteActions
@@ -3634,7 +3730,7 @@ var SpaceManager = (props) => {
3634
3730
  var headingFragment = "pis-3 pie-1 plb-1 mbe-1 font-medium";
3635
3731
  var SpaceManagerImpl = (props) => {
3636
3732
  const { active, space, createInvitationUrl, send, inviteActions: propsInviteActions, invitations, showInactiveInvitations, SpaceMemberList: SpaceMemberListComponent = SpaceMemberList, InvitationList: InvitationListComponent = InvitationList } = props;
3637
- const { t } = useTranslation23("os");
3733
+ const { t } = useTranslation21("os");
3638
3734
  const inviteActions = propsInviteActions ?? {
3639
3735
  noopInvite: {
3640
3736
  label: t("create space invitation label"),
@@ -3650,28 +3746,28 @@ var SpaceManagerImpl = (props) => {
3650
3746
  localStorage.setItem(activeActionKey, nextAction);
3651
3747
  };
3652
3748
  const visibleInvitations = showInactiveInvitations ? invitations : invitations?.filter((invitation) => ![
3653
- Invitation7.State.CANCELLED
3749
+ Invitation8.State.CANCELLED
3654
3750
  ].includes(invitation.get().state));
3655
- return /* @__PURE__ */ React39.createElement(React39.Fragment, null, /* @__PURE__ */ React39.createElement(ScrollArea.Root, {
3751
+ return /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement(ScrollArea.Root, {
3656
3752
  classNames: "grow shrink basis-28 -mli-2"
3657
- }, /* @__PURE__ */ React39.createElement(ScrollArea.Viewport, {
3753
+ }, /* @__PURE__ */ React37.createElement(ScrollArea.Viewport, {
3658
3754
  classNames: "is-full pie-2"
3659
- }, !!visibleInvitations?.length && /* @__PURE__ */ React39.createElement(React39.Fragment, null, /* @__PURE__ */ React39.createElement("h3", {
3660
- className: mx24(headingFragment, descriptionText11)
3661
- }, t("invitation list heading")), /* @__PURE__ */ React39.createElement(InvitationListComponent, {
3755
+ }, !!visibleInvitations?.length && /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement("h3", {
3756
+ className: mx24(headingFragment, descriptionText12)
3757
+ }, t("invitation list heading")), /* @__PURE__ */ React37.createElement(InvitationListComponent, {
3662
3758
  className: "mb-2",
3663
3759
  send,
3664
3760
  invitations: visibleInvitations ?? [],
3665
3761
  onClickRemove: (invitation) => invitation.cancel(),
3666
3762
  createInvitationUrl
3667
- }), /* @__PURE__ */ React39.createElement("h3", {
3668
- className: mx24(headingFragment, descriptionText11, "mbs-2")
3669
- }, t("space member list heading"))), /* @__PURE__ */ React39.createElement(SpaceMemberListComponent, {
3763
+ }), /* @__PURE__ */ React37.createElement("h3", {
3764
+ className: mx24(headingFragment, descriptionText12, "mbs-2")
3765
+ }, t("space member list heading"))), /* @__PURE__ */ React37.createElement(SpaceMemberListComponent, {
3670
3766
  spaceKey: space.key,
3671
3767
  includeSelf: true
3672
- })), /* @__PURE__ */ React39.createElement(ScrollArea.Scrollbar, {
3768
+ })), /* @__PURE__ */ React37.createElement(ScrollArea.Scrollbar, {
3673
3769
  orientation: "vertical"
3674
- }, /* @__PURE__ */ React39.createElement(ScrollArea.Thumb, null))), /* @__PURE__ */ React39.createElement(Actions, null, /* @__PURE__ */ React39.createElement(BifurcatedAction, {
3770
+ }, /* @__PURE__ */ React37.createElement(ScrollArea.Thumb, null))), /* @__PURE__ */ React37.createElement(Actions, null, /* @__PURE__ */ React37.createElement(BifurcatedAction, {
3675
3771
  disabled: !active,
3676
3772
  actions: inviteActions,
3677
3773
  activeAction,
@@ -3681,49 +3777,47 @@ var SpaceManagerImpl = (props) => {
3681
3777
  };
3682
3778
 
3683
3779
  // packages/sdk/shell/src/panels/SpacePanel/SpacePanel.tsx
3684
- var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/SpacePanel.tsx";
3780
+ var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/SpacePanel.tsx";
3685
3781
  var SpacePanelHeading = ({ titleId, space, onDone }) => {
3686
- const { t } = useTranslation24("os");
3782
+ const { t } = useTranslation22("os");
3687
3783
  const name = space.properties.name;
3688
- return /* @__PURE__ */ React40.createElement(Heading, {
3784
+ return /* @__PURE__ */ React38.createElement(Heading, {
3689
3785
  titleId,
3690
3786
  title: t("space panel heading"),
3691
- corner: /* @__PURE__ */ React40.createElement(CloseButton, {
3787
+ corner: /* @__PURE__ */ React38.createElement(CloseButton, {
3692
3788
  "data-testid": "identity-panel-done",
3693
3789
  onDone
3694
3790
  })
3695
- }, /* @__PURE__ */ React40.createElement("div", {
3791
+ }, /* @__PURE__ */ React38.createElement("div", {
3696
3792
  role: "none",
3697
3793
  className: "flex gap-4 items-center justify-center mlb-4"
3698
- }, /* @__PURE__ */ React40.createElement(Planet, {
3794
+ }, /* @__PURE__ */ React38.createElement(Planet, {
3699
3795
  size: 32,
3700
3796
  weight: "light"
3701
- }), /* @__PURE__ */ React40.createElement("div", {
3797
+ }), /* @__PURE__ */ React38.createElement("div", {
3702
3798
  className: "block text-start font-light text-xl"
3703
3799
  }, name ?? space.key.truncate())));
3704
3800
  };
3705
3801
  var SpacePanelImpl = (props) => {
3706
3802
  const { titleId, activeView, space, target, SpaceManager: SpaceManagerComponent = SpaceManager, InvitationManager: InvitationManagerComponent = InvitationManager, ...rest } = props;
3707
- return /* @__PURE__ */ React40.createElement(DensityProvider3, {
3708
- density: "fine"
3709
- }, /* @__PURE__ */ React40.createElement(SpacePanelHeading, {
3803
+ return /* @__PURE__ */ React38.createElement(React38.Fragment, null, /* @__PURE__ */ React38.createElement(SpacePanelHeading, {
3710
3804
  ...rest,
3711
3805
  titleId,
3712
3806
  space
3713
- }), /* @__PURE__ */ React40.createElement(Viewport.Root, {
3807
+ }), /* @__PURE__ */ React38.createElement(Viewport.Root, {
3714
3808
  activeView
3715
- }, /* @__PURE__ */ React40.createElement(Viewport.Views, null, /* @__PURE__ */ React40.createElement(Viewport.View, {
3809
+ }, /* @__PURE__ */ React38.createElement(Viewport.Views, null, /* @__PURE__ */ React38.createElement(Viewport.View, {
3716
3810
  id: "space manager",
3717
3811
  classNames: stepStyles
3718
- }, /* @__PURE__ */ React40.createElement(SpaceManagerComponent, {
3812
+ }, /* @__PURE__ */ React38.createElement(SpaceManagerComponent, {
3719
3813
  active: activeView === "space manager",
3720
3814
  space,
3721
3815
  target,
3722
3816
  ...rest
3723
- })), /* @__PURE__ */ React40.createElement(Viewport.View, {
3817
+ })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3724
3818
  id: "space invitation manager",
3725
3819
  classNames: stepStyles
3726
- }, /* @__PURE__ */ React40.createElement(InvitationManagerComponent, {
3820
+ }, /* @__PURE__ */ React38.createElement(InvitationManagerComponent, {
3727
3821
  active: activeView === "space invitation manager",
3728
3822
  ...rest,
3729
3823
  invitationUrl: props.invitationUrl
@@ -3731,7 +3825,7 @@ var SpacePanelImpl = (props) => {
3731
3825
  };
3732
3826
  var SpacePanelWithInvitationImpl = ({ invitation, ...props }) => {
3733
3827
  const invitationStatus = useInvitationStatus3(invitation);
3734
- return /* @__PURE__ */ React40.createElement(SpacePanelImpl, {
3828
+ return /* @__PURE__ */ React38.createElement(SpacePanelImpl, {
3735
3829
  ...props,
3736
3830
  ...invitationStatus,
3737
3831
  invitationUrl: props.createInvitationUrl(invitationStatus.invitationCode)
@@ -3744,10 +3838,10 @@ var SpacePanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => code,
3744
3838
  space: props.space
3745
3839
  }
3746
3840
  });
3747
- useEffect6(() => {
3841
+ useEffect7(() => {
3748
3842
  const subscription = spaceService.subscribe((state) => {
3749
- log13("[state]", state, {
3750
- F: __dxlog_file12,
3843
+ log12("[state]", state, {
3844
+ F: __dxlog_file13,
3751
3845
  L: 94,
3752
3846
  S: void 0,
3753
3847
  C: (f, a) => f(...a)
@@ -3778,24 +3872,24 @@ var SpacePanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => code,
3778
3872
  };
3779
3873
  return spaceState.context.invitation ? (
3780
3874
  // TODO(wittjosiah): Unused? Remove?
3781
- /* @__PURE__ */ React40.createElement(SpacePanelWithInvitationImpl, {
3875
+ /* @__PURE__ */ React38.createElement(SpacePanelWithInvitationImpl, {
3782
3876
  ...implProps,
3783
3877
  invitation: spaceState.context.invitation
3784
3878
  })
3785
- ) : /* @__PURE__ */ React40.createElement(SpacePanelImpl, implProps);
3879
+ ) : /* @__PURE__ */ React38.createElement(SpacePanelImpl, implProps);
3786
3880
  };
3787
3881
 
3788
3882
  // packages/sdk/shell/src/panels/StatusPanel/StatusPanel.tsx
3789
- import React41 from "react";
3790
- import { Status, useTranslation as useTranslation25 } from "@dxos/react-ui";
3883
+ import React39 from "react";
3884
+ import { Status, useTranslation as useTranslation23 } from "@dxos/react-ui";
3791
3885
  var StatusPanel = ({ titleId }) => {
3792
- const { t } = useTranslation25("os");
3793
- return /* @__PURE__ */ React41.createElement("div", {
3886
+ const { t } = useTranslation23("os");
3887
+ return /* @__PURE__ */ React39.createElement("div", {
3794
3888
  className: "grid place-items-center p-2 gap-2"
3795
- }, /* @__PURE__ */ React41.createElement("p", {
3889
+ }, /* @__PURE__ */ React39.createElement("p", {
3796
3890
  id: titleId,
3797
3891
  className: "font-medium text-center"
3798
- }, t("resetting message")), /* @__PURE__ */ React41.createElement(Status, {
3892
+ }, t("resetting message")), /* @__PURE__ */ React39.createElement(Status, {
3799
3893
  indeterminate: true
3800
3894
  }, t("resetting message")));
3801
3895
  };
@@ -3803,102 +3897,102 @@ var StatusPanel = ({ titleId }) => {
3803
3897
  // packages/sdk/shell/src/composites/IdentityDialog/IdentityDialog.tsx
3804
3898
  var IdentityDialog = (props) => {
3805
3899
  const titleId = useId10("identityDialog__title", props.title);
3806
- return /* @__PURE__ */ React42.createElement(Dialog.Root, {
3900
+ return /* @__PURE__ */ React40.createElement(Dialog.Root, {
3807
3901
  defaultOpen: true,
3808
3902
  onOpenChange: (open) => open || props.onDone?.()
3809
- }, /* @__PURE__ */ React42.createElement(Dialog.Portal, null, /* @__PURE__ */ React42.createElement(Dialog.Overlay, null, /* @__PURE__ */ React42.createElement(Dialog.Content, {
3903
+ }, /* @__PURE__ */ React40.createElement(Dialog.Portal, null, /* @__PURE__ */ React40.createElement(Dialog.Overlay, null, /* @__PURE__ */ React40.createElement(Dialog.Content, {
3810
3904
  "aria-labelledby": titleId,
3811
3905
  onOpenAutoFocus: (e) => e.preventDefault()
3812
- }, /* @__PURE__ */ React42.createElement(ClipboardProvider, null, /* @__PURE__ */ React42.createElement(IdentityPanel, {
3906
+ }, /* @__PURE__ */ React40.createElement(ClipboardProvider, null, /* @__PURE__ */ React40.createElement(IdentityPanel, {
3813
3907
  ...props,
3814
3908
  titleId,
3815
- doneActionParent: /* @__PURE__ */ React42.createElement(Dialog.Close, {
3909
+ doneActionParent: /* @__PURE__ */ React40.createElement(Dialog.Close, {
3816
3910
  asChild: true
3817
3911
  })
3818
3912
  }))))));
3819
3913
  };
3820
3914
 
3821
3915
  // packages/sdk/shell/src/composites/JoinDialog/JoinDialog.tsx
3822
- import React43 from "react";
3916
+ import React41 from "react";
3823
3917
  import { AlertDialog, useId as useId11, useVisualViewport } from "@dxos/react-ui";
3824
3918
  var JoinDialog = (joinPanelProps) => {
3825
3919
  const titleId = useId11("joinDialog__title");
3826
3920
  const { height } = useVisualViewport();
3827
- return /* @__PURE__ */ React43.createElement(AlertDialog.Root, {
3921
+ return /* @__PURE__ */ React41.createElement(AlertDialog.Root, {
3828
3922
  defaultOpen: true,
3829
3923
  onOpenChange: (open) => open || (joinPanelProps.onExit ? joinPanelProps.onExit() : joinPanelProps.onDone?.(null))
3830
- }, /* @__PURE__ */ React43.createElement(AlertDialog.Portal, null, /* @__PURE__ */ React43.createElement(AlertDialog.Overlay, {
3924
+ }, /* @__PURE__ */ React41.createElement(AlertDialog.Portal, null, /* @__PURE__ */ React41.createElement(AlertDialog.Overlay, {
3831
3925
  classNames: "backdrop-blur",
3832
3926
  ...height && {
3833
3927
  style: {
3834
3928
  blockSize: `${height}px`
3835
3929
  }
3836
3930
  }
3837
- }, /* @__PURE__ */ React43.createElement(AlertDialog.Content, {
3931
+ }, /* @__PURE__ */ React41.createElement(AlertDialog.Content, {
3838
3932
  "aria-labelledby": titleId
3839
- }, /* @__PURE__ */ React43.createElement(JoinPanel, {
3933
+ }, /* @__PURE__ */ React41.createElement(JoinPanel, {
3840
3934
  ...joinPanelProps,
3841
3935
  titleId,
3842
- exitActionParent: /* @__PURE__ */ React43.createElement(AlertDialog.Cancel, {
3936
+ exitActionParent: /* @__PURE__ */ React41.createElement(AlertDialog.Cancel, {
3843
3937
  asChild: true
3844
3938
  }),
3845
- doneActionParent: /* @__PURE__ */ React43.createElement(AlertDialog.Action, {
3939
+ doneActionParent: /* @__PURE__ */ React41.createElement(AlertDialog.Action, {
3846
3940
  asChild: true
3847
3941
  })
3848
3942
  })))));
3849
3943
  };
3850
3944
 
3851
3945
  // packages/sdk/shell/src/composites/Shell/run-shell.tsx
3852
- import React47, { StrictMode } from "react";
3946
+ import React45, { StrictMode } from "react";
3853
3947
  import { createRoot } from "react-dom/client";
3854
3948
  import { DEFAULT_CLIENT_CHANNEL, DEFAULT_SHELL_CHANNEL } from "@dxos/client-protocol";
3855
3949
  import { AgentHostingProvider, ClientProvider, ClientServicesProxy, Config, ShellDisplay as ShellDisplay2 } from "@dxos/react-client";
3856
- import { Button as Button11, Dialog as Dialog3, ThemeProvider, Tooltip as Tooltip8, useTranslation as useTranslation26 } from "@dxos/react-ui";
3950
+ import { Button as Button11, Dialog as Dialog3, ThemeProvider, Tooltip as Tooltip8, useTranslation as useTranslation24 } from "@dxos/react-ui";
3857
3951
  import { defaultTx } from "@dxos/react-ui-theme";
3858
3952
  import { createIFramePort } from "@dxos/rpc-tunnel";
3859
3953
 
3860
3954
  // packages/sdk/shell/src/composites/Shell/Shell.tsx
3861
- import React46, { useEffect as useEffect7, useState as useState13 } from "react";
3862
- import { log as log14 } from "@dxos/log";
3863
- import { useClient as useClient7 } from "@dxos/react-client";
3955
+ import React44, { useEffect as useEffect8, useState as useState13 } from "react";
3956
+ import { log as log13 } from "@dxos/log";
3957
+ import { useClient as useClient9 } from "@dxos/react-client";
3864
3958
  import { ShellDisplay, ShellLayout } from "@dxos/react-client";
3865
3959
  import { useSpace as useSpace2 } from "@dxos/react-client/echo";
3866
3960
 
3867
3961
  // packages/sdk/shell/src/composites/SpaceDialog/SpaceDialog.tsx
3868
- import React44 from "react";
3962
+ import React42 from "react";
3869
3963
  import { Dialog as Dialog2, useId as useId12 } from "@dxos/react-ui";
3870
3964
  var SpaceDialog = (spacePanelProps) => {
3871
3965
  const titleId = useId12("spaceDialog__title");
3872
- return /* @__PURE__ */ React44.createElement(Dialog2.Root, {
3966
+ return /* @__PURE__ */ React42.createElement(Dialog2.Root, {
3873
3967
  defaultOpen: true,
3874
3968
  onOpenChange: (open) => open || spacePanelProps.onDone?.()
3875
- }, /* @__PURE__ */ React44.createElement(Dialog2.Portal, null, /* @__PURE__ */ React44.createElement(Dialog2.Overlay, null, /* @__PURE__ */ React44.createElement(Dialog2.Content, {
3969
+ }, /* @__PURE__ */ React42.createElement(Dialog2.Portal, null, /* @__PURE__ */ React42.createElement(Dialog2.Overlay, null, /* @__PURE__ */ React42.createElement(Dialog2.Content, {
3876
3970
  "aria-labelledby": titleId
3877
- }, /* @__PURE__ */ React44.createElement(ClipboardProvider, null, /* @__PURE__ */ React44.createElement(SpacePanel, {
3971
+ }, /* @__PURE__ */ React42.createElement(ClipboardProvider, null, /* @__PURE__ */ React42.createElement(SpacePanel, {
3878
3972
  ...spacePanelProps,
3879
3973
  titleId,
3880
- doneActionParent: /* @__PURE__ */ React44.createElement(Dialog2.Close, {
3974
+ doneActionParent: /* @__PURE__ */ React42.createElement(Dialog2.Close, {
3881
3975
  asChild: true
3882
3976
  })
3883
3977
  }))))));
3884
3978
  };
3885
3979
 
3886
3980
  // packages/sdk/shell/src/composites/StatusDialog/StatusDialog.tsx
3887
- import React45 from "react";
3981
+ import React43 from "react";
3888
3982
  import { AlertDialog as AlertDialog2, useId as useId13 } from "@dxos/react-ui";
3889
3983
  var StatusDialog = () => {
3890
3984
  const titleId = useId13("statusDialog__title");
3891
- return /* @__PURE__ */ React45.createElement(AlertDialog2.Root, {
3985
+ return /* @__PURE__ */ React43.createElement(AlertDialog2.Root, {
3892
3986
  open: true
3893
- }, /* @__PURE__ */ React45.createElement(AlertDialog2.Portal, null, /* @__PURE__ */ React45.createElement(AlertDialog2.Overlay, null, /* @__PURE__ */ React45.createElement(AlertDialog2.Content, {
3987
+ }, /* @__PURE__ */ React43.createElement(AlertDialog2.Portal, null, /* @__PURE__ */ React43.createElement(AlertDialog2.Overlay, null, /* @__PURE__ */ React43.createElement(AlertDialog2.Content, {
3894
3988
  "aria-labelledby": titleId
3895
- }, /* @__PURE__ */ React45.createElement(StatusPanel, {
3989
+ }, /* @__PURE__ */ React43.createElement(StatusPanel, {
3896
3990
  titleId
3897
3991
  })))));
3898
3992
  };
3899
3993
 
3900
3994
  // packages/sdk/shell/src/composites/Shell/Shell.tsx
3901
- var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/composites/Shell/Shell.tsx";
3995
+ var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/composites/Shell/Shell.tsx";
3902
3996
  var blurActiveElement = () => document.activeElement?.blur?.();
3903
3997
  var Shell = ({ runtime }) => {
3904
3998
  const [{ layout, invitationCode, spaceKey, spaceId, target }, setLayout] = useState13({
@@ -3913,7 +4007,7 @@ var Shell = ({ runtime }) => {
3913
4007
  deviceInvitationParam: runtime.deviceInvitationParam,
3914
4008
  spaceInvitationParam: runtime.spaceInvitationParam
3915
4009
  });
3916
- const client = useClient7();
4010
+ const client = useClient9();
3917
4011
  const space = useSpace2(spaceId ?? spaceKey);
3918
4012
  const createDeviceInvitationUrl = (invitationCode2) => {
3919
4013
  const baseUrl = new URL(invitationUrl);
@@ -3925,7 +4019,7 @@ var Shell = ({ runtime }) => {
3925
4019
  baseUrl.searchParams.set(spaceInvitationParam, invitationCode2);
3926
4020
  return baseUrl.toString();
3927
4021
  };
3928
- useEffect7(() => {
4022
+ useEffect8(() => {
3929
4023
  const unsubscribeLayout = runtime.layoutUpdate.on((request) => setLayout(request));
3930
4024
  const unsubscribeInvitationUrl = runtime.invitationUrlUpdate.on((request) => setInvitationUrl(request));
3931
4025
  return () => {
@@ -3935,10 +4029,10 @@ var Shell = ({ runtime }) => {
3935
4029
  }, [
3936
4030
  runtime
3937
4031
  ]);
3938
- useEffect7(() => {
4032
+ useEffect8(() => {
3939
4033
  if (layout === ShellLayout.SPACE && !space) {
3940
- log14.warn("No space found for shell space invitations.", void 0, {
3941
- F: __dxlog_file13,
4034
+ log13.warn("No space found for shell space invitations.", void 0, {
4035
+ F: __dxlog_file14,
3942
4036
  L: 67,
3943
4037
  S: void 0,
3944
4038
  C: (f, a) => f(...a)
@@ -3960,19 +4054,19 @@ var Shell = ({ runtime }) => {
3960
4054
  ]);
3961
4055
  switch (layout) {
3962
4056
  case ShellLayout.STATUS:
3963
- return /* @__PURE__ */ React46.createElement(StatusDialog, null);
4057
+ return /* @__PURE__ */ React44.createElement(StatusDialog, null);
3964
4058
  case ShellLayout.INITIALIZE_IDENTITY:
3965
4059
  case ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION:
3966
- return /* @__PURE__ */ React46.createElement(JoinDialog, {
4060
+ return /* @__PURE__ */ React44.createElement(JoinDialog, {
3967
4061
  mode: "halo-only",
3968
4062
  initialDisposition: layout === ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION ? "accept-halo-invitation" : "default",
3969
4063
  initialInvitationCode: invitationCode,
3970
4064
  onCancelResetStorage: () => runtime.setLayout({
3971
4065
  layout: ShellLayout.IDENTITY
3972
4066
  }),
3973
- onDone: () => {
4067
+ onDone: async () => {
3974
4068
  blurActiveElement();
3975
- void runtime.setAppContext({
4069
+ await runtime.setAppContext({
3976
4070
  display: ShellDisplay.NONE
3977
4071
  });
3978
4072
  runtime.setLayout({
@@ -3983,7 +4077,7 @@ var Shell = ({ runtime }) => {
3983
4077
  case ShellLayout.IDENTITY:
3984
4078
  case ShellLayout.SHARE_IDENTITY:
3985
4079
  case ShellLayout.EDIT_PROFILE:
3986
- return /* @__PURE__ */ React46.createElement(IdentityDialog, {
4080
+ return /* @__PURE__ */ React44.createElement(IdentityDialog, {
3987
4081
  createInvitationUrl: createDeviceInvitationUrl,
3988
4082
  onResetStorage: async () => {
3989
4083
  runtime.setLayout({
@@ -4000,8 +4094,10 @@ var Shell = ({ runtime }) => {
4000
4094
  layout: ShellLayout.STATUS
4001
4095
  });
4002
4096
  await client.reset();
4003
- return runtime.setLayout({
4004
- layout: ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION
4097
+ return runtime.setAppContext({
4098
+ display: ShellDisplay.NONE,
4099
+ reset: true,
4100
+ target: "deviceInvitation"
4005
4101
  });
4006
4102
  },
4007
4103
  onDone: async () => {
@@ -4016,7 +4112,7 @@ var Shell = ({ runtime }) => {
4016
4112
  initialDisposition: layout === ShellLayout.SHARE_IDENTITY ? "manage-device-invitation" : "default"
4017
4113
  });
4018
4114
  case ShellLayout.SPACE:
4019
- return space ? /* @__PURE__ */ React46.createElement(SpaceDialog, {
4115
+ return space ? /* @__PURE__ */ React44.createElement(SpaceDialog, {
4020
4116
  space,
4021
4117
  target,
4022
4118
  createInvitationUrl: createSpaceInvitationUrl,
@@ -4031,7 +4127,7 @@ var Shell = ({ runtime }) => {
4031
4127
  }
4032
4128
  }) : null;
4033
4129
  case ShellLayout.JOIN_SPACE:
4034
- return /* @__PURE__ */ React46.createElement(JoinDialog, {
4130
+ return /* @__PURE__ */ React44.createElement(JoinDialog, {
4035
4131
  initialInvitationCode: invitationCode,
4036
4132
  onDone: async (result) => {
4037
4133
  blurActiveElement();
@@ -4063,10 +4159,10 @@ var Shell = ({ runtime }) => {
4063
4159
  // packages/sdk/shell/src/composites/Shell/shell-runtime.ts
4064
4160
  import { Event } from "@dxos/async";
4065
4161
  import { appServiceBundle, shellServiceBundle } from "@dxos/client-protocol";
4066
- import { invariant as invariant2 } from "@dxos/invariant";
4162
+ import { invariant as invariant3 } from "@dxos/invariant";
4067
4163
  import { ShellLayout as ShellLayout2 } from "@dxos/protocols/proto/dxos/iframe";
4068
4164
  import { createProtoRpcPeer } from "@dxos/rpc";
4069
- var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/composites/Shell/shell-runtime.ts";
4165
+ var __dxlog_file15 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/composites/Shell/shell-runtime.ts";
4070
4166
  var ShellRuntimeImpl = class {
4071
4167
  constructor(_port) {
4072
4168
  this._port = _port;
@@ -4122,8 +4218,8 @@ var ShellRuntimeImpl = class {
4122
4218
  });
4123
4219
  }
4124
4220
  async setAppContext(context) {
4125
- invariant2(this._appRpc, "runtime not open", {
4126
- F: __dxlog_file14,
4221
+ invariant3(this._appRpc, "runtime not open", {
4222
+ F: __dxlog_file15,
4127
4223
  L: 83,
4128
4224
  S: this,
4129
4225
  A: [
@@ -4201,7 +4297,7 @@ var os = {
4201
4297
  "recover identity input label": "Type or paste your seed phrase",
4202
4298
  "failed to create identity message": "Failed to create an identity.",
4203
4299
  "failed to recover identity message": "Failed to recover an identity from the provided seed phrase.",
4204
- "failed to authenticate message": "Incorrect PIN.",
4300
+ "failed to authenticate message": "Incorrect code.",
4205
4301
  "identity added label": "Created identity & added to this device:",
4206
4302
  "join space as identity heading": "<part>as </part><part><icon/><label>{{labelValue}}</label></part>",
4207
4303
  "error status label": "Failed",
@@ -4209,8 +4305,8 @@ var os = {
4209
4305
  "cancelled status label": "Cancelled",
4210
4306
  "init status label": "Ready to connect",
4211
4307
  "connecting status label": "Connecting\u2026",
4212
- "connected status label": "Enter confirmation PIN",
4213
- "authenticating status label": "Enter confirmation PIN",
4308
+ "connected status label": "Enter authentication code",
4309
+ "authenticating status label": "Enter authentication code",
4214
4310
  "success status label": "Success",
4215
4311
  "cancel label": "Cancel",
4216
4312
  "done label": "Done",
@@ -4313,7 +4409,8 @@ var os = {
4313
4409
  "destroying agent label": "Stopping agent\u2026",
4314
4410
  "getting agent label": "Checking agent status\u2026",
4315
4411
  "agent requested label": "Agent requested",
4316
- "agent requested description": "The agent service is creating an agent for you. Once the agent connects, it will display in the devices list."
4412
+ "agent requested description": "The agent service is creating an agent for you. Once the agent connects, it will display in the devices list.",
4413
+ "authenticating label": "Authenticating\u2026"
4317
4414
  };
4318
4415
 
4319
4416
  // packages/sdk/shell/src/translations/index.ts
@@ -4331,24 +4428,25 @@ var runShell = async (config = new Config()) => {
4331
4428
  const services = new ClientServicesProxy(createIFramePort({
4332
4429
  channel: DEFAULT_CLIENT_CHANNEL
4333
4430
  }));
4334
- createRoot(document.getElementById("root")).render(/* @__PURE__ */ React47.createElement(StrictMode, null, /* @__PURE__ */ React47.createElement(ThemeProvider, {
4431
+ createRoot(document.getElementById("root")).render(/* @__PURE__ */ React45.createElement(StrictMode, null, /* @__PURE__ */ React45.createElement(ThemeProvider, {
4335
4432
  tx: defaultTx,
4336
4433
  resourceExtensions: [
4337
4434
  osTranslations
4338
4435
  ]
4339
- }, /* @__PURE__ */ React47.createElement(ClientProvider, {
4436
+ }, /* @__PURE__ */ React45.createElement(ClientProvider, {
4340
4437
  config,
4341
- services
4342
- }, /* @__PURE__ */ React47.createElement(ClipboardProvider, null, /* @__PURE__ */ React47.createElement(Tooltip8.Provider, null, /* @__PURE__ */ React47.createElement(AgentHostingProvider, null, /* @__PURE__ */ React47.createElement(Shell, {
4438
+ services,
4439
+ noBanner: true
4440
+ }, /* @__PURE__ */ React45.createElement(ClipboardProvider, null, /* @__PURE__ */ React45.createElement(Tooltip8.Provider, null, /* @__PURE__ */ React45.createElement(AgentHostingProvider, null, /* @__PURE__ */ React45.createElement(Shell, {
4343
4441
  runtime
4344
4442
  }))))))));
4345
4443
  } catch {
4346
- createRoot(document.getElementById("root")).render(/* @__PURE__ */ React47.createElement(StrictMode, null, /* @__PURE__ */ React47.createElement(ThemeProvider, {
4444
+ createRoot(document.getElementById("root")).render(/* @__PURE__ */ React45.createElement(StrictMode, null, /* @__PURE__ */ React45.createElement(ThemeProvider, {
4347
4445
  tx: defaultTx,
4348
4446
  resourceExtensions: [
4349
4447
  osTranslations
4350
4448
  ]
4351
- }, /* @__PURE__ */ React47.createElement(Fallback, {
4449
+ }, /* @__PURE__ */ React45.createElement(Fallback, {
4352
4450
  onClose: () => runtime.setAppContext({
4353
4451
  display: ShellDisplay2.NONE
4354
4452
  })
@@ -4356,22 +4454,22 @@ var runShell = async (config = new Config()) => {
4356
4454
  }
4357
4455
  };
4358
4456
  var Fallback = ({ onClose }) => {
4359
- const { t } = useTranslation26("os");
4360
- return /* @__PURE__ */ React47.createElement(Dialog3.Root, {
4457
+ const { t } = useTranslation24("os");
4458
+ return /* @__PURE__ */ React45.createElement(Dialog3.Root, {
4361
4459
  modal: true,
4362
4460
  open: true,
4363
4461
  onOpenChange: () => onClose?.()
4364
- }, /* @__PURE__ */ React47.createElement(Dialog3.Overlay, null, /* @__PURE__ */ React47.createElement(Dialog3.Content, null, /* @__PURE__ */ React47.createElement(Dialog3.Title, null, t("shell fallback title")), /* @__PURE__ */ React47.createElement(Dialog3.Close, {
4462
+ }, /* @__PURE__ */ React45.createElement(Dialog3.Overlay, null, /* @__PURE__ */ React45.createElement(Dialog3.Content, null, /* @__PURE__ */ React45.createElement(Dialog3.Title, null, t("shell fallback title")), /* @__PURE__ */ React45.createElement(Dialog3.Close, {
4365
4463
  asChild: true,
4366
4464
  onClick: () => onClose?.()
4367
- }, /* @__PURE__ */ React47.createElement(Button11, {
4465
+ }, /* @__PURE__ */ React45.createElement(Button11, {
4368
4466
  variant: "primary"
4369
4467
  }, t("close label"))))));
4370
4468
  };
4371
4469
 
4372
4470
  // packages/sdk/shell/src/composites/Shell/ShellContext.tsx
4373
- import React48, { createContext as createContext2, useCallback as useCallback8, useContext as useContext2, useEffect as useEffect8, useMemo as useMemo6, useState as useState14 } from "react";
4374
- import { useClient as useClient8, ShellDisplay as ShellDisplay3, ShellLayout as ShellLayout4 } from "@dxos/react-client";
4471
+ import React46, { createContext as createContext2, useCallback as useCallback8, useContext as useContext2, useEffect as useEffect9, useMemo as useMemo6, useState as useState14 } from "react";
4472
+ import { useClient as useClient10, ShellDisplay as ShellDisplay3, ShellLayout as ShellLayout4 } from "@dxos/react-client";
4375
4473
  import { useIdentity as useIdentity3 } from "@dxos/react-client/halo";
4376
4474
  import { mx as mx25 } from "@dxos/react-ui-theme";
4377
4475
 
@@ -4428,7 +4526,7 @@ var MemoryShellRuntime = class {
4428
4526
  // packages/sdk/shell/src/composites/Shell/ShellContext.tsx
4429
4527
  var ShellContext = /* @__PURE__ */ createContext2({});
4430
4528
  var useShell = () => {
4431
- const client = useClient8();
4529
+ const client = useClient10();
4432
4530
  const { runtime, setDisplay } = useContext2(ShellContext);
4433
4531
  const setLayout = async (layout, options) => {
4434
4532
  if (runtime) {
@@ -4449,7 +4547,7 @@ var useShell = () => {
4449
4547
  };
4450
4548
  };
4451
4549
  var ShellProvider = ({ space, deviceInvitationCode, spaceInvitationCode, onJoinedSpace, children }) => {
4452
- const client = useClient8();
4550
+ const client = useClient10();
4453
4551
  const identity = useIdentity3();
4454
4552
  const [display, setDisplay] = useState14(!identity || spaceInvitationCode || deviceInvitationCode ? ShellDisplay3.FULLSCREEN : ShellDisplay3.NONE);
4455
4553
  const shellRuntime = useMemo6(() => {
@@ -4498,7 +4596,7 @@ var ShellProvider = ({ space, deviceInvitationCode, spaceInvitationCode, onJoine
4498
4596
  space,
4499
4597
  shellRuntime
4500
4598
  ]);
4501
- useEffect8(() => {
4599
+ useEffect9(() => {
4502
4600
  if (!shellRuntime) {
4503
4601
  return;
4504
4602
  }
@@ -4508,7 +4606,7 @@ var ShellProvider = ({ space, deviceInvitationCode, spaceInvitationCode, onJoine
4508
4606
  shellRuntime,
4509
4607
  handleKeyDown
4510
4608
  ]);
4511
- useEffect8(() => {
4609
+ useEffect9(() => {
4512
4610
  if (!shellRuntime) {
4513
4611
  return;
4514
4612
  }
@@ -4521,11 +4619,11 @@ var ShellProvider = ({ space, deviceInvitationCode, spaceInvitationCode, onJoine
4521
4619
  }, [
4522
4620
  shellRuntime
4523
4621
  ]);
4524
- return /* @__PURE__ */ React48.createElement(React48.Fragment, null, shellRuntime && /* @__PURE__ */ React48.createElement("div", {
4622
+ return /* @__PURE__ */ React46.createElement(React46.Fragment, null, shellRuntime && /* @__PURE__ */ React46.createElement("div", {
4525
4623
  className: mx25(display === ShellDisplay3.NONE ? "hidden" : "")
4526
- }, /* @__PURE__ */ React48.createElement(Shell, {
4624
+ }, /* @__PURE__ */ React46.createElement(Shell, {
4527
4625
  runtime: shellRuntime
4528
- })), /* @__PURE__ */ React48.createElement(ShellContext.Provider, {
4626
+ })), /* @__PURE__ */ React46.createElement(ShellContext.Provider, {
4529
4627
  value: {
4530
4628
  runtime: shellRuntime,
4531
4629
  setDisplay