@dxos/shell 0.6.14-staging.77003c1 → 0.6.14-staging.7b35391

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 (53) hide show
  1. package/dist/bundle/shell.mjs +4338 -4245
  2. package/dist/bundle/shell.mjs.map +1 -1
  3. package/dist/bundle/shell.umd.js +45 -45
  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 +40 -46
  8. package/dist/lib/browser/react.mjs.map +3 -3
  9. package/dist/lib/browser/testing/index.mjs +2 -0
  10. package/dist/lib/browser/testing/index.mjs.map +2 -2
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/react.cjs +23 -29
  13. package/dist/lib/node/react.cjs.map +3 -3
  14. package/dist/lib/node/testing/index.cjs +2 -0
  15. package/dist/lib/node/testing/index.cjs.map +2 -2
  16. package/dist/lib/node-esm/meta.json +1 -1
  17. package/dist/lib/node-esm/react.mjs +40 -46
  18. package/dist/lib/node-esm/react.mjs.map +3 -3
  19. package/dist/lib/node-esm/testing/index.mjs +2 -0
  20. package/dist/lib/node-esm/testing/index.mjs.map +2 -2
  21. package/dist/types/src/components/DeviceList/DeviceListItem.d.ts.map +1 -1
  22. package/dist/types/src/components/DeviceList/DeviceListItem.js +4 -10
  23. package/dist/types/src/components/DeviceList/DeviceListItem.js.map +1 -1
  24. package/dist/types/src/components/Panel/Action.d.ts +2 -0
  25. package/dist/types/src/components/Panel/Action.d.ts.map +1 -1
  26. package/dist/types/src/components/Panel/Action.js +16 -14
  27. package/dist/types/src/components/Panel/Action.js.map +1 -1
  28. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.d.ts.map +1 -1
  29. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js +2 -2
  30. package/dist/types/src/panels/IdentityPanel/steps/IdentityActionChooser.js.map +1 -1
  31. package/dist/types/src/panels/SpacePanel/SpacePanel.d.ts.map +1 -1
  32. package/dist/types/src/panels/SpacePanel/SpacePanel.js +2 -2
  33. package/dist/types/src/panels/SpacePanel/SpacePanel.js.map +1 -1
  34. package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts +1 -0
  35. package/dist/types/src/panels/SpacePanel/SpacePanelProps.d.ts.map +1 -1
  36. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.d.ts.map +1 -1
  37. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js +5 -3
  38. package/dist/types/src/panels/SpacePanel/steps/SpaceManager.js.map +1 -1
  39. package/dist/types/src/playwright/invitations-manager.d.ts.map +1 -1
  40. package/dist/types/src/playwright/invitations-manager.js +9 -1
  41. package/dist/types/src/playwright/invitations-manager.js.map +1 -1
  42. package/dist/types/src/testing/shell-manager.d.ts.map +1 -1
  43. package/dist/types/src/testing/shell-manager.js +2 -0
  44. package/dist/types/src/testing/shell-manager.js.map +1 -1
  45. package/package.json +25 -25
  46. package/src/components/DeviceList/DeviceListItem.tsx +38 -42
  47. package/src/components/Panel/Action.tsx +40 -31
  48. package/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx +4 -2
  49. package/src/panels/SpacePanel/SpacePanel.tsx +2 -1
  50. package/src/panels/SpacePanel/SpacePanelProps.ts +1 -0
  51. package/src/panels/SpacePanel/steps/SpaceManager.tsx +5 -3
  52. package/src/playwright/invitations-manager.ts +8 -1
  53. package/src/testing/shell-manager.ts +2 -0
@@ -576,7 +576,7 @@ import React9, { forwardRef as forwardRef2 } from "react";
576
576
  import { generateName as generateName2 } from "@dxos/display-name";
577
577
  import { Device, DeviceType, DeviceKind } from "@dxos/react-client/halo";
578
578
  import { ConnectionState } from "@dxos/react-client/mesh";
579
- import { ListItem as ListItem2, Avatar as Avatar3, useId as useId3, Tag, useTranslation as useTranslation6, DropdownMenu as DropdownMenu2, Button as Button5, Tooltip as Tooltip5 } from "@dxos/react-ui";
579
+ import { ListItem as ListItem2, Avatar as Avatar3, useId as useId3, Tag, useTranslation as useTranslation6, DropdownMenu as DropdownMenu2, Button as Button5 } from "@dxos/react-ui";
580
580
  import { getSize as getSize5 } from "@dxos/react-ui-theme";
581
581
  import { keyToFallback as keyToFallback2 } from "@dxos/util";
582
582
  var iconProps = {
@@ -586,7 +586,7 @@ var iconProps = {
586
586
  x: 8,
587
587
  y: 8
588
588
  };
589
- var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickEdit, onClickReset, onClickRecover, onClickJoinExisting, classNames, connectionState, onAgentDestroy, ...props }, forwardedRef) => {
589
+ var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickEdit, onClickReset, onClickRecover, onClickJoinExisting, classNames, connectionState, onAgentDestroy: _, ...props }, forwardedRef) => {
590
590
  const { t } = useTranslation6("os");
591
591
  const fallbackValue = keyToFallback2(device.deviceKey);
592
592
  const labelId = useId3("identityListItem__label");
@@ -620,21 +620,7 @@ var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickE
620
620
  classNames: "flex-1 text-sm truncate"
621
621
  }, displayName), isCurrent && /* @__PURE__ */ React9.createElement(Tag, {
622
622
  color: "primary"
623
- }, t("current device tag label")), device.profile?.type === DeviceType.AGENT_MANAGED ? /* @__PURE__ */ React9.createElement(Tooltip5.Root, null, /* @__PURE__ */ React9.createElement(Tooltip5.Trigger, {
624
- asChild: true
625
- }, /* @__PURE__ */ React9.createElement(Button5, {
626
- variant: "ghost",
627
- classNames: "pli-0 is-[--rail-action] bs-[--rail-action]",
628
- "data-testid": "agent.destroy",
629
- onClick: onAgentDestroy
630
- }, /* @__PURE__ */ React9.createElement("span", {
631
- className: "sr-only"
632
- }, t("destroy agent label")), /* @__PURE__ */ React9.createElement(Power2, {
633
- className: getSize5(5)
634
- }))), /* @__PURE__ */ React9.createElement(Tooltip5.Portal, null, /* @__PURE__ */ React9.createElement(Tooltip5.Content, {
635
- side: "bottom",
636
- classNames: "z-50"
637
- }, t("destroy agent label")))) : device.kind === DeviceKind.CURRENT && /* @__PURE__ */ React9.createElement(DropdownMenu2.Root, null, /* @__PURE__ */ React9.createElement(DropdownMenu2.Trigger, {
623
+ }, t("current device tag label")), device.kind === DeviceKind.CURRENT && /* @__PURE__ */ React9.createElement(DropdownMenu2.Root, null, /* @__PURE__ */ React9.createElement(DropdownMenu2.Trigger, {
638
624
  asChild: true
639
625
  }, /* @__PURE__ */ React9.createElement(Button5, {
640
626
  variant: "ghost",
@@ -702,7 +688,7 @@ import { X } from "@phosphor-icons/react";
702
688
  import { formatDistanceToNow } from "date-fns";
703
689
  import React12, { useCallback as useCallback2 } from "react";
704
690
  import { Invitation, useInvitationStatus } from "@dxos/react-client/invitations";
705
- import { Button as Button7, ListItem as ListItem3, useTranslation as useTranslation8, Avatar as Avatar4, useThemeContext as useThemeContext4, Tooltip as Tooltip6 } from "@dxos/react-ui";
691
+ import { Button as Button7, ListItem as ListItem3, useTranslation as useTranslation8, Avatar as Avatar4, useThemeContext as useThemeContext4, Tooltip as Tooltip5 } from "@dxos/react-ui";
706
692
  import { focusRing, getSize as getSize7, mx as mx9 } from "@dxos/react-ui-theme";
707
693
  import { hexToEmoji } from "@dxos/util";
708
694
 
@@ -833,11 +819,11 @@ var InvitationListItemImpl = ({ invitation, invitationStatus: propsInvitationSta
833
819
  status: avatarStatus,
834
820
  animation: avatarAnimation,
835
821
  reverseEffects
836
- }), /* @__PURE__ */ React12.createElement(Tooltip6.Root, null, /* @__PURE__ */ React12.createElement(Avatar4.Root, {
822
+ }), /* @__PURE__ */ React12.createElement(Tooltip5.Root, null, /* @__PURE__ */ React12.createElement(Avatar4.Root, {
837
823
  ...avatarProps,
838
824
  animation: avatarAnimation,
839
825
  status: avatarStatus
840
- }, /* @__PURE__ */ React12.createElement(Tooltip6.Trigger, {
826
+ }, /* @__PURE__ */ React12.createElement(Tooltip5.Trigger, {
841
827
  asChild: true
842
828
  }, /* @__PURE__ */ React12.createElement(Avatar4.Frame, {
843
829
  tabIndex: 0,
@@ -847,10 +833,10 @@ var InvitationListItemImpl = ({ invitation, invitationStatus: propsInvitationSta
847
833
  ]
848
834
  }, /* @__PURE__ */ React12.createElement(Avatar4.Fallback, {
849
835
  text: hexToEmoji(invitationId)
850
- })))), /* @__PURE__ */ React12.createElement(Tooltip6.Portal, null, /* @__PURE__ */ React12.createElement(Tooltip6.Content, {
836
+ })))), /* @__PURE__ */ React12.createElement(Tooltip5.Portal, null, /* @__PURE__ */ React12.createElement(Tooltip5.Content, {
851
837
  side: "left",
852
838
  classNames: "z-[70]"
853
- }, t(multiUse ? "invite many qr label" : "invite one qr label"), /* @__PURE__ */ React12.createElement(Tooltip6.Arrow, null)))), showShare && invitationUrl ? /* @__PURE__ */ React12.createElement(Tooltip6.Root, null, /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(Tooltip6.Trigger, {
839
+ }, t(multiUse ? "invite many qr label" : "invite one qr label"), /* @__PURE__ */ React12.createElement(Tooltip5.Arrow, null)))), showShare && invitationUrl ? /* @__PURE__ */ React12.createElement(Tooltip5.Root, null, /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement(Tooltip5.Trigger, {
854
840
  asChild: true
855
841
  }, /* @__PURE__ */ React12.createElement(Button7, {
856
842
  variant: "ghost",
@@ -863,7 +849,7 @@ var InvitationListItemImpl = ({ invitation, invitationStatus: propsInvitationSta
863
849
  }, /* @__PURE__ */ React12.createElement("span", null, t("open share panel label")))), /* @__PURE__ */ React12.createElement(CopyButtonIconOnly, {
864
850
  variant: "ghost",
865
851
  value: invitationUrl
866
- })), /* @__PURE__ */ React12.createElement(Tooltip6.Portal, null, /* @__PURE__ */ React12.createElement(Tooltip6.Content, {
852
+ })), /* @__PURE__ */ React12.createElement(Tooltip5.Portal, null, /* @__PURE__ */ React12.createElement(Tooltip5.Content, {
867
853
  side: "left",
868
854
  classNames: "z-[70]"
869
855
  }, invitationHasLifetime && /* @__PURE__ */ React12.createElement("span", null, "Expires ", invitationTimeLeft)))) : showAuthCode ? /* @__PURE__ */ React12.createElement(AuthCode, {
@@ -960,7 +946,8 @@ var defaultActions = {
960
946
  }
961
947
  };
962
948
  var BifurcatedAction = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
963
- const { classNames, variant, isFull = true, actions = defaultActions, activeAction: propsActiveAction, onChangeActiveAction, defaultActiveAction, ...rest } = props;
949
+ const { classNames, variant, isFull = true, actions = defaultActions, activeAction: propsActiveAction, onChangeActiveAction, defaultActiveAction, "data-testid": testId, ...rest } = props;
950
+ const dropdownTestId = testId && `${testId}.more`;
964
951
  const [activeActionKey2 = Object.keys(actions)[0], setActiveAction] = useControllableState3({
965
952
  prop: propsActiveAction,
966
953
  onChange: onChangeActiveAction,
@@ -979,6 +966,7 @@ var BifurcatedAction = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
979
966
  ],
980
967
  ref: forwardedRef,
981
968
  variant,
969
+ "data-testid": testId,
982
970
  onClick: activeAction.onClick
983
971
  }, activeAction.icon && /* @__PURE__ */ React15.createElement(activeAction.icon, {
984
972
  className: getSize8(5)
@@ -988,19 +976,21 @@ var BifurcatedAction = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
988
976
  classNames: [
989
977
  "bs-11 flex-none rounded-is-none",
990
978
  classNames
991
- ]
979
+ ],
980
+ "data-testid": dropdownTestId
992
981
  }, /* @__PURE__ */ React15.createElement("span", {
993
982
  className: "sr-only"
994
983
  }, t("invite options label")), /* @__PURE__ */ React15.createElement(CaretDown3, {
995
984
  className: getSize8(4)
996
- }))), /* @__PURE__ */ React15.createElement(DropdownMenu3.Content, null, /* @__PURE__ */ React15.createElement(DropdownMenu3.Viewport, null, Object.entries(actions).map(([id, action]) => {
985
+ }))), /* @__PURE__ */ React15.createElement(DropdownMenu3.Portal, null, /* @__PURE__ */ React15.createElement(DropdownMenu3.Content, null, /* @__PURE__ */ React15.createElement(DropdownMenu3.Viewport, null, Object.entries(actions).map(([id, action]) => {
997
986
  return /* @__PURE__ */ React15.createElement(DropdownMenu3.CheckboxItem, {
998
987
  key: id,
999
988
  "aria-labelledby": `${id}__label`,
1000
989
  "aria-describedby": `${id}__description`,
1001
990
  checked: activeActionKey2 === id,
1002
991
  onCheckedChange: (checked) => checked && setActiveAction(id),
1003
- classNames: "gap-2"
992
+ classNames: "gap-2",
993
+ "data-testid": action.testId
1004
994
  }, action.icon && /* @__PURE__ */ React15.createElement(action.icon, {
1005
995
  className: getSize8(5)
1006
996
  }), /* @__PURE__ */ React15.createElement("div", {
@@ -1017,7 +1007,7 @@ var BifurcatedAction = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
1017
1007
  weight: "bold",
1018
1008
  className: getSize8(4)
1019
1009
  })));
1020
- })), /* @__PURE__ */ React15.createElement(DropdownMenu3.Arrow, null))));
1010
+ })), /* @__PURE__ */ React15.createElement(DropdownMenu3.Arrow, null)))));
1021
1011
  });
1022
1012
  var Action = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
1023
1013
  const { children, classNames, variant, isFull = true, ...rest } = props;
@@ -1252,7 +1242,7 @@ import { useClient as useClient6 } from "@dxos/react-client";
1252
1242
  import { useIdentity, useDevices, useHaloInvitations as useHaloInvitations2 } from "@dxos/react-client/halo";
1253
1243
  import { useInvitationStatus as useInvitationStatus2 } from "@dxos/react-client/invitations";
1254
1244
  import { useNetworkStatus, ConnectionState as ConnectionState2 } from "@dxos/react-client/mesh";
1255
- import { Avatar as Avatar6, Input as Input2, Toolbar as Toolbar3, Tooltip as Tooltip7, useId as useId6, useTranslation as useTranslation14 } from "@dxos/react-ui";
1245
+ import { Avatar as Avatar6, Input as Input2, Toolbar as Toolbar3, Tooltip as Tooltip6, useId as useId6, useTranslation as useTranslation14 } from "@dxos/react-ui";
1256
1246
  import { getSize as getSize13 } from "@dxos/react-ui-theme";
1257
1247
  import { hexToEmoji as hexToEmoji4, hexToHue as hexToHue2, keyToFallback as keyToFallback3 } from "@dxos/util";
1258
1248
 
@@ -1420,7 +1410,7 @@ var IdentityActionChooser = (props) => {
1420
1410
  });
1421
1411
  };
1422
1412
  var IdentityActionChooserImpl = ({ devices, connectionState, agentHostingEnabled, onClickAdd, onClickJoinExisting, onClickRecover, onClickReset, ...agentProps }) => {
1423
- const managedDeviceAvailable = devices.find((device) => device.profile?.type === DeviceType2.AGENT_MANAGED);
1413
+ const edgeDeviceAvailable = devices.find((device) => device.profile?.type === DeviceType2.AGENT_MANAGED && device.profile?.os?.toUpperCase() === "EDGE");
1424
1414
  return /* @__PURE__ */ React25.createElement("div", {
1425
1415
  role: "none",
1426
1416
  className: "bs-40 grow overflow-y-auto overflow-x-hidden"
@@ -1432,7 +1422,7 @@ var IdentityActionChooserImpl = ({ devices, connectionState, agentHostingEnabled
1432
1422
  onClickRecover: agentProps.agentStatus === "created" ? onClickRecover : void 0,
1433
1423
  onClickReset,
1434
1424
  onAgentDestroy: agentProps.onAgentDestroy
1435
- }), !managedDeviceAvailable && agentHostingEnabled && /* @__PURE__ */ React25.createElement(AgentConfig, agentProps));
1425
+ }), !edgeDeviceAvailable && agentHostingEnabled && /* @__PURE__ */ React25.createElement(AgentConfig, agentProps));
1436
1426
  };
1437
1427
 
1438
1428
  // packages/sdk/shell/src/panels/IdentityPanel/steps/ProfileForm.tsx
@@ -1959,7 +1949,7 @@ var IdentityHeading = ({ titleId, title, identity, hideRecover, onDone, onUpdate
1959
1949
  hue,
1960
1950
  onChangeHue: setHue,
1961
1951
  classNames: "bs-[--rail-action]"
1962
- }), /* @__PURE__ */ React29.createElement(Tooltip7.Root, null, /* @__PURE__ */ React29.createElement(Tooltip7.Trigger, {
1952
+ }), /* @__PURE__ */ React29.createElement(Tooltip6.Root, null, /* @__PURE__ */ React29.createElement(Tooltip6.Trigger, {
1963
1953
  asChild: true
1964
1954
  }, /* @__PURE__ */ React29.createElement(Toolbar3.Button, {
1965
1955
  classNames: "bs-[--rail-action]",
@@ -1969,20 +1959,20 @@ var IdentityHeading = ({ titleId, title, identity, hideRecover, onDone, onUpdate
1969
1959
  className: "sr-only"
1970
1960
  }, t(publicKeyCopied ? "copy success label" : "copy self public key label")), /* @__PURE__ */ React29.createElement(Key, {
1971
1961
  className: getSize13(5)
1972
- }))), /* @__PURE__ */ React29.createElement(Tooltip7.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip7.Content, {
1962
+ }))), /* @__PURE__ */ React29.createElement(Tooltip6.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip6.Content, {
1973
1963
  side: "bottom",
1974
1964
  classNames: "z-50"
1975
- }, t(publicKeyCopied ? "copy success label" : "copy self public key label"), /* @__PURE__ */ React29.createElement(Tooltip7.Arrow, null)))), !hideRecover && /* @__PURE__ */ React29.createElement(Tooltip7.Root, null, /* @__PURE__ */ React29.createElement(Tooltip7.Trigger, {
1965
+ }, t(publicKeyCopied ? "copy success label" : "copy self public key label"), /* @__PURE__ */ React29.createElement(Tooltip6.Arrow, null)))), !hideRecover && /* @__PURE__ */ React29.createElement(Tooltip6.Root, null, /* @__PURE__ */ React29.createElement(Tooltip6.Trigger, {
1976
1966
  asChild: true
1977
1967
  }, /* @__PURE__ */ React29.createElement(Toolbar3.Button, {
1978
1968
  classNames: "bs-[--rail-action]",
1979
1969
  onClick: handleRecoveryCode
1980
1970
  }, /* @__PURE__ */ React29.createElement(FirstAidKit2, {
1981
1971
  className: getSize13(5)
1982
- }))), /* @__PURE__ */ React29.createElement(Tooltip7.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip7.Content, {
1972
+ }))), /* @__PURE__ */ React29.createElement(Tooltip6.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip6.Content, {
1983
1973
  side: "bottom",
1984
1974
  classNames: "z-50"
1985
- }, t("create recovery code label"), /* @__PURE__ */ React29.createElement(Tooltip7.Arrow, null)))), /* @__PURE__ */ React29.createElement(Tooltip7.Root, null, /* @__PURE__ */ React29.createElement(Tooltip7.Trigger, {
1975
+ }, t("create recovery code label"), /* @__PURE__ */ React29.createElement(Tooltip6.Arrow, null)))), /* @__PURE__ */ React29.createElement(Tooltip6.Root, null, /* @__PURE__ */ React29.createElement(Tooltip6.Trigger, {
1986
1976
  asChild: true
1987
1977
  }, /* @__PURE__ */ React29.createElement(Toolbar3.Button, {
1988
1978
  classNames: [
@@ -1996,10 +1986,10 @@ var IdentityHeading = ({ titleId, title, identity, hideRecover, onDone, onUpdate
1996
1986
  className: getSize13(5)
1997
1987
  }) : /* @__PURE__ */ React29.createElement(Plugs, {
1998
1988
  className: getSize13(5)
1999
- }))), /* @__PURE__ */ React29.createElement(Tooltip7.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip7.Content, {
1989
+ }))), /* @__PURE__ */ React29.createElement(Tooltip6.Portal, null, /* @__PURE__ */ React29.createElement(Tooltip6.Content, {
2000
1990
  side: "bottom",
2001
1991
  classNames: "z-50"
2002
- }, t(isConnected ? "disconnect label" : "connect label"), /* @__PURE__ */ React29.createElement(Tooltip7.Arrow, null)))))));
1992
+ }, t(isConnected ? "disconnect label" : "connect label"), /* @__PURE__ */ React29.createElement(Tooltip6.Arrow, null)))))));
2003
1993
  };
2004
1994
  var IdentityPanelImpl = (props) => {
2005
1995
  const { identity, titleId, activeView, onUpdateProfile, onResetStorage, onRecover, onJoinNewIdentity, IdentityActionChooser: IdentityActionChooserComponent = IdentityActionChooser, InvitationManager: InvitationManagerComponent = InvitationManager, connectionState, onChangeConnectionState, onDone, ...rest } = props;
@@ -3778,6 +3768,7 @@ var SpaceManager = (props) => {
3778
3768
  label: t("invite one label"),
3779
3769
  description: t("invite one description"),
3780
3770
  icon: UserPlus,
3771
+ testId: "spaces-panel.invite-one",
3781
3772
  onClick: useCallback7(() => {
3782
3773
  const invitation = space.share?.({
3783
3774
  type: Invitation8.Type.INTERACTIVE,
@@ -3789,13 +3780,15 @@ var SpaceManager = (props) => {
3789
3780
  const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
3790
3781
  }
3791
3782
  }, [
3792
- space
3783
+ space,
3784
+ target
3793
3785
  ])
3794
3786
  },
3795
3787
  inviteMany: {
3796
3788
  label: t("invite many label"),
3797
3789
  description: t("invite many description"),
3798
3790
  icon: UsersThree,
3791
+ testId: "spaces-panel.invite-many",
3799
3792
  onClick: useCallback7(() => {
3800
3793
  const invitation = space.share?.({
3801
3794
  type: Invitation8.Type.DELEGATED,
@@ -3807,7 +3800,8 @@ var SpaceManager = (props) => {
3807
3800
  const subscription = invitation.subscribe((invitation2) => handleInvitationEvent(invitation2, subscription));
3808
3801
  }
3809
3802
  }, [
3810
- space
3803
+ space,
3804
+ target
3811
3805
  ])
3812
3806
  }
3813
3807
  };
@@ -3830,7 +3824,7 @@ var SpaceManagerImpl = (props) => {
3830
3824
  }
3831
3825
  }
3832
3826
  };
3833
- const [activeAction, setInternalActiveAction] = useState13(localStorage.getItem(activeActionKey) ?? "inviteOne");
3827
+ const [activeAction, setInternalActiveAction] = useState13(localStorage.getItem(activeActionKey) ?? "inviteMany");
3834
3828
  const setActiveAction = (nextAction) => {
3835
3829
  setInternalActiveAction(nextAction);
3836
3830
  localStorage.setItem(activeActionKey, nextAction);
@@ -3889,8 +3883,8 @@ var SpacePanelHeading = ({ titleId, space, onDone }) => {
3889
3883
  }, name ?? space.key.truncate())));
3890
3884
  };
3891
3885
  var SpacePanelImpl = (props) => {
3892
- const { titleId, activeView, space, target, SpaceManager: SpaceManagerComponent = SpaceManager, InvitationManager: InvitationManagerComponent = InvitationManager, ...rest } = props;
3893
- return /* @__PURE__ */ React40.createElement(React40.Fragment, null, /* @__PURE__ */ React40.createElement(SpacePanelHeading, {
3886
+ const { titleId, activeView, space, hideHeading, target, SpaceManager: SpaceManagerComponent = SpaceManager, InvitationManager: InvitationManagerComponent = InvitationManager, ...rest } = props;
3887
+ return /* @__PURE__ */ React40.createElement(React40.Fragment, null, !hideHeading && /* @__PURE__ */ React40.createElement(SpacePanelHeading, {
3894
3888
  ...rest,
3895
3889
  titleId,
3896
3890
  space
@@ -3932,7 +3926,7 @@ var SpacePanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => code,
3932
3926
  const subscription = spaceService.subscribe((state) => {
3933
3927
  log13("[state]", state, {
3934
3928
  F: __dxlog_file13,
3935
- L: 94,
3929
+ L: 95,
3936
3930
  S: void 0,
3937
3931
  C: (f, a) => f(...a)
3938
3932
  });
@@ -4037,7 +4031,7 @@ import React47, { StrictMode } from "react";
4037
4031
  import { createRoot } from "react-dom/client";
4038
4032
  import { DEFAULT_CLIENT_CHANNEL, DEFAULT_SHELL_CHANNEL } from "@dxos/client-protocol";
4039
4033
  import { AgentHostingProvider, ClientProvider, ClientServicesProxy, Config, ShellDisplay as ShellDisplay2 } from "@dxos/react-client";
4040
- import { Button as Button11, Dialog as Dialog3, ThemeProvider, Tooltip as Tooltip8, useTranslation as useTranslation26 } from "@dxos/react-ui";
4034
+ import { Button as Button11, Dialog as Dialog3, ThemeProvider, Tooltip as Tooltip7, useTranslation as useTranslation26 } from "@dxos/react-ui";
4041
4035
  import { defaultTx } from "@dxos/react-ui-theme";
4042
4036
  import { createIFramePort } from "@dxos/rpc-tunnel";
4043
4037
 
@@ -4541,7 +4535,7 @@ var runShell = async (config = new Config()) => {
4541
4535
  config,
4542
4536
  services,
4543
4537
  noBanner: true
4544
- }, /* @__PURE__ */ React47.createElement(ClipboardProvider, null, /* @__PURE__ */ React47.createElement(Tooltip8.Provider, null, /* @__PURE__ */ React47.createElement(AgentHostingProvider, null, /* @__PURE__ */ React47.createElement(Shell, {
4538
+ }, /* @__PURE__ */ React47.createElement(ClipboardProvider, null, /* @__PURE__ */ React47.createElement(Tooltip7.Provider, null, /* @__PURE__ */ React47.createElement(AgentHostingProvider, null, /* @__PURE__ */ React47.createElement(Shell, {
4545
4539
  runtime
4546
4540
  }))))))));
4547
4541
  } catch {