@dxos/plugin-client 0.8.4-main.b97322e → 0.8.4-main.c4373fc

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 (151) hide show
  1. package/dist/lib/browser/{app-graph-builder-JNIES5L4.mjs → app-graph-builder-LUY3BJGC.mjs} +23 -22
  2. package/dist/lib/browser/app-graph-builder-LUY3BJGC.mjs.map +7 -0
  3. package/dist/lib/browser/{chunk-SV3MHIKI.mjs → chunk-C7B7NM2G.mjs} +38 -47
  4. package/dist/lib/browser/chunk-C7B7NM2G.mjs.map +7 -0
  5. package/dist/lib/browser/chunk-PFY3EQPI.mjs +18 -0
  6. package/dist/lib/browser/chunk-PFY3EQPI.mjs.map +7 -0
  7. package/dist/lib/browser/chunk-QB3D2P4J.mjs +10 -0
  8. package/dist/lib/browser/chunk-QB3D2P4J.mjs.map +7 -0
  9. package/dist/lib/browser/{chunk-RMHBOY3Y.mjs → chunk-TRA2GP4M.mjs} +3 -3
  10. package/dist/lib/browser/chunk-TRA2GP4M.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-VTC4GIND.mjs +19 -0
  12. package/dist/lib/browser/chunk-VTC4GIND.mjs.map +7 -0
  13. package/dist/lib/browser/{client-SKVKXPLY.mjs → client-5PWEJ3U6.mjs} +14 -8
  14. package/dist/lib/browser/client-5PWEJ3U6.mjs.map +7 -0
  15. package/dist/lib/browser/index.mjs +23 -19
  16. package/dist/lib/browser/index.mjs.map +4 -4
  17. package/dist/lib/browser/{intent-resolver-LNPLD5CA.mjs → intent-resolver-L5NVP2G3.mjs} +18 -18
  18. package/dist/lib/browser/intent-resolver-L5NVP2G3.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{migrations-D76RCG72.mjs → migrations-MWQCO5KY.mjs} +5 -5
  21. package/dist/lib/{node-esm/migrations-YISDI7LF.mjs.map → browser/migrations-MWQCO5KY.mjs.map} +2 -2
  22. package/dist/lib/browser/{react-context-YWVPZUMU.mjs → react-context-S4SRYUVY.mjs} +7 -7
  23. package/dist/lib/browser/react-context-S4SRYUVY.mjs.map +7 -0
  24. package/dist/lib/browser/{react-surface-QFZTDNLS.mjs → react-surface-6PV7RVQN.mjs} +7 -7
  25. package/dist/lib/browser/{react-surface-QFZTDNLS.mjs.map → react-surface-6PV7RVQN.mjs.map} +3 -3
  26. package/dist/lib/browser/{schema-defs-HKW6VNZB.mjs → schema-defs-E3USCMH3.mjs} +5 -5
  27. package/dist/lib/{node-esm/schema-defs-5ZNI63RW.mjs.map → browser/schema-defs-E3USCMH3.mjs.map} +2 -2
  28. package/dist/lib/browser/types/index.mjs +2 -2
  29. package/dist/lib/node-esm/{app-graph-builder-SWFB4FID.mjs → app-graph-builder-S3BVB3IU.mjs} +23 -22
  30. package/dist/lib/node-esm/app-graph-builder-S3BVB3IU.mjs.map +7 -0
  31. package/dist/lib/node-esm/{chunk-5V3RCXZV.mjs → chunk-4MPOOMDQ.mjs} +3 -3
  32. package/dist/lib/node-esm/chunk-4MPOOMDQ.mjs.map +7 -0
  33. package/dist/lib/node-esm/{chunk-FBYODKEL.mjs → chunk-H73VVAMA.mjs} +38 -47
  34. package/dist/lib/node-esm/chunk-H73VVAMA.mjs.map +7 -0
  35. package/dist/lib/node-esm/chunk-K5IFPSCL.mjs +20 -0
  36. package/dist/lib/node-esm/chunk-K5IFPSCL.mjs.map +7 -0
  37. package/dist/lib/node-esm/{chunk-SZLX4BVJ.mjs → chunk-QE4LPI2A.mjs} +2 -4
  38. package/dist/lib/node-esm/chunk-QE4LPI2A.mjs.map +7 -0
  39. package/dist/lib/node-esm/chunk-UYDFBGYA.mjs +19 -0
  40. package/dist/lib/node-esm/chunk-UYDFBGYA.mjs.map +7 -0
  41. package/dist/lib/node-esm/{client-SLL6GDC2.mjs → client-ODN7EBTY.mjs} +14 -8
  42. package/dist/lib/node-esm/client-ODN7EBTY.mjs.map +7 -0
  43. package/dist/lib/node-esm/index.mjs +23 -19
  44. package/dist/lib/node-esm/index.mjs.map +4 -4
  45. package/dist/lib/node-esm/{intent-resolver-L7C6YRWV.mjs → intent-resolver-3JZIPI6F.mjs} +18 -18
  46. package/dist/lib/node-esm/intent-resolver-3JZIPI6F.mjs.map +7 -0
  47. package/dist/lib/node-esm/meta.json +1 -1
  48. package/dist/lib/node-esm/{migrations-YISDI7LF.mjs → migrations-ARXHGBH5.mjs} +5 -5
  49. package/dist/lib/{browser/migrations-D76RCG72.mjs.map → node-esm/migrations-ARXHGBH5.mjs.map} +2 -2
  50. package/dist/lib/node-esm/{react-context-EEHS4S3L.mjs → react-context-4SZYNSIS.mjs} +7 -7
  51. package/dist/lib/node-esm/react-context-4SZYNSIS.mjs.map +7 -0
  52. package/dist/lib/node-esm/{react-surface-2K6W37R4.mjs → react-surface-BOST4EH2.mjs} +7 -7
  53. package/dist/lib/node-esm/{react-surface-2K6W37R4.mjs.map → react-surface-BOST4EH2.mjs.map} +3 -3
  54. package/dist/lib/node-esm/{schema-defs-5ZNI63RW.mjs → schema-defs-ATH5YBDR.mjs} +5 -5
  55. package/dist/lib/{browser/schema-defs-HKW6VNZB.mjs.map → node-esm/schema-defs-ATH5YBDR.mjs.map} +2 -2
  56. package/dist/lib/node-esm/types/index.mjs +2 -2
  57. package/dist/types/src/ClientPlugin.d.ts +1 -1
  58. package/dist/types/src/ClientPlugin.d.ts.map +1 -1
  59. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  60. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  61. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/client.d.ts +1 -1
  63. package/dist/types/src/capabilities/client.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/index.d.ts +10 -10
  65. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  67. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  68. package/dist/types/src/capabilities/migrations.d.ts +1 -1
  69. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  70. package/dist/types/src/capabilities/react-context.d.ts +2 -2
  71. package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
  72. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  73. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  74. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  75. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  76. package/dist/types/src/components/DevicesContainer.d.ts.map +1 -1
  77. package/dist/types/src/components/DevicesContainer.stories.d.ts +224 -5
  78. package/dist/types/src/components/DevicesContainer.stories.d.ts.map +1 -1
  79. package/dist/types/src/components/JoinDialog.d.ts +1 -1
  80. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  81. package/dist/types/src/components/ProfileContainer.d.ts.map +1 -1
  82. package/dist/types/src/components/ProfileContainer.stories.d.ts +57 -5
  83. package/dist/types/src/components/ProfileContainer.stories.d.ts.map +1 -1
  84. package/dist/types/src/components/RecoveryCodeDialog.d.ts +1 -1
  85. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +1 -1
  86. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts +59 -5
  87. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts.map +1 -1
  88. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts +1 -1
  89. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +1 -1
  90. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts +57 -5
  91. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts.map +1 -1
  92. package/dist/types/src/components/ResetDialog.d.ts +1 -1
  93. package/dist/types/src/components/ResetDialog.d.ts.map +1 -1
  94. package/dist/types/src/components/ResetDialog.stories.d.ts +59 -4
  95. package/dist/types/src/components/ResetDialog.stories.d.ts.map +1 -1
  96. package/dist/types/src/events.d.ts.map +1 -1
  97. package/dist/types/src/index.d.ts +3 -2
  98. package/dist/types/src/index.d.ts.map +1 -1
  99. package/dist/types/src/meta.d.ts +0 -1
  100. package/dist/types/src/meta.d.ts.map +1 -1
  101. package/dist/types/src/types/schema.d.ts +10 -4
  102. package/dist/types/src/types/schema.d.ts.map +1 -1
  103. package/dist/types/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +36 -35
  105. package/src/ClientPlugin.ts +57 -59
  106. package/src/capabilities/app-graph-builder.ts +20 -18
  107. package/src/capabilities/capabilities.ts +5 -5
  108. package/src/capabilities/client.ts +6 -4
  109. package/src/capabilities/intent-resolver.ts +7 -6
  110. package/src/capabilities/migrations.ts +1 -1
  111. package/src/capabilities/react-context.tsx +3 -2
  112. package/src/capabilities/react-surface.tsx +3 -3
  113. package/src/capabilities/schema-defs.ts +1 -1
  114. package/src/components/DevicesContainer.stories.tsx +9 -11
  115. package/src/components/DevicesContainer.tsx +54 -68
  116. package/src/components/JoinDialog.tsx +4 -4
  117. package/src/components/ProfileContainer.stories.tsx +8 -9
  118. package/src/components/ProfileContainer.tsx +22 -25
  119. package/src/components/RecoveryCodeDialog.stories.tsx +9 -10
  120. package/src/components/RecoveryCodeDialog.tsx +3 -3
  121. package/src/components/RecoveryCredentialsContainer.stories.tsx +9 -11
  122. package/src/components/RecoveryCredentialsContainer.tsx +47 -50
  123. package/src/components/ResetDialog.stories.tsx +10 -13
  124. package/src/components/ResetDialog.tsx +4 -4
  125. package/src/events.ts +6 -6
  126. package/src/index.ts +4 -3
  127. package/src/meta.ts +1 -3
  128. package/src/types/schema.ts +4 -4
  129. package/dist/lib/browser/app-graph-builder-JNIES5L4.mjs.map +0 -7
  130. package/dist/lib/browser/chunk-3F2Q2RKC.mjs +0 -18
  131. package/dist/lib/browser/chunk-3F2Q2RKC.mjs.map +0 -7
  132. package/dist/lib/browser/chunk-CAF2COXW.mjs +0 -19
  133. package/dist/lib/browser/chunk-CAF2COXW.mjs.map +0 -7
  134. package/dist/lib/browser/chunk-GS3LDHYD.mjs +0 -12
  135. package/dist/lib/browser/chunk-GS3LDHYD.mjs.map +0 -7
  136. package/dist/lib/browser/chunk-RMHBOY3Y.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-SV3MHIKI.mjs.map +0 -7
  138. package/dist/lib/browser/client-SKVKXPLY.mjs.map +0 -7
  139. package/dist/lib/browser/intent-resolver-LNPLD5CA.mjs.map +0 -7
  140. package/dist/lib/browser/react-context-YWVPZUMU.mjs.map +0 -7
  141. package/dist/lib/node-esm/app-graph-builder-SWFB4FID.mjs.map +0 -7
  142. package/dist/lib/node-esm/chunk-5V3RCXZV.mjs.map +0 -7
  143. package/dist/lib/node-esm/chunk-FBYODKEL.mjs.map +0 -7
  144. package/dist/lib/node-esm/chunk-IOGTQFLM.mjs +0 -19
  145. package/dist/lib/node-esm/chunk-IOGTQFLM.mjs.map +0 -7
  146. package/dist/lib/node-esm/chunk-SZLX4BVJ.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs +0 -20
  148. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs.map +0 -7
  149. package/dist/lib/node-esm/client-SLL6GDC2.mjs.map +0 -7
  150. package/dist/lib/node-esm/intent-resolver-L7C6YRWV.mjs.map +0 -7
  151. package/dist/lib/node-esm/react-context-EEHS4S3L.mjs.map +0 -7
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ClientAction
4
- } from "./chunk-5V3RCXZV.mjs";
4
+ } from "./chunk-4MPOOMDQ.mjs";
5
5
  import {
6
- CLIENT_PLUGIN
7
- } from "./chunk-SZLX4BVJ.mjs";
6
+ meta
7
+ } from "./chunk-QE4LPI2A.mjs";
8
8
 
9
9
  // src/components/DevicesContainer.tsx
10
10
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
@@ -16,9 +16,8 @@ import { useClient, useMulticastObservable } from "@dxos/react-client";
16
16
  import { useDevices } from "@dxos/react-client/halo";
17
17
  import { Invitation, InvitationEncoder } from "@dxos/react-client/invitations";
18
18
  import { useNetworkStatus } from "@dxos/react-client/mesh";
19
- import { Button, Clipboard, IconButton, List, useId, useTranslation, Icon } from "@dxos/react-ui";
19
+ import { Button, Clipboard, Icon, IconButton, List, useId, useTranslation } from "@dxos/react-ui";
20
20
  import { ControlFrame, ControlFrameItem, ControlGroup, ControlItem, ControlPage, ControlSection } from "@dxos/react-ui-form";
21
- import { StackItem } from "@dxos/react-ui-stack";
22
21
  import { AuthCode, Centered, DeviceListItem, Emoji, Viewport } from "@dxos/shell/react";
23
22
  import { hexToEmoji } from "@dxos/util";
24
23
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-client/src/components/DevicesContainer.tsx";
@@ -42,18 +41,16 @@ var DevicesContainer = ({ createInvitationUrl }) => {
42
41
  })), [
43
42
  dispatch
44
43
  ]);
45
- return /* @__PURE__ */ React.createElement(Clipboard.Provider, null, /* @__PURE__ */ React.createElement(StackItem.Content, {
46
- classNames: "block overflow-y-auto"
47
- }, /* @__PURE__ */ React.createElement(ControlPage, null, /* @__PURE__ */ React.createElement(ControlSection, {
44
+ return /* @__PURE__ */ React.createElement(Clipboard.Provider, null, /* @__PURE__ */ React.createElement(ControlPage, null, /* @__PURE__ */ React.createElement(ControlSection, {
48
45
  title: t("devices verbose label", {
49
- ns: CLIENT_PLUGIN
46
+ ns: meta.id
50
47
  }),
51
48
  description: t("devices description", {
52
- ns: CLIENT_PLUGIN
49
+ ns: meta.id
53
50
  })
54
51
  }, /* @__PURE__ */ React.createElement(ControlFrame, null, /* @__PURE__ */ React.createElement(ControlFrameItem, {
55
52
  title: t("devices label", {
56
- ns: CLIENT_PLUGIN
53
+ ns: meta.id
57
54
  })
58
55
  }, /* @__PURE__ */ React.createElement(List, null, devices.map((device) => {
59
56
  return /* @__PURE__ */ React.createElement(DeviceListItem, {
@@ -67,15 +64,15 @@ var DevicesContainer = ({ createInvitationUrl }) => {
67
64
  createInvitationUrl
68
65
  })))), /* @__PURE__ */ React.createElement(ControlSection, {
69
66
  title: t("danger zone title", {
70
- ns: CLIENT_PLUGIN
67
+ ns: meta.id
71
68
  }),
72
69
  description: t("danger zone description", {
73
- ns: CLIENT_PLUGIN
70
+ ns: meta.id
74
71
  })
75
72
  }, /* @__PURE__ */ React.createElement(ControlGroup, null, /* @__PURE__ */ React.createElement(ControlItem, {
76
73
  title: t("reset device label"),
77
74
  description: t("reset device description", {
78
- ns: CLIENT_PLUGIN
75
+ ns: meta.id
79
76
  })
80
77
  }, /* @__PURE__ */ React.createElement(Button, {
81
78
  variant: "destructive",
@@ -84,7 +81,7 @@ var DevicesContainer = ({ createInvitationUrl }) => {
84
81
  }, t("reset device label"))), /* @__PURE__ */ React.createElement(ControlItem, {
85
82
  title: t("recover identity label"),
86
83
  description: t("recover identity description", {
87
- ns: CLIENT_PLUGIN
84
+ ns: meta.id
88
85
  })
89
86
  }, /* @__PURE__ */ React.createElement(Button, {
90
87
  variant: "destructive",
@@ -93,13 +90,13 @@ var DevicesContainer = ({ createInvitationUrl }) => {
93
90
  }, t("recover identity label"))), /* @__PURE__ */ React.createElement(ControlItem, {
94
91
  title: t("join new identity label"),
95
92
  description: t("join new identity description", {
96
- ns: CLIENT_PLUGIN
93
+ ns: meta.id
97
94
  })
98
95
  }, /* @__PURE__ */ React.createElement(Button, {
99
96
  variant: "destructive",
100
97
  onClick: handleJoinNewIdentity,
101
98
  "data-testid": "devicesContainer.joinExisting"
102
- }, t("join new identity label"))))))));
99
+ }, t("join new identity label")))))));
103
100
  } finally {
104
101
  _effect.f();
105
102
  }
@@ -120,7 +117,7 @@ var DeviceInvitation = (props) => {
120
117
  authCode: invitation3.authCode
121
118
  }), void 0, {
122
119
  F: __dxlog_file,
123
- L: 139,
120
+ L: 125,
124
121
  S: void 0,
125
122
  C: (f, a) => f(...a)
126
123
  });
@@ -180,7 +177,7 @@ var InvitationSection = ({ state = -1, authCode, invitationId = "never", url = "
180
177
  } }) => {
181
178
  var _effect = _useSignals();
182
179
  try {
183
- const { t } = useTranslation(CLIENT_PLUGIN);
180
+ const { t } = useTranslation(meta.id);
184
181
  const activeView = state < 0 ? "init" : state >= Invitation.State.CANCELLED ? "complete" : state >= Invitation.State.READY_FOR_AUTHENTICATION && authCode ? "auth-code" : "qr-code";
185
182
  return activeView === "init" ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", {
186
183
  className: "text-description mbe-2"
@@ -225,7 +222,7 @@ var InvitationQR = ({ id, url, onCancel }) => {
225
222
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", {
226
223
  className: "text-description"
227
224
  }, t("qr code description", {
228
- ns: CLIENT_PLUGIN
225
+ ns: meta.id
229
226
  })), /* @__PURE__ */ React.createElement("div", {
230
227
  role: "group",
231
228
  className: "grid grid-cols-[1fr_min-content] mlb-2 gap-2"
@@ -302,16 +299,16 @@ var InvitationComplete = ({ statusValue }) => {
302
299
  // src/components/JoinDialog.tsx
303
300
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
304
301
  import React2, { useCallback as useCallback2 } from "react";
305
- import { createIntent as createIntent2, LayoutAction, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
302
+ import { LayoutAction, createIntent as createIntent2, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
306
303
  import { ObservabilityAction } from "@dxos/plugin-observability/types";
307
304
  import { Dialog, useTranslation as useTranslation2 } from "@dxos/react-ui";
308
305
  import { JoinPanel } from "@dxos/shell/react";
309
- var JOIN_DIALOG = `${CLIENT_PLUGIN}/JoinDialog`;
306
+ var JOIN_DIALOG = `${meta.id}/JoinDialog`;
310
307
  var JoinDialog = (props) => {
311
308
  var _effect = _useSignals2();
312
309
  try {
313
310
  const { dispatchPromise: dispatch } = useIntentDispatcher2();
314
- const { t } = useTranslation2(CLIENT_PLUGIN);
311
+ const { t } = useTranslation2(meta.id);
315
312
  const handleCancelResetStorage = useCallback2(() => dispatch(createIntent2(ClientAction.ShareIdentity)), [
316
313
  dispatch
317
314
  ]);
@@ -355,16 +352,15 @@ var JoinDialog = (props) => {
355
352
 
356
353
  // src/components/ProfileContainer.tsx
357
354
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
358
- import { Schema } from "effect";
355
+ import * as Schema from "effect/Schema";
359
356
  import React3, { useCallback as useCallback3, useMemo, useState as useState2 } from "react";
360
357
  import { debounce } from "@dxos/async";
361
358
  import { useClient as useClient2 } from "@dxos/react-client";
362
359
  import { useIdentity } from "@dxos/react-client/halo";
363
360
  import { ButtonGroup, Clipboard as Clipboard2, Input, useTranslation as useTranslation3 } from "@dxos/react-ui";
364
- import { Form, ControlItem as ControlItem2, ControlItemInput, ControlSection as ControlSection2, ControlPage as ControlPage2 } from "@dxos/react-ui-form";
361
+ import { ControlItem as ControlItem2, ControlItemInput, ControlPage as ControlPage2, ControlSection as ControlSection2, Form } from "@dxos/react-ui-form";
365
362
  import { EmojiPickerBlock, HuePicker } from "@dxos/react-ui-pickers";
366
- import { StackItem as StackItem2 } from "@dxos/react-ui-stack";
367
- import { hexToHue, hexToEmoji as hexToEmoji2 } from "@dxos/util";
363
+ import { hexToEmoji as hexToEmoji2, hexToHue } from "@dxos/util";
368
364
  var getDefaultHueValue = (identity) => hexToHue(identity?.identityKey.toHex() ?? "0");
369
365
  var getDefaultEmojiValue = (identity) => hexToEmoji2(identity?.identityKey.toHex() ?? "0");
370
366
  var getHueValue = (identity) => identity?.profile?.data?.hue || getDefaultHueValue(identity);
@@ -372,7 +368,7 @@ var getEmojiValue = (identity) => identity?.profile?.data?.emoji || getDefaultEm
372
368
  var ProfileContainer = () => {
373
369
  var _effect = _useSignals3();
374
370
  try {
375
- const { t } = useTranslation3(CLIENT_PLUGIN);
371
+ const { t } = useTranslation3(meta.id);
376
372
  const client = useClient2();
377
373
  const identity = useIdentity();
378
374
  const [displayName, setDisplayNameDirectly] = useState2(identity?.profile?.displayName ?? "");
@@ -475,9 +471,7 @@ var ProfileContainer = () => {
475
471
  }), [
476
472
  t
477
473
  ]);
478
- return /* @__PURE__ */ React3.createElement(StackItem2.Content, {
479
- classNames: "block overflow-y-auto"
480
- }, /* @__PURE__ */ React3.createElement(ControlPage2, null, /* @__PURE__ */ React3.createElement(Clipboard2.Provider, null, /* @__PURE__ */ React3.createElement(ControlSection2, {
474
+ return /* @__PURE__ */ React3.createElement(ControlPage2, null, /* @__PURE__ */ React3.createElement(Clipboard2.Provider, null, /* @__PURE__ */ React3.createElement(ControlSection2, {
481
475
  title: t("profile label"),
482
476
  description: t("profile description")
483
477
  }, /* @__PURE__ */ React3.createElement(Form, {
@@ -486,9 +480,9 @@ var ProfileContainer = () => {
486
480
  autoSave: true,
487
481
  onSave: handleSave,
488
482
  Custom: customElements,
489
- classNames: "container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content] gap-4",
483
+ classNames: "container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]",
490
484
  outerSpacing: false
491
- })))));
485
+ }))));
492
486
  } finally {
493
487
  _effect.f();
494
488
  }
@@ -512,11 +506,11 @@ var ProfileSchema = Schema.Struct({
512
506
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
513
507
  import React4, { useCallback as useCallback4, useState as useState3 } from "react";
514
508
  import { AlertDialog, Button as Button2, Clipboard as Clipboard3, Input as Input2, useTranslation as useTranslation4 } from "@dxos/react-ui";
515
- var RECOVERY_CODE_DIALOG = `${CLIENT_PLUGIN}/RecoveryCodeDialog`;
509
+ var RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;
516
510
  var RecoveryCodeDialog = ({ code }) => {
517
511
  var _effect = _useSignals4();
518
512
  try {
519
- const { t } = useTranslation4(CLIENT_PLUGIN);
513
+ const { t } = useTranslation4(meta.id);
520
514
  const [confirmation, setConfirmation] = useState3(false);
521
515
  const handleConfirmation = useCallback4((checked) => setConfirmation(checked), []);
522
516
  return /* @__PURE__ */ React4.createElement(AlertDialog.Content, {
@@ -575,20 +569,17 @@ import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking"
575
569
  import React5 from "react";
576
570
  import { createIntent as createIntent3, useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework";
577
571
  import { useCredentials } from "@dxos/react-client/halo";
578
- import { Icon as Icon2, IconButton as IconButton2, List as List2, ListItem, useTranslation as useTranslation5, Message } from "@dxos/react-ui";
572
+ import { Icon as Icon2, IconButton as IconButton2, List as List2, ListItem, Message, useTranslation as useTranslation5 } from "@dxos/react-ui";
579
573
  import { ControlGroup as ControlGroup2, ControlItem as ControlItem3, ControlPage as ControlPage3, ControlSection as ControlSection3 } from "@dxos/react-ui-form";
580
- import { StackItem as StackItem3 } from "@dxos/react-ui-stack";
581
- var MANAGE_CREDENTIALS_DIALOG = `${CLIENT_PLUGIN}/ManageCredentialsDialog`;
574
+ var MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;
582
575
  var RecoveryCredentialsContainer = () => {
583
576
  var _effect = _useSignals5();
584
577
  try {
585
- const { t } = useTranslation5(CLIENT_PLUGIN);
578
+ const { t } = useTranslation5(meta.id);
586
579
  const { dispatchPromise: dispatch } = useIntentDispatcher3();
587
580
  const credentials = useCredentials();
588
581
  const recoveryCredentials = credentials.filter((credential) => credential.subject.assertion["@type"] === "dxos.halo.credentials.IdentityRecovery");
589
- return /* @__PURE__ */ React5.createElement(StackItem3.Content, {
590
- classNames: "block overflow-y-auto"
591
- }, /* @__PURE__ */ React5.createElement(ControlPage3, null, /* @__PURE__ */ React5.createElement(ControlSection3, {
582
+ return /* @__PURE__ */ React5.createElement(ControlPage3, null, /* @__PURE__ */ React5.createElement(ControlSection3, {
592
583
  title: t("recovery setup dialog title"),
593
584
  description: t("recovery setup dialog description")
594
585
  }, /* @__PURE__ */ React5.createElement(ControlGroup2, null, /* @__PURE__ */ React5.createElement(ControlItem3, {
@@ -623,7 +614,7 @@ var RecoveryCredentialsContainer = () => {
623
614
  }, /* @__PURE__ */ React5.createElement(ListItem.Endcap, null, /* @__PURE__ */ React5.createElement(Icon2, {
624
615
  icon: "ph--key--regular",
625
616
  size: 5
626
- })), /* @__PURE__ */ React5.createElement(ListItem.Heading, null, credential.issuanceDate.toLocaleString())))))));
617
+ })), /* @__PURE__ */ React5.createElement(ListItem.Heading, null, credential.issuanceDate.toLocaleString()))))));
627
618
  } finally {
628
619
  _effect.f();
629
620
  }
@@ -632,15 +623,15 @@ var RecoveryCredentialsContainer = () => {
632
623
  // src/components/ResetDialog.tsx
633
624
  import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
634
625
  import React6, { useCallback as useCallback5 } from "react";
635
- import { createIntent as createIntent4, LayoutAction as LayoutAction2, useIntentDispatcher as useIntentDispatcher4 } from "@dxos/app-framework";
626
+ import { LayoutAction as LayoutAction2, createIntent as createIntent4, useIntentDispatcher as useIntentDispatcher4 } from "@dxos/app-framework";
636
627
  import { useClient as useClient3 } from "@dxos/react-client";
637
628
  import { Dialog as Dialog2, useTranslation as useTranslation6 } from "@dxos/react-ui";
638
629
  import { ConfirmReset } from "@dxos/shell/react";
639
- var RESET_DIALOG = `${CLIENT_PLUGIN}/ResetDialog`;
630
+ var RESET_DIALOG = `${meta.id}/ResetDialog`;
640
631
  var ResetDialog = ({ mode, onReset }) => {
641
632
  var _effect = _useSignals6();
642
633
  try {
643
- const { t } = useTranslation6(CLIENT_PLUGIN);
634
+ const { t } = useTranslation6(meta.id);
644
635
  const { dispatchPromise: dispatch } = useIntentDispatcher4();
645
636
  const client = useClient3();
646
637
  const handleReset = useCallback5(async () => {
@@ -693,4 +684,4 @@ export {
693
684
  RESET_DIALOG,
694
685
  ResetDialog
695
686
  };
696
- //# sourceMappingURL=chunk-FBYODKEL.mjs.map
687
+ //# sourceMappingURL=chunk-H73VVAMA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DevicesContainer.tsx", "../../../src/components/JoinDialog.tsx", "../../../src/components/ProfileContainer.tsx", "../../../src/components/RecoveryCodeDialog.tsx", "../../../src/components/RecoveryCredentialsContainer.tsx", "../../../src/components/ResetDialog.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { QR } from 'react-qr-rounded';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { log } from '@dxos/log';\nimport { useClient, useMulticastObservable } from '@dxos/react-client';\nimport { type Device, useDevices } from '@dxos/react-client/halo';\nimport { type CancellableInvitationObservable, Invitation, InvitationEncoder } from '@dxos/react-client/invitations';\nimport { useNetworkStatus } from '@dxos/react-client/mesh';\nimport { Button, Clipboard, Icon, IconButton, List, useId, useTranslation } from '@dxos/react-ui';\nimport {\n ControlFrame,\n ControlFrameItem,\n ControlGroup,\n ControlItem,\n ControlPage,\n ControlSection,\n} from '@dxos/react-ui-form';\nimport { AuthCode, Centered, DeviceListItem, Emoji, Viewport } from '@dxos/shell/react';\nimport { hexToEmoji } from '@dxos/util';\n\nimport { meta } from '../meta';\nimport { ClientAction } from '../types';\n\nexport type DevicesContainerProps = {\n createInvitationUrl?: (invitationCode: string) => string;\n};\n\nexport const DevicesContainer = ({ createInvitationUrl }: DevicesContainerProps) => {\n const { t } = useTranslation('os');\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const devices = useDevices();\n const { swarm: connectionState } = useNetworkStatus();\n\n const handleResetStorage = useCallback(() => dispatch(createIntent(ClientAction.ResetStorage)), [dispatch]);\n\n const handleRecover = useCallback(\n () => dispatch(createIntent(ClientAction.ResetStorage, { mode: 'recover' })),\n [dispatch],\n );\n\n const handleJoinNewIdentity = useCallback(\n () => dispatch(createIntent(ClientAction.ResetStorage, { mode: 'join new identity' })),\n [dispatch],\n );\n\n return (\n <Clipboard.Provider>\n <ControlPage>\n <ControlSection\n title={t('devices verbose label', { ns: meta.id })}\n description={t('devices description', { ns: meta.id })}\n >\n <ControlFrame>\n <ControlFrameItem title={t('devices label', { ns: meta.id })}>\n <List>\n {devices.map((device: Device) => {\n return (\n <DeviceListItem key={device.deviceKey.toHex()} device={device} connectionState={connectionState} />\n );\n })}\n </List>\n </ControlFrameItem>\n {createInvitationUrl && (\n <ControlFrameItem title='Add device'>\n <DeviceInvitation createInvitationUrl={createInvitationUrl} />\n </ControlFrameItem>\n )}\n </ControlFrame>\n </ControlSection>\n <ControlSection\n title={t('danger zone title', { ns: meta.id })}\n description={t('danger zone description', { ns: meta.id })}\n >\n <ControlGroup>\n <ControlItem title={t('reset device label')} description={t('reset device description', { ns: meta.id })}>\n <Button variant='destructive' onClick={handleResetStorage} data-testid='devicesContainer.reset'>\n {t('reset device label')}\n </Button>\n </ControlItem>\n <ControlItem\n title={t('recover identity label')}\n description={t('recover identity description', { ns: meta.id })}\n >\n <Button variant='destructive' onClick={handleRecover} data-testid='devicesContainer.recover'>\n {t('recover identity label')}\n </Button>\n </ControlItem>\n <ControlItem\n title={t('join new identity label')}\n description={t('join new identity description', { ns: meta.id })}\n >\n <Button variant='destructive' onClick={handleJoinNewIdentity} data-testid='devicesContainer.joinExisting'>\n {t('join new identity label')}\n </Button>\n </ControlItem>\n </ControlGroup>\n </ControlSection>\n </ControlPage>\n </Clipboard.Provider>\n );\n};\n\ntype DeviceInvitationProps = {\n invitation?: CancellableInvitationObservable;\n createInvitationUrl: (invitationCode: string) => string;\n onInvitationDone: () => void;\n onInvitationCreate: () => void;\n};\n\nconst DeviceInvitation = (props: Pick<DeviceInvitationProps, 'createInvitationUrl'>) => {\n const client = useClient();\n const [invitation, setInvitation] = useState<CancellableInvitationObservable>();\n\n const onInvitationCreate = useCallback(() => {\n const invitation = client.halo.share();\n if (client.config.values.runtime?.app?.env?.DX_ENVIRONMENT !== 'production') {\n const subscription = invitation.subscribe((invitation: Invitation) => {\n const invitationCode = InvitationEncoder.encode(invitation);\n if (invitation.state === Invitation.State.CONNECTING) {\n log.info(JSON.stringify({ invitationCode, authCode: invitation.authCode }));\n subscription.unsubscribe();\n }\n });\n }\n setInvitation(invitation);\n }, [client]);\n\n const onInvitationDone = useCallback(() => {\n setInvitation(undefined);\n }, []);\n\n if (invitation) {\n return <DeviceInvitationImpl {...props} {...{ invitation, onInvitationCreate, onInvitationDone }} />;\n } else {\n return <InvitationSection {...props} {...{ onInvitationCreate, onInvitationDone }} />;\n }\n};\n\nconst DeviceInvitationImpl = ({\n invitation: invitationObservable,\n createInvitationUrl,\n onInvitationDone,\n onInvitationCreate,\n}: DeviceInvitationProps) => {\n const invitation = useMulticastObservable(invitationObservable!);\n const url = createInvitationUrl(InvitationEncoder.encode(invitation));\n\n useEffect(() => {\n if (invitation.state >= Invitation.State.SUCCESS) {\n onInvitationDone();\n }\n }, [invitation.state]);\n\n return <InvitationSection {...invitation} {...{ url, onInvitationDone, onInvitationCreate }} />;\n};\n\ntype InvitationComponentProps = Partial<\n Pick<Invitation, 'authCode' | 'invitationId'> &\n Pick<DeviceInvitationProps, 'onInvitationDone' | 'onInvitationCreate'> & {\n state: number;\n url: string;\n }\n>;\n\nconst InvitationSection = ({\n state = -1,\n authCode,\n invitationId = 'never',\n url = 'never',\n onInvitationDone = () => {},\n onInvitationCreate = () => {},\n}: InvitationComponentProps) => {\n const { t } = useTranslation(meta.id);\n const activeView =\n state < 0\n ? 'init'\n : state >= Invitation.State.CANCELLED\n ? 'complete'\n : state >= Invitation.State.READY_FOR_AUTHENTICATION && authCode\n ? 'auth-code'\n : 'qr-code';\n return activeView === 'init' ? (\n <>\n <p className='text-description mbe-2'>{t('add device description')}</p>\n <IconButton\n icon='ph--plus--regular'\n label={t('create device invitation label')}\n disabled={state >= 0}\n classNames='is-full'\n data-testid='devicesContainer.createInvitation'\n onClick={onInvitationCreate}\n />\n </>\n ) : (\n <Viewport.Root activeView={activeView}>\n <Viewport.Views>\n <Viewport.View id='init'>\n {/* This view intentionally left blank while conditionally rendering the viewport. */}\n </Viewport.View>\n <Viewport.View id='complete'>\n <InvitationComplete statusValue={state} />\n </Viewport.View>\n <Viewport.View id='auth-code'>\n <InvitationAuthCode id={invitationId} code={authCode ?? 'never'} onCancel={onInvitationDone} />\n </Viewport.View>\n <Viewport.View id='qr-code'>\n <InvitationQR id={invitationId} url={url} onCancel={onInvitationDone} />\n </Viewport.View>\n </Viewport.Views>\n </Viewport.Root>\n );\n};\n\nconst InvitationQR = ({ id, url, onCancel }: { id: string; url: string; onCancel: () => void }) => {\n const { t } = useTranslation('os');\n const qrLabel = useId('devices-container__qr-code');\n const emoji = hexToEmoji(id);\n return (\n <>\n <p className='text-description'>{t('qr code description', { ns: meta.id })}</p>\n <div role='group' className='grid grid-cols-[1fr_min-content] mlb-2 gap-2'>\n <div role='none' className='is-full aspect-square relative text-description'>\n <QR\n rounding={100}\n backgroundColor='transparent'\n color='currentColor'\n aria-labelledby={qrLabel}\n errorCorrectionLevel='Q'\n cutout={true}\n >\n {url ?? 'never'}\n </QR>\n <Centered>\n <Emoji text={emoji} />\n </Centered>\n </div>\n <span id={qrLabel} className='sr-only'>\n {t('qr label')}\n </span>\n </div>\n {/* TODO(burdon): Factor out button bar */}\n <div className='flex justify-center'>\n <div className='flex gap-2'>\n <Clipboard.Button value={url ?? 'never'} />\n <Button variant='ghost' onClick={onCancel}>\n {t('cancel label')}\n </Button>\n </div>\n </div>\n </>\n );\n};\n\nconst InvitationAuthCode = ({ id, code, onCancel }: { id: string; code: string; onCancel: () => void }) => {\n const { t } = useTranslation('os');\n const emoji = hexToEmoji(id);\n\n return (\n <>\n <p className='text-description'>{t('auth other device emoji message')}</p>\n {emoji && <Emoji text={emoji} className='mli-auto mlb-2 text-center' />}\n <p className='text-description'>{t('auth code message')}</p>\n <AuthCode code={code} large classNames='mli-auto mlb-2 text-center grow' />\n <Button variant='ghost' onClick={onCancel}>\n {t('cancel label')}\n </Button>\n </>\n );\n};\n\nconst InvitationComplete = ({ statusValue }: { statusValue: number }) => {\n return statusValue > 0 ? (\n <Icon icon='ph--check--regular' size={6} classNames='m-1.5' />\n ) : (\n <Icon icon='ph--x--regular' size={6} classNames='m-1.5' />\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { ObservabilityAction } from '@dxos/plugin-observability/types';\nimport { type InvitationResult } from '@dxos/react-client/invitations';\nimport { Dialog, useTranslation } from '@dxos/react-ui';\nimport { JoinPanel, type JoinPanelProps } from '@dxos/shell/react';\n\nimport { meta } from '../meta';\nimport { ClientAction } from '../types';\n\nexport const JOIN_DIALOG = `${meta.id}/JoinDialog`;\n\nexport const JoinDialog = (props: JoinPanelProps) => {\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const { t } = useTranslation(meta.id);\n\n const handleCancelResetStorage = useCallback(() => dispatch(createIntent(ClientAction.ShareIdentity)), [dispatch]);\n\n const handleDone = useCallback(\n async (result: InvitationResult | null) => {\n if (result?.identityKey) {\n await Promise.all([\n dispatch(createIntent(LayoutAction.UpdateDialog, { part: 'dialog', options: { state: false } })),\n dispatch(\n createIntent(ObservabilityAction.SendEvent, {\n name: props.initialDisposition === 'recover-identity' ? 'identity.recover' : 'identity.join',\n }),\n ),\n ]);\n }\n },\n [dispatch],\n );\n\n return (\n <Dialog.Content>\n <Dialog.Title classNames='sr-only'>{t('join space label', { ns: 'os' })}</Dialog.Title>\n <JoinPanel\n mode='halo-only'\n {...props}\n exitActionParent={<Dialog.Close asChild />}\n doneActionParent={<Dialog.Close asChild />}\n onCancelResetStorage={handleCancelResetStorage}\n onDone={handleDone}\n />\n </Dialog.Content>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport React, { type ChangeEvent, useCallback, useMemo, useState } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { useClient } from '@dxos/react-client';\nimport { type Identity, useIdentity } from '@dxos/react-client/halo';\nimport { ButtonGroup, Clipboard, Input, useTranslation } from '@dxos/react-ui';\nimport {\n ControlItem,\n ControlItemInput,\n ControlPage,\n ControlSection,\n Form,\n type InputComponent,\n} from '@dxos/react-ui-form';\nimport { EmojiPickerBlock, HuePicker } from '@dxos/react-ui-pickers';\nimport { hexToEmoji, hexToHue } from '@dxos/util';\n\nimport { meta } from '../meta';\n\n// TODO(thure): Factor out?\nconst getDefaultHueValue = (identity: Identity | null) => hexToHue(identity?.identityKey.toHex() ?? '0');\nconst getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');\nconst getHueValue = (identity: Identity | null) => identity?.profile?.data?.hue || getDefaultHueValue(identity);\nconst getEmojiValue = (identity: Identity | null) => identity?.profile?.data?.emoji || getDefaultEmojiValue(identity);\n\nexport const ProfileContainer = () => {\n const { t } = useTranslation(meta.id);\n const client = useClient();\n const identity = useIdentity();\n const [displayName, setDisplayNameDirectly] = useState(identity?.profile?.displayName ?? '');\n const [emoji, setEmojiDirectly] = useState<string>(getEmojiValue(identity));\n const [hue, setHueDirectly] = useState<string>(getHueValue(identity));\n\n const updateProfile = useMemo(\n () =>\n debounce(\n (profile: Partial<Profile>) =>\n client.halo.updateProfile({\n displayName: profile.displayName,\n data: {\n emoji: profile.emoji,\n hue: profile.hue,\n },\n }),\n 2_000,\n ),\n [],\n );\n\n const handleSave = useCallback(\n (profile: Profile) => {\n setDisplayNameDirectly(profile.displayName);\n setEmojiDirectly(profile.emoji);\n setHueDirectly(profile.hue);\n void updateProfile(profile);\n },\n [identity],\n );\n\n const values = useMemo(\n () => ({\n displayName,\n emoji,\n hue,\n did: identity?.did,\n }),\n [identity, displayName, emoji, hue],\n );\n\n // TODO(wittjosiah): Integrate descriptions with the form schema.\n const customElements: Partial<Record<string, InputComponent>> = useMemo(\n () => ({\n displayName: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback(\n ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),\n [onValueChange, type],\n );\n return (\n <ControlItemInput title={label} description={t('display name description')}>\n <Input.TextInput\n value={getValue()}\n onChange={handleChange}\n placeholder={t('display name input placeholder')}\n classNames='min-is-64'\n />\n </ControlItemInput>\n );\n },\n emoji: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback((nextEmoji: string) => onValueChange(type, nextEmoji), [onValueChange, type]);\n const handleEmojiReset = useCallback(\n () => onValueChange(type, getDefaultEmojiValue(identity)),\n [onValueChange, type],\n );\n return (\n <ControlItem title={label} description={t('icon description')}>\n <EmojiPickerBlock\n triggerVariant='default'\n emoji={getValue()}\n onChangeEmoji={handleChange}\n onClickClear={handleEmojiReset}\n classNames='justify-self-end'\n />\n </ControlItem>\n );\n },\n hue: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback((nextHue: string) => onValueChange(type, nextHue), [onValueChange, type]);\n const handleHueReset = useCallback(\n () => onValueChange(type, getDefaultHueValue(identity)),\n [onValueChange, type],\n );\n return (\n <ControlItem title={label} description={t('hue description')}>\n <HuePicker\n value={getValue()}\n onChange={handleChange}\n onReset={handleHueReset}\n classNames='[--hue-preview-size:1.5rem] justify-self-end'\n />\n </ControlItem>\n );\n },\n // TODO(wittjosiah): We need text input annotations for disabled and copyable.\n did: ({ label, getValue }) => {\n return (\n <ControlItemInput title={label} description={t('did description')}>\n <ButtonGroup>\n <Input.TextInput value={getValue()} disabled classNames='min-is-64' />\n <Clipboard.IconButton value={getValue() ?? ''} />\n </ButtonGroup>\n </ControlItemInput>\n );\n },\n }),\n [t],\n );\n\n return (\n <ControlPage>\n <Clipboard.Provider>\n <ControlSection title={t('profile label')} description={t('profile description')}>\n <Form\n schema={ProfileSchema}\n values={values}\n autoSave\n onSave={handleSave}\n Custom={customElements}\n classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]'\n outerSpacing={false}\n />\n </ControlSection>\n </Clipboard.Provider>\n </ControlPage>\n );\n};\n\n// TODO(wittjosiah): Integrate annotations with translations.\nconst ProfileSchema = Schema.Struct({\n displayName: Schema.String.annotations({ title: 'Display name' }),\n emoji: Schema.String.annotations({ title: 'Avatar' }),\n hue: Schema.String.annotations({ title: 'Color' }),\n did: Schema.String.annotations({ title: 'DID' }),\n});\ntype Profile = Schema.Schema.Type<typeof ProfileSchema>;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useState } from 'react';\n\nimport { AlertDialog, Button, Clipboard, Input, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '../meta';\n\nexport const RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;\n\nexport type RecoveryCodeDialogProps = {\n code: string;\n};\n\nexport const RecoveryCodeDialog = ({ code }: RecoveryCodeDialogProps) => {\n const { t } = useTranslation(meta.id);\n const [confirmation, setConfirmation] = useState(false);\n\n const handleConfirmation = useCallback((checked: boolean) => setConfirmation(checked), []);\n\n return (\n <AlertDialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <AlertDialog.Title>{t('recovery code dialog title')}</AlertDialog.Title>\n <p className='py-4'>{t('recovery code dialog description')}</p>\n <Clipboard.Provider>\n <Code code={code} />\n </Clipboard.Provider>\n <div className='flex flex-col py-4 gap-2'>\n <p>{t('recovery code dialog warning 1')}</p>\n <p>{t('recovery code dialog warning 2')}</p>\n </div>\n <div className='flex items-center gap-2 pbe-4'>\n <Input.Root>\n <Input.Checkbox\n data-testid='recoveryCode.confirm'\n checked={confirmation}\n onCheckedChange={handleConfirmation}\n />\n <Input.Label>{t('recovery code confirmation label')}</Input.Label>\n </Input.Root>\n </div>\n <div className='flex justify-end'>\n <AlertDialog.Action asChild>\n <Button data-testid='recoveryCode.continue' variant='primary' disabled={!confirmation}>\n {t('continue label')}\n </Button>\n </AlertDialog.Action>\n </div>\n </AlertDialog.Content>\n );\n};\n\nconst Code = ({ code }: { code: string }) => {\n const words = code.split(' ');\n return (\n <div className='relative p-2 border border-separator rounded group'>\n <Clipboard.IconButton value={code} classNames='absolute top-2 right-2 invisible group-hover:visible' />\n <div className='grid grid-cols-4'>\n {words.map((word, i) => (\n <div key={i} className='flex items-center p-2 gap-2'>\n <div className='w-4 text-xs text-center text-subdued'>{i + 1}</div>\n <div className='text-sm'>{word}</div>\n </div>\n ))}\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { useCredentials } from '@dxos/react-client/halo';\nimport { Icon, IconButton, List, ListItem, Message, useTranslation } from '@dxos/react-ui';\nimport { ControlGroup, ControlItem, ControlPage, ControlSection } from '@dxos/react-ui-form';\n\nimport { meta } from '../meta';\nimport { ClientAction } from '../types';\n\nexport const MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;\n\nexport const RecoveryCredentialsContainer = () => {\n const { t } = useTranslation(meta.id);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const credentials = useCredentials();\n const recoveryCredentials = credentials.filter(\n (credential) => credential.subject.assertion['@type'] === 'dxos.halo.credentials.IdentityRecovery',\n );\n\n return (\n <ControlPage>\n <ControlSection title={t('recovery setup dialog title')} description={t('recovery setup dialog description')}>\n <ControlGroup>\n <ControlItem title={t('create passkey label')} description={t('create passkey description')}>\n <IconButton\n label={t('create passkey label')}\n icon='ph--key--duotone'\n variant='primary'\n size={5}\n onClick={() => dispatch(createIntent(ClientAction.CreatePasskey))}\n />\n </ControlItem>\n <ControlItem title={t('create recovery code label')} description={t('create recovery code description')}>\n <IconButton\n label={t('create recovery code label')}\n icon='ph--receipt--duotone'\n variant='default'\n size={5}\n onClick={() => dispatch(createIntent(ClientAction.CreateRecoveryCode))}\n />\n </ControlItem>\n </ControlGroup>\n </ControlSection>\n <ControlSection title={t('credentials list label')}>\n {recoveryCredentials.length < 1 ? (\n <Message.Root valence='error' classNames='container-max-width'>\n <Message.Title icon='ph--shield-warning--duotone'>{t('no credentials title')}</Message.Title>\n <Message.Content>{t('no credentials message')}</Message.Content>\n </Message.Root>\n ) : (\n <List classNames='container-max-width pli-2'>\n {recoveryCredentials.map((credential) => (\n <ListItem.Root key={credential.id?.toHex()}>\n <ListItem.Endcap>\n <Icon icon='ph--key--regular' size={5} />\n </ListItem.Endcap>\n <ListItem.Heading>{credential.issuanceDate.toLocaleString()}</ListItem.Heading>\n </ListItem.Root>\n ))}\n </List>\n )}\n </ControlSection>\n </ControlPage>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { useCallback } from 'react';\n\nimport { LayoutAction, createIntent, useIntentDispatcher } from '@dxos/app-framework';\nimport { useClient } from '@dxos/react-client';\nimport { Dialog, useTranslation } from '@dxos/react-ui';\nimport { ConfirmReset, type ConfirmResetProps } from '@dxos/shell/react';\n\nimport { meta } from '../meta';\nimport { type ClientPluginOptions } from '../types';\n\nexport const RESET_DIALOG = `${meta.id}/ResetDialog`;\n\nexport type ResetDialogProps = Pick<ConfirmResetProps, 'mode'> & Pick<ClientPluginOptions, 'onReset'>;\n\nexport const ResetDialog = ({ mode, onReset }: ResetDialogProps) => {\n const { t } = useTranslation(meta.id);\n const { dispatchPromise: dispatch } = useIntentDispatcher();\n const client = useClient();\n\n const handleReset = useCallback(async () => {\n await client.reset();\n const target =\n mode === 'join new identity' ? 'deviceInvitation' : mode === 'recover' ? 'recoverIdentity' : undefined;\n await onReset?.({ target });\n }, [dispatch, client, mode, onReset]);\n\n const handleCancel = useCallback(() => {\n void dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n options: { state: false },\n }),\n );\n }, [dispatch]);\n\n // TODO(wittjosiah): Add the sr-only translations.\n // TODO(wittjosiah): Add missing descriptions to other dialogs.\n return (\n <Dialog.Content classNames='bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden'>\n <Dialog.Title classNames='sr-only'>{t('reset dialog title')}</Dialog.Title>\n <Dialog.Description classNames='sr-only'>{t('reset dialog description')}</Dialog.Description>\n <ConfirmReset active mode={mode} onConfirm={handleReset} onCancel={handleCancel} />\n </Dialog.Content>\n );\n};\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,OAAOA,SAASC,aAAaC,WAAWC,gBAAgB;AACxD,SAASC,UAAU;AAEnB,SAASC,cAAcC,2BAA2B;AAClD,SAASC,WAAW;AACpB,SAASC,WAAWC,8BAA8B;AAClD,SAAsBC,kBAAkB;AACxC,SAA+CC,YAAYC,yBAAyB;AACpF,SAASC,wBAAwB;AACjC,SAASC,QAAQC,WAAWC,MAAMC,YAAYC,MAAMC,OAAOC,sBAAsB;AACjF,SACEC,cACAC,kBACAC,cACAC,aACAC,aACAC,sBACK;AACP,SAASC,UAAUC,UAAUC,gBAAgBC,OAAOC,gBAAgB;AACpE,SAASC,kBAAkB;;AASpB,IAAMC,mBAAmB,CAAC,EAAEC,oBAAmB,MAAyB;;;AAC7E,UAAM,EAAEC,EAAC,IAAKC,eAAe,IAAA;AAC7B,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,oBAAAA;AACtC,UAAMC,UAAUC,WAAAA;AAChB,UAAM,EAAEC,OAAOC,gBAAe,IAAKC,iBAAAA;AAEnC,UAAMC,qBAAqBC,YAAY,MAAMR,SAASS,aAAaC,aAAaC,YAAY,CAAA,GAAI;MAACX;KAAS;AAE1G,UAAMY,gBAAgBJ,YACpB,MAAMR,SAASS,aAAaC,aAAaC,cAAc;MAAEE,MAAM;IAAU,CAAA,CAAA,GACzE;MAACb;KAAS;AAGZ,UAAMc,wBAAwBN,YAC5B,MAAMR,SAASS,aAAaC,aAAaC,cAAc;MAAEE,MAAM;IAAoB,CAAA,CAAA,GACnF;MAACb;KAAS;AAGZ,WACE,sBAAA,cAACe,UAAUC,UAAQ,MACjB,sBAAA,cAACC,aAAAA,MACC,sBAAA,cAACC,gBAAAA;MACCC,OAAOtB,EAAE,yBAAyB;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;MAChDC,aAAa1B,EAAE,uBAAuB;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;OAEpD,sBAAA,cAACE,cAAAA,MACC,sBAAA,cAACC,kBAAAA;MAAiBN,OAAOtB,EAAE,iBAAiB;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;OACxD,sBAAA,cAACI,MAAAA,MACExB,QAAQyB,IAAI,CAACC,WAAAA;AACZ,aACE,sBAAA,cAACC,gBAAAA;QAAeC,KAAKF,OAAOG,UAAUC,MAAK;QAAIJ;QAAgBvB;;IAEnE,CAAA,CAAA,CAAA,GAGHT,uBACC,sBAAA,cAAC6B,kBAAAA;MAAiBN,OAAM;OACtB,sBAAA,cAACc,kBAAAA;MAAiBrC;WAK1B,sBAAA,cAACsB,gBAAAA;MACCC,OAAOtB,EAAE,qBAAqB;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;MAC5CC,aAAa1B,EAAE,2BAA2B;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;OAExD,sBAAA,cAACY,cAAAA,MACC,sBAAA,cAACC,aAAAA;MAAYhB,OAAOtB,EAAE,oBAAA;MAAuB0B,aAAa1B,EAAE,4BAA4B;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;OACpG,sBAAA,cAACc,QAAAA;MAAOC,SAAQ;MAAcC,SAAS/B;MAAoBgC,eAAY;OACpE1C,EAAE,oBAAA,CAAA,CAAA,GAGP,sBAAA,cAACsC,aAAAA;MACChB,OAAOtB,EAAE,wBAAA;MACT0B,aAAa1B,EAAE,gCAAgC;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;OAE7D,sBAAA,cAACc,QAAAA;MAAOC,SAAQ;MAAcC,SAAS1B;MAAe2B,eAAY;OAC/D1C,EAAE,wBAAA,CAAA,CAAA,GAGP,sBAAA,cAACsC,aAAAA;MACChB,OAAOtB,EAAE,yBAAA;MACT0B,aAAa1B,EAAE,iCAAiC;QAAEuB,IAAIC,KAAKC;MAAG,CAAA;OAE9D,sBAAA,cAACc,QAAAA;MAAOC,SAAQ;MAAcC,SAASxB;MAAuByB,eAAY;OACvE1C,EAAE,yBAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;AAQnB;AASA,IAAMoC,mBAAmB,CAACO,UAAAA;;;AACxB,UAAMC,SAASC,UAAAA;AACf,UAAM,CAACC,YAAYC,aAAAA,IAAiBC,SAAAA;AAEpC,UAAMC,qBAAqBtC,YAAY,MAAA;AACrC,YAAMmC,cAAaF,OAAOM,KAAKC,MAAK;AACpC,UAAIP,OAAOQ,OAAOC,OAAOC,SAASC,KAAKC,KAAKC,mBAAmB,cAAc;AAC3E,cAAMC,eAAeZ,YAAWa,UAAU,CAACb,gBAAAA;AACzC,gBAAMc,iBAAiBC,kBAAkBC,OAAOhB,WAAAA;AAChD,cAAIA,YAAWiB,UAAUC,WAAWC,MAAMC,YAAY;AACpDC,gBAAIC,KAAKC,KAAKC,UAAU;cAAEV;cAAgBW,UAAUzB,YAAWyB;YAAS,CAAA,GAAA,QAAA;;;;;;AACxEb,yBAAac,YAAW;UAC1B;QACF,CAAA;MACF;AACAzB,oBAAcD,WAAAA;IAChB,GAAG;MAACF;KAAO;AAEX,UAAM6B,mBAAmB9D,YAAY,MAAA;AACnCoC,oBAAc2B,MAAAA;IAChB,GAAG,CAAA,CAAE;AAEL,QAAI5B,YAAY;AACd,aAAO,sBAAA,cAAC6B,sBAAAA;QAAsB,GAAGhC;QAAaG;QAAYG;QAAoBwB;;IAChF,OAAO;AACL,aAAO,sBAAA,cAACG,mBAAAA;QAAmB,GAAGjC;QAAaM;QAAoBwB;;IACjE;;;;AACF;AAEA,IAAME,uBAAuB,CAAC,EAC5B7B,YAAY+B,sBACZ9E,qBACA0E,kBACAxB,mBAAkB,MACI;;;AACtB,UAAMH,aAAagC,uBAAuBD,oBAAAA;AAC1C,UAAME,MAAMhF,oBAAoB8D,kBAAkBC,OAAOhB,UAAAA,CAAAA;AAEzDkC,cAAU,MAAA;AACR,UAAIlC,WAAWiB,SAASC,WAAWC,MAAMgB,SAAS;AAChDR,yBAAAA;MACF;IACF,GAAG;MAAC3B,WAAWiB;KAAM;AAErB,WAAO,sBAAA,cAACa,mBAAAA;MAAmB,GAAG9B;MAAkBiC;MAAKN;MAAkBxB;;;;;AACzE;AAUA,IAAM2B,oBAAoB,CAAC,EACzBb,QAAQ,IACRQ,UACAW,eAAe,SACfH,MAAM,SACNN,mBAAmB,MAAA;AAAO,GAC1BxB,qBAAqB,MAAA;AAAO,EAAC,MACJ;;;AACzB,UAAM,EAAEjD,EAAC,IAAKC,eAAeuB,KAAKC,EAAE;AACpC,UAAM0D,aACJpB,QAAQ,IACJ,SACAA,SAASC,WAAWC,MAAMmB,YACxB,aACArB,SAASC,WAAWC,MAAMoB,4BAA4Bd,WACpD,cACA;AACV,WAAOY,eAAe,SACpB,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAACG,KAAAA;MAAEC,WAAU;OAA0BvF,EAAE,wBAAA,CAAA,GACzC,sBAAA,cAACwF,YAAAA;MACCC,MAAK;MACLC,OAAO1F,EAAE,gCAAA;MACT2F,UAAU5B,SAAS;MACnB6B,YAAW;MACXlD,eAAY;MACZD,SAASQ;UAIb,sBAAA,cAAC4C,SAASC,MAAI;MAACX;OACb,sBAAA,cAACU,SAASE,OAAK,MACb,sBAAA,cAACF,SAASG,MAAI;MAACvE,IAAG;QAGlB,sBAAA,cAACoE,SAASG,MAAI;MAACvE,IAAG;OAChB,sBAAA,cAACwE,oBAAAA;MAAmBC,aAAanC;SAEnC,sBAAA,cAAC8B,SAASG,MAAI;MAACvE,IAAG;OAChB,sBAAA,cAAC0E,oBAAAA;MAAmB1E,IAAIyD;MAAckB,MAAM7B,YAAY;MAAS8B,UAAU5B;SAE7E,sBAAA,cAACoB,SAASG,MAAI;MAACvE,IAAG;OAChB,sBAAA,cAAC6E,cAAAA;MAAa7E,IAAIyD;MAAcH;MAAUsB,UAAU5B;;;;;AAK9D;AAEA,IAAM6B,eAAe,CAAC,EAAE7E,IAAIsD,KAAKsB,SAAQ,MAAqD;;;AAC5F,UAAM,EAAErG,EAAC,IAAKC,eAAe,IAAA;AAC7B,UAAMsG,UAAUC,MAAM,4BAAA;AACtB,UAAMC,QAAQC,WAAWjF,EAAAA;AACzB,WACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAAC6D,KAAAA;MAAEC,WAAU;OAAoBvF,EAAE,uBAAuB;MAAEuB,IAAIC,KAAKC;IAAG,CAAA,CAAA,GACxE,sBAAA,cAACkF,OAAAA;MAAIC,MAAK;MAAQrB,WAAU;OAC1B,sBAAA,cAACoB,OAAAA;MAAIC,MAAK;MAAOrB,WAAU;OACzB,sBAAA,cAACsB,IAAAA;MACCC,UAAU;MACVC,iBAAgB;MAChBC,OAAM;MACNC,mBAAiBV;MACjBW,sBAAqB;MACrBC,QAAQ;OAEPpC,OAAO,OAAA,GAEV,sBAAA,cAACqC,UAAAA,MACC,sBAAA,cAACC,OAAAA;MAAMC,MAAMb;UAGjB,sBAAA,cAACc,QAAAA;MAAK9F,IAAI8E;MAAShB,WAAU;OAC1BvF,EAAE,UAAA,CAAA,CAAA,GAIP,sBAAA,cAAC2G,OAAAA;MAAIpB,WAAU;OACb,sBAAA,cAACoB,OAAAA;MAAIpB,WAAU;OACb,sBAAA,cAACrE,UAAUqB,QAAM;MAACiF,OAAOzC,OAAO;QAChC,sBAAA,cAACxC,QAAAA;MAAOC,SAAQ;MAAQC,SAAS4D;OAC9BrG,EAAE,cAAA,CAAA,CAAA,CAAA,CAAA;;;;AAMf;AAEA,IAAMmG,qBAAqB,CAAC,EAAE1E,IAAI2E,MAAMC,SAAQ,MAAsD;;;AACpG,UAAM,EAAErG,EAAC,IAAKC,eAAe,IAAA;AAC7B,UAAMwG,QAAQC,WAAWjF,EAAAA;AAEzB,WACE,sBAAA,cAAA,MAAA,UAAA,MACE,sBAAA,cAAC6D,KAAAA;MAAEC,WAAU;OAAoBvF,EAAE,iCAAA,CAAA,GAClCyG,SAAS,sBAAA,cAACY,OAAAA;MAAMC,MAAMb;MAAOlB,WAAU;QACxC,sBAAA,cAACD,KAAAA;MAAEC,WAAU;OAAoBvF,EAAE,mBAAA,CAAA,GACnC,sBAAA,cAACyH,UAAAA;MAASrB;MAAYsB,OAAAA;MAAM9B,YAAW;QACvC,sBAAA,cAACrD,QAAAA;MAAOC,SAAQ;MAAQC,SAAS4D;OAC9BrG,EAAE,cAAA,CAAA,CAAA;;;;AAIX;AAEA,IAAMiG,qBAAqB,CAAC,EAAEC,YAAW,MAA2B;;;AAClE,WAAOA,cAAc,IACnB,sBAAA,cAACyB,MAAAA;MAAKlC,MAAK;MAAqBmC,MAAM;MAAGhC,YAAW;SAEpD,sBAAA,cAAC+B,MAAAA;MAAKlC,MAAK;MAAiBmC,MAAM;MAAGhC,YAAW;;;;;AAEpD;;;;ACrRA,OAAOiC,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,cAAcC,gBAAAA,eAAcC,uBAAAA,4BAA2B;AAChE,SAASC,2BAA2B;AAEpC,SAASC,QAAQC,kBAAAA,uBAAsB;AACvC,SAASC,iBAAsC;AAKxC,IAAMC,cAAc,GAAGC,KAAKC,EAAE;AAE9B,IAAMC,aAAa,CAACC,UAAAA;;;AACzB,UAAM,EAAEC,iBAAiBC,SAAQ,IAAKC,qBAAAA;AACtC,UAAM,EAAEC,EAAC,IAAKC,gBAAeR,KAAKC,EAAE;AAEpC,UAAMQ,2BAA2BC,aAAY,MAAML,SAASM,cAAaC,aAAaC,aAAa,CAAA,GAAI;MAACR;KAAS;AAEjH,UAAMS,aAAaJ,aACjB,OAAOK,WAAAA;AACL,UAAIA,QAAQC,aAAa;AACvB,cAAMC,QAAQC,IAAI;UAChBb,SAASM,cAAaQ,aAAaC,cAAc;YAAEC,MAAM;YAAUC,SAAS;cAAEC,OAAO;YAAM;UAAE,CAAA,CAAA;UAC7FlB,SACEM,cAAaa,oBAAoBC,WAAW;YAC1CC,MAAMvB,MAAMwB,uBAAuB,qBAAqB,qBAAqB;UAC/E,CAAA,CAAA;SAEH;MACH;IACF,GACA;MAACtB;KAAS;AAGZ,WACE,gBAAAuB,OAAA,cAACC,OAAOC,SAAO,MACb,gBAAAF,OAAA,cAACC,OAAOE,OAAK;MAACC,YAAW;OAAWzB,EAAE,oBAAoB;MAAE0B,IAAI;IAAK,CAAA,CAAA,GACrE,gBAAAL,OAAA,cAACM,WAAAA;MACCC,MAAK;MACJ,GAAGhC;MACJiC,kBAAkB,gBAAAR,OAAA,cAACC,OAAOQ,OAAK;QAACC,SAAAA;;MAChCC,kBAAkB,gBAAAX,OAAA,cAACC,OAAOQ,OAAK;QAACC,SAAAA;;MAChCE,sBAAsB/B;MACtBgC,QAAQ3B;;;;;AAIhB;;;;AChDA,YAAY4B,YAAY;AACxB,OAAOC,UAA2BC,eAAAA,cAAaC,SAASC,YAAAA,iBAAgB;AAExE,SAASC,gBAAgB;AACzB,SAASC,aAAAA,kBAAiB;AAC1B,SAAwBC,mBAAmB;AAC3C,SAASC,aAAaC,aAAAA,YAAWC,OAAOC,kBAAAA,uBAAsB;AAC9D,SACEC,eAAAA,cACAC,kBACAC,eAAAA,cACAC,kBAAAA,iBACAC,YAEK;AACP,SAASC,kBAAkBC,iBAAiB;AAC5C,SAASC,cAAAA,aAAYC,gBAAgB;AAKrC,IAAMC,qBAAqB,CAACC,aAA8BC,SAASD,UAAUE,YAAYC,MAAAA,KAAW,GAAA;AACpG,IAAMC,uBAAuB,CAACJ,aAA8BK,YAAWL,UAAUE,YAAYC,MAAAA,KAAW,GAAA;AACxG,IAAMG,cAAc,CAACN,aAA8BA,UAAUO,SAASC,MAAMC,OAAOV,mBAAmBC,QAAAA;AACtG,IAAMU,gBAAgB,CAACV,aAA8BA,UAAUO,SAASC,MAAMG,SAASP,qBAAqBJ,QAAAA;AAErG,IAAMY,mBAAmB,MAAA;;;AAC9B,UAAM,EAAEC,EAAC,IAAKC,gBAAeC,KAAKC,EAAE;AACpC,UAAMC,SAASC,WAAAA;AACf,UAAMlB,WAAWmB,YAAAA;AACjB,UAAM,CAACC,aAAaC,sBAAAA,IAA0BC,UAAStB,UAAUO,SAASa,eAAe,EAAA;AACzF,UAAM,CAACT,OAAOY,gBAAAA,IAAoBD,UAAiBZ,cAAcV,QAAAA,CAAAA;AACjE,UAAM,CAACS,KAAKe,cAAAA,IAAkBF,UAAiBhB,YAAYN,QAAAA,CAAAA;AAE3D,UAAMyB,gBAAgBC,QACpB,MACEC,SACE,CAACpB,YACCU,OAAOW,KAAKH,cAAc;MACxBL,aAAab,QAAQa;MACrBZ,MAAM;QACJG,OAAOJ,QAAQI;QACfF,KAAKF,QAAQE;MACf;IACF,CAAA,GACF,GAAA,GAEJ,CAAA,CAAE;AAGJ,UAAMoB,aAAaC,aACjB,CAACvB,YAAAA;AACCc,6BAAuBd,QAAQa,WAAW;AAC1CG,uBAAiBhB,QAAQI,KAAK;AAC9Ba,qBAAejB,QAAQE,GAAG;AAC1B,WAAKgB,cAAclB,OAAAA;IACrB,GACA;MAACP;KAAS;AAGZ,UAAM+B,SAASL,QACb,OAAO;MACLN;MACAT;MACAF;MACAuB,KAAKhC,UAAUgC;IACjB,IACA;MAAChC;MAAUoB;MAAaT;MAAOF;KAAI;AAIrC,UAAMwB,iBAA0DP,QAC9D,OAAO;MACLN,aAAa,CAAC,EAAEc,MAAMC,OAAOC,UAAUC,cAAa,MAAE;AACpD,cAAMC,eAAeR,aACnB,CAAC,EAAES,QAAQ,EAAEC,MAAK,EAAE,MAAsCH,cAAcH,MAAMM,KAAAA,GAC9E;UAACH;UAAeH;SAAK;AAEvB,eACE,gBAAAO,OAAA,cAACC,kBAAAA;UAAiBC,OAAOR;UAAOS,aAAa/B,EAAE,0BAAA;WAC7C,gBAAA4B,OAAA,cAACI,MAAMC,WAAS;UACdN,OAAOJ,SAAAA;UACPW,UAAUT;UACVU,aAAanC,EAAE,gCAAA;UACfoC,YAAW;;MAInB;MACAtC,OAAO,CAAC,EAAEuB,MAAMC,OAAOC,UAAUC,cAAa,MAAE;AAC9C,cAAMC,eAAeR,aAAY,CAACoB,cAAsBb,cAAcH,MAAMgB,SAAAA,GAAY;UAACb;UAAeH;SAAK;AAC7G,cAAMiB,mBAAmBrB,aACvB,MAAMO,cAAcH,MAAM9B,qBAAqBJ,QAAAA,CAAAA,GAC/C;UAACqC;UAAeH;SAAK;AAEvB,eACE,gBAAAO,OAAA,cAACW,cAAAA;UAAYT,OAAOR;UAAOS,aAAa/B,EAAE,kBAAA;WACxC,gBAAA4B,OAAA,cAACY,kBAAAA;UACCC,gBAAe;UACf3C,OAAOyB,SAAAA;UACPmB,eAAejB;UACfkB,cAAcL;UACdF,YAAW;;MAInB;MACAxC,KAAK,CAAC,EAAEyB,MAAMC,OAAOC,UAAUC,cAAa,MAAE;AAC5C,cAAMC,eAAeR,aAAY,CAAC2B,YAAoBpB,cAAcH,MAAMuB,OAAAA,GAAU;UAACpB;UAAeH;SAAK;AACzG,cAAMwB,iBAAiB5B,aACrB,MAAMO,cAAcH,MAAMnC,mBAAmBC,QAAAA,CAAAA,GAC7C;UAACqC;UAAeH;SAAK;AAEvB,eACE,gBAAAO,OAAA,cAACW,cAAAA;UAAYT,OAAOR;UAAOS,aAAa/B,EAAE,iBAAA;WACxC,gBAAA4B,OAAA,cAACkB,WAAAA;UACCnB,OAAOJ,SAAAA;UACPW,UAAUT;UACVsB,SAASF;UACTT,YAAW;;MAInB;;MAEAjB,KAAK,CAAC,EAAEG,OAAOC,SAAQ,MAAE;AACvB,eACE,gBAAAK,OAAA,cAACC,kBAAAA;UAAiBC,OAAOR;UAAOS,aAAa/B,EAAE,iBAAA;WAC7C,gBAAA4B,OAAA,cAACoB,aAAAA,MACC,gBAAApB,OAAA,cAACI,MAAMC,WAAS;UAACN,OAAOJ,SAAAA;UAAY0B,UAAAA;UAASb,YAAW;YACxD,gBAAAR,OAAA,cAACsB,WAAUC,YAAU;UAACxB,OAAOJ,SAAAA,KAAc;;MAInD;IACF,IACA;MAACvB;KAAE;AAGL,WACE,gBAAA4B,OAAA,cAACwB,cAAAA,MACC,gBAAAxB,OAAA,cAACsB,WAAUG,UAAQ,MACjB,gBAAAzB,OAAA,cAAC0B,iBAAAA;MAAexB,OAAO9B,EAAE,eAAA;MAAkB+B,aAAa/B,EAAE,qBAAA;OACxD,gBAAA4B,OAAA,cAAC2B,MAAAA;MACCC,QAAQC;MACRvC;MACAwC,UAAAA;MACAC,QAAQ3C;MACR4C,QAAQxC;MACRgB,YAAW;MACXyB,cAAc;;;;;AAM1B;AAGA,IAAMJ,gBAAuBK,cAAO;EAClCvD,aAAoBwD,cAAOC,YAAY;IAAElC,OAAO;EAAe,CAAA;EAC/DhC,OAAciE,cAAOC,YAAY;IAAElC,OAAO;EAAS,CAAA;EACnDlC,KAAYmE,cAAOC,YAAY;IAAElC,OAAO;EAAQ,CAAA;EAChDX,KAAY4C,cAAOC,YAAY;IAAElC,OAAO;EAAM,CAAA;AAChD,CAAA;;;;ACpKA,OAAOmC,UAASC,eAAAA,cAAaC,YAAAA,iBAAgB;AAE7C,SAASC,aAAaC,UAAAA,SAAQC,aAAAA,YAAWC,SAAAA,QAAOC,kBAAAA,uBAAsB;AAI/D,IAAMC,uBAAuB,GAAGC,KAAKC,EAAE;AAMvC,IAAMC,qBAAqB,CAAC,EAAEC,KAAI,MAA2B;;;AAClE,UAAM,EAAEC,EAAC,IAAKC,gBAAeL,KAAKC,EAAE;AACpC,UAAM,CAACK,cAAcC,eAAAA,IAAmBC,UAAS,KAAA;AAEjD,UAAMC,qBAAqBC,aAAY,CAACC,YAAqBJ,gBAAgBI,OAAAA,GAAU,CAAA,CAAE;AAEzF,WACE,gBAAAC,OAAA,cAACC,YAAYC,SAAO;MAACC,YAAW;OAC9B,gBAAAH,OAAA,cAACC,YAAYG,OAAK,MAAEZ,EAAE,4BAAA,CAAA,GACtB,gBAAAQ,OAAA,cAACK,KAAAA;MAAEC,WAAU;OAAQd,EAAE,kCAAA,CAAA,GACvB,gBAAAQ,OAAA,cAACO,WAAUC,UAAQ,MACjB,gBAAAR,OAAA,cAACS,MAAAA;MAAKlB;SAER,gBAAAS,OAAA,cAACU,OAAAA;MAAIJ,WAAU;OACb,gBAAAN,OAAA,cAACK,KAAAA,MAAGb,EAAE,gCAAA,CAAA,GACN,gBAAAQ,OAAA,cAACK,KAAAA,MAAGb,EAAE,gCAAA,CAAA,CAAA,GAER,gBAAAQ,OAAA,cAACU,OAAAA;MAAIJ,WAAU;OACb,gBAAAN,OAAA,cAACW,OAAMC,MAAI,MACT,gBAAAZ,OAAA,cAACW,OAAME,UAAQ;MACbC,eAAY;MACZf,SAASL;MACTqB,iBAAiBlB;QAEnB,gBAAAG,OAAA,cAACW,OAAMK,OAAK,MAAExB,EAAE,kCAAA,CAAA,CAAA,CAAA,GAGpB,gBAAAQ,OAAA,cAACU,OAAAA;MAAIJ,WAAU;OACb,gBAAAN,OAAA,cAACC,YAAYgB,QAAM;MAACC,SAAAA;OAClB,gBAAAlB,OAAA,cAACmB,SAAAA;MAAOL,eAAY;MAAwBM,SAAQ;MAAUC,UAAU,CAAC3B;OACtEF,EAAE,gBAAA,CAAA,CAAA,CAAA,CAAA;;;;AAMf;AAEA,IAAMiB,OAAO,CAAC,EAAElB,KAAI,MAAoB;;;AACtC,UAAM+B,QAAQ/B,KAAKgC,MAAM,GAAA;AACzB,WACE,gBAAAvB,OAAA,cAACU,OAAAA;MAAIJ,WAAU;OACb,gBAAAN,OAAA,cAACO,WAAUiB,YAAU;MAACC,OAAOlC;MAAMY,YAAW;QAC9C,gBAAAH,OAAA,cAACU,OAAAA;MAAIJ,WAAU;OACZgB,MAAMI,IAAI,CAACC,MAAMC,MAChB,gBAAA5B,OAAA,cAACU,OAAAA;MAAImB,KAAKD;MAAGtB,WAAU;OACrB,gBAAAN,OAAA,cAACU,OAAAA;MAAIJ,WAAU;OAAwCsB,IAAI,CAAA,GAC3D,gBAAA5B,OAAA,cAACU,OAAAA;MAAIJ,WAAU;OAAWqB,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA;;;;AAMtC;;;;ACjEA,OAAOG,YAAW;AAElB,SAASC,gBAAAA,eAAcC,uBAAAA,4BAA2B;AAClD,SAASC,sBAAsB;AAC/B,SAASC,QAAAA,OAAMC,cAAAA,aAAYC,QAAAA,OAAMC,UAAUC,SAASC,kBAAAA,uBAAsB;AAC1E,SAASC,gBAAAA,eAAcC,eAAAA,cAAaC,eAAAA,cAAaC,kBAAAA,uBAAsB;AAKhE,IAAMC,4BAA4B,GAAGC,KAAKC,EAAE;AAE5C,IAAMC,+BAA+B,MAAA;;;AAC1C,UAAM,EAAEC,EAAC,IAAKC,gBAAeJ,KAAKC,EAAE;AACpC,UAAM,EAAEI,iBAAiBC,SAAQ,IAAKC,qBAAAA;AACtC,UAAMC,cAAcC,eAAAA;AACpB,UAAMC,sBAAsBF,YAAYG,OACtC,CAACC,eAAeA,WAAWC,QAAQC,UAAU,OAAA,MAAa,wCAAA;AAG5D,WACE,gBAAAC,OAAA,cAACC,cAAAA,MACC,gBAAAD,OAAA,cAACE,iBAAAA;MAAeC,OAAOf,EAAE,6BAAA;MAAgCgB,aAAahB,EAAE,mCAAA;OACtE,gBAAAY,OAAA,cAACK,eAAAA,MACC,gBAAAL,OAAA,cAACM,cAAAA;MAAYH,OAAOf,EAAE,sBAAA;MAAyBgB,aAAahB,EAAE,4BAAA;OAC5D,gBAAAY,OAAA,cAACO,aAAAA;MACCC,OAAOpB,EAAE,sBAAA;MACTqB,MAAK;MACLC,SAAQ;MACRC,MAAM;MACNC,SAAS,MAAMrB,SAASsB,cAAaC,aAAaC,aAAa,CAAA;SAGnE,gBAAAf,OAAA,cAACM,cAAAA;MAAYH,OAAOf,EAAE,4BAAA;MAA+BgB,aAAahB,EAAE,kCAAA;OAClE,gBAAAY,OAAA,cAACO,aAAAA;MACCC,OAAOpB,EAAE,4BAAA;MACTqB,MAAK;MACLC,SAAQ;MACRC,MAAM;MACNC,SAAS,MAAMrB,SAASsB,cAAaC,aAAaE,kBAAkB,CAAA;WAK5E,gBAAAhB,OAAA,cAACE,iBAAAA;MAAeC,OAAOf,EAAE,wBAAA;OACtBO,oBAAoBsB,SAAS,IAC5B,gBAAAjB,OAAA,cAACkB,QAAQC,MAAI;MAACC,SAAQ;MAAQC,YAAW;OACvC,gBAAArB,OAAA,cAACkB,QAAQI,OAAK;MAACb,MAAK;OAA+BrB,EAAE,sBAAA,CAAA,GACrD,gBAAAY,OAAA,cAACkB,QAAQK,SAAO,MAAEnC,EAAE,wBAAA,CAAA,CAAA,IAGtB,gBAAAY,OAAA,cAACwB,OAAAA;MAAKH,YAAW;OACd1B,oBAAoB8B,IAAI,CAAC5B,eACxB,gBAAAG,OAAA,cAAC0B,SAASP,MAAI;MAACQ,KAAK9B,WAAWX,IAAI0C,MAAAA;OACjC,gBAAA5B,OAAA,cAAC0B,SAASG,QAAM,MACd,gBAAA7B,OAAA,cAAC8B,OAAAA;MAAKrB,MAAK;MAAmBE,MAAM;SAEtC,gBAAAX,OAAA,cAAC0B,SAASK,SAAO,MAAElC,WAAWmC,aAAaC,eAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;;;;AAQzE;;;;ACjEA,OAAOC,UAASC,eAAAA,oBAAmB;AAEnC,SAASC,gBAAAA,eAAcC,gBAAAA,eAAcC,uBAAAA,4BAA2B;AAChE,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,UAAAA,SAAQC,kBAAAA,uBAAsB;AACvC,SAASC,oBAA4C;AAK9C,IAAMC,eAAe,GAAGC,KAAKC,EAAE;AAI/B,IAAMC,cAAc,CAAC,EAAEC,MAAMC,QAAO,MAAoB;;;AAC7D,UAAM,EAAEC,EAAC,IAAKC,gBAAeN,KAAKC,EAAE;AACpC,UAAM,EAAEM,iBAAiBC,SAAQ,IAAKC,qBAAAA;AACtC,UAAMC,SAASC,WAAAA;AAEf,UAAMC,cAAcC,aAAY,YAAA;AAC9B,YAAMH,OAAOI,MAAK;AAClB,YAAMC,SACJZ,SAAS,sBAAsB,qBAAqBA,SAAS,YAAY,oBAAoBa;AAC/F,YAAMZ,UAAU;QAAEW;MAAO,CAAA;IAC3B,GAAG;MAACP;MAAUE;MAAQP;MAAMC;KAAQ;AAEpC,UAAMa,eAAeJ,aAAY,MAAA;AAC/B,WAAKL,SACHU,cAAaC,cAAaC,cAAc;QACtCC,MAAM;QACNC,SAAS;UAAEC,OAAO;QAAM;MAC1B,CAAA,CAAA;IAEJ,GAAG;MAACf;KAAS;AAIb,WACE,gBAAAgB,OAAA,cAACC,QAAOC,SAAO;MAACC,YAAW;OACzB,gBAAAH,OAAA,cAACC,QAAOG,OAAK;MAACD,YAAW;OAAWtB,EAAE,oBAAA,CAAA,GACtC,gBAAAmB,OAAA,cAACC,QAAOI,aAAW;MAACF,YAAW;OAAWtB,EAAE,0BAAA,CAAA,GAC5C,gBAAAmB,OAAA,cAACM,cAAAA;MAAaC,QAAAA;MAAO5B;MAAY6B,WAAWpB;MAAaqB,UAAUhB;;;;;AAGzE;",
6
+ "names": ["React", "useCallback", "useEffect", "useState", "QR", "createIntent", "useIntentDispatcher", "log", "useClient", "useMulticastObservable", "useDevices", "Invitation", "InvitationEncoder", "useNetworkStatus", "Button", "Clipboard", "Icon", "IconButton", "List", "useId", "useTranslation", "ControlFrame", "ControlFrameItem", "ControlGroup", "ControlItem", "ControlPage", "ControlSection", "AuthCode", "Centered", "DeviceListItem", "Emoji", "Viewport", "hexToEmoji", "DevicesContainer", "createInvitationUrl", "t", "useTranslation", "dispatchPromise", "dispatch", "useIntentDispatcher", "devices", "useDevices", "swarm", "connectionState", "useNetworkStatus", "handleResetStorage", "useCallback", "createIntent", "ClientAction", "ResetStorage", "handleRecover", "mode", "handleJoinNewIdentity", "Clipboard", "Provider", "ControlPage", "ControlSection", "title", "ns", "meta", "id", "description", "ControlFrame", "ControlFrameItem", "List", "map", "device", "DeviceListItem", "key", "deviceKey", "toHex", "DeviceInvitation", "ControlGroup", "ControlItem", "Button", "variant", "onClick", "data-testid", "props", "client", "useClient", "invitation", "setInvitation", "useState", "onInvitationCreate", "halo", "share", "config", "values", "runtime", "app", "env", "DX_ENVIRONMENT", "subscription", "subscribe", "invitationCode", "InvitationEncoder", "encode", "state", "Invitation", "State", "CONNECTING", "log", "info", "JSON", "stringify", "authCode", "unsubscribe", "onInvitationDone", "undefined", "DeviceInvitationImpl", "InvitationSection", "invitationObservable", "useMulticastObservable", "url", "useEffect", "SUCCESS", "invitationId", "activeView", "CANCELLED", "READY_FOR_AUTHENTICATION", "p", "className", "IconButton", "icon", "label", "disabled", "classNames", "Viewport", "Root", "Views", "View", "InvitationComplete", "statusValue", "InvitationAuthCode", "code", "onCancel", "InvitationQR", "qrLabel", "useId", "emoji", "hexToEmoji", "div", "role", "QR", "rounding", "backgroundColor", "color", "aria-labelledby", "errorCorrectionLevel", "cutout", "Centered", "Emoji", "text", "span", "value", "AuthCode", "large", "Icon", "size", "React", "useCallback", "LayoutAction", "createIntent", "useIntentDispatcher", "ObservabilityAction", "Dialog", "useTranslation", "JoinPanel", "JOIN_DIALOG", "meta", "id", "JoinDialog", "props", "dispatchPromise", "dispatch", "useIntentDispatcher", "t", "useTranslation", "handleCancelResetStorage", "useCallback", "createIntent", "ClientAction", "ShareIdentity", "handleDone", "result", "identityKey", "Promise", "all", "LayoutAction", "UpdateDialog", "part", "options", "state", "ObservabilityAction", "SendEvent", "name", "initialDisposition", "React", "Dialog", "Content", "Title", "classNames", "ns", "JoinPanel", "mode", "exitActionParent", "Close", "asChild", "doneActionParent", "onCancelResetStorage", "onDone", "Schema", "React", "useCallback", "useMemo", "useState", "debounce", "useClient", "useIdentity", "ButtonGroup", "Clipboard", "Input", "useTranslation", "ControlItem", "ControlItemInput", "ControlPage", "ControlSection", "Form", "EmojiPickerBlock", "HuePicker", "hexToEmoji", "hexToHue", "getDefaultHueValue", "identity", "hexToHue", "identityKey", "toHex", "getDefaultEmojiValue", "hexToEmoji", "getHueValue", "profile", "data", "hue", "getEmojiValue", "emoji", "ProfileContainer", "t", "useTranslation", "meta", "id", "client", "useClient", "useIdentity", "displayName", "setDisplayNameDirectly", "useState", "setEmojiDirectly", "setHueDirectly", "updateProfile", "useMemo", "debounce", "halo", "handleSave", "useCallback", "values", "did", "customElements", "type", "label", "getValue", "onValueChange", "handleChange", "target", "value", "React", "ControlItemInput", "title", "description", "Input", "TextInput", "onChange", "placeholder", "classNames", "nextEmoji", "handleEmojiReset", "ControlItem", "EmojiPickerBlock", "triggerVariant", "onChangeEmoji", "onClickClear", "nextHue", "handleHueReset", "HuePicker", "onReset", "ButtonGroup", "disabled", "Clipboard", "IconButton", "ControlPage", "Provider", "ControlSection", "Form", "schema", "ProfileSchema", "autoSave", "onSave", "Custom", "outerSpacing", "Struct", "String", "annotations", "React", "useCallback", "useState", "AlertDialog", "Button", "Clipboard", "Input", "useTranslation", "RECOVERY_CODE_DIALOG", "meta", "id", "RecoveryCodeDialog", "code", "t", "useTranslation", "confirmation", "setConfirmation", "useState", "handleConfirmation", "useCallback", "checked", "React", "AlertDialog", "Content", "classNames", "Title", "p", "className", "Clipboard", "Provider", "Code", "div", "Input", "Root", "Checkbox", "data-testid", "onCheckedChange", "Label", "Action", "asChild", "Button", "variant", "disabled", "words", "split", "IconButton", "value", "map", "word", "i", "key", "React", "createIntent", "useIntentDispatcher", "useCredentials", "Icon", "IconButton", "List", "ListItem", "Message", "useTranslation", "ControlGroup", "ControlItem", "ControlPage", "ControlSection", "MANAGE_CREDENTIALS_DIALOG", "meta", "id", "RecoveryCredentialsContainer", "t", "useTranslation", "dispatchPromise", "dispatch", "useIntentDispatcher", "credentials", "useCredentials", "recoveryCredentials", "filter", "credential", "subject", "assertion", "React", "ControlPage", "ControlSection", "title", "description", "ControlGroup", "ControlItem", "IconButton", "label", "icon", "variant", "size", "onClick", "createIntent", "ClientAction", "CreatePasskey", "CreateRecoveryCode", "length", "Message", "Root", "valence", "classNames", "Title", "Content", "List", "map", "ListItem", "key", "toHex", "Endcap", "Icon", "Heading", "issuanceDate", "toLocaleString", "React", "useCallback", "LayoutAction", "createIntent", "useIntentDispatcher", "useClient", "Dialog", "useTranslation", "ConfirmReset", "RESET_DIALOG", "meta", "id", "ResetDialog", "mode", "onReset", "t", "useTranslation", "dispatchPromise", "dispatch", "useIntentDispatcher", "client", "useClient", "handleReset", "useCallback", "reset", "target", "undefined", "handleCancel", "createIntent", "LayoutAction", "UpdateDialog", "part", "options", "state", "React", "Dialog", "Content", "classNames", "Title", "Description", "ConfirmReset", "active", "onConfirm", "onCancel"]
7
+ }
@@ -0,0 +1,20 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ meta
4
+ } from "./chunk-QE4LPI2A.mjs";
5
+
6
+ // src/events.ts
7
+ import { defineEvent } from "@dxos/app-framework";
8
+ (function(ClientEvents2) {
9
+ ClientEvents2.ClientReady = defineEvent(`${meta.id}/event/client-ready`);
10
+ ClientEvents2.SetupSchema = defineEvent(`${meta.id}/event/setup-schema`);
11
+ ClientEvents2.SetupMigration = defineEvent(`${meta.id}/event/setup-migration`);
12
+ ClientEvents2.IdentityCreated = defineEvent(`${meta.id}/event/identity-created`);
13
+ ClientEvents2.SpacesReady = defineEvent(`${meta.id}/event/spaces-ready`);
14
+ })(ClientEvents || (ClientEvents = {}));
15
+ var ClientEvents;
16
+
17
+ export {
18
+ ClientEvents
19
+ };
20
+ //# sourceMappingURL=chunk-K5IFPSCL.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/events.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineEvent } from '@dxos/app-framework';\n\nimport { meta } from './meta';\n\nexport namespace ClientEvents {\n export const ClientReady = defineEvent(`${meta.id}/event/client-ready`);\n export const SetupSchema = defineEvent(`${meta.id}/event/setup-schema`);\n export const SetupMigration = defineEvent(`${meta.id}/event/setup-migration`);\n export const IdentityCreated = defineEvent(`${meta.id}/event/identity-created`);\n export const SpacesReady = defineEvent(`${meta.id}/event/spaces-ready`);\n}\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,mBAAmB;UAIXC,eAAAA;gBACFC,cAAcC,YAAY,GAAGC,KAAKC,EAAE,qBAAqB;gBACzDC,cAAcH,YAAY,GAAGC,KAAKC,EAAE,qBAAqB;gBACzDE,iBAAiBJ,YAAY,GAAGC,KAAKC,EAAE,wBAAwB;gBAC/DG,kBAAkBL,YAAY,GAAGC,KAAKC,EAAE,yBAAyB;gBACjEI,cAAcN,YAAY,GAAGC,KAAKC,EAAE,qBAAqB;AACxE,GANiBJ,iBAAAA,eAAAA,CAAAA,EAAAA;;",
6
+ "names": ["defineEvent", "ClientEvents", "ClientReady", "defineEvent", "meta", "id", "SetupSchema", "SetupMigration", "IdentityCreated", "SpacesReady"]
7
+ }
@@ -1,14 +1,12 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
 
3
3
  // src/meta.ts
4
- var CLIENT_PLUGIN = "dxos.org/plugin/client";
5
4
  var meta = {
6
- id: CLIENT_PLUGIN,
5
+ id: "dxos.org/plugin/client",
7
6
  name: "Client"
8
7
  };
9
8
 
10
9
  export {
11
- CLIENT_PLUGIN,
12
10
  meta
13
11
  };
14
- //# sourceMappingURL=chunk-SZLX4BVJ.mjs.map
12
+ //# sourceMappingURL=chunk-QE4LPI2A.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/meta.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { type PluginMeta } from '@dxos/app-framework';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/client',\n name: 'Client',\n};\n"],
5
+ "mappings": ";;;AAMO,IAAMA,OAAmB;EAC9BC,IAAI;EACJC,MAAM;AACR;",
6
+ "names": ["meta", "id", "name"]
7
+ }
@@ -0,0 +1,19 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ meta
4
+ } from "./chunk-QE4LPI2A.mjs";
5
+
6
+ // src/capabilities/capabilities.ts
7
+ import { defineCapability } from "@dxos/app-framework";
8
+ (function(ClientCapabilities2) {
9
+ ClientCapabilities2.Client = defineCapability(`${meta.id}/capability/client`);
10
+ ClientCapabilities2.Schema = defineCapability(`${meta.id}/capability/schema`);
11
+ ClientCapabilities2.SchemaWhiteList = defineCapability(`${meta.id}/capability/schema-whitelist`);
12
+ ClientCapabilities2.Migration = defineCapability(`${meta.id}/capability/migration`);
13
+ })(ClientCapabilities || (ClientCapabilities = {}));
14
+ var ClientCapabilities;
15
+
16
+ export {
17
+ ClientCapabilities
18
+ };
19
+ //# sourceMappingURL=chunk-UYDFBGYA.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/capabilities.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type Client } from '@dxos/client';\nimport { type ObjectMigration } from '@dxos/client/echo';\nimport { type Type } from '@dxos/echo';\n\nimport { meta } from '../meta';\n\nexport namespace ClientCapabilities {\n export const Client = defineCapability<Client>(`${meta.id}/capability/client`);\n export const Schema = defineCapability<Type.Obj.Any[]>(`${meta.id}/capability/schema`);\n // TODO(wittjosiah): More descriptive name.\n export const SchemaWhiteList = defineCapability<Type.Obj.Any[]>(`${meta.id}/capability/schema-whitelist`);\n export const Migration = defineCapability<ObjectMigration[]>(`${meta.id}/capability/migration`);\n}\n"],
5
+ "mappings": ";;;;;;AAIA,SAASA,wBAAwB;UAOhBC,qBAAAA;sBACFC,SAASC,iBAAyB,GAAGC,KAAKC,EAAE,oBAAoB;sBAChEC,SAASH,iBAAiC,GAAGC,KAAKC,EAAE,oBAAoB;sBAExEE,kBAAkBJ,iBAAiC,GAAGC,KAAKC,EAAE,8BAA8B;sBAC3FG,YAAYL,iBAAoC,GAAGC,KAAKC,EAAE,uBAAuB;AAChG,GANiBJ,uBAAAA,qBAAAA,CAAAA,EAAAA;;",
6
+ "names": ["defineCapability", "ClientCapabilities", "Client", "defineCapability", "meta", "id", "Schema", "SchemaWhiteList", "Migration"]
7
+ }
@@ -1,19 +1,22 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ClientEvents
4
- } from "./chunk-UMO3ETDV.mjs";
4
+ } from "./chunk-K5IFPSCL.mjs";
5
5
  import {
6
6
  ClientCapabilities
7
- } from "./chunk-IOGTQFLM.mjs";
8
- import "./chunk-SZLX4BVJ.mjs";
7
+ } from "./chunk-UYDFBGYA.mjs";
8
+ import "./chunk-QE4LPI2A.mjs";
9
9
 
10
10
  // src/capabilities/client.ts
11
11
  import { contributes } from "@dxos/app-framework";
12
12
  import { Client } from "@dxos/react-client";
13
- var client_default = async ({ context, onClientInitialized, onSpacesReady, ...options }) => {
13
+ var client_default = (async ({ context, onClientInitialized, onSpacesReady, ...options }) => {
14
14
  const client = new Client(options);
15
15
  await client.initialize();
16
- await onClientInitialized?.(context, client);
16
+ await onClientInitialized?.({
17
+ context,
18
+ client
19
+ });
17
20
  client.reloaded.on(() => {
18
21
  client.halo.identity.subscribe(async (identity) => {
19
22
  if (identity) {
@@ -24,15 +27,18 @@ var client_default = async ({ context, onClientInitialized, onSpacesReady, ...op
24
27
  const subscription = client.spaces.isReady.subscribe(async (ready) => {
25
28
  if (ready) {
26
29
  await context.activatePromise(ClientEvents.SpacesReady);
27
- await onSpacesReady?.(context, client);
30
+ await onSpacesReady?.({
31
+ context,
32
+ client
33
+ });
28
34
  }
29
35
  });
30
36
  return contributes(ClientCapabilities.Client, client, async () => {
31
37
  subscription.unsubscribe();
32
38
  await client.destroy();
33
39
  });
34
- };
40
+ });
35
41
  export {
36
42
  client_default as default
37
43
  };
38
- //# sourceMappingURL=client-SLL6GDC2.mjs.map
44
+ //# sourceMappingURL=client-ODN7EBTY.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/client.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type PluginContext, contributes } from '@dxos/app-framework';\nimport { Client } from '@dxos/react-client';\n\nimport { ClientEvents } from '../events';\nimport { type ClientPluginOptions } from '../types';\n\nimport { ClientCapabilities } from './capabilities';\n\ntype ClientCapabilityOptions = Omit<ClientPluginOptions, 'appKey' | 'invitationUrl' | 'invitationParam' | 'onReset'> & {\n context: PluginContext;\n};\n\nexport default async ({ context, onClientInitialized, onSpacesReady, ...options }: ClientCapabilityOptions) => {\n const client = new Client(options);\n await client.initialize();\n await onClientInitialized?.({ context, client });\n\n // TODO(wittjosiah): Remove. This is a hack to get the app to boot with the new identity after a reset.\n client.reloaded.on(() => {\n client.halo.identity.subscribe(async (identity) => {\n if (identity) {\n window.location.href = window.location.origin;\n }\n });\n });\n\n // TODO(burdon): The callback isn't called?\n const subscription = client.spaces.isReady.subscribe(async (ready) => {\n if (ready) {\n await context.activatePromise(ClientEvents.SpacesReady);\n await onSpacesReady?.({ context, client });\n }\n });\n\n return contributes(ClientCapabilities.Client, client, async () => {\n subscription.unsubscribe();\n await client.destroy();\n });\n};\n"],
5
+ "mappings": ";;;;;;;;;;AAIA,SAA6BA,mBAAmB;AAChD,SAASC,cAAc;AAWvB,IAAA,kBAAe,OAAO,EAAEC,SAASC,qBAAqBC,eAAe,GAAGC,QAAAA,MAAkC;AACxG,QAAMC,SAAS,IAAIC,OAAOF,OAAAA;AAC1B,QAAMC,OAAOE,WAAU;AACvB,QAAML,sBAAsB;IAAED;IAASI;EAAO,CAAA;AAG9CA,SAAOG,SAASC,GAAG,MAAA;AACjBJ,WAAOK,KAAKC,SAASC,UAAU,OAAOD,aAAAA;AACpC,UAAIA,UAAU;AACZE,eAAOC,SAASC,OAAOF,OAAOC,SAASE;MACzC;IACF,CAAA;EACF,CAAA;AAGA,QAAMC,eAAeZ,OAAOa,OAAOC,QAAQP,UAAU,OAAOQ,UAAAA;AAC1D,QAAIA,OAAO;AACT,YAAMnB,QAAQoB,gBAAgBC,aAAaC,WAAW;AACtD,YAAMpB,gBAAgB;QAAEF;QAASI;MAAO,CAAA;IAC1C;EACF,CAAA;AAEA,SAAOmB,YAAYC,mBAAmBnB,QAAQD,QAAQ,YAAA;AACpDY,iBAAaS,YAAW;AACxB,UAAMrB,OAAOsB,QAAO;EACtB,CAAA;AACF;",
6
+ "names": ["contributes", "Client", "context", "onClientInitialized", "onSpacesReady", "options", "client", "Client", "initialize", "reloaded", "on", "halo", "identity", "subscribe", "window", "location", "href", "origin", "subscription", "spaces", "isReady", "ready", "activatePromise", "ClientEvents", "SpacesReady", "contributes", "ClientCapabilities", "unsubscribe", "destroy"]
7
+ }
@@ -1,27 +1,30 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  ClientEvents
4
- } from "./chunk-UMO3ETDV.mjs";
4
+ } from "./chunk-K5IFPSCL.mjs";
5
5
  import {
6
6
  ClientCapabilities
7
- } from "./chunk-IOGTQFLM.mjs";
7
+ } from "./chunk-UYDFBGYA.mjs";
8
+ import {
9
+ Account,
10
+ ClientAction
11
+ } from "./chunk-4MPOOMDQ.mjs";
8
12
  import {
9
- CLIENT_PLUGIN,
10
13
  meta
11
- } from "./chunk-SZLX4BVJ.mjs";
12
-
13
- // src/ClientPlugin.ts
14
- import { Capabilities, contributes, defineModule, definePlugin, Events, oneOf } from "@dxos/app-framework";
14
+ } from "./chunk-QE4LPI2A.mjs";
15
15
 
16
16
  // src/capabilities/index.ts
17
17
  import { lazy } from "@dxos/app-framework";
18
- var AppGraphBuilder = lazy(async () => import("./app-graph-builder-SWFB4FID.mjs"));
19
- var Client = lazy(async () => import("./client-SLL6GDC2.mjs"));
20
- var IntentResolver = lazy(async () => import("./intent-resolver-L7C6YRWV.mjs"));
21
- var Migrations = lazy(async () => import("./migrations-YISDI7LF.mjs"));
22
- var ReactContext = lazy(async () => import("./react-context-EEHS4S3L.mjs"));
23
- var ReactSurface = lazy(async () => import("./react-surface-2K6W37R4.mjs"));
24
- var SchemaDefs = lazy(async () => import("./schema-defs-5ZNI63RW.mjs"));
18
+ var AppGraphBuilder = lazy(async () => import("./app-graph-builder-S3BVB3IU.mjs"));
19
+ var Client = lazy(async () => import("./client-ODN7EBTY.mjs"));
20
+ var IntentResolver = lazy(async () => import("./intent-resolver-3JZIPI6F.mjs"));
21
+ var Migrations = lazy(async () => import("./migrations-ARXHGBH5.mjs"));
22
+ var ReactContext = lazy(async () => import("./react-context-4SZYNSIS.mjs"));
23
+ var ReactSurface = lazy(async () => import("./react-surface-BOST4EH2.mjs"));
24
+ var SchemaDefs = lazy(async () => import("./schema-defs-ATH5YBDR.mjs"));
25
+
26
+ // src/ClientPlugin.ts
27
+ import { Capabilities, Events, contributes, defineModule, definePlugin, oneOf } from "@dxos/app-framework";
25
28
 
26
29
  // src/translations.ts
27
30
  var translations = [
@@ -77,13 +80,13 @@ var translations = [
77
80
  ];
78
81
 
79
82
  // src/ClientPlugin.ts
80
- var ClientPlugin = ({ invitationUrl = window.location.origin, invitationParam = "deviceInvitationCode", onReset, ...options }) => {
83
+ var ClientPlugin = definePlugin(meta, ({ invitationUrl = window.location.origin, invitationParam = "deviceInvitationCode", onReset, ...options }) => {
81
84
  const createInvitationUrl = (invitationCode) => {
82
85
  const baseUrl = new URL(invitationUrl);
83
86
  baseUrl.searchParams.set(invitationParam, invitationCode);
84
87
  return baseUrl.toString();
85
88
  };
86
- return definePlugin(meta, [
89
+ return [
87
90
  defineModule({
88
91
  id: `${meta.id}/module/client`,
89
92
  activatesOn: oneOf(Events.Startup, Events.SetupAppGraph),
@@ -141,10 +144,11 @@ var ClientPlugin = ({ invitationUrl = window.location.origin, invitationParam =
141
144
  activatesOn: Events.SetupTranslations,
142
145
  activate: () => contributes(Capabilities.Translations, translations)
143
146
  })
144
- ]);
145
- };
147
+ ];
148
+ });
146
149
  export {
147
- CLIENT_PLUGIN,
150
+ Account,
151
+ ClientAction,
148
152
  ClientCapabilities,
149
153
  ClientEvents,
150
154
  ClientPlugin,