@dxos/shell 0.7.5-labs.e27f9b9 → 0.7.5-main.2567c87

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 (66) hide show
  1. package/dist/bundle/shell.mjs +57515 -56513
  2. package/dist/bundle/shell.mjs.map +1 -1
  3. package/dist/bundle/shell.umd.js +146 -148
  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.css +7 -0
  8. package/dist/lib/browser/react.css.map +7 -0
  9. package/dist/lib/browser/react.mjs +782 -518
  10. package/dist/lib/browser/react.mjs.map +4 -4
  11. package/dist/lib/node/meta.json +1 -1
  12. package/dist/lib/node/react.cjs +879 -615
  13. package/dist/lib/node/react.cjs.map +4 -4
  14. package/dist/lib/node/react.css +7 -0
  15. package/dist/lib/node/react.css.map +7 -0
  16. package/dist/lib/node-esm/meta.json +1 -1
  17. package/dist/lib/node-esm/react.css +7 -0
  18. package/dist/lib/node-esm/react.css.map +7 -0
  19. package/dist/lib/node-esm/react.mjs +782 -518
  20. package/dist/lib/node-esm/react.mjs.map +4 -4
  21. package/dist/types/src/components/AgentConfig.js +1 -1
  22. package/dist/types/src/components/AgentConfig.js.map +1 -1
  23. package/dist/types/src/components/DeviceList/DeviceList.js +1 -1
  24. package/dist/types/src/components/DeviceList/DeviceList.js.map +1 -1
  25. package/dist/types/src/components/EmojiPicker.d.ts +19 -0
  26. package/dist/types/src/components/EmojiPicker.d.ts.map +1 -0
  27. package/dist/types/src/components/EmojiPicker.js +146 -0
  28. package/dist/types/src/components/EmojiPicker.js.map +1 -0
  29. package/dist/types/src/components/HuePicker.d.ts +18 -0
  30. package/dist/types/src/components/HuePicker.d.ts.map +1 -0
  31. package/dist/types/src/components/HuePicker.js +133 -0
  32. package/dist/types/src/components/HuePicker.js.map +1 -0
  33. package/dist/types/src/components/index.d.ts +2 -0
  34. package/dist/types/src/components/index.d.ts.map +1 -1
  35. package/dist/types/src/components/index.js +2 -0
  36. package/dist/types/src/components/index.js.map +1 -1
  37. package/dist/types/src/panels/IdentityPanel/IdentityPanel.d.ts.map +1 -1
  38. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js +2 -3
  39. package/dist/types/src/panels/IdentityPanel/IdentityPanel.js.map +1 -1
  40. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.d.ts.map +1 -1
  41. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js +0 -2
  42. package/dist/types/src/panels/IdentityPanel/IdentityPanel.stories.js.map +1 -1
  43. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.d.ts.map +1 -1
  44. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js +2 -3
  45. package/dist/types/src/panels/IdentityPanel/steps/ProfileForm.js.map +1 -1
  46. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.js +1 -1
  47. package/dist/types/src/panels/JoinPanel/steps/IdentityInput.js.map +1 -1
  48. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.d.ts.map +1 -1
  49. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js +0 -5
  50. package/dist/types/src/panels/SpacePanel/SpacePanel.stories.js.map +1 -1
  51. package/dist/types/src/testing/fixtures/identities.d.ts.map +1 -1
  52. package/dist/types/src/testing/fixtures/identities.js +0 -2
  53. package/dist/types/src/testing/fixtures/identities.js.map +1 -1
  54. package/package.json +30 -31
  55. package/src/components/AgentConfig.tsx +1 -1
  56. package/src/components/DeviceList/DeviceList.tsx +1 -1
  57. package/src/components/EmojiPicker.tsx +187 -0
  58. package/src/components/HuePicker.tsx +182 -0
  59. package/src/components/emoji.css +25 -0
  60. package/src/components/index.ts +2 -0
  61. package/src/panels/IdentityPanel/IdentityPanel.stories.tsx +0 -2
  62. package/src/panels/IdentityPanel/IdentityPanel.tsx +1 -2
  63. package/src/panels/IdentityPanel/steps/ProfileForm.tsx +1 -2
  64. package/src/panels/JoinPanel/steps/IdentityInput.tsx +1 -1
  65. package/src/panels/SpacePanel/SpacePanel.stories.tsx +1 -6
  66. package/src/testing/fixtures/identities.ts +0 -2
@@ -55,7 +55,7 @@ var AgentConfig = ({ agentStatus, validationMessage, onAgentDestroy, onAgentCrea
55
55
  className: mx(descriptionText, "mlb-2")
56
56
  }, t("agent requested description"))) : /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Button, {
57
57
  variant: "ghost",
58
- classNames: "mlb-2 is-full justify-start gap-2 pis-0 pie-3",
58
+ classNames: "mlb-2 is-full justify-start gap-2 !pis-0 !pie-3",
59
59
  "data-testid": agentStatus === "creatable" ? "devices-panel.create-agent" : "devices-panel.agent-error",
60
60
  onClick: agentStatus === "creatable" ? onAgentCreate : onAgentRefresh,
61
61
  "aria-describedby": "devices-panel.create-agent.description"
@@ -135,89 +135,351 @@ var CompoundButton = ({ children, description, before, after, variant = "default
135
135
  }, after));
136
136
  };
137
137
 
138
+ // packages/sdk/shell/src/components/EmojiPicker.tsx
139
+ import emojiData from "@emoji-mart/data";
140
+ import EmojiMart from "@emoji-mart/react";
141
+ import { ArrowCounterClockwise, CaretDown, UserCircle } from "@phosphor-icons/react";
142
+ import { useControllableState } from "@radix-ui/react-use-controllable-state";
143
+ import React3, { useRef, useState } from "react";
144
+ import { Button as Button2, Popover, Toolbar, Tooltip as Tooltip2, useMediaQuery, useThemeContext as useThemeContext2, useTranslation as useTranslation2 } from "@dxos/react-ui";
145
+ import { getSize as getSize2 } from "@dxos/react-ui-theme";
146
+ var EmojiPickerToolbarButton = ({ disabled, defaultEmoji, emoji, onChangeEmoji, classNames }) => {
147
+ const { t } = useTranslation2("os");
148
+ const { themeMode } = useThemeContext2();
149
+ const [_emojiValue, setEmojiValue] = useControllableState({
150
+ prop: emoji,
151
+ onChange: onChangeEmoji,
152
+ defaultProp: defaultEmoji
153
+ });
154
+ const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
155
+ const suppressNextTooltip = useRef(false);
156
+ const [triggerTooltipOpen, setTriggerTooltipOpen] = useState(false);
157
+ return /* @__PURE__ */ React3.createElement(Tooltip2.Root, {
158
+ open: triggerTooltipOpen,
159
+ onOpenChange: (nextOpen) => {
160
+ if (suppressNextTooltip.current) {
161
+ setTriggerTooltipOpen(false);
162
+ suppressNextTooltip.current = false;
163
+ } else {
164
+ setTriggerTooltipOpen(nextOpen);
165
+ }
166
+ }
167
+ }, /* @__PURE__ */ React3.createElement(Popover.Root, {
168
+ open: emojiPickerOpen,
169
+ onOpenChange: (nextOpen) => {
170
+ setEmojiPickerOpen(nextOpen);
171
+ suppressNextTooltip.current = true;
172
+ }
173
+ }, /* @__PURE__ */ React3.createElement(Tooltip2.Trigger, {
174
+ asChild: true
175
+ }, /* @__PURE__ */ React3.createElement(Popover.Trigger, {
176
+ asChild: true
177
+ }, /* @__PURE__ */ React3.createElement(Toolbar.Button, {
178
+ classNames: [
179
+ "gap-2 text-2xl plb-1",
180
+ classNames
181
+ ],
182
+ disabled
183
+ }, /* @__PURE__ */ React3.createElement("span", {
184
+ className: "sr-only"
185
+ }, t("select emoji label")), /* @__PURE__ */ React3.createElement(UserCircle, {
186
+ className: getSize2(5)
187
+ })))), /* @__PURE__ */ React3.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React3.createElement(Tooltip2.Content, {
188
+ side: "bottom"
189
+ }, t("select emoji label"), /* @__PURE__ */ React3.createElement(Tooltip2.Arrow, null))), /* @__PURE__ */ React3.createElement(Popover.Content, {
190
+ side: "bottom",
191
+ onKeyDownCapture: (event) => {
192
+ if (event.key === "Escape") {
193
+ event.stopPropagation();
194
+ setEmojiPickerOpen(false);
195
+ suppressNextTooltip.current = true;
196
+ }
197
+ }
198
+ }, /* @__PURE__ */ React3.createElement(EmojiMart, {
199
+ data: emojiData,
200
+ onEmojiSelect: ({ native }) => {
201
+ if (native) {
202
+ setEmojiValue(native);
203
+ setEmojiPickerOpen(false);
204
+ }
205
+ },
206
+ autoFocus: true,
207
+ maxFrequentRows: 0,
208
+ noCountryFlags: true,
209
+ theme: themeMode
210
+ }), /* @__PURE__ */ React3.createElement(Popover.Arrow, null))));
211
+ };
212
+ var EmojiPickerBlock = ({ disabled, defaultEmoji, emoji, onChangeEmoji, onClickClear }) => {
213
+ const { t } = useTranslation2("os");
214
+ const [isMd] = useMediaQuery("md", {
215
+ ssr: false
216
+ });
217
+ const [emojiValue, setEmojiValue] = useControllableState({
218
+ prop: emoji,
219
+ onChange: onChangeEmoji,
220
+ defaultProp: defaultEmoji
221
+ });
222
+ const [emojiPickerOpen, setEmojiPickerOpen] = useState(false);
223
+ return /* @__PURE__ */ React3.createElement(React3.Fragment, null, /* @__PURE__ */ React3.createElement(Popover.Root, {
224
+ open: emojiPickerOpen,
225
+ onOpenChange: setEmojiPickerOpen
226
+ }, /* @__PURE__ */ React3.createElement(Popover.Trigger, {
227
+ asChild: true
228
+ }, /* @__PURE__ */ React3.createElement(Button2, {
229
+ variant: "ghost",
230
+ classNames: "gap-2 text-2xl plb-1",
231
+ disabled
232
+ }, /* @__PURE__ */ React3.createElement("span", {
233
+ className: "sr-only"
234
+ }, t("select emoji label")), /* @__PURE__ */ React3.createElement("span", {
235
+ className: "grow pis-14"
236
+ }, emojiValue), /* @__PURE__ */ React3.createElement(CaretDown, {
237
+ className: getSize2(4)
238
+ }))), /* @__PURE__ */ React3.createElement(Popover.Content, {
239
+ side: "right",
240
+ sideOffset: isMd ? 0 : -310,
241
+ onKeyDownCapture: (event) => {
242
+ if (event.key === "Escape") {
243
+ event.stopPropagation();
244
+ setEmojiPickerOpen(false);
245
+ }
246
+ }
247
+ }, /* @__PURE__ */ React3.createElement(EmojiMart, {
248
+ data: emojiData,
249
+ onEmojiSelect: ({ native }) => {
250
+ if (native) {
251
+ setEmojiValue(native);
252
+ setEmojiPickerOpen(false);
253
+ }
254
+ },
255
+ autoFocus: true,
256
+ maxFrequentRows: 0,
257
+ noCountryFlags: true
258
+ }), /* @__PURE__ */ React3.createElement(Popover.Arrow, null))), /* @__PURE__ */ React3.createElement(Tooltip2.Root, null, /* @__PURE__ */ React3.createElement(Tooltip2.Trigger, {
259
+ asChild: true
260
+ }, /* @__PURE__ */ React3.createElement(Button2, {
261
+ variant: "ghost",
262
+ onClick: onClickClear,
263
+ disabled
264
+ }, /* @__PURE__ */ React3.createElement("span", {
265
+ className: "sr-only"
266
+ }, t("clear label")), /* @__PURE__ */ React3.createElement(ArrowCounterClockwise, null))), /* @__PURE__ */ React3.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React3.createElement(Tooltip2.Content, {
267
+ side: "right"
268
+ }, t("clear label"), /* @__PURE__ */ React3.createElement(Tooltip2.Arrow, null)))));
269
+ };
270
+
271
+ // packages/sdk/shell/src/components/HuePicker.tsx
272
+ import { ArrowCounterClockwise as ArrowCounterClockwise2, CaretDown as CaretDown2, Check, Palette } from "@phosphor-icons/react";
273
+ import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
274
+ import React4, { useRef as useRef2, useState as useState2 } from "react";
275
+ import { Button as Button3, DropdownMenu, Toolbar as Toolbar2, Tooltip as Tooltip3, useThemeContext as useThemeContext3, useTranslation as useTranslation3 } from "@dxos/react-ui";
276
+ import { getSize as getSize3, hueTokenThemes, mx as mx3 } from "@dxos/react-ui-theme";
277
+ var HuePreview = ({ hue }) => {
278
+ const { tx } = useThemeContext3();
279
+ const size = 20;
280
+ return /* @__PURE__ */ React4.createElement("svg", {
281
+ width: size,
282
+ height: size,
283
+ viewBox: `0 0 ${size} ${size}`
284
+ }, /* @__PURE__ */ React4.createElement("rect", {
285
+ x: 0,
286
+ y: 0,
287
+ width: size,
288
+ height: size,
289
+ className: tx("hue.fill", "select--hue__preview", {
290
+ hue
291
+ })
292
+ }));
293
+ };
294
+ var hueTokens = Object.keys(hueTokenThemes).slice(0, 16);
295
+ var HuePickerToolbarButton = ({ disabled, hue, onChangeHue, classNames, defaultHue }) => {
296
+ const { t } = useTranslation3("os");
297
+ const [hueValue, setHueValue] = useControllableState2({
298
+ prop: hue,
299
+ onChange: onChangeHue,
300
+ defaultProp: defaultHue
301
+ });
302
+ const [huePickerOpen, setHuePickerOpen] = useState2(false);
303
+ const suppressNextTooltip = useRef2(false);
304
+ const [triggerTooltipOpen, setTriggerTooltipOpen] = useState2(false);
305
+ return /* @__PURE__ */ React4.createElement(Tooltip3.Root, {
306
+ open: triggerTooltipOpen,
307
+ onOpenChange: (nextOpen) => {
308
+ if (suppressNextTooltip.current) {
309
+ setTriggerTooltipOpen(false);
310
+ suppressNextTooltip.current = false;
311
+ } else {
312
+ setTriggerTooltipOpen(nextOpen);
313
+ }
314
+ }
315
+ }, /* @__PURE__ */ React4.createElement(DropdownMenu.Root, {
316
+ modal: false,
317
+ open: huePickerOpen,
318
+ onOpenChange: (nextOpen) => {
319
+ setHuePickerOpen(nextOpen);
320
+ suppressNextTooltip.current = true;
321
+ }
322
+ }, /* @__PURE__ */ React4.createElement(Tooltip3.Trigger, {
323
+ asChild: true
324
+ }, /* @__PURE__ */ React4.createElement(DropdownMenu.Trigger, {
325
+ asChild: true
326
+ }, /* @__PURE__ */ React4.createElement(Toolbar2.Button, {
327
+ classNames: mx3("gap-2 plb-1", classNames),
328
+ disabled
329
+ }, /* @__PURE__ */ React4.createElement("span", {
330
+ className: "sr-only"
331
+ }, t("select hue label")), /* @__PURE__ */ React4.createElement(Palette, {
332
+ className: getSize3(5)
333
+ })))), /* @__PURE__ */ React4.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React4.createElement(Tooltip3.Content, {
334
+ side: "bottom"
335
+ }, t("select hue label"), /* @__PURE__ */ React4.createElement(Tooltip3.Arrow, null))), /* @__PURE__ */ React4.createElement(DropdownMenu.Content, {
336
+ side: "bottom",
337
+ classNames: "!w-40"
338
+ }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, {
339
+ classNames: "grid grid-cols-4"
340
+ }, hueTokens.map((hue2) => {
341
+ return /* @__PURE__ */ React4.createElement(DropdownMenu.CheckboxItem, {
342
+ key: hue2,
343
+ checked: hue2 === hueValue,
344
+ onCheckedChange: () => setHueValue(hue2),
345
+ classNames: "px-0 py-2 items-center justify-center"
346
+ }, /* @__PURE__ */ React4.createElement(HuePreview, {
347
+ hue: hue2
348
+ }));
349
+ })))));
350
+ };
351
+ var HuePickerBlock = ({ disabled, hue, onChangeHue, defaultHue, onClickClear }) => {
352
+ const { t } = useTranslation3("os");
353
+ const [hueValue, setHueValue] = useControllableState2({
354
+ prop: hue,
355
+ onChange: onChangeHue,
356
+ defaultProp: defaultHue
357
+ });
358
+ return /* @__PURE__ */ React4.createElement(React4.Fragment, null, /* @__PURE__ */ React4.createElement(DropdownMenu.Root, {
359
+ modal: false
360
+ }, /* @__PURE__ */ React4.createElement(DropdownMenu.Trigger, {
361
+ asChild: true
362
+ }, /* @__PURE__ */ React4.createElement(Button3, {
363
+ variant: "ghost",
364
+ classNames: "gap-2 plb-1",
365
+ disabled
366
+ }, /* @__PURE__ */ React4.createElement("span", {
367
+ className: "sr-only"
368
+ }, t("select hue label")), /* @__PURE__ */ React4.createElement("div", {
369
+ role: "none",
370
+ className: "pis-14 grow flex items-center justify-center gap-2"
371
+ }, /* @__PURE__ */ React4.createElement(HuePreview, {
372
+ hue: hueValue
373
+ }), /* @__PURE__ */ React4.createElement("span", null, t(`${hueValue} label`))), /* @__PURE__ */ React4.createElement(CaretDown2, {
374
+ className: getSize3(4)
375
+ }))), /* @__PURE__ */ React4.createElement(DropdownMenu.Content, {
376
+ side: "right"
377
+ }, /* @__PURE__ */ React4.createElement(DropdownMenu.Viewport, null, Object.keys(hueTokenThemes).map((hue2) => {
378
+ return /* @__PURE__ */ React4.createElement(DropdownMenu.CheckboxItem, {
379
+ key: hue2,
380
+ checked: hue2 === hueValue,
381
+ onCheckedChange: () => setHueValue(hue2)
382
+ }, /* @__PURE__ */ React4.createElement(HuePreview, {
383
+ hue: hue2
384
+ }), /* @__PURE__ */ React4.createElement("span", {
385
+ className: "grow"
386
+ }, t(`${hue2} label`)), /* @__PURE__ */ React4.createElement(DropdownMenu.ItemIndicator, null, /* @__PURE__ */ React4.createElement(Check, null)));
387
+ })), /* @__PURE__ */ React4.createElement(DropdownMenu.Arrow, null))), /* @__PURE__ */ React4.createElement(Tooltip3.Root, null, /* @__PURE__ */ React4.createElement(Tooltip3.Trigger, {
388
+ asChild: true
389
+ }, /* @__PURE__ */ React4.createElement(Button3, {
390
+ variant: "ghost",
391
+ onClick: onClickClear,
392
+ disabled
393
+ }, /* @__PURE__ */ React4.createElement("span", {
394
+ className: "sr-only"
395
+ }, t("clear label")), /* @__PURE__ */ React4.createElement(ArrowCounterClockwise2, null))), /* @__PURE__ */ React4.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React4.createElement(Tooltip3.Content, {
396
+ side: "right"
397
+ }, t("clear label"), /* @__PURE__ */ React4.createElement(Tooltip3.Arrow, null)))));
398
+ };
399
+
138
400
  // packages/sdk/shell/src/components/IdentityList/IdentityListItem.tsx
139
- import React3, { forwardRef } from "react";
401
+ import React5, { forwardRef } from "react";
140
402
  import { generateName } from "@dxos/display-name";
141
403
  import { SpaceMember } from "@dxos/react-client/echo";
142
404
  import { ListItem, Avatar as Avatar2, useId as useId2 } from "@dxos/react-ui";
143
- import { mx as mx3 } from "@dxos/react-ui-theme";
405
+ import { mx as mx4 } from "@dxos/react-ui-theme";
144
406
  import { keyToFallback } from "@dxos/util";
145
407
  var IdentityListItem = /* @__PURE__ */ forwardRef(({ identity, presence, onClick, classNames, ...props }, forwardedRef) => {
146
408
  const fallbackValue = keyToFallback(identity.identityKey);
147
409
  const labelId = useId2("identityListItem__label");
148
410
  const displayName = identity.profile?.displayName ?? generateName(identity.identityKey.toHex());
149
- return /* @__PURE__ */ React3.createElement(ListItem.Root, {
411
+ return /* @__PURE__ */ React5.createElement(ListItem.Root, {
150
412
  ...props,
151
- classNames: mx3("flex gap-2 pis-3 pie-1 items-center", onClick && "cursor-pointer", classNames),
413
+ classNames: mx4("flex gap-2 pis-3 pie-1 items-center", onClick && "cursor-pointer", classNames),
152
414
  onClick: () => onClick?.(),
153
415
  "data-testid": "identity-list-item",
154
416
  labelId,
155
417
  ref: forwardedRef
156
- }, /* @__PURE__ */ React3.createElement(Avatar2.Root, {
418
+ }, /* @__PURE__ */ React5.createElement(Avatar2.Root, {
157
419
  status: presence === SpaceMember.PresenceState.ONLINE ? "active" : "inactive",
158
420
  labelId,
159
421
  hue: identity.profile?.data?.hue || fallbackValue.hue
160
- }, /* @__PURE__ */ React3.createElement(Avatar2.Frame, {
422
+ }, /* @__PURE__ */ React5.createElement(Avatar2.Frame, {
161
423
  classNames: "place-self-center"
162
- }, /* @__PURE__ */ React3.createElement(Avatar2.Fallback, {
424
+ }, /* @__PURE__ */ React5.createElement(Avatar2.Fallback, {
163
425
  text: identity.profile?.data?.emoji || fallbackValue.emoji
164
- })), /* @__PURE__ */ React3.createElement(Avatar2.Label, {
426
+ })), /* @__PURE__ */ React5.createElement(Avatar2.Label, {
165
427
  classNames: "text-sm truncate pli-2"
166
428
  }, displayName)));
167
429
  });
168
430
 
169
431
  // packages/sdk/shell/src/components/IdentityList/SpaceMemberList.tsx
170
- import React4, { useMemo } from "react";
432
+ import React6, { useMemo } from "react";
171
433
  import { useClient } from "@dxos/react-client";
172
434
  import { useMembers } from "@dxos/react-client/echo";
173
- import { useTranslation as useTranslation2, List } from "@dxos/react-ui";
174
- import { descriptionText as descriptionText3, mx as mx4 } from "@dxos/react-ui-theme";
435
+ import { useTranslation as useTranslation4, List } from "@dxos/react-ui";
436
+ import { descriptionText as descriptionText3, mx as mx5 } from "@dxos/react-ui-theme";
175
437
  var SpaceMemberList = ({ spaceKey, includeSelf, onSelect }) => {
176
438
  const client = useClient();
177
439
  const allUnsortedMembers = useMembers(spaceKey);
178
440
  const members = useMemo(() => includeSelf ? allUnsortedMembers.sort((member) => member.identity.identityKey.equals(client.halo.identity.get().identityKey) ? -1 : 1) : allUnsortedMembers.filter((member) => !member.identity.identityKey.equals(client.halo.identity.get().identityKey)), [
179
441
  allUnsortedMembers
180
442
  ]);
181
- return /* @__PURE__ */ React4.createElement(SpaceMemberListImpl, {
443
+ return /* @__PURE__ */ React6.createElement(SpaceMemberListImpl, {
182
444
  members,
183
445
  onSelect
184
446
  });
185
447
  };
186
448
  var SpaceMemberListImpl = ({ members, onSelect }) => {
187
- const { t } = useTranslation2("os");
449
+ const { t } = useTranslation4("os");
188
450
  const visibleMembers = members.filter((member) => member.identity);
189
- return visibleMembers.length > 0 ? /* @__PURE__ */ React4.createElement(List, {
451
+ return visibleMembers.length > 0 ? /* @__PURE__ */ React6.createElement(List, {
190
452
  classNames: "flex flex-col gap-2",
191
453
  "data-testid": "space-members-list"
192
454
  }, visibleMembers.map((member) => {
193
- return /* @__PURE__ */ React4.createElement(IdentityListItem, {
455
+ return /* @__PURE__ */ React6.createElement(IdentityListItem, {
194
456
  key: member.identity.identityKey.toHex(),
195
457
  identity: member.identity,
196
458
  presence: member.presence,
197
459
  onClick: onSelect && (() => onSelect(member))
198
460
  });
199
- })) : /* @__PURE__ */ React4.createElement("div", {
461
+ })) : /* @__PURE__ */ React6.createElement("div", {
200
462
  role: "none",
201
463
  className: "grow flex items-center p-2"
202
- }, /* @__PURE__ */ React4.createElement("p", {
203
- className: mx4(descriptionText3, "text-center is-full mlb-2")
464
+ }, /* @__PURE__ */ React6.createElement("p", {
465
+ className: mx5(descriptionText3, "text-center is-full mlb-2")
204
466
  }, t("empty space members message")));
205
467
  };
206
468
 
207
469
  // packages/sdk/shell/src/components/DeviceList/DeviceList.tsx
208
470
  import { CaretRight, Plus as Plus2 } from "@phosphor-icons/react";
209
- import React6 from "react";
210
- import { Button as Button3, List as List2, useTranslation as useTranslation4 } from "@dxos/react-ui";
211
- import { descriptionText as descriptionText4, getSize as getSize3, mx as mx5 } from "@dxos/react-ui-theme";
471
+ import React8 from "react";
472
+ import { Button as Button5, List as List2, useTranslation as useTranslation6 } from "@dxos/react-ui";
473
+ import { descriptionText as descriptionText4, getSize as getSize5, mx as mx6 } from "@dxos/react-ui-theme";
212
474
 
213
475
  // packages/sdk/shell/src/components/DeviceList/DeviceListItem.tsx
214
476
  import { Compass, Desktop, DeviceMobile, Devices, DotsThree, ShareFat, Power as Power2, Robot, Database as Database2, FirstAidKit } from "@phosphor-icons/react";
215
- import React5, { forwardRef as forwardRef2 } from "react";
477
+ import React7, { forwardRef as forwardRef2 } from "react";
216
478
  import { generateName as generateName2 } from "@dxos/display-name";
217
479
  import { Device, DeviceType, DeviceKind } from "@dxos/react-client/halo";
218
480
  import { ConnectionState } from "@dxos/react-client/mesh";
219
- import { ListItem as ListItem2, Avatar as Avatar3, useId as useId3, Tag, useTranslation as useTranslation3, DropdownMenu, Button as Button2 } from "@dxos/react-ui";
220
- import { getSize as getSize2 } from "@dxos/react-ui-theme";
481
+ import { ListItem as ListItem2, Avatar as Avatar3, useId as useId3, Tag, useTranslation as useTranslation5, DropdownMenu as DropdownMenu2, Button as Button4 } from "@dxos/react-ui";
482
+ import { getSize as getSize4 } from "@dxos/react-ui-theme";
221
483
  import { keyToFallback as keyToFallback2 } from "@dxos/util";
222
484
  var iconProps = {
223
485
  weight: "duotone",
@@ -227,7 +489,7 @@ var iconProps = {
227
489
  y: 8
228
490
  };
229
491
  var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickEdit, onClickReset, onClickRecover, onClickJoinExisting, classNames, connectionState, onAgentDestroy: _, ...props }, forwardedRef) => {
230
- const { t } = useTranslation3("os");
492
+ const { t } = useTranslation5("os");
231
493
  const fallbackValue = keyToFallback2(device.deviceKey);
232
494
  const labelId = useId3("identityListItem__label");
233
495
  const displayName = device.profile ? t("device name placeholder", {
@@ -235,7 +497,7 @@ var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickE
235
497
  platform: device.profile.platform
236
498
  }) : generateName2(device.deviceKey.toHex());
237
499
  const isCurrent = device.kind === DeviceKind.CURRENT;
238
- return /* @__PURE__ */ React5.createElement(ListItem2.Root, {
500
+ return /* @__PURE__ */ React7.createElement(ListItem2.Root, {
239
501
  ...props,
240
502
  classNames: [
241
503
  "flex gap-2 items-center mlb-2",
@@ -244,60 +506,60 @@ var DeviceListItem = /* @__PURE__ */ forwardRef2(({ device, onClickAdd, onClickE
244
506
  "data-testid": `device-list-item${isCurrent ? "-current" : ""}`,
245
507
  labelId,
246
508
  ref: forwardedRef
247
- }, /* @__PURE__ */ React5.createElement(Avatar3.Root, {
509
+ }, /* @__PURE__ */ React7.createElement(Avatar3.Root, {
248
510
  status: isCurrent && connectionState === ConnectionState.OFFLINE ? "error" : device.presence === Device.PresenceState.ONLINE ? "active" : "inactive",
249
511
  labelId,
250
512
  hue: fallbackValue.hue,
251
513
  variant: "square"
252
- }, /* @__PURE__ */ React5.createElement(Avatar3.Frame, {
514
+ }, /* @__PURE__ */ React7.createElement(Avatar3.Frame, {
253
515
  classNames: "place-self-center"
254
- }, device.profile?.type ? device.profile.type === DeviceType.AGENT_MANAGED ? /* @__PURE__ */ React5.createElement(Database2, iconProps) : device.profile.type === DeviceType.BROWSER ? /* @__PURE__ */ React5.createElement(Compass, iconProps) : device.profile.type === DeviceType.NATIVE ? /* @__PURE__ */ React5.createElement(Desktop, iconProps) : [
516
+ }, device.profile?.type ? device.profile.type === DeviceType.AGENT_MANAGED ? /* @__PURE__ */ React7.createElement(Database2, iconProps) : device.profile.type === DeviceType.BROWSER ? /* @__PURE__ */ React7.createElement(Compass, iconProps) : device.profile.type === DeviceType.NATIVE ? /* @__PURE__ */ React7.createElement(Desktop, iconProps) : [
255
517
  DeviceType.AGENT,
256
518
  DeviceType.AGENT_MANAGED
257
- ].includes(device.profile.type) ? /* @__PURE__ */ React5.createElement(Robot, iconProps) : device.profile.type === DeviceType.MOBILE ? /* @__PURE__ */ React5.createElement(DeviceMobile, iconProps) : /* @__PURE__ */ React5.createElement(Devices, iconProps) : /* @__PURE__ */ React5.createElement(Avatar3.Fallback, {
519
+ ].includes(device.profile.type) ? /* @__PURE__ */ React7.createElement(Robot, iconProps) : device.profile.type === DeviceType.MOBILE ? /* @__PURE__ */ React7.createElement(DeviceMobile, iconProps) : /* @__PURE__ */ React7.createElement(Devices, iconProps) : /* @__PURE__ */ React7.createElement(Avatar3.Fallback, {
258
520
  text: fallbackValue.emoji
259
- })), /* @__PURE__ */ React5.createElement(Avatar3.Label, {
521
+ })), /* @__PURE__ */ React7.createElement(Avatar3.Label, {
260
522
  classNames: "flex-1 text-sm truncate"
261
- }, displayName), isCurrent && /* @__PURE__ */ React5.createElement(Tag, {
523
+ }, displayName), isCurrent && /* @__PURE__ */ React7.createElement(Tag, {
262
524
  color: "primary"
263
- }, t("current device tag label")), device.kind === DeviceKind.CURRENT && /* @__PURE__ */ React5.createElement(DropdownMenu.Root, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Trigger, {
525
+ }, t("current device tag label")), device.kind === DeviceKind.CURRENT && /* @__PURE__ */ React7.createElement(DropdownMenu2.Root, null, /* @__PURE__ */ React7.createElement(DropdownMenu2.Trigger, {
264
526
  asChild: true
265
- }, /* @__PURE__ */ React5.createElement(Button2, {
527
+ }, /* @__PURE__ */ React7.createElement(Button4, {
266
528
  variant: "ghost",
267
529
  classNames: "pli-0 is-[--rail-action] bs-[--rail-action]",
268
530
  "data-testid": `device-list-item${isCurrent ? "-current" : ""}.options`
269
- }, /* @__PURE__ */ React5.createElement("span", {
531
+ }, /* @__PURE__ */ React7.createElement("span", {
270
532
  className: "sr-only"
271
- }, t("more options label")), /* @__PURE__ */ React5.createElement(DotsThree, {
272
- className: getSize2(5)
273
- }))), /* @__PURE__ */ React5.createElement(DropdownMenu.Content, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Viewport, null, /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
533
+ }, t("more options label")), /* @__PURE__ */ React7.createElement(DotsThree, {
534
+ className: getSize4(5)
535
+ }))), /* @__PURE__ */ React7.createElement(DropdownMenu2.Content, null, /* @__PURE__ */ React7.createElement(DropdownMenu2.Viewport, null, /* @__PURE__ */ React7.createElement(DropdownMenu2.Item, {
274
536
  "data-testid": "device-list-item-current.join-existing",
275
537
  onClick: onClickJoinExisting
276
- }, /* @__PURE__ */ React5.createElement(ShareFat, {
277
- className: getSize2(5)
278
- }), t("choose join new identity label")), onClickRecover && /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
538
+ }, /* @__PURE__ */ React7.createElement(ShareFat, {
539
+ className: getSize4(5)
540
+ }), t("choose join new identity label")), onClickRecover && /* @__PURE__ */ React7.createElement(DropdownMenu2.Item, {
279
541
  "data-testid": "device-list-item-current.recover",
280
542
  onClick: onClickRecover
281
- }, /* @__PURE__ */ React5.createElement(FirstAidKit, {
282
- className: getSize2(5)
283
- }), t("choose recover identity label")), /* @__PURE__ */ React5.createElement(DropdownMenu.Item, {
543
+ }, /* @__PURE__ */ React7.createElement(FirstAidKit, {
544
+ className: getSize4(5)
545
+ }), t("choose recover identity label")), /* @__PURE__ */ React7.createElement(DropdownMenu2.Item, {
284
546
  "data-testid": "device-list-item-current.reset",
285
547
  onClick: onClickReset
286
- }, /* @__PURE__ */ React5.createElement(Power2, {
287
- className: getSize2(5)
548
+ }, /* @__PURE__ */ React7.createElement(Power2, {
549
+ className: getSize4(5)
288
550
  }), t("reset device label")))))));
289
551
  });
290
552
 
291
553
  // packages/sdk/shell/src/components/DeviceList/DeviceList.tsx
292
554
  var DeviceList = ({ devices, connectionState, onClickAdd, onClickEdit, onClickReset, onClickRecover, onClickJoinExisting, onAgentDestroy }) => {
293
- const { t } = useTranslation4("os");
294
- return /* @__PURE__ */ React6.createElement("div", {
555
+ const { t } = useTranslation6("os");
556
+ return /* @__PURE__ */ React8.createElement("div", {
295
557
  role: "none",
296
558
  className: "p-1"
297
- }, /* @__PURE__ */ React6.createElement("h2", {
298
- className: mx5(descriptionText4, "text-center mbs-2")
299
- }, t("devices heading")), devices.length > 0 && /* @__PURE__ */ React6.createElement(List2, null, devices.map((device) => {
300
- return /* @__PURE__ */ React6.createElement(DeviceListItem, {
559
+ }, /* @__PURE__ */ React8.createElement("h2", {
560
+ className: mx6(descriptionText4, "text-center mbs-2")
561
+ }, t("devices heading")), devices.length > 0 && /* @__PURE__ */ React8.createElement(List2, null, devices.map((device) => {
562
+ return /* @__PURE__ */ React8.createElement(DeviceListItem, {
301
563
  key: device.deviceKey.toHex(),
302
564
  device,
303
565
  onClickEdit: () => onClickEdit?.(device),
@@ -307,43 +569,43 @@ var DeviceList = ({ devices, connectionState, onClickAdd, onClickEdit, onClickRe
307
569
  connectionState,
308
570
  onAgentDestroy
309
571
  });
310
- })), /* @__PURE__ */ React6.createElement(Button3, {
572
+ })), /* @__PURE__ */ React8.createElement(Button5, {
311
573
  variant: "ghost",
312
- classNames: "justify-start gap-2 pis-0 pie-3 is-full",
574
+ classNames: "justify-start gap-2 !pis-0 !pie-3 is-full",
313
575
  "data-testid": "devices-panel.create-invitation",
314
576
  onClick: onClickAdd
315
- }, /* @__PURE__ */ React6.createElement("div", {
577
+ }, /* @__PURE__ */ React8.createElement("div", {
316
578
  role: "img",
317
- className: mx5(getSize3(8), "m-1 rounded-sm bg-input grid place-items-center")
318
- }, /* @__PURE__ */ React6.createElement(Plus2, {
579
+ className: mx6(getSize5(8), "m-1 rounded-sm bg-input grid place-items-center")
580
+ }, /* @__PURE__ */ React8.createElement(Plus2, {
319
581
  weight: "light",
320
- className: getSize3(6)
321
- })), /* @__PURE__ */ React6.createElement("span", {
582
+ className: getSize5(6)
583
+ })), /* @__PURE__ */ React8.createElement("span", {
322
584
  className: "grow font-medium text-start"
323
- }, t("choose add device label")), /* @__PURE__ */ React6.createElement(CaretRight, {
585
+ }, t("choose add device label")), /* @__PURE__ */ React8.createElement(CaretRight, {
324
586
  weight: "bold",
325
- className: getSize3(4)
587
+ className: getSize5(4)
326
588
  })));
327
589
  };
328
590
 
329
591
  // packages/sdk/shell/src/components/InvitationList/InvitationListItem.tsx
330
592
  import { X } from "@phosphor-icons/react";
331
593
  import { formatDistanceToNow } from "date-fns";
332
- import React8, { useCallback } from "react";
594
+ import React10, { useCallback } from "react";
333
595
  import { Invitation, useInvitationStatus } from "@dxos/react-client/invitations";
334
- import { Button as Button4, Clipboard, ListItem as ListItem3, useTranslation as useTranslation5, Avatar as Avatar4, useThemeContext as useThemeContext2, Tooltip as Tooltip2 } from "@dxos/react-ui";
335
- import { focusRing, getSize as getSize4, mx as mx7 } from "@dxos/react-ui-theme";
596
+ import { Button as Button6, Clipboard, ListItem as ListItem3, useTranslation as useTranslation7, Avatar as Avatar4, useThemeContext as useThemeContext4, Tooltip as Tooltip4 } from "@dxos/react-ui";
597
+ import { focusRing, getSize as getSize6, mx as mx8 } from "@dxos/react-ui-theme";
336
598
  import { hexToEmoji } from "@dxos/util";
337
599
 
338
600
  // packages/sdk/shell/src/components/AuthCode.tsx
339
- import React7, { useRef } from "react";
340
- import { mx as mx6 } from "@dxos/react-ui-theme";
601
+ import React9, { useRef as useRef3 } from "react";
602
+ import { mx as mx7 } from "@dxos/react-ui-theme";
341
603
  var AuthCode = (props) => {
342
604
  const { code, large, classNames } = props;
343
605
  const l = code?.length ?? 0;
344
606
  const left = code?.slice(0, l / 2);
345
607
  const right = code?.slice(l / 2);
346
- const codeRef = useRef(null);
608
+ const codeRef = useRef3(null);
347
609
  const handleClick = () => {
348
610
  if (codeRef.current) {
349
611
  const selection = window.getSelection();
@@ -354,20 +616,20 @@ var AuthCode = (props) => {
354
616
  }
355
617
  void navigator.clipboard.writeText(code ?? "");
356
618
  };
357
- return /* @__PURE__ */ React7.createElement("span", {
358
- className: mx6(large ? "text-6xl" : "text-2xl", "font-mono pli-2.5 rounded cursor-pointer", classNames),
619
+ return /* @__PURE__ */ React9.createElement("span", {
620
+ className: mx7(large ? "text-6xl" : "text-2xl", "font-mono pli-2.5 rounded cursor-pointer", classNames),
359
621
  onClick: handleClick,
360
622
  ref: codeRef
361
- }, /* @__PURE__ */ React7.createElement("span", {
623
+ }, /* @__PURE__ */ React9.createElement("span", {
362
624
  className: "mie-[0.4em]"
363
- }, left), /* @__PURE__ */ React7.createElement("span", null, right));
625
+ }, left), /* @__PURE__ */ React9.createElement("span", null, right));
364
626
  };
365
627
 
366
628
  // packages/sdk/shell/src/components/InvitationList/InvitationListItem.tsx
367
629
  var InvitationListItem = (props) => {
368
630
  const { invitation } = props;
369
631
  const invitationStatus = useInvitationStatus(invitation);
370
- return /* @__PURE__ */ React8.createElement(InvitationListItemImpl, {
632
+ return /* @__PURE__ */ React10.createElement(InvitationListItemImpl, {
371
633
  ...props,
372
634
  invitationStatus
373
635
  });
@@ -377,11 +639,11 @@ var avatarProps = {
377
639
  variant: "circle"
378
640
  };
379
641
  var AvatarStackEffect = ({ animation, status, reverseEffects }) => {
380
- const { tx } = useThemeContext2();
381
- return /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement("span", {
642
+ const { tx } = useThemeContext4();
643
+ return /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement("span", {
382
644
  role: "none",
383
- className: mx7("absolute inline-end-auto opacity-20", reverseEffects ? "inline-start-3" : "inline-start-1", getSize4(avatarProps.size))
384
- }, /* @__PURE__ */ React8.createElement("span", {
645
+ className: mx8("absolute inline-end-auto opacity-20", reverseEffects ? "inline-start-3" : "inline-start-1", getSize6(avatarProps.size))
646
+ }, /* @__PURE__ */ React10.createElement("span", {
385
647
  role: "none",
386
648
  className: tx("avatar.ring", "avatar__ring", {
387
649
  ...avatarProps,
@@ -391,10 +653,10 @@ var AvatarStackEffect = ({ animation, status, reverseEffects }) => {
391
653
  style: {
392
654
  animationDelay: "400ms"
393
655
  }
394
- })), /* @__PURE__ */ React8.createElement("span", {
656
+ })), /* @__PURE__ */ React10.createElement("span", {
395
657
  role: "none",
396
- className: mx7("absolute inline-end-auto opacity-50", reverseEffects ? "inline-start-2" : "inline-start-2", getSize4(avatarProps.size))
397
- }, /* @__PURE__ */ React8.createElement("span", {
658
+ className: mx8("absolute inline-end-auto opacity-50", reverseEffects ? "inline-start-2" : "inline-start-2", getSize6(avatarProps.size))
659
+ }, /* @__PURE__ */ React10.createElement("span", {
398
660
  role: "none",
399
661
  className: tx("avatar.ring", "avatar__ring", {
400
662
  ...avatarProps,
@@ -407,7 +669,7 @@ var AvatarStackEffect = ({ animation, status, reverseEffects }) => {
407
669
  })));
408
670
  };
409
671
  var InvitationListItemImpl = ({ invitation, invitationStatus: propsInvitationStatus, send, onClickRemove, createInvitationUrl, reverseEffects, ...props }) => {
410
- const { t } = useTranslation5("os");
672
+ const { t } = useTranslation7("os");
411
673
  const { cancel, status: invitationStatus, invitationCode, authCode, multiUse, shareable } = propsInvitationStatus;
412
674
  const isCancellable = !([
413
675
  Invitation.State.ERROR,
@@ -449,38 +711,38 @@ var InvitationListItemImpl = ({ invitation, invitationStatus: propsInvitationSta
449
711
  Invitation.State.SUCCESS
450
712
  ].includes(invitationStatus);
451
713
  const avatarStatus = avatarError ? "error" : avatarGreen ? "active" : "inactive";
452
- return /* @__PURE__ */ React8.createElement(ListItem3.Root, {
714
+ return /* @__PURE__ */ React10.createElement(ListItem3.Root, {
453
715
  id: invitationCode,
454
716
  ...props,
455
717
  classNames: [
456
718
  "flex gap-2 pis-3 pie-1 items-center relative",
457
719
  props.classNames
458
720
  ]
459
- }, /* @__PURE__ */ React8.createElement(ListItem3.Heading, {
721
+ }, /* @__PURE__ */ React10.createElement(ListItem3.Heading, {
460
722
  classNames: "sr-only"
461
- }, t(multiUse ? "invite many list item label" : "invite one list item label")), multiUse && /* @__PURE__ */ React8.createElement(AvatarStackEffect, {
723
+ }, t(multiUse ? "invite many list item label" : "invite one list item label")), multiUse && /* @__PURE__ */ React10.createElement(AvatarStackEffect, {
462
724
  status: avatarStatus,
463
725
  animation: avatarAnimation,
464
726
  reverseEffects
465
- }), /* @__PURE__ */ React8.createElement(Tooltip2.Root, null, /* @__PURE__ */ React8.createElement(Avatar4.Root, {
727
+ }), /* @__PURE__ */ React10.createElement(Tooltip4.Root, null, /* @__PURE__ */ React10.createElement(Avatar4.Root, {
466
728
  ...avatarProps,
467
729
  animation: avatarAnimation,
468
730
  status: avatarStatus
469
- }, /* @__PURE__ */ React8.createElement(Tooltip2.Trigger, {
731
+ }, /* @__PURE__ */ React10.createElement(Tooltip4.Trigger, {
470
732
  asChild: true
471
- }, /* @__PURE__ */ React8.createElement(Avatar4.Frame, {
733
+ }, /* @__PURE__ */ React10.createElement(Avatar4.Frame, {
472
734
  tabIndex: 0,
473
735
  classNames: [
474
736
  focusRing,
475
737
  "relative rounded-full place-self-center"
476
738
  ]
477
- }, /* @__PURE__ */ React8.createElement(Avatar4.Fallback, {
739
+ }, /* @__PURE__ */ React10.createElement(Avatar4.Fallback, {
478
740
  text: hexToEmoji(invitationId)
479
- })))), /* @__PURE__ */ React8.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React8.createElement(Tooltip2.Content, {
741
+ })))), /* @__PURE__ */ React10.createElement(Tooltip4.Portal, null, /* @__PURE__ */ React10.createElement(Tooltip4.Content, {
480
742
  side: "left"
481
- }, t(multiUse ? "invite many qr label" : "invite one qr label"), /* @__PURE__ */ React8.createElement(Tooltip2.Arrow, null)))), showShare && invitationUrl ? /* @__PURE__ */ React8.createElement(Tooltip2.Root, null, /* @__PURE__ */ React8.createElement(React8.Fragment, null, /* @__PURE__ */ React8.createElement(Tooltip2.Trigger, {
743
+ }, t(multiUse ? "invite many qr label" : "invite one qr label"), /* @__PURE__ */ React10.createElement(Tooltip4.Arrow, null)))), showShare && invitationUrl ? /* @__PURE__ */ React10.createElement(Tooltip4.Root, null, /* @__PURE__ */ React10.createElement(React10.Fragment, null, /* @__PURE__ */ React10.createElement(Tooltip4.Trigger, {
482
744
  asChild: true
483
- }, /* @__PURE__ */ React8.createElement(Button4, {
745
+ }, /* @__PURE__ */ React10.createElement(Button6, {
484
746
  variant: "ghost",
485
747
  classNames: "grow justify-start font-medium",
486
748
  onClick: () => send({
@@ -488,64 +750,64 @@ var InvitationListItemImpl = ({ invitation, invitationStatus: propsInvitationSta
488
750
  invitation
489
751
  }),
490
752
  "data-testid": "show-qrcode"
491
- }, /* @__PURE__ */ React8.createElement("span", null, t("open share panel label")))), /* @__PURE__ */ React8.createElement(Clipboard.IconButton, {
753
+ }, /* @__PURE__ */ React10.createElement("span", null, t("open share panel label")))), /* @__PURE__ */ React10.createElement(Clipboard.IconButton, {
492
754
  variant: "ghost",
493
755
  value: invitationUrl
494
- })), /* @__PURE__ */ React8.createElement(Tooltip2.Portal, null, /* @__PURE__ */ React8.createElement(Tooltip2.Content, {
756
+ })), /* @__PURE__ */ React10.createElement(Tooltip4.Portal, null, /* @__PURE__ */ React10.createElement(Tooltip4.Content, {
495
757
  side: "left"
496
- }, invitationHasLifetime && /* @__PURE__ */ React8.createElement("span", null, "Expires ", invitationTimeLeft)))) : showAuthCode ? /* @__PURE__ */ React8.createElement(AuthCode, {
758
+ }, invitationHasLifetime && /* @__PURE__ */ React10.createElement("span", null, "Expires ", invitationTimeLeft)))) : showAuthCode ? /* @__PURE__ */ React10.createElement(AuthCode, {
497
759
  code: authCode,
498
760
  classNames: "grow"
499
- }) : invitationStatus === Invitation.State.CONNECTING ? /* @__PURE__ */ React8.createElement("span", {
761
+ }) : invitationStatus === Invitation.State.CONNECTING ? /* @__PURE__ */ React10.createElement("span", {
500
762
  className: "pli-2 grow text-neutral-500"
501
- }, "Connecting...") : invitationStatus === Invitation.State.AUTHENTICATING ? /* @__PURE__ */ React8.createElement("span", {
763
+ }, "Connecting...") : invitationStatus === Invitation.State.AUTHENTICATING ? /* @__PURE__ */ React10.createElement("span", {
502
764
  className: "pli-2 grow text-neutral-500"
503
- }, "Authenticating...") : invitationStatus === Invitation.State.ERROR || invitationStatus === Invitation.State.TIMEOUT ? /* @__PURE__ */ React8.createElement("span", {
765
+ }, "Authenticating...") : invitationStatus === Invitation.State.ERROR || invitationStatus === Invitation.State.TIMEOUT ? /* @__PURE__ */ React10.createElement("span", {
504
766
  className: "pli-2 grow text-neutral-500"
505
- }, "Failed") : invitationStatus === Invitation.State.CANCELLED ? /* @__PURE__ */ React8.createElement("span", {
767
+ }, "Failed") : invitationStatus === Invitation.State.CANCELLED ? /* @__PURE__ */ React10.createElement("span", {
506
768
  className: "pli-2 grow text-neutral-500"
507
- }, "Cancelled") : invitationStatus === Invitation.State.SUCCESS ? /* @__PURE__ */ React8.createElement("span", {
769
+ }, "Cancelled") : invitationStatus === Invitation.State.SUCCESS ? /* @__PURE__ */ React10.createElement("span", {
508
770
  className: "pli-2 grow truncate"
509
- }, "User joined") : !shareable ? /* @__PURE__ */ React8.createElement("span", {
771
+ }, "User joined") : !shareable ? /* @__PURE__ */ React10.createElement("span", {
510
772
  className: "pli-2 grow text-neutral-500"
511
- }, "Pending Invitation") : /* @__PURE__ */ React8.createElement("span", {
773
+ }, "Pending Invitation") : /* @__PURE__ */ React10.createElement("span", {
512
774
  className: "grow"
513
- }, " "), isCancellable ? /* @__PURE__ */ React8.createElement(Button4, {
775
+ }, " "), isCancellable ? /* @__PURE__ */ React10.createElement(Button6, {
514
776
  variant: "ghost",
515
777
  classNames: "flex gap-1 pli-0",
516
778
  onClick: cancel,
517
779
  "data-testid": "cancel-invitation"
518
- }, /* @__PURE__ */ React8.createElement("span", {
780
+ }, /* @__PURE__ */ React10.createElement("span", {
519
781
  className: "sr-only"
520
- }, t("cancel invitation label")), /* @__PURE__ */ React8.createElement(X, {
521
- className: getSize4(4)
522
- })) : /* @__PURE__ */ React8.createElement(Button4, {
782
+ }, t("cancel invitation label")), /* @__PURE__ */ React10.createElement(X, {
783
+ className: getSize6(4)
784
+ })) : /* @__PURE__ */ React10.createElement(Button6, {
523
785
  variant: "ghost",
524
786
  classNames: "flex gap-1 pli-0",
525
787
  onClick: handleClickRemove,
526
788
  "data-testid": "remove-invitation"
527
- }, /* @__PURE__ */ React8.createElement("span", {
789
+ }, /* @__PURE__ */ React10.createElement("span", {
528
790
  className: "sr-only"
529
- }, t("remove invitation label")), /* @__PURE__ */ React8.createElement(X, {
530
- className: getSize4(4)
791
+ }, t("remove invitation label")), /* @__PURE__ */ React10.createElement(X, {
792
+ className: getSize6(4)
531
793
  })));
532
794
  };
533
795
 
534
796
  // packages/sdk/shell/src/components/InvitationList/InvitationListContainer.tsx
535
- import React10, { useCallback as useCallback2 } from "react";
797
+ import React12, { useCallback as useCallback2 } from "react";
536
798
  import { useSpace, useSpaceInvitations } from "@dxos/react-client/echo";
537
799
 
538
800
  // packages/sdk/shell/src/components/InvitationList/InvitationList.tsx
539
- import React9 from "react";
801
+ import React11 from "react";
540
802
  import { List as List3 } from "@dxos/react-ui";
541
- import { mx as mx8 } from "@dxos/react-ui-theme";
803
+ import { mx as mx9 } from "@dxos/react-ui-theme";
542
804
  var InvitationList = ({ invitations, send, ...invitationProps }) => {
543
805
  const { className, InvitationListItem: Item = InvitationListItem } = invitationProps;
544
- return /* @__PURE__ */ React9.createElement(List3, {
545
- classNames: mx8("flex flex-col gap-2", className)
806
+ return /* @__PURE__ */ React11.createElement(List3, {
807
+ classNames: mx9("flex flex-col gap-2", className)
546
808
  }, invitations.map((invitation) => {
547
809
  const value = invitation.get().invitationId;
548
- return /* @__PURE__ */ React9.createElement(Item, {
810
+ return /* @__PURE__ */ React11.createElement(Item, {
549
811
  key: value,
550
812
  send,
551
813
  invitation,
@@ -563,7 +825,7 @@ var InvitationListContainer = ({ spaceKey, createInvitationUrl, send }) => {
563
825
  }, [
564
826
  space
565
827
  ]);
566
- return /* @__PURE__ */ React10.createElement(InvitationList, {
828
+ return /* @__PURE__ */ React12.createElement(InvitationList, {
567
829
  invitations,
568
830
  onClickRemove: handleClickRemove,
569
831
  createInvitationUrl,
@@ -572,11 +834,11 @@ var InvitationListContainer = ({ spaceKey, createInvitationUrl, send }) => {
572
834
  };
573
835
 
574
836
  // packages/sdk/shell/src/components/Panel/Action.tsx
575
- import { CaretDown, Check, Placeholder } from "@phosphor-icons/react";
576
- import { useControllableState } from "@radix-ui/react-use-controllable-state";
577
- import React11, { forwardRef as forwardRef3 } from "react";
578
- import { Button as Button5, DropdownMenu as DropdownMenu2, useTranslation as useTranslation6 } from "@dxos/react-ui";
579
- import { descriptionText as descriptionText5, getSize as getSize5, mx as mx9 } from "@dxos/react-ui-theme";
837
+ import { CaretDown as CaretDown3, Check as Check2, Placeholder } from "@phosphor-icons/react";
838
+ import { useControllableState as useControllableState3 } from "@radix-ui/react-use-controllable-state";
839
+ import React13, { forwardRef as forwardRef3 } from "react";
840
+ import { Button as Button7, DropdownMenu as DropdownMenu3, useTranslation as useTranslation8 } from "@dxos/react-ui";
841
+ import { descriptionText as descriptionText5, getSize as getSize7, mx as mx10 } from "@dxos/react-ui-theme";
580
842
  var defaultActions = {
581
843
  noopAction: {
582
844
  label: "No-op",
@@ -589,17 +851,17 @@ var defaultActions = {
589
851
  var BifurcatedAction = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
590
852
  const { classNames, variant, isFull = true, actions = defaultActions, activeAction: propsActiveAction, onChangeActiveAction, defaultActiveAction, "data-testid": testId, ...rest } = props;
591
853
  const dropdownTestId = testId && `${testId}.more`;
592
- const [activeActionKey2 = Object.keys(actions)[0], setActiveAction] = useControllableState({
854
+ const [activeActionKey2 = Object.keys(actions)[0], setActiveAction] = useControllableState3({
593
855
  prop: propsActiveAction,
594
856
  onChange: onChangeActiveAction,
595
857
  defaultProp: defaultActiveAction
596
858
  });
597
859
  const activeAction = actions[activeActionKey2] ?? {};
598
- const { t } = useTranslation6("os");
599
- return /* @__PURE__ */ React11.createElement("div", {
860
+ const { t } = useTranslation8("os");
861
+ return /* @__PURE__ */ React13.createElement("div", {
600
862
  role: "none",
601
- className: mx9("mbs-2 flex gap-px items-center", isFull && "is-full")
602
- }, /* @__PURE__ */ React11.createElement(Button5, {
863
+ className: mx10("mbs-2 flex gap-px items-center", isFull && "is-full")
864
+ }, /* @__PURE__ */ React13.createElement(Button7, {
603
865
  ...rest,
604
866
  classNames: [
605
867
  "bs-11 flex-1 min-is-0 flex gap-2 rounded-ie-none",
@@ -609,22 +871,22 @@ var BifurcatedAction = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
609
871
  variant,
610
872
  "data-testid": testId,
611
873
  onClick: activeAction.onClick
612
- }, activeAction.icon && /* @__PURE__ */ React11.createElement(activeAction.icon, {
613
- className: getSize5(5)
614
- }), /* @__PURE__ */ React11.createElement("span", null, activeAction.label)), /* @__PURE__ */ React11.createElement(DropdownMenu2.Root, null, /* @__PURE__ */ React11.createElement(DropdownMenu2.Trigger, {
874
+ }, activeAction.icon && /* @__PURE__ */ React13.createElement(activeAction.icon, {
875
+ className: getSize7(5)
876
+ }), /* @__PURE__ */ React13.createElement("span", null, activeAction.label)), /* @__PURE__ */ React13.createElement(DropdownMenu3.Root, null, /* @__PURE__ */ React13.createElement(DropdownMenu3.Trigger, {
615
877
  asChild: true
616
- }, /* @__PURE__ */ React11.createElement(Button5, {
878
+ }, /* @__PURE__ */ React13.createElement(Button7, {
617
879
  classNames: [
618
880
  "bs-11 flex-none rounded-is-none",
619
881
  classNames
620
882
  ],
621
883
  "data-testid": dropdownTestId
622
- }, /* @__PURE__ */ React11.createElement("span", {
884
+ }, /* @__PURE__ */ React13.createElement("span", {
623
885
  className: "sr-only"
624
- }, t("invite options label")), /* @__PURE__ */ React11.createElement(CaretDown, {
625
- className: getSize5(4)
626
- }))), /* @__PURE__ */ React11.createElement(DropdownMenu2.Portal, null, /* @__PURE__ */ React11.createElement(DropdownMenu2.Content, null, /* @__PURE__ */ React11.createElement(DropdownMenu2.Viewport, null, Object.entries(actions).map(([id, action]) => {
627
- return /* @__PURE__ */ React11.createElement(DropdownMenu2.CheckboxItem, {
886
+ }, t("invite options label")), /* @__PURE__ */ React13.createElement(CaretDown3, {
887
+ className: getSize7(4)
888
+ }))), /* @__PURE__ */ React13.createElement(DropdownMenu3.Portal, null, /* @__PURE__ */ React13.createElement(DropdownMenu3.Content, null, /* @__PURE__ */ React13.createElement(DropdownMenu3.Viewport, null, Object.entries(actions).map(([id, action]) => {
889
+ return /* @__PURE__ */ React13.createElement(DropdownMenu3.CheckboxItem, {
628
890
  key: id,
629
891
  "aria-labelledby": `${id}__label`,
630
892
  "aria-describedby": `${id}__description`,
@@ -632,27 +894,27 @@ var BifurcatedAction = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
632
894
  onCheckedChange: (checked) => checked && setActiveAction(id),
633
895
  classNames: "gap-2",
634
896
  "data-testid": action.testId
635
- }, action.icon && /* @__PURE__ */ React11.createElement(action.icon, {
636
- className: getSize5(5)
637
- }), /* @__PURE__ */ React11.createElement("div", {
897
+ }, action.icon && /* @__PURE__ */ React13.createElement(action.icon, {
898
+ className: getSize7(5)
899
+ }), /* @__PURE__ */ React13.createElement("div", {
638
900
  role: "none",
639
901
  className: "flex-1 min-is-0 space-b-1"
640
- }, /* @__PURE__ */ React11.createElement("p", {
902
+ }, /* @__PURE__ */ React13.createElement("p", {
641
903
  id: `${id}__label`
642
- }, action.label), action.description && /* @__PURE__ */ React11.createElement("p", {
904
+ }, action.label), action.description && /* @__PURE__ */ React13.createElement("p", {
643
905
  id: `${id}__description`,
644
906
  className: descriptionText5
645
- }, action.description)), /* @__PURE__ */ React11.createElement(DropdownMenu2.ItemIndicator, {
907
+ }, action.description)), /* @__PURE__ */ React13.createElement(DropdownMenu3.ItemIndicator, {
646
908
  asChild: true
647
- }, /* @__PURE__ */ React11.createElement(Check, {
909
+ }, /* @__PURE__ */ React13.createElement(Check2, {
648
910
  weight: "bold",
649
- className: getSize5(4)
911
+ className: getSize7(4)
650
912
  })));
651
- })), /* @__PURE__ */ React11.createElement(DropdownMenu2.Arrow, null)))));
913
+ })), /* @__PURE__ */ React13.createElement(DropdownMenu3.Arrow, null)))));
652
914
  });
653
915
  var Action = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
654
916
  const { children, classNames, variant, isFull = true, ...rest } = props;
655
- return /* @__PURE__ */ React11.createElement(Button5, {
917
+ return /* @__PURE__ */ React13.createElement(Button7, {
656
918
  ...rest,
657
919
  classNames: [
658
920
  isFull && "is-full",
@@ -665,49 +927,49 @@ var Action = /* @__PURE__ */ forwardRef3((props, forwardedRef) => {
665
927
  });
666
928
 
667
929
  // packages/sdk/shell/src/components/Panel/Actions.tsx
668
- import React12, { forwardRef as forwardRef4 } from "react";
669
- import { mx as mx10 } from "@dxos/react-ui-theme";
930
+ import React14, { forwardRef as forwardRef4 } from "react";
931
+ import { mx as mx11 } from "@dxos/react-ui-theme";
670
932
  var Actions = /* @__PURE__ */ forwardRef4(({ classNames, children, ...props }, forwardedRef) => {
671
- return /* @__PURE__ */ React12.createElement("div", {
933
+ return /* @__PURE__ */ React14.createElement("div", {
672
934
  ...props,
673
- className: mx10("flex flex-col gap-2 mbs-2", Array.isArray(children) && children.length > 1 ? "justify-between" : "justify-center", classNames),
935
+ className: mx11("flex flex-col gap-2 mbs-2", Array.isArray(children) && children.length > 1 ? "justify-between" : "justify-center", classNames),
674
936
  ref: forwardedRef
675
937
  }, children);
676
938
  });
677
939
 
678
940
  // packages/sdk/shell/src/components/Panel/CloseButton.tsx
679
941
  import { X as X2 } from "@phosphor-icons/react";
680
- import React13 from "react";
681
- import { Button as Button6, useTranslation as useTranslation7 } from "@dxos/react-ui";
682
- import { getSize as getSize6, mx as mx11 } from "@dxos/react-ui-theme";
942
+ import React15 from "react";
943
+ import { Button as Button8, useTranslation as useTranslation9 } from "@dxos/react-ui";
944
+ import { getSize as getSize8, mx as mx12 } from "@dxos/react-ui-theme";
683
945
  var CloseButton = ({ onDone, ...props }) => {
684
- const { t } = useTranslation7("os");
685
- return /* @__PURE__ */ React13.createElement(Button6, {
946
+ const { t } = useTranslation9("os");
947
+ return /* @__PURE__ */ React15.createElement(Button8, {
686
948
  variant: "ghost",
687
- classNames: mx11("plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]"),
949
+ classNames: mx12("plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]"),
688
950
  onClick: () => onDone?.(),
689
951
  ...props
690
- }, /* @__PURE__ */ React13.createElement(X2, {
952
+ }, /* @__PURE__ */ React15.createElement(X2, {
691
953
  weight: "bold",
692
- className: getSize6(4)
693
- }), /* @__PURE__ */ React13.createElement("span", {
954
+ className: getSize8(4)
955
+ }), /* @__PURE__ */ React15.createElement("span", {
694
956
  className: "sr-only"
695
957
  }, t("exit label")));
696
958
  };
697
959
 
698
960
  // packages/sdk/shell/src/components/Panel/Emoji.tsx
699
- import React14 from "react";
700
- import { mx as mx12, getSize as getSize7 } from "@dxos/react-ui-theme";
961
+ import React16 from "react";
962
+ import { mx as mx13, getSize as getSize9 } from "@dxos/react-ui-theme";
701
963
  var Emoji = ({ text, className }) => {
702
964
  const size = 14;
703
- return /* @__PURE__ */ React14.createElement("div", {
965
+ return /* @__PURE__ */ React16.createElement("div", {
704
966
  role: "none",
705
- className: mx12(getSize7(size), "rounded relative pointer-events-none", className)
706
- }, /* @__PURE__ */ React14.createElement("svg", {
967
+ className: mx13(getSize9(size), "rounded relative pointer-events-none", className)
968
+ }, /* @__PURE__ */ React16.createElement("svg", {
707
969
  viewBox: `0 0 ${size * 4} ${size * 4}`,
708
970
  width: size * 4,
709
971
  height: size * 4
710
- }, /* @__PURE__ */ React14.createElement("text", {
972
+ }, /* @__PURE__ */ React16.createElement("text", {
711
973
  x: "50%",
712
974
  y: "50%",
713
975
  textAnchor: "middle",
@@ -718,57 +980,57 @@ var Emoji = ({ text, className }) => {
718
980
  };
719
981
  var Centered = (props) => {
720
982
  const { children } = props;
721
- return /* @__PURE__ */ React14.createElement("div", {
983
+ return /* @__PURE__ */ React16.createElement("div", {
722
984
  role: "none",
723
985
  className: "absolute inset-0 flex items-center justify-center"
724
986
  }, children);
725
987
  };
726
988
 
727
989
  // packages/sdk/shell/src/components/Panel/Heading.tsx
728
- import React15, { forwardRef as forwardRef5 } from "react";
729
- import { descriptionText as descriptionText6, mx as mx13 } from "@dxos/react-ui-theme";
990
+ import React17, { forwardRef as forwardRef5 } from "react";
991
+ import { descriptionText as descriptionText6, mx as mx14 } from "@dxos/react-ui-theme";
730
992
  var Heading = /* @__PURE__ */ forwardRef5(({ titleId, title, titleSrOnly, children, corner }, forwardedRef) => {
731
- return /* @__PURE__ */ React15.createElement("div", {
993
+ return /* @__PURE__ */ React17.createElement("div", {
732
994
  role: "none",
733
995
  className: "pbe-2 relative",
734
996
  ref: forwardedRef
735
- }, corner, /* @__PURE__ */ React15.createElement("h1", {
997
+ }, corner, /* @__PURE__ */ React17.createElement("h1", {
736
998
  ...!titleSrOnly && {
737
999
  id: titleId
738
1000
  },
739
- className: mx13(descriptionText6, "text-center mlb-2", titleSrOnly && "invisible")
740
- }, title), titleSrOnly && /* @__PURE__ */ React15.createElement("span", {
1001
+ className: mx14(descriptionText6, "text-center mlb-2", titleSrOnly && "invisible")
1002
+ }, title), titleSrOnly && /* @__PURE__ */ React17.createElement("span", {
741
1003
  id: titleId
742
1004
  }, title), children);
743
1005
  });
744
1006
 
745
1007
  // packages/sdk/shell/src/components/Panel/Label.tsx
746
- import React16 from "react";
747
- import { descriptionText as descriptionText7, mx as mx14 } from "@dxos/react-ui-theme";
1008
+ import React18 from "react";
1009
+ import { descriptionText as descriptionText7, mx as mx15 } from "@dxos/react-ui-theme";
748
1010
  var Label = (props) => {
749
1011
  const { children } = props;
750
- return /* @__PURE__ */ React16.createElement("span", {
751
- className: mx14(descriptionText7, "text-center mli-6 whitespace-normal")
1012
+ return /* @__PURE__ */ React18.createElement("span", {
1013
+ className: mx15(descriptionText7, "text-center mli-6 whitespace-normal")
752
1014
  }, children);
753
1015
  };
754
1016
 
755
1017
  // packages/sdk/shell/src/components/Panel/Input.tsx
756
- import React17 from "react";
1018
+ import React19 from "react";
757
1019
  import { Input as UiInput } from "@dxos/react-ui";
758
1020
  var Input = ({ validationMessage, label, ...props }) => {
759
- return /* @__PURE__ */ React17.createElement(UiInput.Root, null, /* @__PURE__ */ React17.createElement(UiInput.Label, null, label), /* @__PURE__ */ React17.createElement(UiInput.TextInput, {
1021
+ return /* @__PURE__ */ React19.createElement(UiInput.Root, null, /* @__PURE__ */ React19.createElement(UiInput.Label, null, label), /* @__PURE__ */ React19.createElement(UiInput.TextInput, {
760
1022
  ...props,
761
1023
  classNames: "plb-3 mbs-2 text-center"
762
- }), /* @__PURE__ */ React17.createElement(UiInput.DescriptionAndValidation, null, validationMessage && /* @__PURE__ */ React17.createElement(UiInput.Validation, null, validationMessage)));
1024
+ }), /* @__PURE__ */ React19.createElement(UiInput.DescriptionAndValidation, null, validationMessage && /* @__PURE__ */ React19.createElement(UiInput.Validation, null, validationMessage)));
763
1025
  };
764
1026
 
765
1027
  // packages/sdk/shell/src/components/Panel/StepHeading.tsx
766
- import React18, { forwardRef as forwardRef6 } from "react";
767
- import { mx as mx15 } from "@dxos/react-ui-theme";
1028
+ import React20, { forwardRef as forwardRef6 } from "react";
1029
+ import { mx as mx16 } from "@dxos/react-ui-theme";
768
1030
  var StepHeading = /* @__PURE__ */ forwardRef6(({ children, className, ...props }, forwardedRef) => {
769
- return /* @__PURE__ */ React18.createElement("h2", {
1031
+ return /* @__PURE__ */ React20.createElement("h2", {
770
1032
  ...props,
771
- className: mx15("font-normal text-sm mbe-4 mli-1 text-center", className),
1033
+ className: mx16("font-normal text-sm mbe-4 mli-1 text-center", className),
772
1034
  ref: forwardedRef
773
1035
  }, children);
774
1036
  });
@@ -776,31 +1038,31 @@ var StepHeading = /* @__PURE__ */ forwardRef6(({ children, className, ...props }
776
1038
  // packages/sdk/shell/src/components/Viewport/Viewport.tsx
777
1039
  import { useFocusFinders } from "@fluentui/react-tabster";
778
1040
  import { createContextScope } from "@radix-ui/react-context";
779
- import { useControllableState as useControllableState2 } from "@radix-ui/react-use-controllable-state";
780
- import React19, { forwardRef as forwardRef7, useEffect } from "react";
1041
+ import { useControllableState as useControllableState4 } from "@radix-ui/react-use-controllable-state";
1042
+ import React21, { forwardRef as forwardRef7, useEffect } from "react";
781
1043
  import { useForwardedRef } from "@dxos/react-ui";
782
- import { mx as mx16 } from "@dxos/react-ui-theme";
1044
+ import { mx as mx17 } from "@dxos/react-ui-theme";
783
1045
  var VIEWPORT_NAME = "Viewport";
784
1046
  var VIEWS_NAME = "ViewportViews";
785
1047
  var VIEW_NAME = "ViewportView";
786
1048
  var [createViewportContext, createViewportScope] = createContextScope(VIEWPORT_NAME, []);
787
1049
  var [ViewportProvider, useViewportContext] = createViewportContext(VIEWPORT_NAME);
788
1050
  var ViewportRoot = ({ __viewportScope, classNames, children, defaultActiveView, activeView: propsActiveView, focusManaged = false, onActiveViewChange, ...props }) => {
789
- const [activeView = "never", setActiveView] = useControllableState2({
1051
+ const [activeView = "never", setActiveView] = useControllableState4({
790
1052
  prop: propsActiveView,
791
1053
  defaultProp: defaultActiveView,
792
1054
  onChange: onActiveViewChange
793
1055
  });
794
- return /* @__PURE__ */ React19.createElement(ViewportProvider, {
1056
+ return /* @__PURE__ */ React21.createElement(ViewportProvider, {
795
1057
  focusManaged,
796
1058
  activeView,
797
1059
  setActiveView,
798
1060
  scope: __viewportScope
799
- }, /* @__PURE__ */ React19.createElement("div", {
1061
+ }, /* @__PURE__ */ React21.createElement("div", {
800
1062
  role: "region",
801
1063
  "aria-live": "polite",
802
1064
  ...props,
803
- className: mx16("is-full overflow-hidden", classNames)
1065
+ className: mx17("is-full overflow-hidden", classNames)
804
1066
  }, children));
805
1067
  };
806
1068
  ViewportRoot.displayName = VIEWPORT_NAME;
@@ -808,11 +1070,11 @@ var ViewportViews = ({ classNames, children, ...props }) => {
808
1070
  const size = {
809
1071
  inlineSize: `${Math.ceil(children.length) * 100}%`
810
1072
  };
811
- return /* @__PURE__ */ React19.createElement("div", {
1073
+ return /* @__PURE__ */ React21.createElement("div", {
812
1074
  role: "none",
813
1075
  style: size,
814
1076
  ...props,
815
- className: mx16("flex", classNames)
1077
+ className: mx17("flex", classNames)
816
1078
  }, children);
817
1079
  };
818
1080
  ViewportViews.displayName = VIEWS_NAME;
@@ -830,12 +1092,12 @@ var ViewportView = /* @__PURE__ */ forwardRef7(({ __viewportScope, classNames, c
830
1092
  ref.current,
831
1093
  isActive
832
1094
  ]);
833
- return /* @__PURE__ */ React19.createElement("section", {
1095
+ return /* @__PURE__ */ React21.createElement("section", {
834
1096
  ...props,
835
1097
  ...!isActive && {
836
1098
  "aria-hidden": true
837
1099
  },
838
- className: mx16("min-is-0 flex-1 flex flex-col", isActive ? "order-2" : "order-4 invisible", classNames),
1100
+ className: mx17("min-is-0 flex-1 flex flex-col", isActive ? "order-2" : "order-4 invisible", classNames),
839
1101
  ref
840
1102
  }, children);
841
1103
  });
@@ -847,44 +1109,43 @@ var Viewport = {
847
1109
  };
848
1110
 
849
1111
  // packages/sdk/shell/src/components/SpaceListItem.tsx
850
- import React20, { forwardRef as forwardRef8 } from "react";
1112
+ import React22, { forwardRef as forwardRef8 } from "react";
851
1113
  import { Avatar as Avatar5, useId as useId4 } from "@dxos/react-ui";
852
- import { mx as mx17 } from "@dxos/react-ui-theme";
1114
+ import { mx as mx18 } from "@dxos/react-ui-theme";
853
1115
  import { humanize, keyToEmoji } from "@dxos/util";
854
1116
  var SpaceListItem = /* @__PURE__ */ forwardRef8(({ space, onClick }, ref) => {
855
1117
  const fallbackValue = keyToEmoji(space.key);
856
1118
  const labelId = useId4("identityListItem__label");
857
1119
  const displayName = space.properties.name ?? humanize(space.key.toHex());
858
- return /* @__PURE__ */ React20.createElement("li", {
859
- className: mx17("flex gap-2 items-center mbe-2", onClick && "cursor-pointer"),
1120
+ return /* @__PURE__ */ React22.createElement("li", {
1121
+ className: mx18("flex gap-2 items-center mbe-2", onClick && "cursor-pointer"),
860
1122
  onClick: () => onClick?.(),
861
1123
  ref,
862
1124
  "data-testid": "space-list-item"
863
- }, /* @__PURE__ */ React20.createElement(Avatar5.Root, {
1125
+ }, /* @__PURE__ */ React22.createElement(Avatar5.Root, {
864
1126
  labelId
865
- }, /* @__PURE__ */ React20.createElement(Avatar5.Frame, null, /* @__PURE__ */ React20.createElement(Avatar5.Fallback, {
1127
+ }, /* @__PURE__ */ React22.createElement(Avatar5.Frame, null, /* @__PURE__ */ React22.createElement(Avatar5.Fallback, {
866
1128
  text: fallbackValue
867
- })), /* @__PURE__ */ React20.createElement(Avatar5.Label, {
1129
+ })), /* @__PURE__ */ React22.createElement(Avatar5.Label, {
868
1130
  classNames: "text-sm truncate"
869
1131
  }, displayName)));
870
1132
  });
871
1133
 
872
1134
  // packages/sdk/shell/src/composites/IdentityDialog/IdentityDialog.tsx
873
- import React38 from "react";
1135
+ import React40 from "react";
874
1136
  import { Clipboard as Clipboard3, Dialog, useId as useId10 } from "@dxos/react-ui";
875
1137
 
876
1138
  // packages/sdk/shell/src/panels/IdentityPanel/IdentityPanel.tsx
877
1139
  import { Key, Plugs, PlugsConnected } from "@phosphor-icons/react";
878
- import React25, { useEffect as useEffect4, useMemo as useMemo3, useState as useState5 } from "react";
1140
+ import React27, { useEffect as useEffect4, useMemo as useMemo3, useState as useState7 } from "react";
879
1141
  import { generateName as generateName3 } from "@dxos/display-name";
880
1142
  import { log as log7 } from "@dxos/log";
881
1143
  import { useClient as useClient6 } from "@dxos/react-client";
882
1144
  import { useIdentity, useDevices, useHaloInvitations as useHaloInvitations2 } from "@dxos/react-client/halo";
883
1145
  import { useInvitationStatus as useInvitationStatus2 } from "@dxos/react-client/invitations";
884
1146
  import { useNetworkStatus, ConnectionState as ConnectionState2 } from "@dxos/react-client/mesh";
885
- import { Avatar as Avatar6, Input as Input2, Toolbar, Tooltip as Tooltip3, useClipboard as useClipboard2, useId as useId6, useTranslation as useTranslation11 } from "@dxos/react-ui";
886
- import { EmojiPickerToolbarButton, HuePickerToolbarButton } from "@dxos/react-ui-pickers";
887
- import { getSize as getSize10 } from "@dxos/react-ui-theme";
1147
+ import { Avatar as Avatar6, Input as Input2, Toolbar as Toolbar3, Tooltip as Tooltip5, useClipboard as useClipboard2, useId as useId6, useTranslation as useTranslation13 } from "@dxos/react-ui";
1148
+ import { getSize as getSize12 } from "@dxos/react-ui-theme";
888
1149
  import { hexToEmoji as hexToEmoji4, hexToHue as hexToHue2, keyToFallback as keyToFallback3 } from "@dxos/util";
889
1150
 
890
1151
  // packages/sdk/shell/src/panels/IdentityPanel/identityMachine.ts
@@ -1000,7 +1261,7 @@ var useIdentityMachine = (client, options) => {
1000
1261
  };
1001
1262
 
1002
1263
  // packages/sdk/shell/src/panels/IdentityPanel/steps/IdentityActionChooser.tsx
1003
- import React21 from "react";
1264
+ import React23 from "react";
1004
1265
  import { log as log2 } from "@dxos/log";
1005
1266
  import { useClient as useClient2 } from "@dxos/react-client";
1006
1267
  import { useHaloInvitations, DeviceType as DeviceType2 } from "@dxos/react-client/halo";
@@ -1036,7 +1297,7 @@ var IdentityActionChooser = (props) => {
1036
1297
  });
1037
1298
  };
1038
1299
  const isProduction = client.config.values.runtime?.app?.env?.DX_ENVIRONMENT === "production";
1039
- return /* @__PURE__ */ React21.createElement(IdentityActionChooserImpl, {
1300
+ return /* @__PURE__ */ React23.createElement(IdentityActionChooserImpl, {
1040
1301
  ...props,
1041
1302
  onClickAdd: createInvitation,
1042
1303
  onClickJoinExisting: () => send?.({
@@ -1052,10 +1313,10 @@ var IdentityActionChooser = (props) => {
1052
1313
  };
1053
1314
  var IdentityActionChooserImpl = ({ devices, connectionState, agentHostingEnabled, onClickAdd, onClickJoinExisting, onClickRecover, onClickReset, ...agentProps }) => {
1054
1315
  const edgeDeviceAvailable = devices.find((device) => device.profile?.type === DeviceType2.AGENT_MANAGED && device.profile?.os?.toUpperCase() === "EDGE");
1055
- return /* @__PURE__ */ React21.createElement("div", {
1316
+ return /* @__PURE__ */ React23.createElement("div", {
1056
1317
  role: "none",
1057
1318
  className: "bs-40 grow overflow-y-auto"
1058
- }, /* @__PURE__ */ React21.createElement(DeviceList, {
1319
+ }, /* @__PURE__ */ React23.createElement(DeviceList, {
1059
1320
  devices,
1060
1321
  connectionState,
1061
1322
  onClickAdd,
@@ -1063,21 +1324,20 @@ var IdentityActionChooserImpl = ({ devices, connectionState, agentHostingEnabled
1063
1324
  onClickRecover: agentProps.agentStatus === "created" ? onClickRecover : void 0,
1064
1325
  onClickReset,
1065
1326
  onAgentDestroy: agentProps.onAgentDestroy
1066
- }), !edgeDeviceAvailable && agentHostingEnabled && /* @__PURE__ */ React21.createElement(AgentConfig, agentProps));
1327
+ }), !edgeDeviceAvailable && agentHostingEnabled && /* @__PURE__ */ React23.createElement(AgentConfig, agentProps));
1067
1328
  };
1068
1329
 
1069
1330
  // packages/sdk/shell/src/panels/IdentityPanel/steps/ProfileForm.tsx
1070
- import React22, { useState } from "react";
1331
+ import React24, { useState as useState3 } from "react";
1071
1332
  import { log as log3 } from "@dxos/log";
1072
- import { useClipboard, useTranslation as useTranslation8 } from "@dxos/react-ui";
1073
- import { EmojiPickerBlock, HuePickerBlock } from "@dxos/react-ui-pickers";
1333
+ import { useClipboard, useTranslation as useTranslation10 } from "@dxos/react-ui";
1074
1334
  import { hexToEmoji as hexToEmoji2, hexToHue } from "@dxos/util";
1075
1335
 
1076
1336
  // packages/sdk/shell/src/panels/IdentityPanel/useAgentHandlers.ts
1077
1337
  import { useClient as useClient5 } from "@dxos/react-client";
1078
1338
 
1079
1339
  // packages/sdk/shell/src/panels/IdentityPanel/useEdgeAgentsHandlers.ts
1080
- import { useEffect as useEffect2, useState as useState2 } from "react";
1340
+ import { useEffect as useEffect2, useState as useState4 } from "react";
1081
1341
  import { invariant } from "@dxos/invariant";
1082
1342
  import { log as log4 } from "@dxos/log";
1083
1343
  import { QueryAgentStatusResponse } from "@dxos/protocols/proto/dxos/client/services";
@@ -1085,9 +1345,9 @@ import { EdgeReplicationSetting } from "@dxos/protocols/proto/dxos/echo/metadata
1085
1345
  import { useClient as useClient3 } from "@dxos/react-client";
1086
1346
  var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/IdentityPanel/useEdgeAgentsHandlers.ts";
1087
1347
  var useEdgeAgentHandlers = ({ identity }) => {
1088
- const [validationMessage, setValidationMessage] = useState2("");
1089
- const [lastReceivedStatus, setLastReceivedStatus] = useState2(QueryAgentStatusResponse.AgentStatus.UNKNOWN);
1090
- const [agentStatus, setAgentStatus] = useState2("getting");
1348
+ const [validationMessage, setValidationMessage] = useState4("");
1349
+ const [lastReceivedStatus, setLastReceivedStatus] = useState4(QueryAgentStatusResponse.AgentStatus.UNKNOWN);
1350
+ const [agentStatus, setAgentStatus] = useState4("getting");
1091
1351
  const client = useClient3();
1092
1352
  const agentHostingEnabled = Boolean(client.config.values.runtime?.client?.edgeFeatures?.agents);
1093
1353
  const handleStatus = (status) => {
@@ -1173,15 +1433,15 @@ var useEdgeAgentHandlers = ({ identity }) => {
1173
1433
  };
1174
1434
 
1175
1435
  // packages/sdk/shell/src/panels/IdentityPanel/useKubeAgentHandlers.ts
1176
- import { useCallback as useCallback3, useEffect as useEffect3, useState as useState3 } from "react";
1436
+ import { useCallback as useCallback3, useEffect as useEffect3, useState as useState5 } from "react";
1177
1437
  import { invariant as invariant2 } from "@dxos/invariant";
1178
1438
  import { log as log5 } from "@dxos/log";
1179
1439
  import { useClient as useClient4, useAgentHostingClient } from "@dxos/react-client";
1180
1440
  import { Invitation as Invitation3, InvitationEncoder as InvitationEncoder2 } from "@dxos/react-client/invitations";
1181
1441
  var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/IdentityPanel/useKubeAgentHandlers.ts";
1182
1442
  var useKubeAgentHandlers = ({ invitations, identity }) => {
1183
- const [validationMessage, setValidationMessage] = useState3("");
1184
- const [agentStatus, setAgentStatus] = useState3("getting");
1443
+ const [validationMessage, setValidationMessage] = useState5("");
1444
+ const [agentStatus, setAgentStatus] = useState5("getting");
1185
1445
  const agentHostingProviderClient = useAgentHostingClient();
1186
1446
  const client = useClient4();
1187
1447
  const updateAgentStatus = async () => {
@@ -1310,11 +1570,11 @@ var useAgentHandlers = (params) => {
1310
1570
  };
1311
1571
 
1312
1572
  // packages/sdk/shell/src/steps/InvitationManager.tsx
1313
- import { Check as Check2, X as X3 } from "@phosphor-icons/react";
1314
- import React23, { useMemo as useMemo2 } from "react";
1573
+ import { Check as Check3, X as X3 } from "@phosphor-icons/react";
1574
+ import React25, { useMemo as useMemo2 } from "react";
1315
1575
  import { QR } from "react-qr-rounded";
1316
- import { Clipboard as Clipboard2, useId as useId5, useTranslation as useTranslation9 } from "@dxos/react-ui";
1317
- import { descriptionText as descriptionText8, getSize as getSize8, mx as mx18 } from "@dxos/react-ui-theme";
1576
+ import { Clipboard as Clipboard2, useId as useId5, useTranslation as useTranslation11 } from "@dxos/react-ui";
1577
+ import { descriptionText as descriptionText8, getSize as getSize10, mx as mx19 } from "@dxos/react-ui-theme";
1318
1578
  import { hexToEmoji as hexToEmoji3 } from "@dxos/util";
1319
1579
 
1320
1580
  // packages/sdk/shell/src/util/invitationStatusValue.ts
@@ -1360,13 +1620,13 @@ var invitationStatusValue = /* @__PURE__ */ new Map([
1360
1620
 
1361
1621
  // packages/sdk/shell/src/steps/InvitationManager.tsx
1362
1622
  var InvitationManagerView = ({ children, ...props }) => {
1363
- return /* @__PURE__ */ React23.createElement(Viewport.View, {
1623
+ return /* @__PURE__ */ React25.createElement(Viewport.View, {
1364
1624
  ...props,
1365
1625
  classNames: "grow flex flex-col justify-around items-center"
1366
1626
  }, children);
1367
1627
  };
1368
1628
  var InvitationManager = ({ invitationUrl, active, send, status, multiUse, authCode, id = "0" }) => {
1369
- const { t } = useTranslation9("os");
1629
+ const { t } = useTranslation11("os");
1370
1630
  const qrLabel = useId5("invitation-manager__qr-code");
1371
1631
  const statusValue = multiUse ? 0 : invitationStatusValue.get(status) ?? 0;
1372
1632
  const showAuthCode = statusValue === 3;
@@ -1387,50 +1647,50 @@ var InvitationManager = ({ invitationUrl, active, send, status, multiUse, authCo
1387
1647
  }, [
1388
1648
  statusValue
1389
1649
  ]);
1390
- return /* @__PURE__ */ React23.createElement(React23.Fragment, null, /* @__PURE__ */ React23.createElement(Viewport.Root, {
1650
+ return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(Viewport.Root, {
1391
1651
  activeView,
1392
1652
  classNames: "grow plb-1"
1393
- }, /* @__PURE__ */ React23.createElement(Viewport.Views, null, /* @__PURE__ */ React23.createElement(InvitationManagerView, {
1653
+ }, /* @__PURE__ */ React25.createElement(Viewport.Views, null, /* @__PURE__ */ React25.createElement(InvitationManagerView, {
1394
1654
  id: "showing qr",
1395
1655
  emoji
1396
- }, /* @__PURE__ */ React23.createElement("p", {
1656
+ }, /* @__PURE__ */ React25.createElement("p", {
1397
1657
  className: "text-sm mlb-1 font-normal text-center"
1398
- }, t(multiUse ? "invite many qr label" : "invite one qr label")), /* @__PURE__ */ React23.createElement("div", {
1658
+ }, t(multiUse ? "invite many qr label" : "invite one qr label")), /* @__PURE__ */ React25.createElement("div", {
1399
1659
  role: "none",
1400
- className: mx18(descriptionText8, "is-full max-is-[14rem] relative")
1401
- }, /* @__PURE__ */ React23.createElement(QR, {
1660
+ className: mx19(descriptionText8, "is-full max-is-[14rem] relative")
1661
+ }, /* @__PURE__ */ React25.createElement(QR, {
1402
1662
  rounding: 100,
1403
1663
  backgroundColor: "transparent",
1404
1664
  color: "currentColor",
1405
- className: mx18("is-full bs-full p-2", showAuthCode && "invisible"),
1665
+ className: mx19("is-full bs-full p-2", showAuthCode && "invisible"),
1406
1666
  "aria-labelledby": qrLabel,
1407
1667
  errorCorrectionLevel: "Q",
1408
1668
  cutout: true
1409
- }, invitationUrl ?? "never"), /* @__PURE__ */ React23.createElement(Centered, null, /* @__PURE__ */ React23.createElement(Emoji, {
1669
+ }, invitationUrl ?? "never"), /* @__PURE__ */ React25.createElement(Centered, null, /* @__PURE__ */ React25.createElement(Emoji, {
1410
1670
  text: emoji
1411
- }))), /* @__PURE__ */ React23.createElement("span", {
1671
+ }))), /* @__PURE__ */ React25.createElement("span", {
1412
1672
  id: qrLabel,
1413
1673
  className: "sr-only"
1414
- }, t("qr label")), /* @__PURE__ */ React23.createElement(Clipboard2.Button, {
1674
+ }, t("qr label")), /* @__PURE__ */ React25.createElement(Clipboard2.Button, {
1415
1675
  variant: "ghost",
1416
1676
  value: invitationUrl ?? "never"
1417
- })), /* @__PURE__ */ React23.createElement(InvitationManagerView, {
1677
+ })), /* @__PURE__ */ React25.createElement(InvitationManagerView, {
1418
1678
  id: "showing auth code"
1419
- }, /* @__PURE__ */ React23.createElement(Label, null, t("auth code message")), /* @__PURE__ */ React23.createElement(AuthCode, {
1679
+ }, /* @__PURE__ */ React25.createElement(Label, null, t("auth code message")), /* @__PURE__ */ React25.createElement(AuthCode, {
1420
1680
  code: authCode,
1421
1681
  large: true,
1422
1682
  classNames: "text-black dark:text-white"
1423
- }), /* @__PURE__ */ React23.createElement(Label, null, t("auth other device emoji message")), emoji && /* @__PURE__ */ React23.createElement(Emoji, {
1683
+ }), /* @__PURE__ */ React25.createElement(Label, null, t("auth other device emoji message")), emoji && /* @__PURE__ */ React25.createElement(Emoji, {
1424
1684
  text: emoji
1425
- })), /* @__PURE__ */ React23.createElement(InvitationManagerView, {
1685
+ })), /* @__PURE__ */ React25.createElement(InvitationManagerView, {
1426
1686
  id: "showing final"
1427
- }, statusValue > 0 ? /* @__PURE__ */ React23.createElement(Check2, {
1428
- className: mx18("m-1.5", getSize8(6))
1429
- }) : /* @__PURE__ */ React23.createElement(X3, {
1430
- className: mx18("m-1.5", getSize8(6))
1431
- })))), /* @__PURE__ */ React23.createElement(Actions, {
1687
+ }, statusValue > 0 ? /* @__PURE__ */ React25.createElement(Check3, {
1688
+ className: mx19("m-1.5", getSize10(6))
1689
+ }) : /* @__PURE__ */ React25.createElement(X3, {
1690
+ className: mx19("m-1.5", getSize10(6))
1691
+ })))), /* @__PURE__ */ React25.createElement(Actions, {
1432
1692
  classNames: "mbs-4"
1433
- }, /* @__PURE__ */ React23.createElement(Action, {
1693
+ }, /* @__PURE__ */ React25.createElement(Action, {
1434
1694
  disabled: !active,
1435
1695
  onClick: () => send?.({
1436
1696
  type: "deselectInvitation"
@@ -1440,15 +1700,15 @@ var InvitationManager = ({ invitationUrl, active, send, status, multiUse, authCo
1440
1700
 
1441
1701
  // packages/sdk/shell/src/steps/ConfirmReset.tsx
1442
1702
  import { Warning } from "@phosphor-icons/react";
1443
- import React24, { useState as useState4 } from "react";
1703
+ import React26, { useState as useState6 } from "react";
1444
1704
  import { log as log6 } from "@dxos/log";
1445
- import { Message, useTranslation as useTranslation10 } from "@dxos/react-ui";
1446
- import { getSize as getSize9, mx as mx19 } from "@dxos/react-ui-theme";
1705
+ import { Message, useTranslation as useTranslation12 } from "@dxos/react-ui";
1706
+ import { getSize as getSize11, mx as mx20 } from "@dxos/react-ui-theme";
1447
1707
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/steps/ConfirmReset.tsx";
1448
1708
  var ConfirmReset = ({ active, onCancel, onConfirm, mode }) => {
1449
- const { t } = useTranslation10("os");
1450
- const [validationMessage, setValidationMessage] = useState4("");
1451
- const [pending, setPending] = useState4(false);
1709
+ const { t } = useTranslation12("os");
1710
+ const [validationMessage, setValidationMessage] = useState6("");
1711
+ const [pending, setPending] = useState6(false);
1452
1712
  const processReset = async () => {
1453
1713
  setPending(true);
1454
1714
  return onConfirm?.().then(() => setPending(false), (error) => {
@@ -1462,7 +1722,7 @@ var ConfirmReset = ({ active, onCancel, onConfirm, mode }) => {
1462
1722
  setPending(false);
1463
1723
  });
1464
1724
  };
1465
- return /* @__PURE__ */ React24.createElement(ConfirmResetImpl, {
1725
+ return /* @__PURE__ */ React26.createElement(ConfirmResetImpl, {
1466
1726
  disabled: !active,
1467
1727
  pending,
1468
1728
  validationMessage,
@@ -1472,20 +1732,20 @@ var ConfirmReset = ({ active, onCancel, onConfirm, mode }) => {
1472
1732
  });
1473
1733
  };
1474
1734
  var ConfirmResetImpl = ({ disabled, pending, validationMessage, onConfirm, onCancel, mode }) => {
1475
- const { t } = useTranslation10("os");
1735
+ const { t } = useTranslation12("os");
1476
1736
  const confirmationValue = t("confirmation value");
1477
- const [inputValue, setInputValue] = useState4("");
1737
+ const [inputValue, setInputValue] = useState6("");
1478
1738
  const testIdAffix = mode === "join new identity" ? "join-new-identity" : mode === "recover" ? "recover" : "reset-storage";
1479
- return /* @__PURE__ */ React24.createElement(React24.Fragment, null, /* @__PURE__ */ React24.createElement("div", {
1739
+ return /* @__PURE__ */ React26.createElement(React26.Fragment, null, /* @__PURE__ */ React26.createElement("div", {
1480
1740
  role: "none",
1481
1741
  className: "grow flex flex-col gap-2 justify-center"
1482
- }, /* @__PURE__ */ React24.createElement(Message.Root, {
1742
+ }, /* @__PURE__ */ React26.createElement(Message.Root, {
1483
1743
  valence: "error"
1484
- }, /* @__PURE__ */ React24.createElement(Message.Title, null, /* @__PURE__ */ React24.createElement(Warning, {
1485
- className: mx19(getSize9(6), "inline mie-2")
1486
- }), t("sign out chooser title")), /* @__PURE__ */ React24.createElement(Message.Body, null, t("sign out chooser message"))), /* @__PURE__ */ React24.createElement(Input, {
1744
+ }, /* @__PURE__ */ React26.createElement(Message.Title, null, /* @__PURE__ */ React26.createElement(Warning, {
1745
+ className: mx20(getSize11(6), "inline mie-2")
1746
+ }), t("sign out chooser title")), /* @__PURE__ */ React26.createElement(Message.Body, null, t("sign out chooser message"))), /* @__PURE__ */ React26.createElement(Input, {
1487
1747
  validationMessage,
1488
- label: /* @__PURE__ */ React24.createElement(StepHeading, {
1748
+ label: /* @__PURE__ */ React26.createElement(StepHeading, {
1489
1749
  className: "text-start mlb-2"
1490
1750
  }, t(mode === "join new identity" ? "join new identity input label" : mode === "recover" ? "recover reset input label" : "reset storage input label", {
1491
1751
  confirmationValue
@@ -1496,11 +1756,11 @@ var ConfirmResetImpl = ({ disabled, pending, validationMessage, onConfirm, onCan
1496
1756
  confirmationValue
1497
1757
  }),
1498
1758
  onChange: ({ target: { value } }) => setInputValue(value)
1499
- })), /* @__PURE__ */ React24.createElement(Actions, null, onCancel && /* @__PURE__ */ React24.createElement(Action, {
1759
+ })), /* @__PURE__ */ React26.createElement(Actions, null, onCancel && /* @__PURE__ */ React26.createElement(Action, {
1500
1760
  disabled,
1501
1761
  onClick: onCancel,
1502
1762
  "data-testid": `${testIdAffix}.reset-identity-cancel`
1503
- }, t("cancel label")), onConfirm && /* @__PURE__ */ React24.createElement(Action, {
1763
+ }, t("cancel label")), onConfirm && /* @__PURE__ */ React26.createElement(Action, {
1504
1764
  variant: "destructive",
1505
1765
  disabled: disabled || pending || inputValue !== confirmationValue,
1506
1766
  onClick: onConfirm,
@@ -1515,10 +1775,10 @@ var getHueValue = (identity) => identity?.profile?.data?.hue || hexToHue2(identi
1515
1775
  var getEmojiValue = (identity) => identity?.profile?.data?.emoji || hexToEmoji4(identity?.identityKey.toHex() ?? "0");
1516
1776
  var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, connectionState, onChangeConnectionState }) => {
1517
1777
  const fallbackValue = keyToFallback3(identity.identityKey);
1518
- const { t } = useTranslation11("os");
1519
- const [displayName, setDisplayName] = useState5(identity.profile?.displayName ?? "");
1520
- const [emoji, setEmojiDirectly] = useState5(getEmojiValue(identity));
1521
- const [hue, setHueDirectly] = useState5(getHueValue(identity));
1778
+ const { t } = useTranslation13("os");
1779
+ const [displayName, setDisplayName] = useState7(identity.profile?.displayName ?? "");
1780
+ const [emoji, setEmojiDirectly] = useState7(getEmojiValue(identity));
1781
+ const [hue, setHueDirectly] = useState7(getHueValue(identity));
1522
1782
  const { textValue, setTextValue } = useClipboard2();
1523
1783
  const identityHex = identity.identityKey.toHex();
1524
1784
  const publicKeyCopied = textValue === identityHex;
@@ -1543,29 +1803,29 @@ var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, conn
1543
1803
  });
1544
1804
  };
1545
1805
  const isConnected = connectionState === ConnectionState2.ONLINE;
1546
- return /* @__PURE__ */ React25.createElement(Heading, {
1806
+ return /* @__PURE__ */ React27.createElement(Heading, {
1547
1807
  titleId,
1548
1808
  title,
1549
- corner: /* @__PURE__ */ React25.createElement(CloseButton, {
1809
+ corner: /* @__PURE__ */ React27.createElement(CloseButton, {
1550
1810
  onDone
1551
1811
  })
1552
- }, /* @__PURE__ */ React25.createElement(Avatar6.Root, {
1812
+ }, /* @__PURE__ */ React27.createElement(Avatar6.Root, {
1553
1813
  size: 16,
1554
1814
  variant: "circle",
1555
1815
  status: isConnected ? "active" : "error",
1556
1816
  hue: hue || fallbackValue.hue
1557
- }, /* @__PURE__ */ React25.createElement(Toolbar.Root, {
1817
+ }, /* @__PURE__ */ React27.createElement(Toolbar3.Root, {
1558
1818
  classNames: "flex justify-center"
1559
- }, /* @__PURE__ */ React25.createElement(Avatar6.Frame, {
1819
+ }, /* @__PURE__ */ React27.createElement(Avatar6.Frame, {
1560
1820
  classNames: "relative z-[2] -mli-4 chromatic-ignore"
1561
- }, /* @__PURE__ */ React25.createElement(Avatar6.Fallback, {
1821
+ }, /* @__PURE__ */ React27.createElement(Avatar6.Fallback, {
1562
1822
  text: emoji || fallbackValue.emoji
1563
- }))), /* @__PURE__ */ React25.createElement(Avatar6.Label, {
1823
+ }))), /* @__PURE__ */ React27.createElement(Avatar6.Label, {
1564
1824
  classNames: "sr-only",
1565
1825
  "data-testid": "identityHeading.displayName"
1566
- }, identity.profile?.displayName ?? generateName3(identity.identityKey.toHex())), /* @__PURE__ */ React25.createElement(Input2.Root, null, /* @__PURE__ */ React25.createElement(Input2.Label, {
1826
+ }, identity.profile?.displayName ?? generateName3(identity.identityKey.toHex())), /* @__PURE__ */ React27.createElement(Input2.Root, null, /* @__PURE__ */ React27.createElement(Input2.Label, {
1567
1827
  srOnly: true
1568
- }, t("display name input label")), /* @__PURE__ */ React25.createElement(Input2.TextInput, {
1828
+ }, t("display name input label")), /* @__PURE__ */ React27.createElement(Input2.TextInput, {
1569
1829
  variant: "subdued",
1570
1830
  "data-testid": "display-name-input",
1571
1831
  placeholder: t("display name input placeholder"),
@@ -1576,49 +1836,49 @@ var IdentityHeading = ({ titleId, title, identity, onDone, onUpdateProfile, conn
1576
1836
  ...identity.profile,
1577
1837
  displayName: value
1578
1838
  })
1579
- })), /* @__PURE__ */ React25.createElement(Toolbar.Root, {
1839
+ })), /* @__PURE__ */ React27.createElement(Toolbar3.Root, {
1580
1840
  classNames: "flex justify-center items-center gap-1 pt-3"
1581
- }, /* @__PURE__ */ React25.createElement(EmojiPickerToolbarButton, {
1841
+ }, /* @__PURE__ */ React27.createElement(EmojiPickerToolbarButton, {
1582
1842
  emoji,
1583
1843
  onChangeEmoji: setEmoji,
1584
1844
  classNames: "bs-[--rail-action]"
1585
- }), /* @__PURE__ */ React25.createElement(HuePickerToolbarButton, {
1845
+ }), /* @__PURE__ */ React27.createElement(HuePickerToolbarButton, {
1586
1846
  hue,
1587
1847
  onChangeHue: setHue,
1588
1848
  classNames: "bs-[--rail-action]"
1589
- }), /* @__PURE__ */ React25.createElement(Tooltip3.Root, null, /* @__PURE__ */ React25.createElement(Tooltip3.Trigger, {
1849
+ }), /* @__PURE__ */ React27.createElement(Tooltip5.Root, null, /* @__PURE__ */ React27.createElement(Tooltip5.Trigger, {
1590
1850
  asChild: true
1591
- }, /* @__PURE__ */ React25.createElement(Toolbar.Button, {
1851
+ }, /* @__PURE__ */ React27.createElement(Toolbar3.Button, {
1592
1852
  classNames: "bs-[--rail-action]",
1593
1853
  "data-testid": "update-profile-form-copy-key",
1594
1854
  onClick: () => setTextValue(identityHex)
1595
- }, /* @__PURE__ */ React25.createElement("span", {
1855
+ }, /* @__PURE__ */ React27.createElement("span", {
1596
1856
  className: "sr-only"
1597
- }, t(publicKeyCopied ? "copy success label" : "copy self public key label")), /* @__PURE__ */ React25.createElement(Key, {
1598
- className: getSize10(5)
1599
- }))), /* @__PURE__ */ React25.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React25.createElement(Tooltip3.Content, {
1857
+ }, t(publicKeyCopied ? "copy success label" : "copy self public key label")), /* @__PURE__ */ React27.createElement(Key, {
1858
+ className: getSize12(5)
1859
+ }))), /* @__PURE__ */ React27.createElement(Tooltip5.Portal, null, /* @__PURE__ */ React27.createElement(Tooltip5.Content, {
1600
1860
  side: "bottom"
1601
- }, t(publicKeyCopied ? "copy success label" : "copy self public key label"), /* @__PURE__ */ React25.createElement(Tooltip3.Arrow, null)))), /* @__PURE__ */ React25.createElement(Tooltip3.Root, null, /* @__PURE__ */ React25.createElement(Tooltip3.Trigger, {
1861
+ }, t(publicKeyCopied ? "copy success label" : "copy self public key label"), /* @__PURE__ */ React27.createElement(Tooltip5.Arrow, null)))), /* @__PURE__ */ React27.createElement(Tooltip5.Root, null, /* @__PURE__ */ React27.createElement(Tooltip5.Trigger, {
1602
1862
  asChild: true
1603
- }, /* @__PURE__ */ React25.createElement(Toolbar.Button, {
1863
+ }, /* @__PURE__ */ React27.createElement(Toolbar3.Button, {
1604
1864
  classNames: [
1605
1865
  "bs-[--rail-action]",
1606
1866
  !isConnected && "text-error-500"
1607
1867
  ],
1608
1868
  onClick: () => onChangeConnectionState?.(isConnected ? ConnectionState2.OFFLINE : ConnectionState2.ONLINE)
1609
- }, /* @__PURE__ */ React25.createElement("span", {
1869
+ }, /* @__PURE__ */ React27.createElement("span", {
1610
1870
  className: "sr-only"
1611
- }, t(isConnected ? "disconnect label" : "connect label")), isConnected ? /* @__PURE__ */ React25.createElement(PlugsConnected, {
1612
- className: getSize10(5)
1613
- }) : /* @__PURE__ */ React25.createElement(Plugs, {
1614
- className: getSize10(5)
1615
- }))), /* @__PURE__ */ React25.createElement(Tooltip3.Portal, null, /* @__PURE__ */ React25.createElement(Tooltip3.Content, {
1871
+ }, t(isConnected ? "disconnect label" : "connect label")), isConnected ? /* @__PURE__ */ React27.createElement(PlugsConnected, {
1872
+ className: getSize12(5)
1873
+ }) : /* @__PURE__ */ React27.createElement(Plugs, {
1874
+ className: getSize12(5)
1875
+ }))), /* @__PURE__ */ React27.createElement(Tooltip5.Portal, null, /* @__PURE__ */ React27.createElement(Tooltip5.Content, {
1616
1876
  side: "bottom"
1617
- }, t(isConnected ? "disconnect label" : "connect label"), /* @__PURE__ */ React25.createElement(Tooltip3.Arrow, null)))))));
1877
+ }, t(isConnected ? "disconnect label" : "connect label"), /* @__PURE__ */ React27.createElement(Tooltip5.Arrow, null)))))));
1618
1878
  };
1619
1879
  var IdentityPanelImpl = (props) => {
1620
1880
  const { identity, titleId, activeView, onUpdateProfile, onResetStorage, onRecover, onJoinNewIdentity, IdentityActionChooser: IdentityActionChooserComponent = IdentityActionChooser, InvitationManager: InvitationManagerComponent = InvitationManager, connectionState, onChangeConnectionState, onDone, ...rest } = props;
1621
- const { t } = useTranslation11("os");
1881
+ const { t } = useTranslation13("os");
1622
1882
  const title = useMemo3(() => {
1623
1883
  switch (activeView) {
1624
1884
  case "device invitation manager":
@@ -1632,7 +1892,7 @@ var IdentityPanelImpl = (props) => {
1632
1892
  ]);
1633
1893
  const onCancelReset = () => rest.send?.("unchooseAction");
1634
1894
  const hideRecover = rest.agentStatus !== "created";
1635
- return /* @__PURE__ */ React25.createElement(React25.Fragment, null, /* @__PURE__ */ React25.createElement(IdentityHeading, {
1895
+ return /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement(IdentityHeading, {
1636
1896
  identity,
1637
1897
  titleId,
1638
1898
  title,
@@ -1641,44 +1901,44 @@ var IdentityPanelImpl = (props) => {
1641
1901
  onUpdateProfile,
1642
1902
  connectionState,
1643
1903
  onChangeConnectionState
1644
- }), /* @__PURE__ */ React25.createElement(Viewport.Root, {
1904
+ }), /* @__PURE__ */ React27.createElement(Viewport.Root, {
1645
1905
  activeView
1646
- }, /* @__PURE__ */ React25.createElement(Viewport.Views, null, /* @__PURE__ */ React25.createElement(Viewport.View, {
1906
+ }, /* @__PURE__ */ React27.createElement(Viewport.Views, null, /* @__PURE__ */ React27.createElement(Viewport.View, {
1647
1907
  id: "identity action chooser",
1648
1908
  classNames: viewStyles
1649
- }, /* @__PURE__ */ React25.createElement(IdentityActionChooserComponent, {
1909
+ }, /* @__PURE__ */ React27.createElement(IdentityActionChooserComponent, {
1650
1910
  active: activeView === "identity action chooser",
1651
1911
  ...rest,
1652
1912
  connectionState
1653
- })), /* @__PURE__ */ React25.createElement(Viewport.View, {
1913
+ })), /* @__PURE__ */ React27.createElement(Viewport.View, {
1654
1914
  id: "device invitation manager",
1655
1915
  classNames: viewStyles
1656
- }, /* @__PURE__ */ React25.createElement(InvitationManagerComponent, {
1916
+ }, /* @__PURE__ */ React27.createElement(InvitationManagerComponent, {
1657
1917
  active: activeView === "device invitation manager",
1658
1918
  ...rest,
1659
1919
  invitationUrl: rest.createInvitationUrl(rest.invitationCode)
1660
- })), /* @__PURE__ */ React25.createElement(Viewport.View, {
1920
+ })), /* @__PURE__ */ React27.createElement(Viewport.View, {
1661
1921
  classNames: viewStyles,
1662
1922
  id: "confirm join new identity"
1663
- }, /* @__PURE__ */ React25.createElement(ConfirmReset, {
1923
+ }, /* @__PURE__ */ React27.createElement(ConfirmReset, {
1664
1924
  active: activeView === "confirm join new identity",
1665
1925
  ...rest,
1666
1926
  mode: "join new identity",
1667
1927
  onConfirm: onJoinNewIdentity,
1668
1928
  onCancel: onCancelReset
1669
- })), /* @__PURE__ */ React25.createElement(Viewport.View, {
1929
+ })), /* @__PURE__ */ React27.createElement(Viewport.View, {
1670
1930
  classNames: viewStyles,
1671
1931
  id: "confirm recover"
1672
- }, /* @__PURE__ */ React25.createElement(ConfirmReset, {
1932
+ }, /* @__PURE__ */ React27.createElement(ConfirmReset, {
1673
1933
  active: activeView === "confirm recover",
1674
1934
  ...rest,
1675
1935
  mode: "recover",
1676
1936
  onConfirm: onRecover,
1677
1937
  onCancel: onCancelReset
1678
- })), /* @__PURE__ */ React25.createElement(Viewport.View, {
1938
+ })), /* @__PURE__ */ React27.createElement(Viewport.View, {
1679
1939
  classNames: viewStyles,
1680
1940
  id: "confirm reset storage"
1681
- }, /* @__PURE__ */ React25.createElement(ConfirmReset, {
1941
+ }, /* @__PURE__ */ React27.createElement(ConfirmReset, {
1682
1942
  active: activeView === "confirm reset storage",
1683
1943
  ...rest,
1684
1944
  mode: "reset storage",
@@ -1688,7 +1948,7 @@ var IdentityPanelImpl = (props) => {
1688
1948
  };
1689
1949
  var IdentityPanelWithInvitationImpl = ({ invitation, ...props }) => {
1690
1950
  const invitationStatus = useInvitationStatus2(invitation);
1691
- return /* @__PURE__ */ React25.createElement(IdentityPanelImpl, {
1951
+ return /* @__PURE__ */ React27.createElement(IdentityPanelImpl, {
1692
1952
  ...props,
1693
1953
  ...invitationStatus
1694
1954
  });
@@ -1706,7 +1966,7 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
1706
1966
  if (!identity) {
1707
1967
  log7.error("IdentityPanel rendered with no active identity.", void 0, {
1708
1968
  F: __dxlog_file6,
1709
- L: 256,
1969
+ L: 255,
1710
1970
  S: void 0,
1711
1971
  C: (f, a) => f(...a)
1712
1972
  });
@@ -1723,7 +1983,7 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
1723
1983
  const subscription = identityService.subscribe((state) => {
1724
1984
  log7("[state]", state, {
1725
1985
  F: __dxlog_file6,
1726
- L: 269,
1986
+ L: 268,
1727
1987
  S: void 0,
1728
1988
  C: (f, a) => f(...a)
1729
1989
  });
@@ -1769,40 +2029,40 @@ var IdentityPanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => co
1769
2029
  onChangeConnectionState: handleChangeConnectionState,
1770
2030
  ...agentProps
1771
2031
  };
1772
- return identityState.context.invitation ? /* @__PURE__ */ React25.createElement(IdentityPanelWithInvitationImpl, {
2032
+ return identityState.context.invitation ? /* @__PURE__ */ React27.createElement(IdentityPanelWithInvitationImpl, {
1773
2033
  ...implProps,
1774
2034
  invitation: identityState.context.invitation
1775
- }) : /* @__PURE__ */ React25.createElement(IdentityPanelImpl, implProps);
2035
+ }) : /* @__PURE__ */ React27.createElement(IdentityPanelImpl, implProps);
1776
2036
  };
1777
2037
 
1778
2038
  // packages/sdk/shell/src/panels/JoinPanel/JoinPanel.tsx
1779
- import React34, { useCallback as useCallback6, useEffect as useEffect6, useMemo as useMemo4 } from "react";
2039
+ import React36, { useCallback as useCallback6, useEffect as useEffect6, useMemo as useMemo4 } from "react";
1780
2040
  import { log as log11 } from "@dxos/log";
1781
2041
  import { useClient as useClient8, useMulticastObservable } from "@dxos/react-client";
1782
2042
  import { useIdentity as useIdentity2 } from "@dxos/react-client/halo";
1783
- import { useId as useId8, useThemeContext as useThemeContext3 } from "@dxos/react-ui";
2043
+ import { useId as useId8, useThemeContext as useThemeContext5 } from "@dxos/react-ui";
1784
2044
 
1785
2045
  // packages/sdk/shell/src/panels/JoinPanel/JoinHeading.tsx
1786
2046
  import { X as X4 } from "@phosphor-icons/react";
1787
- import React26, { cloneElement, forwardRef as forwardRef9 } from "react";
1788
- import { Button as Button7, useTranslation as useTranslation12 } from "@dxos/react-ui";
1789
- import { descriptionText as descriptionText9, getSize as getSize11, mx as mx20 } from "@dxos/react-ui-theme";
2047
+ import React28, { cloneElement, forwardRef as forwardRef9 } from "react";
2048
+ import { Button as Button9, useTranslation as useTranslation14 } from "@dxos/react-ui";
2049
+ import { descriptionText as descriptionText9, getSize as getSize13, mx as mx21 } from "@dxos/react-ui-theme";
1790
2050
  var JoinHeading = /* @__PURE__ */ forwardRef9(({ mode, titleId, exitActionParent, onExit }, forwardedRef) => {
1791
- const { t } = useTranslation12("os");
1792
- const exitButton = /* @__PURE__ */ React26.createElement(Button7, {
2051
+ const { t } = useTranslation14("os");
2052
+ const exitButton = /* @__PURE__ */ React28.createElement(Button9, {
1793
2053
  variant: "ghost",
1794
2054
  ...onExit && {
1795
2055
  onClick: onExit
1796
2056
  },
1797
- classNames: mx20(descriptionText9, "plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]"),
2057
+ classNames: mx21(descriptionText9, "plb-0 pli-2 absolute block-start-0 inline-end-0 z-[1]"),
1798
2058
  "data-testid": "join-exit"
1799
- }, /* @__PURE__ */ React26.createElement(X4, {
2059
+ }, /* @__PURE__ */ React28.createElement(X4, {
1800
2060
  weight: "bold",
1801
- className: getSize11(4)
1802
- }), /* @__PURE__ */ React26.createElement("span", {
2061
+ className: getSize13(4)
2062
+ }), /* @__PURE__ */ React28.createElement("span", {
1803
2063
  className: "sr-only"
1804
2064
  }, t("exit label")));
1805
- return /* @__PURE__ */ React26.createElement(Heading, {
2065
+ return /* @__PURE__ */ React28.createElement(Heading, {
1806
2066
  ref: forwardedRef,
1807
2067
  titleId,
1808
2068
  title: t(mode === "halo-only" ? "selecting identity heading" : "joining space heading"),
@@ -2420,17 +2680,17 @@ var useJoinMachine = (client, options) => {
2420
2680
 
2421
2681
  // packages/sdk/shell/src/panels/JoinPanel/steps/AdditionMethodChooser.tsx
2422
2682
  import { CaretRight as CaretRight2, Plus as Plus3, QrCode, Textbox } from "@phosphor-icons/react";
2423
- import React27 from "react";
2424
- import { useTranslation as useTranslation13 } from "@dxos/react-ui";
2425
- import { getSize as getSize12 } from "@dxos/react-ui-theme";
2683
+ import React29 from "react";
2684
+ import { useTranslation as useTranslation15 } from "@dxos/react-ui";
2685
+ import { getSize as getSize14 } from "@dxos/react-ui-theme";
2426
2686
  var AdditionMethodChooser = (viewStateProps) => {
2427
2687
  const disabled = !viewStateProps.active;
2428
2688
  const { send } = viewStateProps;
2429
- const { t } = useTranslation13("os");
2689
+ const { t } = useTranslation15("os");
2430
2690
  const sharedButtonProps = {
2431
2691
  disabled,
2432
- after: /* @__PURE__ */ React27.createElement(CaretRight2, {
2433
- className: getSize12(4),
2692
+ after: /* @__PURE__ */ React29.createElement(CaretRight2, {
2693
+ className: getSize14(4),
2434
2694
  weight: "bold"
2435
2695
  }),
2436
2696
  slots: {
@@ -2439,35 +2699,35 @@ var AdditionMethodChooser = (viewStateProps) => {
2439
2699
  }
2440
2700
  }
2441
2701
  };
2442
- return /* @__PURE__ */ React27.createElement(React27.Fragment, null, /* @__PURE__ */ React27.createElement(StepHeading, null, t("addition method chooser title")), /* @__PURE__ */ React27.createElement("div", {
2702
+ return /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement(StepHeading, null, t("addition method chooser title")), /* @__PURE__ */ React29.createElement("div", {
2443
2703
  role: "none",
2444
2704
  className: "flex flex-col gap-1 grow"
2445
- }, /* @__PURE__ */ React27.createElement(CompoundButton, {
2705
+ }, /* @__PURE__ */ React29.createElement(CompoundButton, {
2446
2706
  ...sharedButtonProps,
2447
2707
  description: t("create identity description"),
2448
- before: /* @__PURE__ */ React27.createElement(Plus3, {
2449
- className: getSize12(6)
2708
+ before: /* @__PURE__ */ React29.createElement(Plus3, {
2709
+ className: getSize14(6)
2450
2710
  }),
2451
2711
  onClick: () => send({
2452
2712
  type: "createIdentity"
2453
2713
  }),
2454
2714
  "data-autofocus": "choosingAuthMethod",
2455
2715
  "data-testid": "identity-chooser.create-identity"
2456
- }, t("create identity label")), /* @__PURE__ */ React27.createElement(CompoundButton, {
2716
+ }, t("create identity label")), /* @__PURE__ */ React29.createElement(CompoundButton, {
2457
2717
  ...sharedButtonProps,
2458
2718
  description: t("join identity description"),
2459
- before: /* @__PURE__ */ React27.createElement(QrCode, {
2460
- className: getSize12(6)
2719
+ before: /* @__PURE__ */ React29.createElement(QrCode, {
2720
+ className: getSize14(6)
2461
2721
  }),
2462
2722
  onClick: () => send({
2463
2723
  type: "acceptHaloInvitation"
2464
2724
  }),
2465
2725
  "data-testid": "identity-chooser.join-identity"
2466
- }, t("join identity label")), /* @__PURE__ */ React27.createElement(CompoundButton, {
2726
+ }, t("join identity label")), /* @__PURE__ */ React29.createElement(CompoundButton, {
2467
2727
  ...sharedButtonProps,
2468
2728
  description: t("recover identity description"),
2469
- before: /* @__PURE__ */ React27.createElement(Textbox, {
2470
- className: getSize12(6)
2729
+ before: /* @__PURE__ */ React29.createElement(Textbox, {
2730
+ className: getSize14(6)
2471
2731
  }),
2472
2732
  onClick: () => send({
2473
2733
  type: "recoverIdentity"
@@ -2477,39 +2737,39 @@ var AdditionMethodChooser = (viewStateProps) => {
2477
2737
  };
2478
2738
 
2479
2739
  // packages/sdk/shell/src/panels/JoinPanel/steps/IdentityAdded.tsx
2480
- import React28, { cloneElement as cloneElement2 } from "react";
2740
+ import React30, { cloneElement as cloneElement2 } from "react";
2481
2741
  import { generateName as generateName4 } from "@dxos/display-name";
2482
- import { Avatar as Avatar7, useId as useId7, useTranslation as useTranslation14 } from "@dxos/react-ui";
2483
- import { mx as mx21 } from "@dxos/react-ui-theme";
2742
+ import { Avatar as Avatar7, useId as useId7, useTranslation as useTranslation16 } from "@dxos/react-ui";
2743
+ import { mx as mx22 } from "@dxos/react-ui-theme";
2484
2744
  import { hexToFallback } from "@dxos/util";
2485
2745
  var IdentityAdded = (props) => {
2486
2746
  const { mode, addedIdentity, active, send, onDone, doneActionParent } = props;
2487
2747
  const disabled = !active;
2488
- const { t } = useTranslation14("os");
2748
+ const { t } = useTranslation16("os");
2489
2749
  const addedIdentityHex = addedIdentity?.identityKey.toHex() ?? "0";
2490
2750
  const fallbackValue = hexToFallback(addedIdentityHex);
2491
2751
  const labelId = useId7("identityListItem__label");
2492
2752
  const displayName = addedIdentity?.profile?.displayName ?? (addedIdentity && generateName4(addedIdentityHex));
2493
- const doneAction = /* @__PURE__ */ React28.createElement(Action, {
2753
+ const doneAction = /* @__PURE__ */ React30.createElement(Action, {
2494
2754
  ...onDone && {
2495
2755
  onClick: () => onDone(null)
2496
2756
  },
2497
2757
  disabled,
2498
2758
  "data-autofocus": "confirmingAddedIdentity",
2499
2759
  "data-testid": "identity-added-done"
2500
- }, /* @__PURE__ */ React28.createElement("span", null, t("done label")));
2501
- return /* @__PURE__ */ React28.createElement(React28.Fragment, null, /* @__PURE__ */ React28.createElement(StepHeading, null, t("identity added label")), /* @__PURE__ */ React28.createElement("div", {
2760
+ }, /* @__PURE__ */ React30.createElement("span", null, t("done label")));
2761
+ return /* @__PURE__ */ React30.createElement(React30.Fragment, null, /* @__PURE__ */ React30.createElement(StepHeading, null, t("identity added label")), /* @__PURE__ */ React30.createElement("div", {
2502
2762
  role: "none",
2503
2763
  className: "grow flex flex-col items-center justify-center text-center gap-2"
2504
- }, /* @__PURE__ */ React28.createElement(Avatar7.Root, {
2764
+ }, /* @__PURE__ */ React30.createElement(Avatar7.Root, {
2505
2765
  status: "active",
2506
2766
  labelId,
2507
2767
  hue: addedIdentity?.profile?.data?.hue || fallbackValue.hue
2508
- }, /* @__PURE__ */ React28.createElement(Avatar7.Frame, null, /* @__PURE__ */ React28.createElement(Avatar7.Fallback, {
2768
+ }, /* @__PURE__ */ React30.createElement(Avatar7.Frame, null, /* @__PURE__ */ React30.createElement(Avatar7.Fallback, {
2509
2769
  text: addedIdentity?.profile?.data?.emoji || fallbackValue.emoji
2510
- })), /* @__PURE__ */ React28.createElement(Avatar7.Label, {
2511
- classNames: mx21("text-lg truncate", !addedIdentity?.profile?.displayName && "font-mono")
2512
- }, displayName))), /* @__PURE__ */ React28.createElement(Actions, null, mode === "halo-only" ? doneActionParent ? /* @__PURE__ */ cloneElement2(doneActionParent, {}, doneAction) : doneAction : /* @__PURE__ */ React28.createElement(Action, {
2770
+ })), /* @__PURE__ */ React30.createElement(Avatar7.Label, {
2771
+ classNames: mx22("text-lg truncate", !addedIdentity?.profile?.displayName && "font-mono")
2772
+ }, displayName))), /* @__PURE__ */ React30.createElement(Actions, null, mode === "halo-only" ? doneActionParent ? /* @__PURE__ */ cloneElement2(doneActionParent, {}, doneAction) : doneAction : /* @__PURE__ */ React30.createElement(Action, {
2513
2773
  variant: "primary",
2514
2774
  disabled: disabled || !addedIdentity,
2515
2775
  onClick: () => addedIdentity && send({
@@ -2521,21 +2781,21 @@ var IdentityAdded = (props) => {
2521
2781
  };
2522
2782
 
2523
2783
  // packages/sdk/shell/src/panels/JoinPanel/steps/IdentityInput.tsx
2524
- import React29, { useCallback as useCallback5, useState as useState6 } from "react";
2784
+ import React31, { useCallback as useCallback5, useState as useState8 } from "react";
2525
2785
  import { log as log9 } from "@dxos/log";
2526
2786
  import { useClient as useClient7 } from "@dxos/react-client";
2527
- import { useTranslation as useTranslation15 } from "@dxos/react-ui";
2787
+ import { useTranslation as useTranslation17 } from "@dxos/react-ui";
2528
2788
  var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/steps/IdentityInput.tsx";
2529
2789
  var IdentityInput = (props) => {
2530
2790
  const { send, method } = props;
2531
2791
  const isRecover = method === "recover identity";
2532
2792
  const client = useClient7();
2533
- const { t } = useTranslation15("os");
2534
- const [validationMessage, setValidationMessage] = useState6("");
2793
+ const { t } = useTranslation17("os");
2794
+ const [validationMessage, setValidationMessage] = useState8("");
2535
2795
  const handleConfirm = async (value) => {
2536
2796
  if (isRecover) {
2537
2797
  await client.halo.recoverIdentity({
2538
- recoveryCode: value
2798
+ seedphrase: value
2539
2799
  }).then((identity) => {
2540
2800
  send?.({
2541
2801
  type: "selectIdentity",
@@ -2569,7 +2829,7 @@ var IdentityInput = (props) => {
2569
2829
  });
2570
2830
  }
2571
2831
  };
2572
- return /* @__PURE__ */ React29.createElement(IdentityInputImpl, {
2832
+ return /* @__PURE__ */ React31.createElement(IdentityInputImpl, {
2573
2833
  ...props,
2574
2834
  onConfirm: handleConfirm,
2575
2835
  validationMessage
@@ -2577,9 +2837,9 @@ var IdentityInput = (props) => {
2577
2837
  };
2578
2838
  var IdentityInputImpl = (props) => {
2579
2839
  const { method, active, onConfirm, validationMessage } = props;
2580
- const { t } = useTranslation15("os");
2581
- const [inputValue, setInputValue] = useState6("");
2582
- const [pending, setPending] = useState6(false);
2840
+ const { t } = useTranslation17("os");
2841
+ const [inputValue, setInputValue] = useState8("");
2842
+ const [pending, setPending] = useState8(false);
2583
2843
  const disabled = !active || pending;
2584
2844
  const isRecover = method === "recover identity";
2585
2845
  const handleConfirm = useCallback5(async () => {
@@ -2590,17 +2850,17 @@ var IdentityInputImpl = (props) => {
2590
2850
  onConfirm,
2591
2851
  inputValue
2592
2852
  ]);
2593
- return /* @__PURE__ */ React29.createElement(React29.Fragment, null, /* @__PURE__ */ React29.createElement("div", {
2853
+ return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement("div", {
2594
2854
  role: "none",
2595
2855
  className: "grow flex flex-col justify-center"
2596
- }, /* @__PURE__ */ React29.createElement(Input, {
2856
+ }, /* @__PURE__ */ React31.createElement(Input, {
2597
2857
  validationMessage,
2598
- label: /* @__PURE__ */ React29.createElement(StepHeading, null, t(isRecover ? "recover identity input label" : "new identity input label")),
2858
+ label: /* @__PURE__ */ React31.createElement(StepHeading, null, t(isRecover ? "recover identity input label" : "new identity input label")),
2599
2859
  disabled,
2600
2860
  "data-testid": "identity-input",
2601
2861
  placeholder: isRecover ? t("recovery code placeholder") : t("display name placeholder"),
2602
2862
  onChange: ({ target: { value } }) => setInputValue(value)
2603
- })), /* @__PURE__ */ React29.createElement(Actions, null, /* @__PURE__ */ React29.createElement(Action, {
2863
+ })), /* @__PURE__ */ React31.createElement(Actions, null, /* @__PURE__ */ React31.createElement(Action, {
2604
2864
  variant: "primary",
2605
2865
  disabled: disabled || inputValue.trim().length === 0,
2606
2866
  onClick: handleConfirm,
@@ -2609,13 +2869,13 @@ var IdentityInputImpl = (props) => {
2609
2869
  };
2610
2870
 
2611
2871
  // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationAccepted.tsx
2612
- import React30, { cloneElement as cloneElement3 } from "react";
2613
- import { useTranslation as useTranslation16 } from "@dxos/react-ui";
2872
+ import React32, { cloneElement as cloneElement3 } from "react";
2873
+ import { useTranslation as useTranslation18 } from "@dxos/react-ui";
2614
2874
 
2615
2875
  // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationInput.tsx
2616
- import React31, { useState as useState7, useEffect as useEffect5, cloneElement as cloneElement4 } from "react";
2876
+ import React33, { useState as useState9, useEffect as useEffect5, cloneElement as cloneElement4 } from "react";
2617
2877
  import { log as log10 } from "@dxos/log";
2618
- import { useTranslation as useTranslation17 } from "@dxos/react-ui";
2878
+ import { useTranslation as useTranslation19 } from "@dxos/react-ui";
2619
2879
  var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/JoinPanel/steps/InvitationInput.tsx";
2620
2880
  var invitationCodeFromUrl = (text) => {
2621
2881
  try {
@@ -2635,8 +2895,8 @@ var invitationCodeFromUrl = (text) => {
2635
2895
  var InvitationInput = (props) => {
2636
2896
  const { Kind, active, send, unredeemedCode, onExit, exitActionParent, onDone, doneActionParent, succeededKeys } = props;
2637
2897
  const disabled = !active;
2638
- const { t } = useTranslation17("os");
2639
- const [inputValue, setInputValue] = useState7(unredeemedCode ?? "");
2898
+ const { t } = useTranslation19("os");
2899
+ const [inputValue, setInputValue] = useState9(unredeemedCode ?? "");
2640
2900
  useEffect5(() => {
2641
2901
  unredeemedCode && setInputValue(unredeemedCode ?? "");
2642
2902
  }, [
@@ -2654,7 +2914,7 @@ var InvitationInput = (props) => {
2654
2914
  }
2655
2915
  });
2656
2916
  };
2657
- const exitAction = /* @__PURE__ */ React31.createElement(Action, {
2917
+ const exitAction = /* @__PURE__ */ React33.createElement(Action, {
2658
2918
  variant: "ghost",
2659
2919
  disabled,
2660
2920
  ...onExit ? {
@@ -2664,11 +2924,11 @@ var InvitationInput = (props) => {
2664
2924
  },
2665
2925
  "data-testid": "join-exit"
2666
2926
  }, t("cancel label"));
2667
- return /* @__PURE__ */ React31.createElement(React31.Fragment, null, /* @__PURE__ */ React31.createElement("div", {
2927
+ return /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", {
2668
2928
  role: "none",
2669
2929
  className: "grow flex flex-col justify-center"
2670
- }, /* @__PURE__ */ React31.createElement(Input, {
2671
- label: /* @__PURE__ */ React31.createElement(StepHeading, null, t("invitation input label")),
2930
+ }, /* @__PURE__ */ React33.createElement(Input, {
2931
+ label: /* @__PURE__ */ React33.createElement(StepHeading, null, t("invitation input label")),
2672
2932
  placeholder: t("invitation input placeholder"),
2673
2933
  disabled,
2674
2934
  value: inputValue,
@@ -2676,7 +2936,7 @@ var InvitationInput = (props) => {
2676
2936
  "data-autofocus": `inputting${Kind}InvitationCode`,
2677
2937
  "data-testid": `${Kind.toLowerCase()}-invitation-input`,
2678
2938
  onKeyUp: ({ key }) => key === "Enter" && handleNext()
2679
- })), /* @__PURE__ */ React31.createElement(Actions, null, Kind === "Halo" ? null : exitActionParent ? /* @__PURE__ */ cloneElement4(exitActionParent, {}, exitAction) : doneActionParent ? /* @__PURE__ */ cloneElement4(doneActionParent, {}, exitAction) : exitAction, /* @__PURE__ */ React31.createElement(Action, {
2939
+ })), /* @__PURE__ */ React33.createElement(Actions, null, Kind === "Halo" ? null : exitActionParent ? /* @__PURE__ */ cloneElement4(exitActionParent, {}, exitAction) : doneActionParent ? /* @__PURE__ */ cloneElement4(doneActionParent, {}, exitAction) : exitAction, /* @__PURE__ */ React33.createElement(Action, {
2680
2940
  variant: "primary",
2681
2941
  disabled: disabled || inputValue.trim().length === 0,
2682
2942
  onClick: handleNext,
@@ -2685,8 +2945,8 @@ var InvitationInput = (props) => {
2685
2945
  };
2686
2946
 
2687
2947
  // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationRescuer.tsx
2688
- import React32 from "react";
2689
- import { useTranslation as useTranslation18 } from "@dxos/react-ui";
2948
+ import React34 from "react";
2949
+ import { useTranslation as useTranslation20 } from "@dxos/react-ui";
2690
2950
  import { descriptionText as descriptionText10 } from "@dxos/react-ui-theme";
2691
2951
  var InvitationActions = ({
2692
2952
  // `invitationState` does report correct state, but here we evaluate whether `failReason` is a better source of truth
@@ -2698,14 +2958,14 @@ var InvitationActions = ({
2698
2958
  Kind,
2699
2959
  failReason
2700
2960
  }) => {
2701
- const { t } = useTranslation18("os");
2961
+ const { t } = useTranslation20("os");
2702
2962
  if (failReason) {
2703
- return /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement(StepHeading, {
2963
+ return /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement(StepHeading, {
2704
2964
  className: descriptionText10
2705
- }, t(failReason === "timeout" ? "timeout status label" : failReason === "cancelled" ? "cancelled status label" : "error status label")), /* @__PURE__ */ React32.createElement("div", {
2965
+ }, t(failReason === "timeout" ? "timeout status label" : failReason === "cancelled" ? "cancelled status label" : "error status label")), /* @__PURE__ */ React34.createElement("div", {
2706
2966
  role: "none",
2707
2967
  className: "grow"
2708
- }), /* @__PURE__ */ React32.createElement(Actions, null, /* @__PURE__ */ React32.createElement(Action, {
2968
+ }), /* @__PURE__ */ React34.createElement(Actions, null, /* @__PURE__ */ React34.createElement(Action, {
2709
2969
  disabled: !active,
2710
2970
  onClick: () => send({
2711
2971
  type: `reset${Kind}Invitation`
@@ -2713,16 +2973,16 @@ var InvitationActions = ({
2713
2973
  "data-testid": "invitation-rescuer-reset"
2714
2974
  }, t("reset label"))));
2715
2975
  } else {
2716
- return /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement(StepHeading, {
2976
+ return /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement(StepHeading, {
2717
2977
  className: descriptionText10
2718
- }, t("connecting status label")), /* @__PURE__ */ React32.createElement("div", {
2978
+ }, t("connecting status label")), /* @__PURE__ */ React34.createElement("div", {
2719
2979
  role: "none",
2720
2980
  className: "grow"
2721
- }), /* @__PURE__ */ React32.createElement(Actions, null, /* @__PURE__ */ React32.createElement(Action, {
2981
+ }), /* @__PURE__ */ React34.createElement(Actions, null, /* @__PURE__ */ React34.createElement(Action, {
2722
2982
  disabled: true,
2723
2983
  classNames: "order-2",
2724
2984
  "data-testid": "next"
2725
- }, t("next label")), /* @__PURE__ */ React32.createElement(Action, {
2985
+ }, t("next label")), /* @__PURE__ */ React34.createElement(Action, {
2726
2986
  disabled: !active,
2727
2987
  onClick: onInvitationCancel,
2728
2988
  "data-testid": "invitation-rescuer-cancel"
@@ -2731,52 +2991,52 @@ var InvitationActions = ({
2731
2991
  };
2732
2992
  var InvitationRescuer = (props) => {
2733
2993
  const { Kind, invitationState, active, send } = props;
2734
- const { t } = useTranslation18("os");
2735
- return /* @__PURE__ */ React32.createElement(React32.Fragment, null, typeof invitationState === "undefined" ? /* @__PURE__ */ React32.createElement(React32.Fragment, null, /* @__PURE__ */ React32.createElement("div", {
2994
+ const { t } = useTranslation20("os");
2995
+ return /* @__PURE__ */ React34.createElement(React34.Fragment, null, typeof invitationState === "undefined" ? /* @__PURE__ */ React34.createElement(React34.Fragment, null, /* @__PURE__ */ React34.createElement("div", {
2736
2996
  role: "none",
2737
2997
  className: "grow flex flex-col justify-center"
2738
- }, /* @__PURE__ */ React32.createElement(StepHeading, {
2998
+ }, /* @__PURE__ */ React34.createElement(StepHeading, {
2739
2999
  className: descriptionText10
2740
- }, "There was a problem joining the space")), /* @__PURE__ */ React32.createElement(Actions, null, /* @__PURE__ */ React32.createElement(Action, {
3000
+ }, "There was a problem joining the space")), /* @__PURE__ */ React34.createElement(Actions, null, /* @__PURE__ */ React34.createElement(Action, {
2741
3001
  disabled: !active,
2742
3002
  "data-testid": "invitation-rescuer-blank-reset",
2743
3003
  onClick: () => send({
2744
3004
  type: `reset${Kind}Invitation`
2745
3005
  })
2746
- }, t("reset label")))) : /* @__PURE__ */ React32.createElement(InvitationActions, props));
3006
+ }, t("reset label")))) : /* @__PURE__ */ React34.createElement(InvitationActions, props));
2747
3007
  };
2748
3008
 
2749
3009
  // packages/sdk/shell/src/panels/JoinPanel/steps/InvitationAuthenticator.tsx
2750
- import React33, { useState as useState8 } from "react";
3010
+ import React35, { useState as useState10 } from "react";
2751
3011
  import { Invitation as Invitation6 } from "@dxos/react-client/invitations";
2752
- import { Input as Input3, useTranslation as useTranslation19 } from "@dxos/react-ui";
3012
+ import { Input as Input3, useTranslation as useTranslation21 } from "@dxos/react-ui";
2753
3013
  import { descriptionText as descriptionText11 } from "@dxos/react-ui-theme";
2754
3014
  import { hexToEmoji as hexToEmoji5 } from "@dxos/util";
2755
3015
  var pinLength = 6;
2756
3016
  var InvitationAuthenticator = ({ failed, Kind, authMethod, active, pending, invitationId, onInvitationAuthenticate, onInvitationCancel }) => {
2757
3017
  const disabled = !active || pending;
2758
- const { t } = useTranslation19("os");
3018
+ const { t } = useTranslation21("os");
2759
3019
  const invitationType = Kind.toLowerCase();
2760
- const [authCode, setAuthCode] = useState8("");
3020
+ const [authCode, setAuthCode] = useState10("");
2761
3021
  const onChange = ({ target: { value } }) => {
2762
3022
  setAuthCode(value);
2763
3023
  if (value.length === pinLength) {
2764
3024
  document.querySelector(`[data-autofocus-pinlength="${invitationType}"]`)?.focus();
2765
3025
  }
2766
3026
  };
2767
- return /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement("div", {
3027
+ return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement("div", {
2768
3028
  role: "none",
2769
3029
  className: "grow flex flex-col justify-center gap-4"
2770
- }, /* @__PURE__ */ React33.createElement(Input3.Root, failed && {
3030
+ }, /* @__PURE__ */ React35.createElement(Input3.Root, failed && {
2771
3031
  validationValence: "error"
2772
- }, /* @__PURE__ */ React33.createElement(Input3.Label, {
3032
+ }, /* @__PURE__ */ React35.createElement(Input3.Label, {
2773
3033
  asChild: true
2774
- }, authMethod === Invitation6.AuthMethod.SHARED_SECRET ? /* @__PURE__ */ React33.createElement(StepHeading, null, t("auth code input label")) : /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement(StepHeading, {
3034
+ }, authMethod === Invitation6.AuthMethod.SHARED_SECRET ? /* @__PURE__ */ React35.createElement(StepHeading, null, t("auth code input label")) : /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(StepHeading, {
2775
3035
  className: descriptionText11
2776
- }, t("authenticating label")), /* @__PURE__ */ React33.createElement("div", {
3036
+ }, t("authenticating label")), /* @__PURE__ */ React35.createElement("div", {
2777
3037
  role: "none",
2778
3038
  className: "grow"
2779
- }))), authMethod === Invitation6.AuthMethod.SHARED_SECRET && /* @__PURE__ */ React33.createElement(Input3.PinInput, {
3039
+ }))), authMethod === Invitation6.AuthMethod.SHARED_SECRET && /* @__PURE__ */ React35.createElement(Input3.PinInput, {
2780
3040
  disabled,
2781
3041
  length: pinLength,
2782
3042
  onChange,
@@ -2787,18 +3047,18 @@ var InvitationAuthenticator = ({ failed, Kind, authMethod, active, pending, invi
2787
3047
  "data-prevent-ios-autofocus": true,
2788
3048
  "data-testid": `${invitationType}-auth-code-input`,
2789
3049
  "data-1p-ignore": true
2790
- }), failed && /* @__PURE__ */ React33.createElement(Input3.DescriptionAndValidation, {
3050
+ }), failed && /* @__PURE__ */ React35.createElement(Input3.DescriptionAndValidation, {
2791
3051
  classNames: "text-center"
2792
- }, /* @__PURE__ */ React33.createElement(Input3.Validation, null, t("failed to authenticate message")))), invitationId && authMethod === Invitation6.AuthMethod.SHARED_SECRET && /* @__PURE__ */ React33.createElement(React33.Fragment, null, /* @__PURE__ */ React33.createElement(Label, null, t("auth other device emoji message")), /* @__PURE__ */ React33.createElement("div", {
3052
+ }, /* @__PURE__ */ React35.createElement(Input3.Validation, null, t("failed to authenticate message")))), invitationId && authMethod === Invitation6.AuthMethod.SHARED_SECRET && /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(Label, null, t("auth other device emoji message")), /* @__PURE__ */ React35.createElement("div", {
2793
3053
  className: "flex justify-center"
2794
- }, /* @__PURE__ */ React33.createElement(Emoji, {
3054
+ }, /* @__PURE__ */ React35.createElement(Emoji, {
2795
3055
  text: hexToEmoji5(invitationId)
2796
- })))), /* @__PURE__ */ React33.createElement(Actions, null, /* @__PURE__ */ React33.createElement(Action, {
3056
+ })))), /* @__PURE__ */ React35.createElement(Actions, null, /* @__PURE__ */ React35.createElement(Action, {
2797
3057
  variant: "ghost",
2798
3058
  disabled,
2799
3059
  onClick: () => onInvitationCancel?.(),
2800
3060
  "data-testid": `${invitationType}-invitation-authenticator-cancel`
2801
- }, t("cancel label")), /* @__PURE__ */ React33.createElement(Action, {
3061
+ }, t("cancel label")), /* @__PURE__ */ React35.createElement(Action, {
2802
3062
  variant: "primary",
2803
3063
  disabled,
2804
3064
  onClick: () => onInvitationAuthenticate?.(authCode),
@@ -2860,46 +3120,46 @@ var JoinPanelImpl = (props) => {
2860
3120
  IdentityInput: IdentityInputComponent = IdentityInput,
2861
3121
  ConfirmReset: ConfirmResetComponent = ConfirmReset
2862
3122
  } = props;
2863
- return /* @__PURE__ */ React34.createElement(React34.Fragment, null, mode !== "halo-only" && /* @__PURE__ */ React34.createElement(JoinHeading, {
3123
+ return /* @__PURE__ */ React36.createElement(React36.Fragment, null, mode !== "halo-only" && /* @__PURE__ */ React36.createElement(JoinHeading, {
2864
3124
  titleId,
2865
3125
  mode,
2866
3126
  onExit,
2867
3127
  exitActionParent
2868
- }), /* @__PURE__ */ React34.createElement(Viewport.Root, {
3128
+ }), /* @__PURE__ */ React36.createElement(Viewport.Root, {
2869
3129
  focusManaged: true,
2870
3130
  activeView
2871
- }, /* @__PURE__ */ React34.createElement(Viewport.Views, null, /* @__PURE__ */ React34.createElement(Viewport.View, {
3131
+ }, /* @__PURE__ */ React36.createElement(Viewport.Views, null, /* @__PURE__ */ React36.createElement(Viewport.View, {
2872
3132
  classNames: stepStyles,
2873
3133
  id: "addition method chooser"
2874
- }, /* @__PURE__ */ React34.createElement(AdditionMethodChooser, {
3134
+ }, /* @__PURE__ */ React36.createElement(AdditionMethodChooser, {
2875
3135
  send,
2876
3136
  active: activeView === "addition method chooser"
2877
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3137
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2878
3138
  classNames: stepStyles,
2879
3139
  id: "reset storage confirmation"
2880
- }, /* @__PURE__ */ React34.createElement(ConfirmResetComponent, {
3140
+ }, /* @__PURE__ */ React36.createElement(ConfirmResetComponent, {
2881
3141
  send,
2882
3142
  active: activeView === "reset storage confirmation",
2883
3143
  onCancel: onCancelResetStorage,
2884
3144
  onConfirm: onConfirmResetStorage
2885
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3145
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2886
3146
  classNames: stepStyles,
2887
3147
  id: "create identity input"
2888
- }, /* @__PURE__ */ React34.createElement(IdentityInputComponent, {
3148
+ }, /* @__PURE__ */ React36.createElement(IdentityInputComponent, {
2889
3149
  send,
2890
3150
  method: "create identity",
2891
3151
  active: activeView === "create identity input"
2892
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3152
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2893
3153
  classNames: stepStyles,
2894
3154
  id: "recover identity input"
2895
- }, /* @__PURE__ */ React34.createElement(IdentityInputComponent, {
3155
+ }, /* @__PURE__ */ React36.createElement(IdentityInputComponent, {
2896
3156
  send,
2897
3157
  method: "recover identity",
2898
3158
  active: activeView === "recover identity input"
2899
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3159
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2900
3160
  classNames: stepStyles,
2901
3161
  id: "halo invitation input"
2902
- }, /* @__PURE__ */ React34.createElement(InvitationInput, {
3162
+ }, /* @__PURE__ */ React36.createElement(InvitationInput, {
2903
3163
  send,
2904
3164
  Kind: "Halo",
2905
3165
  active: activeView === "halo invitation input",
@@ -2909,20 +3169,20 @@ var JoinPanelImpl = (props) => {
2909
3169
  ...succeededKeys?.Halo && {
2910
3170
  succeededKeys: succeededKeys.Halo
2911
3171
  }
2912
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3172
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2913
3173
  classNames: stepStyles,
2914
3174
  id: "halo invitation rescuer"
2915
- }, /* @__PURE__ */ React34.createElement(InvitationRescuer, {
3175
+ }, /* @__PURE__ */ React36.createElement(InvitationRescuer, {
2916
3176
  send,
2917
3177
  Kind: "Halo",
2918
3178
  active: activeView === "halo invitation rescuer",
2919
3179
  invitationState: invitationStates?.Halo,
2920
3180
  onInvitationCancel: onHaloInvitationCancel,
2921
3181
  failReason: failReasons?.Halo
2922
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3182
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2923
3183
  classNames: stepStyles,
2924
3184
  id: "halo invitation authenticator"
2925
- }, /* @__PURE__ */ React34.createElement(InvitationAuthenticator, {
3185
+ }, /* @__PURE__ */ React36.createElement(InvitationAuthenticator, {
2926
3186
  send,
2927
3187
  Kind: "Halo",
2928
3188
  invitationId: invitationIds?.Halo,
@@ -2933,19 +3193,19 @@ var JoinPanelImpl = (props) => {
2933
3193
  ...failed.has("Halo") && {
2934
3194
  failed: true
2935
3195
  }
2936
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3196
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2937
3197
  classNames: stepStyles,
2938
3198
  id: "identity added"
2939
- }, /* @__PURE__ */ React34.createElement(IdentityAdded, {
3199
+ }, /* @__PURE__ */ React36.createElement(IdentityAdded, {
2940
3200
  send,
2941
3201
  mode,
2942
3202
  active: activeView === "identity added",
2943
3203
  doneActionParent,
2944
3204
  onDone: onHaloDone
2945
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3205
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2946
3206
  classNames: stepStyles,
2947
3207
  id: "space invitation input"
2948
- }, /* @__PURE__ */ React34.createElement(InvitationInput, {
3208
+ }, /* @__PURE__ */ React36.createElement(InvitationInput, {
2949
3209
  send,
2950
3210
  Kind: "Space",
2951
3211
  active: activeView === "space invitation input",
@@ -2957,20 +3217,20 @@ var JoinPanelImpl = (props) => {
2957
3217
  },
2958
3218
  onExit,
2959
3219
  exitActionParent
2960
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3220
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2961
3221
  classNames: stepStyles,
2962
3222
  id: "space invitation rescuer"
2963
- }, /* @__PURE__ */ React34.createElement(InvitationRescuer, {
3223
+ }, /* @__PURE__ */ React36.createElement(InvitationRescuer, {
2964
3224
  send,
2965
3225
  Kind: "Space",
2966
3226
  active: activeView === "space invitation rescuer",
2967
3227
  invitationState: invitationStates?.Space,
2968
3228
  onInvitationCancel: onSpaceInvitationCancel,
2969
3229
  failReason: failReasons?.Space
2970
- })), /* @__PURE__ */ React34.createElement(Viewport.View, {
3230
+ })), /* @__PURE__ */ React36.createElement(Viewport.View, {
2971
3231
  classNames: stepStyles,
2972
3232
  id: "space invitation authenticator"
2973
- }, /* @__PURE__ */ React34.createElement(InvitationAuthenticator, {
3233
+ }, /* @__PURE__ */ React36.createElement(InvitationAuthenticator, {
2974
3234
  send,
2975
3235
  Kind: "Space",
2976
3236
  invitationId: invitationIds?.Space,
@@ -2986,7 +3246,7 @@ var JoinPanelImpl = (props) => {
2986
3246
  var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition = "default", initialInvitationCode, exitActionParent, onExit, doneActionParent, onDone: propsOnDone, onCancelResetStorage }) => {
2987
3247
  const client = useClient8();
2988
3248
  const identity = useIdentity2();
2989
- const { hasIosKeyboard } = useThemeContext3();
3249
+ const { hasIosKeyboard } = useThemeContext5();
2990
3250
  const titleId = useId8("joinPanel__heading", propsTitleId);
2991
3251
  const [joinState, joinSend, joinService] = useJoinMachine(client, {
2992
3252
  context: {
@@ -3248,7 +3508,7 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3248
3508
  client,
3249
3509
  joinSend
3250
3510
  ]);
3251
- return /* @__PURE__ */ React34.createElement(JoinPanelImpl, {
3511
+ return /* @__PURE__ */ React36.createElement(JoinPanelImpl, {
3252
3512
  titleId,
3253
3513
  mode,
3254
3514
  send: joinSend,
@@ -3291,10 +3551,10 @@ var JoinPanel = ({ titleId: propsTitleId, mode = "default", initialDisposition =
3291
3551
 
3292
3552
  // packages/sdk/shell/src/panels/SpacePanel/SpacePanel.tsx
3293
3553
  import { Planet } from "@phosphor-icons/react";
3294
- import React36, { useEffect as useEffect7, useMemo as useMemo5 } from "react";
3554
+ import React38, { useEffect as useEffect7, useMemo as useMemo5 } from "react";
3295
3555
  import { log as log14 } from "@dxos/log";
3296
3556
  import { useInvitationStatus as useInvitationStatus3 } from "@dxos/react-client/invitations";
3297
- import { useId as useId9, useTranslation as useTranslation21 } from "@dxos/react-ui";
3557
+ import { useId as useId9, useTranslation as useTranslation23 } from "@dxos/react-ui";
3298
3558
 
3299
3559
  // packages/sdk/shell/src/panels/SpacePanel/spaceMachine.ts
3300
3560
  import { useMachine as useMachine3 } from "@xstate/react";
@@ -3360,13 +3620,13 @@ var useSpaceMachine = (options) => {
3360
3620
 
3361
3621
  // packages/sdk/shell/src/panels/SpacePanel/steps/SpaceManager.tsx
3362
3622
  import { Placeholder as Placeholder2, UserPlus, UsersThree } from "@phosphor-icons/react";
3363
- import React35, { useCallback as useCallback7, useState as useState9 } from "react";
3623
+ import React37, { useCallback as useCallback7, useState as useState11 } from "react";
3364
3624
  import { log as log13 } from "@dxos/log";
3365
3625
  import { useConfig } from "@dxos/react-client";
3366
3626
  import { useSpaceInvitations as useSpaceInvitations2 } from "@dxos/react-client/echo";
3367
3627
  import { Invitation as Invitation8, InvitationEncoder as InvitationEncoder4 } from "@dxos/react-client/invitations";
3368
- import { ScrollArea, useTranslation as useTranslation20 } from "@dxos/react-ui";
3369
- import { descriptionText as descriptionText12, mx as mx22 } from "@dxos/react-ui-theme";
3628
+ import { ScrollArea, useTranslation as useTranslation22 } from "@dxos/react-ui";
3629
+ import { descriptionText as descriptionText12, mx as mx23 } from "@dxos/react-ui-theme";
3370
3630
  var __dxlog_file12 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/steps/SpaceManager.tsx";
3371
3631
  var activeActionKey = "dxos:react-shell/space-manager/active-action";
3372
3632
  var handleInvitationEvent = (invitation, subscription) => {
@@ -3386,7 +3646,7 @@ var handleInvitationEvent = (invitation, subscription) => {
3386
3646
  };
3387
3647
  var SpaceManager = (props) => {
3388
3648
  const { space, target } = props;
3389
- const { t } = useTranslation20("os");
3649
+ const { t } = useTranslation22("os");
3390
3650
  const config = useConfig();
3391
3651
  const invitations = useSpaceInvitations2(space?.key);
3392
3652
  const inviteActions = {
@@ -3431,7 +3691,7 @@ var SpaceManager = (props) => {
3431
3691
  ])
3432
3692
  }
3433
3693
  };
3434
- return /* @__PURE__ */ React35.createElement(SpaceManagerImpl, {
3694
+ return /* @__PURE__ */ React37.createElement(SpaceManagerImpl, {
3435
3695
  ...props,
3436
3696
  invitations,
3437
3697
  inviteActions
@@ -3440,7 +3700,7 @@ var SpaceManager = (props) => {
3440
3700
  var headingFragment = "pis-3 pie-1 plb-1 mbe-1 font-medium";
3441
3701
  var SpaceManagerImpl = (props) => {
3442
3702
  const { active, space, createInvitationUrl, send, inviteActions: propsInviteActions, invitations, showInactiveInvitations, SpaceMemberList: SpaceMemberListComponent = SpaceMemberList, InvitationList: InvitationListComponent = InvitationList } = props;
3443
- const { t } = useTranslation20("os");
3703
+ const { t } = useTranslation22("os");
3444
3704
  const inviteActions = propsInviteActions ?? {
3445
3705
  noopInvite: {
3446
3706
  label: t("create space invitation label"),
@@ -3450,7 +3710,7 @@ var SpaceManagerImpl = (props) => {
3450
3710
  }
3451
3711
  }
3452
3712
  };
3453
- const [activeAction, setInternalActiveAction] = useState9(localStorage.getItem(activeActionKey) ?? "inviteMany");
3713
+ const [activeAction, setInternalActiveAction] = useState11(localStorage.getItem(activeActionKey) ?? "inviteMany");
3454
3714
  const setActiveAction = (nextAction) => {
3455
3715
  setInternalActiveAction(nextAction);
3456
3716
  localStorage.setItem(activeActionKey, nextAction);
@@ -3458,26 +3718,26 @@ var SpaceManagerImpl = (props) => {
3458
3718
  const visibleInvitations = showInactiveInvitations ? invitations : invitations?.filter((invitation) => ![
3459
3719
  Invitation8.State.CANCELLED
3460
3720
  ].includes(invitation.get().state));
3461
- return /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement(ScrollArea.Root, {
3721
+ return /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement(ScrollArea.Root, {
3462
3722
  classNames: "grow shrink basis-28 -mli-2"
3463
- }, /* @__PURE__ */ React35.createElement(ScrollArea.Viewport, {
3723
+ }, /* @__PURE__ */ React37.createElement(ScrollArea.Viewport, {
3464
3724
  classNames: "is-full pie-2"
3465
- }, !!visibleInvitations?.length && /* @__PURE__ */ React35.createElement(React35.Fragment, null, /* @__PURE__ */ React35.createElement("h3", {
3466
- className: mx22(headingFragment, descriptionText12)
3467
- }, t("invitation list heading")), /* @__PURE__ */ React35.createElement(InvitationListComponent, {
3725
+ }, !!visibleInvitations?.length && /* @__PURE__ */ React37.createElement(React37.Fragment, null, /* @__PURE__ */ React37.createElement("h3", {
3726
+ className: mx23(headingFragment, descriptionText12)
3727
+ }, t("invitation list heading")), /* @__PURE__ */ React37.createElement(InvitationListComponent, {
3468
3728
  className: "mb-2",
3469
3729
  send,
3470
3730
  invitations: visibleInvitations ?? [],
3471
3731
  onClickRemove: (invitation) => invitation.cancel(),
3472
3732
  createInvitationUrl
3473
- }), /* @__PURE__ */ React35.createElement("h3", {
3474
- className: mx22(headingFragment, descriptionText12, "mbs-2")
3475
- }, t("space member list heading"))), /* @__PURE__ */ React35.createElement(SpaceMemberListComponent, {
3733
+ }), /* @__PURE__ */ React37.createElement("h3", {
3734
+ className: mx23(headingFragment, descriptionText12, "mbs-2")
3735
+ }, t("space member list heading"))), /* @__PURE__ */ React37.createElement(SpaceMemberListComponent, {
3476
3736
  spaceKey: space.key,
3477
3737
  includeSelf: true
3478
- })), /* @__PURE__ */ React35.createElement(ScrollArea.Scrollbar, {
3738
+ })), /* @__PURE__ */ React37.createElement(ScrollArea.Scrollbar, {
3479
3739
  orientation: "vertical"
3480
- }, /* @__PURE__ */ React35.createElement(ScrollArea.Thumb, null))), /* @__PURE__ */ React35.createElement(Actions, null, /* @__PURE__ */ React35.createElement(BifurcatedAction, {
3740
+ }, /* @__PURE__ */ React37.createElement(ScrollArea.Thumb, null))), /* @__PURE__ */ React37.createElement(Actions, null, /* @__PURE__ */ React37.createElement(BifurcatedAction, {
3481
3741
  disabled: !active,
3482
3742
  actions: inviteActions,
3483
3743
  activeAction,
@@ -3489,45 +3749,45 @@ var SpaceManagerImpl = (props) => {
3489
3749
  // packages/sdk/shell/src/panels/SpacePanel/SpacePanel.tsx
3490
3750
  var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/panels/SpacePanel/SpacePanel.tsx";
3491
3751
  var SpacePanelHeading = ({ titleId, space, onDone }) => {
3492
- const { t } = useTranslation21("os");
3752
+ const { t } = useTranslation23("os");
3493
3753
  const name = space.properties.name;
3494
- return /* @__PURE__ */ React36.createElement(Heading, {
3754
+ return /* @__PURE__ */ React38.createElement(Heading, {
3495
3755
  titleId,
3496
3756
  title: t("space panel heading"),
3497
- corner: /* @__PURE__ */ React36.createElement(CloseButton, {
3757
+ corner: /* @__PURE__ */ React38.createElement(CloseButton, {
3498
3758
  "data-testid": "identity-panel-done",
3499
3759
  onDone
3500
3760
  })
3501
- }, /* @__PURE__ */ React36.createElement("div", {
3761
+ }, /* @__PURE__ */ React38.createElement("div", {
3502
3762
  role: "none",
3503
3763
  className: "flex gap-4 items-center justify-center mlb-4"
3504
- }, /* @__PURE__ */ React36.createElement(Planet, {
3764
+ }, /* @__PURE__ */ React38.createElement(Planet, {
3505
3765
  size: 32,
3506
3766
  weight: "light"
3507
- }), /* @__PURE__ */ React36.createElement("div", {
3767
+ }), /* @__PURE__ */ React38.createElement("div", {
3508
3768
  className: "block text-start font-light text-xl"
3509
3769
  }, name ?? space.key.truncate())));
3510
3770
  };
3511
3771
  var SpacePanelImpl = (props) => {
3512
3772
  const { titleId, activeView, space, hideHeading, target, SpaceManager: SpaceManagerComponent = SpaceManager, InvitationManager: InvitationManagerComponent = InvitationManager, ...rest } = props;
3513
- return /* @__PURE__ */ React36.createElement(React36.Fragment, null, !hideHeading && /* @__PURE__ */ React36.createElement(SpacePanelHeading, {
3773
+ return /* @__PURE__ */ React38.createElement(React38.Fragment, null, !hideHeading && /* @__PURE__ */ React38.createElement(SpacePanelHeading, {
3514
3774
  ...rest,
3515
3775
  titleId,
3516
3776
  space
3517
- }), /* @__PURE__ */ React36.createElement(Viewport.Root, {
3777
+ }), /* @__PURE__ */ React38.createElement(Viewport.Root, {
3518
3778
  activeView
3519
- }, /* @__PURE__ */ React36.createElement(Viewport.Views, null, /* @__PURE__ */ React36.createElement(Viewport.View, {
3779
+ }, /* @__PURE__ */ React38.createElement(Viewport.Views, null, /* @__PURE__ */ React38.createElement(Viewport.View, {
3520
3780
  id: "space manager",
3521
3781
  classNames: stepStyles
3522
- }, /* @__PURE__ */ React36.createElement(SpaceManagerComponent, {
3782
+ }, /* @__PURE__ */ React38.createElement(SpaceManagerComponent, {
3523
3783
  active: activeView === "space manager",
3524
3784
  space,
3525
3785
  target,
3526
3786
  ...rest
3527
- })), /* @__PURE__ */ React36.createElement(Viewport.View, {
3787
+ })), /* @__PURE__ */ React38.createElement(Viewport.View, {
3528
3788
  id: "space invitation manager",
3529
3789
  classNames: stepStyles
3530
- }, /* @__PURE__ */ React36.createElement(InvitationManagerComponent, {
3790
+ }, /* @__PURE__ */ React38.createElement(InvitationManagerComponent, {
3531
3791
  active: activeView === "space invitation manager",
3532
3792
  ...rest,
3533
3793
  invitationUrl: props.invitationUrl
@@ -3535,7 +3795,7 @@ var SpacePanelImpl = (props) => {
3535
3795
  };
3536
3796
  var SpacePanelWithInvitationImpl = ({ invitation, ...props }) => {
3537
3797
  const invitationStatus = useInvitationStatus3(invitation);
3538
- return /* @__PURE__ */ React36.createElement(SpacePanelImpl, {
3798
+ return /* @__PURE__ */ React38.createElement(SpacePanelImpl, {
3539
3799
  ...props,
3540
3800
  ...invitationStatus,
3541
3801
  invitationUrl: props.createInvitationUrl(invitationStatus.invitationCode)
@@ -3582,24 +3842,24 @@ var SpacePanel = ({ titleId: propsTitleId, createInvitationUrl = (code) => code,
3582
3842
  };
3583
3843
  return spaceState.context.invitation ? (
3584
3844
  // TODO(wittjosiah): Unused? Remove?
3585
- /* @__PURE__ */ React36.createElement(SpacePanelWithInvitationImpl, {
3845
+ /* @__PURE__ */ React38.createElement(SpacePanelWithInvitationImpl, {
3586
3846
  ...implProps,
3587
3847
  invitation: spaceState.context.invitation
3588
3848
  })
3589
- ) : /* @__PURE__ */ React36.createElement(SpacePanelImpl, implProps);
3849
+ ) : /* @__PURE__ */ React38.createElement(SpacePanelImpl, implProps);
3590
3850
  };
3591
3851
 
3592
3852
  // packages/sdk/shell/src/panels/StatusPanel/StatusPanel.tsx
3593
- import React37 from "react";
3594
- import { Status, useTranslation as useTranslation22 } from "@dxos/react-ui";
3853
+ import React39 from "react";
3854
+ import { Status, useTranslation as useTranslation24 } from "@dxos/react-ui";
3595
3855
  var StatusPanel = ({ titleId }) => {
3596
- const { t } = useTranslation22("os");
3597
- return /* @__PURE__ */ React37.createElement("div", {
3856
+ const { t } = useTranslation24("os");
3857
+ return /* @__PURE__ */ React39.createElement("div", {
3598
3858
  className: "grid place-items-center p-2 gap-2"
3599
- }, /* @__PURE__ */ React37.createElement("p", {
3859
+ }, /* @__PURE__ */ React39.createElement("p", {
3600
3860
  id: titleId,
3601
3861
  className: "font-medium text-center"
3602
- }, t("resetting message")), /* @__PURE__ */ React37.createElement(Status, {
3862
+ }, t("resetting message")), /* @__PURE__ */ React39.createElement(Status, {
3603
3863
  indeterminate: true
3604
3864
  }, t("resetting message")));
3605
3865
  };
@@ -3607,96 +3867,96 @@ var StatusPanel = ({ titleId }) => {
3607
3867
  // packages/sdk/shell/src/composites/IdentityDialog/IdentityDialog.tsx
3608
3868
  var IdentityDialog = (props) => {
3609
3869
  const titleId = useId10("identityDialog__title", props.title);
3610
- return /* @__PURE__ */ React38.createElement(Dialog.Root, {
3870
+ return /* @__PURE__ */ React40.createElement(Dialog.Root, {
3611
3871
  defaultOpen: true,
3612
3872
  onOpenChange: (open) => open || props.onDone?.()
3613
- }, /* @__PURE__ */ React38.createElement(Dialog.Portal, null, /* @__PURE__ */ React38.createElement(Dialog.Overlay, null, /* @__PURE__ */ React38.createElement(Dialog.Content, {
3873
+ }, /* @__PURE__ */ React40.createElement(Dialog.Portal, null, /* @__PURE__ */ React40.createElement(Dialog.Overlay, null, /* @__PURE__ */ React40.createElement(Dialog.Content, {
3614
3874
  "aria-labelledby": titleId,
3615
3875
  onOpenAutoFocus: (e) => e.preventDefault()
3616
- }, /* @__PURE__ */ React38.createElement(Clipboard3.Provider, null, /* @__PURE__ */ React38.createElement(IdentityPanel, {
3876
+ }, /* @__PURE__ */ React40.createElement(Clipboard3.Provider, null, /* @__PURE__ */ React40.createElement(IdentityPanel, {
3617
3877
  ...props,
3618
3878
  titleId,
3619
- doneActionParent: /* @__PURE__ */ React38.createElement(Dialog.Close, {
3879
+ doneActionParent: /* @__PURE__ */ React40.createElement(Dialog.Close, {
3620
3880
  asChild: true
3621
3881
  })
3622
3882
  }))))));
3623
3883
  };
3624
3884
 
3625
3885
  // packages/sdk/shell/src/composites/JoinDialog/JoinDialog.tsx
3626
- import React39 from "react";
3886
+ import React41 from "react";
3627
3887
  import { AlertDialog, useId as useId11, useVisualViewport } from "@dxos/react-ui";
3628
3888
  var JoinDialog = (joinPanelProps) => {
3629
3889
  const titleId = useId11("joinDialog__title");
3630
3890
  const { height } = useVisualViewport();
3631
- return /* @__PURE__ */ React39.createElement(AlertDialog.Root, {
3891
+ return /* @__PURE__ */ React41.createElement(AlertDialog.Root, {
3632
3892
  defaultOpen: true,
3633
3893
  onOpenChange: (open) => open || (joinPanelProps.onExit ? joinPanelProps.onExit() : joinPanelProps.onDone?.(null))
3634
- }, /* @__PURE__ */ React39.createElement(AlertDialog.Portal, null, /* @__PURE__ */ React39.createElement(AlertDialog.Overlay, {
3894
+ }, /* @__PURE__ */ React41.createElement(AlertDialog.Portal, null, /* @__PURE__ */ React41.createElement(AlertDialog.Overlay, {
3635
3895
  classNames: "backdrop-blur",
3636
3896
  ...height && {
3637
3897
  style: {
3638
3898
  blockSize: `${height}px`
3639
3899
  }
3640
3900
  }
3641
- }, /* @__PURE__ */ React39.createElement(AlertDialog.Content, {
3901
+ }, /* @__PURE__ */ React41.createElement(AlertDialog.Content, {
3642
3902
  "aria-labelledby": titleId
3643
- }, /* @__PURE__ */ React39.createElement(JoinPanel, {
3903
+ }, /* @__PURE__ */ React41.createElement(JoinPanel, {
3644
3904
  ...joinPanelProps,
3645
3905
  titleId,
3646
- exitActionParent: /* @__PURE__ */ React39.createElement(AlertDialog.Cancel, {
3906
+ exitActionParent: /* @__PURE__ */ React41.createElement(AlertDialog.Cancel, {
3647
3907
  asChild: true
3648
3908
  }),
3649
- doneActionParent: /* @__PURE__ */ React39.createElement(AlertDialog.Action, {
3909
+ doneActionParent: /* @__PURE__ */ React41.createElement(AlertDialog.Action, {
3650
3910
  asChild: true
3651
3911
  })
3652
3912
  })))));
3653
3913
  };
3654
3914
 
3655
3915
  // packages/sdk/shell/src/composites/Shell/run-shell.tsx
3656
- import React43, { StrictMode } from "react";
3916
+ import React45, { StrictMode } from "react";
3657
3917
  import { createRoot } from "react-dom/client";
3658
3918
  import { DEFAULT_CLIENT_CHANNEL, DEFAULT_SHELL_CHANNEL } from "@dxos/client-protocol";
3659
3919
  import { AgentHostingProvider, ClientProvider, ClientServicesProxy, Config, ShellDisplay as ShellDisplay2 } from "@dxos/react-client";
3660
- import { Button as Button8, Clipboard as Clipboard5, Dialog as Dialog3, ThemeProvider, Tooltip as Tooltip4, useTranslation as useTranslation23 } from "@dxos/react-ui";
3920
+ import { Button as Button10, Clipboard as Clipboard5, Dialog as Dialog3, ThemeProvider, Tooltip as Tooltip6, useTranslation as useTranslation25 } from "@dxos/react-ui";
3661
3921
  import { defaultTx } from "@dxos/react-ui-theme";
3662
3922
  import { createIFramePort } from "@dxos/rpc-tunnel";
3663
3923
 
3664
3924
  // packages/sdk/shell/src/composites/Shell/Shell.tsx
3665
- import React42, { useEffect as useEffect8, useState as useState10 } from "react";
3925
+ import React44, { useEffect as useEffect8, useState as useState12 } from "react";
3666
3926
  import { log as log15 } from "@dxos/log";
3667
3927
  import { useClient as useClient9 } from "@dxos/react-client";
3668
3928
  import { ShellDisplay, ShellLayout } from "@dxos/react-client";
3669
3929
  import { useSpace as useSpace2 } from "@dxos/react-client/echo";
3670
3930
 
3671
3931
  // packages/sdk/shell/src/composites/SpaceDialog/SpaceDialog.tsx
3672
- import React40 from "react";
3932
+ import React42 from "react";
3673
3933
  import { Clipboard as Clipboard4, Dialog as Dialog2, useId as useId12 } from "@dxos/react-ui";
3674
3934
  var SpaceDialog = (spacePanelProps) => {
3675
3935
  const titleId = useId12("spaceDialog__title");
3676
- return /* @__PURE__ */ React40.createElement(Dialog2.Root, {
3936
+ return /* @__PURE__ */ React42.createElement(Dialog2.Root, {
3677
3937
  defaultOpen: true,
3678
3938
  onOpenChange: (open) => open || spacePanelProps.onDone?.()
3679
- }, /* @__PURE__ */ React40.createElement(Dialog2.Portal, null, /* @__PURE__ */ React40.createElement(Dialog2.Overlay, null, /* @__PURE__ */ React40.createElement(Dialog2.Content, {
3939
+ }, /* @__PURE__ */ React42.createElement(Dialog2.Portal, null, /* @__PURE__ */ React42.createElement(Dialog2.Overlay, null, /* @__PURE__ */ React42.createElement(Dialog2.Content, {
3680
3940
  "aria-labelledby": titleId
3681
- }, /* @__PURE__ */ React40.createElement(Clipboard4.Provider, null, /* @__PURE__ */ React40.createElement(SpacePanel, {
3941
+ }, /* @__PURE__ */ React42.createElement(Clipboard4.Provider, null, /* @__PURE__ */ React42.createElement(SpacePanel, {
3682
3942
  ...spacePanelProps,
3683
3943
  titleId,
3684
- doneActionParent: /* @__PURE__ */ React40.createElement(Dialog2.Close, {
3944
+ doneActionParent: /* @__PURE__ */ React42.createElement(Dialog2.Close, {
3685
3945
  asChild: true
3686
3946
  })
3687
3947
  }))))));
3688
3948
  };
3689
3949
 
3690
3950
  // packages/sdk/shell/src/composites/StatusDialog/StatusDialog.tsx
3691
- import React41 from "react";
3951
+ import React43 from "react";
3692
3952
  import { AlertDialog as AlertDialog2, useId as useId13 } from "@dxos/react-ui";
3693
3953
  var StatusDialog = () => {
3694
3954
  const titleId = useId13("statusDialog__title");
3695
- return /* @__PURE__ */ React41.createElement(AlertDialog2.Root, {
3955
+ return /* @__PURE__ */ React43.createElement(AlertDialog2.Root, {
3696
3956
  open: true
3697
- }, /* @__PURE__ */ React41.createElement(AlertDialog2.Portal, null, /* @__PURE__ */ React41.createElement(AlertDialog2.Overlay, null, /* @__PURE__ */ React41.createElement(AlertDialog2.Content, {
3957
+ }, /* @__PURE__ */ React43.createElement(AlertDialog2.Portal, null, /* @__PURE__ */ React43.createElement(AlertDialog2.Overlay, null, /* @__PURE__ */ React43.createElement(AlertDialog2.Content, {
3698
3958
  "aria-labelledby": titleId
3699
- }, /* @__PURE__ */ React41.createElement(StatusPanel, {
3959
+ }, /* @__PURE__ */ React43.createElement(StatusPanel, {
3700
3960
  titleId
3701
3961
  })))));
3702
3962
  };
@@ -3705,14 +3965,14 @@ var StatusDialog = () => {
3705
3965
  var __dxlog_file14 = "/home/runner/work/dxos/dxos/packages/sdk/shell/src/composites/Shell/Shell.tsx";
3706
3966
  var blurActiveElement = () => document.activeElement?.blur?.();
3707
3967
  var Shell = ({ runtime }) => {
3708
- const [{ layout, invitationCode, spaceKey, spaceId, target }, setLayout] = useState10({
3968
+ const [{ layout, invitationCode, spaceKey, spaceId, target }, setLayout] = useState12({
3709
3969
  layout: runtime.layout,
3710
3970
  invitationCode: runtime.invitationCode,
3711
3971
  spaceKey: runtime.spaceKey,
3712
3972
  spaceId: runtime.spaceId,
3713
3973
  target: runtime.target
3714
3974
  });
3715
- const [{ invitationUrl, deviceInvitationParam, spaceInvitationParam }, setInvitationUrl] = useState10({
3975
+ const [{ invitationUrl, deviceInvitationParam, spaceInvitationParam }, setInvitationUrl] = useState12({
3716
3976
  invitationUrl: runtime.invitationUrl,
3717
3977
  deviceInvitationParam: runtime.deviceInvitationParam,
3718
3978
  spaceInvitationParam: runtime.spaceInvitationParam
@@ -3764,11 +4024,11 @@ var Shell = ({ runtime }) => {
3764
4024
  ]);
3765
4025
  switch (layout) {
3766
4026
  case ShellLayout.STATUS:
3767
- return /* @__PURE__ */ React42.createElement(StatusDialog, null);
4027
+ return /* @__PURE__ */ React44.createElement(StatusDialog, null);
3768
4028
  case ShellLayout.INITIALIZE_IDENTITY:
3769
4029
  case ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION:
3770
4030
  case ShellLayout.INITIALIZE_IDENTITY_FROM_RECOVERY:
3771
- return /* @__PURE__ */ React42.createElement(JoinDialog, {
4031
+ return /* @__PURE__ */ React44.createElement(JoinDialog, {
3772
4032
  mode: "halo-only",
3773
4033
  initialDisposition: layout === ShellLayout.INITIALIZE_IDENTITY_FROM_RECOVERY ? "recover-identity" : layout === ShellLayout.INITIALIZE_IDENTITY_FROM_INVITATION ? "accept-halo-invitation" : "default",
3774
4034
  initialInvitationCode: invitationCode,
@@ -3788,7 +4048,7 @@ var Shell = ({ runtime }) => {
3788
4048
  case ShellLayout.IDENTITY:
3789
4049
  case ShellLayout.SHARE_IDENTITY:
3790
4050
  case ShellLayout.EDIT_PROFILE:
3791
- return /* @__PURE__ */ React42.createElement(IdentityDialog, {
4051
+ return /* @__PURE__ */ React44.createElement(IdentityDialog, {
3792
4052
  createInvitationUrl: createDeviceInvitationUrl,
3793
4053
  onResetStorage: async () => {
3794
4054
  runtime.setLayout({
@@ -3834,7 +4094,7 @@ var Shell = ({ runtime }) => {
3834
4094
  initialDisposition: layout === ShellLayout.SHARE_IDENTITY ? "manage-device-invitation" : "default"
3835
4095
  });
3836
4096
  case ShellLayout.SPACE:
3837
- return space ? /* @__PURE__ */ React42.createElement(SpaceDialog, {
4097
+ return space ? /* @__PURE__ */ React44.createElement(SpaceDialog, {
3838
4098
  space,
3839
4099
  target,
3840
4100
  createInvitationUrl: createSpaceInvitationUrl,
@@ -3849,7 +4109,7 @@ var Shell = ({ runtime }) => {
3849
4109
  }
3850
4110
  }) : null;
3851
4111
  case ShellLayout.JOIN_SPACE:
3852
- return /* @__PURE__ */ React42.createElement(JoinDialog, {
4112
+ return /* @__PURE__ */ React44.createElement(JoinDialog, {
3853
4113
  initialInvitationCode: invitationCode,
3854
4114
  onDone: async (result) => {
3855
4115
  blurActiveElement();
@@ -4156,25 +4416,25 @@ var runShell = async (config = new Config()) => {
4156
4416
  const services = new ClientServicesProxy(createIFramePort({
4157
4417
  channel: DEFAULT_CLIENT_CHANNEL
4158
4418
  }));
4159
- createRoot(document.getElementById("root")).render(/* @__PURE__ */ React43.createElement(StrictMode, null, /* @__PURE__ */ React43.createElement(ThemeProvider, {
4419
+ createRoot(document.getElementById("root")).render(/* @__PURE__ */ React45.createElement(StrictMode, null, /* @__PURE__ */ React45.createElement(ThemeProvider, {
4160
4420
  tx: defaultTx,
4161
4421
  resourceExtensions: [
4162
4422
  osTranslations
4163
4423
  ]
4164
- }, /* @__PURE__ */ React43.createElement(ClientProvider, {
4424
+ }, /* @__PURE__ */ React45.createElement(ClientProvider, {
4165
4425
  config,
4166
4426
  services,
4167
4427
  noBanner: true
4168
- }, /* @__PURE__ */ React43.createElement(Clipboard5.Provider, null, /* @__PURE__ */ React43.createElement(Tooltip4.Provider, null, /* @__PURE__ */ React43.createElement(AgentHostingProvider, null, /* @__PURE__ */ React43.createElement(Shell, {
4428
+ }, /* @__PURE__ */ React45.createElement(Clipboard5.Provider, null, /* @__PURE__ */ React45.createElement(Tooltip6.Provider, null, /* @__PURE__ */ React45.createElement(AgentHostingProvider, null, /* @__PURE__ */ React45.createElement(Shell, {
4169
4429
  runtime
4170
4430
  }))))))));
4171
4431
  } catch {
4172
- createRoot(document.getElementById("root")).render(/* @__PURE__ */ React43.createElement(StrictMode, null, /* @__PURE__ */ React43.createElement(ThemeProvider, {
4432
+ createRoot(document.getElementById("root")).render(/* @__PURE__ */ React45.createElement(StrictMode, null, /* @__PURE__ */ React45.createElement(ThemeProvider, {
4173
4433
  tx: defaultTx,
4174
4434
  resourceExtensions: [
4175
4435
  osTranslations
4176
4436
  ]
4177
- }, /* @__PURE__ */ React43.createElement(Fallback, {
4437
+ }, /* @__PURE__ */ React45.createElement(Fallback, {
4178
4438
  onClose: () => runtime.setAppContext({
4179
4439
  display: ShellDisplay2.NONE
4180
4440
  })
@@ -4182,24 +4442,24 @@ var runShell = async (config = new Config()) => {
4182
4442
  }
4183
4443
  };
4184
4444
  var Fallback = ({ onClose }) => {
4185
- const { t } = useTranslation23("os");
4186
- return /* @__PURE__ */ React43.createElement(Dialog3.Root, {
4445
+ const { t } = useTranslation25("os");
4446
+ return /* @__PURE__ */ React45.createElement(Dialog3.Root, {
4187
4447
  modal: true,
4188
4448
  open: true,
4189
4449
  onOpenChange: () => onClose?.()
4190
- }, /* @__PURE__ */ React43.createElement(Dialog3.Overlay, null, /* @__PURE__ */ React43.createElement(Dialog3.Content, null, /* @__PURE__ */ React43.createElement(Dialog3.Title, null, t("shell fallback title")), /* @__PURE__ */ React43.createElement(Dialog3.Close, {
4450
+ }, /* @__PURE__ */ React45.createElement(Dialog3.Overlay, null, /* @__PURE__ */ React45.createElement(Dialog3.Content, null, /* @__PURE__ */ React45.createElement(Dialog3.Title, null, t("shell fallback title")), /* @__PURE__ */ React45.createElement(Dialog3.Close, {
4191
4451
  asChild: true,
4192
4452
  onClick: () => onClose?.()
4193
- }, /* @__PURE__ */ React43.createElement(Button8, {
4453
+ }, /* @__PURE__ */ React45.createElement(Button10, {
4194
4454
  variant: "primary"
4195
4455
  }, t("close label"))))));
4196
4456
  };
4197
4457
 
4198
4458
  // packages/sdk/shell/src/composites/Shell/ShellContext.tsx
4199
- import React44, { createContext, useCallback as useCallback8, useContext, useEffect as useEffect9, useMemo as useMemo6, useState as useState11 } from "react";
4459
+ import React46, { createContext, useCallback as useCallback8, useContext, useEffect as useEffect9, useMemo as useMemo6, useState as useState13 } from "react";
4200
4460
  import { useClient as useClient10, ShellDisplay as ShellDisplay3, ShellLayout as ShellLayout4 } from "@dxos/react-client";
4201
4461
  import { useIdentity as useIdentity3 } from "@dxos/react-client/halo";
4202
- import { mx as mx23 } from "@dxos/react-ui-theme";
4462
+ import { mx as mx24 } from "@dxos/react-ui-theme";
4203
4463
 
4204
4464
  // packages/sdk/shell/src/composites/Shell/memory-shell-runtime.ts
4205
4465
  import { Event as Event2 } from "@dxos/async";
@@ -4277,7 +4537,7 @@ var useShell = () => {
4277
4537
  var ShellProvider = ({ space, deviceInvitationCode, spaceInvitationCode, onJoinedSpace, children }) => {
4278
4538
  const client = useClient10();
4279
4539
  const identity = useIdentity3();
4280
- const [display, setDisplay] = useState11(!identity || spaceInvitationCode || deviceInvitationCode ? ShellDisplay3.FULLSCREEN : ShellDisplay3.NONE);
4540
+ const [display, setDisplay] = useState13(!identity || spaceInvitationCode || deviceInvitationCode ? ShellDisplay3.FULLSCREEN : ShellDisplay3.NONE);
4281
4541
  const shellRuntime = useMemo6(() => {
4282
4542
  if (client.config.get("runtime.app.env.DX_VAULT") !== "false") {
4283
4543
  return;
@@ -4347,11 +4607,11 @@ var ShellProvider = ({ space, deviceInvitationCode, spaceInvitationCode, onJoine
4347
4607
  }, [
4348
4608
  shellRuntime
4349
4609
  ]);
4350
- return /* @__PURE__ */ React44.createElement(React44.Fragment, null, shellRuntime && /* @__PURE__ */ React44.createElement("div", {
4351
- className: mx23(display === ShellDisplay3.NONE ? "hidden" : "")
4352
- }, /* @__PURE__ */ React44.createElement(Shell, {
4610
+ return /* @__PURE__ */ React46.createElement(React46.Fragment, null, shellRuntime && /* @__PURE__ */ React46.createElement("div", {
4611
+ className: mx24(display === ShellDisplay3.NONE ? "hidden" : "")
4612
+ }, /* @__PURE__ */ React46.createElement(Shell, {
4353
4613
  runtime: shellRuntime
4354
- })), /* @__PURE__ */ React44.createElement(ShellContext.Provider, {
4614
+ })), /* @__PURE__ */ React46.createElement(ShellContext.Provider, {
4355
4615
  value: {
4356
4616
  runtime: shellRuntime,
4357
4617
  setDisplay
@@ -4371,7 +4631,11 @@ export {
4371
4631
  ConfirmResetImpl,
4372
4632
  DeviceList,
4373
4633
  Emoji,
4634
+ EmojiPickerBlock,
4635
+ EmojiPickerToolbarButton,
4374
4636
  Heading,
4637
+ HuePickerBlock,
4638
+ HuePickerToolbarButton,
4375
4639
  IdentityDialog,
4376
4640
  IdentityListItem,
4377
4641
  IdentityPanel,