@dxos/shell 0.6.14-main.f49f251 → 0.6.14-staging.3e2eaca

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 (90) hide show
  1. package/dist/bundle/shell.mjs +5152 -5049
  2. package/dist/bundle/shell.mjs.map +1 -1
  3. package/dist/bundle/shell.umd.js +57 -57
  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 +50 -53
  8. package/dist/lib/browser/react.mjs.map +3 -3
  9. package/dist/lib/browser/testing/index.mjs +3 -39
  10. package/dist/lib/browser/testing/index.mjs.map +4 -4
  11. package/dist/lib/node/chunk-Q7SFCCGT.cjs +33 -0
  12. package/dist/lib/node/chunk-Q7SFCCGT.cjs.map +7 -0
  13. package/dist/lib/node/meta.json +1 -0
  14. package/dist/lib/node/react.cjs +4760 -0
  15. package/dist/lib/node/react.cjs.map +7 -0
  16. package/dist/lib/node/react.css +7 -0
  17. package/dist/lib/node/react.css.map +7 -0
  18. package/dist/lib/node/testing/index.cjs +183 -0
  19. package/dist/lib/node/testing/index.cjs.map +7 -0
  20. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  21. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  22. package/dist/lib/node-esm/meta.json +1 -0
  23. package/dist/lib/node-esm/react.css +7 -0
  24. package/dist/lib/node-esm/react.css.map +7 -0
  25. package/dist/lib/node-esm/react.mjs +4806 -0
  26. package/dist/lib/node-esm/react.mjs.map +7 -0
  27. package/dist/lib/node-esm/testing/index.mjs +163 -0
  28. package/dist/lib/node-esm/testing/index.mjs.map +7 -0
  29. package/dist/types/src/components/DeviceList/DeviceListItem.d.ts.map +1 -1
  30. package/dist/types/src/components/DeviceList/DeviceListItem.js +4 -10
  31. package/dist/types/src/components/DeviceList/DeviceListItem.js.map +1 -1
  32. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js +2 -2
  33. package/dist/types/src/components/IdentityList/SpaceMemberList.stories.js.map +1 -1
  34. package/dist/types/src/components/InvitationList/InvitationList.stories.js +10 -10
  35. package/dist/types/src/components/InvitationList/InvitationList.stories.js.map +1 -1
  36. package/dist/types/src/components/Panel/Action.d.ts +2 -0
  37. package/dist/types/src/components/Panel/Action.d.ts.map +1 -1
  38. package/dist/types/src/components/Panel/Action.js +16 -14
  39. package/dist/types/src/components/Panel/Action.js.map +1 -1
  40. package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
  41. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +13 -6
  42. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
  43. package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts +1 -0
  44. package/dist/types/src/panels/IdentityPanel/IdentityPanelProps.d.ts.map +1 -1
  45. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -1
  46. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +3 -3
  47. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
  48. package/dist/types/src/panels/IdentityPanel/useEdgeAgentsHandlers.d.ts.map +1 -1
  49. package/dist/types/src/panels/IdentityPanel/useEdgeAgentsHandlers.js +5 -0
  50. package/dist/types/src/panels/IdentityPanel/useEdgeAgentsHandlers.js.map +1 -1
  51. package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -1
  52. package/dist/types/src/panels/SpacePanel/SpacePanel.js +2 -2
  53. package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
  54. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js +15 -15
  55. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js.map +1 -1
  56. package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts +1 -0
  57. package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts.map +1 -1
  58. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
  59. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +5 -3
  60. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
  61. package/dist/types/src/playwright/invitations-manager.d.ts +1 -2
  62. package/dist/types/src/playwright/invitations-manager.d.ts.map +1 -1
  63. package/dist/types/src/playwright/invitations-manager.js +11 -4
  64. package/dist/types/src/playwright/invitations-manager.js.map +1 -1
  65. package/dist/types/src/playwright/invitations.spec.js +13 -9
  66. package/dist/types/src/playwright/invitations.spec.js.map +1 -1
  67. package/dist/types/src/testing/index.d.ts +0 -1
  68. package/dist/types/src/testing/index.d.ts.map +1 -1
  69. package/dist/types/src/testing/index.js +1 -1
  70. package/dist/types/src/testing/index.js.map +1 -1
  71. package/dist/types/src/testing/shell-manager.d.ts.map +1 -1
  72. package/dist/types/src/testing/shell-manager.js +2 -0
  73. package/dist/types/src/testing/shell-manager.js.map +1 -1
  74. package/package.json +38 -27
  75. package/src/components/DeviceList/DeviceListItem.tsx +38 -42
  76. package/src/components/IdentityList/SpaceMemberList.stories.tsx +1 -1
  77. package/src/components/InvitationList/InvitationList.stories.tsx +1 -1
  78. package/src/components/Panel/Action.tsx +40 -31
  79. package/src/panels/IdentityPanel/IdentityPanel.tsx +13 -3
  80. package/src/panels/IdentityPanel/IdentityPanelProps.ts +1 -0
  81. package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +5 -3
  82. package/src/panels/IdentityPanel/useEdgeAgentsHandlers.ts +7 -0
  83. package/src/panels/SpacePanel/SpacePanel.stories.tsx +1 -1
  84. package/src/panels/SpacePanel/SpacePanel.tsx +2 -1
  85. package/src/panels/SpacePanel/SpacePanelProps.ts +1 -0
  86. package/src/panels/SpacePanel/steps/SpaceManager.tsx +5 -3
  87. package/src/playwright/invitations-manager.ts +10 -4
  88. package/src/playwright/invitations.spec.ts +14 -9
  89. package/src/testing/index.ts +2 -1
  90. package/src/testing/shell-manager.ts +2 -0
@@ -74,6 +74,8 @@ class ShellManager extends scoped_shell_manager_1.ScopedShellManager {
74
74
  async createSpaceInvitation() {
75
75
  this._invitationCode = new async_1.Trigger();
76
76
  this._authCode = new async_1.Trigger();
77
+ await this.shell.getByTestId('spaces-panel.create-invitation.more').click();
78
+ await this.shell.getByTestId('spaces-panel.invite-one').click();
77
79
  await this.shell.getByTestId('spaces-panel.create-invitation').click();
78
80
  return await this._invitationCode.wait();
79
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shell-manager.js","sourceRoot":"","sources":["../../../../src/testing/shell-manager.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAIF,uCAA6C;AAE7C,iEAA4D;AAE5D,yEAAyE;AAEzE,MAAM,aAAa,GAAG,OAAO,CAAC;AAE9B,MAAa,YAAa,SAAQ,yCAAkB;IAIlD,kBAAkB;IAClB,YACoB,IAAU,EACnB,WAAW,IAAI;QAExB,KAAK,EAAE,CAAC;QAHU,SAAI,GAAJ,IAAI,CAAM;QACnB,aAAQ,GAAR,QAAQ,CAAO;QANlB,oBAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QACxC,cAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QAQxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;IACtF,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,cAAc;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,6BAA6B,CAAC,CAAC,WAAW,EAAE,CAAC;IAC7E,CAAC;IAED,KAAK,CAAC,yBAAyB;QAC7B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,SAAS,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,OAAO,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAC;IACrE,CAAC;IAED,UAAU;IAEV,KAAK,CAAC,cAAc,CAAC,IAAY;QAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,CAAC;QACxD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,sBAAsB;QAC1B,IAAI,CAAC,eAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,iCAAiC,CAAC,CAAC,KAAK,EAAE,CAAC;QACxE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW;QACf,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;QACzE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,oCAAoC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACvF,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,sCAAsC,CAAC,CAAC,KAAK,EAAE,CAAC;IAC/E,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,cAAsB;QAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,kCAAkC,CAAC,CAAC,KAAK,EAAE,CAAC;QACzE,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC,KAAK,EAAE,CAAC;QAC/E,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,wCAAwC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3F,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,0CAA0C,CAAC,CAAC,KAAK,EAAE,CAAC;IACnF,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,cAAsB;QACjD,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,QAAgB,EAAE,QAAQ,GAAG,IAAI;QACxD,yCAAyC;QACzC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClE,uGAAuG;QACvG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU;QACd,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,qBAAqB;QACzB,IAAI,CAAC,eAAe,GAAG,IAAI,eAAO,EAAU,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,IAAI,eAAO,EAAU,CAAC;QACvC,MAAM,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;QACvE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,cAAsB;QAChD,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,QAAgB;QACjC,yCAAyC;QACzC,MAAM,IAAA,aAAK,EAAC,IAAI,CAAC,CAAC;QAClB,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,OAAuB;QACrD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACvD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACjD,CAAC;YACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,WAAM,CAAC,CAAA,CAAC;IACZ,CAAC;CACF;AAhHD,oCAgHC"}
1
+ {"version":3,"file":"shell-manager.js","sourceRoot":"","sources":["../../../../src/testing/shell-manager.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/shell",
3
- "version": "0.6.14-main.f49f251",
3
+ "version": "0.6.14-staging.3e2eaca",
4
4
  "description": "DXOS’s OS experiences",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -10,8 +10,19 @@
10
10
  "exports": {
11
11
  ".": "./dist/bundle/shell.mjs",
12
12
  "./style.css": "./dist/bundle/style.css",
13
- "./react": "./dist/lib/browser/react.mjs",
14
- "./testing": "./dist/lib/browser/testing/index.mjs"
13
+ "./react": {
14
+ "types": "./dist/types/src/react.d.ts",
15
+ "browser": "./dist/lib/browser/react.mjs",
16
+ "node": "./dist/lib/node-esm/react.mjs"
17
+ },
18
+ "./testing": {
19
+ "types": "./dist/types/src/testing/index.d.ts",
20
+ "browser": "./dist/lib/browser/testing/index.mjs",
21
+ "node": {
22
+ "require": "./dist/lib/node/testing/index.cjs",
23
+ "default": "./dist/lib/node-esm/testing/index.mjs"
24
+ }
25
+ }
15
26
  },
16
27
  "types": "dist/types/src/index.d.ts",
17
28
  "typesVersions": {
@@ -42,18 +53,18 @@
42
53
  "react-qr-rounded": "^1.0.0",
43
54
  "url-join": "^5.0.0",
44
55
  "xstate": "^4.37.0",
45
- "@dxos/client-protocol": "0.6.14-main.f49f251",
46
- "@dxos/async": "0.6.14-main.f49f251",
47
- "@dxos/client-services": "0.6.14-main.f49f251",
48
- "@dxos/debug": "0.6.14-main.f49f251",
49
- "@dxos/invariant": "0.6.14-main.f49f251",
50
- "@dxos/log": "0.6.14-main.f49f251",
51
- "@dxos/display-name": "0.6.14-main.f49f251",
52
- "@dxos/protocols": "0.6.14-main.f49f251",
53
- "@dxos/rpc": "0.6.14-main.f49f251",
54
- "@dxos/react-ui-types": "0.6.14-main.f49f251",
55
- "@dxos/rpc-tunnel": "0.6.14-main.f49f251",
56
- "@dxos/util": "0.6.14-main.f49f251"
56
+ "@dxos/async": "0.6.14-staging.3e2eaca",
57
+ "@dxos/client-protocol": "0.6.14-staging.3e2eaca",
58
+ "@dxos/client-services": "0.6.14-staging.3e2eaca",
59
+ "@dxos/debug": "0.6.14-staging.3e2eaca",
60
+ "@dxos/display-name": "0.6.14-staging.3e2eaca",
61
+ "@dxos/invariant": "0.6.14-staging.3e2eaca",
62
+ "@dxos/log": "0.6.14-staging.3e2eaca",
63
+ "@dxos/protocols": "0.6.14-staging.3e2eaca",
64
+ "@dxos/react-ui-types": "0.6.14-staging.3e2eaca",
65
+ "@dxos/rpc": "0.6.14-staging.3e2eaca",
66
+ "@dxos/rpc-tunnel": "0.6.14-staging.3e2eaca",
67
+ "@dxos/util": "0.6.14-staging.3e2eaca"
57
68
  },
58
69
  "devDependencies": {
59
70
  "@phosphor-icons/react": "^2.1.5",
@@ -63,23 +74,23 @@
63
74
  "react": "~18.2.0",
64
75
  "react-dom": "~18.2.0",
65
76
  "vite": "5.4.7",
66
- "@dxos/config": "0.6.14-main.f49f251",
67
- "@dxos/protocols": "0.6.14-main.f49f251",
68
- "@dxos/random": "0.6.14-main.f49f251",
69
- "@dxos/react-client": "0.6.14-main.f49f251",
70
- "@dxos/react-hooks": "0.6.14-main.f49f251",
71
- "@dxos/react-ui": "0.6.14-main.f49f251",
72
- "@dxos/react-ui-theme": "0.6.14-main.f49f251",
73
- "@dxos/storybook-utils": "0.6.14-main.f49f251",
74
- "@dxos/test-utils": "0.6.14-main.f49f251"
77
+ "@dxos/config": "0.6.14-staging.3e2eaca",
78
+ "@dxos/protocols": "0.6.14-staging.3e2eaca",
79
+ "@dxos/random": "0.6.14-staging.3e2eaca",
80
+ "@dxos/react-client": "0.6.14-staging.3e2eaca",
81
+ "@dxos/react-hooks": "0.6.14-staging.3e2eaca",
82
+ "@dxos/react-ui": "0.6.14-staging.3e2eaca",
83
+ "@dxos/react-ui-theme": "0.6.14-staging.3e2eaca",
84
+ "@dxos/storybook-utils": "0.6.14-staging.3e2eaca",
85
+ "@dxos/test-utils": "0.6.14-staging.3e2eaca"
75
86
  },
76
87
  "peerDependencies": {
77
88
  "@phosphor-icons/react": "^2.1.5",
78
89
  "react": "~18.2.0",
79
90
  "react-dom": "~18.2.0",
80
- "@dxos/react-client": "0.6.14-main.f49f251",
81
- "@dxos/react-ui": "0.6.14-main.f49f251",
82
- "@dxos/react-ui-theme": "0.6.14-main.f49f251"
91
+ "@dxos/react-client": "0.6.14-staging.3e2eaca",
92
+ "@dxos/react-ui": "0.6.14-staging.3e2eaca",
93
+ "@dxos/react-ui-theme": "0.6.14-staging.3e2eaca"
83
94
  },
84
95
  "publishConfig": {
85
96
  "access": "public"
@@ -29,7 +29,6 @@ import {
29
29
  useTranslation,
30
30
  DropdownMenu,
31
31
  Button,
32
- Tooltip,
33
32
  } from '@dxos/react-ui';
34
33
  import { getSize } from '@dxos/react-ui-theme';
35
34
  import { keyToFallback } from '@dxos/util';
@@ -58,7 +57,7 @@ export const DeviceListItem = forwardRef<
58
57
  onClickJoinExisting,
59
58
  classNames,
60
59
  connectionState,
61
- onAgentDestroy,
60
+ onAgentDestroy: _,
62
61
  ...props
63
62
  },
64
63
  forwardedRef,
@@ -111,7 +110,8 @@ export const DeviceListItem = forwardRef<
111
110
  </Avatar.Frame>
112
111
  <Avatar.Label classNames='flex-1 text-sm truncate'>{displayName}</Avatar.Label>
113
112
  {isCurrent && <Tag color='primary'>{t('current device tag label')}</Tag>}
114
- {device.profile?.type === DeviceType.AGENT_MANAGED ? (
113
+ {/* TODO(wittjosiah): EDGE agents cannot current be turned off. */}
114
+ {/* {device.profile?.type === DeviceType.AGENT_MANAGED && (
115
115
  <Tooltip.Root>
116
116
  <Tooltip.Trigger asChild>
117
117
  <Button
@@ -130,46 +130,42 @@ export const DeviceListItem = forwardRef<
130
130
  </Tooltip.Content>
131
131
  </Tooltip.Portal>
132
132
  </Tooltip.Root>
133
- ) : (
134
- device.kind === DeviceKind.CURRENT && (
135
- <DropdownMenu.Root>
136
- <DropdownMenu.Trigger asChild>
137
- <Button
138
- variant='ghost'
139
- classNames='pli-0 is-[--rail-action] bs-[--rail-action]'
140
- data-testid={`device-list-item${isCurrent ? '-current' : ''}.options`}
141
- >
142
- <span className='sr-only'>{t('more options label')}</span>
143
- <DotsThree className={getSize(5)} />
144
- </Button>
145
- </DropdownMenu.Trigger>
146
- <DropdownMenu.Content>
147
- <DropdownMenu.Viewport>
148
- {/* <DropdownMenu.Item disabled onClick={onClickEdit}> */}
149
- {/* <PencilSimpleLine className={getSize(5)} /> */}
150
- {/* {t('edit device label')} */}
151
- {/* </DropdownMenu.Item> */}
152
- <DropdownMenu.Item
153
- data-testid='device-list-item-current.join-existing'
154
- onClick={onClickJoinExisting}
155
- >
156
- <ShareFat className={getSize(5)} />
157
- {t('choose join new identity label')}
158
- </DropdownMenu.Item>
159
- {onClickRecover && (
160
- <DropdownMenu.Item data-testid='device-list-item-current.recover' onClick={onClickRecover}>
161
- <FirstAidKit className={getSize(5)} />
162
- {t('choose recover identity label')}
163
- </DropdownMenu.Item>
164
- )}
165
- <DropdownMenu.Item data-testid='device-list-item-current.reset' onClick={onClickReset}>
166
- <Power className={getSize(5)} />
167
- {t('reset device label')}
133
+ )} */}
134
+ {device.kind === DeviceKind.CURRENT && (
135
+ <DropdownMenu.Root>
136
+ <DropdownMenu.Trigger asChild>
137
+ <Button
138
+ variant='ghost'
139
+ classNames='pli-0 is-[--rail-action] bs-[--rail-action]'
140
+ data-testid={`device-list-item${isCurrent ? '-current' : ''}.options`}
141
+ >
142
+ <span className='sr-only'>{t('more options label')}</span>
143
+ <DotsThree className={getSize(5)} />
144
+ </Button>
145
+ </DropdownMenu.Trigger>
146
+ <DropdownMenu.Content>
147
+ <DropdownMenu.Viewport>
148
+ {/* <DropdownMenu.Item disabled onClick={onClickEdit}> */}
149
+ {/* <PencilSimpleLine className={getSize(5)} /> */}
150
+ {/* {t('edit device label')} */}
151
+ {/* </DropdownMenu.Item> */}
152
+ <DropdownMenu.Item data-testid='device-list-item-current.join-existing' onClick={onClickJoinExisting}>
153
+ <ShareFat className={getSize(5)} />
154
+ {t('choose join new identity label')}
155
+ </DropdownMenu.Item>
156
+ {onClickRecover && (
157
+ <DropdownMenu.Item data-testid='device-list-item-current.recover' onClick={onClickRecover}>
158
+ <FirstAidKit className={getSize(5)} />
159
+ {t('choose recover identity label')}
168
160
  </DropdownMenu.Item>
169
- </DropdownMenu.Viewport>
170
- </DropdownMenu.Content>
171
- </DropdownMenu.Root>
172
- )
161
+ )}
162
+ <DropdownMenu.Item data-testid='device-list-item-current.reset' onClick={onClickReset}>
163
+ <Power className={getSize(5)} />
164
+ {t('reset device label')}
165
+ </DropdownMenu.Item>
166
+ </DropdownMenu.Viewport>
167
+ </DropdownMenu.Content>
168
+ </DropdownMenu.Root>
173
169
  )}
174
170
  </Avatar.Root>
175
171
  </ListItem.Root>
@@ -9,7 +9,7 @@ import React from 'react';
9
9
  import { withTheme } from '@dxos/storybook-utils';
10
10
 
11
11
  import { SpaceMemberListImpl } from './SpaceMemberList';
12
- import { alice } from '../../testing';
12
+ import { alice } from '../../testing/fixtures';
13
13
 
14
14
  export default {
15
15
  title: 'sdk/shell/SpaceMemberList',
@@ -10,7 +10,7 @@ import { Invitation } from '@dxos/react-client/invitations';
10
10
  import { withLayout, withTheme } from '@dxos/storybook-utils';
11
11
 
12
12
  import { InvitationList } from './InvitationList';
13
- import { inviteWithState } from '../../testing';
13
+ import { inviteWithState } from '../../testing/fixtures';
14
14
 
15
15
  export default {
16
16
  title: 'sdk/shell/InvitationList',
@@ -17,6 +17,7 @@ export type ActionMenuItem = {
17
17
  label: string;
18
18
  description: string;
19
19
  icon: FC<IconProps>;
20
+ testId?: string;
20
21
  } & Pick<ButtonProps, 'onClick'>;
21
22
 
22
23
  export type BifurcatedActionProps = {
@@ -24,6 +25,7 @@ export type BifurcatedActionProps = {
24
25
  activeAction?: string;
25
26
  onChangeActiveAction?: Dispatch<SetStateAction<string>>;
26
27
  defaultActiveAction?: string;
28
+ 'data-testid'?: string;
27
29
  } & Omit<LargeButtonProps, 'children' | 'onClick'>;
28
30
 
29
31
  const defaultActions = {
@@ -44,9 +46,12 @@ export const BifurcatedAction = forwardRef<HTMLButtonElement, BifurcatedActionPr
44
46
  activeAction: propsActiveAction,
45
47
  onChangeActiveAction,
46
48
  defaultActiveAction,
49
+ 'data-testid': testId,
47
50
  ...rest
48
51
  } = props;
49
52
 
53
+ const dropdownTestId = testId && `${testId}.more`;
54
+
50
55
  const [activeActionKey = Object.keys(actions)[0], setActiveAction] = useControllableState({
51
56
  prop: propsActiveAction,
52
57
  onChange: onChangeActiveAction,
@@ -64,6 +69,7 @@ export const BifurcatedAction = forwardRef<HTMLButtonElement, BifurcatedActionPr
64
69
  classNames={['bs-11 flex-1 min-is-0 flex gap-2 rounded-ie-none', classNames]}
65
70
  ref={forwardedRef}
66
71
  variant={variant}
72
+ data-testid={testId}
67
73
  onClick={activeAction.onClick}
68
74
  >
69
75
  {activeAction.icon && <activeAction.icon className={getSize(5)} />}
@@ -71,42 +77,45 @@ export const BifurcatedAction = forwardRef<HTMLButtonElement, BifurcatedActionPr
71
77
  </Button>
72
78
  <DropdownMenu.Root>
73
79
  <DropdownMenu.Trigger asChild>
74
- <Button classNames={['bs-11 flex-none rounded-is-none', classNames]}>
80
+ <Button classNames={['bs-11 flex-none rounded-is-none', classNames]} data-testid={dropdownTestId}>
75
81
  <span className='sr-only'>{t('invite options label')}</span>
76
82
  <CaretDown className={getSize(4)} />
77
83
  </Button>
78
84
  </DropdownMenu.Trigger>
79
85
  {/* TODO(thure): Putting `DropdownMenu.Portal` here breaks highlighting and focus. Why? */}
80
- <DropdownMenu.Content>
81
- <DropdownMenu.Viewport>
82
- {Object.entries(actions).map(([id, action]) => {
83
- return (
84
- <DropdownMenu.CheckboxItem
85
- key={id}
86
- aria-labelledby={`${id}__label`}
87
- aria-describedby={`${id}__description`}
88
- checked={activeActionKey === id}
89
- onCheckedChange={(checked) => checked && setActiveAction(id)}
90
- classNames='gap-2'
91
- >
92
- {action.icon && <action.icon className={getSize(5)} />}
93
- <div role='none' className='flex-1 min-is-0 space-b-1'>
94
- <p id={`${id}__label`}>{action.label}</p>
95
- {action.description && (
96
- <p id={`${id}__description`} className={descriptionText}>
97
- {action.description}
98
- </p>
99
- )}
100
- </div>
101
- <DropdownMenu.ItemIndicator asChild>
102
- <Check weight='bold' className={getSize(4)} />
103
- </DropdownMenu.ItemIndicator>
104
- </DropdownMenu.CheckboxItem>
105
- );
106
- })}
107
- </DropdownMenu.Viewport>
108
- <DropdownMenu.Arrow />
109
- </DropdownMenu.Content>
86
+ <DropdownMenu.Portal>
87
+ <DropdownMenu.Content>
88
+ <DropdownMenu.Viewport>
89
+ {Object.entries(actions).map(([id, action]) => {
90
+ return (
91
+ <DropdownMenu.CheckboxItem
92
+ key={id}
93
+ aria-labelledby={`${id}__label`}
94
+ aria-describedby={`${id}__description`}
95
+ checked={activeActionKey === id}
96
+ onCheckedChange={(checked) => checked && setActiveAction(id)}
97
+ classNames='gap-2'
98
+ data-testid={action.testId}
99
+ >
100
+ {action.icon && <action.icon className={getSize(5)} />}
101
+ <div role='none' className='flex-1 min-is-0 space-b-1'>
102
+ <p id={`${id}__label`}>{action.label}</p>
103
+ {action.description && (
104
+ <p id={`${id}__description`} className={descriptionText}>
105
+ {action.description}
106
+ </p>
107
+ )}
108
+ </div>
109
+ <DropdownMenu.ItemIndicator asChild>
110
+ <Check weight='bold' className={getSize(4)} />
111
+ </DropdownMenu.ItemIndicator>
112
+ </DropdownMenu.CheckboxItem>
113
+ );
114
+ })}
115
+ </DropdownMenu.Viewport>
116
+ <DropdownMenu.Arrow />
117
+ </DropdownMenu.Content>
118
+ </DropdownMenu.Portal>
110
119
  </DropdownMenu.Root>
111
120
  </div>
112
121
  );
@@ -47,6 +47,7 @@ const IdentityHeading = ({
47
47
  titleId,
48
48
  title,
49
49
  identity,
50
+ hideRecover,
50
51
  onDone,
51
52
  onUpdateProfile,
52
53
  connectionState,
@@ -80,7 +81,6 @@ const IdentityHeading = ({
80
81
  };
81
82
 
82
83
  const isConnected = connectionState === ConnectionState.ONLINE;
83
- const isProduction = client.config.values.runtime?.app?.env?.DX_ENVIRONMENT === 'production';
84
84
 
85
85
  return (
86
86
  <Heading titleId={titleId} title={title} corner={<CloseButton onDone={onDone} />}>
@@ -132,7 +132,7 @@ const IdentityHeading = ({
132
132
  </Tooltip.Portal>
133
133
  </Tooltip.Root>
134
134
  {/* TODO(wittjosiah): Remove. This should have its own flow. */}
135
- {!isProduction && (
135
+ {!hideRecover && (
136
136
  <Tooltip.Root>
137
137
  <Tooltip.Trigger asChild>
138
138
  <Toolbar.Button classNames='bs-[--rail-action]' onClick={handleRecoveryCode}>
@@ -199,11 +199,21 @@ export const IdentityPanelImpl = (props: IdentityPanelImplProps) => {
199
199
  }, [activeView, t]);
200
200
 
201
201
  const onCancelReset = () => rest.send?.('unchooseAction');
202
+ const hideRecover = rest.agentStatus !== 'created';
202
203
 
203
204
  return (
204
205
  <>
205
206
  <IdentityHeading
206
- {...{ identity, titleId, title, onDone, onUpdateProfile, connectionState, onChangeConnectionState }}
207
+ {...{
208
+ identity,
209
+ titleId,
210
+ title,
211
+ hideRecover,
212
+ onDone,
213
+ onUpdateProfile,
214
+ connectionState,
215
+ onChangeConnectionState,
216
+ }}
207
217
  />
208
218
  <Viewport.Root activeView={activeView}>
209
219
  <Viewport.Views>
@@ -49,6 +49,7 @@ export type IdentityPanelHeadingProps = Pick<
49
49
  'titleId' | 'identity' | 'onDone' | 'onUpdateProfile' | 'connectionState' | 'onChangeConnectionState'
50
50
  > & {
51
51
  title: string;
52
+ hideRecover?: boolean;
52
53
  };
53
54
 
54
55
  export type IdentityPanelStepProps = Pick<
@@ -59,7 +59,9 @@ export const IdentityActionChooserImpl = ({
59
59
  onClickReset,
60
60
  ...agentProps
61
61
  }: IdentityActionChooserImplProps) => {
62
- const managedDeviceAvailable = devices.find((device) => device.profile?.type === DeviceType.AGENT_MANAGED);
62
+ const edgeDeviceAvailable = devices.find(
63
+ (device) => device.profile?.type === DeviceType.AGENT_MANAGED && device.profile?.os?.toUpperCase() === 'EDGE',
64
+ );
63
65
  return (
64
66
  <div role='none' className='bs-40 grow overflow-y-auto overflow-x-hidden'>
65
67
  <DeviceList
@@ -67,11 +69,11 @@ export const IdentityActionChooserImpl = ({
67
69
  connectionState={connectionState}
68
70
  onClickAdd={onClickAdd}
69
71
  onClickJoinExisting={onClickJoinExisting}
70
- onClickRecover={onClickRecover}
72
+ onClickRecover={agentProps.agentStatus === 'created' ? onClickRecover : undefined}
71
73
  onClickReset={onClickReset}
72
74
  onAgentDestroy={agentProps.onAgentDestroy!}
73
75
  />
74
- {!managedDeviceAvailable && agentHostingEnabled && <AgentConfig {...(agentProps as AgentFormProps)} />}
76
+ {!edgeDeviceAvailable && agentHostingEnabled && <AgentConfig {...(agentProps as AgentFormProps)} />}
75
77
  </div>
76
78
  );
77
79
  };
@@ -7,6 +7,7 @@ import { useEffect, useState } from 'react';
7
7
  import { type CancellableInvitation } from '@dxos/client-protocol';
8
8
  import { invariant } from '@dxos/invariant';
9
9
  import { QueryAgentStatusResponse } from '@dxos/protocols/proto/dxos/client/services';
10
+ import { EdgeReplicationSetting } from '@dxos/protocols/proto/dxos/echo/metadata';
10
11
  import { useClient } from '@dxos/react-client';
11
12
  import { type Identity } from '@dxos/react-client/halo';
12
13
 
@@ -24,6 +25,7 @@ export const useEdgeAgentHandlers = ({
24
25
  );
25
26
  const [agentStatus, setAgentStatus] = useState<AgentFormProps['agentStatus']>('getting');
26
27
  const client = useClient();
28
+ // TODO(wittjosiah): This should be based on HALO credentials.
27
29
  const agentHostingEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.agents);
28
30
 
29
31
  const handleStatus = (status: QueryAgentStatusResponse.AgentStatus) => {
@@ -69,6 +71,11 @@ export const useEdgeAgentHandlers = ({
69
71
  setValidationMessage('');
70
72
  try {
71
73
  await service.createAgent();
74
+ await Promise.all(
75
+ client.spaces
76
+ .get()
77
+ .map((space) => space?.internal.setEdgeReplicationPreference(EdgeReplicationSetting.ENABLED)),
78
+ );
72
79
  setAgentStatus('created');
73
80
  } catch (err: any) {
74
81
  setAgentStatus('error');
@@ -17,7 +17,7 @@ import { SpaceManagerImpl } from './steps';
17
17
  import { InvitationListItemImpl, SpaceMemberListImpl, InvitationList } from '../../components';
18
18
  import { StorybookDialog } from '../../components/StorybookDialog';
19
19
  import { InvitationManager, type InvitationManagerProps } from '../../steps';
20
- import { inviteWithState } from '../../testing';
20
+ import { inviteWithState } from '../../testing/fixtures';
21
21
 
22
22
  const noOpProps: SpacePanelImplProps = {
23
23
  titleId: 'storybookSpacePanel__title',
@@ -39,6 +39,7 @@ export const SpacePanelImpl = (props: SpacePanelImplProps) => {
39
39
  titleId,
40
40
  activeView,
41
41
  space,
42
+ hideHeading,
42
43
  target,
43
44
  SpaceManager: SpaceManagerComponent = SpaceManager,
44
45
  InvitationManager: InvitationManagerComponent = InvitationManager,
@@ -47,7 +48,7 @@ export const SpacePanelImpl = (props: SpacePanelImplProps) => {
47
48
 
48
49
  return (
49
50
  <>
50
- <SpacePanelHeading {...rest} {...{ titleId, space }} />
51
+ {!hideHeading && <SpacePanelHeading {...rest} {...{ titleId, space }} />}
51
52
  <Viewport.Root activeView={activeView}>
52
53
  <Viewport.Views>
53
54
  <Viewport.View id='space manager' classNames={stepStyles}>
@@ -16,6 +16,7 @@ export type SpacePanelImplProps = {
16
16
  titleId: string;
17
17
  activeView: string;
18
18
  send: (event: SingleOrArray<Event<any>>) => void;
19
+ hideHeading?: boolean;
19
20
  target?: string;
20
21
  createInvitationUrl: (invitationCode: string) => string;
21
22
  space: ErsatzSpace | Space;
@@ -56,6 +56,7 @@ export const SpaceManager = (props: SpaceManagerProps) => {
56
56
  label: t('invite one label'),
57
57
  description: t('invite one description'),
58
58
  icon: UserPlus,
59
+ testId: 'spaces-panel.invite-one',
59
60
  onClick: useCallback(() => {
60
61
  const invitation = space.share?.({
61
62
  type: Invitation.Type.INTERACTIVE,
@@ -68,12 +69,13 @@ export const SpaceManager = (props: SpaceManagerProps) => {
68
69
  handleInvitationEvent(invitation, subscription),
69
70
  );
70
71
  }
71
- }, [space]),
72
+ }, [space, target]),
72
73
  },
73
74
  inviteMany: {
74
75
  label: t('invite many label'),
75
76
  description: t('invite many description'),
76
77
  icon: UsersThree,
78
+ testId: 'spaces-panel.invite-many',
77
79
  onClick: useCallback(() => {
78
80
  const invitation = space.share?.({
79
81
  type: Invitation.Type.DELEGATED,
@@ -86,7 +88,7 @@ export const SpaceManager = (props: SpaceManagerProps) => {
86
88
  handleInvitationEvent(invitation, subscription),
87
89
  );
88
90
  }
89
- }, [space]),
91
+ }, [space, target]),
90
92
  },
91
93
  };
92
94
 
@@ -120,7 +122,7 @@ export const SpaceManagerImpl = (props: SpaceManagerImplProps) => {
120
122
  },
121
123
  } as Record<string, ActionMenuItem>);
122
124
 
123
- const [activeAction, setInternalActiveAction] = useState(localStorage.getItem(activeActionKey) ?? 'inviteOne');
125
+ const [activeAction, setInternalActiveAction] = useState(localStorage.getItem(activeActionKey) ?? 'inviteMany');
124
126
 
125
127
  const setActiveAction = (nextAction: string) => {
126
128
  setInternalActiveAction(nextAction);
@@ -6,7 +6,6 @@ import { expect, type Browser, type ConsoleMessage } from '@playwright/test';
6
6
 
7
7
  import { Trigger } from '@dxos/async';
8
8
  import { type Invitation } from '@dxos/react-client/invitations';
9
- import { ConnectionState } from '@dxos/react-client/mesh';
10
9
  import { setupPage } from '@dxos/test-utils/playwright';
11
10
 
12
11
  import { ScopedShellManager } from '../testing';
@@ -56,9 +55,9 @@ export class InvitationsManager extends ScopedShellManager {
56
55
 
57
56
  try {
58
57
  await selector.waitFor({ timeout: 500 });
59
- return ConnectionState.OFFLINE;
58
+ return 0;
60
59
  } catch {
61
- return ConnectionState.ONLINE;
60
+ return 1;
62
61
  }
63
62
  }
64
63
 
@@ -130,7 +129,14 @@ export class InvitationsManager extends ScopedShellManager {
130
129
 
131
130
  if (!options) {
132
131
  const peer = this.peer(id);
133
- await peer.getByTestId(`${type}s-panel.create-invitation`).click();
132
+ if (type === 'space') {
133
+ await peer.getByTestId('spaces-panel.create-invitation.more').click();
134
+ // NOTE: This is a popper portal.
135
+ await this.page.getByTestId('spaces-panel.invite-one').click();
136
+ await peer.getByTestId('spaces-panel.create-invitation').click();
137
+ } else {
138
+ await peer.getByTestId(`${type}s-panel.create-invitation`).click();
139
+ }
134
140
  return this._invitationCode.wait();
135
141
  }
136
142