@dxos/plugin-client 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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 (159) hide show
  1. package/dist/lib/browser/{app-graph-builder-JNIES5L4.mjs → app-graph-builder-7LBCMPIW.mjs} +26 -25
  2. package/dist/lib/browser/app-graph-builder-7LBCMPIW.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-4LRO3Y2O.mjs +19 -0
  4. package/dist/lib/browser/chunk-4LRO3Y2O.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-SV3MHIKI.mjs → chunk-HZSIIWH5.mjs} +76 -82
  6. package/dist/lib/browser/chunk-HZSIIWH5.mjs.map +7 -0
  7. package/dist/lib/browser/{chunk-RMHBOY3Y.mjs → chunk-RDIG75CA.mjs} +3 -3
  8. package/dist/lib/browser/chunk-RDIG75CA.mjs.map +7 -0
  9. package/dist/lib/browser/chunk-UZTC5O5A.mjs +17 -0
  10. package/dist/lib/browser/chunk-UZTC5O5A.mjs.map +7 -0
  11. package/dist/lib/browser/chunk-ZRVMXLDR.mjs +15 -0
  12. package/dist/lib/browser/chunk-ZRVMXLDR.mjs.map +7 -0
  13. package/dist/lib/browser/{client-SKVKXPLY.mjs → client-KIPUUVWJ.mjs} +14 -8
  14. package/dist/lib/browser/client-KIPUUVWJ.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-N4J2B5KF.mjs} +18 -18
  18. package/dist/lib/browser/intent-resolver-N4J2B5KF.mjs.map +7 -0
  19. package/dist/lib/browser/meta.json +1 -1
  20. package/dist/lib/browser/{migrations-D76RCG72.mjs → migrations-RCNZRP3I.mjs} +6 -6
  21. package/dist/lib/browser/migrations-RCNZRP3I.mjs.map +7 -0
  22. package/dist/lib/browser/{react-context-YWVPZUMU.mjs → react-context-JYJ63L5S.mjs} +9 -8
  23. package/dist/lib/browser/react-context-JYJ63L5S.mjs.map +7 -0
  24. package/dist/lib/browser/{react-surface-QFZTDNLS.mjs → react-surface-X6YMVGZZ.mjs} +8 -8
  25. package/dist/lib/browser/react-surface-X6YMVGZZ.mjs.map +7 -0
  26. package/dist/lib/browser/{schema-defs-HKW6VNZB.mjs → schema-defs-DKGLMWWM.mjs} +8 -8
  27. package/dist/lib/browser/schema-defs-DKGLMWWM.mjs.map +7 -0
  28. package/dist/lib/browser/types/index.mjs +2 -2
  29. package/dist/lib/node-esm/{app-graph-builder-SWFB4FID.mjs → app-graph-builder-4CVWKYZ6.mjs} +26 -25
  30. package/dist/lib/node-esm/app-graph-builder-4CVWKYZ6.mjs.map +7 -0
  31. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs +20 -0
  32. package/dist/lib/node-esm/chunk-7M7VWQJW.mjs.map +7 -0
  33. package/dist/lib/node-esm/chunk-DQDFIOXV.mjs +18 -0
  34. package/dist/lib/node-esm/chunk-DQDFIOXV.mjs.map +7 -0
  35. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs +17 -0
  36. package/dist/lib/node-esm/chunk-QT3EQXDU.mjs.map +7 -0
  37. package/dist/lib/node-esm/{chunk-FBYODKEL.mjs → chunk-RGCZX67B.mjs} +76 -82
  38. package/dist/lib/node-esm/chunk-RGCZX67B.mjs.map +7 -0
  39. package/dist/lib/node-esm/{chunk-5V3RCXZV.mjs → chunk-VENKFPBC.mjs} +3 -3
  40. package/dist/lib/node-esm/chunk-VENKFPBC.mjs.map +7 -0
  41. package/dist/lib/node-esm/{client-SLL6GDC2.mjs → client-W5DQW2E7.mjs} +14 -8
  42. package/dist/lib/node-esm/client-W5DQW2E7.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-F2ZP2UQJ.mjs} +18 -18
  46. package/dist/lib/node-esm/intent-resolver-F2ZP2UQJ.mjs.map +7 -0
  47. package/dist/lib/node-esm/meta.json +1 -1
  48. package/dist/lib/node-esm/{migrations-YISDI7LF.mjs → migrations-TZFOPRPE.mjs} +6 -6
  49. package/dist/lib/node-esm/migrations-TZFOPRPE.mjs.map +7 -0
  50. package/dist/lib/node-esm/{react-context-EEHS4S3L.mjs → react-context-7BJGZI5D.mjs} +9 -8
  51. package/dist/lib/node-esm/react-context-7BJGZI5D.mjs.map +7 -0
  52. package/dist/lib/node-esm/{react-surface-2K6W37R4.mjs → react-surface-BWX37JGM.mjs} +8 -8
  53. package/dist/lib/node-esm/react-surface-BWX37JGM.mjs.map +7 -0
  54. package/dist/lib/node-esm/{schema-defs-5ZNI63RW.mjs → schema-defs-SLSDRMGM.mjs} +8 -8
  55. package/dist/lib/node-esm/schema-defs-SLSDRMGM.mjs.map +7 -0
  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 +2 -2
  62. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  63. package/dist/types/src/capabilities/client.d.ts +1 -1
  64. package/dist/types/src/capabilities/client.d.ts.map +1 -1
  65. package/dist/types/src/capabilities/index.d.ts +10 -10
  66. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  67. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  68. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  69. package/dist/types/src/capabilities/migrations.d.ts +1 -1
  70. package/dist/types/src/capabilities/migrations.d.ts.map +1 -1
  71. package/dist/types/src/capabilities/react-context.d.ts +2 -2
  72. package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
  73. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  74. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  75. package/dist/types/src/capabilities/schema-defs.d.ts +1 -1
  76. package/dist/types/src/capabilities/schema-defs.d.ts.map +1 -1
  77. package/dist/types/src/components/DevicesContainer.d.ts.map +1 -1
  78. package/dist/types/src/components/DevicesContainer.stories.d.ts +224 -5
  79. package/dist/types/src/components/DevicesContainer.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/JoinDialog.d.ts +1 -1
  81. package/dist/types/src/components/JoinDialog.d.ts.map +1 -1
  82. package/dist/types/src/components/ProfileContainer.d.ts.map +1 -1
  83. package/dist/types/src/components/ProfileContainer.stories.d.ts +57 -5
  84. package/dist/types/src/components/ProfileContainer.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/RecoveryCodeDialog.d.ts +1 -1
  86. package/dist/types/src/components/RecoveryCodeDialog.d.ts.map +1 -1
  87. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts +59 -5
  88. package/dist/types/src/components/RecoveryCodeDialog.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts +1 -1
  90. package/dist/types/src/components/RecoveryCredentialsContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts +57 -5
  92. package/dist/types/src/components/RecoveryCredentialsContainer.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/ResetDialog.d.ts +1 -1
  94. package/dist/types/src/components/ResetDialog.d.ts.map +1 -1
  95. package/dist/types/src/components/ResetDialog.stories.d.ts +59 -4
  96. package/dist/types/src/components/ResetDialog.stories.d.ts.map +1 -1
  97. package/dist/types/src/events.d.ts.map +1 -1
  98. package/dist/types/src/index.d.ts +3 -2
  99. package/dist/types/src/index.d.ts.map +1 -1
  100. package/dist/types/src/meta.d.ts +0 -1
  101. package/dist/types/src/meta.d.ts.map +1 -1
  102. package/dist/types/src/types/schema.d.ts +10 -4
  103. package/dist/types/src/types/schema.d.ts.map +1 -1
  104. package/dist/types/tsconfig.tsbuildinfo +1 -1
  105. package/package.json +37 -36
  106. package/src/ClientPlugin.ts +57 -59
  107. package/src/capabilities/app-graph-builder.ts +25 -23
  108. package/src/capabilities/capabilities.ts +4 -6
  109. package/src/capabilities/client.ts +6 -4
  110. package/src/capabilities/intent-resolver.ts +7 -6
  111. package/src/capabilities/migrations.ts +2 -2
  112. package/src/capabilities/react-context.tsx +5 -3
  113. package/src/capabilities/react-surface.tsx +4 -4
  114. package/src/capabilities/schema-defs.ts +6 -5
  115. package/src/components/DevicesContainer.stories.tsx +9 -11
  116. package/src/components/DevicesContainer.tsx +56 -69
  117. package/src/components/JoinDialog.tsx +5 -4
  118. package/src/components/ProfileContainer.stories.tsx +8 -9
  119. package/src/components/ProfileContainer.tsx +40 -45
  120. package/src/components/RecoveryCodeDialog.stories.tsx +9 -10
  121. package/src/components/RecoveryCodeDialog.tsx +6 -6
  122. package/src/components/RecoveryCredentialsContainer.stories.tsx +9 -11
  123. package/src/components/RecoveryCredentialsContainer.tsx +47 -51
  124. package/src/components/ResetDialog.stories.tsx +10 -11
  125. package/src/components/ResetDialog.tsx +5 -4
  126. package/src/events.ts +6 -6
  127. package/src/index.ts +4 -3
  128. package/src/meta.ts +6 -3
  129. package/src/types/schema.ts +4 -4
  130. package/dist/lib/browser/app-graph-builder-JNIES5L4.mjs.map +0 -7
  131. package/dist/lib/browser/chunk-3F2Q2RKC.mjs +0 -18
  132. package/dist/lib/browser/chunk-3F2Q2RKC.mjs.map +0 -7
  133. package/dist/lib/browser/chunk-CAF2COXW.mjs +0 -19
  134. package/dist/lib/browser/chunk-CAF2COXW.mjs.map +0 -7
  135. package/dist/lib/browser/chunk-GS3LDHYD.mjs +0 -12
  136. package/dist/lib/browser/chunk-GS3LDHYD.mjs.map +0 -7
  137. package/dist/lib/browser/chunk-RMHBOY3Y.mjs.map +0 -7
  138. package/dist/lib/browser/chunk-SV3MHIKI.mjs.map +0 -7
  139. package/dist/lib/browser/client-SKVKXPLY.mjs.map +0 -7
  140. package/dist/lib/browser/intent-resolver-LNPLD5CA.mjs.map +0 -7
  141. package/dist/lib/browser/migrations-D76RCG72.mjs.map +0 -7
  142. package/dist/lib/browser/react-context-YWVPZUMU.mjs.map +0 -7
  143. package/dist/lib/browser/react-surface-QFZTDNLS.mjs.map +0 -7
  144. package/dist/lib/browser/schema-defs-HKW6VNZB.mjs.map +0 -7
  145. package/dist/lib/node-esm/app-graph-builder-SWFB4FID.mjs.map +0 -7
  146. package/dist/lib/node-esm/chunk-5V3RCXZV.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-FBYODKEL.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-IOGTQFLM.mjs +0 -19
  149. package/dist/lib/node-esm/chunk-IOGTQFLM.mjs.map +0 -7
  150. package/dist/lib/node-esm/chunk-SZLX4BVJ.mjs +0 -14
  151. package/dist/lib/node-esm/chunk-SZLX4BVJ.mjs.map +0 -7
  152. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs +0 -20
  153. package/dist/lib/node-esm/chunk-UMO3ETDV.mjs.map +0 -7
  154. package/dist/lib/node-esm/client-SLL6GDC2.mjs.map +0 -7
  155. package/dist/lib/node-esm/intent-resolver-L7C6YRWV.mjs.map +0 -7
  156. package/dist/lib/node-esm/migrations-YISDI7LF.mjs.map +0 -7
  157. package/dist/lib/node-esm/react-context-EEHS4S3L.mjs.map +0 -7
  158. package/dist/lib/node-esm/react-surface-2K6W37R4.mjs.map +0 -7
  159. package/dist/lib/node-esm/schema-defs-5ZNI63RW.mjs.map +0 -7
@@ -0,0 +1,17 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+
3
+ // src/meta.ts
4
+ import { trim } from "@dxos/util";
5
+ var meta = {
6
+ id: "dxos.org/plugin/client",
7
+ name: "Client",
8
+ description: trim`
9
+ Core client connectivity and peer-to-peer networking infrastructure.
10
+ Manages identity, authentication, and real-time synchronization across devices.
11
+ `
12
+ };
13
+
14
+ export {
15
+ meta
16
+ };
17
+ //# sourceMappingURL=chunk-QT3EQXDU.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';\nimport { trim } from '@dxos/util';\n\nexport const meta: PluginMeta = {\n id: 'dxos.org/plugin/client',\n name: 'Client',\n description: trim`\n Core client connectivity and peer-to-peer networking infrastructure.\n Manages identity, authentication, and real-time synchronization across devices.\n `,\n};\n"],
5
+ "mappings": ";;;AAKA,SAASA,YAAY;AAEd,IAAMC,OAAmB;EAC9BC,IAAI;EACJC,MAAM;EACNC,aAAaC;;;;AAIf;",
6
+ "names": ["trim", "meta", "id", "name", "description", "trim"]
7
+ }
@@ -1,24 +1,24 @@
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-VENKFPBC.mjs";
5
5
  import {
6
- CLIENT_PLUGIN
7
- } from "./chunk-SZLX4BVJ.mjs";
6
+ meta
7
+ } from "./chunk-QT3EQXDU.mjs";
8
8
 
9
9
  // src/components/DevicesContainer.tsx
10
10
  import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
11
11
  import React, { useCallback, useEffect, useState } from "react";
12
12
  import { QR } from "react-qr-rounded";
13
- import { createIntent, useIntentDispatcher } from "@dxos/app-framework";
13
+ import { createIntent } from "@dxos/app-framework";
14
+ import { useIntentDispatcher } from "@dxos/app-framework/react";
14
15
  import { log } from "@dxos/log";
15
16
  import { useClient, useMulticastObservable } from "@dxos/react-client";
16
17
  import { useDevices } from "@dxos/react-client/halo";
17
18
  import { Invitation, InvitationEncoder } from "@dxos/react-client/invitations";
18
19
  import { useNetworkStatus } from "@dxos/react-client/mesh";
19
- import { Button, Clipboard, IconButton, List, useId, useTranslation, Icon } from "@dxos/react-ui";
20
+ import { Button, Clipboard, Icon, IconButton, List, useId, useTranslation } from "@dxos/react-ui";
20
21
  import { ControlFrame, ControlFrameItem, ControlGroup, ControlItem, ControlPage, ControlSection } from "@dxos/react-ui-form";
21
- import { StackItem } from "@dxos/react-ui-stack";
22
22
  import { AuthCode, Centered, DeviceListItem, Emoji, Viewport } from "@dxos/shell/react";
23
23
  import { hexToEmoji } from "@dxos/util";
24
24
  var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-client/src/components/DevicesContainer.tsx";
@@ -42,18 +42,16 @@ var DevicesContainer = ({ createInvitationUrl }) => {
42
42
  })), [
43
43
  dispatch
44
44
  ]);
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, {
45
+ return /* @__PURE__ */ React.createElement(Clipboard.Provider, null, /* @__PURE__ */ React.createElement(ControlPage, null, /* @__PURE__ */ React.createElement(ControlSection, {
48
46
  title: t("devices verbose label", {
49
- ns: CLIENT_PLUGIN
47
+ ns: meta.id
50
48
  }),
51
49
  description: t("devices description", {
52
- ns: CLIENT_PLUGIN
50
+ ns: meta.id
53
51
  })
54
52
  }, /* @__PURE__ */ React.createElement(ControlFrame, null, /* @__PURE__ */ React.createElement(ControlFrameItem, {
55
53
  title: t("devices label", {
56
- ns: CLIENT_PLUGIN
54
+ ns: meta.id
57
55
  })
58
56
  }, /* @__PURE__ */ React.createElement(List, null, devices.map((device) => {
59
57
  return /* @__PURE__ */ React.createElement(DeviceListItem, {
@@ -67,15 +65,15 @@ var DevicesContainer = ({ createInvitationUrl }) => {
67
65
  createInvitationUrl
68
66
  })))), /* @__PURE__ */ React.createElement(ControlSection, {
69
67
  title: t("danger zone title", {
70
- ns: CLIENT_PLUGIN
68
+ ns: meta.id
71
69
  }),
72
70
  description: t("danger zone description", {
73
- ns: CLIENT_PLUGIN
71
+ ns: meta.id
74
72
  })
75
73
  }, /* @__PURE__ */ React.createElement(ControlGroup, null, /* @__PURE__ */ React.createElement(ControlItem, {
76
74
  title: t("reset device label"),
77
75
  description: t("reset device description", {
78
- ns: CLIENT_PLUGIN
76
+ ns: meta.id
79
77
  })
80
78
  }, /* @__PURE__ */ React.createElement(Button, {
81
79
  variant: "destructive",
@@ -84,7 +82,7 @@ var DevicesContainer = ({ createInvitationUrl }) => {
84
82
  }, t("reset device label"))), /* @__PURE__ */ React.createElement(ControlItem, {
85
83
  title: t("recover identity label"),
86
84
  description: t("recover identity description", {
87
- ns: CLIENT_PLUGIN
85
+ ns: meta.id
88
86
  })
89
87
  }, /* @__PURE__ */ React.createElement(Button, {
90
88
  variant: "destructive",
@@ -93,13 +91,13 @@ var DevicesContainer = ({ createInvitationUrl }) => {
93
91
  }, t("recover identity label"))), /* @__PURE__ */ React.createElement(ControlItem, {
94
92
  title: t("join new identity label"),
95
93
  description: t("join new identity description", {
96
- ns: CLIENT_PLUGIN
94
+ ns: meta.id
97
95
  })
98
96
  }, /* @__PURE__ */ React.createElement(Button, {
99
97
  variant: "destructive",
100
98
  onClick: handleJoinNewIdentity,
101
99
  "data-testid": "devicesContainer.joinExisting"
102
- }, t("join new identity label"))))))));
100
+ }, t("join new identity label")))))));
103
101
  } finally {
104
102
  _effect.f();
105
103
  }
@@ -120,7 +118,7 @@ var DeviceInvitation = (props) => {
120
118
  authCode: invitation3.authCode
121
119
  }), void 0, {
122
120
  F: __dxlog_file,
123
- L: 139,
121
+ L: 126,
124
122
  S: void 0,
125
123
  C: (f, a) => f(...a)
126
124
  });
@@ -180,7 +178,7 @@ var InvitationSection = ({ state = -1, authCode, invitationId = "never", url = "
180
178
  } }) => {
181
179
  var _effect = _useSignals();
182
180
  try {
183
- const { t } = useTranslation(CLIENT_PLUGIN);
181
+ const { t } = useTranslation(meta.id);
184
182
  const activeView = state < 0 ? "init" : state >= Invitation.State.CANCELLED ? "complete" : state >= Invitation.State.READY_FOR_AUTHENTICATION && authCode ? "auth-code" : "qr-code";
185
183
  return activeView === "init" ? /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", {
186
184
  className: "text-description mbe-2"
@@ -225,7 +223,7 @@ var InvitationQR = ({ id, url, onCancel }) => {
225
223
  return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("p", {
226
224
  className: "text-description"
227
225
  }, t("qr code description", {
228
- ns: CLIENT_PLUGIN
226
+ ns: meta.id
229
227
  })), /* @__PURE__ */ React.createElement("div", {
230
228
  role: "group",
231
229
  className: "grid grid-cols-[1fr_min-content] mlb-2 gap-2"
@@ -302,16 +300,17 @@ var InvitationComplete = ({ statusValue }) => {
302
300
  // src/components/JoinDialog.tsx
303
301
  import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
304
302
  import React2, { useCallback as useCallback2 } from "react";
305
- import { createIntent as createIntent2, LayoutAction, useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework";
303
+ import { LayoutAction, createIntent as createIntent2 } from "@dxos/app-framework";
304
+ import { useIntentDispatcher as useIntentDispatcher2 } from "@dxos/app-framework/react";
306
305
  import { ObservabilityAction } from "@dxos/plugin-observability/types";
307
306
  import { Dialog, useTranslation as useTranslation2 } from "@dxos/react-ui";
308
307
  import { JoinPanel } from "@dxos/shell/react";
309
- var JOIN_DIALOG = `${CLIENT_PLUGIN}/JoinDialog`;
308
+ var JOIN_DIALOG = `${meta.id}/JoinDialog`;
310
309
  var JoinDialog = (props) => {
311
310
  var _effect = _useSignals2();
312
311
  try {
313
312
  const { dispatchPromise: dispatch } = useIntentDispatcher2();
314
- const { t } = useTranslation2(CLIENT_PLUGIN);
313
+ const { t } = useTranslation2(meta.id);
315
314
  const handleCancelResetStorage = useCallback2(() => dispatch(createIntent2(ClientAction.ShareIdentity)), [
316
315
  dispatch
317
316
  ]);
@@ -355,24 +354,37 @@ var JoinDialog = (props) => {
355
354
 
356
355
  // src/components/ProfileContainer.tsx
357
356
  import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
358
- import { Schema } from "effect";
357
+ import * as Schema from "effect/Schema";
359
358
  import React3, { useCallback as useCallback3, useMemo, useState as useState2 } from "react";
360
359
  import { debounce } from "@dxos/async";
361
360
  import { useClient as useClient2 } from "@dxos/react-client";
362
361
  import { useIdentity } from "@dxos/react-client/halo";
363
362
  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";
363
+ import { ControlItem as ControlItem2, ControlItemInput, ControlPage as ControlPage2, ControlSection as ControlSection2, Form } from "@dxos/react-ui-form";
365
364
  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";
365
+ import { hexToEmoji as hexToEmoji2, hexToHue } from "@dxos/util";
366
+ var UserProfile = Schema.Struct({
367
+ did: Schema.String.annotations({
368
+ title: "DID"
369
+ }),
370
+ displayName: Schema.String.annotations({
371
+ title: "Display name"
372
+ }),
373
+ emoji: Schema.String.annotations({
374
+ title: "Avatar"
375
+ }),
376
+ hue: Schema.String.annotations({
377
+ title: "Color"
378
+ })
379
+ });
368
380
  var getDefaultHueValue = (identity) => hexToHue(identity?.identityKey.toHex() ?? "0");
369
- var getDefaultEmojiValue = (identity) => hexToEmoji2(identity?.identityKey.toHex() ?? "0");
370
381
  var getHueValue = (identity) => identity?.profile?.data?.hue || getDefaultHueValue(identity);
382
+ var getDefaultEmojiValue = (identity) => hexToEmoji2(identity?.identityKey.toHex() ?? "0");
371
383
  var getEmojiValue = (identity) => identity?.profile?.data?.emoji || getDefaultEmojiValue(identity);
372
384
  var ProfileContainer = () => {
373
385
  var _effect = _useSignals3();
374
386
  try {
375
- const { t } = useTranslation3(CLIENT_PLUGIN);
387
+ const { t } = useTranslation3(meta.id);
376
388
  const client = useClient2();
377
389
  const identity = useIdentity();
378
390
  const [displayName, setDisplayNameDirectly] = useState2(identity?.profile?.displayName ?? "");
@@ -394,17 +406,17 @@ var ProfileContainer = () => {
394
406
  identity
395
407
  ]);
396
408
  const values = useMemo(() => ({
409
+ did: identity?.did,
397
410
  displayName,
398
411
  emoji,
399
- hue,
400
- did: identity?.did
412
+ hue
401
413
  }), [
402
414
  identity,
403
415
  displayName,
404
416
  emoji,
405
417
  hue
406
418
  ]);
407
- const customElements = useMemo(() => ({
419
+ const fieldMap = useMemo(() => ({
408
420
  displayName: ({ type, label, getValue, onValueChange }) => {
409
421
  const handleChange = useCallback3(({ target: { value } }) => onValueChange(type, value), [
410
422
  onValueChange,
@@ -452,12 +464,14 @@ var ProfileContainer = () => {
452
464
  return /* @__PURE__ */ React3.createElement(ControlItem2, {
453
465
  title: label,
454
466
  description: t("hue description")
467
+ }, /* @__PURE__ */ React3.createElement("div", {
468
+ role: "none",
469
+ className: "flex justify-self-end"
455
470
  }, /* @__PURE__ */ React3.createElement(HuePicker, {
456
471
  value: getValue(),
457
472
  onChange: handleChange,
458
- onReset: handleHueReset,
459
- classNames: "[--hue-preview-size:1.5rem] justify-self-end"
460
- }));
473
+ onReset: handleHueReset
474
+ })));
461
475
  },
462
476
  // TODO(wittjosiah): We need text input annotations for disabled and copyable.
463
477
  did: ({ label, getValue }) => {
@@ -475,58 +489,42 @@ var ProfileContainer = () => {
475
489
  }), [
476
490
  t
477
491
  ]);
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, {
492
+ return /* @__PURE__ */ React3.createElement(ControlPage2, null, /* @__PURE__ */ React3.createElement(Clipboard2.Provider, null, /* @__PURE__ */ React3.createElement(ControlSection2, {
481
493
  title: t("profile label"),
482
494
  description: t("profile description")
483
- }, /* @__PURE__ */ React3.createElement(Form, {
484
- schema: ProfileSchema,
495
+ }, /* @__PURE__ */ React3.createElement(Form.Root, {
496
+ schema: UserProfile,
485
497
  values,
498
+ fieldMap,
486
499
  autoSave: true,
487
- onSave: handleSave,
488
- Custom: customElements,
489
- classNames: "container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content] gap-4",
490
- outerSpacing: false
491
- })))));
500
+ onSave: handleSave
501
+ }, /* @__PURE__ */ React3.createElement(Form.Content, null, /* @__PURE__ */ React3.createElement(Form.FieldSet, {
502
+ classNames: "container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]"
503
+ }))))));
492
504
  } finally {
493
505
  _effect.f();
494
506
  }
495
507
  };
496
- var ProfileSchema = Schema.Struct({
497
- displayName: Schema.String.annotations({
498
- title: "Display name"
499
- }),
500
- emoji: Schema.String.annotations({
501
- title: "Avatar"
502
- }),
503
- hue: Schema.String.annotations({
504
- title: "Color"
505
- }),
506
- did: Schema.String.annotations({
507
- title: "DID"
508
- })
509
- });
510
508
 
511
509
  // src/components/RecoveryCodeDialog.tsx
512
510
  import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
513
511
  import React4, { useCallback as useCallback4, useState as useState3 } from "react";
514
512
  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`;
513
+ var RECOVERY_CODE_DIALOG = `${meta.id}/RecoveryCodeDialog`;
516
514
  var RecoveryCodeDialog = ({ code }) => {
517
515
  var _effect = _useSignals4();
518
516
  try {
519
- const { t } = useTranslation4(CLIENT_PLUGIN);
517
+ const { t } = useTranslation4(meta.id);
520
518
  const [confirmation, setConfirmation] = useState3(false);
521
519
  const handleConfirmation = useCallback4((checked) => setConfirmation(checked), []);
522
520
  return /* @__PURE__ */ React4.createElement(AlertDialog.Content, {
523
521
  classNames: "bs-content min-bs-[15rem] max-bs-full md:max-is-[40rem] overflow-hidden"
524
522
  }, /* @__PURE__ */ React4.createElement(AlertDialog.Title, null, t("recovery code dialog title")), /* @__PURE__ */ React4.createElement("p", {
525
- className: "py-4"
523
+ className: "plb-4"
526
524
  }, t("recovery code dialog description")), /* @__PURE__ */ React4.createElement(Clipboard3.Provider, null, /* @__PURE__ */ React4.createElement(Code, {
527
525
  code
528
526
  })), /* @__PURE__ */ React4.createElement("div", {
529
- className: "flex flex-col py-4 gap-2"
527
+ className: "flex flex-col plb-4 gap-2"
530
528
  }, /* @__PURE__ */ React4.createElement("p", null, t("recovery code dialog warning 1")), /* @__PURE__ */ React4.createElement("p", null, t("recovery code dialog warning 2"))), /* @__PURE__ */ React4.createElement("div", {
531
529
  className: "flex items-center gap-2 pbe-4"
532
530
  }, /* @__PURE__ */ React4.createElement(Input2.Root, null, /* @__PURE__ */ React4.createElement(Input2.Checkbox, {
@@ -561,7 +559,7 @@ var Code = ({ code }) => {
561
559
  key: i,
562
560
  className: "flex items-center p-2 gap-2"
563
561
  }, /* @__PURE__ */ React4.createElement("div", {
564
- className: "w-4 text-xs text-center text-subdued"
562
+ className: "is-4 text-xs text-center text-subdued"
565
563
  }, i + 1), /* @__PURE__ */ React4.createElement("div", {
566
564
  className: "text-sm"
567
565
  }, word)))));
@@ -573,22 +571,20 @@ var Code = ({ code }) => {
573
571
  // src/components/RecoveryCredentialsContainer.tsx
574
572
  import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
575
573
  import React5 from "react";
576
- import { createIntent as createIntent3, useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework";
574
+ import { createIntent as createIntent3 } from "@dxos/app-framework";
575
+ import { useIntentDispatcher as useIntentDispatcher3 } from "@dxos/app-framework/react";
577
576
  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";
577
+ import { Icon as Icon2, IconButton as IconButton2, List as List2, ListItem, Message, useTranslation as useTranslation5 } from "@dxos/react-ui";
579
578
  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`;
579
+ var MANAGE_CREDENTIALS_DIALOG = `${meta.id}/ManageCredentialsDialog`;
582
580
  var RecoveryCredentialsContainer = () => {
583
581
  var _effect = _useSignals5();
584
582
  try {
585
- const { t } = useTranslation5(CLIENT_PLUGIN);
583
+ const { t } = useTranslation5(meta.id);
586
584
  const { dispatchPromise: dispatch } = useIntentDispatcher3();
587
585
  const credentials = useCredentials();
588
586
  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, {
587
+ return /* @__PURE__ */ React5.createElement(ControlPage3, null, /* @__PURE__ */ React5.createElement(ControlSection3, {
592
588
  title: t("recovery setup dialog title"),
593
589
  description: t("recovery setup dialog description")
594
590
  }, /* @__PURE__ */ React5.createElement(ControlGroup2, null, /* @__PURE__ */ React5.createElement(ControlItem3, {
@@ -598,7 +594,6 @@ var RecoveryCredentialsContainer = () => {
598
594
  label: t("create passkey label"),
599
595
  icon: "ph--key--duotone",
600
596
  variant: "primary",
601
- size: 5,
602
597
  onClick: () => dispatch(createIntent3(ClientAction.CreatePasskey))
603
598
  })), /* @__PURE__ */ React5.createElement(ControlItem3, {
604
599
  title: t("create recovery code label"),
@@ -607,7 +602,6 @@ var RecoveryCredentialsContainer = () => {
607
602
  label: t("create recovery code label"),
608
603
  icon: "ph--receipt--duotone",
609
604
  variant: "default",
610
- size: 5,
611
605
  onClick: () => dispatch(createIntent3(ClientAction.CreateRecoveryCode))
612
606
  })))), /* @__PURE__ */ React5.createElement(ControlSection3, {
613
607
  title: t("credentials list label")
@@ -621,9 +615,8 @@ var RecoveryCredentialsContainer = () => {
621
615
  }, recoveryCredentials.map((credential) => /* @__PURE__ */ React5.createElement(ListItem.Root, {
622
616
  key: credential.id?.toHex()
623
617
  }, /* @__PURE__ */ React5.createElement(ListItem.Endcap, null, /* @__PURE__ */ React5.createElement(Icon2, {
624
- icon: "ph--key--regular",
625
- size: 5
626
- })), /* @__PURE__ */ React5.createElement(ListItem.Heading, null, credential.issuanceDate.toLocaleString())))))));
618
+ icon: "ph--key--regular"
619
+ })), /* @__PURE__ */ React5.createElement(ListItem.Heading, null, credential.issuanceDate.toLocaleString()))))));
627
620
  } finally {
628
621
  _effect.f();
629
622
  }
@@ -632,15 +625,16 @@ var RecoveryCredentialsContainer = () => {
632
625
  // src/components/ResetDialog.tsx
633
626
  import { useSignals as _useSignals6 } from "@preact-signals/safe-react/tracking";
634
627
  import React6, { useCallback as useCallback5 } from "react";
635
- import { createIntent as createIntent4, LayoutAction as LayoutAction2, useIntentDispatcher as useIntentDispatcher4 } from "@dxos/app-framework";
628
+ import { LayoutAction as LayoutAction2, createIntent as createIntent4 } from "@dxos/app-framework";
629
+ import { useIntentDispatcher as useIntentDispatcher4 } from "@dxos/app-framework/react";
636
630
  import { useClient as useClient3 } from "@dxos/react-client";
637
631
  import { Dialog as Dialog2, useTranslation as useTranslation6 } from "@dxos/react-ui";
638
632
  import { ConfirmReset } from "@dxos/shell/react";
639
- var RESET_DIALOG = `${CLIENT_PLUGIN}/ResetDialog`;
633
+ var RESET_DIALOG = `${meta.id}/ResetDialog`;
640
634
  var ResetDialog = ({ mode, onReset }) => {
641
635
  var _effect = _useSignals6();
642
636
  try {
643
- const { t } = useTranslation6(CLIENT_PLUGIN);
637
+ const { t } = useTranslation6(meta.id);
644
638
  const { dispatchPromise: dispatch } = useIntentDispatcher4();
645
639
  const client = useClient3();
646
640
  const handleReset = useCallback5(async () => {
@@ -693,4 +687,4 @@ export {
693
687
  RESET_DIALOG,
694
688
  ResetDialog
695
689
  };
696
- //# sourceMappingURL=chunk-FBYODKEL.mjs.map
690
+ //# sourceMappingURL=chunk-RGCZX67B.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 } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\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 } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\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 FormFieldMap,\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// TOOD(burdon): Factor out?\n// TODO(wittjosiah): Integrate annotations with translations.\nconst UserProfile = Schema.Struct({\n did: Schema.String.annotations({ title: 'DID' }),\n displayName: Schema.String.annotations({ title: 'Display name' }),\n emoji: Schema.String.annotations({ title: 'Avatar' }),\n hue: Schema.String.annotations({ title: 'Color' }),\n});\n\ntype UserProfile = Schema.Schema.Type<typeof UserProfile>;\n\n// TODO(thure): Factor out?\nconst getDefaultHueValue = (identity: Identity | null) => hexToHue(identity?.identityKey.toHex() ?? '0');\nconst getHueValue = (identity: Identity | null) => identity?.profile?.data?.hue || getDefaultHueValue(identity);\nconst getDefaultEmojiValue = (identity: Identity | null) => hexToEmoji(identity?.identityKey.toHex() ?? '0');\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<UserProfile>) =>\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: UserProfile) => {\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 did: identity?.did,\n displayName,\n emoji,\n hue,\n }),\n [identity, displayName, emoji, hue],\n );\n\n // TODO(wittjosiah): Integrate descriptions with the form schema.\n const fieldMap = useMemo<FormFieldMap>(\n () => ({\n displayName: ({ type, label, getValue, onValueChange }) => {\n const handleChange = useCallback(\n ({ target: { value } }: ChangeEvent<HTMLInputElement>) => onValueChange(type, value),\n [onValueChange, type],\n );\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\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\n return (\n <ControlItem title={label} description={t('hue description')}>\n <div role='none' className='flex justify-self-end'>\n <HuePicker value={getValue()} onChange={handleChange} onReset={handleHueReset} />\n </div>\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.Root schema={UserProfile} values={values} fieldMap={fieldMap} autoSave onSave={handleSave}>\n <Form.Content>\n <Form.FieldSet classNames='container-max-width grid grid-cols-1 md:grid-cols-[1fr_min-content]' />\n </Form.Content>\n </Form.Root>\n </ControlSection>\n </Clipboard.Provider>\n </ControlPage>\n );\n};\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='plb-4'>{t('recovery code dialog description')}</p>\n <Clipboard.Provider>\n <Code code={code} />\n </Clipboard.Provider>\n <div className='flex flex-col plb-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='is-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 } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\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 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 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' />\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 } from '@dxos/app-framework';\nimport { useIntentDispatcher } from '@dxos/app-framework/react';\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": "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",
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", "UserProfile", "Struct", "did", "String", "annotations", "title", "displayName", "emoji", "hue", "getDefaultHueValue", "identity", "hexToHue", "identityKey", "toHex", "getHueValue", "profile", "data", "getDefaultEmojiValue", "hexToEmoji", "getEmojiValue", "ProfileContainer", "t", "useTranslation", "meta", "id", "client", "useClient", "useIdentity", "setDisplayNameDirectly", "useState", "setEmojiDirectly", "setHueDirectly", "updateProfile", "useMemo", "debounce", "halo", "handleSave", "useCallback", "values", "fieldMap", "type", "label", "getValue", "onValueChange", "handleChange", "target", "value", "React", "ControlItemInput", "description", "Input", "TextInput", "onChange", "placeholder", "classNames", "nextEmoji", "handleEmojiReset", "ControlItem", "EmojiPickerBlock", "triggerVariant", "onChangeEmoji", "onClickClear", "nextHue", "handleHueReset", "div", "role", "className", "HuePicker", "onReset", "ButtonGroup", "disabled", "Clipboard", "IconButton", "ControlPage", "Provider", "ControlSection", "Form", "Root", "schema", "autoSave", "onSave", "Content", "FieldSet", "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", "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
+ }
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  meta
4
- } from "./chunk-SZLX4BVJ.mjs";
4
+ } from "./chunk-QT3EQXDU.mjs";
5
5
 
6
6
  // src/types/schema.ts
7
- import { Schema } from "effect";
7
+ import * as Schema from "effect/Schema";
8
8
  import { PublicKey } from "@dxos/react-client";
9
9
  var IdentitySchema = Schema.Struct({
10
10
  identityKey: Schema.instanceOf(PublicKey),
@@ -108,4 +108,4 @@ export {
108
108
  ClientAction,
109
109
  Account
110
110
  };
111
- //# sourceMappingURL=chunk-5V3RCXZV.mjs.map
111
+ //# sourceMappingURL=chunk-VENKFPBC.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/types/schema.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { type PluginContext } from '@dxos/app-framework';\nimport { type Client, type ClientOptions, PublicKey } from '@dxos/react-client';\nimport { type MaybePromise } from '@dxos/util';\n\nimport { meta } from '../meta';\n\n// TODO(wittjosiah): Factor out. Generate?\nconst IdentitySchema = Schema.Struct({\n identityKey: Schema.instanceOf(PublicKey),\n spaceKey: Schema.optional(Schema.instanceOf(PublicKey)),\n profile: Schema.optional(\n Schema.Struct({\n displayName: Schema.optional(Schema.String),\n avatarCid: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n }),\n ),\n});\n\nexport namespace ClientAction {\n const ProfileSchema = Schema.Struct({\n displayName: Schema.optional(Schema.String),\n avatarCid: Schema.optional(Schema.String),\n data: Schema.optional(Schema.Record({ key: Schema.String, value: Schema.Any })),\n });\n\n export class CreateIdentity extends Schema.TaggedClass<CreateIdentity>()(`${meta.id}/action/create-identity`, {\n input: ProfileSchema,\n output: IdentitySchema,\n }) {}\n\n export class JoinIdentity extends Schema.TaggedClass<JoinIdentity>()(`${meta.id}/action/join-identity`, {\n input: Schema.Struct({\n invitationCode: Schema.optional(Schema.String),\n }),\n output: Schema.Void,\n }) {}\n\n export class ShareIdentity extends Schema.TaggedClass<ShareIdentity>()(`${meta.id}/action/share-identity`, {\n input: Schema.Void,\n output: Schema.Void,\n }) {}\n\n export class RecoverIdentity extends Schema.TaggedClass<RecoverIdentity>()(`${meta.id}/action/recover-identity`, {\n input: Schema.Void,\n output: Schema.Void,\n }) {}\n\n export class ResetStorage extends Schema.TaggedClass<ResetStorage>()(`${meta.id}/action/reset-storage`, {\n input: Schema.Struct({\n mode: Schema.optional(Schema.String),\n }),\n output: Schema.Void,\n }) {}\n\n export class CreateAgent extends Schema.TaggedClass<CreateAgent>()(`${meta.id}/action/create-agent`, {\n input: Schema.Void,\n output: Schema.Void,\n }) {}\n\n export class CreateRecoveryCode extends Schema.TaggedClass<CreateRecoveryCode>()(\n `${meta.id}/action/create-recovery-code`,\n {\n input: Schema.Void,\n output: Schema.Void,\n },\n ) {}\n\n export class CreatePasskey extends Schema.TaggedClass<CreatePasskey>()(`${meta.id}/action/create-passkey`, {\n input: Schema.Void,\n output: Schema.Void,\n }) {}\n\n export class RedeemPasskey extends Schema.TaggedClass<RedeemPasskey>()(`${meta.id}/action/redeem-passkey`, {\n input: Schema.Void,\n output: Schema.Void,\n }) {}\n\n export class RedeemToken extends Schema.TaggedClass<RedeemToken>()(`${meta.id}/action/redeem-token`, {\n input: Schema.Struct({\n token: Schema.String,\n }),\n output: Schema.Void,\n }) {}\n}\n\nexport type ClientPluginOptions = ClientOptions & {\n /**\n * Base URL for the invitation link.\n */\n invitationUrl?: string;\n\n /**\n * Query parameter for the invitation code.\n */\n invitationParam?: string;\n\n /**\n * Run after the client has been initialized.\n */\n onClientInitialized?: (params: { context: PluginContext; client: Client }) => MaybePromise<void>;\n\n /**\n * Called when spaces are ready.\n */\n onSpacesReady?: (params: { context: PluginContext; client: Client }) => MaybePromise<void>;\n\n /**\n * Called when the client is reset.\n */\n onReset?: (params: { target?: string }) => MaybePromise<void>;\n};\n\nexport namespace Account {\n // TODO(wittjosiah): Cannot use slashes in ids until we have a router which decouples ids from url paths.\n const _id = 'dxos.org.plugin.client.account';\n // TODO(wittjosiah): This is a hack to prevent the previous deck from being set for pinned items.\n // Ideally this should be worked into the data model in a generic way.\n export const id = `!${_id}`;\n\n export const Profile = `${_id}.profile`;\n export const Devices = `${_id}.devices`;\n export const Security = `${_id}.security`;\n}\n"],
5
+ "mappings": ";;;;;;AAIA,YAAYA,YAAY;AAGxB,SAA0CC,iBAAiB;AAM3D,IAAMC,iBAAwBC,cAAO;EACnCC,aAAoBC,kBAAWC,SAAAA;EAC/BC,UAAiBC,gBAAgBH,kBAAWC,SAAAA,CAAAA;EAC5CG,SAAgBD,gBACPL,cAAO;IACZO,aAAoBF,gBAAgBG,aAAM;IAC1CC,WAAkBJ,gBAAgBG,aAAM;IACxCE,MAAaL,gBAAgBM,cAAO;MAAEC,KAAYJ;MAAQK,OAAcC;IAAI,CAAA,CAAA;EAC9E,CAAA,CAAA;AAEJ,CAAA;UAEiBC,eAAAA;AACf,QAAMC,gBAAuBhB,cAAO;IAClCO,aAAoBF,gBAAgBG,aAAM;IAC1CC,WAAkBJ,gBAAgBG,aAAM;IACxCE,MAAaL,gBAAgBM,cAAO;MAAEC,KAAYJ;MAAQK,OAAcC;IAAI,CAAA,CAAA;EAC9E,CAAA;EAEO,MAAMG,uBAA8BC,mBAAW,EAAmB,GAAGC,KAAKC,EAAE,2BAA2B;IAC5GC,OAAOL;IACPM,QAAQvB;EACV,CAAA,EAAA;EAAI;gBAHSkB,iBAAAA;EAKN,MAAMM,qBAA4BL,mBAAW,EAAiB,GAAGC,KAAKC,EAAE,yBAAyB;IACtGC,OAAcrB,cAAO;MACnBwB,gBAAuBnB,gBAAgBG,aAAM;IAC/C,CAAA;IACAc,QAAeG;EACjB,CAAA,EAAA;EAAI;gBALSF,eAAAA;EAON,MAAMG,sBAA6BR,mBAAW,EAAkB,GAAGC,KAAKC,EAAE,0BAA0B;IACzGC,OAAcI;IACdH,QAAeG;EACjB,CAAA,EAAA;EAAI;gBAHSC,gBAAAA;EAKN,MAAMC,wBAA+BT,mBAAW,EAAoB,GAAGC,KAAKC,EAAE,4BAA4B;IAC/GC,OAAcI;IACdH,QAAeG;EACjB,CAAA,EAAA;EAAI;gBAHSE,kBAAAA;EAKN,MAAMC,qBAA4BV,mBAAW,EAAiB,GAAGC,KAAKC,EAAE,yBAAyB;IACtGC,OAAcrB,cAAO;MACnB6B,MAAaxB,gBAAgBG,aAAM;IACrC,CAAA;IACAc,QAAeG;EACjB,CAAA,EAAA;EAAI;gBALSG,eAAAA;EAON,MAAME,oBAA2BZ,mBAAW,EAAgB,GAAGC,KAAKC,EAAE,wBAAwB;IACnGC,OAAcI;IACdH,QAAeG;EACjB,CAAA,EAAA;EAAI;gBAHSK,cAAAA;EAKN,MAAMC,2BAAkCb,mBAAW,EACxD,GAAGC,KAAKC,EAAE,gCACV;IACEC,OAAcI;IACdH,QAAeG;EACjB,CAAA,EAAA;EACC;gBANUM,qBAAAA;EAQN,MAAMC,sBAA6Bd,mBAAW,EAAkB,GAAGC,KAAKC,EAAE,0BAA0B;IACzGC,OAAcI;IACdH,QAAeG;EACjB,CAAA,EAAA;EAAI;gBAHSO,gBAAAA;EAKN,MAAMC,sBAA6Bf,mBAAW,EAAkB,GAAGC,KAAKC,EAAE,0BAA0B;IACzGC,OAAcI;IACdH,QAAeG;EACjB,CAAA,EAAA;EAAI;gBAHSQ,gBAAAA;EAKN,MAAMC,oBAA2BhB,mBAAW,EAAgB,GAAGC,KAAKC,EAAE,wBAAwB;IACnGC,OAAcrB,cAAO;MACnBmC,OAAc3B;IAChB,CAAA;IACAc,QAAeG;EACjB,CAAA,EAAA;EAAI;gBALSS,cAAAA;AAMf,GAjEiBnB,iBAAAA,eAAAA,CAAAA,EAAAA;UA8FAqB,UAAAA;AAEf,QAAMC,MAAM;WAGCjB,KAAK,IAAIiB,GAAAA;WAETC,UAAU,GAAGD,GAAAA;WACbE,UAAU,GAAGF,GAAAA;WACbG,WAAW,GAAGH,GAAAA;AAC7B,GAViBD,YAAAA,UAAAA,CAAAA,EAAAA;;;",
6
+ "names": ["Schema", "PublicKey", "IdentitySchema", "Struct", "identityKey", "instanceOf", "PublicKey", "spaceKey", "optional", "profile", "displayName", "String", "avatarCid", "data", "Record", "key", "value", "Any", "ClientAction", "ProfileSchema", "CreateIdentity", "TaggedClass", "meta", "id", "input", "output", "JoinIdentity", "invitationCode", "Void", "ShareIdentity", "RecoverIdentity", "ResetStorage", "mode", "CreateAgent", "CreateRecoveryCode", "CreatePasskey", "RedeemPasskey", "RedeemToken", "token", "Account", "_id", "Profile", "Devices", "Security"]
7
+ }