@dxos/plugin-space 0.6.12-main.89e9959 → 0.6.12-main.ac23639

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 (65) hide show
  1. package/dist/lib/browser/{chunk-LZEGRS7H.mjs → chunk-AVLRQF6L.mjs} +1 -1
  2. package/dist/lib/browser/chunk-AVLRQF6L.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-WBMH5WIP.mjs → chunk-QK5I2EPF.mjs} +10 -3
  4. package/dist/lib/browser/chunk-QK5I2EPF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +266 -235
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/meta.mjs +1 -1
  9. package/dist/lib/browser/types/index.mjs +1 -1
  10. package/dist/lib/node/{chunk-GF3SRAQM.cjs → chunk-HE2GHO6Z.cjs} +13 -6
  11. package/dist/lib/node/chunk-HE2GHO6Z.cjs.map +7 -0
  12. package/dist/lib/node/{chunk-6CNYF6YU.cjs → chunk-P4XUXM7Y.cjs} +4 -4
  13. package/dist/lib/node/chunk-P4XUXM7Y.cjs.map +7 -0
  14. package/dist/lib/node/index.cjs +457 -425
  15. package/dist/lib/node/index.cjs.map +4 -4
  16. package/dist/lib/node/meta.cjs +5 -5
  17. package/dist/lib/node/meta.cjs.map +1 -1
  18. package/dist/lib/node/meta.json +1 -1
  19. package/dist/lib/node/types/index.cjs +11 -11
  20. package/dist/lib/node/types/index.cjs.map +1 -1
  21. package/dist/lib/node-esm/{chunk-N5VC55UM.mjs → chunk-2TR4WD6U.mjs} +10 -3
  22. package/dist/lib/node-esm/chunk-2TR4WD6U.mjs.map +7 -0
  23. package/dist/lib/node-esm/{chunk-GM2YUC77.mjs → chunk-YPQGKWHJ.mjs} +1 -1
  24. package/dist/lib/node-esm/chunk-YPQGKWHJ.mjs.map +7 -0
  25. package/dist/lib/node-esm/index.mjs +266 -235
  26. package/dist/lib/node-esm/index.mjs.map +4 -4
  27. package/dist/lib/node-esm/meta.json +1 -1
  28. package/dist/lib/node-esm/meta.mjs +1 -1
  29. package/dist/lib/node-esm/types/index.mjs +1 -1
  30. package/dist/types/src/SpacePlugin.d.ts.map +1 -1
  31. package/dist/types/src/components/FallbackSettings.d.ts +8 -0
  32. package/dist/types/src/components/FallbackSettings.d.ts.map +1 -0
  33. package/dist/types/src/components/ShareSpaceButton.stories.d.ts +2 -0
  34. package/dist/types/src/components/ShareSpaceButton.stories.d.ts.map +1 -1
  35. package/dist/types/src/components/SpacePresence.stories.d.ts +2 -0
  36. package/dist/types/src/components/SpacePresence.stories.d.ts.map +1 -1
  37. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts +2 -0
  38. package/dist/types/src/components/SyncStatus/SyncStatus.stories.d.ts.map +1 -1
  39. package/dist/types/src/components/index.d.ts +1 -2
  40. package/dist/types/src/components/index.d.ts.map +1 -1
  41. package/dist/types/src/meta.d.ts.map +1 -1
  42. package/dist/types/src/translations.d.ts +2 -0
  43. package/dist/types/src/translations.d.ts.map +1 -1
  44. package/dist/types/src/types/thread.d.ts +1 -0
  45. package/dist/types/src/types/thread.d.ts.map +1 -1
  46. package/package.json +33 -33
  47. package/src/SpacePlugin.tsx +51 -13
  48. package/src/components/FallbackSettings.tsx +35 -0
  49. package/src/components/index.ts +1 -2
  50. package/src/meta.ts +3 -1
  51. package/src/translations.ts +2 -0
  52. package/src/types/collection.ts +1 -1
  53. package/src/types/thread.ts +2 -1
  54. package/dist/lib/browser/chunk-LZEGRS7H.mjs.map +0 -7
  55. package/dist/lib/browser/chunk-WBMH5WIP.mjs.map +0 -7
  56. package/dist/lib/node/chunk-6CNYF6YU.cjs.map +0 -7
  57. package/dist/lib/node/chunk-GF3SRAQM.cjs.map +0 -7
  58. package/dist/lib/node-esm/chunk-GM2YUC77.mjs.map +0 -7
  59. package/dist/lib/node-esm/chunk-N5VC55UM.mjs.map +0 -7
  60. package/dist/types/src/components/EmptySpace.d.ts +0 -3
  61. package/dist/types/src/components/EmptySpace.d.ts.map +0 -1
  62. package/dist/types/src/components/EmptyTree.d.ts +0 -3
  63. package/dist/types/src/components/EmptyTree.d.ts.map +0 -1
  64. package/src/components/EmptySpace.tsx +0 -25
  65. package/src/components/EmptyTree.tsx +0 -25
@@ -3,7 +3,7 @@ import {
3
3
  SPACE_PLUGIN_SHORT_ID,
4
4
  SpaceAction,
5
5
  meta_default
6
- } from "./chunk-LZEGRS7H.mjs";
6
+ } from "./chunk-AVLRQF6L.mjs";
7
7
  import {
8
8
  ActorSchema,
9
9
  ChannelType,
@@ -15,11 +15,11 @@ import {
15
15
  ThreadStatus,
16
16
  ThreadType,
17
17
  parseSpaceInitPlugin
18
- } from "./chunk-WBMH5WIP.mjs";
18
+ } from "./chunk-QK5I2EPF.mjs";
19
19
 
20
20
  // packages/plugins/plugin-space/src/SpacePlugin.tsx
21
21
  import { effect, signal } from "@preact/signals-core";
22
- import React18 from "react";
22
+ import React17 from "react";
23
23
  import { LayoutAction as LayoutAction2, NavigationAction as NavigationAction3, Surface as Surface2, firstIdInPart, openIds, parseGraphPlugin, parseIntentPlugin as parseIntentPlugin3, parseMetadataResolverPlugin, parseNavigationPlugin as parseNavigationPlugin2, resolvePlugin } from "@dxos/app-framework";
24
24
  import { EventSubscriptions } from "@dxos/async";
25
25
  import { isReactiveObject as isReactiveObject2 } from "@dxos/echo-schema";
@@ -28,7 +28,7 @@ import { log as log2 } from "@dxos/log";
28
28
  import { Migrations as Migrations2 } from "@dxos/migrations";
29
29
  import { parseAttentionPlugin } from "@dxos/plugin-attention";
30
30
  import { parseClientPlugin } from "@dxos/plugin-client";
31
- import { createExtension, isGraphNode, memoize as memoize2, toSignal } from "@dxos/plugin-graph";
31
+ import { createExtension, memoize as memoize2, toSignal } from "@dxos/plugin-graph";
32
32
  import { ObservabilityAction } from "@dxos/plugin-observability/meta";
33
33
  import { PublicKey as PublicKey2 } from "@dxos/react-client";
34
34
  import { Expando, Filter, SpaceState as SpaceState3, create as create2, fullyQualifiedId as fullyQualifiedId4, getSpace as getSpace4, getTypename as getTypename2, isEchoObject as isEchoObject2, isSpace as isSpace2, loadObjectReferences } from "@dxos/react-client/echo";
@@ -159,36 +159,32 @@ var CollectionSection = ({ collection }) => {
159
159
  }, collection.name ?? t("unnamed collection label")));
160
160
  };
161
161
 
162
- // packages/plugins/plugin-space/src/components/EmptySpace.tsx
162
+ // packages/plugins/plugin-space/src/components/FallbackSettings.tsx
163
163
  import React4 from "react";
164
- import { useTranslation as useTranslation4 } from "@dxos/react-ui";
165
- import { descriptionText as descriptionText2, mx as mx3 } from "@dxos/react-ui-theme";
166
- var EmptySpace = () => {
164
+ import { Input, useTranslation as useTranslation4 } from "@dxos/react-ui";
165
+ var FallbackSettings = ({ object }) => {
167
166
  const { t } = useTranslation4(SPACE_PLUGIN);
168
167
  return /* @__PURE__ */ React4.createElement("div", {
168
+ role: "form",
169
+ className: "p-3 flex flex-col gap-2"
170
+ }, /* @__PURE__ */ React4.createElement("div", {
169
171
  role: "none",
170
- className: mx3("p-2 mli-2 mbe-2 text-center border border-dashed border-neutral-400/50 rounded-lg", descriptionText2)
171
- }, t("empty space message"));
172
- };
173
-
174
- // packages/plugins/plugin-space/src/components/EmptyTree.tsx
175
- import React5 from "react";
176
- import { useTranslation as useTranslation5 } from "@dxos/react-ui";
177
- import { descriptionText as descriptionText3, mx as mx4 } from "@dxos/react-ui-theme";
178
- var EmptyTree = () => {
179
- const { t } = useTranslation5(SPACE_PLUGIN);
180
- return /* @__PURE__ */ React5.createElement("div", {
181
- role: "none",
182
- className: mx4("p-2 mli-2 mbe-2 text-center border border-dashed border-neutral-400/50 rounded-lg", descriptionText3)
183
- }, t("empty tree message"));
172
+ className: "space-b-1"
173
+ }, /* @__PURE__ */ React4.createElement(Input.Root, null, /* @__PURE__ */ React4.createElement(Input.Label, null, t("name label")), /* @__PURE__ */ React4.createElement(Input.TextInput, {
174
+ placeholder: t("name placeholder"),
175
+ value: object.name,
176
+ onChange: (event) => {
177
+ object.name = event.target.value;
178
+ }
179
+ }))));
184
180
  };
185
181
 
186
182
  // packages/plugins/plugin-space/src/components/MenuFooter.tsx
187
183
  import { Planet } from "@phosphor-icons/react";
188
- import React6 from "react";
184
+ import React5 from "react";
189
185
  import { getSpace as getSpace2 } from "@dxos/client/echo";
190
186
  import { useClient as useClient2 } from "@dxos/react-client";
191
- import { DropdownMenu, toLocalizedString, useTranslation as useTranslation6 } from "@dxos/react-ui";
187
+ import { DropdownMenu, toLocalizedString, useTranslation as useTranslation5 } from "@dxos/react-ui";
192
188
 
193
189
  // packages/plugins/plugin-space/src/util.tsx
194
190
  import { NavigationAction as NavigationAction2 } from "@dxos/app-framework";
@@ -746,31 +742,31 @@ var cloneObject = async (object, resolve) => {
746
742
 
747
743
  // packages/plugins/plugin-space/src/components/MenuFooter.tsx
748
744
  var MenuFooter = ({ object }) => {
749
- const { t } = useTranslation6(SPACE_PLUGIN);
745
+ const { t } = useTranslation5(SPACE_PLUGIN);
750
746
  const client = useClient2();
751
747
  const space = getSpace2(object);
752
748
  const spaceName = space ? getSpaceDisplayName(space, {
753
749
  personal: client.spaces.default === space
754
750
  }) : "";
755
- return space ? /* @__PURE__ */ React6.createElement(React6.Fragment, null, /* @__PURE__ */ React6.createElement(DropdownMenu.Separator, null), /* @__PURE__ */ React6.createElement(DropdownMenu.GroupLabel, null, t("menu footer label")), /* @__PURE__ */ React6.createElement("dl", {
751
+ return space ? /* @__PURE__ */ React5.createElement(React5.Fragment, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Separator, null), /* @__PURE__ */ React5.createElement(DropdownMenu.GroupLabel, null, t("menu footer label")), /* @__PURE__ */ React5.createElement("dl", {
756
752
  className: "pis-2 mbe-2 text-xs grid grid-cols-[max-content_1fr] gap-2"
757
- }, /* @__PURE__ */ React6.createElement("dt", {
753
+ }, /* @__PURE__ */ React5.createElement("dt", {
758
754
  className: "uppercase text-[.75em] tracking-wide font-medium mbs-px self-start"
759
- }, t("location label")), /* @__PURE__ */ React6.createElement("dd", {
755
+ }, t("location label")), /* @__PURE__ */ React5.createElement("dd", {
760
756
  className: "line-clamp-3"
761
- }, /* @__PURE__ */ React6.createElement(Planet, {
757
+ }, /* @__PURE__ */ React5.createElement(Planet, {
762
758
  className: "inline-block mie-1"
763
759
  }), toLocalizedString(spaceName, t)))) : null;
764
760
  };
765
761
 
766
762
  // packages/plugins/plugin-space/src/components/MissingObject.tsx
767
- import React7, { useEffect as useEffect2, useState as useState2 } from "react";
763
+ import React6, { useEffect as useEffect2, useState as useState2 } from "react";
768
764
  import { parseIntentPlugin as parseIntentPlugin2, useResolvePlugin as useResolvePlugin2 } from "@dxos/app-framework";
769
- import { Status, useTranslation as useTranslation7 } from "@dxos/react-ui";
770
- import { baseSurface as baseSurface2, descriptionText as descriptionText4, mx as mx5 } from "@dxos/react-ui-theme";
765
+ import { Status, useTranslation as useTranslation6 } from "@dxos/react-ui";
766
+ import { baseSurface as baseSurface2, descriptionText as descriptionText2, mx as mx3 } from "@dxos/react-ui-theme";
771
767
  var WAIT_FOR_OBJECT_TIMEOUT2 = 1e3;
772
768
  var MissingObject = ({ id }) => {
773
- const { t } = useTranslation7(SPACE_PLUGIN);
769
+ const { t } = useTranslation6(SPACE_PLUGIN);
774
770
  const [waiting, setWaiting] = useState2(false);
775
771
  const intentPlugin = useResolvePlugin2(parseIntentPlugin2);
776
772
  useEffect2(() => {
@@ -792,13 +788,13 @@ var MissingObject = ({ id }) => {
792
788
  intentPlugin,
793
789
  id
794
790
  ]);
795
- return /* @__PURE__ */ React7.createElement("div", {
791
+ return /* @__PURE__ */ React6.createElement("div", {
796
792
  role: "none",
797
- className: mx5(baseSurface2, "min-bs-screen is-full flex items-center justify-center p-8")
798
- }, waiting ? /* @__PURE__ */ React7.createElement("p", {
793
+ className: mx3(baseSurface2, "min-bs-screen is-full flex items-center justify-center p-8")
794
+ }, waiting ? /* @__PURE__ */ React6.createElement("p", {
799
795
  role: "alert",
800
- className: mx5(descriptionText4, "border border-dashed border-neutral-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg")
801
- }, t("missing object message")) : /* @__PURE__ */ React7.createElement(Status, {
796
+ className: mx3(descriptionText2, "border border-dashed border-neutral-400/50 rounded-lg flex items-center justify-center p-8 font-normal text-lg")
797
+ }, t("missing object message")) : /* @__PURE__ */ React6.createElement(Status, {
802
798
  indeterminate: true,
803
799
  "aria-label": "Initializing"
804
800
  }));
@@ -806,10 +802,10 @@ var MissingObject = ({ id }) => {
806
802
 
807
803
  // packages/plugins/plugin-space/src/components/PersistenceStatus.tsx
808
804
  import { ArrowsCounterClockwise, CheckCircle as CheckCircle2, Warning } from "@phosphor-icons/react";
809
- import React8, { useEffect as useEffect3, useState as useState3 } from "react";
805
+ import React7, { useEffect as useEffect3, useState as useState3 } from "react";
810
806
  import { debounce } from "@dxos/async";
811
- import { Tooltip, useTranslation as useTranslation8 } from "@dxos/react-ui";
812
- import { getSize as getSize2, mx as mx6, staticPlaceholderText, warningText } from "@dxos/react-ui-theme";
807
+ import { Tooltip, useTranslation as useTranslation7 } from "@dxos/react-ui";
808
+ import { getSize as getSize2, mx as mx4, staticPlaceholderText, warningText } from "@dxos/react-ui-theme";
813
809
  var Status2;
814
810
  (function(Status3) {
815
811
  Status3[Status3["PERSISTED_LOCALLY"] = 0] = "PERSISTED_LOCALLY";
@@ -817,7 +813,7 @@ var Status2;
817
813
  Status3[Status3["ERROR"] = 2] = "ERROR";
818
814
  })(Status2 || (Status2 = {}));
819
815
  var PersistenceStatus = ({ db }) => {
820
- const { t } = useTranslation8(SPACE_PLUGIN);
816
+ const { t } = useTranslation7(SPACE_PLUGIN);
821
817
  const [displayMessage, setDisplayMessage] = useState3(false);
822
818
  const [status, naturalSetStatus] = useState3(0);
823
819
  const [prevStatus, setPrevStatus] = useState3(0);
@@ -834,45 +830,45 @@ var PersistenceStatus = ({ db }) => {
834
830
  ]);
835
831
  switch (status) {
836
832
  case 2:
837
- return /* @__PURE__ */ React8.createElement("div", {
833
+ return /* @__PURE__ */ React7.createElement("div", {
838
834
  className: "flex items-center"
839
- }, /* @__PURE__ */ React8.createElement(Warning, {
840
- className: mx6(getSize2(4), "me-1")
841
- }), /* @__PURE__ */ React8.createElement("span", {
842
- className: mx6("text-sm", warningText)
835
+ }, /* @__PURE__ */ React7.createElement(Warning, {
836
+ className: mx4(getSize2(4), "me-1")
837
+ }), /* @__PURE__ */ React7.createElement("span", {
838
+ className: mx4("text-sm", warningText)
843
839
  }, t("persistence error label")));
844
840
  case 1:
845
- return /* @__PURE__ */ React8.createElement("div", {
841
+ return /* @__PURE__ */ React7.createElement("div", {
846
842
  className: "flex items-center"
847
- }, /* @__PURE__ */ React8.createElement(ArrowsCounterClockwise, {
848
- className: mx6(getSize2(4), "me-1")
849
- }), /* @__PURE__ */ React8.createElement("span", {
850
- className: mx6("text-sm", staticPlaceholderText)
843
+ }, /* @__PURE__ */ React7.createElement(ArrowsCounterClockwise, {
844
+ className: mx4(getSize2(4), "me-1")
845
+ }), /* @__PURE__ */ React7.createElement("span", {
846
+ className: mx4("text-sm", staticPlaceholderText)
851
847
  }, t("persistence pending label")));
852
848
  case 0:
853
849
  default:
854
- return /* @__PURE__ */ React8.createElement(Tooltip.Root, {
850
+ return /* @__PURE__ */ React7.createElement(Tooltip.Root, {
855
851
  delayDuration: 400
856
- }, /* @__PURE__ */ React8.createElement(Tooltip.Trigger, {
852
+ }, /* @__PURE__ */ React7.createElement(Tooltip.Trigger, {
857
853
  role: "status",
858
854
  className: "flex items-center"
859
- }, /* @__PURE__ */ React8.createElement(CheckCircle2, {
860
- className: mx6(getSize2(4), "me-1")
861
- }), displayMessage && /* @__PURE__ */ React8.createElement("span", {
862
- className: mx6("text-sm", staticPlaceholderText)
863
- }, t("persisted locally label"))), /* @__PURE__ */ React8.createElement(Tooltip.Portal, null, /* @__PURE__ */ React8.createElement(Tooltip.Content, {
855
+ }, /* @__PURE__ */ React7.createElement(CheckCircle2, {
856
+ className: mx4(getSize2(4), "me-1")
857
+ }), displayMessage && /* @__PURE__ */ React7.createElement("span", {
858
+ className: mx4("text-sm", staticPlaceholderText)
859
+ }, t("persisted locally label"))), /* @__PURE__ */ React7.createElement(Tooltip.Portal, null, /* @__PURE__ */ React7.createElement(Tooltip.Content, {
864
860
  classNames: "z-10"
865
- }, t("persisted locally message"), /* @__PURE__ */ React8.createElement(Tooltip.Arrow, null))));
861
+ }, t("persisted locally message"), /* @__PURE__ */ React7.createElement(Tooltip.Arrow, null))));
866
862
  }
867
863
  };
868
864
 
869
865
  // packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx
870
- import React9, { useCallback, useRef, useState as useState4 } from "react";
866
+ import React8, { useCallback, useRef, useState as useState4 } from "react";
871
867
  import { log } from "@dxos/log";
872
- import { Button as Button2, Input, Popover, useTranslation as useTranslation9 } from "@dxos/react-ui";
868
+ import { Button as Button2, Input as Input2, Popover, useTranslation as useTranslation8 } from "@dxos/react-ui";
873
869
  var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/PopoverRenameObject.tsx";
874
870
  var PopoverRenameObject = ({ object: obj }) => {
875
- const { t } = useTranslation9(SPACE_PLUGIN);
871
+ const { t } = useTranslation8(SPACE_PLUGIN);
876
872
  const doneButton = useRef(null);
877
873
  const object = obj;
878
874
  const [name, setName] = useState4(object.name || object.title || "");
@@ -897,23 +893,23 @@ var PopoverRenameObject = ({ object: obj }) => {
897
893
  object,
898
894
  name
899
895
  ]);
900
- return /* @__PURE__ */ React9.createElement("div", {
896
+ return /* @__PURE__ */ React8.createElement("div", {
901
897
  role: "none",
902
898
  className: "p-1 flex gap-2"
903
- }, /* @__PURE__ */ React9.createElement("div", {
899
+ }, /* @__PURE__ */ React8.createElement("div", {
904
900
  role: "none",
905
901
  className: "flex-1"
906
- }, /* @__PURE__ */ React9.createElement(Input.Root, null, /* @__PURE__ */ React9.createElement(Input.Label, {
902
+ }, /* @__PURE__ */ React8.createElement(Input2.Root, null, /* @__PURE__ */ React8.createElement(Input2.Label, {
907
903
  srOnly: true
908
- }, t("object name label")), /* @__PURE__ */ React9.createElement(Input.TextInput, {
904
+ }, t("object name label")), /* @__PURE__ */ React8.createElement(Input2.TextInput, {
909
905
  placeholder: t("object title placeholder"),
910
906
  value: name,
911
907
  "data-testid": "spacePlugin.renameObject.input",
912
908
  onChange: ({ target: { value } }) => setName(value),
913
909
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
914
- }))), /* @__PURE__ */ React9.createElement(Popover.Close, {
910
+ }))), /* @__PURE__ */ React8.createElement(Popover.Close, {
915
911
  asChild: true
916
- }, /* @__PURE__ */ React9.createElement(Button2, {
912
+ }, /* @__PURE__ */ React8.createElement(Button2, {
917
913
  ref: doneButton,
918
914
  classNames: "self-stretch",
919
915
  onClick: handleDone
@@ -923,10 +919,10 @@ var PopoverRenameObject = ({ object: obj }) => {
923
919
  };
924
920
 
925
921
  // packages/plugins/plugin-space/src/components/PopoverRenameSpace.tsx
926
- import React10, { useCallback as useCallback2, useRef as useRef2, useState as useState5 } from "react";
927
- import { Button as Button3, Input as Input2, Popover as Popover2, useTranslation as useTranslation10 } from "@dxos/react-ui";
922
+ import React9, { useCallback as useCallback2, useRef as useRef2, useState as useState5 } from "react";
923
+ import { Button as Button3, Input as Input3, Popover as Popover2, useTranslation as useTranslation9 } from "@dxos/react-ui";
928
924
  var PopoverRenameSpace = ({ space }) => {
929
- const { t } = useTranslation10(SPACE_PLUGIN);
925
+ const { t } = useTranslation9(SPACE_PLUGIN);
930
926
  const doneButton = useRef2(null);
931
927
  const [name, setName] = useState5(space.properties.name ?? "");
932
928
  const handleDone = useCallback2(() => {
@@ -935,24 +931,24 @@ var PopoverRenameSpace = ({ space }) => {
935
931
  space,
936
932
  name
937
933
  ]);
938
- return /* @__PURE__ */ React10.createElement("div", {
934
+ return /* @__PURE__ */ React9.createElement("div", {
939
935
  role: "none",
940
936
  className: "p-1 flex gap-2"
941
- }, /* @__PURE__ */ React10.createElement("div", {
937
+ }, /* @__PURE__ */ React9.createElement("div", {
942
938
  role: "none",
943
939
  className: "flex-1"
944
- }, /* @__PURE__ */ React10.createElement(Input2.Root, null, /* @__PURE__ */ React10.createElement(Input2.Label, {
940
+ }, /* @__PURE__ */ React9.createElement(Input3.Root, null, /* @__PURE__ */ React9.createElement(Input3.Label, {
945
941
  srOnly: true
946
- }, t("space name label")), /* @__PURE__ */ React10.createElement(Input2.TextInput, {
942
+ }, t("space name label")), /* @__PURE__ */ React9.createElement(Input3.TextInput, {
947
943
  defaultValue: space.properties.name ?? "",
948
944
  placeholder: t("unnamed space label"),
949
945
  onChange: ({ target: { value } }) => setName(value),
950
946
  // TODO(wittjosiah): Ideally this should access the popover context to close the popover.
951
947
  // Currently this is not possible because Radix does not expose the popover context.
952
948
  onKeyDown: ({ key }) => key === "Enter" && doneButton.current?.click()
953
- }))), /* @__PURE__ */ React10.createElement(Popover2.Close, {
949
+ }))), /* @__PURE__ */ React9.createElement(Popover2.Close, {
954
950
  asChild: true
955
- }, /* @__PURE__ */ React10.createElement(Button3, {
951
+ }, /* @__PURE__ */ React9.createElement(Button3, {
956
952
  ref: doneButton,
957
953
  classNames: "self-stretch",
958
954
  onClick: handleDone
@@ -962,12 +958,12 @@ var PopoverRenameSpace = ({ space }) => {
962
958
  };
963
959
 
964
960
  // packages/plugins/plugin-space/src/components/ShareSpaceButton.tsx
965
- import React11 from "react";
961
+ import React10 from "react";
966
962
  import { useIntentDispatcher } from "@dxos/app-framework";
967
- import { Button as Button4, useTranslation as useTranslation11 } from "@dxos/react-ui";
963
+ import { Button as Button4, useTranslation as useTranslation10 } from "@dxos/react-ui";
968
964
  var ShareSpaceButton = ({ spaceId }) => {
969
965
  const dispatch = useIntentDispatcher();
970
- return /* @__PURE__ */ React11.createElement(ShareSpaceButtonImpl, {
966
+ return /* @__PURE__ */ React10.createElement(ShareSpaceButtonImpl, {
971
967
  onClick: () => dispatch({
972
968
  action: SpaceAction.SHARE,
973
969
  data: {
@@ -977,8 +973,8 @@ var ShareSpaceButton = ({ spaceId }) => {
977
973
  });
978
974
  };
979
975
  var ShareSpaceButtonImpl = ({ onClick }) => {
980
- const { t } = useTranslation11(SPACE_PLUGIN);
981
- return /* @__PURE__ */ React11.createElement(Button4, {
976
+ const { t } = useTranslation10(SPACE_PLUGIN);
977
+ return /* @__PURE__ */ React10.createElement(Button4, {
982
978
  "data-testid": "spacePlugin.shareSpaceButton",
983
979
  onClick,
984
980
  classNames: "mli-1"
@@ -987,30 +983,30 @@ var ShareSpaceButtonImpl = ({ onClick }) => {
987
983
 
988
984
  // packages/plugins/plugin-space/src/components/SpaceMain/SpaceMain.tsx
989
985
  import { Command } from "@phosphor-icons/react";
990
- import React13 from "react";
986
+ import React12 from "react";
991
987
  import { Surface } from "@dxos/app-framework";
992
988
  import { SpaceState as SpaceState2 } from "@dxos/react-client/echo";
993
- import { Main, useTranslation as useTranslation13 } from "@dxos/react-ui";
994
- import { getSize as getSize4, mx as mx8, topbarBlockPaddingStart } from "@dxos/react-ui-theme";
989
+ import { Main, useTranslation as useTranslation12 } from "@dxos/react-ui";
990
+ import { getSize as getSize4, mx as mx6, topbarBlockPaddingStart } from "@dxos/react-ui-theme";
995
991
  import { ClipboardProvider } from "@dxos/shell/react";
996
992
 
997
993
  // packages/plugins/plugin-space/src/components/SpaceMain/SpaceMembersSection.tsx
998
994
  import { CaretDown, Check, UserPlus, UsersThree } from "@phosphor-icons/react";
999
- import React12, { useCallback as useCallback3, useState as useState6 } from "react";
995
+ import React11, { useCallback as useCallback3, useState as useState6 } from "react";
1000
996
  import { LayoutAction, useIntent } from "@dxos/app-framework";
1001
997
  import { useMembers, SpaceMember, useSpaceInvitations } from "@dxos/react-client/echo";
1002
998
  import { InvitationEncoder } from "@dxos/react-client/invitations";
1003
999
  import { Invitation } from "@dxos/react-client/invitations";
1004
- import { Button as Button5, ButtonGroup, DropdownMenu as DropdownMenu2, List, useTranslation as useTranslation12 } from "@dxos/react-ui";
1005
- import { descriptionText as descriptionText5, getSize as getSize3, mx as mx7 } from "@dxos/react-ui-theme";
1000
+ import { Button as Button5, ButtonGroup, DropdownMenu as DropdownMenu2, List, useTranslation as useTranslation11 } from "@dxos/react-ui";
1001
+ import { descriptionText as descriptionText3, getSize as getSize3, mx as mx5 } from "@dxos/react-ui-theme";
1006
1002
  import { InvitationListItem, IdentityListItem } from "@dxos/shell/react";
1007
1003
  var activeActionKeyStorageKey = "dxos:react-shell/space-manager/active-action";
1008
1004
  var Presence = SpaceMember.PresenceState;
1009
1005
  var handleCreateInvitationUrl = (invitationCode) => `${origin}?spaceInvitationCode=${invitationCode}`;
1010
1006
  var SpaceMemberList = ({ members }) => {
1011
- return members.length > 0 ? /* @__PURE__ */ React12.createElement(List, {
1007
+ return members.length > 0 ? /* @__PURE__ */ React11.createElement(List, {
1012
1008
  classNames: "col-start-2 col-end-5 gap-y-1 grid grid-cols-subgrid items-center"
1013
- }, members.map((member) => /* @__PURE__ */ React12.createElement(IdentityListItem, {
1009
+ }, members.map((member) => /* @__PURE__ */ React11.createElement(IdentityListItem, {
1014
1010
  classNames: "contents",
1015
1011
  key: member.identity.identityKey.toHex(),
1016
1012
  identity: member.identity,
@@ -1018,7 +1014,7 @@ var SpaceMemberList = ({ members }) => {
1018
1014
  }))) : null;
1019
1015
  };
1020
1016
  var SpaceMembersSection = ({ space }) => {
1021
- const { t } = useTranslation12(SPACE_PLUGIN);
1017
+ const { t } = useTranslation11(SPACE_PLUGIN);
1022
1018
  const invitations = useSpaceInvitations(space.key);
1023
1019
  const { dispatch } = useIntent();
1024
1020
  const handleCloseDialog = () => dispatch({
@@ -1096,103 +1092,103 @@ var SpaceMembersSection = ({ space }) => {
1096
1092
  [Presence.ONLINE]: [],
1097
1093
  [Presence.OFFLINE]: []
1098
1094
  });
1099
- return /* @__PURE__ */ React12.createElement("section", {
1095
+ return /* @__PURE__ */ React11.createElement("section", {
1100
1096
  className: "mbe-4 col-span-3 grid gap-y-2 grid-cols-subgrid auto-rows-min"
1101
- }, /* @__PURE__ */ React12.createElement("h2", {
1097
+ }, /* @__PURE__ */ React11.createElement("h2", {
1102
1098
  className: "contents"
1103
- }, /* @__PURE__ */ React12.createElement(UsersThree, {
1099
+ }, /* @__PURE__ */ React11.createElement(UsersThree, {
1104
1100
  weight: "duotone",
1105
- className: mx7(getSize3(5), "place-self-center")
1106
- }), /* @__PURE__ */ React12.createElement("span", {
1101
+ className: mx5(getSize3(5), "place-self-center")
1102
+ }), /* @__PURE__ */ React11.createElement("span", {
1107
1103
  className: "text-lg col-span-2"
1108
- }, t("space members label"))), /* @__PURE__ */ React12.createElement("h3", {
1104
+ }, t("space members label"))), /* @__PURE__ */ React11.createElement("h3", {
1109
1105
  className: "col-start-2 col-span-3 text-sm italic text-description"
1110
- }, t("invitations heading")), invitations.length > 0 && /* @__PURE__ */ React12.createElement(List, {
1106
+ }, t("invitations heading")), invitations.length > 0 && /* @__PURE__ */ React11.createElement(List, {
1111
1107
  classNames: "col-start-2 col-span-2 gap-y-2 grid grid-cols-[var(--rail-size)_1fr_var(--rail-action)_var(--rail-action)]"
1112
- }, invitations.map((invitation) => /* @__PURE__ */ React12.createElement(InvitationListItem, {
1108
+ }, invitations.map((invitation) => /* @__PURE__ */ React11.createElement(InvitationListItem, {
1113
1109
  reverseEffects: true,
1114
1110
  classNames: "pis-0 pie-0 gap-0 col-span-4 grid grid-cols-subgrid",
1115
1111
  key: invitation.get().invitationId,
1116
1112
  invitation,
1117
1113
  send: handleInvitationSelect,
1118
1114
  createInvitationUrl: handleCreateInvitationUrl
1119
- }))), /* @__PURE__ */ React12.createElement(ButtonGroup, {
1115
+ }))), /* @__PURE__ */ React11.createElement(ButtonGroup, {
1120
1116
  classNames: "col-start-2 col-end-4 grid grid-cols-[1fr_var(--rail-action)] place-self-grow gap-px"
1121
- }, /* @__PURE__ */ React12.createElement(Button5, {
1117
+ }, /* @__PURE__ */ React11.createElement(Button5, {
1122
1118
  classNames: "gap-2",
1123
1119
  onClick: activeAction.onClick
1124
- }, /* @__PURE__ */ React12.createElement(activeAction.icon, {
1120
+ }, /* @__PURE__ */ React11.createElement(activeAction.icon, {
1125
1121
  className: getSize3(5)
1126
- }), /* @__PURE__ */ React12.createElement("span", null, t(activeAction.label, {
1122
+ }), /* @__PURE__ */ React11.createElement("span", null, t(activeAction.label, {
1127
1123
  ns: "os"
1128
- }))), /* @__PURE__ */ React12.createElement(DropdownMenu2.Root, null, /* @__PURE__ */ React12.createElement(DropdownMenu2.Trigger, {
1124
+ }))), /* @__PURE__ */ React11.createElement(DropdownMenu2.Root, null, /* @__PURE__ */ React11.createElement(DropdownMenu2.Trigger, {
1129
1125
  asChild: true
1130
- }, /* @__PURE__ */ React12.createElement(Button5, {
1126
+ }, /* @__PURE__ */ React11.createElement(Button5, {
1131
1127
  classNames: "pli-0"
1132
- }, /* @__PURE__ */ React12.createElement(CaretDown, {
1128
+ }, /* @__PURE__ */ React11.createElement(CaretDown, {
1133
1129
  className: getSize3(4)
1134
- }))), /* @__PURE__ */ React12.createElement(DropdownMenu2.Content, null, /* @__PURE__ */ React12.createElement(DropdownMenu2.Viewport, null, Object.entries(inviteActions).map(([id, action]) => {
1135
- return /* @__PURE__ */ React12.createElement(DropdownMenu2.CheckboxItem, {
1130
+ }))), /* @__PURE__ */ React11.createElement(DropdownMenu2.Content, null, /* @__PURE__ */ React11.createElement(DropdownMenu2.Viewport, null, Object.entries(inviteActions).map(([id, action]) => {
1131
+ return /* @__PURE__ */ React11.createElement(DropdownMenu2.CheckboxItem, {
1136
1132
  key: id,
1137
1133
  "aria-labelledby": `${id}__label`,
1138
1134
  "aria-describedby": `${id}__description`,
1139
1135
  checked: activeActionKey === id,
1140
1136
  onCheckedChange: (checked) => checked && setActiveActionKey(id),
1141
1137
  classNames: "gap-2"
1142
- }, action.icon && /* @__PURE__ */ React12.createElement(action.icon, {
1138
+ }, action.icon && /* @__PURE__ */ React11.createElement(action.icon, {
1143
1139
  className: getSize3(5)
1144
- }), /* @__PURE__ */ React12.createElement("div", {
1140
+ }), /* @__PURE__ */ React11.createElement("div", {
1145
1141
  role: "none",
1146
1142
  className: "flex-1 min-is-0 space-b-1"
1147
- }, /* @__PURE__ */ React12.createElement("p", {
1143
+ }, /* @__PURE__ */ React11.createElement("p", {
1148
1144
  id: `${id}__label`
1149
1145
  }, t(action.label, {
1150
1146
  ns: "os"
1151
- })), action.description && /* @__PURE__ */ React12.createElement("p", {
1147
+ })), action.description && /* @__PURE__ */ React11.createElement("p", {
1152
1148
  id: `${id}__description`,
1153
- className: descriptionText5
1149
+ className: descriptionText3
1154
1150
  }, t(action.description, {
1155
1151
  ns: "os"
1156
- }))), /* @__PURE__ */ React12.createElement(DropdownMenu2.ItemIndicator, {
1152
+ }))), /* @__PURE__ */ React11.createElement(DropdownMenu2.ItemIndicator, {
1157
1153
  asChild: true
1158
- }, /* @__PURE__ */ React12.createElement(Check, {
1154
+ }, /* @__PURE__ */ React11.createElement(Check, {
1159
1155
  className: getSize3(4)
1160
1156
  })));
1161
- })), /* @__PURE__ */ React12.createElement(DropdownMenu2.Arrow, null)))), members[Presence.ONLINE].length + members[Presence.OFFLINE].length < 1 ? /* @__PURE__ */ React12.createElement("p", {
1162
- className: mx7(descriptionText5, "text-center is-full mlb-2")
1157
+ })), /* @__PURE__ */ React11.createElement(DropdownMenu2.Arrow, null)))), members[Presence.ONLINE].length + members[Presence.OFFLINE].length < 1 ? /* @__PURE__ */ React11.createElement("p", {
1158
+ className: mx5(descriptionText3, "text-center is-full mlb-2")
1163
1159
  }, t("empty space members message", {
1164
1160
  ns: "os"
1165
- })) : /* @__PURE__ */ React12.createElement(React12.Fragment, null, /* @__PURE__ */ React12.createElement("h3", {
1161
+ })) : /* @__PURE__ */ React11.createElement(React11.Fragment, null, /* @__PURE__ */ React11.createElement("h3", {
1166
1162
  className: "col-start-2 col-end-5 text-sm italic text-description"
1167
1163
  }, t("active space members heading", {
1168
1164
  count: members[Presence.ONLINE].length
1169
- })), /* @__PURE__ */ React12.createElement(SpaceMemberList, {
1165
+ })), /* @__PURE__ */ React11.createElement(SpaceMemberList, {
1170
1166
  members: members[Presence.ONLINE]
1171
- }), /* @__PURE__ */ React12.createElement("h3", {
1167
+ }), /* @__PURE__ */ React11.createElement("h3", {
1172
1168
  className: "col-start-2 col-end-5 text-sm italic text-description"
1173
1169
  }, t("inactive space members heading", {
1174
1170
  count: members[Presence.OFFLINE].length
1175
- })), /* @__PURE__ */ React12.createElement(SpaceMemberList, {
1171
+ })), /* @__PURE__ */ React11.createElement(SpaceMemberList, {
1176
1172
  members: members[Presence.OFFLINE]
1177
1173
  })));
1178
1174
  };
1179
1175
 
1180
1176
  // packages/plugins/plugin-space/src/components/SpaceMain/SpaceMain.tsx
1181
1177
  var KeyShortcuts = () => {
1182
- const { t } = useTranslation13(SPACE_PLUGIN);
1183
- return /* @__PURE__ */ React13.createElement("section", {
1178
+ const { t } = useTranslation12(SPACE_PLUGIN);
1179
+ return /* @__PURE__ */ React12.createElement("section", {
1184
1180
  className: "mbe-4 col-span-4 md:col-start-5 md:col-end-7 grid grid-cols-subgrid gap-y-2 auto-rows-min"
1185
- }, /* @__PURE__ */ React13.createElement("h2", {
1181
+ }, /* @__PURE__ */ React12.createElement("h2", {
1186
1182
  className: "contents"
1187
- }, /* @__PURE__ */ React13.createElement(Command, {
1183
+ }, /* @__PURE__ */ React12.createElement(Command, {
1188
1184
  weight: "duotone",
1189
- className: mx8(getSize4(5), "place-self-center")
1190
- }), /* @__PURE__ */ React13.createElement("span", {
1185
+ className: mx6(getSize4(5), "place-self-center")
1186
+ }), /* @__PURE__ */ React12.createElement("span", {
1191
1187
  className: "text-lg col-span-2 md:col-span-1"
1192
- }, t("keyshortcuts label"))), /* @__PURE__ */ React13.createElement("div", {
1188
+ }, t("keyshortcuts label"))), /* @__PURE__ */ React12.createElement("div", {
1193
1189
  role: "none",
1194
1190
  className: "col-start-2 col-end-4 md:col-end-5 pie-2"
1195
- }, /* @__PURE__ */ React13.createElement(Surface, {
1191
+ }, /* @__PURE__ */ React12.createElement(Surface, {
1196
1192
  role: "keyshortcuts"
1197
1193
  })));
1198
1194
  };
@@ -1201,7 +1197,7 @@ var SpaceMain = ({ space, role }) => {
1201
1197
  const state = space.state.get();
1202
1198
  const ready = state === SpaceState2.SPACE_READY;
1203
1199
  const Root = role === "main" ? Main.Content : "div";
1204
- return /* @__PURE__ */ React13.createElement(ClipboardProvider, null, /* @__PURE__ */ React13.createElement(Root, {
1200
+ return /* @__PURE__ */ React12.createElement(ClipboardProvider, null, /* @__PURE__ */ React12.createElement(Root, {
1205
1201
  ...role === "main" ? {
1206
1202
  classNames: [
1207
1203
  topbarBlockPaddingStart,
@@ -1210,23 +1206,23 @@ var SpaceMain = ({ space, role }) => {
1210
1206
  ]
1211
1207
  } : {
1212
1208
  role: "none",
1213
- className: mx8(topbarBlockPaddingStart, "row-span-2", spaceMainLayout)
1209
+ className: mx6(topbarBlockPaddingStart, "row-span-2", spaceMainLayout)
1214
1210
  },
1215
1211
  "data-testid": `spacePlugin.${role}`,
1216
1212
  "data-isready": ready ? "true" : "false"
1217
- }, ready && /* @__PURE__ */ React13.createElement(SpaceMembersSection, {
1213
+ }, ready && /* @__PURE__ */ React12.createElement(SpaceMembersSection, {
1218
1214
  space
1219
- }), /* @__PURE__ */ React13.createElement(KeyShortcuts, null)));
1215
+ }), /* @__PURE__ */ React12.createElement(KeyShortcuts, null)));
1220
1216
  };
1221
1217
 
1222
1218
  // packages/plugins/plugin-space/src/components/SpacePresence.tsx
1223
- import React14, { useCallback as useCallback4, useEffect as useEffect4, useState as useState7 } from "react";
1219
+ import React13, { useCallback as useCallback4, useEffect as useEffect4, useState as useState7 } from "react";
1224
1220
  import { usePlugin } from "@dxos/app-framework";
1225
1221
  import { generateName } from "@dxos/display-name";
1226
1222
  import { PublicKey, useClient as useClient3 } from "@dxos/react-client";
1227
1223
  import { getSpace as getSpace3, useMembers as useMembers2, fullyQualifiedId as fullyQualifiedId3 } from "@dxos/react-client/echo";
1228
1224
  import { useIdentity } from "@dxos/react-client/halo";
1229
- import { Avatar, AvatarGroup, AvatarGroupItem, Tooltip as Tooltip2, useDensityContext, useTranslation as useTranslation14, List as List2, ListItem, useDefaultValue } from "@dxos/react-ui";
1225
+ import { Avatar, AvatarGroup, AvatarGroupItem, Tooltip as Tooltip2, useDensityContext, useTranslation as useTranslation13, List as List2, ListItem, useDefaultValue } from "@dxos/react-ui";
1230
1226
  import { AttentionGlyph } from "@dxos/react-ui-attention";
1231
1227
  import { ComplexMap, keyToFallback } from "@dxos/util";
1232
1228
  var REFRESH_INTERVAL = 5e3;
@@ -1264,9 +1260,9 @@ var SpacePresence = ({ object, spaceKey }) => {
1264
1260
  lastSeen
1265
1261
  };
1266
1262
  }).toSorted((a, b) => a.lastSeen - b.lastSeen);
1267
- return density === "fine" ? /* @__PURE__ */ React14.createElement(SmallPresence, {
1263
+ return density === "fine" ? /* @__PURE__ */ React13.createElement(SmallPresence, {
1268
1264
  count: membersForObject.length
1269
- }) : /* @__PURE__ */ React14.createElement(FullPresence, {
1265
+ }) : /* @__PURE__ */ React13.createElement(FullPresence, {
1270
1266
  members: membersForObject
1271
1267
  });
1272
1268
  };
@@ -1276,38 +1272,38 @@ var FullPresence = (props) => {
1276
1272
  if (members.length === 0) {
1277
1273
  return null;
1278
1274
  }
1279
- return /* @__PURE__ */ React14.createElement(AvatarGroup.Root, {
1275
+ return /* @__PURE__ */ React13.createElement(AvatarGroup.Root, {
1280
1276
  size,
1281
1277
  classNames: "mbs-2 mie-4",
1282
1278
  "data-testid": "spacePlugin.presence"
1283
- }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ React14.createElement(Tooltip2.Root, {
1279
+ }, members.slice(0, 3).map((member, i) => /* @__PURE__ */ React13.createElement(Tooltip2.Root, {
1284
1280
  key: member.identity.identityKey.toHex()
1285
- }, /* @__PURE__ */ React14.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React14.createElement(PrensenceAvatar, {
1281
+ }, /* @__PURE__ */ React13.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React13.createElement(PrensenceAvatar, {
1286
1282
  identity: member.identity,
1287
1283
  group: true,
1288
1284
  match: member.currentlyAttended,
1289
1285
  index: members.length - i,
1290
1286
  onClick: () => onMemberClick?.(member)
1291
- })), /* @__PURE__ */ React14.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React14.createElement(Tooltip2.Content, {
1287
+ })), /* @__PURE__ */ React13.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React13.createElement(Tooltip2.Content, {
1292
1288
  side: "bottom"
1293
- }, /* @__PURE__ */ React14.createElement("span", null, getName(member.identity)), /* @__PURE__ */ React14.createElement(Tooltip2.Arrow, null))))), members.length > 3 && /* @__PURE__ */ React14.createElement(Tooltip2.Root, null, /* @__PURE__ */ React14.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React14.createElement(AvatarGroupItem.Root, {
1289
+ }, /* @__PURE__ */ React13.createElement("span", null, getName(member.identity)), /* @__PURE__ */ React13.createElement(Tooltip2.Arrow, null))))), members.length > 3 && /* @__PURE__ */ React13.createElement(Tooltip2.Root, null, /* @__PURE__ */ React13.createElement(Tooltip2.Trigger, null, /* @__PURE__ */ React13.createElement(AvatarGroupItem.Root, {
1294
1290
  status: "inactive"
1295
- }, /* @__PURE__ */ React14.createElement(Avatar.Frame, {
1291
+ }, /* @__PURE__ */ React13.createElement(Avatar.Frame, {
1296
1292
  style: {
1297
1293
  zIndex: members.length - 4
1298
1294
  }
1299
- }, /* @__PURE__ */ React14.createElement(Avatar.Fallback, {
1295
+ }, /* @__PURE__ */ React13.createElement(Avatar.Fallback, {
1300
1296
  text: `+${members.length - 3}`
1301
- })))), /* @__PURE__ */ React14.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React14.createElement(Tooltip2.Content, {
1297
+ })))), /* @__PURE__ */ React13.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React13.createElement(Tooltip2.Content, {
1302
1298
  side: "bottom"
1303
- }, /* @__PURE__ */ React14.createElement(Tooltip2.Arrow, null), /* @__PURE__ */ React14.createElement(List2, {
1299
+ }, /* @__PURE__ */ React13.createElement(Tooltip2.Arrow, null), /* @__PURE__ */ React13.createElement(List2, {
1304
1300
  classNames: "max-h-56 overflow-y-auto"
1305
- }, members.map((member) => /* @__PURE__ */ React14.createElement(ListItem.Root, {
1301
+ }, members.map((member) => /* @__PURE__ */ React13.createElement(ListItem.Root, {
1306
1302
  key: member.identity.identityKey.toHex(),
1307
1303
  classNames: "flex gap-2 items-center cursor-pointer mbe-2",
1308
1304
  onClick: () => onMemberClick?.(member),
1309
1305
  "data-testid": "identity-list-item"
1310
- }, /* @__PURE__ */ React14.createElement(PrensenceAvatar, {
1306
+ }, /* @__PURE__ */ React13.createElement(PrensenceAvatar, {
1311
1307
  identity: member.identity,
1312
1308
  showName: true,
1313
1309
  match: member.currentlyAttended
@@ -1317,10 +1313,10 @@ var PrensenceAvatar = ({ identity, showName, match, group, index, onClick }) =>
1317
1313
  const Root = group ? AvatarGroupItem.Root : Avatar.Root;
1318
1314
  const status = match ? "current" : "active";
1319
1315
  const fallbackValue = keyToFallback(identity.identityKey);
1320
- return /* @__PURE__ */ React14.createElement(Root, {
1316
+ return /* @__PURE__ */ React13.createElement(Root, {
1321
1317
  status,
1322
1318
  hue: identity.profile?.data?.hue || fallbackValue.hue
1323
- }, /* @__PURE__ */ React14.createElement(Avatar.Frame, {
1319
+ }, /* @__PURE__ */ React13.createElement(Avatar.Frame, {
1324
1320
  "data-testid": "spacePlugin.presence.member",
1325
1321
  "data-status": status,
1326
1322
  ...index ? {
@@ -1329,9 +1325,9 @@ var PrensenceAvatar = ({ identity, showName, match, group, index, onClick }) =>
1329
1325
  }
1330
1326
  } : {},
1331
1327
  onClick: () => onClick?.()
1332
- }, /* @__PURE__ */ React14.createElement(Avatar.Fallback, {
1328
+ }, /* @__PURE__ */ React13.createElement(Avatar.Fallback, {
1333
1329
  text: identity.profile?.data?.emoji || fallbackValue.emoji
1334
- })), showName && /* @__PURE__ */ React14.createElement(Avatar.Label, {
1330
+ })), showName && /* @__PURE__ */ React13.createElement(Avatar.Label, {
1335
1331
  classNames: "text-sm truncate pli-2"
1336
1332
  }, getName(identity)));
1337
1333
  };
@@ -1342,37 +1338,37 @@ var SmallPresenceLive = ({ viewers }) => {
1342
1338
  return () => clearInterval(interval);
1343
1339
  }, []);
1344
1340
  const activeViewers = viewers ? Array.from(viewers.values()).filter(({ lastSeen }) => moment - lastSeen < ACTIVITY_DURATION) : [];
1345
- return /* @__PURE__ */ React14.createElement(SmallPresence, {
1341
+ return /* @__PURE__ */ React13.createElement(SmallPresence, {
1346
1342
  count: activeViewers.length
1347
1343
  });
1348
1344
  };
1349
1345
  var SmallPresence = ({ count }) => {
1350
- const { t } = useTranslation14(SPACE_PLUGIN);
1351
- return /* @__PURE__ */ React14.createElement(Tooltip2.Root, null, /* @__PURE__ */ React14.createElement(Tooltip2.Trigger, {
1346
+ const { t } = useTranslation13(SPACE_PLUGIN);
1347
+ return /* @__PURE__ */ React13.createElement(Tooltip2.Root, null, /* @__PURE__ */ React13.createElement(Tooltip2.Trigger, {
1352
1348
  asChild: true
1353
- }, /* @__PURE__ */ React14.createElement(AttentionGlyph, {
1349
+ }, /* @__PURE__ */ React13.createElement(AttentionGlyph, {
1354
1350
  presence: count > 1 ? "many" : count === 1 ? "one" : "none",
1355
1351
  classNames: "self-center mie-1"
1356
- })), /* @__PURE__ */ React14.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React14.createElement(Tooltip2.Content, {
1352
+ })), /* @__PURE__ */ React13.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React13.createElement(Tooltip2.Content, {
1357
1353
  side: "bottom",
1358
1354
  classNames: "z-[70]"
1359
- }, /* @__PURE__ */ React14.createElement("span", null, t("presence label", {
1355
+ }, /* @__PURE__ */ React13.createElement("span", null, t("presence label", {
1360
1356
  count
1361
- })), /* @__PURE__ */ React14.createElement(Tooltip2.Arrow, null))));
1357
+ })), /* @__PURE__ */ React13.createElement(Tooltip2.Arrow, null))));
1362
1358
  };
1363
1359
 
1364
1360
  // packages/plugins/plugin-space/src/components/SpaceSettings.tsx
1365
- import React15 from "react";
1361
+ import React14 from "react";
1366
1362
  import { useIntentDispatcher as useIntentDispatcher2, useResolvePlugins } from "@dxos/app-framework";
1367
1363
  import { SettingsValue } from "@dxos/plugin-settings";
1368
- import { Input as Input3, Select, toLocalizedString as toLocalizedString2, useTranslation as useTranslation15 } from "@dxos/react-ui";
1364
+ import { Input as Input4, Select, toLocalizedString as toLocalizedString2, useTranslation as useTranslation14 } from "@dxos/react-ui";
1369
1365
  var SpaceSettings = ({ settings }) => {
1370
- const { t } = useTranslation15(SPACE_PLUGIN);
1366
+ const { t } = useTranslation14(SPACE_PLUGIN);
1371
1367
  const dispatch = useIntentDispatcher2();
1372
1368
  const plugins = useResolvePlugins(parseSpaceInitPlugin);
1373
- return /* @__PURE__ */ React15.createElement(React15.Fragment, null, /* @__PURE__ */ React15.createElement(SettingsValue, {
1369
+ return /* @__PURE__ */ React14.createElement(React14.Fragment, null, /* @__PURE__ */ React14.createElement(SettingsValue, {
1374
1370
  label: t("show hidden spaces label")
1375
- }, /* @__PURE__ */ React15.createElement(Input3.Switch, {
1371
+ }, /* @__PURE__ */ React14.createElement(Input4.Switch, {
1376
1372
  checked: settings.showHidden,
1377
1373
  onCheckedChange: (checked) => dispatch({
1378
1374
  plugin: SPACE_PLUGIN,
@@ -1381,28 +1377,28 @@ var SpaceSettings = ({ settings }) => {
1381
1377
  state: !!checked
1382
1378
  }
1383
1379
  })
1384
- })), /* @__PURE__ */ React15.createElement(SettingsValue, {
1380
+ })), /* @__PURE__ */ React14.createElement(SettingsValue, {
1385
1381
  label: t("default on space create label")
1386
- }, /* @__PURE__ */ React15.createElement(Select.Root, {
1382
+ }, /* @__PURE__ */ React14.createElement(Select.Root, {
1387
1383
  value: settings.onSpaceCreate,
1388
1384
  onValueChange: (value) => {
1389
1385
  settings.onSpaceCreate = value;
1390
1386
  }
1391
- }, /* @__PURE__ */ React15.createElement(Select.TriggerButton, null), /* @__PURE__ */ React15.createElement(Select.Portal, null, /* @__PURE__ */ React15.createElement(Select.Content, null, /* @__PURE__ */ React15.createElement(Select.Viewport, null, plugins.map(({ provides: { space: { onSpaceCreate } } }) => /* @__PURE__ */ React15.createElement(Select.Option, {
1387
+ }, /* @__PURE__ */ React14.createElement(Select.TriggerButton, null), /* @__PURE__ */ React14.createElement(Select.Portal, null, /* @__PURE__ */ React14.createElement(Select.Content, null, /* @__PURE__ */ React14.createElement(Select.Viewport, null, plugins.map(({ provides: { space: { onSpaceCreate } } }) => /* @__PURE__ */ React14.createElement(Select.Option, {
1392
1388
  key: onSpaceCreate.action,
1393
1389
  value: onSpaceCreate.action
1394
1390
  }, toLocalizedString2(onSpaceCreate.label, t)))))))));
1395
1391
  };
1396
1392
 
1397
1393
  // packages/plugins/plugin-space/src/components/SaveStatus.tsx
1398
- import React16, { useEffect as useEffect5, useState as useState8 } from "react";
1394
+ import React15, { useEffect as useEffect5, useState as useState8 } from "react";
1399
1395
  import { Context } from "@dxos/context";
1400
1396
  import { StatusBar } from "@dxos/plugin-status-bar";
1401
1397
  import { useClient as useClient4 } from "@dxos/react-client";
1402
- import { Icon, useTranslation as useTranslation16 } from "@dxos/react-ui";
1398
+ import { Icon, useTranslation as useTranslation15 } from "@dxos/react-ui";
1403
1399
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/plugins/plugin-space/src/components/SaveStatus.tsx";
1404
1400
  var SaveStatus = () => {
1405
- const { t } = useTranslation16(SPACE_PLUGIN);
1401
+ const { t } = useTranslation15(SPACE_PLUGIN);
1406
1402
  const client = useClient4();
1407
1403
  const [state, setState] = useState8("saved");
1408
1404
  useEffect5(() => {
@@ -1410,9 +1406,9 @@ var SaveStatus = () => {
1410
1406
  setState(state2);
1411
1407
  });
1412
1408
  }, []);
1413
- return /* @__PURE__ */ React16.createElement(StatusBar.Item, {
1409
+ return /* @__PURE__ */ React15.createElement(StatusBar.Item, {
1414
1410
  title: state === "saving" ? t("saving label") : t("saved label")
1415
- }, /* @__PURE__ */ React16.createElement(Icon, {
1411
+ }, /* @__PURE__ */ React15.createElement(Icon, {
1416
1412
  icon: state === "saving" ? "ph--arrows-clockwise--regular" : "ph--check-circle--regular",
1417
1413
  size: 4
1418
1414
  }));
@@ -1477,11 +1473,11 @@ var createSpaceSaveTracker = (space, cb) => {
1477
1473
  };
1478
1474
 
1479
1475
  // packages/plugins/plugin-space/src/components/SyncStatus/SyncStatus.tsx
1480
- import React17, { useEffect as useEffect7, useState as useState10 } from "react";
1476
+ import React16, { useEffect as useEffect7, useState as useState10 } from "react";
1481
1477
  import { StatusBar as StatusBar2 } from "@dxos/plugin-status-bar";
1482
- import { Icon as Icon2, Popover as Popover3, useTranslation as useTranslation17 } from "@dxos/react-ui";
1478
+ import { Icon as Icon2, Popover as Popover3, useTranslation as useTranslation16 } from "@dxos/react-ui";
1483
1479
  import { SyntaxHighlighter } from "@dxos/react-ui-syntax-highlighter";
1484
- import { mx as mx9 } from "@dxos/react-ui-theme";
1480
+ import { mx as mx7 } from "@dxos/react-ui-theme";
1485
1481
 
1486
1482
  // packages/plugins/plugin-space/src/components/SyncStatus/types.ts
1487
1483
  import { useEffect as useEffect6, useState as useState9 } from "react";
@@ -1553,7 +1549,7 @@ var styles = {
1553
1549
  };
1554
1550
  var SyncStatus = () => {
1555
1551
  const state = useSyncState();
1556
- return /* @__PURE__ */ React17.createElement(SyncStatusIndicator, {
1552
+ return /* @__PURE__ */ React16.createElement(SyncStatusIndicator, {
1557
1553
  state
1558
1554
  });
1559
1555
  };
@@ -1576,30 +1572,30 @@ var SyncStatusIndicator = ({ state }) => {
1576
1572
  needsToUpload,
1577
1573
  needsToDownload
1578
1574
  ]);
1579
- return /* @__PURE__ */ React17.createElement(StatusBar2.Item, null, /* @__PURE__ */ React17.createElement(Popover3.Root, null, /* @__PURE__ */ React17.createElement(Popover3.Trigger, null, /* @__PURE__ */ React17.createElement(Icon2, {
1575
+ return /* @__PURE__ */ React16.createElement(StatusBar2.Item, null, /* @__PURE__ */ React16.createElement(Popover3.Root, null, /* @__PURE__ */ React16.createElement(Popover3.Trigger, null, /* @__PURE__ */ React16.createElement(Icon2, {
1580
1576
  icon: offline ? "ph--cloud-x--regular" : needsToUpload ? "ph--cloud-arrow-up--regular" : needsToDownload ? "ph--cloud-arrow-down--regular" : "ph--cloud-check--regular",
1581
1577
  size: 4,
1582
1578
  classNames
1583
- })), /* @__PURE__ */ React17.createElement(Popover3.Content, null, /* @__PURE__ */ React17.createElement(SyncStatusDetail, {
1579
+ })), /* @__PURE__ */ React16.createElement(Popover3.Content, null, /* @__PURE__ */ React16.createElement(SyncStatusDetail, {
1584
1580
  state,
1585
1581
  summary,
1586
1582
  debug: false
1587
1583
  }))));
1588
1584
  };
1589
1585
  var SyncStatusDetail = ({ classNames, state, summary, debug }) => {
1590
- const { t } = useTranslation17(SPACE_PLUGIN);
1586
+ const { t } = useTranslation16(SPACE_PLUGIN);
1591
1587
  const entries = Object.entries(state).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
1592
- return /* @__PURE__ */ React17.createElement("div", {
1593
- className: mx9("flex flex-col text-xs min-w-[16rem]", classNames)
1594
- }, /* @__PURE__ */ React17.createElement("h1", {
1588
+ return /* @__PURE__ */ React16.createElement("div", {
1589
+ className: mx7("flex flex-col text-xs min-w-[16rem]", classNames)
1590
+ }, /* @__PURE__ */ React16.createElement("h1", {
1595
1591
  className: "p-2"
1596
- }, t("sync status title")), /* @__PURE__ */ React17.createElement("div", {
1592
+ }, t("sync status title")), /* @__PURE__ */ React16.createElement("div", {
1597
1593
  className: "flex flex-col gap-[2px] my-[2px]"
1598
- }, entries.map(([spaceId, state2]) => /* @__PURE__ */ React17.createElement(SpaceRow, {
1594
+ }, entries.map(([spaceId, state2]) => /* @__PURE__ */ React16.createElement(SpaceRow, {
1599
1595
  key: spaceId,
1600
1596
  spaceId,
1601
1597
  state: state2
1602
- }))), debug && /* @__PURE__ */ React17.createElement(SyntaxHighlighter, {
1598
+ }))), debug && /* @__PURE__ */ React16.createElement(SyntaxHighlighter, {
1603
1599
  language: "json"
1604
1600
  }, JSON.stringify(summary, null, 2)));
1605
1601
  };
@@ -1629,17 +1625,17 @@ var useActive = (count) => {
1629
1625
  var SpaceRow = ({ spaceId, state: { localDocumentCount, remoteDocumentCount, missingOnLocal, missingOnRemote } }) => {
1630
1626
  const downActive = useActive(localDocumentCount);
1631
1627
  const upActive = useActive(remoteDocumentCount);
1632
- return /* @__PURE__ */ React17.createElement("div", {
1633
- className: mx9("flex items-center mx-[2px] gap-[2px] cursor-pointer", styles.barHover),
1628
+ return /* @__PURE__ */ React16.createElement("div", {
1629
+ className: mx7("flex items-center mx-[2px] gap-[2px] cursor-pointer", styles.barHover),
1634
1630
  title: spaceId,
1635
1631
  onClick: () => {
1636
1632
  void navigator.clipboard.writeText(spaceId);
1637
1633
  }
1638
- }, /* @__PURE__ */ React17.createElement(Icon2, {
1634
+ }, /* @__PURE__ */ React16.createElement(Icon2, {
1639
1635
  icon: "ph--arrow-fat-line-left--regular",
1640
1636
  size: 3,
1641
- classNames: mx9(downActive && "animate-[pulse_1s_infinite]")
1642
- }), /* @__PURE__ */ React17.createElement(Candle, {
1637
+ classNames: mx7(downActive && "animate-[pulse_1s_infinite]")
1638
+ }), /* @__PURE__ */ React16.createElement(Candle, {
1643
1639
  up: {
1644
1640
  count: remoteDocumentCount,
1645
1641
  total: remoteDocumentCount + missingOnRemote
@@ -1649,37 +1645,37 @@ var SpaceRow = ({ spaceId, state: { localDocumentCount, remoteDocumentCount, mis
1649
1645
  total: localDocumentCount + missingOnLocal
1650
1646
  },
1651
1647
  title: spaceId
1652
- }), /* @__PURE__ */ React17.createElement(Icon2, {
1648
+ }), /* @__PURE__ */ React16.createElement(Icon2, {
1653
1649
  icon: "ph--arrow-fat-line-right--regular",
1654
1650
  size: 3,
1655
- classNames: mx9(upActive && "animate-[pulse_1s_step-start_infinite]")
1651
+ classNames: mx7(upActive && "animate-[pulse_1s_step-start_infinite]")
1656
1652
  }));
1657
1653
  };
1658
1654
  var Candle = ({ classNames, up, down }) => {
1659
- return /* @__PURE__ */ React17.createElement("div", {
1660
- className: mx9("grid grid-cols-[1fr_2rem_1fr] w-full h-3", classNames)
1661
- }, /* @__PURE__ */ React17.createElement(Bar, {
1655
+ return /* @__PURE__ */ React16.createElement("div", {
1656
+ className: mx7("grid grid-cols-[1fr_2rem_1fr] w-full h-3", classNames)
1657
+ }, /* @__PURE__ */ React16.createElement(Bar, {
1662
1658
  classNames: "justify-end",
1663
1659
  ...up
1664
- }), /* @__PURE__ */ React17.createElement("div", {
1660
+ }), /* @__PURE__ */ React16.createElement("div", {
1665
1661
  className: "relative"
1666
- }, /* @__PURE__ */ React17.createElement("div", {
1667
- className: mx9("absolute inset-0 flex items-center justify-center text-xs", styles.barBg)
1668
- }, up.total)), /* @__PURE__ */ React17.createElement(Bar, down));
1662
+ }, /* @__PURE__ */ React16.createElement("div", {
1663
+ className: mx7("absolute inset-0 flex items-center justify-center text-xs", styles.barBg)
1664
+ }, up.total)), /* @__PURE__ */ React16.createElement(Bar, down));
1669
1665
  };
1670
1666
  var Bar = ({ classNames, count, total }) => {
1671
1667
  let p = count / total * 100;
1672
1668
  if (count < total) {
1673
1669
  p = Math.min(p, 95);
1674
1670
  }
1675
- return /* @__PURE__ */ React17.createElement("div", {
1676
- className: mx9("relative flex w-full", styles.barBg, classNames)
1677
- }, /* @__PURE__ */ React17.createElement("div", {
1678
- className: mx9("shrink-0", styles.barFg),
1671
+ return /* @__PURE__ */ React16.createElement("div", {
1672
+ className: mx7("relative flex w-full", styles.barBg, classNames)
1673
+ }, /* @__PURE__ */ React16.createElement("div", {
1674
+ className: mx7("shrink-0", styles.barFg),
1679
1675
  style: {
1680
1676
  width: `${p}%`
1681
1677
  }
1682
- }), count !== total && /* @__PURE__ */ React17.createElement("div", {
1678
+ }), count !== total && /* @__PURE__ */ React16.createElement("div", {
1683
1679
  className: "absolute top-0 bottom-0 flex items-center mx-0.5 text-black text-xs"
1684
1680
  }, count));
1685
1681
  };
@@ -1765,7 +1761,9 @@ var translations_default = [
1765
1761
  "remove deleted objects alt": "Permanently remove deleted objects to free up space.",
1766
1762
  "copy link label": "Copy link",
1767
1763
  "default on space create label": "On space create",
1768
- "sync status title": "Sync status"
1764
+ "sync status title": "Sync status",
1765
+ "name label": "Name",
1766
+ "name placeholder": "Name"
1769
1767
  }
1770
1768
  }
1771
1769
  }
@@ -1862,7 +1860,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1862
1860
  err: err.message
1863
1861
  }, {
1864
1862
  F: __dxlog_file5,
1865
- L: 225,
1863
+ L: 224,
1866
1864
  S: void 0,
1867
1865
  C: (f, a) => f(...a)
1868
1866
  });
@@ -1971,7 +1969,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
1971
1969
  ...translations_default,
1972
1970
  osTranslations
1973
1971
  ],
1974
- root: () => state.values.awaiting ? /* @__PURE__ */ React18.createElement(AwaitingObject, {
1972
+ root: () => state.values.awaiting ? /* @__PURE__ */ React17.createElement(AwaitingObject, {
1975
1973
  id: state.values.awaiting
1976
1974
  }) : null,
1977
1975
  metadata: {
@@ -2003,7 +2001,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2003
2001
  switch (role) {
2004
2002
  case "article":
2005
2003
  case "main":
2006
- return isSpace2(primary) && primary.state.get() === SpaceState3.SPACE_READY ? /* @__PURE__ */ React18.createElement(Surface2, {
2004
+ return isSpace2(primary) && primary.state.get() === SpaceState3.SPACE_READY ? /* @__PURE__ */ React17.createElement(Surface2, {
2007
2005
  data: {
2008
2006
  active: primary.properties[CollectionType.typename],
2009
2007
  id: primary.id
@@ -2011,26 +2009,20 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2011
2009
  role,
2012
2010
  ...rest
2013
2011
  }) : primary instanceof CollectionType ? {
2014
- node: /* @__PURE__ */ React18.createElement(CollectionMain, {
2012
+ node: /* @__PURE__ */ React17.createElement(CollectionMain, {
2015
2013
  collection: primary
2016
2014
  }),
2017
2015
  disposition: "fallback"
2018
- } : typeof primary === "string" && primary.length === OBJECT_ID_LENGTH ? /* @__PURE__ */ React18.createElement(MissingObject, {
2016
+ } : typeof primary === "string" && primary.length === OBJECT_ID_LENGTH ? /* @__PURE__ */ React17.createElement(MissingObject, {
2019
2017
  id: primary
2020
2018
  }) : null;
2021
- // TODO(burdon): Add role name syntax to minimal plugin docs.
2022
- case "tree--empty":
2023
- switch (true) {
2024
- case data.plugin === SPACE_PLUGIN:
2025
- return /* @__PURE__ */ React18.createElement(EmptyTree, null);
2026
- case (isGraphNode(data.activeNode) && isSpace2(data.activeNode.data)):
2027
- return /* @__PURE__ */ React18.createElement(EmptySpace, null);
2028
- default:
2029
- return null;
2030
- }
2019
+ case "complementary--settings":
2020
+ return isEchoObject2(data.subject) ? /* @__PURE__ */ React17.createElement(FallbackSettings, {
2021
+ object: data.subject
2022
+ }) : null;
2031
2023
  case "dialog":
2032
2024
  if (data.component === "dxos.org/plugin/space/InvitationManagerDialog") {
2033
- return /* @__PURE__ */ React18.createElement(Dialog.Content, null, /* @__PURE__ */ React18.createElement(ClipboardProvider2, null, /* @__PURE__ */ React18.createElement(InvitationManager, {
2025
+ return /* @__PURE__ */ React17.createElement(Dialog.Content, null, /* @__PURE__ */ React17.createElement(ClipboardProvider2, null, /* @__PURE__ */ React17.createElement(InvitationManager, {
2034
2026
  active: true,
2035
2027
  ...data.subject
2036
2028
  })));
@@ -2039,20 +2031,21 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2039
2031
  }
2040
2032
  case "popover":
2041
2033
  if (data.component === "dxos.org/plugin/space/RenameSpacePopover" && isSpace2(data.subject)) {
2042
- return /* @__PURE__ */ React18.createElement(PopoverRenameSpace, {
2034
+ return /* @__PURE__ */ React17.createElement(PopoverRenameSpace, {
2043
2035
  space: data.subject
2044
2036
  });
2045
2037
  }
2046
2038
  if (data.component === "dxos.org/plugin/space/RenameObjectPopover" && isReactiveObject2(data.subject)) {
2047
- return /* @__PURE__ */ React18.createElement(PopoverRenameObject, {
2039
+ return /* @__PURE__ */ React17.createElement(PopoverRenameObject, {
2048
2040
  object: data.subject
2049
2041
  });
2050
2042
  }
2051
2043
  return null;
2044
+ // TODO(burdon): Add role name syntax to minimal plugin docs.
2052
2045
  case "presence--glyph": {
2053
- return isReactiveObject2(data.object) ? /* @__PURE__ */ React18.createElement(SmallPresenceLive, {
2046
+ return isReactiveObject2(data.object) ? /* @__PURE__ */ React17.createElement(SmallPresenceLive, {
2054
2047
  viewers: state.values.viewersByObject[fullyQualifiedId4(data.object)]
2055
- }) : /* @__PURE__ */ React18.createElement(SmallPresence, {
2048
+ }) : /* @__PURE__ */ React17.createElement(SmallPresence, {
2056
2049
  count: 0
2057
2050
  });
2058
2051
  }
@@ -2066,32 +2059,32 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2066
2059
  const space = isSpace2(data.object) ? data.object : getSpace4(data.object);
2067
2060
  const object = isSpace2(data.object) ? data.object.state.get() === SpaceState3.SPACE_READY ? space?.properties[CollectionType.typename] : void 0 : data.object;
2068
2061
  return space && object ? {
2069
- node: /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(SpacePresence, {
2062
+ node: /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(SpacePresence, {
2070
2063
  object
2071
- }), space.properties[COMPOSER_SPACE_LOCK] ? null : /* @__PURE__ */ React18.createElement(ShareSpaceButton, {
2064
+ }), space.properties[COMPOSER_SPACE_LOCK] ? null : /* @__PURE__ */ React17.createElement(ShareSpaceButton, {
2072
2065
  spaceId: space.id
2073
2066
  })),
2074
2067
  disposition: "hoist"
2075
2068
  } : null;
2076
2069
  }
2077
2070
  case "section":
2078
- return data.object instanceof CollectionType ? /* @__PURE__ */ React18.createElement(CollectionSection, {
2071
+ return data.object instanceof CollectionType ? /* @__PURE__ */ React17.createElement(CollectionSection, {
2079
2072
  collection: data.object
2080
2073
  }) : null;
2081
2074
  case "settings":
2082
- return data.plugin === meta_default.id ? /* @__PURE__ */ React18.createElement(SpaceSettings, {
2075
+ return data.plugin === meta_default.id ? /* @__PURE__ */ React17.createElement(SpaceSettings, {
2083
2076
  settings: settings.values
2084
2077
  }) : null;
2085
2078
  case "menu-footer":
2086
2079
  if (!isEchoObject2(data.object)) {
2087
2080
  return null;
2088
2081
  } else {
2089
- return /* @__PURE__ */ React18.createElement(MenuFooter, {
2082
+ return /* @__PURE__ */ React17.createElement(MenuFooter, {
2090
2083
  object: data.object
2091
2084
  });
2092
2085
  }
2093
2086
  case "status": {
2094
- return /* @__PURE__ */ React18.createElement(React18.Fragment, null, /* @__PURE__ */ React18.createElement(SyncStatus, null), /* @__PURE__ */ React18.createElement(SaveStatus, null));
2087
+ return /* @__PURE__ */ React17.createElement(React17.Fragment, null, /* @__PURE__ */ React17.createElement(SyncStatus, null), /* @__PURE__ */ React17.createElement(SaveStatus, null));
2095
2088
  }
2096
2089
  default:
2097
2090
  return null;
@@ -2153,7 +2146,7 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2153
2146
  } else {
2154
2147
  log2.warn("spaces order object not found", void 0, {
2155
2148
  F: __dxlog_file5,
2156
- L: 528,
2149
+ L: 520,
2157
2150
  S: void 0,
2158
2151
  C: (f, a) => f(...a)
2159
2152
  });
@@ -2342,6 +2335,45 @@ var SpacePlugin = ({ firstRun, onFirstRun } = {}) => {
2342
2335
  resolve
2343
2336
  })).filter(nonNullable);
2344
2337
  }
2338
+ }),
2339
+ // Create nodes for object settings.
2340
+ createExtension({
2341
+ id: `${SPACE_PLUGIN}/settings-for-subject`,
2342
+ resolver: ({ id }) => {
2343
+ if (!id.endsWith("~settings")) {
2344
+ return;
2345
+ }
2346
+ const subjectId = id.split("~").at(0);
2347
+ const [spaceId, objectId] = subjectId?.split(":") ?? [];
2348
+ const space = client.spaces.get().find((space2) => space2.id === spaceId);
2349
+ const object = toSignal((onChange) => {
2350
+ const timeout = setTimeout(async () => {
2351
+ await space?.db.loadObjectById(objectId);
2352
+ onChange();
2353
+ });
2354
+ return () => clearTimeout(timeout);
2355
+ }, () => space?.db.getObjectById(objectId), subjectId);
2356
+ if (!object || !subjectId) {
2357
+ return;
2358
+ }
2359
+ const meta = resolve(getTypename2(object) ?? "");
2360
+ const label = meta.label?.(object) || object.name || meta.placeholder || [
2361
+ "unnamed object settings label",
2362
+ {
2363
+ ns: SPACE_PLUGIN
2364
+ }
2365
+ ];
2366
+ return {
2367
+ id,
2368
+ type: "orphan-settings-for-subject",
2369
+ data: null,
2370
+ properties: {
2371
+ icon: "ph--gear--regular",
2372
+ label,
2373
+ object
2374
+ }
2375
+ };
2376
+ }
2345
2377
  })
2346
2378
  ];
2347
2379
  },
@@ -2903,8 +2935,7 @@ export {
2903
2935
  CollectionSection,
2904
2936
  CollectionType,
2905
2937
  ContactType,
2906
- EmptySpace,
2907
- EmptyTree,
2938
+ FallbackSettings,
2908
2939
  FullPresence,
2909
2940
  MenuFooter,
2910
2941
  MessageState,